The Battle for Wesnoth  1.19.15+dev
types.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2025
3  by David White <dave@whitevine.net>
4  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY.
12 
13  See the COPYING file for more details.
14 */
15 
16 #pragma once
17 
18 #include "gettext.hpp"
19 #include "movetype.hpp"
21 #include "units/race.hpp"
22 #include "units/attack_type.hpp"
23 #include "units/type_error.hpp"
24 #include "game_config_view.hpp"
25 
26 #include <memory>
27 #include <array>
28 #include <map>
29 #include <set>
30 #include <string>
31 #include <vector>
32 
33 class unit_animation;
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 private:
45  struct default_ctor_t {};
46  unit_type(default_ctor_t, const config& cfg, const std::string& parent_id);
47 
48 public:
50  /**
51  * Creates a unit type for the given config, but delays its build
52  * till later.
53  * @note @a cfg is not copied, so it has to point to some permanent
54  * storage, that is, a child of unit_type_data::unit_cfg.
55  */
56  explicit unit_type(const config& cfg, const std::string& parent_id="");
57  /**
58  * Creates a unit type for the given config, but delays its build
59  * till later.
60  * @note @a cfg is copied
61  */
62  explicit unit_type(config&& cfg, const std::string& parent_id="");
63 
64  unit_type(const unit_type&) = delete;
65  unit_type& operator=(const unit_type&) = delete;
66 
67  unit_type(unit_type&&) noexcept = default;
68  unit_type& operator=(unit_type&&) noexcept = default;
69 
70  ~unit_type();
71 
72  /**
73  * Records the status of the lazy building of unit types.
74  * These are in order of increasing levels of being built.
75  * HELP_INDEX is already defined in a windows header under some conditions
76  */
78 
79  /**
80  * Validate the id argument.
81  * Replaces invalid characters in the reference with underscores.
82  * @param id The proposed id for a unit_type.
83  * @throw error if id starts with a space.
84  */
85  static void check_id(std::string& id);
86 
87 private: // These will be called by build().
88  /** Load data into an empty unit_type (build to FULL). */
89  void build_full(const movement_type_map& movement_types,
90  const race_map& races, const config_array_view& traits);
91  /** Partially load data into an empty unit_type (build to HELP_INDEXED). */
92  void build_help_index(const movement_type_map& movement_types,
93  const race_map& races, const config_array_view& traits);
94  /** Load the most needed data into an empty unit_type (build to CREATE). */
95  void build_created();
96 
97  typedef std::map<std::string, unit_type> variations_map;
98 public:
99  /** Performs a build of this to the indicated stage. */
100  void build(BUILD_STATUS status, const movement_type_map& movement_types,
101  const race_map& races, const config_array_view& traits);
102  /**
103  * Performs a build of this to the indicated stage.
104  * (This does not logically change the unit type, so allow const access.)
105  */
106  void build(BUILD_STATUS status, const movement_type_map& movement_types,
107  const race_map& races, const config_array_view& traits) const
108  { const_cast<unit_type *>(this)->build(status, movement_types, races, traits); }
109 
110 
111  /** Get the advancement tree
112  * @return A set of ids of all unit_type objects that this unit_type can
113  * directly or indirectly advance to.
114  */
115  std::set<std::string> advancement_tree() const;
116 
117  /** A vector of unit_type ids that this unit_type can advance to. */
118  const std::vector<std::string>& advances_to() const { return advances_to_; }
119  /** A vector of unit_type ids that can advance to this unit_type. */
120  const std::vector<std::string> advances_from() const;
121 
122  /** Returns two iterators pointing to a range of AMLA configs. */
124  { return advancements_; }
125 
126  /**
127  * Returns a gendered variant of this unit_type.
128  * @param gender "male" or "female".
129  */
130  const unit_type& get_gender_unit_type(const std::string& gender) const;
131  /** Returns a gendered variant of this unit_type based on the given parameter. */
132  const unit_type& get_gender_unit_type(unit_race::GENDER gender) const;
133 
134  const unit_type& get_variation(const std::string& id) const;
135  /** Info on the type of unit that the unit reanimates as. */
136  const std::string& undead_variation() const { return undead_variation_; }
137 
138  unsigned int num_traits() const { return num_traits_; }
139 
140  /** The name of the unit in the current language setting. */
141  const t_string& type_name() const { return type_name_; }
142 
143  /** The id for this unit_type. */
144  const std::string& id() const { return id_; }
145  /** A variant on id() that is more descriptive, for use with message logging. */
146  const std::string log_id() const { return id_ + debug_id_; }
147  /** The id of the original type from which this (variation) descended. */
148  const std::string& parent_id() const { return parent_id_; }
149  /** The id of this variation; empty if it's a gender variation or a base unit. */
150  const std::string& variation_id() const { return variation_id_; }
151  // NOTE: this used to be a const object reference, but it messed up with the
152  // translation engine upon changing the language in the same session.
153  t_string unit_description() const;
154  /**
155  * Returns only the notes defined by [unit_type][special_note] tags, excluding
156  * any that would be found from abilities, attacks, etc.
157  */
158  std::vector<t_string> direct_special_notes() const { return special_notes_; }
159  /**
160  * Returns all notes that should be displayed in the help page for this type,
161  * including those found in abilities and attacks.
162  */
163  std::vector<t_string> special_notes() const;
164  int hitpoints() const { return hitpoints_; }
165  double hp_bar_scaling() const { return hp_bar_scaling_; }
166  double xp_bar_scaling() const { return xp_bar_scaling_; }
167  int level() const { return level_; }
168  int recall_cost() const { return recall_cost_;}
169  int movement() const { return movement_; }
170  int vision() const { return vision_ < 0 ? movement() : vision_; }
171  /** If @a base_value is set to true, do not fall back to movement(). */
172  int vision(bool base_value) const { return base_value ? vision_ : vision(); }
173  int jamming() const {return jamming_; }
174  int max_attacks() const { return max_attacks_; }
175  int cost() const { return cost_; }
176  const std::string& default_variation() const { return default_variation_; }
177  const t_string& variation_name() const { return variation_name_; }
178  const std::string& usage() const { return usage_; }
179  const std::string& image() const { return image_; }
180  const std::string& icon() const { return icon_; }
181  const std::string& small_profile() const { return small_profile_; }
182  const std::string& big_profile() const { return profile_; }
183  std::string halo() const { return get_cfg()["halo"]; }
184  std::string ellipse() const { return get_cfg()["ellipse"]; }
185  bool generate_name() const { return get_cfg()["generate_name"].to_bool(true); }
186  const std::vector<unit_animation>& animations() const;
187 
188  const std::string& flag_rgb() const;
189 
190  const_attack_itors attacks() const;
191  const std::string movement_type_id() const {return movement_type_id_; }
192  const movetype& movement_type() const { return movement_type_; }
193 
194  int experience_needed(bool with_acceleration=true) const;
195 
198 
200  {
201  explicit ability_metadata(const config& cfg);
202 
203  std::string id;
204 
207 
210 
213 
218  };
219 
220  const std::vector<ability_metadata>& abilities_metadata() const { return abilities_; }
221 
222  /** Some extra abilities that may be gained through AMLA advancements. */
223  const std::vector<ability_metadata>& adv_abilities_metadata() const { return adv_abilities_; }
224 
225  bool can_advance() const { return !advances_to_.empty(); }
226 
227  bool musthave_status(const std::string& status) const;
228 
229  bool has_zoc() const { return zoc_; }
230 
231  bool has_ability_by_id(const std::string& ability) const;
232  std::vector<std::string> get_ability_list() const;
233 
235  { return possible_traits_.child_range("trait"); }
236 
237  const config& abilities_cfg() const
238  { return get_cfg().child_or_empty("abilities"); }
239 
241  { return advancements_; }
242 
244  { return get_cfg().child_range("event"); }
245 
246  bool has_random_traits() const;
247 
248  /**
249  * The returned vector will not be empty, provided this has been built
250  * to the HELP_INDEXED status.
251  */
252  const std::vector<unit_race::GENDER>& genders() const { return genders_; }
253  bool has_gender_variation(const unit_race::GENDER gender) const;
254 
255  std::vector<std::string> variations() const;
256  const variations_map& variation_types() const {return variations_; }
257 
258  /**
259  * @param variation_id The id of the variation we search for.
260  * @return Whether one of the type's variations' (or the
261  * siblings' if the unit_type is a variation
262  * itself) id matches @a variation_id.
263  */
264  bool has_variation(const std::string& variation_id) const;
265 
266  /**
267  * Whether the unit type has at least one help-visible variation.
268  */
269  bool show_variations_in_help() const;
270 
271  /** Returns the ID of this type's race without the need to build the type. */
272  std::string race_id() const { return get_cfg()["race"]; } //race_->id(); }
273  /**
274  * Never returns nullptr, but may point to the null race.
275  * Requires building to the HELP_INDEXED status to get the correct race.
276  */
277  const unit_race* race() const { return race_; }
278  bool hide_help() const;
279  bool do_not_list() const { return do_not_list_; }
280 
281  const config& get_cfg() const
282  {
283  if(built_cfg_) {
284  return *built_cfg_;
285  }
286  assert(cfg_);
287  return *cfg_;
288  }
289 
290  /**
291  * Gets resistance while considering custom WML abilities.
292  * Attention: Filters in resistance-abilities will be ignored.
293  */
294  int resistance_against(const std::string& damage_name, bool attacker) const;
295 
296  void apply_scenario_fix(const config& cfg);
297  void remove_scenario_fixes();
298 private:
299 
300  /** Identical to unit::resistance_filter_matches. */
301  bool resistance_filter_matches(const config& cfg,bool attacker, const std::string& damage_name, int res) const;
302 
303 private:
305  if(!built_cfg_) {
306  built_cfg_ = std::make_unique<config>(*cfg_);
307  }
308  return *built_cfg_;
309  }
310  void fill_variations();
312  std::unique_ptr<unit_type> create_sub_type(const config& var_cfg, bool default_inherit);
313 
314  const config* cfg_;
315  friend class unit_type_data;
316  mutable std::unique_ptr<config> built_cfg_;
318 
319  std::string id_;
320  /** A suffix for id_, used when logging messages. */
321  std::string debug_id_;
322  /** The id of the top ancestor of this unit_type. */
323  std::string parent_id_;
324  /** from [base_unit] */
325  std::string base_unit_id_;
328  std::vector<t_string> special_notes_;
331  int level_;
334  int vision_;
335  int jamming_;
337  int cost_;
338  std::string usage_;
339  std::string undead_variation_;
340 
341  std::string image_;
342  std::string icon_;
343  std::string small_profile_;
344  std::string profile_;
345  std::string flag_rgb_;
346 
347  unsigned int num_traits_;
348 
349  std::array<std::unique_ptr<unit_type>, 2> gender_types_;
350 
352  std::string default_variation_;
353  std::string variation_id_;
355 
356  /** Never nullptr, but may point to the null race. */
357  const unit_race* race_;
358 
359  std::vector<ability_metadata> abilities_, adv_abilities_;
360 
362 
363  std::vector<std::string> advances_to_;
366 
367 
369 
370  std::string movement_type_id_;
372 
374 
375  std::vector<unit_race::GENDER> genders_;
376 
377  // animations are loaded only after the first animations() call
378  mutable std::vector<unit_animation> animations_;
379 
381 };
382 
384 {
385 public:
386  unit_type_data(const unit_type_data&) = delete;
388 
389  unit_type_data();
390 
391  typedef std::map<std::string,unit_type> unit_type_map;
392 
393  const unit_type_map& types() const { return types_; }
394  const std::vector<const unit_type*> types_list() const {
395  std::vector<const unit_type*> types_list;
396  for(const auto& i : types()) {
397  // Make sure this unit type is built with the data we need.
399  types_list.push_back(&i.second);
400  }
401  return types_list;
402  }
403  const race_map& races() const { return races_; }
405  config_array_view traits() const { return units_cfg().child_range("trait"); }
406  void set_config(const game_config_view& cfg);
407 
408  /** Finds a unit_type by its id() and makes sure it is built to the specified level. */
409  const unit_type *find(const std::string& key, unit_type::BUILD_STATUS status = unit_type::FULL) const;
410  void check_types(const std::vector<std::string>& types) const;
411  const unit_race *find_race(const std::string&) const;
412 
413  /** Makes sure the all unit_types are built to the specified level. */
414  void build_all(unit_type::BUILD_STATUS status);
415  /** Makes sure the provided unit_type is built to the specified level. */
416  void build_unit_type(const unit_type& ut, unit_type::BUILD_STATUS status) const;
417 
418  /** Checks if the [hide_help] tag contains these IDs. */
419  bool hide_help(const std::string& type_id, const std::string& race_id) const;
420 
421  void apply_scenario_fix(const config& cfg);
422  void remove_scenario_fixes();
423 private:
424  /** Parses the [hide_help] tag. */
425  void read_hide_help(const config& cfg);
426 
427  void clear();
428 
429  void apply_base_unit(unit_type& type, std::vector<std::string>& base_tree);
430 
434 
435  /** True if [hide_help] contains a 'all=yes' at its root. */
437  // vectors containing the [hide_help] and its sub-tags [not]
438  std::vector< std::set<std::string>> hide_help_type_;
439  std::vector< std::set<std::string>> hide_help_race_;
440 
441  const game_config_view& units_cfg() const { return units_cfg_; }
444 };
445 
447 
448 void adjust_profile(std::string& profile);
449 
451  unit_experience_accelerator(int modifier);
453  static int get_acceleration();
454 private:
456 };
457 
458 /**
459  * Common logic for unit_type::special_notes() and unit::special_notes(). Adds
460  * any notes from the sources given as arguments, and filters out duplicates.
461  *
462  * @return the special notes for a unit or unit_type.
463  */
464 std::vector<t_string> combine_special_notes(
465  const std::vector<t_string>& direct,
466  const config& abilities,
467  const const_attack_itors& attacks,
468  const movetype& mt);
std::vector< attack_ptr > attack_list
boost::iterator_range< boost::indirect_iterator< attack_list::const_iterator > > const_attack_itors
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:158
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:390
child_itors child_range(config_key_type key)
Definition: config.cpp:268
boost::iterator_range< const_child_iterator > const_child_itors
Definition: config.hpp:282
A class grating read only view to a vector of config objects, viewed as one config with all children ...
config_array_view child_range(config_key_type key) const
The basic "size" of the unit - flying, small land, large land, etc.
Definition: movetype.hpp:44
@ MALE
Definition: race.hpp:28
const movement_type_map & movement_types() const
Definition: types.hpp:404
void set_config(const game_config_view &cfg)
Resets all data based on the provided config.
Definition: types.cpp:1062
unit_type::BUILD_STATUS build_status_
Definition: types.hpp:443
std::map< std::string, unit_type > unit_type_map
Definition: types.hpp:391
const unit_type * find(const std::string &key, unit_type::BUILD_STATUS status=unit_type::FULL) const
Finds a unit_type by its id() and makes sure it is built to the specified level.
Definition: types.cpp:1224
bool hide_help(const std::string &type_id, const std::string &race_id) const
Checks if the [hide_help] tag contains these IDs.
Definition: types.cpp:1311
void clear()
Definition: types.cpp:1254
void remove_scenario_fixes()
Definition: types.cpp:1426
const race_map & races() const
Definition: types.hpp:403
bool hide_help_all_
True if [hide_help] contains a 'all=yes' at its root.
Definition: types.hpp:436
race_map races_
Definition: types.hpp:433
void build_all(unit_type::BUILD_STATUS status)
Makes sure the all unit_types are built to the specified level.
Definition: types.cpp:1266
const std::vector< const unit_type * > types_list() const
Definition: types.hpp:394
void apply_base_unit(unit_type &type, std::vector< std::string > &base_tree)
Modifies the provided config by merging all base units into it.
Definition: types.cpp:954
unit_type_map types_
Definition: types.hpp:431
const unit_race * find_race(const std::string &) const
Definition: types.cpp:1328
void check_types(const std::vector< std::string > &types) const
Definition: types.cpp:1245
movement_type_map movement_types_
Definition: types.hpp:432
game_config_view units_cfg_
Definition: types.hpp:442
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.cpp:1216
std::vector< std::set< std::string > > hide_help_type_
Definition: types.hpp:438
const game_config_view & units_cfg() const
Definition: types.hpp:441
const unit_type_map & types() const
Definition: types.hpp:393
void read_hide_help(const config &cfg)
Parses the [hide_help] tag.
Definition: types.cpp:1282
unit_type_data & operator=(const unit_type_data &)=delete
void apply_scenario_fix(const config &cfg)
Definition: types.cpp:1391
unit_type_data(const unit_type_data &)=delete
config_array_view traits() const
Definition: types.hpp:405
std::vector< std::set< std::string > > hide_help_race_
Definition: types.hpp:439
A single unit type that the player may recruit.
Definition: types.hpp:43
std::string default_variation_
Definition: types.hpp:352
t_string description_
Definition: types.hpp:327
std::string image_
Definition: types.hpp:341
bool can_advance() const
Definition: types.hpp:225
std::vector< unit_animation > animations_
Definition: types.hpp:378
const std::vector< std::string > advances_from() const
A vector of unit_type ids that can advance to this unit_type.
Definition: types.cpp:608
unit_alignments::type alignment_
Definition: types.hpp:368
std::vector< t_string > direct_special_notes() const
Returns only the notes defined by [unit_type][special_note] tags, excluding any that would be found f...
Definition: types.hpp:158
int jamming_
Definition: types.hpp:335
std::string race_id() const
Returns the ID of this type's race without the need to build the type.
Definition: types.hpp:272
int recall_cost_
Definition: types.hpp:332
const std::string & parent_id() const
The id of the original type from which this (variation) descended.
Definition: types.hpp:148
int cost_
Definition: types.hpp:337
config::const_child_itors advancements_
Definition: types.hpp:364
void fill_variations()
Processes [variation] tags of ut_cfg, handling inheritance and child clearing.
Definition: types.cpp:1010
static std::string alignment_description(unit_alignments::type align, unit_race::GENDER gender=unit_race::MALE)
Implementation detail of unit_type::alignment_description.
Definition: types.cpp:796
std::vector< t_string > special_notes_
Definition: types.hpp:328
const unit_type & get_gender_unit_type(const std::string &gender) const
Returns a gendered variant of this unit_type.
Definition: types.cpp:410
const std::string & image() const
Definition: types.hpp:179
config::const_child_itors advancements() const
Definition: types.hpp:240
variations_map variations_
Definition: types.hpp:351
void build_full(const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Load data into an empty unit_type (build to FULL).
Definition: types.cpp:141
int level_
Definition: types.hpp:331
const std::string & variation_id() const
The id of this variation; empty if it's a gender variation or a base unit.
Definition: types.hpp:150
const unit_race * race_
Never nullptr, but may point to the null race.
Definition: types.hpp:357
std::string parent_id_
The id of the top ancestor of this unit_type.
Definition: types.hpp:323
std::string flag_rgb_
Definition: types.hpp:345
const std::string & id() const
The id for this unit_type.
Definition: types.hpp:144
std::string undead_variation_
Definition: types.hpp:339
bool has_random_traits() const
Definition: types.cpp:679
std::string movement_type_id_
Definition: types.hpp:370
const std::vector< ability_metadata > & adv_abilities_metadata() const
Some extra abilities that may be gained through AMLA advancements.
Definition: types.hpp:223
std::vector< ability_metadata > abilities_
Definition: types.hpp:359
void fill_variations_and_gender()
Definition: types.cpp:1039
const movetype & movement_type() const
Definition: types.hpp:192
std::string halo() const
Definition: types.hpp:183
bool show_variations_in_help() const
Whether the unit type has at least one help-visible variation.
Definition: types.cpp:721
const unit_race * race() const
Never returns nullptr, but may point to the null race.
Definition: types.hpp:277
int hitpoints() const
Definition: types.hpp:164
int max_attacks_
Definition: types.hpp:336
std::map< std::string, unit_type > variations_map
Definition: types.hpp:97
std::string debug_id_
A suffix for id_, used when logging messages.
Definition: types.hpp:321
std::array< std::unique_ptr< unit_type >, 2 > gender_types_
Definition: types.hpp:349
double xp_bar_scaling() const
Definition: types.hpp:166
bool has_ability_by_id(const std::string &ability) const
Definition: types.cpp:547
const std::string & default_variation() const
Definition: types.hpp:176
std::string small_profile_
Definition: types.hpp:343
t_string variation_name_
Definition: types.hpp:354
const unit_type & get_variation(const std::string &id) const
Definition: types.cpp:431
const_attack_itors attacks() const
Definition: types.cpp:499
const std::string & usage() const
Definition: types.hpp:178
config::const_child_itors events() const
Definition: types.hpp:243
const std::vector< std::string > & advances_to() const
A vector of unit_type ids that this unit_type can advance to.
Definition: types.hpp:118
unit_type(unit_type &&) noexcept=default
void apply_scenario_fix(const config &cfg)
Definition: types.cpp:1334
int vision_
Definition: types.hpp:334
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config_array_view &traits) const
Performs a build of this to the indicated stage.
Definition: types.hpp:106
const variations_map & variation_types() const
Definition: types.hpp:256
int resistance_against(const std::string &damage_name, bool attacker) const
Gets resistance while considering custom WML abilities.
Definition: types.cpp:732
bool has_variation(const std::string &variation_id) const
Definition: types.cpp:716
bool has_gender_variation(const unit_race::GENDER gender) const
Definition: types.cpp:699
bool hide_help_
Definition: types.hpp:361
bool do_not_list() const
Definition: types.hpp:279
std::string ellipse() const
Definition: types.hpp:184
int movement() const
Definition: types.hpp:169
t_string unit_description() const
Definition: types.cpp:441
config & writable_cfg()
Definition: types.hpp:304
static void check_id(std::string &id)
Validate the id argument.
Definition: types.cpp:1433
BUILD_STATUS
Records the status of the lazy building of unit types.
Definition: types.hpp:77
@ CREATED
Definition: types.hpp:77
@ NOT_BUILT
Definition: types.hpp:77
@ HELP_INDEXED
Definition: types.hpp:77
@ FULL
Definition: types.hpp:77
@ VARIATIONS
Definition: types.hpp:77
std::string id_
Definition: types.hpp:319
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:252
std::string usage_
Definition: types.hpp:338
const std::vector< unit_animation > & animations() const
Definition: types.cpp:490
int max_attacks() const
Definition: types.hpp:174
std::vector< std::string > variations() const
Definition: types.cpp:704
bool hide_help() const
Definition: types.cpp:580
const std::string & flag_rgb() const
Definition: types.cpp:674
int vision() const
Definition: types.hpp:170
const config & abilities_cfg() const
Definition: types.hpp:237
std::string variation_id_
Definition: types.hpp:353
std::vector< t_string > special_notes() const
Returns all notes that should be displayed in the help page for this type, including those found in a...
Definition: types.cpp:450
attack_list attacks_cache_
Definition: types.hpp:317
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:123
int cost() const
Definition: types.hpp:175
double xp_bar_scaling_
Definition: types.hpp:330
std::vector< std::string > advances_to_
Definition: types.hpp:363
const config * cfg_
Definition: types.hpp:314
std::string base_unit_id_
from [base_unit]
Definition: types.hpp:325
double hp_bar_scaling_
Definition: types.hpp:330
config possible_traits_
Definition: types.hpp:373
const std::string log_id() const
A variant on id() that is more descriptive, for use with message logging.
Definition: types.hpp:146
int vision(bool base_value) const
If base_value is set to true, do not fall back to movement().
Definition: types.hpp:172
std::vector< unit_race::GENDER > genders_
Definition: types.hpp:375
bool zoc_
Definition: types.hpp:361
const std::string & icon() const
Definition: types.hpp:180
const t_string & variation_name() const
Definition: types.hpp:177
int experience_needed(bool with_acceleration=true) const
Definition: types.cpp:533
bool generate_name() const
Definition: types.hpp:185
const std::string & big_profile() const
Definition: types.hpp:182
bool musthave_status(const std::string &status) const
Definition: types.cpp:628
const std::string & undead_variation() const
Info on the type of unit that the unit reanimates as.
Definition: types.hpp:136
double hp_bar_scaling() const
Definition: types.hpp:165
unit_type(default_ctor_t, const config &cfg, const std::string &parent_id)
Definition: types.cpp:52
int experience_needed_
Definition: types.hpp:365
movetype movement_type_
Definition: types.hpp:371
std::string icon_
Definition: types.hpp:342
int hitpoints_
Definition: types.hpp:329
const std::string movement_type_id() const
Definition: types.hpp:191
bool do_not_list_
Definition: types.hpp:361
void build(BUILD_STATUS status, const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Performs a build of this to the indicated stage.
Definition: types.cpp:375
std::vector< std::string > get_ability_list() const
Definition: types.cpp:560
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:763
const t_string & type_name() const
The name of the unit in the current language setting.
Definition: types.hpp:141
void remove_scenario_fixes()
Definition: types.cpp:1403
std::unique_ptr< unit_type > create_sub_type(const config &var_cfg, bool default_inherit)
Handles inheritance for configs of [male], [female], and [variation].
Definition: types.cpp:993
void build_help_index(const movement_type_map &movement_types, const race_map &races, const config_array_view &traits)
Partially load data into an empty unit_type (build to HELP_INDEXED).
Definition: types.cpp:184
BUILD_STATUS build_status_
Definition: types.hpp:380
config::const_child_itors possible_traits() const
Definition: types.hpp:234
void build_created()
Load the most needed data into an empty unit_type (build to CREATE).
Definition: types.cpp:332
int level() const
Definition: types.hpp:167
std::unique_ptr< config > built_cfg_
Definition: types.hpp:316
std::vector< ability_metadata > adv_abilities_
Definition: types.hpp:359
bool has_zoc() const
Definition: types.hpp:229
unit_alignments::type alignment() const
Definition: types.hpp:196
const std::string & small_profile() const
Definition: types.hpp:181
t_string type_name_
Definition: types.hpp:326
const std::vector< ability_metadata > & abilities_metadata() const
Definition: types.hpp:220
unit_type(const unit_type &)=delete
const config & get_cfg() const
Definition: types.hpp:281
int movement_
Definition: types.hpp:333
unsigned int num_traits() const
Definition: types.hpp:138
unit_type & operator=(const unit_type &)=delete
unsigned int num_traits_
Definition: types.hpp:347
std::set< std::string > advancement_tree() const
Get the advancement tree.
Definition: types.cpp:601
std::string profile_
Definition: types.hpp:344
int recall_cost() const
Definition: types.hpp:168
int jamming() const
Definition: types.hpp:173
const config * cfg
std::size_t i
Definition: function.cpp:1032
std::vector< std::reference_wrapper< const config > > config_array_view
std::map< std::string, unit_race > race_map
Definition: race.hpp:104
unit_experience_accelerator(int modifier)
Definition: types.cpp:517
static int get_acceleration()
Definition: types.cpp:528
ability_metadata(const config &cfg)
Definition: types.cpp:123
std::vector< t_string > combine_special_notes(const std::vector< t_string > &direct, const config &abilities, const const_attack_itors &attacks, const movetype &mt)
Common logic for unit_type::special_notes() and unit::special_notes().
Definition: types.cpp:463
unit_type_data unit_types
Definition: types.cpp:1463
std::map< std::string, movetype > movement_type_map
Definition: types.hpp:33
void adjust_profile(std::string &profile)
Definition: types.cpp:1465