|
22 | 22 |
|
23 | 23 | #include <HouseClass.h> |
24 | 24 | #include <SessionClass.h> |
| 25 | +#include <BeaconManagerClass.h> |
25 | 26 | #include <Utilities/Debug.h> |
26 | 27 | #include <Utilities/Macro.h> |
| 28 | +#include <Unsorted.h> |
27 | 29 |
|
28 | 30 | DEFINE_HOOK(0x6BD7C5, WinMain_SpawnerInit, 0x6) |
29 | 31 | { |
@@ -179,3 +181,57 @@ DEFINE_HOOK(0x4FC57C, HouseClass__MPlayerDefeated_CheckAliveAndHumans, 0x7) |
179 | 181 | } |
180 | 182 |
|
181 | 183 | #pragma endregion MPlayerDefeated |
| 184 | + |
| 185 | +#pragma region Save&Load |
| 186 | + |
| 187 | +DEFINE_HOOK_AGAIN(0x624271, SomeFunc_InterceptMainLoop, 0x5); |
| 188 | +DEFINE_HOOK_AGAIN(0x623D72, SomeFunc_InterceptMainLoop, 0x5); |
| 189 | +DEFINE_HOOK_AGAIN(0x62314E, SomeFunc_InterceptMainLoop, 0x5); |
| 190 | +DEFINE_HOOK_AGAIN(0x60D407, SomeFunc_InterceptMainLoop, 0x5); |
| 191 | +DEFINE_HOOK_AGAIN(0x608206, SomeFunc_InterceptMainLoop, 0x5); |
| 192 | +DEFINE_HOOK(0x48CE8A, SomeFunc_InterceptMainLoop, 0x5) |
| 193 | +{ |
| 194 | + /** |
| 195 | + * Main loop. |
| 196 | + */ |
| 197 | + Game::MainLoop(); |
| 198 | + |
| 199 | + /** |
| 200 | + * After loop. |
| 201 | + */ |
| 202 | + Spawner::After_Main_Loop(); |
| 203 | + return R->Origin() + 0x5; |
| 204 | +} |
| 205 | + |
| 206 | +DEFINE_HOOK(0x52DAED, Game_Start_ResetGlobal, 0x7) |
| 207 | +{ |
| 208 | + Spawner::DoSave = false; |
| 209 | + Spawner::NextAutoSaveFrame = -1; |
| 210 | + Spawner::NextAutoSaveNumber = 0; |
| 211 | + return 0; |
| 212 | +} |
| 213 | + |
| 214 | +DEFINE_HOOK(0x686B20, INIClass_ReadScenario_AutoSave, 0x6) |
| 215 | +{ |
| 216 | + /** |
| 217 | + * Schedule the next autosave. |
| 218 | + */ |
| 219 | + Spawner::NextAutoSaveFrame = Unsorted::CurrentFrame; |
| 220 | + Spawner::NextAutoSaveFrame += Spawner::GetConfig()->AutoSaveInterval; |
| 221 | + return 0; |
| 222 | +} |
| 223 | + |
| 224 | +DEFINE_HOOK(0x4C7A14, EventClass_RespondToEvent_SaveGame, 0x5) |
| 225 | +{ |
| 226 | + Spawner::DoSave = true; |
| 227 | + return 0x4C7B42; |
| 228 | +} |
| 229 | + |
| 230 | +// for some reason beacons are only inited on scenario init, which doesn't happen on load |
| 231 | +DEFINE_HOOK(0x67E6DA, LoadGame_AfterInit, 0x6) |
| 232 | +{ |
| 233 | + BeaconManagerClass::Instance.LoadArt(); |
| 234 | + return 0; |
| 235 | +} |
| 236 | + |
| 237 | +#pragma endregion |
0 commit comments