X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=f35e89db2dc428c5807c659b7f1613dfca125bf6;hb=eccf6b67a482ec5dd7040a245c189eed7f7646fe;hp=c0153bdf452c0cdc55ada397285bbd9bd3681481;hpb=f6bcc10ce7b517f04eb5cddf01c9ec29ee729b7e;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index c0153bdf..f35e89db 100644 --- a/src/game.c +++ b/src/game.c @@ -10681,9 +10681,6 @@ static void CheckSaveEngineSnapshot(struct PlayerInfo *player) static boolean player_was_snapping = FALSE; static boolean player_was_dropping = FALSE; - if (!tape.recording) - return; - if ((!player->is_moving && player_was_moving) || (player->MovPos == 0 && player_was_moving) || (player->is_snapping && !player_was_snapping) || @@ -14613,10 +14610,6 @@ ListNode *SaveEngineSnapshotBuffers() { ListNode *buffers = NULL; - /* do not save snapshots from editor */ - if (level_editor_test_game) - return NULL; - /* copy some special values to a structure better suited for the snapshot */ if (level.game_engine_type == GAME_ENGINE_TYPE_RND) @@ -14758,16 +14751,16 @@ void LoadEngineSnapshotSingle() LoadEngineSnapshotValues(); } -void LoadEngineSnapshot_Undo() +void LoadEngineSnapshot_Undo(int steps) { - LoadSnapshotFromList_Older(); + LoadSnapshotFromList_Older(steps); LoadEngineSnapshotValues(); } -void LoadEngineSnapshot_Redo() +void LoadEngineSnapshot_Redo(int steps) { - LoadSnapshotFromList_Newer(); + LoadSnapshotFromList_Newer(steps); LoadEngineSnapshotValues(); } @@ -14978,34 +14971,36 @@ void GameUndoRedoExt() RedrawPlayfield(); UpdateAndDisplayGameControlValues(); + DrawCompleteVideoDisplay(); DrawVideoDisplay(VIDEO_STATE_TIME_ON, TapeTime); DrawVideoDisplay(VIDEO_STATE_FRAME_ON, FrameCounter); BackToFront(); } -void GameUndo() +void GameUndo(int steps) { if (!CheckEngineSnapshot()) return; - LoadEngineSnapshot_Undo(); + LoadEngineSnapshot_Undo(steps); GameUndoRedoExt(); } -void GameRedo() +void GameRedo(int steps) { if (!CheckEngineSnapshot()) return; - LoadEngineSnapshot_Redo(); + LoadEngineSnapshot_Redo(steps); GameUndoRedoExt(); } -static void HandleGameButtonsExt(int id) +static void HandleGameButtonsExt(int id, int button) { + int steps = BUTTON_STEPSIZE(button); boolean handle_game_buttons = (game_status == GAME_MODE_PLAYING || (game_status == GAME_MODE_MAIN && tape.show_game_buttons)); @@ -15060,11 +15055,11 @@ static void HandleGameButtonsExt(int id) break; case GAME_CTRL_ID_UNDO: - GameUndo(); + GameUndo(steps); break; case GAME_CTRL_ID_REDO: - GameRedo(); + GameRedo(steps); break; case GAME_CTRL_ID_SAVE: @@ -15121,7 +15116,7 @@ static void HandleGameButtonsExt(int id) static void HandleGameButtons(struct GadgetInfo *gi) { - HandleGameButtonsExt(gi->custom_id); + HandleGameButtonsExt(gi->custom_id, gi->event.button); } void HandleSoundButtonKeys(Key key)