Savestates, player serialization (#6927)

This commit is contained in:
djevangelia
2026-07-18 20:10:01 +02:00
committed by GitHub
parent 8e810fb963
commit dfaed90868
2 changed files with 32 additions and 0 deletions
+4
View File
@@ -50,6 +50,7 @@ extern "C" void EnZf_SaveState(SaveStateCtx* ctx);
extern "C" void EnZl3_SaveState(SaveStateCtx* ctx);
extern "C" void ObjectKankyo_SaveState(SaveStateCtx* ctx);
extern "C" void EnHeishi1_SaveState(SaveStateCtx* ctx);
extern "C" void Player_SaveState(SaveStateCtx* ctx);
extern "C" void Matrix_SaveState(SaveStateCtx* ctx);
extern "C" void Lights_SaveState(SaveStateCtx* ctx);
@@ -147,6 +148,7 @@ typedef struct SaveStateInfo {
std::unique_ptr<uint8_t[]> enZl3State;
std::unique_ptr<uint8_t[]> objectKankyoState;
std::unique_ptr<uint8_t[]> enHeishi1State;
std::unique_ptr<uint8_t[]> playerState;
u8 transitionActorCount_copy;
s16 transitionActorIds_copy[256];
@@ -281,6 +283,7 @@ void SaveState::SaveOverlayStaticData(void) {
SaveOverlayState(info->enZl3State, EnZl3_SaveState);
SaveOverlayState(info->objectKankyoState, ObjectKankyo_SaveState);
SaveOverlayState(info->enHeishi1State, EnHeishi1_SaveState);
SaveOverlayState(info->playerState, Player_SaveState);
}
void SaveState::LoadOverlayStaticData(void) {
@@ -326,6 +329,7 @@ void SaveState::LoadOverlayStaticData(void) {
LoadOverlayState(info->enZl3State, EnZl3_SaveState);
LoadOverlayState(info->objectKankyoState, ObjectKankyo_SaveState);
LoadOverlayState(info->enHeishi1State, EnHeishi1_SaveState);
LoadOverlayState(info->playerState, Player_SaveState);
}
void SaveState::SaveTransitionActors(void) {
@@ -31,6 +31,7 @@
#include "soh/frame_interpolation.h"
#include "soh/OTRGlobals.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/savestate_serialize.h"
#include <string.h>
#include <stdlib.h>
@@ -16603,3 +16604,30 @@ void Player_StartTalking(PlayState* play, Actor* actor) {
Player_SetTurnAroundCamera(play, CAM_ITEM_TYPE_11);
}
}
#define PLAYER_SHIP_SAVESTATE_FIELDS(F) \
F(D_80858AA0) \
F(sSavedCurrentMask) \
F(sInteractWallCheckResult) \
F(sControlInput) \
F(sNoclipEnabled) \
F(sControlStickMagnitude) \
F(sControlStickAngle) \
F(sControlStickWorldYaw) \
F(sUpperBodyIsBusy) \
F(sFloorType) \
F(sWaterSpeedFactor) \
F(sInvWaterSpeedFactor) \
F(sTouchedWallFlags) \
F(sConveyorSpeed) \
F(sIsFloorConveyor) \
F(sConveyorYaw) \
F(sYDistToFloor) \
F(sPrevFloorProperty) \
F(sShapeYawToTouchedWall) \
F(sWorldYawToTouchedWall) \
F(sFloorShapePitch) \
F(sUseHeldItem) \
F(sHeldItemButtonIsHeldDown)
SHIP_SAVESTATE_DEFINE(Player, PLAYER_SHIP_SAVESTATE_FIELDS)