- // Replay mode.
- int key;
- unsigned char quit_called = 0;
- unsigned char await_actions = 1;
- if (0 == world.interactive) {
- int action;
- while (1) {
- if (start_turn == world.turn)
- start_turn = 0;
- if (0 == start_turn) {
- draw_all_wins (&win_meta);
- key = getch(); }
- if (1 == await_actions &&
- (world.turn < start_turn || key == get_action_key(world.keybindings, "wait / next turn")) ) {
- action = getc(file);
- if (EOF == action) {
- start_turn = 0;
- await_actions = 0; }
- else if (0 == action)
- player_wait (&world);
- else if (NORTH == action)
- move_player(&world, NORTH);
- else if (EAST == action)
- move_player(&world, EAST);
- else if (SOUTH == action)
- move_player(&world, SOUTH);
- else if (WEST == action)
- move_player(&world, WEST); }
- else
- quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log);
- if (1 == quit_called)
- break; } }
-
- // Interactive mode.
- else {
- uint32_t last_turn = 0;
- while (1) {
- if (last_turn != world.turn) {
- save_game(&world);
- last_turn = world.turn; }
- if (1 == await_actions && 0 == player.hitpoints)
- await_actions = 0;
- draw_all_wins (&win_meta);
- key = getch();
- if (1 == await_actions && key == get_action_key(world.keybindings, "player up"))
- move_player(&world, NORTH);
- else if (1 == await_actions && key == get_action_key(world.keybindings, "player right"))
- move_player(&world, EAST);
- else if (1 == await_actions && key == get_action_key(world.keybindings, "player down"))
- move_player(&world, SOUTH);
- else if (1 == await_actions && key == get_action_key(world.keybindings, "player left"))
- move_player(&world, WEST);
- else if (1 == await_actions && key == get_action_key(world.keybindings, "wait / next turn"))
- player_wait (&world);
- else
- quit_called = meta_keys(key, &world, &win_meta, &win_keys, &win_map, &win_info, &win_log);
- if (1 == quit_called)
- break; } }
+ /* Replay mode. */
+ int key;
+ unsigned char quit_called = 0;
+ unsigned char await_actions = 1;
+ if (0 == world.interactive)
+ {
+ int action;
+ while (1)
+ {
+ if (start_turn == world.turn)
+ {
+ start_turn = 0;
+ }
+ if (0 == start_turn)
+ {
+ draw_all_wins (&win_meta);
+ key = getch();
+ }
+ if (1 == await_actions
+ && (world.turn < start_turn
+ || key == get_action_key(world.keybindings,
+ "wait / next turn")) )
+ {
+ action = getc(file);
+ if (EOF == action)
+ {
+ start_turn = 0;
+ await_actions = 0;
+ }
+ else if (0 == action)
+ {
+ player_wait (&world);
+ }
+ else if (NORTH == action)
+ {
+ move_player(&world, NORTH);
+ }
+ else if (EAST == action)
+ {
+ move_player(&world, EAST);
+ }
+ else if (SOUTH == action)
+ {
+ move_player(&world, SOUTH);
+ }
+ else if (WEST == action)
+ {
+ move_player(&world, WEST);
+ }
+ }
+ else
+ {
+ quit_called = meta_keys(key, &world, &win_meta, &win_keys,
+ &win_map, &win_info, &win_log);
+ if (1 == quit_called)
+ {
+ exit_game(&world, &map);
+ }
+ }
+ }
+ }