diff --git a/src/levels/cutscene_runner.c b/src/levels/cutscene_runner.c index 08a0f1f..064ecab 100644 --- a/src/levels/cutscene_runner.c +++ b/src/levels/cutscene_runner.c @@ -191,7 +191,7 @@ void cutsceneRunnerStartStep(struct CutsceneRunner* runner) { &gZeroVec, gCurrentLevel->locations[step->teleportPlayer.toLocation].roomIndex ); - checkpointSave(&gScene); + sceneQueueCheckpoint(&gScene); break; case CutsceneStepTypeLoadLevel: { @@ -249,7 +249,7 @@ void cutsceneRunnerStartStep(struct CutsceneRunner* runner) { ); break; case CutsceneStepSaveCheckpoint: - checkpointSave(&gScene); + sceneQueueCheckpoint(&gScene); break; case CutsceneStepKillPlayer: playerKill(&gScene.player, step->killPlayer.isWater); diff --git a/src/savefile/scene_serialize.c b/src/savefile/scene_serialize.c index fdc9d23..b976dd9 100644 --- a/src/savefile/scene_serialize.c +++ b/src/savefile/scene_serialize.c @@ -424,16 +424,20 @@ void sceneAnimatorDeserialize(struct Serializer* serializer, struct Scene* scene } } -#define WRITE_ALIGN_CHECK {action(serializer, ¤tAlign, 1); ++currentAlign;} +#define INCLUDE_SAVEFILE_ALIGH_CHECKS 0 -#ifdef PORTAL64_WITH_DEBUGGER -#define READ_ALIGN_CHECK {serializeRead(serializer, ¤tAlign, 1); if (currentAlign != expectedAlign) return; ++expectedAlign;} -#else +#if INCLUDE_SAVEFILE_ALIGH_CHECKS +#define WRITE_ALIGN_CHECK {action(serializer, ¤tAlign, 1); ++currentAlign;} #define READ_ALIGN_CHECK {serializeRead(serializer, ¤tAlign, 1); if (currentAlign != expectedAlign) gdbBreak(); ++expectedAlign;} +#else +#define WRITE_ALIGN_CHECK +#define READ_ALIGN_CHECK #endif void sceneSerialize(struct Serializer* serializer, SerializeAction action, struct Scene* scene) { +#if INCLUDE_SAVEFILE_ALIGH_CHECKS char currentAlign = 0; +#endif playerSerialize(serializer, action, &scene->player); WRITE_ALIGN_CHECK; sceneSerializePortals(serializer, action, scene); @@ -459,8 +463,10 @@ void sceneSerialize(struct Serializer* serializer, SerializeAction action, struc } void sceneDeserialize(struct Serializer* serializer, struct Scene* scene) { +#if INCLUDE_SAVEFILE_ALIGH_CHECKS char currentAlign = 0; char expectedAlign = 0; +#endif playerDeserialize(serializer, &scene->player); READ_ALIGN_CHECK; sceneDeserializePortals(serializer, scene); diff --git a/src/scene/elevator.c b/src/scene/elevator.c index fa2f955..e763f03 100644 --- a/src/scene/elevator.c +++ b/src/scene/elevator.c @@ -163,7 +163,7 @@ int elevatorUpdate(struct Elevator* elevator, struct Player* player) { // save the checkpoint after flag ElevatorFlagsIsLocked is set // so loading this checkpoint doesn't immediately create another // save checkpoint - checkpointSave(&gScene); + sceneQueueCheckpoint(&gScene); } } diff --git a/src/scene/scene.c b/src/scene/scene.c index 1ef5a89..7bd9d31 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c @@ -600,7 +600,7 @@ void sceneUpdate(struct Scene* scene) { &gZeroVec, scene->elevators[teleportTo].roomIndex ); - checkpointSave(&gScene); + sceneQueueCheckpoint(&gScene); sceneClosePortal(&gScene, 0); sceneClosePortal(&gScene, 1); } @@ -671,6 +671,10 @@ void sceneUpdate(struct Scene* scene) { } } +void sceneQueueCheckpoint(struct Scene* scene) { + scene->checkpointState = SceneCheckpointStateReady; +} + int sceneOpenPortal(struct Scene* scene, struct Transform* at, int transformIndex, int portalIndex, struct PortalSurfaceMappingRange surfaceMapping, struct CollisionObject* collisionObject, int roomIndex, int fromPlayer, int just_checking) { struct Transform finalAt; diff --git a/src/scene/scene.h b/src/scene/scene.h index 76eceb7..0c82749 100644 --- a/src/scene/scene.h +++ b/src/scene/scene.h @@ -85,6 +85,7 @@ void sceneInit(struct Scene* scene); void sceneInitNoPauseMenu(struct Scene* scene); void sceneRender(struct Scene* scene, struct RenderState* renderState, struct GraphicsTask* task); void sceneUpdate(struct Scene* scene); +void sceneQueueCheckpoint(struct Scene* scene); int sceneFirePortal(struct Scene* scene, struct Ray* ray, struct Vector3* playerUp, int portalIndex, int roomIndex, int fromPlayer, int just_checking); void sceneClosePortal(struct Scene* scene, int portalIndex);