Created
April 26, 2015 20:46
-
-
Save riicchhaarrd/2770cd9ae3b075bd4234 to your computer and use it in GitHub Desktop.
GSC GetArrayKeys/Scr_GetArray/Array contents [CoD2 1.2/1.3 - libcod]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#if COD2_VERSION == COD2_VERSION_1_2 | |
unsigned short (*GetVariableName)(unsigned short) = (unsigned short(*)(unsigned short))0x807CFF6; | |
unsigned short (*GetNextVariable)(unsigned short) = (unsigned short(*)(unsigned short))0x807CF52; //idk original funcname | |
#elif COD2_VERSION == COD2_VERSION_1_3 | |
unsigned short (*GetVariableName)(unsigned short) = (unsigned short(*)(unsigned short))0x807D0C2; | |
unsigned short (*GetNextVariable)(unsigned short) = (unsigned short(*)(unsigned short))0x807D01E; //idk original funcname | |
#else | |
unsigned short (*GetVariableName); | |
unsigned short (*GetNextVariable); | |
#endif | |
unsigned short get_var_by_idx(unsigned short index) { | |
#if COD2_VERSION == COD2_VERSION_1_2 | |
unsigned short *words = (unsigned short*)0x817C902; | |
#elif COD2_VERSION == COD2_VERSION_1_3 | |
unsigned short *words = (unsigned short*)0x817D922; | |
#else | |
unsigned short *words = (unsigned short*)0xdeadbeef; | |
#endif | |
return words[6 * index]; | |
} | |
//thanks to riicchhaarrd/php | |
unsigned short Scr_GetArray(int index) { | |
#if COD2_VERSION == COD2_VERSION_1_2 | |
int stack = 0x83D7A10; | |
#elif COD2_VERSION == COD2_VERSION_1_3 | |
int stack = 0x83D8A90; | |
#else | |
int stack = 0xbadc0de; | |
#endif | |
int base = *(int*)(stack - 8 * index); //in cod1 its without dereferencing the ptr | |
int vartype = *(int*)(base + 4); | |
//parm count check here | |
//if(vartype == 7) //VT_OBJECT | |
return *(unsigned short*)base; | |
//error param doesn't exist. | |
//Scr_Error("error parameter does not exist!\n"); | |
printf("scr_error\n"); | |
return 0; | |
} | |
#if COD2_VERSION == COD2_VERSION_1_2 | |
char *(*SL_ConvertToString)(unsigned short) = (char*(*)(unsigned short))0x8078E1A; | |
#elif COD2_VERSION == COD2_VERSION_1_3 | |
char *(*SL_ConvertToString)(unsigned short) = (char*(*)(unsigned short))0x8078EE6; | |
#else | |
char *SL_ConvertToString() { return NULL; }//error_wrong_patch | |
#endif | |
void Scr_GetArrayKeys(int a) { | |
unsigned short arrIndex = Scr_GetArray(0); | |
alloc_object_and_push_to_array(); | |
unsigned short i, var; | |
for(i = GetNextVariable(arrIndex); i != 0;) { | |
//printf("%d: %s = %s\n", i, SL_ConvertToString(GetVariableName(i)), SL_ConvertToString(var)); | |
stackPushString(SL_ConvertToString(GetVariableName(i))); | |
push_previous_var_in_array_sub(); | |
i = GetNextVariable(i); | |
var = get_var_by_idx(i); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment