-void save_game(struct World * world) {
-// Save game data to game file.
- FILE * file = fopen("savefile", "w");
- write_uint32_bigendian(world->seed, file);
- write_uint32_bigendian(world->turn, file);
- write_uint16_bigendian(world->player->pos.y, file);
- write_uint16_bigendian(world->player->pos.x, file);
- write_uint16_bigendian(world->monster->pos.y, file);
- write_uint16_bigendian(world->monster->pos.x, file);
- write_uint16_bigendian(world->monster->next->pos.y, file);
- write_uint16_bigendian(world->monster->next->pos.x, file);
- write_uint16_bigendian(world->monster->next->next->pos.y, file);
- write_uint16_bigendian(world->monster->next->next->pos.x, file);
- fclose(file); }
-
-void record_action (char action) {
-// Append action to game record file.
- FILE * file = fopen("record", "a");
- fputc(action, file);
- fclose(file); }
-
-struct yx_uint16 mv_yx_in_dir (char d, struct yx_uint16 yx) {
-// Return yx coordinates one step to the direction d of yx.
- if (d == NORTH) yx.y--;
- else if (d == EAST) yx.x++;
- else if (d == SOUTH) yx.y++;
- else if (d == WEST) yx.x--;
- return yx; }
+void map_scroll (struct Map * map, char dir, struct yx_uint16 win_size) {
+// Scroll map into direction dir if possible by changing the offset.
+ if (NORTH == dir && map->offset.y > 0)
+ map->offset.y--;
+ else if (WEST == dir && map->offset.x > 0)
+ map->offset.x--;
+ else if (SOUTH == dir && map->offset.y + win_size.y < map->size.y)
+ map->offset.y++;
+ else if (EAST == dir && map->offset.x + win_size.x < map->size.x)
+ map->offset.x++; }