From 6b6508cf0d2cb58c1267fd5648e80bdd0d21d035 Mon Sep 17 00:00:00 2001 From: louist103 Date: Sun, 1 May 2022 11:39:58 -0400 Subject: [PATCH] WIP --- soh/soh/Enhancements/savestates.cpp | 12 ++++++------ .../overlays/actors/ovl_player_actor/z_player.c | 14 +++++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/savestates.cpp b/soh/soh/Enhancements/savestates.cpp index 594e43cd4..3e7149426 100644 --- a/soh/soh/Enhancements/savestates.cpp +++ b/soh/soh/Enhancements/savestates.cpp @@ -7,6 +7,7 @@ #include "spdlog/spdlog.h" #include +#include #include "z64.h" #include "z64save.h" @@ -14,7 +15,6 @@ #include #include "z64map_mark.h" - extern "C" GlobalContext* gGlobalCtx; // FROM z_lights.c @@ -155,8 +155,6 @@ unsigned int SaveStateMgr::GetCurrentSlot(void) { } void SaveStateMgr::ProcessSaveStateRequests(void) { - std::unique_lock Lock(this->mutex); - while (!this->requests.empty()) { const auto& request = this->requests.front(); @@ -187,8 +185,6 @@ SaveStateReturn SaveStateMgr::AddRequest(const SaveStateRequest request) { return SaveStateReturn::FAIL_WRONG_GAMESTATE; } - std::unique_lock Lock(this->mutex); - switch (request.type) { case RequestType::SAVE: requests.push(request); @@ -210,6 +206,7 @@ SaveStateReturn SaveStateMgr::AddRequest(const SaveStateRequest request) { } void SaveState::Save(void) { + std::unique_lock Lock(audio.mutex); memcpy(&info->sysHeapCopy, gSystemHeap, SYSTEM_HEAP_SIZE /* sizeof(gSystemHeap) */); memcpy(&info->audioHeapCopy, gAudioHeap, AUDIO_HEAP_SIZE /* sizeof(gAudioContext) */); @@ -237,12 +234,15 @@ void SaveState::Save(void) { memcpy(&info->lightBufferCopy, &sLightsBuffer, sizeof(sLightsBuffer)); memcpy(&info->mtxStackCopy, &sMatrixStack, sizeof(MtxF) * 20); memcpy(&info->currentMtxCopy, &sCurrentMatrix, sizeof(MtxF)); + + //Various static data info->blueWarpTimerCopy = sWarpTimerTarget; info->sLoadedMarkDataTableCopy = sLoadedMarkDataTable; } void SaveState::Load(void) { + std::unique_lock Lock(audio.mutex); memcpy(gSystemHeap, &info->sysHeapCopy, SYSTEM_HEAP_SIZE); memcpy(gAudioHeap, &info->audioHeapCopy, AUDIO_HEAP_SIZE); @@ -270,7 +270,7 @@ void SaveState::Load(void) { memcpy(gAudioSfxSwapMode, &info->gAudioSfxSwapMode_copy, sizeof(info->gAudioSfxSwapMode_copy)); - + //Various static data D_801755D0 = info->D_801755D0_copy; sLoadedMarkDataTable = info->sLoadedMarkDataTableCopy; } diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index aa11b6d7e..b97a60e69 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -4804,7 +4804,7 @@ s32 func_8083ADD4(GlobalContext* globalCtx, Player* this) { void func_8083AE40(Player* this, s16 objectId) { s32 pad; - u32 size; + size_t size; if (objectId != OBJECT_INVALID) { this->giObjectLoading = true; @@ -4815,7 +4815,7 @@ void func_8083AE40(Player* this, s16 objectId) { LOG_HEX("size", size, "../z_player.c", 9090); ASSERT(size <= 1024 * 8, "size <= 1024 * 8", "../z_player.c", 9091); - DmaMgr_SendRequest2(&this->giObjectDmaRequest, (u32)this->giObjectSegment, gObjectTable[objectId].vromStart, + DmaMgr_SendRequest2(&this->giObjectDmaRequest, (uint32_t)this->giObjectSegment, gObjectTable[objectId].vromStart, size, 0, &this->giObjectLoadQueue, NULL, "../z_player.c", 9099); } } @@ -10751,13 +10751,21 @@ void Player_UpdateCommon(Player* this, GlobalContext* globalCtx, Input* input) { static Vec3f D_80854838 = { 0.0f, 0.0f, -30.0f }; void Player_Update(Actor* thisx, GlobalContext* globalCtx) { - static Vec3f sDogSpawnPos; + static Vec3f sDogSpawnPos; Player* this = (Player*)thisx; s32 dogParams; s32 pad; Input sp44; Actor* dog; + int bp = 0; + + if (bp) { + func_8083A098(this, gPlayerAnim_003458, globalCtx); + // bp = 0; + return; + } + if (func_8084FCAC(this, globalCtx)) { if (gSaveContext.dogParams < 0) { if (Object_GetIndex(&globalCtx->objectCtx, OBJECT_DOG) < 0) {