-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 next_turn (struct World * world) {
-// Increment turn and move enemy.
- world->turn++;
- rrand(1, world->seed * world->turn);
- char d;
- struct Monster * monster;
- for (monster = world->monster; monster != 0; monster = monster->next) {
- 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.");
- else if (is_passable(world->map, t.y, t.x))
- monster->pos = t; } }
+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; }