The Battle for Wesnoth  1.19.26+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  const ability_vector& abilities() const { return abilities_; }
118  /** A vector of unit_type ids that this unit_type can advance to. */
119  const std::vector<std::string>& advances_to() const { return advances_to_; }
120  /** A vector of unit_type ids that can advance to this unit_type. */
121  const std::vector<std::string> advances_from() const;
122 
123  /** Returns two iterators pointing to a range of AMLA configs. */
125  { return advancements_; }
126 
127  /**
128  * Returns a gendered variant of this unit_type.
129  * @param gender "male" or "female".
130  */
131  const unit_type& get_gender_unit_type(const std::string& gender) const;
132  /** Returns a gendered variant of this unit_type based on the given parameter. */
133  const unit_type& get_gender_unit_type(unit_race::GENDER gender) const;
134 
135  const unit_type& get_variation(const std::string& id) const;
136  /** Info on the type of unit that the unit reanimates as. */
137  const std::string& undead_variation() const { return undead_variation_; }
138 
139  unsigned int num_traits() const { return num_traits_; }
140 
141  /** The name of the unit in the current language setting. */
142  const t_string& type_name() const { return type_name_; }
143 
144  /** The id for this unit_type. */
145  const std::string& id() const { return id_; }
146  /** A variant on id() that is more descriptive, for use with message logging. */
147  const std::string log_id() const { return id_ + debug_id_; }
148  /** The id of the original type from which this (variation) descended. */
149  const std::string& parent_id() const { return parent_id_; }
150  /** The id of this variation; empty if it's a gender variation or a base unit. */
151  const std::string& variation_id() const { return variation_id_; }
152  // NOTE: this used to be a const object reference, but it messed up with the
153  // translation engine upon changing the language in the same session.
154  t_string unit_description() const;
155  /**
156  * Returns only the notes defined by [unit_type][special_note] tags, excluding
157  * any that would be found from abilities, attacks, etc.
158  */
159  std::vector<t_string> direct_special_notes() const { return special_notes_; }
160  /**
161  * Returns all notes that should be displayed in the help page for this type,
162  * including those found in abilities and attacks.
163  */
164  std::vector<t_string> special_notes() const;
165  int hitpoints() const { return hitpoints_; }
166  double hp_bar_scaling() const { return hp_bar_scaling_; }
167  double xp_bar_scaling() const { return xp_bar_scaling_; }
168  int level() const { return level_; }
169  int recall_cost() const { return recall_cost_;}
170  int movement() const { return movement_; }
171  int vision() const { return vision_ < 0 ? movement() : vision_; }
172  /** If @a base_value is set to true, do not fall back to movement(). */
173  int vision(bool base_value) const { return base_value ? vision_ : vision(); }
174  int jamming() const {return jamming_; }
175  int max_attacks() const { return max_attacks_; }
176  int cost() const { return cost_; }
177  const std::string& default_variation() const { return default_variation_; }
178  const t_string& variation_name() const { return variation_name_; }
179  const std::string& usage() const { return usage_; }
180  const std::string& image() const { return image_; }
181  const std::string& icon() const { return icon_; }
182  const std::string& small_profile() const { return small_profile_; }
183  const std::string& big_profile() const { return profile_; }
184  std::string halo() const { return get_cfg()["halo"]; }
185  std::string footprints() const { return get_cfg()["footprints"]; }
186  std::string ellipse() const { return get_cfg()["ellipse"]; }
187  bool generate_name() const { return get_cfg()["generate_name"].to_bool(true); }
188  const std::vector<unit_animation>& animations() const;
189 
190  const std::string& flag_rgb() const;
191 
192  const_attack_itors attacks() const;
193  const std::string movement_type_id() const {return movement_type_id_; }
194  const movetype& movement_type() const { return movement_type_; }
195 
196  int experience_needed(bool with_acceleration=true) const;
197 
200 
202  {
203  //TODO:most of the member of this class seem to be unused.
204  explicit ability_metadata(const config& cfg);
205 
206  std::string id;
207 
208  std::string help_topic_id;
209 
212 
215 
218 
223  };
224 
225  const std::vector<ability_metadata>& abilities_metadata() const { return abilities_infos_; }
226 
227  /** Some extra abilities that may be gained through AMLA advancements. */
228  const std::vector<ability_metadata>& adv_abilities_metadata() const { return adv_abilities_infos_; }
229 
230  bool can_advance() const { return !advances_to_.empty(); }
231 
232  bool musthave_status(const std::string& status) const;
233 
234  bool has_zoc() const { return zoc_; }
235 
236  bool has_ability_by_id(const std::string& ability) const;
237  std::vector<std::string> get_ability_id_list() const;
238 
240  { return possible_traits_.child_range("trait"); }
241 
242  config abilities_cfg() const;
243 
245  { return advancements_; }
246 
248  { return get_cfg().child_range("event"); }
249 
250  /**
251  * The returned vector will not be empty, provided this has been built
252  * to the HELP_INDEXED status.
253  */
254  const std::vector<unit_race::GENDER>& genders() const { return genders_; }
255  bool has_gender_variation(const unit_race::GENDER gender) const;
256 
257  std::vector<std::string> variations() const;
258  const variations_map& variation_types() const {return variations_; }
259 
260  /**
261  * @param variation_id The id of the variation we search for.
262  * @return Whether one of the type's variations' (or the
263  * siblings' if the unit_type is a variation
264  * itself) id matches @a variation_id.
265  */
266  bool has_variation(const std::string& variation_id) const;
267 
268  /**
269  * Whether the unit type has at least one help-visible variation.
270  */
271  bool show_variations_in_help() const;
272 
273  /** Returns the ID of this type's race without the need to build the type. */
274  std::string race_id() const { return get_cfg()["race"]; } //race_->id(); }
275  /**
276  * Never returns nullptr, but may point to the null race.
277  * Requires building to the HELP_INDEXED status to get the correct race.
278  */
279  const unit_race* race() const { return race_; }
280  bool hide_help() const;
281  bool do_not_list() const { return do_not_list_; }
282 
283  const config& get_cfg() const
284  {
285  if(built_cfg_) {
286  return *built_cfg_;
287  }
288  assert(cfg_);
289  return *cfg_;
290  }
291 
292  /**
293  * Gets resistance while considering custom WML abilities.
294  * Attention: Filters in resistance-abilities will be ignored.
295  */
296  int resistance_against(const std::string& damage_name, bool attacker) const;
297 
298  void apply_scenario_fix(const config& cfg);
299  void remove_scenario_fixes();
300 private:
301 
302  /** Identical to unit::resistance_filter_matches. */
303  bool resistance_filter_matches(const config& cfg,bool attacker, const std::string& damage_name, int res) const;
304 
305 private:
307  if(!built_cfg_) {
308  built_cfg_ = std::make_unique<config>(*cfg_);
309  }
310  return *built_cfg_;
311  }
312  void fill_variations();
314  std::unique_ptr<unit_type> create_sub_type(const config& var_cfg, bool default_inherit);
315 
316  const config* cfg_;
317  friend class unit_type_data;
318  mutable std::unique_ptr<config> built_cfg_;
320 
321  std::string id_;
322  /** A suffix for id_, used when logging messages. */
323  std::string debug_id_;
324  /** The id of the top ancestor of this unit_type. */
325  std::string parent_id_;
326  /** from [base_unit] */
327  std::string base_unit_id_;
330  std::vector<t_string> special_notes_;
333  int level_;
336  int vision_;
337  int jamming_;
339  int cost_;
340  std::string usage_;
341  std::string undead_variation_;
342 
343  std::string image_;
344  std::string icon_;
345  std::string small_profile_;
346  std::string profile_;
347  std::string flag_rgb_;
348 
349  unsigned int num_traits_;
350 
351  std::array<std::unique_ptr<unit_type>, 2> gender_types_;
352 
354  std::string default_variation_;
355  std::string variation_id_;
357 
358  /** Never nullptr, but may point to the null race. */
359  const unit_race* race_;
360 
361  std::vector<ability_metadata> abilities_infos_;
362  std::vector<ability_metadata> adv_abilities_infos_;
363 
365 
367 
368  std::vector<std::string> advances_to_;
371 
372 
374 
375  std::string movement_type_id_;
377 
379 
380  std::vector<unit_race::GENDER> genders_;
381 
382  // animations are loaded only after the first animations() call
383  mutable std::vector<unit_animation> animations_;
384 
386 };
387 
389 {
390 public:
391  unit_type_data(const unit_type_data&) = delete;
393 
394  unit_type_data();
395 
396  typedef std::map<std::string,unit_type> unit_type_map;
397 
398  const unit_type_map& types() const { return types_; }
399  const std::vector<const unit_type*> types_list() const {
400  std::vector<const unit_type*> types_list;
401  for(const auto& i : types()) {
402  // Make sure this unit type is built with the data we need.
404  types_list.push_back(&i.second);
405  }
406  return types_list;
407  }
408  const race_map& races() const { return races_; }
410  const std::map<std::string, config>& abilities() const { return abilities_registry_; }
411  const std::map<std::string, config>& specials() const { return specials_registry_; }
412  config_array_view traits() const { return units_cfg().child_range("trait"); }
413 
415  const config& base_cfg,
416  const std::string& registry_name,
417  const std::map<std::string, config>& registry
418  );
419 
420  void set_config(const game_config_view& cfg);
421 
422  /** Finds a unit_type by its id() and makes sure it is built to the specified level. */
423  const unit_type *find(const std::string& key, unit_type::BUILD_STATUS status = unit_type::FULL) const;
424  void check_types(const std::vector<std::string>& types) const;
425  const unit_race *find_race(const std::string&) const;
426 
427  /** Makes sure the all unit_types are built to the specified level. */
428  void build_all(unit_type::BUILD_STATUS status);
429  /** Makes sure the provided unit_type is built to the specified level. */
430  void build_unit_type(const unit_type& ut, unit_type::BUILD_STATUS status) const;
431 
432  /** Checks if the [hide_help] tag contains these IDs. */
433  bool hide_help(const std::string& type_id, const std::string& race_id) const;
434 
435  void apply_scenario_fix(const config& cfg);
436  void remove_scenario_fixes();
437 private:
438  /** Parses the [hide_help] tag. */
439  void read_hide_help(const config& cfg);
440 
441  void clear();
442 
443  void apply_base_unit(unit_type& type, std::vector<std::string>& base_tree);
444 
448 
449  std::map<std::string, config> abilities_registry_;
450  std::map<std::string, config> specials_registry_;
451 
452  /** True if [hide_help] contains a 'all=yes' at its root. */
454  // vectors containing the [hide_help] and its sub-tags [not]
455  std::vector<std::set<std::string>> hide_help_type_;
456  std::vector<std::set<std::string>> hide_help_race_;
457 
458  const game_config_view& units_cfg() const { return units_cfg_; }
461 };
462 
464 
465 void adjust_profile(std::string& profile);
466 
468  unit_experience_accelerator(int modifier);
470  static int get_acceleration();
471 private:
473 };
474 
475 /**
476  * Common logic for unit_type::special_notes() and unit::special_notes(). Adds
477  * any notes from the sources given as arguments, and filters out duplicates.
478  *
479  * @return the special notes for a unit or unit_type.
480  */
481 std::vector<t_string> combine_special_notes(
482  const std::vector<t_string>& direct,
483  const config& abilities,
484  const const_attack_itors& attacks,
485  const movetype& mt);
std::vector< ability_ptr > ability_vector
Definition: abilities.hpp:33
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:157
child_itors child_range(std::string_view key)
Definition: config.cpp:268
boost::iterator_range< const_child_iterator > const_child_itors
Definition: config.hpp:281
A class grating read only view to a vector of config objects, viewed as one config with all children ...
config_array_view child_range(std::string_view key) const
The basic "size" of the unit - flying, small land, large land, etc.
Definition: movetype.hpp:44
@ MALE
Definition: race.hpp:28
static config add_registry_entries(const config &base_cfg, const std::string &registry_name, const std::map< std::string, config > &registry)
Definition: types.cpp:1041
std::map< std::string, config > specials_registry_
Definition: types.hpp:450
const std::map< std::string, config > & abilities() const
Definition: types.hpp:410
const movement_type_map & movement_types() const
Definition: types.hpp:409
void set_config(const game_config_view &cfg)
Resets all data based on the provided config.
Definition: types.cpp:1067
unit_type::BUILD_STATUS build_status_
Definition: types.hpp:460
std::map< std::string, unit_type > unit_type_map
Definition: types.hpp:396
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:1253
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:1342
void clear()
Definition: types.cpp:1283
std::map< std::string, config > abilities_registry_
Definition: types.hpp:449
void remove_scenario_fixes()
Definition: types.cpp:1457
const race_map & races() const
Definition: types.hpp:408
bool hide_help_all_
True if [hide_help] contains a 'all=yes' at its root.
Definition: types.hpp:453
race_map races_
Definition: types.hpp:447
void build_all(unit_type::BUILD_STATUS status)
Makes sure the all unit_types are built to the specified level.
Definition: types.cpp:1297
const std::vector< const unit_type * > types_list() const
Definition: types.hpp:399
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:937
const std::map< std::string, config > & specials() const
Definition: types.hpp:411
unit_type_map types_
Definition: types.hpp:445
const unit_race * find_race(const std::string &) const
Definition: types.cpp:1359
void check_types(const std::vector< std::string > &types) const
Definition: types.cpp:1274
movement_type_map movement_types_
Definition: types.hpp:446
game_config_view units_cfg_
Definition: types.hpp:459
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:1245
const game_config_view & units_cfg() const
Definition: types.hpp:458
const unit_type_map & types() const
Definition: types.hpp:398
void read_hide_help(const config &cfg)
Parses the [hide_help] tag.
Definition: types.cpp:1313
unit_type_data & operator=(const unit_type_data &)=delete
std::vector< std::set< std::string > > hide_help_type_
Definition: types.hpp:455
std::vector< std::set< std::string > > hide_help_race_
Definition: types.hpp:456
void apply_scenario_fix(const config &cfg)
Definition: types.cpp:1422
unit_type_data(const unit_type_data &)=delete
config_array_view traits() const
Definition: types.hpp:412
A single unit type that the player may recruit.
Definition: types.hpp:43
std::string default_variation_
Definition: types.hpp:354
t_string description_
Definition: types.hpp:329
std::string image_
Definition: types.hpp:343
bool can_advance() const
Definition: types.hpp:230
std::vector< unit_animation > animations_
Definition: types.hpp:383
const std::vector< std::string > advances_from() const
A vector of unit_type ids that can advance to this unit_type.
Definition: types.cpp:610
unit_alignments::type alignment_
Definition: types.hpp:373
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:159
int jamming_
Definition: types.hpp:337
std::string race_id() const
Returns the ID of this type's race without the need to build the type.
Definition: types.hpp:274
int recall_cost_
Definition: types.hpp:334
const std::string & parent_id() const
The id of the original type from which this (variation) descended.
Definition: types.hpp:149
int cost_
Definition: types.hpp:339
config::const_child_itors advancements_
Definition: types.hpp:369
void fill_variations()
Processes [variation] tags of ut_cfg, handling inheritance and child clearing.
Definition: types.cpp:993
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:779
std::vector< t_string > special_notes_
Definition: types.hpp:330
const ability_vector & abilities() const
Definition: types.hpp:117
const unit_type & get_gender_unit_type(const std::string &gender) const
Returns a gendered variant of this unit_type.
Definition: types.cpp:416
const std::string & image() const
Definition: types.hpp:180
std::vector< std::string > get_ability_id_list() const
Definition: types.cpp:564
config::const_child_itors advancements() const
Definition: types.hpp:244
variations_map variations_
Definition: types.hpp:353
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:146
int level_
Definition: types.hpp:333
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:151
const unit_race * race_
Never nullptr, but may point to the null race.
Definition: types.hpp:359
std::string parent_id_
The id of the top ancestor of this unit_type.
Definition: types.hpp:325
ability_vector abilities_
Definition: types.hpp:364
std::string flag_rgb_
Definition: types.hpp:347
const std::string & id() const
The id for this unit_type.
Definition: types.hpp:145
std::string undead_variation_
Definition: types.hpp:341
std::string movement_type_id_
Definition: types.hpp:375
const std::vector< ability_metadata > & adv_abilities_metadata() const
Some extra abilities that may be gained through AMLA advancements.
Definition: types.hpp:228
void fill_variations_and_gender()
Definition: types.cpp:1022
const movetype & movement_type() const
Definition: types.hpp:194
std::string halo() const
Definition: types.hpp:184
std::vector< ability_metadata > adv_abilities_infos_
Definition: types.hpp:362
bool show_variations_in_help() const
Whether the unit type has at least one help-visible variation.
Definition: types.cpp:703
const unit_race * race() const
Never returns nullptr, but may point to the null race.
Definition: types.hpp:279
int hitpoints() const
Definition: types.hpp:165
int max_attacks_
Definition: types.hpp:338
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:323
std::array< std::unique_ptr< unit_type >, 2 > gender_types_
Definition: types.hpp:351
double xp_bar_scaling() const
Definition: types.hpp:167
bool has_ability_by_id(const std::string &ability) const
Definition: types.cpp:553
const std::string & default_variation() const
Definition: types.hpp:177
std::string small_profile_
Definition: types.hpp:345
t_string variation_name_
Definition: types.hpp:356
const unit_type & get_variation(const std::string &id) const
Definition: types.cpp:437
const_attack_itors attacks() const
Definition: types.cpp:505
const std::string & usage() const
Definition: types.hpp:179
config::const_child_itors events() const
Definition: types.hpp:247
const std::vector< std::string > & advances_to() const
A vector of unit_type ids that this unit_type can advance to.
Definition: types.hpp:119
unit_type(unit_type &&) noexcept=default
void apply_scenario_fix(const config &cfg)
Definition: types.cpp:1365
int vision_
Definition: types.hpp:336
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:258
int resistance_against(const std::string &damage_name, bool attacker) const
Gets resistance while considering custom WML abilities.
Definition: types.cpp:714
bool has_variation(const std::string &variation_id) const
Definition: types.cpp:698
bool has_gender_variation(const unit_race::GENDER gender) const
Definition: types.cpp:681
bool hide_help_
Definition: types.hpp:366
bool do_not_list() const
Definition: types.hpp:281
std::string ellipse() const
Definition: types.hpp:186
int movement() const
Definition: types.hpp:170
t_string unit_description() const
Definition: types.cpp:447
config & writable_cfg()
Definition: types.hpp:306
static void check_id(std::string &id)
Validate the id argument.
Definition: types.cpp:1464
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:321
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:254
std::string usage_
Definition: types.hpp:340
const std::vector< unit_animation > & animations() const
Definition: types.cpp:496
int max_attacks() const
Definition: types.hpp:175
std::vector< std::string > variations() const
Definition: types.cpp:686
bool hide_help() const
Definition: types.cpp:582
const std::string & flag_rgb() const
Definition: types.cpp:676
std::vector< ability_metadata > abilities_infos_
Definition: types.hpp:361
int vision() const
Definition: types.hpp:171
std::string variation_id_
Definition: types.hpp:355
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:456
attack_list attacks_cache_
Definition: types.hpp:319
config::const_child_itors modification_advancements() const
Returns two iterators pointing to a range of AMLA configs.
Definition: types.hpp:124
int cost() const
Definition: types.hpp:176
double xp_bar_scaling_
Definition: types.hpp:332
std::vector< std::string > advances_to_
Definition: types.hpp:368
const config * cfg_
Definition: types.hpp:316
std::string base_unit_id_
from [base_unit]
Definition: types.hpp:327
double hp_bar_scaling_
Definition: types.hpp:332
config possible_traits_
Definition: types.hpp:378
const std::string log_id() const
A variant on id() that is more descriptive, for use with message logging.
Definition: types.hpp:147
int vision(bool base_value) const
If base_value is set to true, do not fall back to movement().
Definition: types.hpp:173
std::vector< unit_race::GENDER > genders_
Definition: types.hpp:380
bool zoc_
Definition: types.hpp:366
const std::string & icon() const
Definition: types.hpp:181
const t_string & variation_name() const
Definition: types.hpp:178
int experience_needed(bool with_acceleration=true) const
Definition: types.cpp:539
bool generate_name() const
Definition: types.hpp:187
const std::string & big_profile() const
Definition: types.hpp:183
bool musthave_status(const std::string &status) const
Definition: types.cpp:630
const std::string & undead_variation() const
Info on the type of unit that the unit reanimates as.
Definition: types.hpp:137
double hp_bar_scaling() const
Definition: types.hpp:166
unit_type(default_ctor_t, const config &cfg, const std::string &parent_id)
Definition: types.cpp:55
int experience_needed_
Definition: types.hpp:370
movetype movement_type_
Definition: types.hpp:376
std::string icon_
Definition: types.hpp:344
int hitpoints_
Definition: types.hpp:331
const std::string movement_type_id() const
Definition: types.hpp:193
bool do_not_list_
Definition: types.hpp:366
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:381
config abilities_cfg() const
Definition: types.cpp:578
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:746
const t_string & type_name() const
The name of the unit in the current language setting.
Definition: types.hpp:142
void remove_scenario_fixes()
Definition: types.cpp:1434
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:976
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:189
BUILD_STATUS build_status_
Definition: types.hpp:385
config::const_child_itors possible_traits() const
Definition: types.hpp:239
void build_created()
Load the most needed data into an empty unit_type (build to CREATE).
Definition: types.cpp:338
int level() const
Definition: types.hpp:168
std::unique_ptr< config > built_cfg_
Definition: types.hpp:318
bool has_zoc() const
Definition: types.hpp:234
unit_alignments::type alignment() const
Definition: types.hpp:198
const std::string & small_profile() const
Definition: types.hpp:182
t_string type_name_
Definition: types.hpp:328
const std::vector< ability_metadata > & abilities_metadata() const
Definition: types.hpp:225
unit_type(const unit_type &)=delete
const config & get_cfg() const
Definition: types.hpp:283
int movement_
Definition: types.hpp:335
unsigned int num_traits() const
Definition: types.hpp:139
unit_type & operator=(const unit_type &)=delete
unsigned int num_traits_
Definition: types.hpp:349
std::set< std::string > advancement_tree() const
Get the advancement tree.
Definition: types.cpp:603
std::string profile_
Definition: types.hpp:346
int recall_cost() const
Definition: types.hpp:169
std::string footprints() const
Definition: types.hpp:185
int jamming() const
Definition: types.hpp:174
const config * cfg
std::size_t i
Definition: function.cpp:1031
std::vector< std::reference_wrapper< const config > > config_array_view
std::map< std::string, unit_race > race_map
Definition: race.hpp:106
unit_experience_accelerator(int modifier)
Definition: types.cpp:523
static int get_acceleration()
Definition: types.cpp:534
std::string help_topic_id
Definition: types.hpp:208
ability_metadata(const config &cfg)
Definition: types.cpp:127
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:469
unit_type_data unit_types
Definition: types.cpp:1494
std::map< std::string, movetype > movement_type_map
Definition: types.hpp:33
void adjust_profile(std::string &profile)
Definition: types.cpp:1496