uint32_t io_teleport_pc(dungeon_t *d) { /* Just for fun. */ pair_t dest; do { dest[dim_x] = rand_range(1, DUNGEON_X - 2); dest[dim_y] = rand_range(1, DUNGEON_Y - 2); } while (charpair(dest)); d->charmap[character_get_y(d->pc)][character_get_x(d->pc)] = NULL; d->charmap[dest[dim_y]][dest[dim_x]] = d->pc; character_set_y(d->pc, dest[dim_y]); character_set_x(d->pc, dest[dim_x]); if (mappair(dest) < ter_floor) { mappair(dest) = ter_floor; } pc_observe_terrain(d->pc, d); dijkstra(d); dijkstra_tunnel(d); return 0; }
void move_character(dungeon_t *d, character *c, pair_t next) { int rs; pair_t p; if (charpair(next) && ((next[dim_y] != character_get_y(c)) || (next[dim_x] != character_get_x(c)))) { d->combat_message = ""; rs = do_combat(d, c, charpair(next)); } /* No character in new position. */ if(rs == 0 || !charpair(next)){ d->charmap[character_get_y(c)][character_get_x(c)] = NULL; character_set_y(c, next[dim_y]); character_set_x(c, next[dim_x]); d->charmap[character_get_y(c)][character_get_x(c)] = c; } if (c == d->pc) { pc_set_speed(d, c); } }