summaryrefslogtreecommitdiff
path: root/src/monster_race.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/monster_race.hpp')
-rw-r--r--src/monster_race.hpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/monster_race.hpp b/src/monster_race.hpp
new file mode 100644
index 00000000..eb398a3d
--- /dev/null
+++ b/src/monster_race.hpp
@@ -0,0 +1,84 @@
+#pragma once
+
+#include "body.hpp"
+#include "h-basic.h"
+#include "monster_blow.hpp"
+#include "monster_race_flag_set.hpp"
+#include "monster_spell_flag_set.hpp"
+#include "obj_theme.hpp"
+
+#include <array>
+
+/**
+ * Monster race descriptors and runtime data, including racial memories.
+ *
+ * Note that "d_attr" and "d_char" are used for MORE than "visual" stuff.
+ *
+ * Note that "x_attr" and "x_char" are used ONLY for "visual" stuff.
+ *
+ * Note that "cur_num" (and "max_num") represent the number of monsters
+ * of the given race currently on (and allowed on) the current level.
+ * This information yields the "dead" flag for Unique monsters.
+ *
+ * Note that "max_num" is reset when a new player is created.
+ * Note that "cur_num" is reset when a new level is created.
+ *
+ * Note that several of these fields, related to "recall", can be
+ * scrapped if space becomes an issue, resulting in less "complete"
+ * monster recall (no knowledge of spells, etc). All of the "recall"
+ * fields have a special prefix to aid in searching for them.
+ */
+struct monster_race
+{
+ const char *name = nullptr; /* Name */
+ char *text = nullptr; /* Text */
+
+ u16b hdice = 0; /* Creatures hit dice count */
+ u16b hside = 0; /* Creatures hit dice sides */
+
+ s16b ac = 0; /* Armour Class */
+
+ s16b sleep = 0; /* Inactive counter (base) */
+ byte aaf = 0; /* Area affect radius (1-100) */
+ byte speed = 0; /* Speed (normally 110) */
+
+ s32b mexp = 0; /* Exp value for kill */
+
+ s32b weight = 0; /* Weight of the monster */
+
+ byte freq_inate = 0; /* Inate spell frequency */
+ byte freq_spell = 0; /* Other spell frequency */
+
+ monster_race_flag_set flags; /* Flags */
+
+ monster_spell_flag_set spells; /* Spells */
+
+ std::array<monster_blow, 4> blow { }; /* Up to four blows per round */
+
+ byte body_parts[BODY_MAX] = { 0 }; /* To help to decide what to use when body changing */
+
+ byte artifact_idx = 0; /* Artifact index of standard artifact dropped; 0 if none. */
+ int artifact_chance = 0; /* Percentage chance of dropping the artifact. */
+
+ byte level = 0; /* Level of creature */
+ byte rarity = 0; /* Rarity of creature */
+
+ byte d_attr = 0; /* Default monster attribute */
+ char d_char = 0; /* Default monster character */
+
+
+ byte x_attr = 0; /* Desired monster attribute */
+ char x_char = 0; /* Desired monster character */
+
+ s16b max_num = 0; /* Maximum population allowed per level */
+ byte cur_num = 0; /* Monster population on current level */
+
+ s16b r_pkills = 0; /* Count monsters killed in this life */
+
+ bool_ on_saved = 0; /* Is the (unique) on a saved level ? */
+
+ obj_theme drops; /* The drops type */
+
+};
+
+