Skip to content

Commit

Permalink
Add only lookup version of G_FindConfigstringIndex()
Browse files Browse the repository at this point in the history
  • Loading branch information
kungfooman committed Dec 29, 2014
1 parent 9959906 commit 008ca86
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 24 deletions.
45 changes: 23 additions & 22 deletions gsc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,28 +223,29 @@ Scr_Function scriptFunctions[] = {
#endif

#if COMPILE_UTILS == 1
{"disableGlobalPlayerCollision", gsc_utils_disableGlobalPlayerCollision, 0},
{"getAscii" , gsc_utils_getAscii , 0},
{"system" , gsc_utils_system , 0},
{"file_link" , gsc_utils_file_link , 0},
{"file_unlink" , gsc_utils_file_unlink , 0},
{"file_exists" , gsc_utils_file_exists , 0},
{"FS_LoadDir" , gsc_utils_FS_LoadDir , 0},
{"getType" , gsc_utils_getType , 0},
{"stringToFloat" , gsc_utils_stringToFloat , 0},
{"rundll" , gsc_utils_rundll , 0},
{"Cmd_ExecuteString" , gsc_utils_ExecuteString , 0},
{"sendGameServerCommand" , gsc_utils_sendgameservercommand , 0},
{"scandir" , gsc_utils_scandir , 0},
{"fopen" , gsc_utils_fopen , 0},
{"fread" , gsc_utils_fread , 0},
{"fwrite" , gsc_utils_fwrite , 0},
{"fclose" , gsc_utils_fclose , 0},
{"sprintf" , gsc_utils_sprintf , 0},
{"add_language" , gsc_add_language , 0},
{"load_languages" , gsc_load_languages , 0},
{"get_language_item" , gsc_get_language_item , 0},
{"G_FindConfigstringIndex" , gsc_G_FindConfigstringIndex , 0},
{"disableGlobalPlayerCollision" , gsc_utils_disableGlobalPlayerCollision, 0},
{"getAscii" , gsc_utils_getAscii , 0},
{"system" , gsc_utils_system , 0},
{"file_link" , gsc_utils_file_link , 0},
{"file_unlink" , gsc_utils_file_unlink , 0},
{"file_exists" , gsc_utils_file_exists , 0},
{"FS_LoadDir" , gsc_utils_FS_LoadDir , 0},
{"getType" , gsc_utils_getType , 0},
{"stringToFloat" , gsc_utils_stringToFloat , 0},
{"rundll" , gsc_utils_rundll , 0},
{"Cmd_ExecuteString" , gsc_utils_ExecuteString , 0},
{"sendGameServerCommand" , gsc_utils_sendgameservercommand , 0},
{"scandir" , gsc_utils_scandir , 0},
{"fopen" , gsc_utils_fopen , 0},
{"fread" , gsc_utils_fread , 0},
{"fwrite" , gsc_utils_fwrite , 0},
{"fclose" , gsc_utils_fclose , 0},
{"sprintf" , gsc_utils_sprintf , 0},
{"add_language" , gsc_add_language , 0},
{"load_languages" , gsc_load_languages , 0},
{"get_language_item" , gsc_get_language_item , 0},
{"G_FindConfigstringIndex" , gsc_G_FindConfigstringIndex , 0},
{"G_FindConfigstringIndexOriginal", gsc_G_FindConfigstringIndexOriginal , 0},
#endif

#if COMPILE_TCC == 1
Expand Down
36 changes: 34 additions & 2 deletions gsc_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -757,15 +757,17 @@ void gsc_utils_fclose() {
}

// http://code.metager.de/source/xref/RavenSoftware/jediacademy/code/game/g_utils.cpp#36
void gsc_G_FindConfigstringIndex() {
void gsc_G_FindConfigstringIndexOriginal() {
char *name;
int min, max, create;
if ( ! stackGetParams("siii", &name, &min, &max, &create)) {
stackPushUndefined();
return;
}
signed int (*sig)(char *name, int min, int max, int create, char *errormessage);
#if COD_VERSION == COD2_1_2
#if COD_VERSION == COD2_1_0
*(int*)&sig = 0x0811AE70;
#elif COD_VERSION == COD2_1_2
*(int*)&sig = 0x0811D1A4;
#elif COD_VERSION == COD2_1_3
*(int*)&sig = 0x0811D300;
Expand All @@ -775,4 +777,34 @@ void gsc_G_FindConfigstringIndex() {
stackPushInt(ret);
}

// simple version, without crash
void gsc_G_FindConfigstringIndex()
{
char *name;
int min, max;
char* (*func)(int i);
if ( ! stackGetParams("sii", &name, &min, &max)) {
stackPushUndefined();
return;
}
#if COD_VERSION == COD2_1_0
*(int*)&func = 0x08091108;
#elif COD_VERSION == COD2_1_2
*(int*)&func = 0x08092918;
#elif COD_VERSION == COD2_1_3
*(int*)&func = 0x08092a1c;
#endif
for (int i = 1; i < max; i++) {
char *curitem = func(min + i);
if ( ! *curitem)
break;
if ( ! strcasecmp(name, curitem)) {
stackPushInt(i + min);
return;
}
}
stackPushInt(0);
return;
}

#endif
1 change: 1 addition & 0 deletions gsc_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ void gsc_utils_ExecuteString();
void gsc_utils_sendgameservercommand();
void gsc_utils_scandir();
void gsc_G_FindConfigstringIndex();
void gsc_G_FindConfigstringIndexOriginal();

void gsc_add_language();
void gsc_load_languages();
Expand Down

0 comments on commit 008ca86

Please sign in to comment.