{ "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" },
{ "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" },
{
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"))
{
#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
}
}
-void InsertSolutionTape()
+boolean InsertSolutionTape()
{
boolean level_has_tape = (level.game_engine_type == GAME_ENGINE_TYPE_SP &&
level.native_sp_level->demo.is_available);
{
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;
}
{
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"
}
};
break;
+ case TAPE_CTRL_ID_INSERT_SOLUTION:
+ InsertSolutionTape();
+
+ break;
+
+ case TAPE_CTRL_ID_PLAY_SOLUTION:
+ PlaySolutionTape();
+
+ break;
+
default:
break;
}
struct XY pause;
struct XY record;
struct XY play;
+ struct XY insert_solution;
+ struct XY play_solution;
};
struct TapeSymbolInfo
unsigned int GetTapeLengthSeconds(void);
void TapeQuickSave(void);
void TapeQuickLoad(void);
-void InsertSolutionTape(void);
+boolean InsertSolutionTape(void);
+boolean PlaySolutionTape(void);
void AutoPlayTape(void);