mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Corrected code for initializing attached script (create_object_sid, #378)
This commit is contained in:
@@ -3000,6 +3000,9 @@ static void __declspec(naked) op_create_object_sid_hack() {
|
|||||||
mov eax, esi;
|
mov eax, esi;
|
||||||
retn;
|
retn;
|
||||||
init:
|
init:
|
||||||
|
call LoadGameHook::IsMapLoading;
|
||||||
|
test al, al;
|
||||||
|
jnz end; // yes - initialization will be performed by engine functions
|
||||||
cmp createObjectSidStartFix, 0;
|
cmp createObjectSidStartFix, 0;
|
||||||
jne runStart;
|
jne runStart;
|
||||||
call ScriptExtender::InitScript;
|
call ScriptExtender::InitScript;
|
||||||
|
|||||||
@@ -69,9 +69,14 @@ static Delegate<> onCombatEnd;
|
|||||||
static DWORD inLoop = 0;
|
static DWORD inLoop = 0;
|
||||||
static DWORD saveInCombatFix;
|
static DWORD saveInCombatFix;
|
||||||
static bool gameLoaded = false;
|
static bool gameLoaded = false;
|
||||||
|
static bool onLoadingMap = false;
|
||||||
|
|
||||||
long LoadGameHook::interfaceWID = -1;
|
long LoadGameHook::interfaceWID = -1;
|
||||||
|
|
||||||
|
bool LoadGameHook::IsMapLoading() {
|
||||||
|
return onLoadingMap;
|
||||||
|
}
|
||||||
|
|
||||||
// True if game was started, false when on the main menu
|
// True if game was started, false when on the main menu
|
||||||
bool IsGameLoaded() {
|
bool IsGameLoaded() {
|
||||||
return gameLoaded;
|
return gameLoaded;
|
||||||
@@ -427,6 +432,16 @@ static void __declspec(naked) game_close_hook() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void __declspec(naked) map_load_hook() {
|
||||||
|
__asm {
|
||||||
|
mov onLoadingMap, 1;
|
||||||
|
call fo::funcoffs::map_load_file_;
|
||||||
|
mov onLoadingMap, 0;
|
||||||
|
retn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __declspec(naked) WorldMapHook_Start() {
|
static void __declspec(naked) WorldMapHook_Start() {
|
||||||
__asm {
|
__asm {
|
||||||
call fo::funcoffs::wmInterfaceInit_;
|
call fo::funcoffs::wmInterfaceInit_;
|
||||||
@@ -736,12 +751,15 @@ void LoadGameHook::init() {
|
|||||||
saveInCombatFix = IniReader::GetConfigInt("Misc", "SaveInCombatFix", 1);
|
saveInCombatFix = IniReader::GetConfigInt("Misc", "SaveInCombatFix", 1);
|
||||||
if (saveInCombatFix > 2) saveInCombatFix = 0;
|
if (saveInCombatFix > 2) saveInCombatFix = 0;
|
||||||
|
|
||||||
|
HookCall(0x482AEC, map_load_hook);
|
||||||
HookCall(0x4809BA, main_init_system_hook);
|
HookCall(0x4809BA, main_init_system_hook);
|
||||||
HookCall(0x4426A6, game_init_hook);
|
HookCall(0x4426A6, game_init_hook);
|
||||||
HookCall(0x480AAE, main_load_new_hook);
|
HookCall(0x480AAE, main_load_new_hook);
|
||||||
|
|
||||||
HookCalls(LoadGame_hook, {0x443AE4, 0x443B89, 0x480B77, 0x48FD35});
|
HookCalls(LoadGame_hook, {0x443AE4, 0x443B89, 0x480B77, 0x48FD35});
|
||||||
SafeWrite32(0x5194C0, (DWORD)&EndLoadHook);
|
SafeWrite32(0x5194C0, (DWORD)&EndLoadHook);
|
||||||
HookCalls(SaveGame_hook, {0x443AAC, 0x443B1C, 0x48FCFF});
|
HookCalls(SaveGame_hook, {0x443AAC, 0x443B1C, 0x48FCFF});
|
||||||
|
|
||||||
HookCalls(game_reset_hook, {
|
HookCalls(game_reset_hook, {
|
||||||
0x47DD6B, // LoadSlot_ (on load error)
|
0x47DD6B, // LoadSlot_ (on load error)
|
||||||
0x47DDF3, // LoadSlot_ (on load error)
|
0x47DDF3, // LoadSlot_ (on load error)
|
||||||
@@ -757,6 +775,7 @@ void LoadGameHook::init() {
|
|||||||
HookCalls(game_reset_on_load_hook, {
|
HookCalls(game_reset_on_load_hook, {
|
||||||
0x47F491, // PrepLoad_ (the very first step during save game loading)
|
0x47F491, // PrepLoad_ (the very first step during save game loading)
|
||||||
});
|
});
|
||||||
|
|
||||||
HookCalls(before_game_exit_hook, {0x480ACE, 0x480BC7});
|
HookCalls(before_game_exit_hook, {0x480ACE, 0x480BC7});
|
||||||
HookCalls(after_game_exit_hook, {0x480AEB, 0x480BE4});
|
HookCalls(after_game_exit_hook, {0x480AEB, 0x480BE4});
|
||||||
HookCalls(game_close_hook, {
|
HookCalls(game_close_hook, {
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ public:
|
|||||||
static Delegate<>& OnCombatStart();
|
static Delegate<>& OnCombatStart();
|
||||||
static Delegate<>& OnCombatEnd();
|
static Delegate<>& OnCombatEnd();
|
||||||
|
|
||||||
|
static bool IsMapLoading();
|
||||||
|
|
||||||
static long interfaceWID;
|
static long interfaceWID;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user