r1ch.net forums
Welcome,
Guest
. Please
login
or
register
.
May 20, 2013, 10:23:28 am
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
Search:
Advanced search
r1ch.net
|
General
|
General Discussion
| Topic:
Trying to fix the Siamese Twins problem...
Pages:
1
2
[
3
]
All
Author
Topic: Trying to fix the Siamese Twins problem... (Read 28711 times)
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #30 on:
June 11, 2007, 09:13:29 am »
here the pseudocode of my solution...
Quote
while can find "origin" into String do {
strReplaceFirst (String, origin, fhajas); // replace FIRST origin for fhajas in the string
posA = find 3rd space after fhajas;
posB = find next " after posA;
Str1 = GetSubstring (String[0],posA);
Str2 = GetSubstring (posB,String[size]);
num = GetSubstring (posA, posB);
ToNumber(num) += 15;
String = Str1 + num + Str2;
}
strReplace (String, fhajas, origin) // replace ALL fhajas for origin in the string
any better ideas?
«
Last Edit: June 11, 2007, 09:21:05 am by hajas
»
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #31 on:
June 11, 2007, 11:50:09 am »
well, I realize that I can't change all origins, because I'll cause problems to other classes....
so I can only change
info_player_deathmatch
and
info_player_start
classes
so here the new pseudocode to solve this:
Quote
set working = 1;
while working == 1 {
if "{" not found{
set working = 0;
else{
subs = GetSubstring(String, first {, first });
Str1 = GetSubstring (String[0], subs[0]);
Str2 = GetSubstring (subs[size],String[size]);
if found (info_player_deathmatch || info_player_start) in subs {
find "origin" location;
posA = find 3rd space after origin location;
posB = find next " after posA;
Subs1 = GetSubstring (subs[0],posA);
Subs2 = GetSubstring (posB,subs[size]);
num = GetSubstring (posA, posB);
ToNumber(num) += 15;
subs = Subs1 + num + Subs2;
ReplaceAll (subs, {, [);
ReplaceAll (subs, }, ]);
}
}
}
ReplaceAll (String, [, {);
ReplaceAll (String, ], });
any inputs?
«
Last Edit: June 11, 2007, 12:16:30 pm by hajas
»
Logged
R1CH
Administrator
Member
Posts: 2625
Re: Trying to fix the Siamese Twins problem...
«
Reply #32 on:
June 11, 2007, 11:53:39 am »
You may want to look in Com_Parse, Q2 already has a tokenizer you can use.
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #33 on:
June 12, 2007, 01:35:37 pm »
hmmm... very insteresting stuff...
where I set the token the string? I don't get it...
I was thinking in do something like this with
strtok
inside the loop:
Code:
SubString = strtok(String,'}');
correct me if I'm wrong, with that I'll have everything in the
String
until the } point copied to that
SubString
variable.
than I can work with that substring, and create another variable that will save the new string.
and when execute again will copy from the next char after last char copied first, until the next }, and goes on...
so in each passage of the loop will copy each entity to that
SubString
... am I right?
thanks again m8!
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #34 on:
June 13, 2007, 03:04:13 pm »
well, I quit to try find good functions, and done everything by hand... so please take a look at this code:
Code:
static void CM_LoadEntityString (const byte *data, const lump_t *l){
char *game = Cvar_VariableString("fs_game");
int
i, j, Tam, TamNew;
int
PA, PB, PC, PD, PL, L1, Num, Espaco, Aspas;
char
*p, *ori, *HStr, *NewStr, *FinalStr;
char
*PartA, *PartB, *PartC, *PartD;
cm_numEntityChars = l->fileLen;
if (cm_numEntityChars < 1)
return;
if (cm_numEntityChars > MAX_MAP_ENTSTRING)
Com_Error(ERR_DROP, "CM_LoadMap: map '%s' has too large entity lump", cm_map);
cm_entityString = Hunk_Alloc(cm_numEntityChars + 1);
memcpy(cm_entityString, data + l->fileOfs, cm_numEntityChars);
if (!Q_stricmp(game, "arena")){
HStr = cm_entityString; // copy the original string to mine
Tam = strlen(HStr);
// do string manipulation over cm_entityString
i=0;
j=0;
while (j<Tam){
while (HStr[j] != '}'){ // copy to NewStr each Class
NewStr[i] = HStr[j];
i++;j++;
}
NewStr[i] = HStr[j]; //add '}' to the end of the class
p = strstr(NewStr, "info_player"); //see if is a spawn class
if (!p){
FinalStr = strcat( FinalStr, NewStr ); //if not, save and go to the next class
}else{
//if yes, start the hard work
ori = strstr(NewStr, "origin"); //find the origin position
// than add +8 (origin" ") to that position, which will reach the numbers of the axis
L1=ori+8; //------------------------------------------------- NEED TO CONVERT????!!!
// find PartA from 0 to L1
for (PA=0;PA==L1;PA++) //seta parte 1/4
{
PartA[PA]=NewStr[PA];
}
PL=PA; //creat a new var to control the place in NewStr
Espaco=0; //set to have zero spaces count
// find PartB from start of numbers until 2nd space
for (PB=0;Espaco!=2;PB++) //set part 2/4
{
PL++;
PartB[PB]=NewStr[PL];
if (PartB[PB]==" ")
Espaco++;
}
Aspas=0; //set to plics to zero count
// find PartC which is the Number, until reach next "
for (PC=0;Aspas==1;PC++) //set part 3/4 = Num
{
PL++;
if (NewStr[PL]=='"')
Aspas = 1;
else
PartC[PC]=NewStr[PL];
}
TamNew = strlen(NewStr); //find the size of NewStr
// find PartD from " after number until the end of class
for (PD=0;PL==TamNew;PD++) //set part 4/4
{
PartD[PD]=NewStr[PL];
PL++;
}
// Convert to Number
Num=PartC; //------------------------------------------------- HOW TO CONVERT????!!!
Num += 15; //add 15
NewStr = strcat( PartA, PartB ); // make all 4 parts into one
NewStr = strcat( NewStr, Num ); //------------------------------------------------- NEED TO CONVERT????!!!
NewStr = strcat( NewStr, PartD );
FinalStr = strcat( FinalStr, NewStr ); // add all NewStr to FinalStr
}
i=0; //NewStr count to zero
j++;
NewStr=""; //erase NewStr
}
cm_entityString = FinalStr; //replace the original by the new altered one
}
}
ok, I know need few funcions of convertions or some other thing must be done in the wrong way... please fix everything that you find not good.
thanks a lot!
«
Last Edit: June 14, 2007, 09:24:08 am by hajas
»
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #35 on:
June 14, 2007, 08:35:47 am »
I updated the code with a more commented version fixing some small problems too.
«
Last Edit: June 14, 2007, 09:27:16 am by hajas
»
Logged
R1CH
Administrator
Member
Posts: 2625
Re: Trying to fix the Siamese Twins problem...
«
Reply #36 on:
June 14, 2007, 10:49:42 am »
You can use atoi to convert a string to an integer, eg i = atoi("3") will set i to 3. To go the other way, you need to use sprintf into a buffer, eg char buff[16]; sprintf (buff, "%d", i);
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #37 on:
June 14, 2007, 11:34:41 am »
I did with atoi function... but look what I found in Q2E code (probally the same as Q2):
Code:
/*
==============
SpawnEntities
Creates a server's entity / program execution context by
parsing textual entity definitions out of an ent file.
==============
*/
void SpawnEntities (char *mapname, char *entities, char *spawnpoint)
{
edict_t
*ent;
int
inhibit;
char
*com_token;
int
i;
float
skill_level;
skill_level = floor (skill->value);
if (skill_level < 0)
skill_level = 0;
if (skill_level > 3)
skill_level = 3;
if (skill->value != skill_level)
gi.cvar_forceset("skill", va("%f", skill_level));
SaveClientData ();
gi.FreeTags (TAG_LEVEL);
memset (&level, 0, sizeof(level));
memset (g_edicts, 0, game.maxentities * sizeof (g_edicts[0]));
strncpy (level.mapname, mapname, sizeof(level.mapname)-1);
strncpy (game.spawnpoint, spawnpoint, sizeof(game.spawnpoint)-1);
// set client fields on player ents
for (i=0 ; i<game.maxclients ; i++)
g_edicts[i+1].client = game.clients + i;
ent = NULL;
inhibit = 0;
// parse ents
while (1)
{
// parse the opening brace
com_token = Com_Parse (&entities);
if (!entities)
break;
if (com_token[0] != '{')
gi.error ("ED_LoadFromFile: found %s when expecting {",com_token);
if (!ent)
ent = g_edicts;
else
ent = G_Spawn ();
entities = ED_ParseEdict (entities, ent); //--------------------------------LOOK HERE!!!
// yet another map hack
if (!Q_stricmp(level.mapname, "command") && !Q_stricmp(ent->classname, "trigger_once") && !Q_stricmp(ent->model, "*27"))
ent->spawnflags &= ~SPAWNFLAG_NOT_HARD;
// remove things (except the world) from different skill levels or deathmatch
if (ent != g_edicts)
{
if (deathmatch->value)
{
if ( ent->spawnflags & SPAWNFLAG_NOT_DEATHMATCH )
{
G_FreeEdict (ent);
inhibit++;
continue;
}
}
else
{
if ( /* ((coop->value) && (ent->spawnflags & SPAWNFLAG_NOT_COOP)) || */
((skill->value == 0) && (ent->spawnflags & SPAWNFLAG_NOT_EASY)) ||
((skill->value == 1) && (ent->spawnflags & SPAWNFLAG_NOT_MEDIUM)) ||
(((skill->value == 2) || (skill->value == 3)) && (ent->spawnflags & SPAWNFLAG_NOT_HARD))
)
{
G_FreeEdict (ent);
inhibit++;
continue;
}
}
ent->spawnflags &= ~(SPAWNFLAG_NOT_EASY|SPAWNFLAG_NOT_MEDIUM|SPAWNFLAG_NOT_HARD|SPAWNFLAG_NOT_COOP|SPAWNFLAG_NOT_DEATHMATCH);
}
ED_CallSpawn (ent);
}
gi.dprintf ("%i entities inhibited\n", inhibit);
#ifdef DEBUG
i = 1;
ent = EDICT_NUM(i);
while (i < globals.num_edicts) {
if (ent->inuse != 0 || ent->inuse != 1)
Com_DPrintf("Invalid entity %d\n", i);
i++, ent++;
}
#endif
G_FindTeams ();
PlayerTrail_Init ();
}
than call this
Code:
/*
====================
ED_ParseEdict
Parses an edict out of the given string, returning the new position
ed should be a properly initialized empty edict.
====================
*/
char *ED_ParseEdict (char *data, edict_t *ent)
{
qboolean
init;
char
keyname[256];
char
*com_token;
init = false;
memset (&st, 0, sizeof(st));
// go through all the dictionary pairs
while (1)
{
// parse key
com_token = Com_Parse (&data);
if (com_token[0] == '}')
break;
if (!data)
gi.error ("ED_ParseEntity: EOF without closing brace");
strncpy (keyname, com_token, sizeof(keyname)-1);
// parse value
com_token = Com_Parse (&data);
if (!data)
gi.error ("ED_ParseEntity: EOF without closing brace");
if (com_token[0] == '}')
gi.error ("ED_ParseEntity: closing brace without data");
init = true;
// keynames with a leading underscore are used for utility comments,
// and are immediately discarded by quake
if (keyname[0] == '_')
continue;
ED_ParseField (keyname, com_token, ent);
}
if (!init)
memset (ent, 0, sizeof(*ent));
return data;
}
which call this:
Code:
/*
===============
ED_ParseField
Takes a key/value pair and sets the binary values
in an edict
===============
*/
void ED_ParseField (char *key, char *value, edict_t *ent)
{
field_t
*f;
byte
*b;
float
v;
vec3_t
vec;
for (f=fields ; f->name ; f++)
{
if (!(f->flags & FFL_NOSPAWN) && !Q_stricmp(f->name, key))
{
// found it
if (f->flags & FFL_SPAWNTEMP)
b = (byte *)&st;
else
b = (byte *)ent;
switch (f->type)
{
case F_LSTRING:
*(char **)(b+f->ofs) = ED_NewString (value);
break;
case F_VECTOR:
sscanf (value, "%f %f %f", &vec[0], &vec[1], &vec[2]);
((float *)(b+f->ofs))[0] = vec[0];
((float *)(b+f->ofs))[1] = vec[1];
((float *)(b+f->ofs))[2] = vec[2]; //-------------------------------------------- is that value what I'm looking for to update? (if was info_player)
break;
case F_INT:
*(int *)(b+f->ofs) = atoi(value);
break;
case F_FLOAT:
*(float *)(b+f->ofs) = atof(value);
break;
case F_ANGLEHACK:
v = atof(value);
((float *)(b+f->ofs))[0] = 0;
((float *)(b+f->ofs))[1] = v;
((float *)(b+f->ofs))[2] = 0;
break;
case F_IGNORE:
break;
}
return;
}
}
gi.dprintf ("%s is not a field\n", key);
}
«
Last Edit: June 14, 2007, 11:37:33 am by hajas
»
Logged
R1CH
Administrator
Member
Posts: 2625
Re: Trying to fix the Siamese Twins problem...
«
Reply #38 on:
June 14, 2007, 11:37:17 am »
As I said, Q2 already has tokenizers / parsers for entity strings. You can use those, or you can make your own.
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #39 on:
June 14, 2007, 12:05:55 pm »
ok.... did you succeed in change the RA2 DLL with an Hex/Decompiler?
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #40 on:
June 14, 2007, 02:19:25 pm »
wth! will be so easy to fix that if I have the RA2 source!!!
these functions are great, but are all in DLL part, so I can't change... and if I remake then to only get the values, I will need to reconstruct the string anyway, and will be really hard to do that in that way... so my code was the best solution to do that via code until now...
please let me know if you did any progress in editing direct the RA2 DLL.
thanks m8!
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #41 on:
June 20, 2007, 03:26:36 pm »
any news r1ch?
Logged
R1CH
Administrator
Member
Posts: 2625
Re: Trying to fix the Siamese Twins problem...
«
Reply #42 on:
June 20, 2007, 03:46:21 pm »
RA2 spawn code is quite different from vanilla Q2DM, so I wasn't able to trace where the origin is set. More specifically, the ent->s.origin[2] += 1 is not present in RA2.
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #43 on:
June 21, 2007, 07:41:14 am »
thanks m8 for try... I'm pretty close to solve the problem when read the maps...
Logged
hajas
Member
Posts: 44
Re: Trying to fix the Siamese Twins problem...
«
Reply #44 on:
June 21, 2007, 03:29:16 pm »
Ok, I done everything that I could to fix the siamese twins bug, and I FIXED!!!!
but I'm having a little problem.... when I quit the server the game abort, or when I change the map for the 3rd time the game abort... I still don't know why... the string was altered with perfection, but seams that I miss something, maybe I need to use memcpy too?
well, here the final code:
I commented the file recording and the ARENA test to see the spawnpoints higher even in DM, and works really perfect! no one problem about that... attached you can find the files recorded to you see that manipulation was perfect!
Code:
static void CM_LoadEntityString (const byte *data, const lump_t *l){
char
*game = Cvar_VariableString("fs_game"); // declare game - Hajas
//FILE
*f;
char
*p, *loc, *origem;
char
*ptr = malloc(151);
int
i, j, k, Tam, TamNew, ori;
int
PA, PB, PC, PD, PL, Num, Space, Aspas;
char
HStr[MAX_MAP_ENTSTRING], FinalStr[MAX_MAP_ENTSTRING];
char
NewStr[150], PartA[150], PartB[150], PartC[20], PartD[150];
cm_numEntityChars = l->fileLen;
if (cm_numEntityChars < 1)
return;
if (cm_numEntityChars > MAX_MAP_ENTSTRING)
Com_Error(ERR_DROP, "CM_LoadMap: map '%s' has too large entity lump", cm_map);
cm_entityString = Hunk_Alloc(MAX_MAP_ENTSTRING);
memcpy(cm_entityString, data + l->fileOfs, cm_numEntityChars);
//f = fopen ("entityORI.cfg", "wb");
//fprintf(f, "%s\n", cm_entityString);
//fclose(f);
//if (!Q_stricmp(game, "arena")){
// do string manipulation over cm_entityString
strcpy(HStr, cm_entityString); // copy the original string to mine
Tam = strlen(HStr);
j=0;
while (j < Tam){
i=0;
while ((HStr[j] != '}') && (j < Tam)){ // copy to NewStr each Class
NewStr[i] = HStr[j];
i++;j++;
}
if (HStr[j] == '}'){
NewStr[i] = HStr[j]; //add '}' close the class
NewStr[i+1] = '\0'; //add '\0' to the end of the class
}
TamNew = strlen(NewStr); //find the size of NewStr
p = strstr(NewStr, "info_player");
if (!p){ //test if is a spawn class
strcat( FinalStr, NewStr ); //if not, save and go to the next class
}else{
i=0; //NewStr count to zero
//if yes, start the hard work
strcpy(ptr,NewStr);
origem = strstr(ptr, "origin"); //find the origin position
loc = origem-ptr;
free(ptr);
ori = loc + 8; // then add +8 (origin" ") to that position, which will reach the numbers of the axis
free(loc);
free(origem);
// find PartA from 0 to L1 // until ori now
for (PA=0;PA!=ori;PA++) //seta parte 1/4
{
PartA[PA]=NewStr[PA];
}
PartA[PA]='\0'; //close string
PL=PA; //create a new var to control the place in NewStr
Space=0; //set to have zero spaces count
PB=0; //zera PB
// find PartB from start of numbers until 2nd space
while (Space!=2)
{
PartB[PB]=NewStr[PL];
if (PartB[PB]==' '){
Space++;
}
if(Space!=2){
PB++;PL++;
}
}
PartB[PB+1]='\0'; //close string
Aspas=0; //set to plics to zero count
// find PartC which is the Number, until reach next "
for (PC=0;Aspas==0;PC++) //set part 3/4 = Num
{
PL++;
if (NewStr[PL]=='"')
Aspas = 1;
else
PartC[PC]=NewStr[PL];
}
PartC[PC]='\0';
// find PartD from " after number until the end of class
for (PD=0;PL <= TamNew;PD++) //set part 4/4
{
PartD[PD]=NewStr[PL];
PL++;
}
Num=atoi(PartC); // Convert to Number
Num += 15; //add 15
strcat( FinalStr, PartA ); // make all 4 parts into one
strcat( FinalStr, PartB);
sprintf(PartC,"%d",Num); // Num to String
strcat( FinalStr, PartC);
strcat( FinalStr, PartD );
}
for (k=0;k<=i;k++){ //clean NewStr
NewStr[k]='\0';
}
j++;
}
strcpy(cm_entityString, FinalStr);
/*f = fopen ("FinalStr.cfg", "wb");
fprintf(f, "%s\n", cm_entityString);
fclose(f);*/
free(p);
//}
}
with or without this line, we have the SAME behavior... abort when the third map is loaded.
Code:
strcpy(cm_entityString, FinalStr);
so isn't when the
cm_entityString
is altered...
here the log file with developer 1
Code:
*** Log file opened on Thu Jun 21 15:23:04 2007 ***
Hunk_Clear: reset the hunk, ok
OS: Windows XP
RAM: 510 MB
Detecting CPU... Found Intel Pentium 4 2391 MHz w/ MMX SSE2
Winsock Initialized
NET_UDPSocket( localhost, 27910 )
HostName: E4203
IP: 10.10.4.203
======= Quake 2 Evolved Initialized =======
Execing dm.cfg
Cvar_Set2: timelimit "1"
SV_WipeSaveGame( current )
SV_GameMap( q2dm1 )
Cvar_Set2: sv_nextServer ""
------- Server Initialization -------
Server: q2dm1
Cvar_Set2: paused "0"
Hunk_Clear: reset the hunk, ok
----- FS_Startup -----
Current search path:
C:\q2/baseq2/q2e_pak0.pk2 (594 files)
C:\q2/baseq2/q2e_extras.pk2 (106 files)
C:\q2/baseq2/pak2.pak (2 files)
C:\q2/baseq2/pak1.pak (279 files)
C:\q2/baseq2/pak0.pak (1106 files)
C:\q2/baseq2
----------------------
2087 files in PAK/PK2 files
Cvar_Set2: deathmatch "1"
Cvar_Set2: maxclients "8"
Loading DLL file q2e_gamex86.dll...
-------- Game Initialization --------
gamename: baseq2
gamedate: Jun 21 2007
CM_LoadMap( maps/q2dm1.bsp, 0 )
Cvar_Set2: sv_gravity "800"
0 entities inhibited
0 teams with 0 entities
Cvar_Set2: needpass "0"
Cvar_Set2: sv_mapName "q2dm1"
Cvar_Set2: sv_mapChecksum "80717714"
-------------------------------------
Master server at 192.246.40.32:27900
Sending heartbeat to 192.246.40.32:27900...
]map q2dm2
SV_WipeSaveGame( current )
SV_GameMap( q2dm2 )
Cvar_Set2: sv_nextServer ""
------- Server Initialization -------
Server: q2dm2
Cvar_Set2: paused "0"
Hunk_Clear: reset the hunk, ok
------- Server Shutdown -------
Sending heartbeat to 192.246.40.32:27900...
==== ShutdownGame ====
Unloading DLL file 'q2e_gamex86.dll'...
-------------------------------
----- FS_Startup -----
Current search path:
C:\q2/baseq2/q2e_pak0.pk2 (594 files)
C:\q2/baseq2/q2e_extras.pk2 (106 files)
C:\q2/baseq2/pak2.pak (2 files)
C:\q2/baseq2/pak1.pak (279 files)
C:\q2/baseq2/pak0.pak (1106 files)
C:\q2/baseq2
----------------------
2087 files in PAK/PK2 files
Cvar_Set2: deathmatch "1"
Loading DLL file q2e_gamex86.dll...
-------- Game Initialization --------
gamename: baseq2
gamedate: Jun 21 2007
CM_LoadMap( maps/q2dm2.bsp, 0 )
Cvar_Set2: sv_gravity "800"
0 entities inhibited
1 teams with 2 entities
Cvar_Set2: needpass "0"
Cvar_Set2: sv_mapName "q2dm2"
Cvar_Set2: sv_mapChecksum "2935146665"
-------------------------------------
Sending heartbeat to 192.246.40.32:27900...
]map q2dm1
SV_WipeSaveGame( current )
SV_GameMap( q2dm1 )
Cvar_Set2: sv_nextServer ""
------- Server Initialization -------
Server: q2dm1
Cvar_Set2: paused "0"
Hunk_Clear: reset the hunk, ok
------- Server Shutdown -------
Sending heartbeat to 192.246.40.32:27900...
==== ShutdownGame ====
Unloading DLL file 'q2e_gamex86.dll'...
-------------------------------
----- FS_Startup -----
Current search path:
C:\q2/baseq2/q2e_pak0.pk2 (594 files)
C:\q2/baseq2/q2e_extras.pk2 (106 files)
C:\q2/baseq2/pak2.pak (2 files)
C:\q2/baseq2/pak1.pak (279 files)
C:\q2/baseq2/pak0.pak (1106 files)
C:\q2/baseq2
----------------------
2087 files in PAK/PK2 files
Cvar_Set2: deathmatch "1"
Loading DLL file q2e_gamex86.dll...
-------- Game Initialization --------
gamename: baseq2
gamedate: Jun 21 2007
CM_LoadMap( maps/q2dm1.bsp, 0 )
when we quit the server, the game freeze with this loq:
Code:
*** Log file opened on Thu Jun 21 15:33:13 2007 ***
Hunk_Clear: reset the hunk, ok
OS: Windows XP
RAM: 510 MB
Detecting CPU... Found Intel Pentium 4 2391 MHz w/ MMX SSE2
Winsock Initialized
NET_UDPSocket( localhost, 27910 )
HostName: E4203
IP: 10.10.4.203
======= Quake 2 Evolved Initialized =======
Execing dm.cfg
Cvar_Set2: timelimit "1"
SV_WipeSaveGame( current )
SV_GameMap( q2dm1 )
Cvar_Set2: sv_nextServer ""
------- Server Initialization -------
Server: q2dm1
Cvar_Set2: paused "0"
Hunk_Clear: reset the hunk, ok
----- FS_Startup -----
Current search path:
C:\q2/baseq2/q2e_pak0.pk2 (594 files)
C:\q2/baseq2/q2e_extras.pk2 (106 files)
C:\q2/baseq2/pak2.pak (2 files)
C:\q2/baseq2/pak1.pak (279 files)
C:\q2/baseq2/pak0.pak (1106 files)
C:\q2/baseq2
----------------------
2087 files in PAK/PK2 files
Cvar_Set2: deathmatch "1"
Cvar_Set2: maxclients "8"
Loading DLL file q2e_gamex86.dll...
-------- Game Initialization --------
gamename: baseq2
gamedate: Jun 21 2007
CM_LoadMap( maps/q2dm1.bsp, 0 )
Cvar_Set2: sv_gravity "800"
0 entities inhibited
0 teams with 0 entities
Cvar_Set2: needpass "0"
Cvar_Set2: sv_mapName "q2dm1"
Cvar_Set2: sv_mapChecksum "80717714"
-------------------------------------
Master server at 192.246.40.32:27900
Sending heartbeat to 192.246.40.32:27900...
]quit
------- Server Shutdown -------
Sending heartbeat to 192.246.40.32:27900...
==== ShutdownGame ====
Unloading DLL file 'q2e_gamex86.dll'...
-------------------------------
attached are the strings (original and altered ones)... you will see that are the same, aside the altered (FinalStr) have more 15 added to his origin.Z, are the only difference between them...
and in game works very well!
now I need a little more help from you to finish this hard task!
thanks a lot!
entityORI.txt
(12.62 KB - downloaded 87 times.)
FinalStr.txt
(12.62 KB - downloaded 72 times.)
Logged
Pages:
1
2
[
3
]
All
r1ch.net
|
General
|
General Discussion
| Topic:
Trying to fix the Siamese Twins problem...
Jump to:
Please select a destination:
-----------------------------
General
-----------------------------
=> General Discussion
-----------------------------
r1ch.net stuff
-----------------------------
=> Bitchbot
=> r1dll / foobar2000 plugins
=> Other Projects
=> R1Q2
===> OpenTDM
=> Anticheat