From 0e5aef968a447e03002cbcc120df7555df624b85 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 30 Mar 2015 23:47:02 +0200 Subject: [PATCH] replaced stop/play buttons in game panel with save/load buttons --- ChangeLog | 3 ++ graphics/gfx_classic/RocksDoor2.ilbm | Bin 8506 -> 11904 bytes src/conf_gfx.c | 30 ++++++++---- src/game.c | 69 ++++++++++++++++++++------- src/game.h | 4 +- src/tape.c | 8 +++- 6 files changed, 84 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab81b631..0a7168dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2015-03-30 + * replaced stop/play buttons in game panel with save/load buttons + 2015-03-24 * added step-based engine snapshots to undo/redo single steps in game diff --git a/graphics/gfx_classic/RocksDoor2.ilbm b/graphics/gfx_classic/RocksDoor2.ilbm index 0f169db38e8f277917b238ba390c7aef1bae75c0..ef9d5f57afd892f04b50e1df66dec82130f3940d 100644 GIT binary patch delta 868 zcmY+C&ubGw6vtoUS}$ox#2+n4cEQjVN=?;+9*V6|iUre(#|3FY(PNag=%w8dL_FjW zcP&Fn@i%iEoud7tlh-kVvEr|yi+ zF5FH4oO?QVGoFYiZd?a|6TU3mqAv`9kKR6?_3L~i6CSrMA;zP?;x z7*U6n!fp}k97D;yT0^fFT*j%b5Oa1|nfji|{-)KfUz-slr@3rCbk$=UPh7V1zO8Sg z%c5y}Y*}&HopjL1MXgogn?EkuL8V}$U<1h>eqd{AjJ(QGCcSp7pz*5dseR)ZorZ}1M$fWeuh|S;YNcQ=KYoZU--CeJ{d)N@&9i)>S ZeMtF%t@BodEoi3?-57Cu9<%$}=Rbarw-NvV delta 55 zcmZpO-Q}d=<{#wCz@TX4>Eq<<identifier); - snapshot_level_nr = level_nr; - #if 0 ListNode *node = engine_snapshot_list_rnd; int num_bytes = 0; @@ -14750,19 +14743,25 @@ void SaveEngineSnapshotSingle() /* finally save all snapshot buffers to single snapshot */ SaveSnapshotSingle(buffers); + + /* save level identification information */ + setString(&snapshot_level_identifier, leveldir_current->identifier); + snapshot_level_nr = level_nr; } -boolean SaveEngineSnapshotToList() +static boolean SaveEngineSnapshotToListExt(boolean initial_snapshot) { boolean save_snapshot = - (FrameCounter == 0 || + (initial_snapshot || (game.snapshot.mode == SNAPSHOT_MODE_EVERY_STEP) || (game.snapshot.mode == SNAPSHOT_MODE_EVERY_MOVE && game.snapshot.changed_action)); game.snapshot.changed_action = FALSE; - if (game.snapshot.mode == SNAPSHOT_MODE_OFF || !save_snapshot) + if (game.snapshot.mode == SNAPSHOT_MODE_OFF || + tape.quick_resume || + !save_snapshot) return FALSE; ListNode *buffers = SaveEngineSnapshotBuffers(); @@ -14773,6 +14772,18 @@ boolean SaveEngineSnapshotToList() return TRUE; } +boolean SaveEngineSnapshotToList() +{ + return SaveEngineSnapshotToListExt(FALSE); +} + +void SaveEngineSnapshotToListInitial() +{ + FreeEngineSnapshotList(); + + SaveEngineSnapshotToListExt(TRUE); +} + void LoadEngineSnapshotValues() { /* restore special values from snapshot structure */ @@ -14961,24 +14972,46 @@ void FreeGameButtons() FreeGadget(game_gadget[i]); } -void MapStopPlayButtons() +static void MapGameButtonsAtSamePosition(int id) { - UnmapGadget(game_gadget[GAME_CTRL_ID_UNDO]); - UnmapGadget(game_gadget[GAME_CTRL_ID_REDO]); + int i; - MapGadget(game_gadget[GAME_CTRL_ID_STOP]); - MapGadget(game_gadget[GAME_CTRL_ID_PLAY]); + for (i = 0; i < NUM_GAME_BUTTONS; i++) + if (i != id && + gamebutton_info[i].pos->x == gamebutton_info[id].pos->x && + gamebutton_info[i].pos->y == gamebutton_info[id].pos->y) + MapGadget(game_gadget[i]); +} + +static void UnmapGameButtonsAtSamePosition(int id) +{ + int i; + + for (i = 0; i < NUM_GAME_BUTTONS; i++) + if (i != id && + gamebutton_info[i].pos->x == gamebutton_info[id].pos->x && + gamebutton_info[i].pos->y == gamebutton_info[id].pos->y) + UnmapGadget(game_gadget[i]); } void MapUndoRedoButtons() { - UnmapGadget(game_gadget[GAME_CTRL_ID_STOP]); - UnmapGadget(game_gadget[GAME_CTRL_ID_PLAY]); + UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_UNDO); + UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_REDO); MapGadget(game_gadget[GAME_CTRL_ID_UNDO]); MapGadget(game_gadget[GAME_CTRL_ID_REDO]); } +void UnmapUndoRedoButtons() +{ + UnmapGadget(game_gadget[GAME_CTRL_ID_UNDO]); + UnmapGadget(game_gadget[GAME_CTRL_ID_REDO]); + + MapGameButtonsAtSamePosition(GAME_CTRL_ID_UNDO); + MapGameButtonsAtSamePosition(GAME_CTRL_ID_REDO); +} + void MapGameButtons() { int i; diff --git a/src/game.h b/src/game.h index e334dcc6..3e62cf4d 100644 --- a/src/game.h +++ b/src/game.h @@ -376,12 +376,14 @@ void FreeEngineSnapshotList(); void LoadEngineSnapshotSingle(); void SaveEngineSnapshotSingle(); boolean SaveEngineSnapshotToList(); +void SaveEngineSnapshotToListInitial(); boolean CheckEngineSnapshotSingle(); +boolean CheckEngineSnapshotList(); void CreateGameButtons(); void FreeGameButtons(); -void MapStopPlayButtons(); void MapUndoRedoButtons(); +void UnmapUndoRedoButtons(); void MapGameButtons(); void UnmapGameButtons(); void RedrawGameButtons(); diff --git a/src/tape.c b/src/tape.c index 896a8721..efc8bcb4 100644 --- a/src/tape.c +++ b/src/tape.c @@ -741,6 +741,9 @@ void TapeTogglePause(boolean toggle_manual) if (!CheckEngineSnapshotSingle()) SaveEngineSnapshotSingle(); + + // restart step/move snapshots after quick loading tape + SaveEngineSnapshotToListInitial(); } } @@ -749,7 +752,7 @@ void TapeTogglePause(boolean toggle_manual) if (tape.pausing) MapUndoRedoButtons(); else if (!tape.single_step) - MapStopPlayButtons(); + UnmapUndoRedoButtons(); } } @@ -1049,6 +1052,9 @@ void TapeQuickLoad() TapeStopWarpForward(); TapeAppendRecording(); + // restart step/move snapshots after quick loading tape + SaveEngineSnapshotToListInitial(); + if (FrameCounter > 0) return; } -- 2.34.1