diff options
Diffstat (limited to 'src/monster_race.hpp')
-rw-r--r-- | src/monster_race.hpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/monster_race.hpp b/src/monster_race.hpp new file mode 100644 index 00000000..7e5d5082 --- /dev/null +++ b/src/monster_race.hpp @@ -0,0 +1,116 @@ +#pragma once + +#include "body.hpp" +#include "h-basic.h" +#include "monster_blow.hpp" +#include "obj_theme.hpp" + +/** + * 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; /* Name */ + char *text; /* Text */ + + u16b hdice; /* Creatures hit dice count */ + u16b hside; /* Creatures hit dice sides */ + + s16b ac; /* Armour Class */ + + s16b sleep; /* Inactive counter (base) */ + byte aaf; /* Area affect radius (1-100) */ + byte speed; /* Speed (normally 110) */ + + s32b mexp; /* Exp value for kill */ + + s32b weight; /* Weight of the monster */ + + byte freq_inate; /* Inate spell frequency */ + byte freq_spell; /* Other spell frequency */ + + u32b flags1; /* Flags 1 (general) */ + u32b flags2; /* Flags 2 (abilities) */ + u32b flags3; /* Flags 3 (race/resist) */ + u32b flags4; /* Flags 4 (inate/breath) */ + u32b flags5; /* Flags 5 (normal spells) */ + u32b flags6; /* Flags 6 (special spells) */ + u32b flags7; /* Flags 7 (movement related abilities) */ + u32b flags8; /* Flags 8 (wilderness info) */ + u32b flags9; /* Flags 9 (drops info) */ + + monster_blow blow[4]; /* Up to four blows per round */ + + byte body_parts[BODY_MAX]; /* To help to decide what to use when body changing */ + + byte level; /* Level of creature */ + byte rarity; /* Rarity of creature */ + + + byte d_attr; /* Default monster attribute */ + char d_char; /* Default monster character */ + + + byte x_attr; /* Desired monster attribute */ + char x_char; /* Desired monster character */ + + + s16b max_num; /* Maximum population allowed per level */ + + byte cur_num; /* Monster population on current level */ + + + s16b r_sights; /* Count sightings of this monster */ + s16b r_deaths; /* Count deaths from this monster */ + + s16b r_pkills; /* Count monsters killed in this life */ + s16b r_tkills; /* Count monsters killed in all lives */ + + byte r_wake; /* Number of times woken up (?) */ + byte r_ignore; /* Number of times ignored (?) */ + + byte r_xtra1; /* Something (unused) */ + byte r_xtra2; /* Something (unused) */ + + byte r_drop_gold; /* Max number of gold dropped at once */ + byte r_drop_item; /* Max number of item dropped at once */ + + byte r_cast_inate; /* Max number of inate spells seen */ + byte r_cast_spell; /* Max number of other spells seen */ + + byte r_blows[4]; /* Number of times each blow type was seen */ + + u32b r_flags1; /* Observed racial flags */ + u32b r_flags2; /* Observed racial flags */ + u32b r_flags3; /* Observed racial flags */ + u32b r_flags4; /* Observed racial flags */ + u32b r_flags5; /* Observed racial flags */ + u32b r_flags6; /* Observed racial flags */ + u32b r_flags7; /* Observed racial flags */ + u32b r_flags8; /* Observed racial flags */ + u32b r_flags9; /* Observed racial flags */ + + bool_ on_saved; /* Is the (unique) on a saved level ? */ + + byte total_visible; /* Amount of this race that are visible */ + + obj_theme drops; /* The drops type */ +}; + + |