OSDN Git Service

[Refactor] #1172 Changed 'TRUE : FALSE' to small characters each
[hengbandforosx/hengbandosx.git] / src / player / player-race.h
1 #pragma once
2
3 #include <optional>
4 #include <unordered_map>
5 #include <vector>
6
7 #include "object-enchant/tr-types.h"
8 #include "player-ability/player-ability-types.h"
9 #include "player/player-class-types.h"
10 #include "player/player-race-types.h"
11 #include "system/angband.h"
12
13 /*
14  * Constant for kinds of mimic
15  */
16 #define MIMIC_NONE 0
17 #define MIMIC_DEMON 1
18 #define MIMIC_DEMON_LORD 2
19 #define MIMIC_VAMPIRE 3
20
21 #define MIMIC_FLAGS choice
22 #define MIMIC_IS_NONLIVING 0x00000001
23 #define MIMIC_IS_DEMON 0x00000002
24 #define MIMIC_IS_UNDEAD 0x00000004
25
26 /*!
27  * @brief プレイヤー種族の生命形態
28  */
29 enum class PlayerRaceLife {
30     LIVING = 0, //!< 生きている
31     UNDEAD = 1, //!< 不死
32     DEMON = 2, //!< 悪魔
33     NONLIVING = 3, //!< 生きてない
34     MAX
35 };
36
37 /*!
38  * @brief プレイヤー種族の食料形態
39  */
40 enum class PlayerRaceFood {
41     RATION = 0, //!< 食料
42     WATER = 1, //!< 水
43     OIL = 2, //!< 油
44     BLOOD = 3, //!< 血
45     MANA = 4, //!< 魔力
46     CORPSE = 5, //!< 死体(捧げる)
47     MAX
48 };
49
50 /*!
51  * @brief プレイヤー種族の条件設定構造体
52  */
53 struct player_race_condition {
54     tr_type type{};
55     PLAYER_LEVEL level{};
56     std::optional<player_class_type> pclass{};
57     bool not_class{};
58
59     player_race_condition(tr_type t, PLAYER_LEVEL l = 1, const std::optional<player_class_type> &c = std::nullopt, bool nc = false)
60         : type(t)
61         , level(l)
62         , pclass(c)
63         , not_class(nc)
64     {
65     }
66 };
67
68 /*!
69  * @brief プレイヤー種族構造体 / Player racial info
70  */
71 struct player_race {
72     concptr title{}; //!< 種族名 / Title of race
73 #ifdef JP
74     concptr E_title{}; //!< 英語種族名
75 #endif
76     concptr symbol{}; //!< 種族シンボル(救援召喚) / Race symbols
77     s16b r_adj[A_MAX]{}; //!< 能力値ボーナス / Racial stat bonuses
78
79     s16b r_dis{}; //!< 解除 / disarming
80     s16b r_dev{}; //!< 魔道具使用 /magic devices
81     s16b r_sav{}; //!< 魔法防御 / saving throw
82     s16b r_stl{}; //!< 隠密 / stealth
83     s16b r_srh{}; //!< 探索 / search ability
84     s16b r_fos{}; //!< 知覚 / search frequency
85     s16b r_thn{}; //!< 打撃修正(命中) / combat (normal)
86     s16b r_thb{}; //!< 射撃修正(命中) / combat (shooting)
87
88     byte r_mhp{}; //!< ヒットダイス /  Race hit-dice modifier
89     byte r_exp{}; //!< 経験値修正 /Race experience factor
90
91     byte b_age{}; //!< 年齢最小値 / base age
92     byte m_age{}; //!< 年齢加算範囲 / mod age
93
94     byte m_b_ht{}; //!< 身長最小値(男) / base height (males)
95     byte m_m_ht{}; //!< 身長加算範囲(男) / mod height (males)
96     byte m_b_wt{}; //!< 体重最小値(男) / base weight (males)
97     byte m_m_wt{}; //!< 体重加算範囲(男) / mod weight (males)
98
99     byte f_b_ht{}; //!< 身長最小値(女) / base height (females)
100     byte f_m_ht{}; //!< 身長加算範囲(女) / mod height (females)
101     byte f_b_wt{}; //!< 体重最小値(女) / base weight (females)
102     byte f_m_wt{}; //!< 体重加算範囲(女) / mod weight (females)
103
104     byte infra{}; //!< 赤外線視力 / Infra-vision range
105
106     u32b choice{}; //!< 似つかわしい職業(ミミック時はミミック種族属性) / Legal class choices
107     PlayerRaceLife life{}; //!< 生命の形態
108     PlayerRaceFood food{}; //!< 食料の形態
109
110     std::vector<player_race_condition> extra_flags;
111 };
112
113 extern const player_race *rp_ptr;
114
115 typedef struct player_type player_type;
116 SYMBOL_CODE get_summon_symbol_from_player(player_type *creature_ptr);
117 bool is_specific_player_race(player_type *creature_ptr, player_race_type prace);
118 bool player_race_has_flag(player_type *creature_ptr, tr_type flag, bool base_race = false);
119 void add_player_race_flags(player_type *creature_ptr, BIT_FLAGS *flags, bool base_race = false);
120 PlayerRaceLife player_race_life(player_type *creature_ptr, bool base_race = false);
121 PlayerRaceFood player_race_food(player_type *creature_ptr, bool base_race = false);