62#define MAXIMUM_CLAIMED_OCEAN_SIZE (20)
75 bool can_reveal_tiles);
79 bool can_reveal_tiles);
84 const struct tile *ptile,
85 enum vision_layer vlayer);
107 _(
"Global warming has occurred!"));
109 _(
"Coastlines have been flooded and vast "
110 "ranges of grassland have become deserts."));
120 _(
"Nuclear winter has occurred!"));
122 _(
"Wetlands have dried up and vast "
123 "ranges of grassland have become tundra."));
136 memset(used, 0,
sizeof(used));
139 warming ?
"Global warming" :
"Nuclear winter",
effect);
141 while (
effect > 0 && (k--) > 0) {
142 struct terrain *old, *candidates[2], *
new;
156 struct terrain *wetter, *drier;
161 candidates[0] = wetter;
162 candidates[1] = drier;
164 candidates[0] = drier;
165 candidates[1] = wetter;
172 for (i = 0; i < 2; i++) {
201 if (
new !=
T_NONE && old !=
new) {
227 }
else if (old ==
new) {
242 bool upgradet =
FALSE;
251 if (gained != NULL) {
275 int cities_upgradet = 0;
277 bool multiple_types =
FALSE;
278 int cities_total = city_list_size(pplayer->
cities);
289 if (new_upgrade == NULL) {
291 multiple_types =
TRUE;
292 }
else if (upgradet == NULL) {
294 upgradet = new_upgrade;
295 }
else if (upgradet != new_upgrade) {
297 multiple_types =
TRUE;
302 if (cities_total > 0) {
303 percent = cities_upgradet * 100 / cities_total;
308 if (cities_upgradet > 0) {
312 _(
"New hope sweeps like fire through the country as "
313 "the discovery of new infrastructure building technology "
319 _(
"The people are pleased to hear that your "
320 "scientists finally know about new infrastructure building "
325 if (multiple_types) {
327 _(
"Workers spontaneously gather and upgrade all "
328 "possible cities with better infrastructure."));
331 _(
"Workers spontaneously gather and upgrade all "
493 const struct player *eowner;
516 struct player *pplayer = pconn->playing;
518 if (NULL == pplayer && !pconn->observer) {
556 if (pplayer != NULL) {
562 if (ptile->
label != NULL) {
566 info.
label[0] =
'\0';
599 if (ptile->
label != NULL) {
602 info.
label[0] =
'\0';
606 }
else if (send_unknown) {
621 info.
label[0] =
'\0';
636 enum vision_layer vlayer)
662 bool can_reveal_tiles)
680 bool can_reveal_tiles)
685 if (old_radius_sq[V_MAIN] == new_radius_sq[V_MAIN]
686 && old_radius_sq[V_INVIS] == new_radius_sq[V_INVIS]
687 && old_radius_sq[V_SUBSURFACE] == new_radius_sq[V_SUBSURFACE]) {
694 if (max_radius < old_radius_sq[v]) {
695 max_radius = old_radius_sq[v];
697 if (max_radius < new_radius_sq[v]) {
698 max_radius = new_radius_sq[v];
703 log_debug(
"Updating vision at (%d, %d) in a radius of %d.",
706 log_debug(
" vision layer %d is changing from %d to %d.",
707 v, old_radius_sq[v], new_radius_sq[v]);
714 if (dr > old_radius_sq[v] && dr <= new_radius_sq[v]) {
716 }
else if (dr > new_radius_sq[v] && dr <= old_radius_sq[v]) {
733 const bool is_enabled)
747 if (pplayer == ptile->owner) {
762 static int recurse = 0;
814 static int recurse = 0;
901 const struct player *pplayer,
902 enum vision_layer vlayer)
916 const struct tile *ptile,
917 enum vision_layer vlayer)
931 bool can_reveal_tiles)
934 bool revealing_tile =
FALSE;
937 log_debug(
"%s() for player %s (nb %d) at (%d, %d).",
941 log_debug(
" vision layer %d is changing from %d to %d.",
949 if (0 > change[V_INVIS]
950 && plrtile->
seen_count[V_INVIS] == -change[V_INVIS]) {
951 log_debug(
"(%d, %d): hiding invisible units to player %s (nb %d).",
957 && (plrtile->
seen_count[V_MAIN] + change[V_MAIN] <= 0
965 if (0 > change[V_SUBSURFACE]
966 && plrtile->
seen_count[V_SUBSURFACE] == -change[V_SUBSURFACE]) {
967 log_debug(
"(%d, %d): hiding subsurface units to player %s (nb %d).",
978 if (0 > change[V_MAIN]
979 && plrtile->
seen_count[V_MAIN] == -change[V_MAIN]) {
980 log_debug(
"(%d, %d): hiding visible units to player %s (nb %d).",
1008 if (0 < plrtile->
seen_count[V_MAIN] && can_reveal_tiles) {
1009 log_debug(
"(%d, %d): revealing tile to player %s (nb %d).",
1014 revealing_tile =
TRUE;
1021 if (0 > change[V_MAIN] && 0 == plrtile->
seen_count[V_MAIN]) {
1024 log_debug(
"(%d, %d): fogging tile for player %s (nb %d).",
1029 if (pcity != NULL &&
city_owner(pcity) == pplayer) {
1045 if ((revealing_tile && 0 < plrtile->
seen_count[V_MAIN])
1046 || (0 < change[V_MAIN]
1053 log_debug(
"(%d, %d): unfogging tile for player %s (nb %d).",
1077 if (NULL != (pcity =
tile_city(ptile))) {
1082 if ((revealing_tile && 0 < plrtile->
seen_count[V_INVIS])
1083 || (0 < change[V_INVIS]
1084 && change[V_INVIS] == plrtile->
seen_count[V_INVIS])) {
1085 log_debug(
"(%d, %d): revealing invisible units to player %s (nb %d).",
1095 if ((revealing_tile && 0 < plrtile->
seen_count[V_SUBSURFACE])
1096 || (0 < change[V_SUBSURFACE]
1097 && change[V_SUBSURFACE] == plrtile->
seen_count[V_SUBSURFACE])) {
1098 log_debug(
"(%d, %d): revealing subsurface units to player %s (nb %d).",
1118 enum vision_layer vlayer)
1143 if (ptile->
site == new_site) {
1148 if (ptile->
site != NULL) {
1153 ptile->
site = new_site;
1246 bool reality_changed =
FALSE;
1250 bool changed =
FALSE;
1252 if (!aplayer->server.private_map) {
1258 if (aplrtile && aplrtile->
site
1265 if (aplrtile->
owner == pplayer) {
1266 aplrtile->
owner = NULL;
1290 reality_changed =
TRUE;
1293 ptile->extras_owner = NULL;
1294 reality_changed =
TRUE;
1297 if (reality_changed) {
1315 plrtile->
owner = NULL;
1317 plrtile->
site = NULL;
1338 if (plrtile->
site != NULL) {
1347 const struct player *pplayer)
1360 const struct player *pplayer)
1371 const struct player *pplayer)
1444 struct player *pplayer = pconn->playing;
1446 if (NULL == pplayer && pconn->observer) {
1506 if (dest_tile->
site) {
1507 if (!from_tile->
site) {
1522 if (from_tile->
site) {
1523 if (!dest_tile->
site) {
1591 pplayer->server.really_gives_vision = pplayer->gives_shared_vision;
1602 && pplayer != pplayer2) {
1606 && pplayer != pplayer3) {
1614 }
while (added > 0);
1629 log_error(
"Trying to give shared vision from %s to %s, "
1630 "but that vision is already given!",
1636 save_vision[
player_index(pplayer)] = pplayer->server.really_gives_vision;
1641 log_debug(
"giving shared vision from %s to %s",
1650 log_debug(
"really giving shared vision from %s to %s",
1659 if (0 < change[V_MAIN] || 0 < change[V_INVIS]) {
1687 log_error(
"Tried removing the shared vision from %s to %s, "
1688 "but it did not exist in the first place!",
1694 save_vision[
player_index(pplayer)] = pplayer->server.really_gives_vision;
1697 log_debug(
"removing shared vision from %s to %s",
1709 log_debug(
"really removing shared vision from %s to %s",
1718 if (0 > change[V_MAIN] || 0 > change[V_INVIS]) {
1792 bool ocean_near =
FALSE;
1818 bool unit_alive =
TRUE;
1825 log_verbose(
"Moved %s %s due to changing terrain at (%d,%d).",
1830 _(
"Moved your %s due to changing terrain."),
1853 struct unit_list *pcargo_units;
1882 log_verbose(
"Disbanded %s %s due to changing terrain "
1888 _(
"Disbanded your %s due to changing terrain."),
1924 bool old_is_ocean, new_is_ocean;
1926 if (!oldter || !newter) {
1933 return (old_is_ocean && !new_is_ocean)
1934 || (!old_is_ocean && new_is_ocean);
1944 if (pcity != NULL) {
1964 if (extend_rivers) {
1983 bool cont_reassigned =
FALSE;
1988 bool nonfresh =
FALSE;
2010 cont_reassigned =
TRUE;
2046 if (cont_reassigned) {
2051 if (claimer != NULL) {
2087 bool other_continent;
2105 other_continent =
FALSE;
2108 if (adj_tile ==
source) {
2112 if (adj_cont == cont) {
2114 }
else if (adj_cont != source_cont) {
2117 other_continent =
TRUE;
2120 if (!other_continent && ocean_tiles <= 2) {
2135 if (NULL == phome) {
2148 struct tile *psource)
2152 if ((ploser != powner && ploser != NULL)
2177 if (ploser != powner) {
2192 struct tile *psource,
bool claim_bases)
2239 int old_radius_sq,
int new_radius_sq)
2241 if (old_radius_sq == new_radius_sq) {
2250 if (old_radius_sq < new_radius_sq) {
2254 if (dr > new_radius_sq) {
2277 if (
owner == NULL) {
2285 if (radius_sq < 0) {
2292 if (dclaimer == ptile) {
2311 if (dr != 0 && NULL != dclaimer && dclaimer != ptile) {
2313 int strength_old, strength_new;
2315 if (ccity != NULL) {
2332 if (strength_new <= strength_old) {
2388 bv_player *could_see_unit = NULL;
2396 if (pextra->
eus != EUS_NORMAL) {
2397 ul_size = unit_list_size(ptile->
units);
2402 int stored_units[ul_size + 1];
2407 could_see_unit =
fc_malloc(
sizeof(*could_see_unit) * ul_size);
2410 stored_units[units_num++] = aunit->id;
2415 for (i = 0; i < units_num; i++) {
2432 if (powner != NULL) {
2442 if (ploser != NULL) {
2457 if (ploser != NULL) {
2468 if (powner != NULL) {
2476 if (units_num > 0) {
2479 for (i = 0; i < units_num; i++) {
2495 free(could_see_unit);
2528 if (pcity->server.needs_arrange ==
CNA_NORMAL) {
2531 pcity->server.needs_arrange =
CNA_NOT;
2543 bool extras_removed =
FALSE;
2549 extras_removed =
TRUE;
2553 if (pextra->
eus != EUS_NORMAL) {
2579 if (old_owner != pplayer) {
2582 if (oldbase != pextra) {
2595 if (extras_removed) {
2607 bv_player base_seen;
2653 if (pextra->
eus != EUS_NORMAL) {
2681 int prob,
bool reveal_cities)
2690 }
else if (reveal_cities && NULL !=
tile_city(ptile)) {
bool is_adv_data_phase_open(struct player *pplayer)
bool adv_data_phase_init(struct player *pplayer, bool is_new_phase)
void adv_data_phase_done(struct player *pplayer)
#define CALL_FUNC_EACH_AI(_func,...)
bool territory_claiming_base(const struct base_type *pbase)
void dbv_init(struct dbv *pdbv, int bits)
void dbv_set(struct dbv *pdbv, int bit)
bool dbv_isset(const struct dbv *pdbv, int bit)
void dbv_free(struct dbv *pdbv)
void dbv_clr(struct dbv *pdbv, int bit)
#define BV_ARE_EQUAL(vec1, vec2)
#define BV_ISSET(bv, bit)
int tile_border_source_radius_sq(struct tile *ptile)
bool is_border_source(struct tile *ptile)
int tile_border_strength(struct tile *ptile, struct tile *source)
bool is_free_worked(const struct city *pcity, const struct tile *ptile)
int city_map_radius_sq_get(const struct city *pcity)
static bool is_non_allied_city_tile(const struct tile *ptile, const struct player *pplayer)
#define city_list_iterate(citylist, pcity)
#define city_tile(_pcity_)
#define city_owner(_pcity_)
#define city_list_iterate_end
#define city_tile_iterate(_nmap, _radius_sq, _city_tile, _tile)
#define city_tile_iterate_end
void auto_arrange_workers(struct city *pcity)
void city_refresh_queue_add(struct city *pcity)
bool city_refresh(struct city *pcity)
void city_refresh_queue_processing(void)
void conn_list_do_unbuffer(struct conn_list *dest)
void conn_list_compression_thaw(const struct conn_list *pconn_list)
void conn_list_do_buffer(struct conn_list *dest)
void conn_list_compression_freeze(const struct conn_list *pconn_list)
#define conn_list_iterate(connlist, pconn)
#define conn_list_iterate_end
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
int get_city_tile_output_bonus(const struct city *pcity, const struct tile *ptile, const struct output_type *poutput, enum effect_type effect_type)
signed short Continent_id
#define IDENTITY_NUMBER_ZERO
const struct ft_color ftc_server
const char * unit_link(const struct unit *punit)
const char * unit_tile_link(const struct unit *punit)
struct unit * game_unit_by_number(int id)
struct city * game_city_by_number(int id)
static GtkWidget * source
#define fc_assert_ret(condition)
#define log_verbose(message,...)
#define fc_assert(condition)
#define fc_assert_ret_val(condition, val)
#define log_debug(message,...)
#define log_error(message,...)
struct tile * rand_map_pos(const struct civ_map *nmap)
int map_vector_to_sq_distance(int dx, int dy)
bool terrain_surroundings_allow_change(const struct civ_map *nmap, const struct tile *ptile, const struct terrain *pterrain)
void map_distance_vector(int *dx, int *dy, const struct tile *tile0, const struct tile *tile1)
#define circle_dxyr_iterate(nmap, center_tile, sq_radius, _tile, dx, dy, dr)
#define cardinal_adjc_iterate_end
#define adjc_iterate(nmap, center_tile, itr_tile)
#define circle_dxyr_iterate_end
#define cardinal_adjc_iterate(nmap, center_tile, itr_tile)
#define circle_iterate(nmap, center_tile, sq_radius, tile_itr)
#define whole_map_iterate(_map, _tile)
#define MAP_TILE_OWNER_NULL
#define whole_map_iterate_end
#define circle_iterate_end
void assign_continent_numbers(void)
int get_ocean_size(Continent_id id)
struct terrain * most_shallow_ocean(bool frozen)
int get_lake_surrounders(Continent_id cont)
void player_map_init(struct player *pplayer)
static void terrain_change_bounce_single_unit(struct unit *punit, struct tile *from)
void update_player_tile_last_seen(struct player *pplayer, struct tile *ptile)
static void shared_vision_change_seen(struct player *pplayer, struct tile *ptile, const v_radius_t change, bool can_reveal_tiles)
void vision_clear_sight(struct vision *vision)
void map_claim_base(struct tile *ptile, struct extra_type *pextra, struct player *powner, struct player *ploser)
void map_set_border_vision(struct player *pplayer, const bool is_enabled)
void map_claim_ownership(struct tile *ptile, struct player *powner, struct tile *psource, bool claim_bases)
static int player_tile_own_seen(const struct player_tile *plrtile, enum vision_layer vlayer)
bool map_is_known(const struct tile *ptile, const struct player *pplayer)
void send_map_info(struct conn_list *dest)
static bool really_give_tile_info_from_player_to_player(struct player *pfrom, struct player *pdest, struct tile *ptile)
bool send_tile_suppression(bool now)
void destroy_extra(struct tile *ptile, struct extra_type *pextra)
static void check_units_single_tile(struct tile *ptile)
static void really_give_map_from_player_to_player(struct player *pfrom, struct player *pdest)
void disable_fog_of_war(void)
bool really_gives_vision(struct player *me, struct player *them)
static bool unit_is_on_layer(const struct unit *punit, enum vision_layer vlayer)
void map_know_and_see_all(struct player *pplayer)
static void map_change_own_seen(struct player *pplayer, struct tile *ptile, const v_radius_t change)
void show_map_to_all(void)
void send_tile_info(struct conn_list *dest, struct tile *ptile, bool send_unknown)
bool update_player_tile_knowledge(struct player *pplayer, struct tile *ptile)
static int map_get_seen(const struct player *pplayer, const struct tile *ptile, enum vision_layer vlayer)
static void ocean_to_land_fix_rivers(struct tile *ptile)
void give_map_from_player_to_player(struct player *pfrom, struct player *pdest)
void send_all_known_tiles(struct conn_list *dest)
void bounce_units_on_terrain_change(struct tile *ptile)
void give_seamap_from_player_to_player(struct player *pfrom, struct player *pdest)
void remove_shared_vision(struct player *pfrom, struct player *pto)
bool need_to_reassign_continents(const struct terrain *oldter, const struct terrain *newter)
static bool is_claimable_ocean(struct tile *ptile, struct tile *source, struct player *pplayer)
struct vision_site * map_get_player_city(const struct tile *ptile, const struct player *pplayer)
static bool is_terrain_ecologically_wet(struct tile *ptile)
void tile_claim_bases(struct tile *ptile, struct player *powner)
void disable_fog_of_war_player(struct player *pplayer)
void climate_change(bool warming, int effect)
void enable_fog_of_war(void)
static bool send_tile_suppressed
static void create_vision_dependencies(void)
void upgrade_all_city_extras(struct player *pplayer, bool discovery)
void create_extra(struct tile *ptile, struct extra_type *pextra, struct player *pplayer)
void map_update_border(struct tile *ptile, struct player *owner, int old_radius_sq, int new_radius_sq)
void map_set_known(struct tile *ptile, struct player *pplayer)
void map_show_all(struct player *pplayer)
static void map_unit_homecity_enqueue(struct tile *ptile)
static void map_change_seen(struct player *pplayer, struct tile *ptile, const v_radius_t change, bool can_reveal_tiles)
void map_show_tile(struct player *src_player, struct tile *ptile)
void give_citymap_from_player_to_player(struct city *pcity, struct player *pfrom, struct player *pdest)
void nuclear_winter(int effect)
void tile_change_side_effects(struct tile *ptile, bool refresh_city)
static void player_tile_init(struct tile *ptile, struct player *pplayer)
void terrain_changed(struct tile *ptile)
void player_map_free(struct player *pplayer)
static void unbuffer_shared_vision(struct player *pplayer)
static void map_claim_border_ownership(struct tile *ptile, struct player *powner, struct tile *psource)
bool map_is_known_and_seen(const struct tile *ptile, const struct player *pplayer, enum vision_layer vlayer)
void change_playertile_site(struct player_tile *ptile, struct vision_site *new_site)
void map_calculate_borders(void)
void fix_tile_on_terrain_change(struct tile *ptile, struct terrain *oldter, bool extend_rivers)
void enable_fog_of_war_player(struct player *pplayer)
void map_show_circle(struct player *pplayer, struct tile *ptile, int radius_sq)
void map_vision_update(struct player *pplayer, struct tile *ptile, const v_radius_t old_radius_sq, const v_radius_t new_radius_sq, bool can_reveal_tiles)
void map_claim_border(struct tile *ptile, struct player *owner, int radius_sq)
void update_tile_knowledge(struct tile *ptile)
void remove_player_from_maps(struct player *pplayer)
void give_shared_vision(struct player *pfrom, struct player *pto)
void check_terrain_change(struct tile *ptile, struct terrain *oldter)
bool give_distorted_map(struct player *pfrom, struct player *pto, int prob, bool reveal_cities)
void map_hide_tile(struct player *src_player, struct tile *ptile)
struct vision_site * map_get_player_site(const struct tile *ptile, const struct player *pplayer)
static void buffer_shared_vision(struct player *pplayer)
static bool give_tile_info_from_player_to_player(struct player *pfrom, struct player *pdest, struct tile *ptile)
void global_warming(int effect)
bool upgrade_city_extras(struct city *pcity, struct extra_type **gained)
void map_clear_border(struct tile *ptile)
void map_clear_known(struct tile *ptile, struct player *pplayer)
static void player_tile_free(struct tile *ptile, struct player *pplayer)
#define MAXIMUM_CLAIMED_OCEAN_SIZE
struct player_tile * map_get_player_tile(const struct tile *ptile, const struct player *pplayer)
void vision_change_sight(struct vision *vision, const v_radius_t radius_sq)
#define fc_realloc(ptr, sz)
bool can_unit_exist_at_tile(const struct civ_map *nmap, const struct unit *punit, const struct tile *ptile)
const char * nation_rule_name(const struct nation_type *pnation)
struct nation_type * nation_of_unit(const struct unit *punit)
void notify_player(const struct player *pplayer, const struct tile *ptile, enum event_type event, const struct ft_color color, const char *format,...)
void lsend_packet_map_info(struct conn_list *dest, const struct packet_map_info *packet)
int send_packet_tile_info(struct connection *pc, const struct packet_tile_info *packet)
int num_known_tech_with_flag(const struct player *pplayer, enum tech_flag_id flag)
int player_slot_count(void)
int player_number(const struct player *pplayer)
const char * player_name(const struct player *pplayer)
bool can_player_see_unit(const struct player *pplayer, const struct unit *punit)
int player_index(const struct player *pplayer)
bool pplayers_allied(const struct player *pplayer, const struct player *pplayer2)
bool gives_shared_vision(const struct player *me, const struct player *them)
#define players_iterate_end
#define players_iterate(_pplayer)
void send_player_info_c(struct player *src, struct conn_list *dest)
#define phase_players_iterate(pplayer)
#define phase_players_iterate_end
bool road_has_flag(const struct road_type *proad, enum road_flag_id flag)
int count_river_near_tile(struct civ_map *nmap, const struct tile *ptile, const struct extra_type *priver)
#define sanity_check_tile(x)
#define DEFAULT_SPECIALIST
enum server_states server_state(void)
enum city_needs_arrange needs_arrange
citizens specialists[SP_MAX]
struct city::@17::@19 server
struct civ_game::@30::@34 server
struct conn_list * est_connections
struct packet_game_info info
struct packet_scenario_info scenario
enum borders_mode borders
enum happyborders_type happyborders
int border_city_permanent_radius_sq
Resource_type_id resource
char label[MAX_LEN_MAP_LABEL]
char spec_sprite[MAX_LEN_NAME]
struct player * extras_owner
struct vision_site * site
struct extra_type * resource
struct city_list * cities
struct conn_list * connections
bv_player gives_shared_vision
struct player_tile * private_map
bv_player really_gives_vision
struct player::@69::@71 server
struct terrain * cooler_wetter_result
struct terrain * cooler_drier_result
struct terrain * warmer_wetter_result
struct terrain * warmer_drier_result
struct extra_type * resource
struct player * extras_owner
struct extra_type * placing
enum unit_activity activity
struct extra_type * activity_target
struct unit::@80::@83 server
#define sz_strlcpy(dest, src)
bool is_terrain_class_near_tile(const struct civ_map *nmap, const struct tile *ptile, enum terrain_class tclass)
Terrain_type_id terrain_count(void)
Terrain_type_id terrain_number(const struct terrain *pterrain)
#define is_ocean(pterrain)
#define is_ocean_tile(ptile)
#define terrain_has_flag(terr, flag)
void tile_add_extra(struct tile *ptile, const struct extra_type *pextra)
bool tile_has_river(const struct tile *ptile)
bool tile_map_check(struct civ_map *nmap, struct tile *vtile)
void tile_remove_extra(struct tile *ptile, const struct extra_type *pextra)
void tile_change_terrain(struct tile *ptile, struct terrain *pterrain)
bool tile_has_conflicting_extra(const struct tile *ptile, const struct extra_type *pextra)
void tile_set_owner(struct tile *ptile, struct player *pplayer, struct tile *claimer)
struct city * tile_city(const struct tile *ptile)
#define tile_claimer(_tile)
#define tile_worked(_tile)
#define tile_resource(_tile)
#define tile_terrain(_tile)
#define tile_continent(_tile)
#define tile_has_extra(ptile, pextra)
#define tile_owner(_tile)
int get_transporter_occupancy(const struct unit *ptrans)
bool unit_is_alive(int id)
bool unit_transported(const struct unit *pcargo)
struct unit_list * unit_transport_cargo(const struct unit *ptrans)
static bool is_non_allied_unit_tile(const struct tile *ptile, const struct player *pplayer)
bool unit_activity_handling(struct unit *punit, enum unit_activity new_activity)
#define unit_list_iterate(unitlist, punit)
#define unit_list_iterate_safe(unitlist, _unit)
#define unit_list_iterate_end
#define unit_list_iterate_safe_end
const struct unit_type * unit_type_get(const struct unit *punit)
const char * unit_rule_name(const struct unit *punit)
struct vision_site * vision_site_copy(const struct vision_site *psite)
void vision_site_destroy(struct vision_site *psite)
#define V_RADIUS(main_sq, invis_sq, subs_sq)
#define vision_layer_iterate(v)
#define vision_site_owner(v)
short int v_radius_t[V_COUNT]
#define vision_layer_iterate_end