#include <fcntl.h> /* open() */
#include <limits.h> /* PIPE_BUF */
#include <ncurses.h> /* halfdelay(), getch() */
+#include <stddef.h> /* NULL */
#include <stdint.h> /* uint8_t, uint16_t, uint32_t */
#include <stdio.h> /* FILE, sprintf(), fseek() */
#include <string.h> /* strcmp(), strlen(), memcpy() */
* try_fgetc()
*/
#include "control.h" /* try_key() */
-#include "map_window.h" /* for map_center() */
+#include "map_window.h" /* map_center() */
#include "misc.h" /* reset_windows() */
-#include "windows.h" /* draw_all_wins() */
+#include "windows.h" /* reset_windows_on_winch(), draw_all_wins() */
#include "world.h" /* world global */
* a hard-coded serialization format. Returns 1 on success and 0 if the out file
* wasn't read for supposedly not having changed since a last read_world() call.
*
- * Note that the first successful read_world() triggers map_center(), so that on
- * start the client focuses the map window on the player.
+ * map_center() is triggered by the first successful read_world() or on turn 1,
+ * so the client focuses the map window on the player on client and world start.
*/
static uint8_t read_world();
char * f_name = "read_inventory()";
char * delimiter = "%\n";
free(world.player_inventory);
- world.player_inventory = NULL;
+ world.player_inventory = NULL; /* Avoids illegal strlen() below. */
while (1)
{
try_fgets(read_buf, linemax + 1, file, f_name);
uint32_t linemax = textfile_sizes(file, NULL);
char * read_buf = try_malloc(linemax + 1, f_name);
world.turn = read_value_from_line(read_buf, linemax, file);
- world.score = read_value_from_line(read_buf, linemax, file);
+ world.player_score = read_value_from_line(read_buf, linemax, file);
world.player_lifepoints = read_value_from_line(read_buf, linemax, file);
read_inventory(read_buf, linemax, file);
world.player_pos.y = read_value_from_line(read_buf, linemax, file);
world.player_pos.x = read_value_from_line(read_buf, linemax, file);
- if (first_read)
+ if (1 == world.turn || first_read)
{
map_center();
first_read = 0;
{
if (world.winch)
{
- reset_windows();
+ reset_windows_on_winch();
world.winch = 0;
change_in_client++;
}