42#define topo_has_flag(topo, flag) (((topo) & (flag)) != 0)
43#define current_topo_has_flag(flag) topo_has_flag((CURRENT_TOPOLOGY), (flag))
45#define wrap_has_flag(wrap, flag) (((wrap) & (flag)) != 0)
46#define current_wrap_has_flag(flag) wrap_has_flag((CURRENT_WRAP), (flag))
48#define ALL_DIRECTIONS_CARDINAL() topo_has_flag((CURRENT_TOPOLOGY), TF_HEX)
66 const struct tile *src_tile,
70 const struct tile *src_tile,
78#define is_whole_continent_known(cont) \
79 (is_server() || wld.map.client.adj_matrix[cont][0] == 0)
82#define is_whole_ocean_known(ocean) \
83 (is_server() || wld.map.client.adj_matrix[0][ocean] == 0)
116#define startpos_nations_iterate(ARG_psp, NAME_pnation) \
117 generic_iterate(struct startpos_iter, const struct nation_type *, \
118 NAME_pnation, startpos_iter_sizeof, \
119 startpos_iter_init, (ARG_psp))
120#define startpos_nations_iterate_end generic_iterate_end
136#define map_startpos_iterate(NAME_psp) \
137 generic_iterate(struct map_startpos_iter, struct startpos *, \
138 NAME_psp, map_startpos_iter_sizeof, map_startpos_iter_init)
139#define map_startpos_iterate_end generic_iterate_end
143#define CHECK_MAP_POS(x,y) \
144 fc_assert(is_normal_map_pos((x),(y)))
145#define CHECK_NATIVE_POS(x, y) \
146 fc_assert((x) >= 0 && (x) < MAP_NATIVE_WIDTH && \
147 (y) >= 0 && (y) < MAP_NATIVE_HEIGHT)
148#define CHECK_INDEX(mindex) \
149 fc_assert((mindex) >= 0 && (mindex) < MAP_INDEX_SIZE)
151#define CHECK_MAP_POS(x,y) ((void)0)
152#define CHECK_NATIVE_POS(x, y) ((void)0)
153#define CHECK_INDEX(mindex) ((void)0)
156#define native_pos_to_index_nocheck(nat_x, nat_y) \
157 ((nat_x) + (nat_y) * MAP_NATIVE_WIDTH)
158#define native_pos_to_index(nat_x, nat_y) \
159 (CHECK_NATIVE_POS((nat_x), (nat_y)), \
160 native_pos_to_index_nocheck(nat_x, nat_y))
161#define index_to_native_pos(pnat_x, pnat_y, mindex) \
162 (*(pnat_x) = index_to_native_pos_x(mindex), \
163 *(pnat_y) = index_to_native_pos_y(mindex))
164#define index_to_native_pos_x(mindex) \
165 ((mindex) % MAP_NATIVE_WIDTH)
166#define index_to_native_pos_y(mindex) \
167 ((mindex) / MAP_NATIVE_WIDTH)
170#define NATIVE_TO_MAP_POS(pmap_x, pmap_y, nat_x, nat_y) \
172 ? (*(pmap_x) = ((nat_y) + ((nat_y) & 1)) / 2 + (nat_x), \
173 *(pmap_y) = (nat_y) - *(pmap_x) + MAP_NATIVE_WIDTH) \
174 : (*(pmap_x) = (nat_x), *(pmap_y) = (nat_y)))
176#define MAP_TO_NATIVE_POS(pnat_x, pnat_y, map_x, map_y) \
178 ? (*(pnat_y) = (map_x) + (map_y) - MAP_NATIVE_WIDTH, \
179 *(pnat_x) = (2 * (map_x) - *(pnat_y) - (*(pnat_y) & 1)) / 2) \
180 : (*(pnat_x) = (map_x), *(pnat_y) = (map_y)))
182#define NATURAL_TO_MAP_POS(pmap_x, pmap_y, nat_x, nat_y) \
184 ? (*(pmap_x) = ((nat_y) + (nat_x)) / 2, \
185 *(pmap_y) = (nat_y) - *(pmap_x) + MAP_NATIVE_WIDTH) \
186 : (*(pmap_x) = (nat_x), *(pmap_y) = (nat_y)))
188#define MAP_TO_NATURAL_POS(pnat_x, pnat_y, map_x, map_y) \
190 ? (*(pnat_y) = (map_x) + (map_y) - MAP_NATIVE_WIDTH, \
191 *(pnat_x) = 2 * (map_x) - *(pnat_y)) \
192 : (*(pnat_x) = (map_x), *(pnat_y) = (map_y)))
199#define do_in_native_pos(nat_x, nat_y, map_x, map_y) \
201 int _nat_x, _nat_y; \
202 MAP_TO_NATIVE_POS(&_nat_x, &_nat_y, map_x, map_y); \
204 const int nat_x = _nat_x, nat_y = _nat_y;
206#define do_in_native_pos_end \
214#define do_in_natural_pos(ntl_x, ntl_y, map_x, map_y) \
216 int _ntl_x, _ntl_y; \
217 MAP_TO_NATURAL_POS(&_ntl_x, &_ntl_y, map_x, map_y); \
219 const int ntl_x = _ntl_x, ntl_y = _ntl_y;
221#define do_in_natural_pos_end \
229#define index_to_map_pos(pmap_x, pmap_y, mindex) \
230 (CHECK_INDEX(mindex), \
231 index_to_native_pos(pmap_x, pmap_y, mindex), \
232 NATIVE_TO_MAP_POS(pmap_x, pmap_y, *(pmap_x), *(pmap_y)))
236#define DIRSTEP(dest_x, dest_y, dir) \
237( (dest_x) = DIR_DX[(dir)], \
238 (dest_y) = DIR_DY[(dir)])
281 bool (*filter)(
const struct tile *ptile,
286 const struct tile *src_tile,
292 const struct player *pplayer,
293 const struct tile *t1,
const struct tile *t2);
301 const struct tile *ptile)
312 const struct player *pplayer,
314 const struct tile *src_tile,
326 const struct tile *ptile);
328 const struct tile *ptile);
330 const struct tile *ptile);
332 const struct tile *ptile);
334 const struct tile *ptile,
335 const struct terrain *pterrain);
345#define iterate_outward_dxy(nmap, start_tile, max_dist, _tile, _x, _y) \
347 int _x, _y, _tile##_x, _tile##_y, _start##_x, _start##_y; \
348 struct tile *_tile; \
349 const struct tile *_tile##_start = (start_tile); \
350 int _tile##_max = (max_dist); \
351 int _tile##_index = 0; \
352 index_to_map_pos(&_start##_x, &_start##_y, tile_index(_tile##_start)); \
354 _tile##_index < MAP_NUM_ITERATE_OUTWARDS_INDICES; \
356 if (MAP_ITERATE_OUTWARDS_INDICES[_tile##_index].dist > _tile##_max) { \
359 _x = MAP_ITERATE_OUTWARDS_INDICES[_tile##_index].dx; \
360 _y = MAP_ITERATE_OUTWARDS_INDICES[_tile##_index].dy; \
361 _tile##_x = _x + _start##_x; \
362 _tile##_y = _y + _start##_y; \
363 _tile = map_pos_to_tile(nmap, _tile##_x, _tile##_y); \
364 if (_tile == nullptr) { \
368#define iterate_outward_dxy_end \
373#define iterate_outward(nmap, start_tile, max_dist, itr_tile) \
374 iterate_outward_dxy(nmap, start_tile, max_dist, itr_tile, \
375 _dx_itr##itr_tile, _dy_itr##itr_tile)
377#define iterate_outward_end iterate_outward_dxy_end
387#define square_dxy_iterate(nmap, center_tile, radius, tile_itr, dx_itr, dy_itr) \
388 iterate_outward_dxy(nmap, center_tile, radius, tile_itr, dx_itr, dy_itr)
390#define square_dxy_iterate_end iterate_outward_dxy_end
397#define square_iterate(nmap, center_tile, radius, tile_itr) \
398 square_dxy_iterate(nmap, center_tile, radius, tile_itr, _dummy_x, dummy_y)
400#define square_iterate_end square_dxy_iterate_end
407#define circle_iterate(nmap, center_tile, sq_radius, tile_itr) \
408 circle_dxyr_iterate(nmap, center_tile, sq_radius, tile_itr, _dx, _dy, _dr)
410#define circle_iterate_end \
411 circle_dxyr_iterate_end
415#define circle_dxyr_iterate(nmap, center_tile, sq_radius, \
418 const int _tile##_sq_radius = (sq_radius); \
419 const int _tile##_cr_radius = (int)sqrt((double)MAX(_tile##_sq_radius, 0)); \
421 square_dxy_iterate(nmap, center_tile, _tile##_cr_radius, _tile, dx, dy) { \
422 const int dr = map_vector_to_sq_distance(dx, dy); \
424 if (dr <= _tile##_sq_radius) {
426#define circle_dxyr_iterate_end \
428 } square_dxy_iterate_end; \
434#define adjc_iterate(nmap, center_tile, itr_tile) \
438 adjc_dir_iterate(nmap, center_tile, itr_tile, ADJC_ITERATE_dir_itr##itr_tile) {
440#define adjc_iterate_end \
441 } adjc_dir_iterate_end; \
445#define adjc_dir_iterate(nmap, center_tile, itr_tile, dir_itr) \
446 adjc_dirlist_iterate(nmap, center_tile, itr_tile, dir_itr, \
447 (nmap)->valid_dirs, (nmap)->num_valid_dirs)
449#define adjc_dir_iterate_end adjc_dirlist_iterate_end
452#define adjc_dir_base_iterate(nmap, center_tile, dir_itr) \
453 adjc_dirlist_base_iterate(nmap, center_tile, dir_itr, \
454 (nmap)->valid_dirs, (nmap)->num_valid_dirs)
456#define adjc_dir_base_iterate_end \
457 adjc_dirlist_base_iterate_end
462#define cardinal_adjc_iterate(nmap, center_tile, itr_tile) \
463 adjc_dirlist_iterate(nmap, center_tile, itr_tile, _dir_itr##itr_tile, \
464 (nmap)->cardinal_dirs, (nmap)->num_cardinal_dirs)
466#define cardinal_adjc_iterate_end adjc_dirlist_iterate_end
469#define cardinal_adjc_dir_iterate(nmap, center_tile, itr_tile, dir_itr) \
470 adjc_dirlist_iterate(nmap, center_tile, itr_tile, dir_itr, \
471 (nmap)->cardinal_dirs, (nmap)->num_cardinal_dirs)
473#define cardinal_adjc_dir_iterate_end adjc_dirlist_iterate_end
476#define cardinal_adjc_dir_base_iterate(nmap, center_tile, dir_itr) \
477 adjc_dirlist_base_iterate(nmap, center_tile, dir_itr, \
478 (nmap)->cardinal_dirs, (nmap)->num_cardinal_dirs)
480#define cardinal_adjc_dir_base_iterate_end \
481 adjc_dirlist_base_iterate_end
484#define cardinal_between_iterate(nmap, tile1, tile2, between) \
485 cardinal_adjc_iterate(nmap, tile1, between) { \
486 cardinal_adjc_iterate(nmap, between, second) { \
487 if (same_pos(second, tile2)) {
489#define cardinal_between_iterate_end \
491 } cardinal_adjc_iterate_end; \
492 } cardinal_adjc_iterate_end;
495#define _RANGE_DIRLIST(_range, _nmap) \
496 ((_range) == REQ_RANGE_ADJACENT ? (_nmap)->valid_dirs \
497 : (_range) == REQ_RANGE_CADJACENT ? (_nmap)->cardinal_dirs \
500#define _RANGE_DIRCOUNT(_range, _nmap) \
501 ((_range) == REQ_RANGE_ADJACENT ? (_nmap)->num_valid_dirs \
502 : (_range) == REQ_RANGE_CADJACENT ? (_nmap)->num_cardinal_dirs \
508#define range_adjc_iterate(nmap, center_tile, range, itr_tile) \
509 range_adjc_dir_iterate(nmap, center_tile, range, itr_tile, _dir_itr##itr_tile)
511#define range_adjc_iterate_end range_adjc_dir_iterate_end
513#define range_adjc_dir_iterate(nmap, center_tile, range, itr_tile, dir_itr) \
514 adjc_dirlist_iterate(nmap, center_tile, itr_tile, dir_itr, \
515 _RANGE_DIRLIST(range, nmap), _RANGE_DIRCOUNT(range, nmap))
517#define range_adjc_dir_iterate_end adjc_dirlist_iterate_end
519#define range_adjc_dir_base_iterate(nmap, center_tile, range, dir_itr) \
520 adjc_dirlist_base_iterate(nmap, center_tile, dir_itr, \
521 _RANGE_DIRLIST(range, nmap), _RANGE_DIRCOUNT(range, nmap))
523#define range_adjc_dir_base_iterate_end adjc_dirlist_base_iterate_end
532#define adjc_dirlist_iterate(nmap, center_tile, _tile, _dir, \
535 enum direction8 _dir; \
536 int _tile##_x, _tile##_y, _tile##_cx, _tile##_cy; \
537 struct tile *_tile; \
538 const struct tile *_tile##_center = (center_tile); \
539 int _tile##_index = 0; \
540 index_to_map_pos(&_tile##_cx, &_tile##_cy, tile_index(_tile##_center)); \
542 _tile##_index < (dircount); \
544 _dir = (dirlist)[_tile##_index]; \
545 DIRSTEP(_tile##_x, _tile##_y, _dir); \
546 _tile##_x += _tile##_cx; \
547 _tile##_y += _tile##_cy; \
548 _tile = map_pos_to_tile(nmap, _tile##_x, _tile##_y); \
549 if (_tile == nullptr) { \
553#define adjc_dirlist_iterate_end \
558#define adjc_dirlist_base_iterate(nmap, center_tile, _dir, dirlist, dircount) \
560 enum direction8 _dir; \
561 int _tile##_x, _tile##_y, _center##_x, _center##_y; \
562 const struct tile *_tile##_center = (center_tile); \
563 bool _tile##_is_border = is_border_tile(_tile##_center, 1); \
564 int _tile##_index = 0; \
565 index_to_map_pos(&_center##_x, &_center##_y, tile_index(_tile##_center)); \
567 _tile##_index < (dircount); \
569 _dir = (dirlist)[_tile##_index]; \
570 DIRSTEP(_tile##_x, _tile##_y, _dir); \
571 _tile##_x += _center##_x; \
572 _tile##_y += _center##_y; \
573 if (_tile##_is_border && !normalize_map_pos(nmap, &_tile##_x, &_tile##_y)) { \
577#define adjc_dirlist_base_iterate_end \
583#define whole_map_iterate(_map, _tile) \
585 struct tile *_tile; \
586 int _tile##_index = 0; \
588 _tile##_index < MAP_INDEX_SIZE; \
590 _tile = (_map)->tiles + _tile##_index;
592#define whole_map_iterate_end \
599#define DIR_REVERSE(dir) (7 - (dir))
608extern const int DIR_DX[8];
609extern const int DIR_DY[8];
612#define MAP_MAX_LATITUDE 1000
614#define MAP_MAX_LATITUDE_BOUND (MAP_MAX_LATITUDE)
615#define MAP_MIN_LATITUDE_BOUND (-MAP_MAX_LATITUDE)
616#define MAP_DEFAULT_NORTH_LATITUDE MAP_MAX_LATITUDE_BOUND
617#define MAP_DEFAULT_SOUTH_LATITUDE MAP_MIN_LATITUDE_BOUND
620#define MAP_NORTH_LATITUDE(_nmap) ((_nmap).north_latitude)
621#define MAP_SOUTH_LATITUDE(_nmap) ((_nmap).south_latitude)
624#define MAP_MAX_REAL_LATITUDE(_nmap) \
625 MAX(MAP_NORTH_LATITUDE(_nmap), MAP_SOUTH_LATITUDE(_nmap))
626#define MAP_MIN_REAL_LATITUDE(_nmap) \
627 MIN(MAP_NORTH_LATITUDE(_nmap), MAP_SOUTH_LATITUDE(_nmap))
628#define MAP_REAL_LATITUDE_RANGE(_nmap) \
629 (MAP_MAX_REAL_LATITUDE(_nmap) - MAP_MIN_REAL_LATITUDE(_nmap))
632#define MAP_MAX_ABS_LATITUDE(_nmap) \
633 MAX(MAP_MAX_REAL_LATITUDE(_nmap), -MAP_MIN_REAL_LATITUDE(_nmap))
634#define MAP_MIN_ABS_LATITUDE(_nmap) \
635 MAX(0, MAX(MAP_MIN_REAL_LATITUDE(_nmap), -MAP_MAX_REAL_LATITUDE(_nmap)))
640#define MAP_TILE_OWNER_NULL MAX_UINT16
642#define MAP_DEFAULT_HUTS 15
643#define MAP_MIN_HUTS 0
644#define MAP_MAX_HUTS 500
646#define MAP_DEFAULT_ANIMALS 15
647#define MAP_MIN_ANIMALS 0
648#define MAP_MAX_ANIMALS 500
650#define MAP_DEFAULT_MAPSIZE MAPSIZE_FULLSIZE
656#define MAP_DEFAULT_SIZE 3
657#define MAP_MIN_SIZE 0
658#define MAP_MAX_SIZE 38
660#define MAP_DEFAULT_SIZE 4
661#define MAP_MIN_SIZE 0
662#define MAP_MAX_SIZE 2048
669 < (
long unsigned) 1 << 31,
672#define MAP_DEFAULT_TILESPERPLAYER 100
673#define MAP_MIN_TILESPERPLAYER 1
674#define MAP_MAX_TILESPERPLAYER 1000
677#define MAP_DEFAULT_LINEAR_SIZE 64
678#define MAP_MAX_LINEAR_SIZE (MAP_MAX_SIZE * 1000 / MAP_MIN_LINEAR_SIZE)
679#define MAP_MIN_LINEAR_SIZE 16
684#define MAP_DISTANCE_MAX (MAP_MAX_LINEAR_SIZE + MAP_MIN_LINEAR_SIZE)
686#define MAP_ORIGINAL_TOPO TF_WRAPX
689#define MAP_DEFAULT_TOPO 0
690#define MAP_DEFAULT_WRAP WRAP_X
692#define MAP_DEFAULT_TOPO (TF_ISO|TF_HEX)
693#define MAP_DEFAULT_WRAP (WRAP_X)
696#define MAP_DEFAULT_SEED 0
697#define MAP_MIN_SEED 0
698#define MAP_MAX_SEED (MAX_UINT32 >> 1)
700#define MAP_DEFAULT_LANDMASS 30
701#define MAP_MIN_LANDMASS 15
702#define MAP_MAX_LANDMASS 85
704#define MAP_DEFAULT_RICHES 250
705#define MAP_MIN_RICHES 0
706#define MAP_MAX_RICHES 1000
708#define MAP_DEFAULT_STEEPNESS 30
709#define MAP_MIN_STEEPNESS 0
710#define MAP_MAX_STEEPNESS 100
712#define MAP_DEFAULT_WETNESS 50
713#define MAP_MIN_WETNESS 0
714#define MAP_MAX_WETNESS 100
716#define MAP_DEFAULT_GENERATOR MAPGEN_RANDOM
718#define MAP_DEFAULT_STARTPOS MAPSTARTPOS_DEFAULT
720#define MAP_DEFAULT_TINYISLES FALSE
721#define MAP_MIN_TINYISLES FALSE
722#define MAP_MAX_TINYISLES TRUE
724#define MAP_DEFAULT_SEPARATE_POLES TRUE
725#define MAP_MIN_SEPARATE_POLES FALSE
726#define MAP_MAX_SEPARATE_POLES TRUE
728#define MAP_DEFAULT_FLATPOLES 100
729#define MAP_MIN_FLATPOLES 0
730#define MAP_MAX_FLATPOLES 100
732#define MAP_DEFAULT_TEMPERATURE 50
733#define MAP_MIN_TEMPERATURE 0
734#define MAP_MAX_TEMPERATURE 100
736#define MAP_DEFAULT_TEAM_PLACEMENT TEAM_PLACEMENT_CLOSEST
#define BV_DEFINE(name, bits)
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
signed short Continent_id
bool can_channel_land(const struct civ_map *nmap, const struct tile *ptile)
#define native_pos_to_index(nat_x, nat_y)
struct startpos * map_startpos_get(const struct tile *ptile)
bool is_normal_map_pos(int x, int y)
int get_continent_size(Continent_id id)
int startpos_number(const struct startpos *psp)
bool can_reclaim_ocean(const struct civ_map *nmap, const struct tile *ptile)
bool startpos_disallow(struct startpos *psp, struct nation_type *pnation)
enum direction8 opposite_direction(enum direction8 dir)
int sq_map_distance(const struct tile *tile0, const struct tile *tile1)
bool can_freeze_terrain(const struct civ_map *nmap, const struct tile *ptile)
static int index_to_map_pos_y(int mindex)
static int map_size_checked(void)
struct startpos * map_startpos_new(struct tile *ptile)
void map_distance_vector(int *dx, int *dy, const struct tile *ptile0, const struct tile *ptile1)
bool can_thaw_terrain(const struct civ_map *nmap, const struct tile *ptile)
int tile_move_cost_ptrs(const struct civ_map *nmap, const struct unit *punit, const struct unit_type *punittype, const struct player *pplayer, const struct tile *t1, const struct tile *t2)
bool base_get_direction_for_step(const struct civ_map *nmap, const struct tile *src_tile, const struct tile *dst_tile, enum direction8 *dir)
bool startpos_nation_allowed(const struct startpos *psp, const struct nation_type *pnation)
static const bool C_PERCENT
static const bool C_NUMBER
struct tile * startpos_tile(const struct startpos *psp)
bool startpos_allows_all(const struct startpos *psp)
const struct nation_hash * startpos_raw_nations(const struct startpos *psp)
FC_STATIC_ASSERT((long unsigned) MAP_MAX_SIZE *1000<(long unsigned) 1<< 31, map_too_big_for_network)
#define CHECK_MAP_POS(x, y)
struct tile * rand_map_pos(const struct civ_map *nmap)
const char * dir_get_name(enum direction8 dir)
enum direction8 dir_ccw(enum direction8 dir)
struct iterator * map_startpos_iter_init(struct map_startpos_iter *iter)
void map_allocate(struct civ_map *amap)
void map_init_topology(struct civ_map *nmap)
#define MAP_TO_NATIVE_POS(pnat_x, pnat_y, map_x, map_y)
bool same_pos(const struct tile *tile0, const struct tile *tile1)
static const bool C_ADJACENT
void main_map_allocate(void)
bool is_safe_ocean(const struct civ_map *nmap, const struct tile *ptile)
bool startpos_pack(const struct startpos *psp, struct packet_edit_startpos_full *packet)
static int map_pos_to_index(struct civ_map *nmap, int map_x, int map_y)
struct tile * index_to_tile(const struct civ_map *imap, int mindex)
int map_signed_latitude(const struct tile *ptile)
void base_map_distance_vector(int *dx, int *dy, int x0, int y0, int x1, int y1)
int map_vector_to_sq_distance(int dx, int dy)
bool map_startpos_remove(struct tile *ptile)
static int map_move_cost_unit(const struct civ_map *nmap, struct unit *punit, const struct tile *ptile)
bool is_move_cardinal(const struct civ_map *nmap, const struct tile *src_tile, const struct tile *dst_tile)
struct tile * rand_map_pos_filtered(const struct civ_map *nmap, void *data, bool(*filter)(const struct tile *ptile, const void *data))
int map_startpos_count(void)
bv_extras get_tile_infrastructure_set(const struct tile *ptile, int *count)
size_t startpos_iter_sizeof(void)
int get_direction_for_step(const struct civ_map *nmap, const struct tile *src_tile, const struct tile *dst_tile)
static int index_to_map_pos_x(int mindex)
bool is_cardinal_dir(enum direction8 dir)
static const bool C_CARDINAL
bool map_untrusted_dir_is_valid(enum direction8 dir)
bool terrain_surroundings_allow_change(const struct civ_map *nmap, const struct tile *ptile, const struct terrain *pterrain)
int real_map_distance(const struct tile *tile0, const struct tile *tile1)
bool startpos_unpack(struct startpos *psp, const struct packet_edit_startpos_full *packet)
struct iterator * startpos_iter_init(struct startpos_iter *it, const struct startpos *psp)
int get_ocean_size(Continent_id id)
static bool is_border_tile(const struct tile *ptile, int dist)
bool is_valid_dir(enum direction8 dir)
enum direction8 dir_cw(enum direction8 dir)
int get_island_surrounder(Continent_id id)
enum direction8 rand_direction(void)
struct tile * mapstep(const struct civ_map *nmap, const struct tile *ptile, enum direction8 dir)
void map_free(struct civ_map *fmap, bool server_side)
struct terrain_misc terrain_control
bool is_tiles_adjacent(const struct tile *ptile0, const struct tile *ptile1)
struct tile * nearest_real_tile(const struct civ_map *nmap, int x, int y)
struct tile * native_pos_to_tile(const struct civ_map *nmap, int nat_x, int nat_y)
struct tile * map_pos_to_tile(const struct civ_map *nmap, int x, int y)
int get_lake_surrounder(Continent_id id)
#define index_to_native_pos(pnat_x, pnat_y, mindex)
void map_init(struct civ_map *imap, bool server_side)
bool startpos_is_excluding(const struct startpos *psp)
static int map_move_cost(const struct civ_map *nmap, const struct player *pplayer, const struct unit_type *punittype, const struct tile *src_tile, const struct tile *dst_tile)
int map_distance(const struct tile *tile0, const struct tile *tile1)
struct startpos * map_startpos_by_number(int id)
size_t map_startpos_iter_sizeof(void)
bool startpos_allow(struct startpos *psp, struct nation_type *pnation)
bool normalize_map_pos(const struct civ_map *nmap, int *x, int *y)
bool is_real_map_pos(const struct civ_map *nmap, int x, int y)
#define index_to_map_pos(pmap_x, pmap_y, mindex)
bool is_singular_tile(const struct tile *ptile, int dist)
int map_vector_to_real_distance(int dx, int dy)
const struct unit_type * unit_type_get(const struct unit *punit)
#define MAP_NATIVE_HEIGHT