From: Christian Heller Date: Mon, 3 Jun 2013 17:58:57 +0000 (+0200) Subject: -s takes optional argument: number of turn from which to start replay. X-Git-Tag: tce~1252 X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7B%20web_path%20%7D%7D/tasks?a=commitdiff_plain;h=7f1b0fb8bbd4f8c4f07c7d86fb8de0050d925f46;p=plomrogue -s takes optional argument: number of turn from which to start replay. --- diff --git a/README b/README index a395d4b..beadb16 100644 --- a/README +++ b/README @@ -59,4 +59,5 @@ Replay game recording Run "./roguelike -s" to watch a recording of the current game from the beginning. Hit the "next turn / wait" key to increment turns. Keys to manage windows, scroll on the map and quit the program are active; keys -to perform player actions are inactive. +to perform player actions are inactive. Append a number to the -s option +(like "-s100") to start the recording at the respective turn number. diff --git a/roguelike.c b/roguelike.c index 5d42071..9a1849c 100644 --- a/roguelike.c +++ b/roguelike.c @@ -291,10 +291,14 @@ int main (int argc, char *argv[]) { struct World world; world.interactive = 1; int opt; - while ((opt = getopt(argc, argv, "s")) != -1) { + uint32_t start_turn; + while ((opt = getopt(argc, argv, "s::")) != -1) { switch (opt) { case 's': world.interactive = 0; + start_turn = 0; + if (optarg) + start_turn = atoi(optarg); break; default: exit(EXIT_FAILURE); } } @@ -350,12 +354,17 @@ int main (int argc, char *argv[]) { unsigned char still_reading_file = 1; int action; while (1) { - draw_all_windows (&win_meta); - key = getch(); - if (1 == still_reading_file && key == get_action_key(world.keybindings, "wait / next turn") ) { + if (start_turn == world.turn) + start_turn = 0; + if (0 == start_turn) { + draw_all_windows (&win_meta); + key = getch(); } + if (1 == still_reading_file && + (world.turn < start_turn || key == get_action_key(world.keybindings, "wait / next turn")) ) { action = getc(file); - if (EOF == action) - still_reading_file = 0; + if (EOF == action) { + start_turn = 0; + still_reading_file = 0; } else if (0 == action) player_wait (&world); else if ('s' == action)