From 2558f6e933a3b70682bd2437c00065842bd3cf2c Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 17 Apr 2018 19:58:38 +0200 Subject: [PATCH] added saving static variables to engine snapshots for SP game engine There were a number of static variables holding game engine values that were forgotten to be saved in game engine snapshots for the Supaplex game engine. Storing and restoring these engine values was added by this fix. --- src/game_sp/Murphy.c | 36 ++++++++++++++++++++++++++---------- src/game_sp/Murphy.h | 2 ++ src/game_sp/init.c | 2 ++ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/game_sp/Murphy.c b/src/game_sp/Murphy.c index bf590db0..c0a148fd 100644 --- a/src/game_sp/Murphy.c +++ b/src/game_sp/Murphy.c @@ -11,6 +11,32 @@ static boolean subMoveKillsMurphy(int si, int ax, int bl); #define LocalStretch (2) #define MurphyZoomFactor (ZoomFactor) + +// Variables that hold information about the animation sequence +static int dx1 = 0; // image/animation token +static int dx2 = 0; // an additional image position of a second sprite, for instance: yellow disk if pushed +static int MurphyDX = 0, MurphyDY = 0; // murphys move steps +static int SeqPos = 0; // index into dx() +static int ClearPos = 0; // Position to clear before blitting sprites, none=-1 +static int dxPos = 0; // field-position to draw dx(SeqPos) +static int dx2Step = 0; // position of dx2 relative to dx-position +static int dx1SequenceLength = 0; + + +void SaveEngineSnapshotValues_SP_Murphy(ListNode **buffers) +{ + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(dx1)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(dx2)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(MurphyDX)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(MurphyDY)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(SeqPos)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(ClearPos)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(dxPos)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(dx2Step)); + SaveSnapshotBuffer(buffers, ARGS_ADDRESS_AND_SIZEOF(dx1SequenceLength)); +} + + // ========================================================================== // SUBROUTINE // Move Murphy in any direction @@ -22,16 +48,6 @@ void subAnimateMurphy(int *si) int time1, time2; int tDeltaX, tDeltaY, tPos, Tmp; - // Variables that hold information about the animation sequence - static int dx1 = 0; // image/animation token - static int dx2 = 0; // an additional image position of a second sprite, for instance: yellow disk if pushed - static int MurphyDX = 0, MurphyDY = 0; // murphys move steps - static int SeqPos = 0; // index into dx() - static int ClearPos = 0; // Position to clear before blitting sprites, none=-1 - static int dxPos = 0; // field-position to draw dx(SeqPos) - static int dx2Step = 0; // position of dx2 relative to dx-position - static int dx1SequenceLength = 0; - ax = PlayField16[*si]; al = LowByte(ax); diff --git a/src/game_sp/Murphy.h b/src/game_sp/Murphy.h index e0d51a35..f9781cc2 100644 --- a/src/game_sp/Murphy.h +++ b/src/game_sp/Murphy.h @@ -7,6 +7,8 @@ #include "global.h" +void SaveEngineSnapshotValues_SP_Murphy(ListNode **); + extern void subAdjustZonksInfotronsAboveMurphy(int); extern void subAnimateMurphy(int *); extern void subCopyFieldToScreen(int, int); diff --git a/src/game_sp/init.c b/src/game_sp/init.c index e86e3185..af364aca 100644 --- a/src/game_sp/init.c +++ b/src/game_sp/init.c @@ -188,6 +188,8 @@ void SaveEngineSnapshotValues_SP(ListNode **buffers) SaveSnapshotBuffer(buffers, &PlayField16[-game_sp.preceding_buffer_size], game_sp.preceding_buffer_size * sizeof(int)); + + SaveEngineSnapshotValues_SP_Murphy(buffers); } void LoadEngineSnapshotValues_SP() -- 2.34.1