X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=src%2Fclient%2Fio.c;h=c86ff843e38d2b41917d3e3da3722ad79b987ff1;hb=e03020342a74aef143b1ec38c18966dac64181b5;hp=2f7d18ad25f5c6c6fc43db5657700b750cd0b23e;hpb=a8097b8fef09444ebac0f1e2d3ffc4e621557b28;p=plomrogue diff --git a/src/client/io.c b/src/client/io.c index 2f7d18a..c86ff84 100644 --- a/src/client/io.c +++ b/src/client/io.c @@ -5,6 +5,7 @@ #include /* open() */ #include /* PIPE_BUF */ #include /* halfdelay(), getch() */ +#include /* NULL */ #include /* uint8_t, uint16_t, uint32_t */ #include /* FILE, sprintf(), fseek() */ #include /* strcmp(), strlen(), memcpy() */ @@ -17,8 +18,9 @@ * try_fgetc() */ #include "control.h" /* try_key() */ -#include "map_window.h" /* for map_center() */ -#include "windows.h" /* draw_all_wins() */ +#include "map.h" /* map_center() */ +#include "misc.h" /* reset_windows() */ +#include "windows.h" /* reset_windows_on_winch(), draw_all_wins() */ #include "world.h" /* world global */ @@ -65,8 +67,8 @@ static FILE * changed_server_out_file(char * path); * 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(); @@ -77,7 +79,7 @@ static void read_inventory(char * read_buf, uint32_t linemax, FILE * file) 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); @@ -194,12 +196,12 @@ static uint8_t read_world() 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; @@ -257,6 +259,12 @@ extern char * io_loop() uint8_t change_in_client = 0; while (1) { + if (world.winch) + { + reset_windows_on_winch(); + world.winch = 0; + change_in_client++; + } if (read_world() || change_in_client) { draw_all_wins();