Freeciv21
Develop your civilization from humble roots to a global empire
terrain.cpp File Reference
#include "fcintl.h"
#include "log.h"
#include "rand.h"
#include "shared.h"
#include "support.h"
#include "extras.h"
#include "game.h"
#include "map.h"
#include "rgbcolor.h"
#include "road.h"
#include "terrain.h"
+ Include dependency graph for terrain.cpp:

Go to the source code of this file.

Macros

#define variable_adjc_iterate(nmap, center_tile, _tile, card_only)
 This iterator behaves like adjc_iterate or cardinal_adjc_iterate depending on the value of card_only. More...
 
#define variable_adjc_iterate_end
 

Functions

void terrains_init ()
 Initialize terrain and resource structures. More...
 
void terrains_free ()
 Free memory which is associated with terrain types. More...
 
struct terrainterrain_array_first ()
 Return the first item of terrains. More...
 
const struct terrainterrain_array_last ()
 Return the last item of terrains. More...
 
Terrain_type_id terrain_count ()
 Return the number of terrains. More...
 
char terrain_identifier (const struct terrain *pterrain)
 Return the terrain identifier. More...
 
Terrain_type_id terrain_index (const struct terrain *pterrain)
 Return the terrain index. More...
 
Terrain_type_id terrain_number (const struct terrain *pterrain)
 Return the terrain index. More...
 
struct terrainterrain_by_number (const Terrain_type_id type)
 Return the terrain for the given terrain index. More...
 
struct terrainterrain_by_rule_name (const char *name)
 Return the terrain type matching the name, or T_UNKNOWN if none matches. More...
 
struct terrainterrain_by_translated_name (const char *name)
 Return the terrain type matching the name, or T_UNKNOWN if none matches. More...
 
const char * terrain_name_translation (const struct terrain *pterrain)
 Return the (translated) name of the terrain. More...
 
const char * terrain_rule_name (const struct terrain *pterrain)
 Return the (untranslated) rule name of the terrain. More...
 
bool terrain_has_resource (const struct terrain *pterrain, const struct extra_type *presource)
 Check for resource in terrain resources list. More...
 
struct resource_typeresource_type_init (struct extra_type *pextra)
 Initialize resource_type structure. More...
 
void resource_types_free ()
 Free the memory associated with resource types. More...
 
bool is_terrain_card_near (const struct tile *ptile, const struct terrain *pterrain, bool check_self)
 Returns TRUE iff any cardinally adjacent tile contains the given terrain. More...
 
bool is_terrain_near_tile (const struct tile *ptile, const struct terrain *pterrain, bool check_self)
 Returns TRUE iff any adjacent tile contains the given terrain. More...
 
int count_terrain_property_near_tile (const struct tile *ptile, bool cardinal_only, bool percentage, enum mapgen_terrain_property prop)
 Return the number of adjacent tiles that have the given terrain property. More...
 
bool is_terrain_flag_card_near (const struct tile *ptile, enum terrain_flag_id flag)
 Returns TRUE iff any cardinally adjacent tile contains terrain with the given flag (does not check ptile itself). More...
 
bool is_terrain_flag_near_tile (const struct tile *ptile, enum terrain_flag_id flag)
 Returns TRUE iff any adjacent tile contains terrain with the given flag (does not check ptile itself). More...
 
int count_terrain_flag_near_tile (const struct tile *ptile, bool cardinal_only, bool percentage, enum terrain_flag_id flag)
 Return the number of adjacent tiles that have terrain with the given flag (not including ptile itself). More...
 
const char * get_infrastructure_text (bv_extras extras)
 Return a (static) string with extra(s) name(s): eg: "Mine" eg: "Road/Farmland" This only includes "infrastructure", i.e., man-made extras. More...
 
struct extra_typeget_preferred_pillage (bv_extras extras)
 Returns the highest-priority (best) extra to be pillaged from the terrain set. More...
 
enum terrain_class terrain_type_terrain_class (const struct terrain *pterrain)
 What terrain class terrain type belongs to. More...
 
bool is_terrain_class_card_near (const struct tile *ptile, enum terrain_class tclass)
 Is there terrain of the given class cardinally near tile? (Does not check ptile itself.) More...
 
bool is_terrain_class_near_tile (const struct tile *ptile, enum terrain_class tclass)
 Is there terrain of the given class near tile? (Does not check ptile itself.) More...
 
int count_terrain_class_near_tile (const struct tile *ptile, bool cardinal_only, bool percentage, enum terrain_class tclass)
 Return the number of adjacent tiles that have given terrain class (not including ptile itself). More...
 
const char * terrain_class_name_translation (enum terrain_class tclass)
 Return the (translated) name of the given terrain class. More...
 
bool terrain_can_support_alteration (const struct terrain *pterrain, enum terrain_alteration alter)
 Can terrain support given infrastructure? More...
 
int terrain_extra_build_time (const struct terrain *pterrain, enum unit_activity activity, const struct extra_type *tgt)
 Time to complete the extra building activity on the given terrain. More...
 
int terrain_extra_removal_time (const struct terrain *pterrain, enum unit_activity activity, const struct extra_type *tgt)
 Time to complete the extra removal activity on the given terrain. More...
 
void user_terrain_flags_init ()
 Initialize user terrain type flags. More...
 
void user_terrain_flags_free ()
 Frees the memory associated with all user terrain flags. More...
 
void set_user_terrain_flag_name (enum terrain_flag_id id, const char *name, const char *helptxt)
 Sets user defined name for terrain flag. More...
 
const char * terrain_flag_id_name_cb (enum terrain_flag_id flag)
 Terrain flag name callback, called from specenum code. More...
 
const char * terrain_flag_helptxt (enum terrain_flag_id id)
 Return the (untranslated) helptxt of the user terrain flag. More...
 

Variables

static struct terrain civ_terrains [MAX_NUM_TERRAINS]
 
static struct user_flag user_terrain_flags [MAX_NUM_USER_TER_FLAGS]
 

Macro Definition Documentation

◆ variable_adjc_iterate

#define variable_adjc_iterate (   nmap,
  center_tile,
  _tile,
  card_only 
)
Value:
{ \
enum direction8 *_tile##_list; \
int _tile##_count; \
\
if (card_only) { \
_tile##_list = wld.map.cardinal_dirs; \
_tile##_count = wld.map.num_cardinal_dirs; \
} else { \
_tile##_list = wld.map.valid_dirs; \
_tile##_count = wld.map.num_valid_dirs; \
} \
adjc_dirlist_iterate(nmap, center_tile, _tile, _tile##_dir, \
_tile##_list, _tile##_count) \
{
struct world wld
Definition: game.cpp:48
enum direction8 valid_dirs[8]
Definition: map_types.h:69
int num_cardinal_dirs
Definition: map_types.h:70
int num_valid_dirs
Definition: map_types.h:70
enum direction8 cardinal_dirs[8]
Definition: map_types.h:69
struct civ_map map
Definition: world_object.h:21

This iterator behaves like adjc_iterate or cardinal_adjc_iterate depending on the value of card_only.

Definition at line 232 of file terrain.cpp.

◆ variable_adjc_iterate_end

#define variable_adjc_iterate_end
Value:
} \
adjc_dirlist_iterate_end; \
}

Definition at line 248 of file terrain.cpp.

Function Documentation

◆ count_terrain_class_near_tile()

int count_terrain_class_near_tile ( const struct tile ptile,
bool  cardinal_only,
bool  percentage,
enum terrain_class  tclass 
)

Return the number of adjacent tiles that have given terrain class (not including ptile itself).

Definition at line 517 of file terrain.cpp.

Referenced by can_channel_land(), can_reclaim_ocean(), create_tmap(), island_river_mouth_suitability(), island_river_suitability(), make_fracture_relief(), make_river(), make_rivers(), and river_test_adjacent_ocean().

◆ count_terrain_flag_near_tile()

int count_terrain_flag_near_tile ( const struct tile ptile,
bool  cardinal_only,
bool  percentage,
enum terrain_flag_id  flag 
)

Return the number of adjacent tiles that have terrain with the given flag (not including ptile itself).

Definition at line 365 of file terrain.cpp.

Referenced by can_freeze_terrain(), and can_thaw_terrain().

◆ count_terrain_property_near_tile()

int count_terrain_property_near_tile ( const struct tile ptile,
bool  cardinal_only,
bool  percentage,
enum mapgen_terrain_property  prop 
)

Return the number of adjacent tiles that have the given terrain property.

Definition at line 298 of file terrain.cpp.

Referenced by make_rivers().

◆ get_infrastructure_text()

const char* get_infrastructure_text ( bv_extras  extras)

Return a (static) string with extra(s) name(s): eg: "Mine" eg: "Road/Farmland" This only includes "infrastructure", i.e., man-made extras.

Definition at line 394 of file terrain.cpp.

Referenced by popup_info_text(), and popup_terrain_info().

◆ get_preferred_pillage()

struct extra_type* get_preferred_pillage ( bv_extras  extras)

Returns the highest-priority (best) extra to be pillaged from the terrain set.

May return nullptr if nothing is available.

Definition at line 439 of file terrain.cpp.

Referenced by popup_pillage_dialog(), request_unit_pillage(), and unit_assign_specific_activity_target().

◆ is_terrain_card_near()

bool is_terrain_card_near ( const struct tile ptile,
const struct terrain pterrain,
bool  check_self 
)

Returns TRUE iff any cardinally adjacent tile contains the given terrain.

Definition at line 256 of file terrain.cpp.

◆ is_terrain_class_card_near()

bool is_terrain_class_card_near ( const struct tile ptile,
enum terrain_class  tclass 
)

Is there terrain of the given class cardinally near tile? (Does not check ptile itself.)

Definition at line 473 of file terrain.cpp.

Referenced by fill_island().

◆ is_terrain_class_near_tile()

bool is_terrain_class_near_tile ( const struct tile ptile,
enum terrain_class  tclass 
)

◆ is_terrain_flag_card_near()

bool is_terrain_flag_card_near ( const struct tile ptile,
enum terrain_flag_id  flag 
)

Returns TRUE iff any cardinally adjacent tile contains terrain with the given flag (does not check ptile itself).

Definition at line 325 of file terrain.cpp.

◆ is_terrain_flag_near_tile()

bool is_terrain_flag_near_tile ( const struct tile ptile,
enum terrain_flag_id  flag 
)

Returns TRUE iff any adjacent tile contains terrain with the given flag (does not check ptile itself).

Definition at line 345 of file terrain.cpp.

◆ is_terrain_near_tile()

bool is_terrain_near_tile ( const struct tile ptile,
const struct terrain pterrain,
bool  check_self 
)

Returns TRUE iff any adjacent tile contains the given terrain.

Definition at line 277 of file terrain.cpp.

Referenced by evaluate_city_name_priority(), and fill_island().

◆ resource_type_init()

struct resource_type* resource_type_init ( struct extra_type pextra)

Initialize resource_type structure.

Definition at line 209 of file terrain.cpp.

Referenced by handle_ruleset_resource(), and load_terrain_names().

◆ resource_types_free()

void resource_types_free ( )

Free the memory associated with resource types.

Definition at line 223 of file terrain.cpp.

Referenced by extras_free().

◆ set_user_terrain_flag_name()

void set_user_terrain_flag_name ( enum terrain_flag_id  id,
const char *  name,
const char *  helptxt 
)

Sets user defined name for terrain flag.

Definition at line 673 of file terrain.cpp.

Referenced by handle_ruleset_terrain_flag(), load_terrain_names(), and rscompat_names().

◆ terrain_array_first()

struct terrain* terrain_array_first ( )

Return the first item of terrains.

Definition at line 71 of file terrain.cpp.

◆ terrain_array_last()

const struct terrain* terrain_array_last ( )

Return the last item of terrains.

Definition at line 82 of file terrain.cpp.

◆ terrain_by_number()

◆ terrain_by_rule_name()

struct terrain* terrain_by_rule_name ( const char *  name)

◆ terrain_by_translated_name()

struct terrain* terrain_by_translated_name ( const char *  name)

Return the terrain type matching the name, or T_UNKNOWN if none matches.

Definition at line 158 of file terrain.cpp.

Referenced by help_dialog::make_tree(), and help_widget::set_topic_terrain().

◆ terrain_can_support_alteration()

bool terrain_can_support_alteration ( const struct terrain pterrain,
enum terrain_alteration  alter 
)

Can terrain support given infrastructure?

Definition at line 558 of file terrain.cpp.

◆ terrain_class_name_translation()

const char* terrain_class_name_translation ( enum terrain_class  tclass)

Return the (translated) name of the given terrain class.

You don't have to free the return pointer.

Definition at line 546 of file terrain.cpp.

Referenced by req_text_insert(), universal_name_translation(), and worklist_item_postpone_req_vec().

◆ terrain_count()

◆ terrain_extra_build_time()

int terrain_extra_build_time ( const struct terrain pterrain,
enum unit_activity  activity,
const struct extra_type tgt 
)

Time to complete the extra building activity on the given terrain.

Definition at line 579 of file terrain.cpp.

Referenced by adv_settlers_road_bonus(), check_recursive_road_connect(), helptext_extra(), helptext_extra_for_terrain_str(), manual_command(), and tile_activity_time().

◆ terrain_extra_removal_time()

int terrain_extra_removal_time ( const struct terrain pterrain,
enum unit_activity  activity,
const struct extra_type tgt 
)

Time to complete the extra removal activity on the given terrain.

Definition at line 615 of file terrain.cpp.

Referenced by tile_activity_time().

◆ terrain_flag_helptxt()

const char* terrain_flag_helptxt ( enum terrain_flag_id  id)

Return the (untranslated) helptxt of the user terrain flag.

Definition at line 708 of file terrain.cpp.

Referenced by helptext_terrain(), save_terrain_ruleset(), and send_ruleset_terrain().

◆ terrain_flag_id_name_cb()

const char* terrain_flag_id_name_cb ( enum terrain_flag_id  flag)

Terrain flag name callback, called from specenum code.

Definition at line 696 of file terrain.cpp.

Referenced by first_free_terrain_user_flag(), save_terrain_ruleset(), and send_ruleset_terrain().

◆ terrain_has_resource()

bool terrain_has_resource ( const struct terrain pterrain,
const struct extra_type presource 
)

Check for resource in terrain resources list.

Definition at line 192 of file terrain.cpp.

Referenced by is_native_tile_to_extra(), sg_load_map_tiles_extras(), sg_load_map_tiles_resources(), sg_load_player_vision(), tile_set_resource(), and tile_set_terrain().

◆ terrain_identifier()

char terrain_identifier ( const struct terrain pterrain)

Return the terrain identifier.

Definition at line 98 of file terrain.cpp.

Referenced by compat_load_020600(), and sg_save_savefile().

◆ terrain_index()

◆ terrain_name_translation()

◆ terrain_number()

Terrain_type_id terrain_number ( const struct terrain pterrain)

◆ terrain_rule_name()

◆ terrain_type_terrain_class()

◆ terrains_free()

void terrains_free ( )

Free memory which is associated with terrain types.

Definition at line 50 of file terrain.cpp.

Referenced by game_ruleset_free().

◆ terrains_init()

void terrains_init ( )

Initialize terrain and resource structures.

Definition at line 34 of file terrain.cpp.

Referenced by game_ruleset_init().

◆ user_terrain_flags_free()

void user_terrain_flags_free ( )

Frees the memory associated with all user terrain flags.

Definition at line 661 of file terrain.cpp.

Referenced by game_ruleset_free().

◆ user_terrain_flags_init()

void user_terrain_flags_init ( )

Initialize user terrain type flags.

Definition at line 649 of file terrain.cpp.

Referenced by game_ruleset_init().

Variable Documentation

◆ civ_terrains

struct terrain civ_terrains[MAX_NUM_TERRAINS]
static

◆ user_terrain_flags