From de4a228f8a3b4889d484bc955bae463cee2c6a25 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 12 Jun 2018 00:05:11 +0200 Subject: [PATCH] added (optional) tape buttons to insert or play solution tape --- src/conf_gfx.c | 8 ++++++++ src/events.c | 5 +++++ src/tape.c | 47 +++++++++++++++++++++++++++++++++++++++++++---- src/tape.h | 5 ++++- 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 2b4d4199..2d3d99eb 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -6233,6 +6233,9 @@ struct ConfigInfo image_config[] = { "gfx.tape.button.play.height", "18" }, { "gfx.tape.button.play.pressed_xoffset", "-100" }, + { "gfx.tape.button.insert_solution", UNDEFINED_FILENAME }, + { "gfx.tape.button.play_solution", UNDEFINED_FILENAME }, + { "gfx.tape.symbol.eject", UNDEFINED_FILENAME }, { "gfx.tape.symbol.stop", UNDEFINED_FILENAME }, { "gfx.tape.symbol.pause", "RocksDoor.png" }, @@ -9072,6 +9075,11 @@ struct ConfigInfo image_config[] = { "tape.button.play.x", "77" }, { "tape.button.play.y", "77" }, + { "tape.button.insert_solution.x", "-1" }, + { "tape.button.insert_solution.y", "-1" }, + { "tape.button.play_solution.x", "-1" }, + { "tape.button.play_solution.y", "-1" }, + { "tape.symbol.eject.x", "-1" }, { "tape.symbol.eject.y", "-1" }, { "tape.symbol.stop.x", "-1" }, diff --git a/src/events.c b/src/events.c index dd3e88af..c1a5cbc1 100644 --- a/src/events.c +++ b/src/events.c @@ -1675,6 +1675,11 @@ static void HandleKeysSpecial(Key key) { InsertSolutionTape(); } + else if (is_string_suffix(cheat_input, ":play-solution-tape") || + is_string_suffix(cheat_input, ":pst")) + { + PlaySolutionTape(); + } else if (is_string_suffix(cheat_input, ":reload-graphics") || is_string_suffix(cheat_input, ":rg")) { diff --git a/src/tape.c b/src/tape.c index 447ce12c..fa73f3f9 100644 --- a/src/tape.c +++ b/src/tape.c @@ -28,8 +28,10 @@ #define TAPE_CTRL_ID_PAUSE 3 #define TAPE_CTRL_ID_RECORD 4 #define TAPE_CTRL_ID_PLAY 5 +#define TAPE_CTRL_ID_INSERT_SOLUTION 6 +#define TAPE_CTRL_ID_PLAY_SOLUTION 7 -#define NUM_TAPE_BUTTONS 6 +#define NUM_TAPE_BUTTONS 8 /* values for tape handling */ #define TAPE_PAUSE_SECONDS_BEFORE_DEATH 5 @@ -1077,7 +1079,7 @@ void TapeQuickLoad() } } -void InsertSolutionTape() +boolean InsertSolutionTape() { boolean level_has_tape = (level.game_engine_type == GAME_ENGINE_TYPE_SP && level.native_sp_level->demo.is_available); @@ -1086,18 +1088,37 @@ void InsertSolutionTape() { Request("No solution tape for this level!", REQ_CONFIRM); - return; + return FALSE; } + if (!TAPE_IS_STOPPED(tape)) + TapeStop(); + // if tape recorder already contains a tape, remove it without asking TapeErase(); LoadSolutionTape(level_nr); + DrawCompleteVideoDisplay(); + if (TAPE_IS_EMPTY(tape)) + { Request("Loading solution tape for this level failed!", REQ_CONFIRM); - DrawCompleteVideoDisplay(); + return FALSE; + } + + return TRUE; +} + +boolean PlaySolutionTape() +{ + if (!InsertSolutionTape()) + return FALSE; + + TapeStartGamePlaying(); + + return TRUE; } @@ -1273,6 +1294,14 @@ static struct { IMG_GFX_TAPE_BUTTON_PLAY, &tape.button.play, TAPE_CTRL_ID_PLAY, "play tape" + }, + { + IMG_GFX_TAPE_BUTTON_INSERT_SOLUTION,&tape.button.insert_solution, + TAPE_CTRL_ID_INSERT_SOLUTION, "insert solution tape" + }, + { + IMG_GFX_TAPE_BUTTON_PLAY_SOLUTION, &tape.button.play_solution, + TAPE_CTRL_ID_PLAY_SOLUTION, "play solution tape" } }; @@ -1503,6 +1532,16 @@ static void HandleTapeButtonsExt(int id) break; + case TAPE_CTRL_ID_INSERT_SOLUTION: + InsertSolutionTape(); + + break; + + case TAPE_CTRL_ID_PLAY_SOLUTION: + PlaySolutionTape(); + + break; + default: break; } diff --git a/src/tape.h b/src/tape.h index ab3fd55c..0924395c 100644 --- a/src/tape.h +++ b/src/tape.h @@ -109,6 +109,8 @@ struct TapeButtonInfo struct XY pause; struct XY record; struct XY play; + struct XY insert_solution; + struct XY play_solution; }; struct TapeSymbolInfo @@ -231,7 +233,8 @@ unsigned int GetTapeLengthFrames(void); unsigned int GetTapeLengthSeconds(void); void TapeQuickSave(void); void TapeQuickLoad(void); -void InsertSolutionTape(void); +boolean InsertSolutionTape(void); +boolean PlaySolutionTape(void); void AutoPlayTape(void); -- 2.34.1