- for (monster = world->monster; monster != 0; monster = monster->next)
- if (yx_uint16_cmp (t, monster->pos)) {
- success = 2;
- break; }
- if (2 != success && is_passable(world->map, t.y, t.x)) {
- success = 1;
- world->player->pos = t; }
- if (success * d == prev)
- update_log (world, ".");
- else {
- if (2 == success)
- update_log (world, "\nYou hit the monster.");
- else {
- if (NORTH == d) dir = "north";
- else if (EAST == d) dir = "east" ;
- else if (SOUTH == d) dir = "south";
- else if (WEST == d) dir = "west" ;
- char * msg = calloc(25, sizeof(char));
- char * msg_content = "You fail to move";
- if (1 == success)
- msg_content = "You move";
- sprintf(msg, "\n%s %s.", msg_content, dir);
- update_log (world, msg);
- free(msg); } }
- prev = success * d;
- if (1 == world->interactive)
- record_action(d);
- next_turn (world); }
-
-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->width && 0 <= y && y < map->height)
- if ('.' == map->cells[y * map->width + x])
- passable = 1;
- return passable; }