From ec4a58e19e1d3a956c8fb3cdd938591653393938 Mon Sep 17 00:00:00 2001 From: NovaRain Date: Mon, 4 Nov 2019 21:28:06 +0800 Subject: [PATCH] Updated define_extra.h Added define of OBJ_DATA_SCRIPT_INDEX to define_extra.h. Moved Stats related reset code from ScriptExtender.cpp to Stats.cpp. --- artifacts/scripting/headers/define_extra.h | 7 ++++--- sfall/LoadGameHook.cpp | 5 ++++- sfall/ScriptExtender.cpp | 13 ------------- sfall/Stats.cpp | 12 ++++++++++++ sfall/Stats.h | 1 + 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/artifacts/scripting/headers/define_extra.h b/artifacts/scripting/headers/define_extra.h index a606e4b6..69ea1911 100644 --- a/artifacts/scripting/headers/define_extra.h +++ b/artifacts/scripting/headers/define_extra.h @@ -311,10 +311,11 @@ #define OBJ_DATA_FID (0x20) #define OBJ_DATA_ELEVATION (0x28) #define OBJ_DATA_PID (0x64) -#define OBJ_DATA_CID (0x68) // combat id, used for savegame -#define OBJ_DATA_SID (0x78) +#define OBJ_DATA_CID (0x68) // combat ID, used for savegame +#define OBJ_DATA_SID (0x78) // script ID +#define OBJ_DATA_SCRIPT_INDEX (0x80) // script index number in scripts.lst // items -#define OBJ_DATA_CUR_CHARGES (0x3C) +#define OBJ_DATA_CUR_CHARGES (0x3C) // for key items it's the key code // critters #define OBJ_DATA_COMBAT_STATE (0x3C) // flags: 1 - combat, 2 - target is out of range, 4 - flee #define OBJ_DATA_CUR_ACTION_POINT (0x40) diff --git a/sfall/LoadGameHook.cpp b/sfall/LoadGameHook.cpp index 3f032957..e48f751f 100644 --- a/sfall/LoadGameHook.cpp +++ b/sfall/LoadGameHook.cpp @@ -45,6 +45,7 @@ #include "ScriptExtender.h" #include "Skills.h" #include "Sound.h" +#include "Stats.h" #include "TalkingHeads.h" #include "version.h" #include "Worldmap.h" @@ -92,10 +93,12 @@ static void _stdcall ResetState(DWORD onLoad) { ForceGraphicsRefresh(0); // disable refresh WipeSounds(); if (GraphicsMode > 3) GraphicsResetOnGameLoad(); + StatsReset(); + StatsResetMiscValues(); + PerksReset(); Combat_OnGameLoad(); Skills_OnGameLoad(); InLoop = 0; - PerksReset(); InventoryReset(); ClearSavPrototypes(); RegAnimCombatCheck(1); diff --git a/sfall/ScriptExtender.cpp b/sfall/ScriptExtender.cpp index 8dba4651..b1d5650f 100644 --- a/sfall/ScriptExtender.cpp +++ b/sfall/ScriptExtender.cpp @@ -33,7 +33,6 @@ #include "input.h" #include "LoadGameHook.h" #include "Logging.h" -#include "Stats.h" #include "ScriptExtender.h" #include "version.h" @@ -1707,18 +1706,6 @@ void ClearGlobalScripts() { selfOverrideMap.clear(); globalExportedVars.clear(); HookScriptClear(); - - // Stat ranges - StatsReset(); - // Reset some settable game values back to the defaults - StandardApAcBonus = 4; - ExtraApAcBonus = 4; - // XP mod set to 100% - ExperienceMod = 1.0f; - // HP bonus - SafeWrite8(0x4AFBC1, 2); - // Skill points per level mod - SafeWrite8(0x43C27A, 5); } void RunScriptProcByNum(DWORD sptr, DWORD procNum) { diff --git a/sfall/Stats.cpp b/sfall/Stats.cpp index 1cb44475..55126ced 100644 --- a/sfall/Stats.cpp +++ b/sfall/Stats.cpp @@ -214,6 +214,18 @@ void StatsReset() { } } +void StatsResetMiscValues() { + // Reset some settable game values back to the defaults + StandardApAcBonus = 4; + ExtraApAcBonus = 4; + // XP mod set to 100% + ExperienceMod = 1.0f; + // HP bonus + SafeWrite8(0x4AFBC1, 2); + // Skill points per level mod + SafeWrite8(0x43C27A, 5); +} + void StatsInit() { StatsReset(); diff --git a/sfall/Stats.h b/sfall/Stats.h index 8271731d..cd2af3d2 100644 --- a/sfall/Stats.h +++ b/sfall/Stats.h @@ -19,6 +19,7 @@ #pragma once void StatsReset(); +void StatsResetMiscValues(); void StatsInit(); void _stdcall SetPCStatMax(int stat, int i); void _stdcall SetPCStatMin(int stat, int i);