diff --git a/sfall/Elevators.cpp b/sfall/Elevators.cpp index 7432af69..32166020 100644 --- a/sfall/Elevators.cpp +++ b/sfall/Elevators.cpp @@ -47,10 +47,10 @@ struct sElevatorFrms { DWORD buttons; }; -static DWORD elevatorType[elevatorCount]; -static sElevator elevators[elevatorCount]; // _retvals -static sElevatorFrms elevatorsFrms[elevatorCount]; // _intotal -static DWORD elevatorsBtnCount[elevatorCount]; // _btncount +static DWORD elevatorType[elevatorCount] = {0}; +static sElevator elevators[elevatorCount] = {0}; // _retvals +static sElevatorFrms elevatorsFrms[elevatorCount] = {0}; // _intotal +static DWORD elevatorsBtnCount[elevatorCount] = {0}; // _btncount static void __declspec(naked) GetMenuHook() { __asm { @@ -117,16 +117,19 @@ static void __declspec(naked) GetNumButtonsHook3() { } void ResetElevators() { + //memset(&elevators[vanillaElevatorCount], 0, sizeof(sElevator) * (elevatorCount - vanillaElevatorCount)); + //memset(&elevatorsFrms[vanillaElevatorCount], 0, sizeof(sElevatorFrms) * (elevatorCount - vanillaElevatorCount)); + //for (int i = vanillaElevatorCount; i < elevatorCount; i++) elevatorType[i] = 0; +} + +static void LoadElevators() { + //ResetElevators(); + memcpy(elevators, (void*)_retvals, sizeof(sElevator) * vanillaElevatorCount); - memset(&elevators[vanillaElevatorCount], 0, sizeof(sElevator) * (elevatorCount - vanillaElevatorCount)); - memcpy(elevatorsFrms, (void*)_intotal, sizeof(sElevatorFrms) * vanillaElevatorCount); - memset(&elevatorsFrms[vanillaElevatorCount], 0, sizeof(sElevatorFrms) * (elevatorCount - vanillaElevatorCount)); - memcpy(elevatorsBtnCount, (void*)_btncnt, sizeof(DWORD) * vanillaElevatorCount); for (int i = 0; i < vanillaElevatorCount; i++) elevatorType[i] = i; - for (int i = vanillaElevatorCount; i < elevatorCount; i++) elevatorType[i] = 0; char section[4]; if (elevFile) { @@ -183,5 +186,5 @@ void ElevatorsInit(char* file) { MakeCall(0x43F184, GetNumButtonsHook2, 2); MakeCall(0x43F1E4, GetNumButtonsHook3, 2); - ResetElevators(); + LoadElevators(); } diff --git a/sfall/Perks.cpp b/sfall/Perks.cpp index 334e632c..3450ab1c 100644 --- a/sfall/Perks.cpp +++ b/sfall/Perks.cpp @@ -27,11 +27,12 @@ static const int maxNameLen = 64; // don't change size static const int maxDescLen = 1024; // don't change size -static char Name[maxNameLen * PERK_count]; -static char Desc[maxDescLen * PERK_count]; -static char tName[maxNameLen * TRAIT_count]; -static char tDesc[maxDescLen * TRAIT_count]; static char perksFile[MAX_PATH]; + +static char Name[maxNameLen * PERK_count] = {0}; +static char Desc[maxDescLen * PERK_count] = {0}; +static char tName[maxNameLen * TRAIT_count] = {0}; +static char tDesc[maxDescLen * TRAIT_count] = {0}; static bool disableTraits[TRAIT_count]; static DWORD* pc_trait = (DWORD*)_pc_trait; @@ -86,8 +87,8 @@ static DWORD RemoveTraitID; static DWORD RemovePerkID; static DWORD RemoveSelectableID; -static DWORD TraitSkillBonuses[TRAIT_count * 18]; -static DWORD TraitStatBonuses[TRAIT_count * (STAT_max_derived + 1)]; +static DWORD TraitSkillBonuses[TRAIT_count * 18] = {0}; +static DWORD TraitStatBonuses[TRAIT_count * (STAT_max_derived + 1)] = {0}; static DWORD IgnoringDefaultPerks = 0; static char PerkBoxTitle[33]; @@ -673,8 +674,6 @@ static void PerkSetup() { MakeCall(0x4AFB2F, LevelUpHack, 1); // replaces 'mov edx, ds:[PlayerLevel]' SafeWrite8(0x43C2EC, 0xEB); // skip the block of code which checks if the player has gained a perk (now handled in level up code) - memset(Name, 0, sizeof(Name)); - memset(Desc, 0, sizeof(Desc)); memcpy(Perks, (void*)_perk_data, sizeof(PerkStruct) * PERK_count); // _perk_data @@ -688,7 +687,7 @@ static void PerkSetup() { SafeWrite32(0x496BF5, (DWORD)Perks + 8); SafeWrite32(0x496AD4, (DWORD)Perks + 12); - if (strlen(perksFile)) { + if (perksFile[0] != '\0') { char num[4]; for (int i = 0; i < PERK_count; i++) { _itoa_s(i, num, 10); @@ -857,12 +856,21 @@ static void __declspec(naked) TraitAdjustStatHack() { static int _stdcall trait_adjust_skill_override(DWORD skillID) { int result = 0; - if (pc_trait[0] != -1) result += TraitSkillBonuses[skillID * TRAIT_count + pc_trait[0]]; - if (pc_trait[1] != -1) result += TraitSkillBonuses[skillID * TRAIT_count + pc_trait[1]]; - if (check_trait(TRAIT_gifted)) result -= 10; + if (pc_trait[0] != -1) { + result += TraitSkillBonuses[skillID * TRAIT_count + pc_trait[0]]; + } + if (pc_trait[1] != -1) { + result += TraitSkillBonuses[skillID * TRAIT_count + pc_trait[1]]; + } + if (check_trait(TRAIT_gifted)) { + result -= 10; + } if (check_trait(TRAIT_good_natured)) { - if (skillID <= SKILL_THROWING) result -= 10; - else if (skillID == SKILL_FIRST_AID || skillID == SKILL_DOCTOR || skillID == SKILL_CONVERSANT || skillID == SKILL_BARTER) result += 15; + if (skillID <= SKILL_THROWING) { + result -= 10; + } else if (skillID == SKILL_FIRST_AID || skillID == SKILL_DOCTOR || skillID == SKILL_CONVERSANT || skillID == SKILL_BARTER) { + result += 15; + } } return result; } @@ -891,11 +899,7 @@ static void TraitSetup() { MakeJump(0x4B3C7C, TraitAdjustStatHack); // trait_adjust_stat_ MakeJump(0x4B40FC, TraitAdjustSkillHack); // trait_adjust_skill_ - memset(tName, 0, sizeof(tName)); - memset(tDesc, 0, sizeof(tDesc)); memcpy(Traits, (void*)_trait_data, sizeof(TraitStruct) * TRAIT_count); - memset(TraitStatBonuses, 0, sizeof(TraitStatBonuses)); - memset(TraitSkillBonuses, 0, sizeof(TraitSkillBonuses)); // _trait_data SafeWrite32(0x4B3A81, (DWORD)Traits); @@ -904,7 +908,7 @@ static void TraitSetup() { SafeWrite32(0x4B3BA0, (DWORD)Traits + 4); SafeWrite32(0x4B3BC0, (DWORD)Traits + 8); - if (strlen(perksFile)) { + if (perksFile[0] != '\0') { char buf[512], num[5] = {'t'}; char* num2 = &num[1]; for (int i = 0; i < TRAIT_count; i++) { @@ -1143,7 +1147,7 @@ void PerksInit() { for (int i = STAT_st; i <= STAT_lu; i++) SafeWrite8(GainStatPerks[i][0], (BYTE)GainStatPerks[i][1]); HookCall(0x442729, PerkInitWrapper); // game_init_ - if (GetPrivateProfileString("Misc", "PerksFile", "", &perksFile[2], MAX_PATH, ini)) { + if (GetPrivateProfileString("Misc", "PerksFile", "", &perksFile[2], MAX_PATH - 3, ini)) { perksFile[0] = '.'; perksFile[1] = '\\'; HookCall(0x44272E, TraitInitWrapper); // game_init_ diff --git a/sfall/Stats.cpp b/sfall/Stats.cpp index 27336ef0..4b9697d0 100644 --- a/sfall/Stats.cpp +++ b/sfall/Stats.cpp @@ -32,9 +32,9 @@ static DWORD StatMinimumsNPC[STAT_max_stat]; static TGameObj* cCritter; static DWORD xpTable[99]; -static int StatFormulas[33 * 2]; -static int StatShifts[33 * 7]; -static double StatMulti[33 * 7]; +static int StatFormulas[33 * 2] = {0}; +static int StatShifts[33 * 7] = {0}; +static double StatMulti[33 * 7] = {0}; DWORD StandardApAcBonus = 4; DWORD ExtraApAcBonus = 4; @@ -218,14 +218,10 @@ void StatsInit() { SafeWrite8(0x4AFB1B, (BYTE)(level + 1)); } - GetPrivateProfileStringA("Misc", "DerivedStats", "", table, 2048, ini); + GetPrivateProfileStringA("Misc", "DerivedStats", "", table, MAX_PATH, ini); if (strlen(table)) { MakeJump(0x4AF6FC, stat_recalc_derived_hack); // overrides function - memset(StatFormulas, 0, sizeof(StatFormulas)); - memset(StatShifts, 0, sizeof(StatShifts)); - memset(StatMulti, 0, sizeof(StatMulti)); - StatFormulas[7 * 2] = 15; // max hp StatMulti[7 * 7 + 0] = 1; StatMulti[7 * 7 + 2] = 2;