1 #pragma once
2 
3 #include <vector>
4 
5 #include "enum.h"
6 #include "ability-type.h"
7 #include "equipment-type.h"
8 #include "item-prop-enum.h"
9 #include "job-type.h"
10 #include "size-part-type.h"
11 #include "size-type.h"
12 #include "species-def.h"
13 #include "species-type.h"
14 
15 using std::vector;
16 
17 const species_def& get_species_def(species_type species);
18 
19 namespace species
20 {
21     enum name_type
22     {
23         SPNAME_PLAIN,
24         SPNAME_GENUS,
25         SPNAME_ADJ
26     };
27 
28     string name(species_type speci, name_type spname = SPNAME_PLAIN);
29     const char *get_abbrev(species_type which_species);
30     species_type from_abbrev(const char *abbrev);
31     species_type from_str(const string &species);
32     species_type from_str_loose(const string &species_str,
33                                                     bool initial_only = false);
34 
35     bool is_elven(species_type species);
36     bool is_orcish(species_type species);
37     bool is_undead(species_type species);
38     bool is_draconian(species_type species);
39     undead_state_type undead_type(species_type species) PURE;
40     monster_type to_mons_species(species_type species);
41 
42     monster_type dragon_form(species_type s);
43     const char* scale_type(species_type species);
44     ability_type draconian_breath(species_type species);
45     species_type random_draconian_colour();
46 
47     int mutation_level(species_type species, mutation_type mut, int mut_level=1);
48     const vector<string>& fake_mutations(species_type species, bool terse);
49     bool has_hair(species_type species);
50     bool has_bones(species_type species);
51     bool can_throw_large_rocks(species_type species);
52     bool wears_barding(species_type species);
53     bool has_claws(species_type species);
54     bool is_nonliving(species_type species);
55     bool can_swim(species_type species);
56     bool likes_water(species_type species);
57     size_type size(species_type species, size_part_type psize = PSIZE_TORSO);
58 
59     string walking_verb(species_type sp);
60     string prayer_action(species_type species);
61     string shout_verb(species_type sp, int screaminess, bool directed);
62     string skin_name(species_type sp, bool adj=false);
63     string arm_name(species_type species);
64     string hand_name(species_type species);
65     int arm_count(species_type species);
66     equipment_type sacrificial_arm(species_type species);
67     bool bans_eq(species_type species, equipment_type eq);
68     vector<equipment_type> ring_slots(species_type species, bool missing_hand);
69 
70     int get_exp_modifier(species_type species);
71     int get_hp_modifier(species_type species);
72     int get_mp_modifier(species_type species);
73     int get_wl_modifier(species_type species);
74     int get_stat_gain_multiplier(species_type species);
75     bool has_low_str(species_type species);
76     bool recommends_job(species_type species, job_type job);
77     bool recommends_weapon(species_type species, weapon_type wpn);
78 
79     bool is_valid(species_type species);
80     bool is_starting_species(species_type species);
81     species_type random_starting_species();
82     bool is_removed(species_type species);
83     vector<species_type> get_all_species();
84 }
85 
86 void species_stat_init(species_type species);
87 void species_stat_gain(species_type species);
88 
89 void give_basic_mutations(species_type species);
90 void give_level_mutations(species_type species, int xp_level);
91 
92 void change_species_to(species_type sp);
93