--- Daodan/src/Patches/BSL.c 2014/04/07 10:33:27 994 +++ Daodan/src/Patches/BSL.c 2014/04/09 00:10:18 995 @@ -12,6 +12,11 @@ #include "Character.h" +bool ONICALL argumentEmpty(sl_arg* arg) { + if ((arg->type == sl_str32) && (strlen(arg->val.value_str32) == 0)) + return true; + return false; +} uint16_t ONICALL bsl_int32mul(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) { @@ -92,7 +97,7 @@ uint16_t ONICALL bsl_int32rand(sl_callin uint16_t ONICALL bsl_getkills(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) { int index; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; //killcount = ONgGameState->CharacterStorage[index].Kills; @@ -105,7 +110,7 @@ uint16_t ONICALL bsl_getkills(sl_callinf uint16_t ONICALL bsl_getdamage(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) { int index; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; ret->val.value_int32 = ONgGameState->CharacterStorage[index].Damage; @@ -185,7 +190,7 @@ uint16_t ONICALL bsl_health(sl_callinfo* int index; Character* Chr; int* health; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; Chr = ONgGameState->CharacterStorage; @@ -206,12 +211,11 @@ uint16_t ONICALL bsl_regen(sl_callinfo* { int index; Character* Chr; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; Chr = ONgGameState->CharacterStorage ; - /* DDrConsole_PrintF("Character %s", Chr[index].Name); DDrConsole_PrintF("Spawn %s", Chr[index].ScriptSpawn); @@ -310,7 +314,7 @@ uint16_t ONICALL bsl_location(sl_callinf uint16_t ONICALL bsl_maxhealth(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) { int index; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; if(1) { @@ -335,7 +339,7 @@ uint16_t ONICALL bsl_getattacker(sl_call //broken int index; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; if(1) { @@ -355,7 +359,7 @@ uint16_t ONICALL bsl_chrname(sl_callinfo int index; char* name; - if (numargs == 0) index = 0; + if (argumentEmpty(&args[0])) index = 0; else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); else index = args[0].val.value_int32; if (index == -1) { @@ -394,7 +398,7 @@ uint16_t ONICALL bsl_dprintcolored(sl_ca { numargs++; } - if(numargs == 0) return 0; + if(argumentEmpty(&args[0])) return 0; if(numargs > 1 ) color.R = (char)args[1].val.value_int32; else color.R = 255; if(numargs > 2 ) color.G = (char)args[2].val.value_int32; @@ -692,6 +696,7 @@ uint16_t ONICALL bsl_sprintf(sl_callinfo uint16_t ONICALL cinematic_start_patch(sl_callinfo* callinfo, unsigned int numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) { args[1].val.value_int32 = (double)args[1].val.value_int32 / (double)(gl->DisplayMode.Width) * (4.0 / 3.0 * (double)(gl->DisplayMode.Height)); + // Call orig OCiCinematic_ScriptStart return ((sl_func)(OniExe + 0x000f3830))(callinfo, numargs, args, dontuse1, dontuse2, ret); } @@ -768,5 +773,6 @@ void SLrDaodan_Initialize() // Patch for cinematic_start to work on widescreen resolutions void SLrDaodan_Patch() { + // PUSH OCiCinematic_ScriptStart -> PUSH cinematic_start_patch DDrPatch_Int32((int*)(OniExe + 0x000f3755), (int)cinematic_start_patch); }