- 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); }
-
-char is_passable (struct Map * map, uint16_t y, uint16_t x) {
-// Check if coordinate on (or beyond) map is accessible to movement.
- char passable = 0;
- if (0 <= x && x < map->size.x && 0 <= y && y < map->size.y)
- if ('.' == map->cells[y * map->size.x + x])
- passable = 1;
- return passable; }
-
-void move_monster (struct World * world, struct Monster * monster) {
-// Move monster in random direction, trigger fighting when hindered by player/monster.
- char d = rrand(0, 0) % 5;
- struct yx_uint16 t = mv_yx_in_dir (d, monster->pos);
- if (yx_uint16_cmp (t, world->player->pos)) {
- update_log (world, "\nThe monster hits you.");
- return; }
- struct Monster * other_monster;
- for (other_monster = world->monster; other_monster != 0; other_monster = other_monster->next) {
- if (other_monster == monster)
- continue;
- if (yx_uint16_cmp (t, other_monster->pos)) {
- update_log (world, "\nMonster hits monster.");
- return; } }
- if (is_passable(world->map, t.y, t.x))
- monster->pos = t; }
-
-void move_player (struct World * world, char d) {
-// Move player in direction d, increment turn counter and update log.
- struct yx_uint16 t = mv_yx_in_dir (d, world->player->pos);