X-Git-Url: https://plomlompom.com/repos/day?a=blobdiff_plain;f=roguelike.c;h=9a1849caf3330de61599db861d4c3a133fad112e;hb=7f1b0fb8bbd4f8c4f07c7d86fb8de0050d925f46;hp=23a686a468ec8e4dc0ad357cfdf66b258451a9c4;hpb=cc54db8c41c3d0e00248422b6dc1a67187cd4e16;p=plomrogue diff --git a/roguelike.c b/roguelike.c index 23a686a..9a1849c 100644 --- a/roguelike.c +++ b/roguelike.c @@ -173,7 +173,7 @@ char is_passable (struct World * world, uint16_t x, uint16_t y) { return passable; } void record_action (char action) { -// +// Append action to game record file. FILE * file = fopen("record", "a"); fputc(action, file); fclose(file); } @@ -241,7 +241,7 @@ unsigned char meta_keys(int key, struct World * world, struct WinMeta * win_meta // Call some meta program / window management actions dependent on key. Return 1 to signal quitting. if (key == get_action_key(world->keybindings, "quit")) return 1; - if (key == get_action_key(world->keybindings, "scroll pad right")) + else if (key == get_action_key(world->keybindings, "scroll pad right")) scroll_pad (win_meta, '+'); else if (key == get_action_key(world->keybindings, "scroll pad left")) scroll_pad (win_meta, '-'); @@ -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); } } @@ -345,16 +349,22 @@ int main (int argc, char *argv[]) { toggle_window(&win_meta, &win_log); int key; - unsigned char result; + unsigned char quit_called; if (0 == world.interactive) { + unsigned char still_reading_file = 1; int action; while (1) { - draw_all_windows (&win_meta); - key = getch(); - if (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) - break; + if (EOF == action) { + start_turn = 0; + still_reading_file = 0; } else if (0 == action) player_wait (&world); else if ('s' == action) @@ -366,8 +376,8 @@ int main (int argc, char *argv[]) { else if ('w' == action) move_player(&world, 'w'); } else - result = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log); - if (1 == result) + quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log); + if (1 == quit_called) break; } } else { uint32_t last_turn = 0; @@ -388,8 +398,8 @@ int main (int argc, char *argv[]) { else if (key == get_action_key(world.keybindings, "wait / next turn")) player_wait (&world); else - result = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log); - if (1 == result) + quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log); + if (1 == quit_called) break; } } free(map.cells);