{
key_action |= key_info[i].action | JOY_BUTTON_SNAP;
key_snap_action |= key_info[i].action;
+
+ tape.property_bits |= TAPE_PROPERTY_TAS_KEYS;
}
}
}
}
PrintLine("-", 79);
+
Print("Tape of Level %03d (file version %08d, game version %08d)\n",
tape->level_nr, tape->file_version, tape->game_version);
Print(" (effective engine version %08d)\n",
tape->engine_version);
Print("Level series identifier: '%s'\n", tape->level_identifier);
+
+ Print("Special tape properties: ");
+ if (tape->property_bits == TAPE_PROPERTY_NONE)
+ Print("[none]");
+ if (tape->property_bits & TAPE_PROPERTY_EM_RANDOM_BUG)
+ Print("[em_random_bug]");
+ if (tape->property_bits & TAPE_PROPERTY_GAME_SPEED)
+ Print("[game_speed]");
+ if (tape->property_bits & TAPE_PROPERTY_PAUSE_MODE)
+ Print("[pause]");
+ if (tape->property_bits & TAPE_PROPERTY_SINGLE_STEP)
+ Print("[single_step]");
+ if (tape->property_bits & TAPE_PROPERTY_SNAPSHOT)
+ Print("[snapshot]");
+ if (tape->property_bits & TAPE_PROPERTY_REPLAYED)
+ Print("[replayed]");
+ if (tape->property_bits & TAPE_PROPERTY_TAS_KEYS)
+ Print("[tas_keys]");
+ if (tape->property_bits & TAPE_PROPERTY_SMALL_GRAPHICS)
+ Print("[small_graphics]");
+
+ Print("\n");
PrintLine("-", 79);
tape_frame_counter = 0;
if (!CheckEngineSnapshotList())
return;
+ int tape_property_bits = tape.property_bits;
+
LoadEngineSnapshot_Undo(steps);
+ tape.property_bits |= tape_property_bits | TAPE_PROPERTY_SNAPSHOT;
+
GameUndoRedoExt();
}
if (!CheckEngineSnapshotList())
return;
+ int tape_property_bits = tape.property_bits;
+
LoadEngineSnapshot_Redo(steps);
+ tape.property_bits |= tape_property_bits | TAPE_PROPERTY_SNAPSHOT;
+
GameUndoRedoExt();
}
tape.game_version = GAME_VERSION_ACTUAL;
tape.engine_version = level.game_version;
+ tape.property_bits = TAPE_PROPERTY_NONE;
+
TapeSetDateFromNow();
for (i = 0; i < MAX_PLAYERS; i++)
// set current delay (for last played move)
tape.pos[tape.counter].delay = tape.delay_played;
+ tape.property_bits |= TAPE_PROPERTY_REPLAYED;
+
// set current date
TapeSetDateFromNow();
tape.set_centered_player = FALSE;
}
+ if (GameFrameDelay != GAME_FRAME_DELAY)
+ tape.property_bits |= TAPE_PROPERTY_GAME_SPEED;
+
+ if (setup.small_game_graphics || SCR_FIELDX >= 2 * SCR_FIELDX_DEFAULT)
+ tape.property_bits |= TAPE_PROPERTY_SMALL_GRAPHICS;
+
if (!TapeAddAction(action))
TapeStopRecording();
}
if (tape.single_step && (toggle_mode & TAPE_TOGGLE_MANUAL))
tape.single_step = FALSE;
+ if (tape.single_step)
+ tape.property_bits |= TAPE_PROPERTY_SINGLE_STEP;
+
+ if (tape.pausing)
+ tape.property_bits |= TAPE_PROPERTY_PAUSE_MODE;
+
DrawVideoDisplayCurrentState();
if (tape.deactivate_display)
return;
}
+ tape.property_bits |= TAPE_PROPERTY_SNAPSHOT;
+
if (SaveTapeChecked(tape.level_nr))
SaveEngineSnapshotSingle();
}
TapeStartWarpForward(AUTOPLAY_MODE_WARP_NO_DISPLAY);
tape.quick_resume = TRUE;
+ tape.property_bits |= TAPE_PROPERTY_SNAPSHOT;
}
else // this should not happen (basically checked above)
{
// values for tape properties stored in tape file
#define TAPE_PROPERTY_NONE 0
#define TAPE_PROPERTY_EM_RANDOM_BUG (1 << 0)
+#define TAPE_PROPERTY_GAME_SPEED (1 << 1)
+#define TAPE_PROPERTY_PAUSE_MODE (1 << 2)
+#define TAPE_PROPERTY_SINGLE_STEP (1 << 3)
+#define TAPE_PROPERTY_SNAPSHOT (1 << 4)
+#define TAPE_PROPERTY_REPLAYED (1 << 5)
+#define TAPE_PROPERTY_TAS_KEYS (1 << 6)
+#define TAPE_PROPERTY_SMALL_GRAPHICS (1 << 7)
// values for score tape basename length (date, time, name hash, no extension)
#define MAX_SCORE_TAPE_BASENAME_LEN 24