OSDN Git Service

Merge pull request #765 from sikabane-works/release/3.0.0Alpha17
[hengbandforosx/hengbandosx.git] / src / system / monster-race-definition.h
1 #pragma once
2
3 #include "monster-attack/monster-attack-effect.h"
4 #include "monster-attack/monster-attack-types.h"
5 #include "monster-race/race-ability-flags.h"
6 #include "util/flag-group.h"
7 #include "system/angband.h"
8 #include <string>
9
10 /*! モンスターが1ターンに攻撃する最大回数 (射撃を含む) / The maximum number of times a monster can attack in a turn (including SHOOT) */
11 #define MAX_NUM_BLOWS 4
12
13 /*
14  * Monster blow structure
15  *
16  *      - Method (RBM_*)
17  *      - Effect (RBE_*)
18  *      - Damage Dice
19  *      - Damage Sides
20  */
21 typedef struct monster_blow {
22     rbm_type method{};
23     rbe_type effect{};
24     DICE_NUMBER d_dice{};
25     DICE_SID d_side{};
26 } monster_blow;
27
28 /*
29  * Monster "race" information, including racial memories
30  *
31  * Note that "d_attr" and "d_char" are used for MORE than "visual" stuff.
32  *
33  * Note that "x_attr" and "x_char" are used ONLY for "visual" stuff.
34  *
35  * Note that "cur_num" (and "max_num") represent the number of monsters
36  * of the given race currently on (and allowed on) the current level.
37  * This information yields the "dead" flag for Unique monsters.
38  *
39  * Note that "max_num" is reset when a new player is created.
40  * Note that "cur_num" is reset when a new level is created.
41  *
42  * Note that several of these fields, related to "recall", can be
43  * scrapped if space becomes an issue, resulting in less "complete"
44  * monster recall (no knowledge of spells, etc).  All of the "recall"
45  * fields have a special prefix to aid in searching for them.
46  */
47
48 typedef struct monster_race {
49     std::string name; /*!< 名前データのオフセット(日本語) /  Name offset(Japanese) */
50 #ifdef JP
51     std::string E_name; /*!< 名前データのオフセット(英語) /  Name offset(English) */
52 #endif
53     std::string text; /*!< 思い出テキストのオフセット / Lore text offset */
54     DICE_NUMBER hdice{}; /*!< HPのダイス数 / Creatures hit dice count */
55     DICE_SID hside{}; /*!< HPのダイス面数 / Creatures hit dice sides */
56     ARMOUR_CLASS ac{}; /*!< アーマークラス / Armour Class */
57     SLEEP_DEGREE sleep{}; /*!< 睡眠値 / Inactive counter (base) */
58     POSITION aaf{}; /*!< 感知範囲(1-100スクエア) / Area affect radius (1-100) */
59     SPEED speed{}; /*!< 加速(110で+0) / Speed (normally 110) */
60     EXP mexp{}; /*!< 殺害時基本経験値 / Exp value for kill */
61     BIT_FLAGS16 extra{}; /*!< 未使用 /  Unused (for now) */
62     RARITY freq_spell{}; /*!< 魔法&特殊能力仕様頻度(1/n) /  Spell frequency */
63     BIT_FLAGS flags1{}; /* Flags 1 (general) */
64     BIT_FLAGS flags2{}; /* Flags 2 (abilities) */
65     BIT_FLAGS flags3{}; /* Flags 3 (race/resist) */
66     BIT_FLAGS flags7{}; /* Flags 7 (movement related abilities) */
67     BIT_FLAGS flags8{}; /* Flags 8 (wilderness info) */
68     BIT_FLAGS flags9{}; /* Flags 9 (drops info) */
69     BIT_FLAGS flagsr{}; /* Flags R (resistances info) */
70     FlagGroup<RF_ABILITY> ability_flags; /* Ability Flags */
71     monster_blow blow[MAX_NUM_BLOWS]{}; /* Up to four blows per round */
72     MONRACE_IDX reinforce_id[6]{};
73     DICE_NUMBER reinforce_dd[6]{};
74     DICE_SID reinforce_ds[6]{};
75     ARTIFACT_IDX artifact_id[4]{}; /* 特定アーティファクトドロップID */
76     RARITY artifact_rarity[4]{}; /* 特定アーティファクトレア度 */
77     PERCENTAGE artifact_percent[4]{}; /* 特定アーティファクトドロップ率 */
78     PERCENTAGE arena_ratio{}; /* モンスター闘技場の掛け金倍率修正値(%基準 / 0=100%) / The adjustment ratio for gambling monster */
79     MONRACE_IDX next_r_idx{};
80     EXP next_exp{};
81     DEPTH level{}; /* Level of creature */
82     RARITY rarity{}; /* Rarity of creature */
83     TERM_COLOR d_attr{}; /* Default monster attribute */
84     SYMBOL_CODE d_char{}; /* Default monster character */
85     TERM_COLOR x_attr{}; /* Desired monster attribute */
86     SYMBOL_CODE x_char{}; /* Desired monster character */
87     MONSTER_NUMBER max_num{}; /* Maximum population allowed per level */
88     MONSTER_NUMBER cur_num{}; /* Monster population on current level */
89     FLOOR_IDX floor_id{}; /* Location of unique monster */
90     MONSTER_NUMBER r_sights{}; /* Count sightings of this monster */
91     MONSTER_NUMBER r_deaths{}; /* Count deaths from this monster */
92     MONSTER_NUMBER r_pkills{}; /* Count visible monsters killed in this life */
93     MONSTER_NUMBER r_akills{}; /* Count all monsters killed in this life */
94     MONSTER_NUMBER r_tkills{}; /* Count monsters killed in all lives */
95     byte r_wake{}; /* Number of times woken up (?) */
96     byte r_ignore{}; /* Number of times ignored (?) */
97 #define MR1_EVOLUTION 0x01
98     byte r_xtra1{}; /* Something */
99     byte r_xtra2{}; /* Something (unused) */
100     ITEM_NUMBER r_drop_gold{}; /*!< これまでに撃破時に落とした財宝の数 / Max number of gold dropped at once */
101     ITEM_NUMBER r_drop_item{}; /*!< これまでに撃破時に落としたアイテムの数 / Max number of item dropped at once */
102     byte r_cast_spell{}; /* Max number of other spells seen */
103     byte r_blows[MAX_NUM_BLOWS]{}; /* Number of times each blow type was seen */
104     u32b r_flags1{}; /* Observed racial flags */
105     u32b r_flags2{}; /* Observed racial flags */
106     u32b r_flags3{}; /* Observed racial flags */
107     u32b r_flagsr{}; /* Observed racial resistance flags */
108     FlagGroup<RF_ABILITY> r_ability_flags; /* Observed racial ability flags */
109 } monster_race;