The Battle for Wesnoth  1.15.3+dev
types.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2018 by David White <dave@whitevine.net>
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 #pragma once
16 
17 #include "gettext.hpp"
18 #include "utils/make_enum.hpp"
19 #include "map/location.hpp"
20 #include "movetype.hpp"
21 #include "units/race.hpp"
22 #include "units/attack_type.hpp"
23 #include "game_errors.hpp"
24 
25 #include <array>
26 #include <map>
27 #include <set>
28 #include <string>
29 #include <vector>
30 
31 class unit_ability_list;
33 
34 
35 typedef std::map<std::string, movetype> movement_type_map;
36 
37 
38 /**
39  * A single unit type that the player may recruit.
40  * Individual units are defined by the unit class.
41  */
42 class unit_type
43 {
44 public:
45  class error : public game::game_error
46  {
47  public:
48  error(const std::string& msg)
49  : game::game_error(msg)
50  {
51  }
52  };
53  /**
54  * Creates a unit type for the given config, but delays its build
55  * till later.
56  * @note @a cfg is not copied, so it has to point to some permanent
57  * storage, that is, a child of unit_type_data::unit_cfg.
58  */
59  explicit unit_type(const config &cfg, const std::string & parent_id="");
60  unit_type(const unit_type& o);
61 
62  ~unit_type();
63 
64  /// Records the status of the lazy building of unit types.
65  /// These are in order of increasing levels of being built.
66  /// HELP_INDEX is already defined in a windows header under some conditions.
68 
69  /**
70  * Validate the id argument.
71  * Replaces invalid characters in the reference with underscores.
72  * @param id The proposed id for a unit_type.
73  * @throw error if id starts with a space.
74  */
75  static void check_id(std::string& id);
76 
77 private: // These will be called by build().
78  /// Load data into an empty unit_type (build to FULL).
79  void build_full(const movement_type_map &movement_types,
80  const race_map &races, const config::const_child_itors &traits);
81  /// Partially load data into an empty unit_type (build to HELP_INDEXED).
82  void build_help_index(const movement_type_map &movement_types,
83  const race_map &races, const config::const_child_itors &traits);
84  /// Load the most needed data into an empty unit_type (build to CREATE).
85  void build_created();
86 
87  typedef std::map<std::string,unit_type> variations_map;
88 public:
89  /// Performs a build of this to the indicated stage.
90  void build(BUILD_STATUS status, const movement_type_map &movement_types,
91  const race_map &races, const config::const_child_itors &traits);
92  /// Performs a build of this to the indicated stage.
93  /// (This does not logically change the unit type, so allow const access.)
94  void build(BUILD_STATUS status, const movement_type_map &movement_types,
95  const race_map &races, const config::const_child_itors &traits) const
96  { const_cast<unit_type *>(this)->build(status, movement_types, races, traits); }
97 
98 
99  /** Get the advancement tree
100  * @return A set of ids of all unit_type objects that this unit_type can
101  * directly or indirectly advance to.
102  */
103  std::set<std::string> advancement_tree() const;
104 
105  /// A vector of unit_type ids that this unit_type can advance to.
106  const std::vector<std::string>& advances_to() const { return advances_to_; }
107  /// A vector of unit_type ids that can advance to this unit_type.
108  const std::vector<std::string> advances_from() const;
109 
110  /// Returns two iterators pointing to a range of AMLA configs.
112  { return cfg_.child_range("advancement"); }
113 
114  /**
115  * Returns a gendered variant of this unit_type.
116  * @param gender "male" or "female".
117  */
118  const unit_type& get_gender_unit_type(std::string gender) const;
119  /// Returns a gendered variant of this unit_type based on the given parameter.
120  const unit_type& get_gender_unit_type(unit_race::GENDER gender) const;
121 
122  const unit_type& get_variation(const std::string& id) const;
123  /** Info on the type of unit that the unit reanimates as. */
124  const std::string& undead_variation() const { return undead_variation_; }
125 
126  unsigned int num_traits() const { return num_traits_; }
127 
128  /** The name of the unit in the current language setting. */
129  const t_string& type_name() const { return type_name_; }
130 
131  /// The id for this unit_type.
132  const std::string& id() const { return id_; }
133  /// A variant on id() that is more descriptive, for use with message logging.
134  const std::string log_id() const { return id_ + debug_id_; }
135  /// The id of the original type from which this (variation) descended.
136  const std::string& base_id() const { return base_id_; }
137  /// The id of this variation; empty if it's a gender variation or a base unit.
138  const std::string& variation_id() const { return variation_id_; }
139  // NOTE: this used to be a const object reference, but it messed up with the
140  // translation engine upon changing the language in the same session.
141  t_string unit_description() const;
142  bool has_special_notes() const;
143  const std::vector<t_string>& special_notes() const;
144  int hitpoints() const { return hitpoints_; }
145  double hp_bar_scaling() const { return hp_bar_scaling_; }
146  double xp_bar_scaling() const { return xp_bar_scaling_; }
147  int level() const { return level_; }
148  int recall_cost() const { return recall_cost_;}
149  int movement() const { return movement_; }
150  int vision() const { return vision_ < 0 ? movement() : vision_; }
151  /// If @a base_value is set to true, do not fall back to movement().
152  int vision(bool base_value) const { return base_value ? vision_ : vision(); }
153  int jamming() const {return jamming_; }
154  int max_attacks() const { return max_attacks_; }
155  int cost() const { return cost_; }
156  const std::string& default_variation() const { return default_variation_; }
157  const t_string& variation_name() const { return variation_name_; }
158  const std::string& usage() const { return usage_; }
159  const std::string& image() const { return image_; }
160  const std::string& icon() const { return icon_; }
161  const std::string &small_profile() const { return small_profile_; }
162  const std::string &big_profile() const { return profile_; }
163  std::string halo() const { return cfg_["halo"]; }
164  std::string ellipse() const { return cfg_["ellipse"]; }
165  bool generate_name() const { return cfg_["generate_name"].to_bool(true); }
166  const std::vector<unit_animation>& animations() const;
167 
168  const std::string& flag_rgb() const;
169 
170  const_attack_itors attacks() const;
171  const movetype & movement_type() const { return movement_type_; }
172 
173  int experience_needed(bool with_acceleration=true) const;
174 
175  MAKE_ENUM (ALIGNMENT,
176  (LAWFUL, N_("lawful"))
177  (NEUTRAL, N_("neutral"))
178  (CHAOTIC, N_("chaotic"))
179  (LIMINAL, N_("liminal"))
180  )
181 
182  ALIGNMENT alignment() const { return alignment_; }
183  static std::string alignment_description(ALIGNMENT align, unit_race::GENDER gender = unit_race::MALE);
184 
186  {
187  explicit ability_metadata(const config& cfg);
188 
189  std::string id;
190 
193 
196 
199 
204  };
205 
206  const std::vector<ability_metadata>& abilities_metadata() const { return abilities_; }
207 
208  /** Some extra abilities that may be gained through AMLA advancements. */
209  const std::vector<ability_metadata>& adv_abilities_metadata() const { return adv_abilities_; }
210 
211  bool can_advance() const { return !advances_to_.empty(); }
212 
213  bool musthave_status(const std::string& status) const;
214 
215  bool has_zoc() const { return zoc_; }
216 
217  bool has_ability_by_id(const std::string& ability) const;
218  std::vector<std::string> get_ability_list() const;
219 
221  { return possible_traits_.child_range("trait"); }
222 
223  const config& abilities_cfg() const
224  { return cfg_.child_or_empty("abilities"); }
225 
227  { return cfg_.child_range("advancement"); }
228 
230  { return cfg_.child_range("event"); }
231 
232  bool has_random_traits() const;
233 
234  /// The returned vector will not be empty, provided this has been built
235  /// to the HELP_INDEXED status.
236  const std::vector<unit_race::GENDER>& genders() const { return genders_; }
237  bool has_gender_variation(const unit_race::GENDER gender) const
238  {
239  return std::find(genders_.begin(), genders_.end(), gender) != genders_.end();
240  }
241 
242  std::vector<std::string> variations() const;
243  const variations_map& variation_types() const {return variations_; }
244 
245  /**
246  * @param variation_id The id of the variation we search for.
247  * @return Whether one of the type's variations' (or the
248  * siblings' if the unit_type is a variation
249  * itself) id matches @a variation_id.
250  */
251  bool has_variation(const std::string& variation_id) const;
252 
253  /**
254  * Whether the unit type has at least one help-visible variation.
255  */
256  bool show_variations_in_help() const;
257 
258  /// Returns the ID of this type's race without the need to build the type.
259  std::string race_id() const { return cfg_["race"]; } //race_->id(); }
260  /// Never returns nullptr, but may point to the null race.
261  /// Requires building to the HELP_INDEXED status to get the correct race.
262  const unit_race* race() const { return race_; }
263  bool hide_help() const;
264  bool do_not_list() const { return do_not_list_; }
265 
266  const config &get_cfg() const { return cfg_; }
267  /// Returns a trimmed config suitable for use with units.
268  const config & get_cfg_for_units() const
269  { return built_unit_cfg_ ? unit_cfg_ : build_unit_cfg(); }
270 
271  /// Gets resistance while considering custom WML abilities.
272  /// Attention: Filters in resistance-abilities will be ignored.
273  int resistance_against(const std::string& damage_name, bool attacker) const;
274 
275  void apply_scenario_fix(const config& cfg);
276  void remove_scenario_fixes();
277 private:
278  /// Generates (and returns) a trimmed config suitable for use with units.
279  const config & build_unit_cfg() const;
280 
281  /// Identical to unit::resistance_filter_matches.
282  bool resistance_filter_matches(const config& cfg,bool attacker,const std::string& damage_name, int res) const;
283 
284 private:
285  void operator=(const unit_type& o);
286 
287  const config &cfg_;
288  mutable config unit_cfg_; /// Generated as needed via get_cfg_for_units().
289  mutable bool built_unit_cfg_;
291 
292  std::string id_;
293  std::string debug_id_; /// A suffix for id_, used when logging messages.
294  std::string base_id_; /// The id of the top ancestor of this unit_type.
297  std::vector<t_string> special_notes_;
300  int level_;
303  int vision_;
304  int jamming_;
306  int cost_;
307  std::string usage_;
308  std::string undead_variation_;
309 
310  std::string image_;
311  std::string icon_;
312  std::string small_profile_;
313  std::string profile_;
314  std::string flag_rgb_;
315 
316  unsigned int num_traits_;
317 
318  std::array<std::unique_ptr<unit_type>, 2> gender_types_;
319 
320  variations_map variations_;
321  std::string default_variation_;
322  std::string variation_id_;
324 
325  const unit_race* race_; /// Never nullptr, but may point to the null race.
326 
327  std::vector<ability_metadata> abilities_, adv_abilities_;
328 
330 
331  std::vector<std::string> advances_to_;
333 
334 
335  ALIGNMENT alignment_;
336 
338 
340 
341  std::vector<unit_race::GENDER> genders_;
342 
343  // animations are loaded only after the first animations() call
344  mutable std::vector<unit_animation> animations_;
345 
347 };
348 
350 {
351 public:
352  unit_type_data(const unit_type_data&) = delete;
353  unit_type_data& operator=(const unit_type_data&) = delete;
354 
355  unit_type_data();
356 
357  typedef std::map<std::string,unit_type> unit_type_map;
358 
359  const unit_type_map &types() const { return types_; }
360  const race_map &races() const { return races_; }
361  const config::const_child_itors traits() const { return unit_cfg_->child_range("trait"); }
362  void set_config(config &cfg);
363 
364  /// Finds a unit_type by its id() and makes sure it is built to the specified level.
365  const unit_type *find(const std::string &key, unit_type::BUILD_STATUS status = unit_type::FULL) const;
366  void check_types(const std::vector<std::string>& types) const;
367  const unit_race *find_race(const std::string &) const;
368 
369  /// Makes sure the all unit_types are built to the specified level.
370  void build_all(unit_type::BUILD_STATUS status);
371  /// Makes sure the provided unit_type is built to the specified level.
372  void build_unit_type(const unit_type & ut, unit_type::BUILD_STATUS status) const
373  { ut.build(status, movement_types_, races_, unit_cfg_->child_range("trait")); }
374 
375  /** Checks if the [hide_help] tag contains these IDs. */
376  bool hide_help(const std::string &type_id, const std::string &race_id) const;
377 
378  void apply_scenario_fix(const config& cfg);
379  void remove_scenario_fixes();
380 private:
381  /** Parses the [hide_help] tag. */
382  void read_hide_help(const config &cfg);
383 
384  void clear();
385 
386  mutable unit_type_map types_;
389 
390  /** True if [hide_help] contains a 'all=yes' at its root. */
392  // vectors containing the [hide_help] and its sub-tags [not]
393  std::vector< std::set<std::string>> hide_help_type_;
394  std::vector< std::set<std::string>> hide_help_race_;
395 
398 };
399 
401 
402 void adjust_profile(std::string& profile);
403 
405  unit_experience_accelerator(int modifier);
407  static int get_acceleration();
408 private:
410 };
int jamming_
Definition: types.hpp:304
std::vector< attack_ptr > attack_list
const std::string & base_id() const
The id of the original type from which this (variation) descended.
Definition: types.hpp:136
int experience_needed_
Definition: types.hpp:332
bool do_not_list_
Definition: types.hpp:329
unit_type::BUILD_STATUS build_status_
Definition: types.hpp:397
std::map< std::string, unit_type > unit_type_map
Definition: types.hpp:357
int vision(bool base_value) const
If base_value is set to true, do not fall back to movement().
Definition: types.hpp:152
std::string default_variation_
Definition: types.hpp:321
error(const std::string &msg)
Definition: types.hpp:48
std::string flag_rgb_
Definition: types.hpp:314
bool generate_name() const
Definition: types.hpp:165
ALIGNMENT alignment_
Definition: types.hpp:335
t_string variation_name_
Definition: types.hpp:323
std::string profile_
Definition: types.hpp:313
config::const_child_itors events() const
Definition: types.hpp:229
const std::vector< t_string > & special_notes() const
Definition: types.cpp:494
const std::string & big_profile() const
Definition: types.hpp:162
std::string debug_id_
Definition: types.hpp:293
int hitpoints_
Definition: types.hpp:298
const std::vector< std::string > & advances_to() const
A vector of unit_type ids that this unit_type can advance to.
Definition: types.hpp:106
int recall_cost_
Definition: types.hpp:301
std::string base_id_
A suffix for id_, used when logging messages.
Definition: types.hpp:294
const config & build_unit_cfg() const
Generates (and returns) a trimmed config suitable for use with units.
Definition: types.cpp:740
std::string variation_id_
Definition: types.hpp:322
const std::string & flag_rgb() const
Definition: types.cpp:684
~unit_type()
Definition: types.cpp:152
child_itors child_range(config_key_type key)
Definition: config.cpp:362
bool has_special_notes() const
Definition: types.cpp:489
void adjust_profile(std::string &profile)
Definition: types.cpp:1435
void clear(const std::string &key)
Definition: general.cpp:205
t_string description_
Definition: types.hpp:296
int experience_needed(bool with_acceleration=true) const
Definition: types.cpp:541
config possible_traits_
Definition: types.hpp:339
std::array< std::unique_ptr< unit_type >, 2 > gender_types_
Definition: types.hpp:318
int resistance_against(const std::string &damage_name, bool attacker) const
Gets resistance while considering custom WML abilities.
Definition: types.cpp:784
const config & get_cfg() const
Definition: types.hpp:266
BUILD_STATUS
Records the status of the lazy building of unit types.
Definition: types.hpp:67
std::set< std::string > advancement_tree() const
Get the advancement tree.
Definition: types.cpp:609
static void msg(const char *act, debug_info &i, const char *to="", const char *result="")
Definition: debugger.cpp:109
const std::string & variation_id() const
The id of this variation; empty if it&#39;s a gender variation or a base unit.
Definition: types.hpp:138
t_string type_name_
The id of the top ancestor of this unit_type.
Definition: types.hpp:295
bool built_unit_cfg_
Generated as needed via get_cfg_for_units().
Definition: types.hpp:289
variations_map variations_
Definition: types.hpp:320
const race_map & races() const
Definition: types.hpp:360
const config & cfg_
Definition: types.hpp:287
The basic "size" of the unit - flying, small land, large land, etc.
Definition: movetype.hpp:41
void operator=(const unit_type &o)
const unit_type_map & types() const
Definition: types.hpp:359
void build_help_index(const movement_type_map &movement_types, const race_map &races, const config::const_child_itors &traits)
Partially load data into an empty unit_type (build to HELP_INDEXED).
Definition: types.cpp:217
bool do_not_list() const
Definition: types.hpp:264
const std::vector< std::string > advances_from() const
A vector of unit_type ids that can advance to this unit_type.
Definition: types.cpp:616
int level_
Definition: types.hpp:300
A single unit type that the player may recruit.
Definition: types.hpp:42
const unit_race * race_
Definition: types.hpp:325
void build_unit_type(const unit_type &ut, unit_type::BUILD_STATUS status) const
Makes sure the provided unit_type is built to the specified level.
Definition: types.hpp:372
std::string icon_
Definition: types.hpp:311
bool musthave_status(const std::string &status) const
Definition: types.cpp:636
const config & get_cfg_for_units() const
Returns a trimmed config suitable for use with units.
Definition: types.hpp:268
const std::vector< unit_race::GENDER > & genders() const
The returned vector will not be empty, provided this has been built to the HELP_INDEXED status...
Definition: types.hpp:236
int cost() const
Definition: types.hpp:155
movement_type_map movement_types_
Definition: types.hpp:387
int vision() const
Definition: types.hpp:150
bool zoc_
Definition: types.hpp:329
bool hide_help() const
Definition: types.cpp:588
const movetype & movement_type() const
Definition: types.hpp:171
const std::vector< unit_animation > & animations() const
Definition: types.cpp:498
const t_string & type_name() const
The name of the unit in the current language setting.
Definition: types.hpp:129
std::vector< std::set< std::string > > hide_help_type_
Definition: types.hpp:393
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config::const_child_itors &traits) const
Performs a build of this to the indicated stage.
Definition: types.hpp:94
std::vector< std::set< std::string > > hide_help_race_
Definition: types.hpp:394
const std::string & usage() const
Definition: types.hpp:158
std::vector< unit_animation > animations_
Definition: types.hpp:344
std::string small_profile_
Definition: types.hpp:312
std::string ellipse() const
Definition: types.hpp:164
MAKE_ENUM(ALIGNMENT,(LAWFUL, N_("lawful"))(NEUTRAL, N_("neutral"))(CHAOTIC, N_("chaotic"))(LIMINAL, N_("liminal"))) ALIGNMENT alignment() const
Definition: types.hpp:175
std::string undead_variation_
Definition: types.hpp:308
void remove_scenario_fixes()
Definition: types.cpp:1378
int movement_
Definition: types.hpp:302
movetype movement_type_
Definition: types.hpp:337
const std::vector< ability_metadata > & abilities_metadata() const
Definition: types.hpp:206
std::string race_id() const
Returns the ID of this type&#39;s race without the need to build the type.
Definition: types.hpp:259
const std::string & id() const
The id for this unit_type.
Definition: types.hpp:132
std::map< std::string, movetype > movement_type_map
Definition: types.hpp:32
Error used for any general game error, e.g.
Definition: game_errors.hpp:46
double xp_bar_scaling_
Definition: types.hpp:299
const config::const_child_itors traits() const
Definition: types.hpp:361
double xp_bar_scaling() const
Definition: types.hpp:146
boost::iterator_range< const_child_iterator > const_child_itors
Definition: config.hpp:210
int cost_
Definition: types.hpp:306
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config::const_child_itors &traits)
Performs a build of this to the indicated stage.
Definition: types.cpp:414
const std::string & undead_variation() const
Info on the type of unit that the unit reanimates as.
Definition: types.hpp:124
const std::string log_id() const
A variant on id() that is more descriptive, for use with message logging.
Definition: types.hpp:134
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:111
std::vector< t_string > special_notes_
Definition: types.hpp:297
bool has_zoc() const
Definition: types.hpp:215
unsigned int num_traits_
Definition: types.hpp:316
int recall_cost() const
Definition: types.hpp:148
std::vector< std::string > variations() const
Definition: types.cpp:709
void build_full(const movement_type_map &movement_types, const race_map &races, const config::const_child_itors &traits)
Load data into an empty unit_type (build to FULL).
Definition: types.cpp:174
unit_type_map types_
Definition: types.hpp:386
std::vector< std::string > get_ability_list() const
Definition: types.cpp:568
const config * unit_cfg_
Definition: types.hpp:396
void apply_scenario_fix(const config &cfg)
Definition: types.cpp:1326
bool show_variations_in_help() const
Whether the unit type has at least one help-visible variation.
Definition: types.cpp:726
const config & abilities_cfg() const
Definition: types.hpp:223
std::vector< std::string > advances_to_
Definition: types.hpp:331
std::string usage_
Definition: types.hpp:307
std::string halo() const
Definition: types.hpp:163
bool has_ability_by_id(const std::string &ability) const
Definition: types.cpp:555
double hp_bar_scaling_
Definition: types.hpp:299
const std::string & icon() const
Definition: types.hpp:160
bool hide_help_all_
True if [hide_help] contains a &#39;all=yes&#39; at its root.
Definition: types.hpp:391
int level() const
Definition: types.hpp:147
#define N_(String)
Definition: gettext.hpp:99
bool has_gender_variation(const unit_race::GENDER gender) const
Definition: types.hpp:237
const std::string & small_profile() const
Definition: types.hpp:161
int hitpoints() const
Definition: types.hpp:144
int jamming() const
Definition: types.hpp:153
const std::vector< ability_metadata > & adv_abilities_metadata() const
Some extra abilities that may be gained through AMLA advancements.
Definition: types.hpp:209
int movement() const
Definition: types.hpp:149
std::string id_
Definition: types.hpp:292
config::const_child_itors possible_traits() const
Definition: types.hpp:220
const std::string & image() const
Definition: types.hpp:159
std::vector< ability_metadata > abilities_
Never nullptr, but may point to the null race.
Definition: types.hpp:327
bool resistance_filter_matches(const config &cfg, bool attacker, const std::string &damage_name, int res) const
Identical to unit::resistance_filter_matches.
Definition: types.cpp:815
int vision_
Definition: types.hpp:303
unsigned int num_traits() const
Definition: types.hpp:126
BUILD_STATUS build_status_
Definition: types.hpp:346
const unit_type & get_variation(const std::string &id) const
Definition: types.cpp:470
int max_attacks_
Definition: types.hpp:305
bool find(E event, F functor)
Tests whether an event handler is available.
int max_attacks() const
Definition: types.hpp:154
unit_type(const config &cfg, const std::string &parent_id="")
Creates a unit type for the given config, but delays its build till later.
Definition: types.cpp:102
bool hide_help_
Definition: types.hpp:329
std::vector< ability_metadata > adv_abilities_
Definition: types.hpp:327
const t_string & variation_name() const
Definition: types.hpp:157
const variations_map & variation_types() const
Definition: types.hpp:243
const unit_race * race() const
Never returns nullptr, but may point to the null race.
Definition: types.hpp:262
const unit_type & get_gender_unit_type(std::string gender) const
Returns a gendered variant of this unit_type.
Definition: types.cpp:449
static void check_id(std::string &id)
Validate the id argument.
Definition: types.cpp:1407
double hp_bar_scaling() const
Definition: types.hpp:145
config unit_cfg_
Definition: types.hpp:288
unit_type_data unit_types
Definition: types.cpp:1433
game_error(const std::string &msg)
Definition: game_errors.hpp:47
const config & child_or_empty(config_key_type key) const
Returns the first child with the given key, or an empty config if there is none.
Definition: config.cpp:453
const_attack_itors attacks() const
Definition: types.cpp:507
std::map< std::string, unit_race > race_map
Definition: race.hpp:91
bool can_advance() const
Definition: types.hpp:211
boost::iterator_range< boost::indirect_iterator< attack_list::const_iterator > > const_attack_itors
t_string unit_description() const
Definition: types.cpp:480
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:68
static std::string alignment_description(ALIGNMENT align, unit_race::GENDER gender=unit_race::MALE)
attack_list attacks_cache_
Definition: types.hpp:290
bool has_random_traits() const
Definition: types.cpp:689
bool has_variation(const std::string &variation_id) const
Definition: types.cpp:721
Defines the MAKE_ENUM macro.
std::string image_
Definition: types.hpp:310
race_map races_
Definition: types.hpp:388
config::const_child_itors advancements() const
Definition: types.hpp:226
std::vector< unit_race::GENDER > genders_
Definition: types.hpp:341
const std::string & default_variation() const
Definition: types.hpp:156
std::map< std::string, unit_type > variations_map
Definition: types.hpp:87
void build_created()
Load the most needed data into an empty unit_type (build to CREATE).
Definition: types.cpp:369