diff options
Diffstat (limited to 'src/monster.pkg')
-rw-r--r-- | src/monster.pkg | 2301 |
1 files changed, 0 insertions, 2301 deletions
diff --git a/src/monster.pkg b/src/monster.pkg deleted file mode 100644 index bf0f4661..00000000 --- a/src/monster.pkg +++ /dev/null @@ -1,2301 +0,0 @@ -/* File: monster.pkg */ - -/* - * Purpose: Lua interface defitions for monsters. - * To be processed by tolua to generate C source code. - */ - -$#include "angband.h" - -/** @typedef cptr - * @note String - */ -typedef char* cptr; -/** @typedef errr - * @note Number - */ -typedef int errr; -/** @typedef bool - * @note Boolean - */ -typedef unsigned char bool; -/** @typedef byte - * @note Number - */ -typedef unsigned char byte; -/** @typedef s16b - * @note Number - */ -typedef signed short s16b; -/** @typedef u16b - * @note Number - */ -typedef unsigned short u16b; -/** @typedef s32b - * @note Number - */ -typedef signed int s32b; -/** @typedef u32b - * @note Number - */ -typedef unsigned int u32b; - -/* To make easy object creations */ -$static monster_type lua_monster_forge; -/** @var monster_forge; - * @brief monster_type - */ -static monster_type lua_monster_forge @ monster_forge; - -/** @name Monster status - * @note Player POV - * @{ */ -/** @def MSTATUS_ENEMY */ -#define MSTATUS_ENEMY -2 - -/** @def MSTATUS_NEUTRAL_M */ -#define MSTATUS_NEUTRAL_M -1 - -/** @def MSTATUS_NEUTRAL */ -#define MSTATUS_NEUTRAL 0 - -/** @def MSTATUS_NEUTRAL_P */ -#define MSTATUS_NEUTRAL_P 1 - -/** @def MSTATUS_FRIEND */ -#define MSTATUS_FRIEND 2 - -/** @def MSTATUS_PET */ -#define MSTATUS_PET 3 - -/** @def MSTATUS_COMPANION */ -#define MSTATUS_COMPANION 4 -/** @} */ - -/** @name Race flags #1 - * @{ */ -/** @def RF1_UNIQUE - * @note Unique Monster - */ -#define RF1_UNIQUE 0x00000001 -/** @def RF1_QUESTOR - * @note Quest Monster - */ -#define RF1_QUESTOR 0x00000002 -/** @def RF1_MALE - * @note Male gender - */ -#define RF1_MALE 0x00000004 -/** @def RF1_FEMALE - * @note Female gender - */ -#define RF1_FEMALE 0x00000008 -/** @def RF1_CHAR_CLEAR - * @note Absorbs symbol - */ -#define RF1_CHAR_CLEAR 0x00000010 -/** @def RF1_CHAR_MULTI - * @note Changes symbol - */ -#define RF1_CHAR_MULTI 0x00000020 -/** @def RF1_ATTR_CLEAR - * @note Absorbs color - */ -#define RF1_ATTR_CLEAR 0x00000040 -/** @def RF1_ATTR_MULTI - * @note Changes color - */ -#define RF1_ATTR_MULTI 0x00000080 -/** @def RF1_FORCE_DEPTH - * @note Start at "correct" depth - */ -#define RF1_FORCE_DEPTH 0x00000100 -/** @def RF1_FORCE_MAXHP - * @note Start with max hitpoints - */ -#define RF1_FORCE_MAXHP 0x00000200 -/** @def RF1_FORCE_SLEEP - * @note Start out sleeping - */ -#define RF1_FORCE_SLEEP 0x00000400 -/** @def RF1_FORCE_EXTRA - * @note Start out something - */ -#define RF1_FORCE_EXTRA 0x00000800 -/** @def RF1_FRIEND - * @note Arrive with a friend - */ -#define RF1_FRIEND 0x00001000 -/** @def RF1_FRIENDS - * @note Arrive with some friends - */ -#define RF1_FRIENDS 0x00002000 -/** @def RF1_ESCORT - * @note Arrive with an escort - */ -#define RF1_ESCORT 0x00004000 -/** @def RF1_ESCORTS - * @note Arrive with some escorts - */ -#define RF1_ESCORTS 0x00008000 -/** @def RF1_NEVER_BLOW - * @note Never make physical blow - */ -#define RF1_NEVER_BLOW 0x00010000 -/** @def RF1_NEVER_MOVE - * @note Never make physical move - */ -#define RF1_NEVER_MOVE 0x00020000 -/** @def RF1_RAND_25 - * @note Moves randomly (25%) - */ -#define RF1_RAND_25 0x00040000 -/** @def RF1_RAND_50 - * @note Moves randomly (50%) - */ -#define RF1_RAND_50 0x00080000 -/** @def RF1_ONLY_GOLD - * @note Drop only gold - */ -#define RF1_ONLY_GOLD 0x00100000 -/** @def RF1_ONLY_ITEM - * @note Drop only items - */ -#define RF1_ONLY_ITEM 0x00200000 -/** @def RF1_DROP_60 - * @note Drop an item/gold (60%) - */ -#define RF1_DROP_60 0x00400000 -/** @def RF1_DROP_90 - * @note Drop an item/gold (90%) - */ -#define RF1_DROP_90 0x00800000 -/** @def RF1_DROP_1D2 - * @note Drop 1d2 items/gold - */ -#define RF1_DROP_1D2 0x01000000 -/** @def RF1_DROP_2D2 - * @note Drop 2d2 items/gold - */ -#define RF1_DROP_2D2 0x02000000 -/** @def RF1_DROP_3D2 - * @note Drop 3d2 items/gold - */ -#define RF1_DROP_3D2 0x04000000 -/** @def RF1_DROP_4D2 - * @note Drop 4d2 items/gold - */ -#define RF1_DROP_4D2 0x08000000 -/** @def RF1_DROP_GOOD - * @note Drop good items - */ -#define RF1_DROP_GOOD 0x10000000 -/** @def RF1_DROP_GREAT - * @note Drop great items - */ -#define RF1_DROP_GREAT 0x20000000 -/** @def RF1_DROP_USEFUL - * @note Drop "useful" items - */ -#define RF1_DROP_USEFUL 0x40000000 -/** @def RF1_DROP_CHOSEN - * @note Drop "chosen" items - */ -#define RF1_DROP_CHOSEN 0x80000000 -/** @} */ - -/** @name Race flags #2 - * @note New monster race bit flags - * @{ */ -/** @def RF2_STUPID - * @note Monster is stupid - */ -#define RF2_STUPID 0x00000001 -/** @def RF2_SMART - * @note Monster is smart - */ -#define RF2_SMART 0x00000002 -/** @def RF2_CAN_SPEAK - * @note TY: can speak - */ -#define RF2_CAN_SPEAK 0x00000004 -/** @def RF2_REFLECTING - * @note Reflects bolts - */ -#define RF2_REFLECTING 0x00000008 -/** @def RF2_INVISIBLE - * @note Monster avoids vision - */ -#define RF2_INVISIBLE 0x00000010 -/** @def RF2_COLD_BLOOD - * @note Monster avoids infra - */ -#define RF2_COLD_BLOOD 0x00000020 -/** @def RF2_EMPTY_MIND - * @note Monster avoids telepathy - */ -#define RF2_EMPTY_MIND 0x00000040 -/** @def RF2_WEIRD_MIND - * @note Monster avoids telepathy? - */ -#define RF2_WEIRD_MIND 0x00000080 -/** @def RF2_DEATH_ORB - * @note Death Orb - */ -#define RF2_DEATH_ORB 0x00000100 -/** @def RF2_REGENERATE - * @note Monster regenerates - */ -#define RF2_REGENERATE 0x00000200 -/** @def RF2_SHAPECHANGER - * @note TY: shapechanger - */ -#define RF2_SHAPECHANGER 0x00000400 -/** @def RF2_ATTR_ANY - * @note TY: Attr_any - */ -#define RF2_ATTR_ANY 0x00000800 -/** @def RF2_POWERFUL - * @note Monster has strong breath - */ -#define RF2_POWERFUL 0x00001000 -/** @def RF2_ELDRITCH_HORROR - * @note Sanity-blasting horror - */ -#define RF2_ELDRITCH_HORROR 0x00002000 -/** @def RF2_AURA_FIRE - * @note Burns in melee - */ -#define RF2_AURA_FIRE 0x00004000 -/** @def RF2_AURA_ELEC - * @note Shocks in melee - */ -#define RF2_AURA_ELEC 0x00008000 -/** @def RF2_OPEN_DOOR - * @note Monster can open doors - */ -#define RF2_OPEN_DOOR 0x00010000 -/** @def RF2_BASH_DOOR - * @note Monster can bash doors - */ -#define RF2_BASH_DOOR 0x00020000 -/** @def RF2_PASS_WALL - * @note Monster can pass walls - */ -#define RF2_PASS_WALL 0x00040000 -/** @def RF2_KILL_WALL - * @note Monster can destroy walls - */ -#define RF2_KILL_WALL 0x00080000 -/** @def RF2_MOVE_BODY - * @note Monster can move monsters - */ -#define RF2_MOVE_BODY 0x00100000 -/** @def RF2_KILL_BODY - * @note Monster can kill monsters - */ -#define RF2_KILL_BODY 0x00200000 -/** @def RF2_TAKE_ITEM - * @note Monster can pick up items - */ -#define RF2_TAKE_ITEM 0x00400000 -/** @def RF2_KILL_ITEM - * @note Monster can crush items - */ -#define RF2_KILL_ITEM 0x00800000 -/** @def RF2_BRAIN_1 */ -#define RF2_BRAIN_1 0x01000000 - -/** @def RF2_BRAIN_2 */ -#define RF2_BRAIN_2 0x02000000 - -/** @def RF2_BRAIN_3 */ -#define RF2_BRAIN_3 0x04000000 - -/** @def RF2_BRAIN_4 */ -#define RF2_BRAIN_4 0x08000000 - -/** @def RF2_BRAIN_5 */ -#define RF2_BRAIN_5 0x10000000 - -/** @def RF2_BRAIN_6 */ -#define RF2_BRAIN_6 0x20000000 - -/** @def RF2_BRAIN_7 */ -#define RF2_BRAIN_7 0x40000000 - -/** @def RF2_BRAIN_8 */ -#define RF2_BRAIN_8 0x80000000 -/** @} */ - -/** @name Race flags #3 - * @note New monster race bit flags - * @{ */ -/** @def RF3_ORC - * @note Orc - */ -#define RF3_ORC 0x00000001 -/** @def RF3_TROLL - * @note Troll - */ -#define RF3_TROLL 0x00000002 -/** @def RF3_GIANT - * @note Giant - */ -#define RF3_GIANT 0x00000004 -/** @def RF3_DRAGON - * @note Dragon - */ -#define RF3_DRAGON 0x00000008 -/** @def RF3_DEMON - * @note Demon - */ -#define RF3_DEMON 0x00000010 -/** @def RF3_UNDEAD - * @note Undead - */ -#define RF3_UNDEAD 0x00000020 -/** @def RF3_EVIL - * @note Evil - */ -#define RF3_EVIL 0x00000040 -/** @def RF3_ANIMAL - * @note Animal - */ -#define RF3_ANIMAL 0x00000080 -/** @def RF3_THUNDERLORD - * @note DG: Thunderlord - */ -#define RF3_THUNDERLORD 0x00000100 -/** @def RF3_GOOD - * @note Good - */ -#define RF3_GOOD 0x00000200 -/** @def RF3_AURA_COLD - * @note Freezes in melee - */ -#define RF3_AURA_COLD 0x00000400 -/** @def RF3_NONLIVING - * @note TY: Non-Living (?) - */ -#define RF3_NONLIVING 0x00000800 -/** @def RF3_HURT_LITE - * @note Hurt by lite - */ -#define RF3_HURT_LITE 0x00001000 -/** @def RF3_HURT_ROCK - * @note Hurt by rock remover - */ -#define RF3_HURT_ROCK 0x00002000 -/** @def RF3_SUSCEP_FIRE - * @note Hurt badly by fire - */ -#define RF3_SUSCEP_FIRE 0x00004000 -/** @def RF3_SUSCEP_COLD - * @note Hurt badly by cold - */ -#define RF3_SUSCEP_COLD 0x00008000 -/** @def RF3_IM_ACID - * @note Resist acid a lot - */ -#define RF3_IM_ACID 0x00010000 -/** @def RF3_IM_ELEC - * @note Resist elec a lot - */ -#define RF3_IM_ELEC 0x00020000 -/** @def RF3_IM_FIRE - * @note Resist fire a lot - */ -#define RF3_IM_FIRE 0x00040000 -/** @def RF3_IM_COLD - * @note Resist cold a lot - */ -#define RF3_IM_COLD 0x00080000 -/** @def RF3_IM_POIS - * @note Resist poison a lot - */ -#define RF3_IM_POIS 0x00100000 -/** @def RF3_RES_TELE - * @note Resist teleportation - */ -#define RF3_RES_TELE 0x00200000 -/** @def RF3_RES_NETH - * @note Resist nether a lot - */ -#define RF3_RES_NETH 0x00400000 -/** @def RF3_RES_WATE - * @note Resist water - */ -#define RF3_RES_WATE 0x00800000 -/** @def RF3_RES_PLAS - * @note Resist plasma - */ -#define RF3_RES_PLAS 0x01000000 -/** @def RF3_RES_NEXU - * @note Resist nexus - */ -#define RF3_RES_NEXU 0x02000000 -/** @def RF3_RES_DISE - * @note Resist disenchantment - */ -#define RF3_RES_DISE 0x04000000 -/** @def RF3_UNIQUE_4 - * @note Is a "Nazgul" unique - */ -#define RF3_UNIQUE_4 0x08000000 -/** @def RF3_NO_FEAR - * @note Cannot be scared - */ -#define RF3_NO_FEAR 0x10000000 -/** @def RF3_NO_STUN - * @note Cannot be stunned - */ -#define RF3_NO_STUN 0x20000000 -/** @def RF3_NO_CONF - * @note Cannot be confused - */ -#define RF3_NO_CONF 0x40000000 -/** @def RF3_NO_SLEEP - * @note Cannot be slept - */ -#define RF3_NO_SLEEP 0x80000000 -/** @} */ - -/** @name Race flags #4 - * @note New monster race bit flags - * @{ */ -/** @def RF4_SHRIEK - * @note Shriek for help - */ -#define RF4_SHRIEK 0x00000001 -/** @def RF4_MULTIPLY - * @note Monster reproduces - */ -#define RF4_MULTIPLY 0x00000002 -/** @def RF4_S_ANIMAL - * @note Summon animals - */ -#define RF4_S_ANIMAL 0x00000004 -/** @def RF4_ROCKET - * @note TY: Rocket - */ -#define RF4_ROCKET 0x00000008 -/** @def RF4_ARROW_1 - * @note Fire an arrow (light) - */ -#define RF4_ARROW_1 0x00000010 -/** @def RF4_ARROW_2 - * @note Fire an arrow (heavy) - */ -#define RF4_ARROW_2 0x00000020 -/** @def RF4_ARROW_3 - * @note Fire missiles (light) - */ -#define RF4_ARROW_3 0x00000040 -/** @def RF4_ARROW_4 - * @note Fire missiles (heavy) - */ -#define RF4_ARROW_4 0x00000080 -/** @def RF4_BR_ACID - * @note Breathe Acid - */ -#define RF4_BR_ACID 0x00000100 -/** @def RF4_BR_ELEC - * @note Breathe Elec - */ -#define RF4_BR_ELEC 0x00000200 -/** @def RF4_BR_FIRE - * @note Breathe Fire - */ -#define RF4_BR_FIRE 0x00000400 -/** @def RF4_BR_COLD - * @note Breathe Cold - */ -#define RF4_BR_COLD 0x00000800 -/** @def RF4_BR_POIS - * @note Breathe Poison - */ -#define RF4_BR_POIS 0x00001000 -/** @def RF4_BR_NETH - * @note Breathe Nether - */ -#define RF4_BR_NETH 0x00002000 -/** @def RF4_BR_LITE - * @note Breathe Lite - */ -#define RF4_BR_LITE 0x00004000 -/** @def RF4_BR_DARK - * @note Breathe Dark - */ -#define RF4_BR_DARK 0x00008000 -/** @def RF4_BR_CONF - * @note Breathe Confusion - */ -#define RF4_BR_CONF 0x00010000 -/** @def RF4_BR_SOUN - * @note Breathe Sound - */ -#define RF4_BR_SOUN 0x00020000 -/** @def RF4_BR_CHAO - * @note Breathe Chaos - */ -#define RF4_BR_CHAO 0x00040000 -/** @def RF4_BR_DISE - * @note Breathe Disenchant - */ -#define RF4_BR_DISE 0x00080000 -/** @def RF4_BR_NEXU - * @note Breathe Nexus - */ -#define RF4_BR_NEXU 0x00100000 -/** @def RF4_BR_TIME - * @note Breathe Time - */ -#define RF4_BR_TIME 0x00200000 -/** @def RF4_BR_INER - * @note Breathe Inertia - */ -#define RF4_BR_INER 0x00400000 -/** @def RF4_BR_GRAV - * @note Breathe Gravity - */ -#define RF4_BR_GRAV 0x00800000 -/** @def RF4_BR_SHAR - * @note Breathe Shards - */ -#define RF4_BR_SHAR 0x01000000 -/** @def RF4_BR_PLAS - * @note Breathe Plasma - */ -#define RF4_BR_PLAS 0x02000000 -/** @def RF4_BR_WALL - * @note Breathe Force - */ -#define RF4_BR_WALL 0x04000000 -/** @def RF4_BR_MANA - * @note Breathe Mana - */ -#define RF4_BR_MANA 0x08000000 -/** @def RF4_BA_NUKE - * @note TY: Nuke Ball - */ -#define RF4_BA_NUKE 0x10000000 -/** @def RF4_BR_NUKE - * @note TY: Toxic Breath - */ -#define RF4_BR_NUKE 0x20000000 -/** @def RF4_BA_CHAO - * @note Chaos Ball - */ -#define RF4_BA_CHAO 0x40000000 -/** @def RF4_BR_DISI - * @note Breathe Disintegration - */ -#define RF4_BR_DISI 0x80000000 -/** @} */ - -/** @name Race flags #5 - * @note New monster race bit flags - * @{ */ -/** @def RF5_BA_ACID - * @note Acid Ball - */ -#define RF5_BA_ACID 0x00000001 -/** @def RF5_BA_ELEC - * @note Elec Ball - */ -#define RF5_BA_ELEC 0x00000002 -/** @def RF5_BA_FIRE - * @note Fire Ball - */ -#define RF5_BA_FIRE 0x00000004 -/** @def RF5_BA_COLD - * @note Cold Ball - */ -#define RF5_BA_COLD 0x00000008 -/** @def RF5_BA_POIS - * @note Poison Ball - */ -#define RF5_BA_POIS 0x00000010 -/** @def RF5_BA_NETH - * @note Nether Ball - */ -#define RF5_BA_NETH 0x00000020 -/** @def RF5_BA_WATE - * @note Water Ball - */ -#define RF5_BA_WATE 0x00000040 -/** @def RF5_BA_MANA - * @note Mana Storm - */ -#define RF5_BA_MANA 0x00000080 -/** @def RF5_BA_DARK - * @note Darkness Storm - */ -#define RF5_BA_DARK 0x00000100 -/** @def RF5_DRAIN_MANA - * @note Drain Mana - */ -#define RF5_DRAIN_MANA 0x00000200 -/** @def RF5_MIND_BLAST - * @note Blast Mind - */ -#define RF5_MIND_BLAST 0x00000400 -/** @def RF5_BRAIN_SMASH - * @note Smash Brain - */ -#define RF5_BRAIN_SMASH 0x00000800 -/** @def RF5_CAUSE_1 - * @note Cause Light Wound - */ -#define RF5_CAUSE_1 0x00001000 -/** @def RF5_CAUSE_2 - * @note Cause Serious Wound - */ -#define RF5_CAUSE_2 0x00002000 -/** @def RF5_CAUSE_3 - * @note Cause Critical Wound - */ -#define RF5_CAUSE_3 0x00004000 -/** @def RF5_CAUSE_4 - * @note Cause Mortal Wound - */ -#define RF5_CAUSE_4 0x00008000 -/** @def RF5_BO_ACID - * @note Acid Bolt - */ -#define RF5_BO_ACID 0x00010000 -/** @def RF5_BO_ELEC - * @note Elec Bolt (unused) - */ -#define RF5_BO_ELEC 0x00020000 -/** @def RF5_BO_FIRE - * @note Fire Bolt - */ -#define RF5_BO_FIRE 0x00040000 -/** @def RF5_BO_COLD - * @note Cold Bolt - */ -#define RF5_BO_COLD 0x00080000 -/** @def RF5_BO_POIS - * @note Poison Bolt (unused) - */ -#define RF5_BO_POIS 0x00100000 -/** @def RF5_BO_NETH - * @note Nether Bolt - */ -#define RF5_BO_NETH 0x00200000 -/** @def RF5_BO_WATE - * @note Water Bolt - */ -#define RF5_BO_WATE 0x00400000 -/** @def RF5_BO_MANA - * @note Mana Bolt - */ -#define RF5_BO_MANA 0x00800000 -/** @def RF5_BO_PLAS - * @note Plasma Bolt - */ -#define RF5_BO_PLAS 0x01000000 -/** @def RF5_BO_ICEE - * @note Ice Bolt - */ -#define RF5_BO_ICEE 0x02000000 -/** @def RF5_MISSILE - * @note Magic Missile - */ -#define RF5_MISSILE 0x04000000 -/** @def RF5_SCARE - * @note Frighten Player - */ -#define RF5_SCARE 0x08000000 -/** @def RF5_BLIND - * @note Blind Player - */ -#define RF5_BLIND 0x10000000 -/** @def RF5_CONF - * @note Confuse Player - */ -#define RF5_CONF 0x20000000 -/** @def RF5_SLOW - * @note Slow Player - */ -#define RF5_SLOW 0x40000000 -/** @def RF5_HOLD - * @note Paralyze Player - */ -#define RF5_HOLD 0x80000000 -/** @} */ - -/** @name Race flags #6 - * @note New monster race bit flags - * @{ */ -/** @def RF6_HASTE - * @note Speed self - */ -#define RF6_HASTE 0x00000001 -/** @def RF6_HAND_DOOM - * @note Hand of Doom - */ -#define RF6_HAND_DOOM 0x00000002 -/** @def RF6_HEAL - * @note Heal self - */ -#define RF6_HEAL 0x00000004 -/** @def RF6_S_ANIMALS - * @note Summon animals - */ -#define RF6_S_ANIMALS 0x00000008 -/** @def RF6_BLINK - * @note Teleport Short - */ -#define RF6_BLINK 0x00000010 -/** @def RF6_TPORT - * @note Teleport Long - */ -#define RF6_TPORT 0x00000020 -/** @def RF6_TELE_TO - * @note Move player to monster - */ -#define RF6_TELE_TO 0x00000040 -/** @def RF6_TELE_AWAY - * @note Move player far away - */ -#define RF6_TELE_AWAY 0x00000080 -/** @def RF6_TELE_LEVEL - * @note Move player vertically - */ -#define RF6_TELE_LEVEL 0x00000100 -/** @def RF6_DARKNESS - * @note Create Darkness - */ -#define RF6_DARKNESS 0x00000200 -/** @def RF6_TRAPS - * @note Create Traps - */ -#define RF6_TRAPS 0x00000400 -/** @def RF6_FORGET - * @note Cause amnesia - */ -#define RF6_FORGET 0x00000800 -/** @def RF6_RAISE_DEAD - * @note Raise Dead - */ -#define RF6_RAISE_DEAD 0x00001000 -/** @def RF6_S_BUG - * @note Summon Software bug - */ -#define RF6_S_BUG 0x00002000 -/** @def RF6_S_RNG - * @note Summon RNG - */ -#define RF6_S_RNG 0x00004000 -/** @def RF6_S_THUNDERLORD - * @note Summon Thunderlords - */ -#define RF6_S_THUNDERLORD 0x00008000 -/** @def RF6_S_KIN - * @note Summon "kin" - */ -#define RF6_S_KIN 0x00010000 -/** @def RF6_S_HI_DEMON - * @note Summon greater demons! - */ -#define RF6_S_HI_DEMON 0x00020000 -/** @def RF6_S_MONSTER - * @note Summon Monster - */ -#define RF6_S_MONSTER 0x00040000 -/** @def RF6_S_MONSTERS - * @note Summon Monsters - */ -#define RF6_S_MONSTERS 0x00080000 -/** @def RF6_S_ANT - * @note Summon Ants - */ -#define RF6_S_ANT 0x00100000 -/** @def RF6_S_SPIDER - * @note Summon Spiders - */ -#define RF6_S_SPIDER 0x00200000 -/** @def RF6_S_HOUND - * @note Summon Hounds - */ -#define RF6_S_HOUND 0x00400000 -/** @def RF6_S_HYDRA - * @note Summon Hydras - */ -#define RF6_S_HYDRA 0x00800000 -/** @def RF6_S_ANGEL - * @note Summon Angel - */ -#define RF6_S_ANGEL 0x01000000 -/** @def RF6_S_DEMON - * @note Summon Demon - */ -#define RF6_S_DEMON 0x02000000 -/** @def RF6_S_UNDEAD - * @note Summon Undead - */ -#define RF6_S_UNDEAD 0x04000000 -/** @def RF6_S_DRAGON - * @note Summon Dragon - */ -#define RF6_S_DRAGON 0x08000000 -/** @def RF6_S_HI_UNDEAD - * @note Summon Greater Undead - */ -#define RF6_S_HI_UNDEAD 0x10000000 -/** @def RF6_S_HI_DRAGON - * @note Summon Ancient Dragon - */ -#define RF6_S_HI_DRAGON 0x20000000 -/** @def RF6_S_WRAITH - * @note Summon Unique Wraith - */ -#define RF6_S_WRAITH 0x40000000 -/** @def RF6_S_UNIQUE - * @note Summon Unique Monster - */ -#define RF6_S_UNIQUE 0x80000000 -/** @} */ - -/** @name Race flags #7 - * @note New monster race bit flags - * @{ */ -/** @def RF7_AQUATIC - * @note Aquatic monster - */ -#define RF7_AQUATIC 0x00000001 -/** @def RF7_CAN_SWIM - * @note Monster can swim - */ -#define RF7_CAN_SWIM 0x00000002 -/** @def RF7_CAN_FLY - * @note Monster can fly - */ -#define RF7_CAN_FLY 0x00000004 -/** @def RF7_FRIENDLY - * @note Monster is friendly - */ -#define RF7_FRIENDLY 0x00000008 -/** @def RF7_PET - * @note Monster is a pet - */ -#define RF7_PET 0x00000010 -/** @def RF7_MORTAL - * @note Monster is a mortal being - */ -#define RF7_MORTAL 0x00000020 -/** @def RF7_SPIDER - * @note Monster is a spider (can pass webs) - */ -#define RF7_SPIDER 0x00000040 -/** @def RF7_NAZGUL - * @note Monster is a Nazgul - */ -#define RF7_NAZGUL 0x00000080 -/** @def RF7_DG_CURSE - * @note If killed the monster grant a DG Curse to the player - */ -#define RF7_DG_CURSE 0x00000100 -/** @def RF7_POSSESSOR - * @note Is it a dreaded possessor monster ? - */ -#define RF7_POSSESSOR 0x00000200 -/** @def RF7_NO_DEATH - * @note Cannot be killed - */ -#define RF7_NO_DEATH 0x00000400 -/** @def RF7_NO_TARGET - * @note Cannot be targeted - */ -#define RF7_NO_TARGET 0x00000800 -/** @def RF7_AI_ANNOY - * @note Try to tease the player - */ -#define RF7_AI_ANNOY 0x00001000 -/** @def RF7_AI_SPECIAL - * @note For quests - */ -#define RF7_AI_SPECIAL 0x00002000 -/** @def RF7_NO_THEFT - * @note Monster is immune to theft - */ -#define RF7_NO_THEFT 0x00040000 -/** @def RF7_SPIRIT - * @note This is a Spirit, coming from the Void - */ -#define RF7_SPIRIT 0x00080000 -/** @def RF7_IM_MELEE - * @note IM melee - */ -#define RF7_IM_MELEE 0x00100000 -/** @} */ - -/** @name Race flags #8 - * @note New monster race bit flags - * @{ */ -/** @def RF8_DUNGEON */ -#define RF8_DUNGEON 0x00000001 - -/** @def RF8_WILD_TOWN */ -#define RF8_WILD_TOWN 0x00000002 - -/** @def RF8_XXX8X02 */ -#define RF8_XXX8X02 0x00000004 - -/** @def RF8_WILD_SHORE */ -#define RF8_WILD_SHORE 0x00000008 - -/** @def RF8_WILD_OCEAN */ -#define RF8_WILD_OCEAN 0x00000010 - -/** @def RF8_WILD_WASTE */ -#define RF8_WILD_WASTE 0x00000020 - -/** @def RF8_WILD_WOOD */ -#define RF8_WILD_WOOD 0x00000040 - -/** @def RF8_WILD_VOLCANO */ -#define RF8_WILD_VOLCANO 0x00000080 - -/** @def RF8_XXX8X08 */ -#define RF8_XXX8X08 0x00000100 - -/** @def RF8_WILD_MOUNTAIN */ -#define RF8_WILD_MOUNTAIN 0x00000200 - -/** @def RF8_WILD_GRASS */ -#define RF8_WILD_GRASS 0x00000400 - -/********* FREE *********/ -/** @def RF8_CTHANGBAND */ -#define RF8_CTHANGBAND 0x00001000 - -/********* FREE *********/ -/** @def RF8_ZANGBAND */ -#define RF8_ZANGBAND 0x00004000 - -/** @def RF8_JOKEANGBAND */ -#define RF8_JOKEANGBAND 0x00008000 - -/** @def RF8_ANGBAND */ -#define RF8_ANGBAND 0x00010000 - - -/** @def RF8_WILD_TOO */ -#define RF8_WILD_TOO 0x80000000 -/** @} */ - -/** @name Race flags #9 - * @note New monster race bit flags - * @{ */ -/** @def RF9_DROP_CORPSE */ -#define RF9_DROP_CORPSE 0x00000001 - -/** @def RF9_DROP_SKELETON */ -#define RF9_DROP_SKELETON 0x00000002 - -/** @def RF9_HAS_LITE - * @note Carries a lite - */ -#define RF9_HAS_LITE 0x00000004 -/** @def RF9_MIMIC - * @note *REALLY* looks like an object ... only nastier - */ -#define RF9_MIMIC 0x00000008 -/** @def RF9_HAS_EGG - * @note Can be monster's eggs - */ -#define RF9_HAS_EGG 0x00000010 -/** @def RF9_IMPRESED - * @note The monster can follow you on each level until he dies - */ -#define RF9_IMPRESED 0x00000020 -/** @def RF9_SUSCEP_ACID - * @note Susceptible to acid - */ -#define RF9_SUSCEP_ACID 0x00000040 -/** @def RF9_SUSCEP_ELEC - * @note Susceptible to lightning - */ -#define RF9_SUSCEP_ELEC 0x00000080 -/** @def RF9_SUSCEP_POIS - * @note Susceptible to poison - */ -#define RF9_SUSCEP_POIS 0x00000100 -/** @def RF9_KILL_TREES - * @note Monster can eat trees - */ -#define RF9_KILL_TREES 0x00000200 -/** @def RF9_WYRM_PROTECT - * @note The monster is protected by great wyrms of power: They'll be summoned if it's killed - */ -#define RF9_WYRM_PROTECT 0x00000400 -/** @def RF9_DOPPLEGANGER - * @note The monster looks like you - */ -#define RF9_DOPPLEGANGER 0x00000800 -/** @def RF9_ONLY_DEPTH - * @note The monster can only be generated at the GIVEN depth - */ -#define RF9_ONLY_DEPTH 0x00001000 -/** @def RF9_SPECIAL_GENE - * @note The monster can only be generated in special conditions like quests, special dungeons, ... - */ -#define RF9_SPECIAL_GENE 0x00002000 -/** @def RF9_NEVER_GENE - * @note The monster cannot be normaly generated - */ -#define RF9_NEVER_GENE 0x00004000 -/** @} */ - -/** @name Monster flags - * @{ */ -/** @def MFLAG_VIEW - * @note Monster is in line of sight - */ -#define MFLAG_VIEW 0x00000001 -/** @def MFLAG_QUEST - * @note Monster is subject to a quest - */ -#define MFLAG_QUEST 0x00000002 -/** @def MFLAG_PARTIAL - * @note Monster is a partial summon - */ -#define MFLAG_PARTIAL 0x00000004 -/** @def MFLAG_CONTROL - * @note Monster is controlled - */ -#define MFLAG_CONTROL 0x00000008 -/** @def MFLAG_BORN - * @note Monster is still being born - */ -#define MFLAG_BORN 0x00000010 -/** @def MFLAG_NICE - * @note Monster is still being nice - */ -#define MFLAG_NICE 0x00000020 -/** @def MFLAG_SHOW - * @note Monster is recently memorized - */ -#define MFLAG_SHOW 0x00000040 -/** @def MFLAG_MARK - * @note Monster is currently memorized - */ -#define MFLAG_MARK 0x00000080 -/** @def MFLAG_NO_DROP - * @note Monster wont drop obj/corpse - */ -#define MFLAG_NO_DROP 0x00000100 -/** @def MFLAG_QUEST2 - * @note Monster is subject to a quest - */ -#define MFLAG_QUEST2 0x00000200 -/** @} */ - -/** @struct monster_blow - * @brief Monster blows (attacks) - */ -struct monster_blow -{ - /** @structvar method - * @brief Number - */ - byte method; - /** @structvar effect - * @brief Number - */ - byte effect; - /** @structvar d_dice - * @brief Number - */ - byte d_dice; - /** @structvar d_side - * @brief Number - */ - byte d_side; -}; - -/** @struct monster_race - * @brief Monster race - */ -struct monster_race -{ - /** @structvar name - * @brief Number - * @note Name (offset) - */ - u32b name; - /** @structvar text - * @brief Number - * @note Text (offset) - */ - u32b text; - - /** @structvar hdice - * @brief Number - * @note Creatures hit dice count - */ - byte hdice; - /** @structvar hside - * @brief Number - * @note Creatures hit dice sides - */ - byte hside; - - /** @structvar ac - * @brief Number - * @note Armour Class - */ - s16b ac; - - /** @structvar sleep - * @brief Number - * @note Inactive counter (base) - */ - s16b sleep; - /** @structvar aaf - * @brief Number - * @note Area affect radius (1-100) - */ - byte aaf; - /** @structvar speed - * @brief Number - * @note Speed (normally 110) - */ - byte speed; - - /** @structvar mexp - * @brief Number - * @note Exp value for kill - */ - s32b mexp; - - /** @structvar weight - * @brief Number - * @note Weight of the monster - */ - s32b weight; - - /** @structvar freq_inate - * @brief Number - * @note Inate spell frequency - */ - byte freq_inate; - /** @structvar freq_spell - * @brief Number - * @note Other spell frequency - */ - byte freq_spell; - - /** @structvar flags1 - * @brief Number - * @note Flags 1 (general) - */ - u32b flags1; - /** @structvar flags2 - * @brief Number - * @note Flags 2 (abilities) - */ - u32b flags2; - /** @structvar flags3 - * @brief Number - * @note Flags 3 (race/resist) - */ - u32b flags3; - /** @structvar flags4 - * @brief Number - * @note Flags 4 (inate/breath) - */ - u32b flags4; - /** @structvar flags5 - * @brief Number - * @note Flags 5 (normal spells) - */ - u32b flags5; - /** @structvar flags6 - * @brief Number - * @note Flags 6 (special spells) - */ - u32b flags6; - /** @structvar flags7 - * @brief Number - * @note Flags 7 (movement related abilities) - */ - u32b flags7; - /** @structvar flags8 - * @brief Number - * @note Flags 8 (wilderness info) - */ - u32b flags8; - /** @structvar flags9 - * @brief Number - * @note Flags 9 (drops info) - */ - u32b flags9; - - /** @structvar blow[4] - * @brief magic_power - * @note Up to four blows per round - */ - monster_blow blow[4]; - - /** @structvar body_parts[BODY_MAX] - * @brief Number - * @note To help to decide what to use when body changing - */ - byte body_parts[BODY_MAX]; - - /** @structvar level - * @brief Number - * @note Level of creature - */ - byte level; - /** @structvar rarity - * @brief Number - * @note Rarity of creature - */ - byte rarity; - - - /** @structvar d_attr - * @brief Number - * @note Default monster attribute - */ - byte d_attr; - /** @structvar d_char - * @brief String - * @note Default monster character - */ - char d_char; - - - /** @structvar x_attr - * @brief Number - * @note Desired monster attribute - */ - byte x_attr; - /** @structvar x_char - * @brief String - * @note Desired monster character - */ - char x_char; - - - /** @structvar max_num - * @brief Number - * @note Maximum population allowed per level - */ - s16b max_num; - - /** @structvar cur_num - * @brief Number - * @note Monster population on current level - */ - byte cur_num; - - - /** @structvar r_sights - * @brief Number - * @note Count sightings of this monster - */ - s16b r_sights; - /** @structvar r_deaths - * @brief Number - * @note Count deaths from this monster - */ - s16b r_deaths; - - /** @structvar r_pkills - * @brief Number - * @note Count monsters killed in this life - */ - s16b r_pkills; - /** @structvar r_tkills - * @brief Number - * @note Count monsters killed in all lives - */ - s16b r_tkills; - - /** @structvar r_wake - * @brief Number - * @note Number of times woken up (?) - */ - byte r_wake; - /** @structvar r_ignore - * @brief Number - * @note Number of times ignored (?) - */ - byte r_ignore; - - /** @structvar r_xtra1 - * @brief Number - * @note Something (unused) - */ - byte r_xtra1; - /** @structvar r_xtra2 - * @brief Number - * @note Something (unused) - */ - byte r_xtra2; - - /** @structvar r_drop_gold - * @brief Number - * @note Max number of gold dropped at once - */ - byte r_drop_gold; - /** @structvar r_drop_item - * @brief Number - * @note Max number of item dropped at once - */ - byte r_drop_item; - - /** @structvar r_cast_inate - * @brief Number - * @note Max number of inate spells seen - */ - byte r_cast_inate; - /** @structvar r_cast_spell - * @brief Number - * @note Max number of other spells seen - */ - byte r_cast_spell; - - /** @structvar r_blows[4] - * @brief Number - * @note Number of times each blow type was seen - */ - byte r_blows[4]; - - /** @structvar r_flags1 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags1; - /** @structvar r_flags2 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags2; - /** @structvar r_flags3 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags3; - /** @structvar r_flags4 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags4; - /** @structvar r_flags5 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags5; - /** @structvar r_flags6 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags6; - /** @structvar r_flags7 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags7; - /** @structvar r_flags8 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags8; - /** @structvar r_flags9 - * @brief Number - * @note Observed racial flags - */ - u32b r_flags9; - - /** @structvar on_saved - * @brief Boolean - * @note Is the (unique) on a saved level ? - */ - bool on_saved; - - /** @structvar total_visible - * @brief Number - * @note Amount of this race that are visible - */ - byte total_visible; - - /** @structvar drops - * @brief obj_theme - * @note The drops type - */ - obj_theme drops; -}; - -/** @struct monster_type - * @brief Monster type - */ -struct monster_type -{ - /** @structvar r_idx - * @brief Number - * @note Monster race index - */ - s16b r_idx; - - /** @structvar ego - * @brief Number - * @note Ego monster type - */ - u16b ego; - - /** @structvar fy - * @brief Number - * @note Y location on map - */ - byte fy; - /** @structvar fx - * @brief Number - * @note X location on map - */ - byte fx; - - /** @structvar hp - * @brief Number - * @note Current Hit points - */ - s16b hp; - /** @structvar maxhp - * @brief Number - * @note Max Hit points - */ - s16b maxhp; - - /** @structvar blow[4] - * @brief magic_power - * @note Up to four blows per round - */ - monster_blow blow[4]; - - /** @structvar speed - * @brief Number - * @note Speed (normally 110) - */ - byte speed; - /** @structvar level - * @brief Number - * @note Level of creature - */ - byte level; - /** @structvar ac - * @brief Number - * @note Armour Class - */ - s16b ac; - /** @structvar exp - * @brief Number - * @note Experience - */ - u32b exp; - - /** @structvar csleep - * @brief Number - * @note Inactive counter - */ - s16b csleep; - - /** @structvar mspeed - * @brief Number - * @note Monster "speed" - */ - byte mspeed; - /** @structvar energy - * @brief Number - * @note Monster "energy" - */ - byte energy; - - /** @structvar stunned - * @brief Number - * @note Monster is stunned - */ - byte stunned; - /** @structvar confused - * @brief Number - * @note Monster is confused - */ - byte confused; - /** @structvar monfear - * @brief Number - * @note Monster is afraid - */ - byte monfear; - - /** @structvar bleeding - * @brief Number - * @note Monster is bleeding - */ - s16b bleeding; - /** @structvar poisoned - * @brief Number - * @note Monster is poisoned - */ - s16b poisoned; - - /** @structvar cdis - * @brief Number - * @note Current dis from player - */ - byte cdis; - - /** @structvar mflag - * @brief Number - * @note Extra monster flags - */ - s32b mflag; - - /** @structvar ml - * @brief Boolean - * @note Monster is "visible" - */ - bool ml; - - /** @structvar hold_o_idx - * @brief Number - * @note Object being held (if any) - */ - s16b hold_o_idx; - - /** @structvar smart - * @brief Number - * @note Field for "smart_learn" - */ - u32b smart; - - /** @structvar status - * @brief Number - * @note Status(friendly, pet, companion, ..) - */ - s16b status; - - /** @structvar target - * @brief Number - * @note Monster target - */ - s16b target; - - /** @structvar possessor - * @brief Number - * @note Is it under the control of a possessor ? - */ - s16b possessor; -}; - -$static monster_type *lua_get_monster(int m_idx){return (&m_list[m_idx]);} -/** @fn monster(int m_idx); - * @brief Return the monster with index "m_idx" in the monster list.\n - * @param m_idx Number \n the index of the monster in the monster list - * @brief Monster index - * @return monster_type \n The monster. - * @note (see file w_mnster.c) - */ -static monster_type *lua_get_monster @ monster(int m_idx); - -/** @var m_list[max_m_idx] - * @brief monster_type - * @note List of monsters - */ -extern monster_type m_list[max_m_idx]; - -/** @fn race_info_idx(int r_idx, int ego) - * @brief Get monster info and ego info for monster with monster index "r_idx" - * and monster ego "ego".\n - * @param r_idx Number \n the index of the race in the monster race array - * @brief Race index - * @param ego Number \n the index of the ego in the monster ego array - * @brief Ego index - * @return monster_race \n The monster race. - * @note - * If "ego" > 0, the ego information is applied to the monster information and - * the new monster information is returned. - * @note - * For example, race_info_idx(141,7) will create a brown yeek (monster) - * shaman (ego). - * @note (see file monster2.c) - */ -extern monster_race* race_info_idx(int r_idx, int ego); - -/** @fn delete_monster_idx(int i) - * @brief Delete monster "i" from the monster array.\n - * @param i Number \n the index of the monster in the monster list - * @brief Monster index - * @note (see file monster2.c) - */ -extern void delete_monster_idx(int i); - -/** @fn m_pop(void) - * @brief Get an empty slot in the monster list. - * @return Number \n The index of an empty slot the monster list. - * @note - * If there are no empty slots, a slot will be reclaimed from a "dead" - * monster. If all slots are full, 0 is returned, which means the function - * has failed ("Too many monsters!"). - * @note (see file monster2.c) - */ -extern s16b m_pop(void); - -/** @fn get_mon_num_prep(void) - * @brief Apply a "monster restriction function" to the "monster allocation - * table". - * @return Number \n 0 (success) always. - * @note - * There are no parameters, but there are some other variables which will - * need to be set. They are get_mon_num_hook and get_mon_num2_hook. They - * are pointers to functions. - * @note - * For example, get_mon_num_hook = monster_volcano means when - * get_mon_num_hook is called (*get_mon_num_hook)(index), the actual - * function called is monster_volcano(index). This particular function - * returns TRUE if the monster indicated by "index" has the - * RF8_WILD_VOLCANO flag set. - * @note - * It is a good idea to store the old value of get_mon_num_hook before - * setting a new one, and restoring it when your function is finished. - * @note - * Following is a list of functions which can be assigned to - * get_mon_num_hook:\n - * create_molds_hook\n - * create_townpeople_hook\n - * mon_hook_bounty\n - * monster_dungeon\n - * monster_grass\n - * monster_mountain\n - * monster_ocean\n - * monster_quest\n - * monster_shore\n - * monster_town\n - * monster_volcano\n - * monster_waste\n - * monster_wood\n - * mutate_monster_okay\n - * place_monster_okay\n - * summon_specific_okay\n - * vault_aux_animal\n - * vault_aux_chapel\n - * vault_aux_clone\n - * vault_aux_demon\n - * vault_aux_dragon\n - * vault_aux_giant\n - * vault_aux_jelly\n - * vault_aux_kennel\n - * vault_aux_orc\n - * vault_aux_symbol\n - * vault_aux_treasure\n - * vault_aux_troll\n - * vault_aux_undead - * @note - * Or you can write your own. The function must take an integer (index) - * as a parameter and return boolean (TRUE if the monster is selected, - * or FALSE if it is not). - * @note (see file monster2.c) - */ -extern errr get_mon_num_prep(void); - -/** @fn get_mon_num(int level) - * @brief For the given level "level", return the index of an appropriate - * monster race.\n - * @param level Number \n a dungeon level (which is adjusted before - * it is used). - * @brief Dungeon level - * @return Number \n The index of a monster race in the monster race array. - * @note - * This function uses the "prob2" field of the "monster allocation table", - * and various local information, to calculate the "prob3" field of the - * same table, which is then used to choose an "appropriate" monster, in - * a relatively efficient manner. - * @note - * Note that "town" monsters will *only* be created in the town, and - * "normal" monsters will *never* be created in the town, unless the - * "level" is "modified", for example, by polymorph or summoning. - * @note - * There is a small chance (1/50) of "boosting" the given depth by - * a small amount (up to four levels), except in the town. - * @note - * It is (slightly) more likely to acquire a monster of the given level - * than one of a lower level. This is done by choosing several monsters - * appropriate to the given level and keeping the "hardest" one. - * @note - * Note that if no monsters are "appropriate", then this function will - * fail, and return zero, but this should *almost* never happen. - * @note (see file monster2.c) - */ -extern s16b get_mon_num(int level); - -$static char *lua_monster_desc(monster_type *m_ptr, int mode){static char buf[200]; monster_desc(buf, m_ptr, mode); return buf;} -/** @fn monster_desc(monster_type *m_ptr, int mode); - * @brief Return a monster description for monster "monster_type" using flag - * "mode".\n - * @param *m_ptr monster_type \n the monster - * @brief Monster - * @param mode Number \n description mode (see below) - * @brief Description mode - * @return String \n The description of the monster. - * @note - * We can correctly describe monsters based on their visibility.\n - * We can force all monsters to be treated as visible or invisible.\n - * We can build nominatives, objectives, possessives, or reflexives.\n - * We can selectively pronominalize hidden, visible, or all monsters.\n - * We can use definite or indefinite descriptions for hidden monsters.\n - * We can use definite or indefinite descriptions for visible monsters. - * @note - * Pronominalization involves the gender whenever possible and allowed, - * so that by cleverly requesting pronominalization / visibility, you - * can get messages like "You hit someone. She screams in agony!". - * @note - * Reflexives are acquired by requesting Objective plus Possessive. - * @note - * If no m_ptr arg is given (?), the monster is assumed to be hidden, - * unless the "Assume Visible" mode is requested. - * @note - * If no r_ptr arg is given, it is extracted from m_ptr and r_info - * If neither m_ptr nor r_ptr is given, the monster is assumed to - * be neuter, singular, and hidden (unless "Assume Visible" is set), - * in which case you may be in trouble... :-) - * @note - * I am assuming that no monster name is more than 70 characters long, - * so that "char desc[80];" is sufficiently large for any result. - * @note - * Mode Flags:\n - * 0x01 --> Objective (or Reflexive)\n - * 0x02 --> Possessive (or Reflexive)\n - * 0x04 --> Use indefinites for hidden monsters ("something")\n - * 0x08 --> Use indefinites for visible monsters ("a kobold")\n - * 0x10 --> Pronominalize hidden monsters\n - * 0x20 --> Pronominalize visible monsters\n - * 0x40 --> Assume the monster is hidden\n - * 0x80 --> Assume the monster is visible - * @note - * Useful Modes:\n - * 0x00 --> Full nominative name ("the kobold") or "it"\n - * 0x04 --> Full nominative name ("the kobold") or "something"\n - * 0x80 --> Genocide resistance name ("the kobold")\n - * 0x88 --> Killing name ("a kobold")\n - * 0x22 --> Possessive, genderized if visible ("his") or "its"\n - * 0x23 --> Reflexive, genderized if visible ("himself") or "itself" - * @note (see file monster2.c) - */ -static char *lua_monster_desc @ monster_desc(monster_type *m_ptr, int mode); - -$static char *lua_monster_race_desc(int r_idx, int ego){static char buf[200]; monster_race_desc(buf, r_idx, ego); return buf;} -/** @fn monster_race_desc(int r_idx, int ego); - * @brief Return the monster description for monster with monster index - * "r_idx" and monster ego "ego".\n - * @param r_idx Number \n the index of the race in the monster race array - * @brief Race index - * @param ego Number \n the index of the ego in the monster ego array - * @brief Ego index - * @return String \n The description of the monster race. - * @note - * The monster description is made up of the ego name (if any) and monster - * name, or the unique name. - * @note (see file w_mnster.c) - */ -static char *lua_monster_race_desc @ monster_race_desc(int r_idx, int ego); - -/** @fn monster_race_desc(char *desc, int r_idx, int ego) - * @brief Return the monster description "desc" for monster with monster index - * "r_idx" and monster ego "ego".\n - * @param *desc String - * @brief Description - * @param r_idx Number \n the index of the race in the monster race array - * @brief Race index - * @param ego Number \n the index of the ego in the monster ego array - * @brief Ego index - * @return *desc String \n The description of the monster race. - * @note - * The monster description is made up of the ego name (if any) and monster - * name, or the unique name. - * @note (see file monster2.c) - */ -extern void monster_race_desc(char *desc, int r_idx, int ego); - -/** @fn monster_carry(monster_type *m_ptr, int m_idx, object_type *q_ptr) - * @brief Allow monster "m_ptr" with monster index "m_idx" to carry object - * "q_ptr".\n - * @param *m_ptr monster_type \n the monster - * @brief Monster - * @param m_idx Number \n the index of the monster in the monster list - * @brief Monster index - * @param *q_ptr object_type \n the object - * @brief Object - * @note - * The monster can only carry the object if there is room for the object in the - * object list. - * @note (see file monster2.c) - */ -extern void monster_carry(monster_type *m_ptr, int m_idx, object_type *q_ptr); - -/** @fn place_monster_aux(int y, int x, int r_idx, bool slp, bool grp, int status) - * @brief Attempt to place a monster with monster race index "r_idx" and status - * "status" at grid "y", "x". The monster may be asleep ("slp") or surrounded - * by a group of identical monsters ("grp").\n - * @param y Number \n the y coordinate of the target grid - * @brief Y-coordinate - * @param x Number \n the x coordinate of the target grid - * @brief X-coordinate - * @param r_idx Number \n the index of the race in the monster race array - * @brief Race index - * @param slp Boolean \n TRUE if monster is asleep, otherwise FALSE - * @brief Asleep? - * @param grp Boolean \n TRUE if monster appears in a group, otherwise FALSE - * @brief Group? - * @param status Number \n the status of the monster from the player's point - * of view (see MSTATUS_foo flags) - * @brief Monster status - * @return Boolean \n TRUE if the monster is placed successfully, otherwise - * FALSE. - * @note - * Note that certain monsters are now marked as requiring "friends". - * These monsters, if successfully placed, and if the "grp" parameter - * is TRUE, will be surrounded by a "group" of identical monsters. - * @note - * Note that certain monsters are now marked as requiring an "escort", - * which is a collection of monsters with similar "race" but lower - * level. - * @note - * Some monsters induce a fake "group" flag on their escorts. - * @note - * Note the "bizarre" use of non-recursion to prevent annoying output - * when running a code profiler. - * @note - * Note the use of the new "monster allocation table" code to restrict - * the "get_mon_num()" function to "legal" escort types. - * @note (see file monster2.c) - */ -extern bool place_monster_aux(int y, int x, int r_idx, bool slp, bool grp, int status); - -/** @fn place_monster(int y, int x, bool slp, bool grp) - * @brief Attempt to place a monster at grid "y", "x". The monster may be - * asleep ("slp") or surrounded by a group of identical monsters ("grp").\n - * @param y Number \n the y coordinate of the target grid - * @brief Y-coordinate - * @param x Number \n the x coordinate of the target grid - * @brief X-coordinate - * @param slp Boolean \n TRUE if monster is asleep, otherwise FALSE - * @brief Asleep? - * @param grp Boolean \n TRUE if monster appears in a group, otherwise FALSE - * @brief Group? - * @return Boolean \n TRUE if the monster is placed successfully, otherwise - * FALSE. - * @note - * Attempt to find a monster appropriate to the "monster_level" - * @note (see file monster2.c) - */ -extern bool place_monster(int y, int x, bool slp, bool grp); - -/** @fn place_monster_one(int y, int x, int r_idx, int ego, bool slp, int status) - * @brief Attempt to place a monster with monster race index "r_idx", monster - * ego "ego" and status "status" at grid "y", "x". The monster may be asleep - * ("slp").\n - * @param y Number \n the y coordinate of the target grid - * @brief Y-coordinate - * @param x Number \n the x coordinate of the target grid - * @brief X-coordinate - * @param r_idx Number \n the index of the race in the monster race array - * @brief Race index - * @param ego Number \n the index of the ego in the monster ego array - * @brief Ego index - * @param slp Boolean \n TRUE if monster is asleep, otherwise FALSE - * @brief Asleep? - * @param status Number \n the status of the monster from the player's point - * of view (see MSTATUS_foo flags) - * @brief Monster status - * @return Number \n The index of the placed monster in the monster list. - * @note - * To give the player a sporting chance, any monster that appears in - * line-of-sight and is extremely dangerous can be marked as - * "FORCE_SLEEP", which will cause them to be placed with low energy, - * which often (but not always) lets the player move before they do. - * @note - * This routine refuses to place out-of-depth "FORCE_DEPTH" monsters. - * @note - * XXX XXX XXX Use special "here" and "dead" flags for unique monsters, - * remove old "cur_num" and "max_num" fields. - * @note - * XXX XXX XXX Actually, do something similar for artifacts, to simplify - * the "preserve" mode, and to make the "what artifacts" flag more useful. - * @note - * This is the only function which may place a monster in the dungeon, - * except for the savefile loading code. - * @note (see file monster2.c) - */ -extern s16b place_monster_one(int y, int x, int r_idx, int ego, bool slp, int status); - -/** @fn is_friend(monster_type *m_ptr) - * @brief Return a value to indicate the status of monster "m_ptr".\n - * @param *m_ptr monster_type \n the monster - * @brief Monster - * @return Number \n -1 if monster is an enemy, 0 if it is neutral, and 1 if - * it is friendly. - * @note (see file monster3.c) - */ -extern int is_friend(monster_type *m_ptr); - -/** @fn is_enemy(monster_type *m_ptr, monster_type *t_ptr) - * @brief Determine if monster "m_ptr" should attack monster "t_ptr".\n - * @param *m_ptr monster_type \n the monster - * @brief Monster - * @param *t_ptr monster_type \n the target monster - * @brief Target monster - * @return Boolean \n TRUE if monster "m_ptr" should attack monster "t_ptr", - * otherwise FALSE. - * @note - * If "m_ptr" is stupid and "r_ptr" is a different type of monster then the - * function will return TRUE.\n - * If "m_ptr" is not neutral and "r_ptr" is a breeder, and "r_ptr" is a - * different type of monster then the function will return TRUE (and vice - * versa).\n - * If both monsters are not neutral and one is friendly and the other isn't - * then the function will return TRUE. - * @note (see file monster3.c) - */ -extern bool is_enemy(monster_type *m_ptr, monster_type *t_ptr); - -/** @fn change_side(monster_type *m_ptr) - * @brief Change the status of monster "m_ptr" from friendly to unfriendly and - * vice versa. - * @param *m_ptr monster_type \n the monster - * @brief Monster - * @return Boolean \n TRUE if the status changed, otherwise FALSE. - * @note - * Friends and pets become enemies.\n - * Neutral monsters become neutral pets and vice versa.\n - * Companions are unaffected. - * @note (see file monster3.c) - */ -extern bool change_side(monster_type *m_ptr); - -/** @fn find_position(int y, int x, int *yy = 0, int *xx = 0) - * @brief Find a new grid "yy", "xx" within 6 grids of target grid "y", "x".\n - * @param y Number \n the y coordinate of the origin grid - * @brief Origin y-coordinate - * @param x Number \n the x coordinate of the origin grid - * @brief Origin x-coordinate - * @param yy Number \n the y coordinate of the target grid - * @brief Target y-coordinate - * @param xx Number \n the x coordinate of the target grid - * @brief Target x-coordinate - * @note - * The new grid must be within line-of-sight of the target grid. A - * maximum of 5000 attempts is made. - * @note (see file lua_bind.c) - */ -extern void find_position(int y, int x, int *yy = 0, int *xx = 0); - -/** @var summon_specific_level - * @brief Number - * @note - * Force summoned monsters to be at this level. - */ -extern int summon_specific_level; - -/** @var summon_kin_type - * @brief String - * @note - * The monster character for those monsters who can summon kin. - */ -extern char summon_kin_type; - -/** @fn summon_specific(int y1, int x1, int lev, int type) - * @brief Place a monster of type "type" near grid "y","x".\n - * @param y1 Number \n the y coordinate of the target grid - * @brief Y-coordinate - * @param x1 Number \n the x coordinate of the target grid - * @brief X-coordinate - * @param lev Number \n the monster level of the summoning monster - * @brief Summoner level - * @param type Number \n the type of summoned monster - * @brief Monster type - * @return Boolean \n TRUE if a monster was summoned, otherwise FALSE. - * @note - * We will attempt to place the monster up to 20 times before giving up. - * @note - * Note: SUMMON_UNIQUE and SUMMON_WRAITH (XXX) will summon Unique's\n - * Note: SUMMON_HI_UNDEAD and SUMMON_HI_DRAGON may summon Unique's\n - * Note: None of the other summon codes will ever summon Unique's. - * @note - * This function has been changed. We now take the "monster level" - * of the summoning monster as a parameter, and use that, along with - * the current dungeon level, to help determine the level of the - * desired monster. Note that this is an upper bound, and also - * tends to "prefer" monsters of that level. Currently, we use - * the average of the dungeon and monster levels, and then add - * five to allow slight increases in monster power. - * @note - * Note that we use the new "monster allocation table" creation code - * to restrict the "get_mon_num()" function to the set of "legal" - * monsters, making this function much faster and more reliable. - * @note - * Note that this function may not succeed, though this is very rare. - * @note (see file monster2.c) - */ -extern bool summon_specific(int y1, int x1, int lev, int type); - -/** @fn summon_specific_friendly(int y1, int x1, int lev, int type, bool Group_ok) - * @brief Place a friendly monster of type "type" near grid "y","x". The - * monster may be surrounded by a group of identical monsters ("Group_ok").\n - * @param y1 Number \n the y coordinate of the target grid - * @brief Y-coordinate - * @param x1 Number \n the x coordinate of the target grid - * @brief X-coordinate - * @param lev Number \n the monster level of the summoning monster - * @brief Summoner level - * @param type Number \n the type of summoned monster - * @brief Monster type - * @param Group_ok Boolean \n TRUE if monster appears in a group, otherwise - * FALSE - * @brief Group? - * @return Boolean \n TRUE if a monster was summoned, otherwise FALSE. - * @note (see file monster2.c) - */ -extern bool summon_specific_friendly(int y1, int x1, int lev, int type, bool Group_ok); - -/** @fn can_create_companion() - * @brief Determine if a companion can be created. - * @return Boolean \n TRUE if a companion can be created, otherwise FALSE. - * @note - * The companions are counted. If this is less than the number allowed by - * the player monster lore skill, the function returns TRUE, otherwise the - * function returns FALSE. - * @note (see file monster3.c) - */ -extern bool can_create_companion(); - -/** @fn monster_set_level(int m_idx, int level) - * @brief Set a new level for monster with monster index "m_idx".\n - * @param m_idx Number \n the index of the monster in the monster list - * @brief Monster index - * @param level Number \n the new level of the monster - * @brief Monster level - * @note - * The new level can not exceed 150. If the new level is higher than the - * monster level, the monster experience value is recalculated. - * @note (see file monster2.c) - */ -extern void monster_set_level(int m_idx, int level); - -/** @name Summon types - * @note Legal restrictions for "summon_specific()" - */ -/** @def SUMMON_ANT - * @note Summon giant ant (a) excluding uniques. - */ -#define SUMMON_ANT 11 - -/** @def SUMMON_SPIDER - * @note Summon spider/scorpion/tick (S) excluding uniques. - */ -#define SUMMON_SPIDER 12 - -/** @def SUMMON_HOUND - * @note Summon canine (C) or zephyr hound (Z) excluding uniques. - */ -#define SUMMON_HOUND 13 - -/** @def SUMMON_HYDRA - * @note Summon multi-headed hydra (M) excluding uniques. - */ -#define SUMMON_HYDRA 14 - -/** @def SUMMON_ANGEL - * @note Summon angelic being (A) excluding uniques. - */ -#define SUMMON_ANGEL 15 - -/** @def SUMMON_DEMON - * @note Summon demon (RF3_DEMON) excluding uniques. - */ -#define SUMMON_DEMON 16 - -/** @def SUMMON_UNDEAD - * @note Summon undead (RF3_UNDEAD) excluding uniques. - */ -#define SUMMON_UNDEAD 17 - -/** @def SUMMON_DRAGON - * @note Summon dragon (RF3_DRAGON) excluding uniques. - */ -#define SUMMON_DRAGON 18 - -/** @def SUMMON_HI_UNDEAD - * @note Summon lich (L) or vampire (V) or wight/wraith (W) including uniques. - */ -#define SUMMON_HI_UNDEAD 21 - -/** @def SUMMON_HI_DRAGON - * @note Summon ancient dragon (D) including uniques. - */ -#define SUMMON_HI_DRAGON 22 - -/** @def SUMMON_WRAITH - * @note Summon wight/wraith (W) including uniques. - */ -#define SUMMON_WRAITH 31 - -/** @def SUMMON_UNIQUE - * @note Summon unique (RF1_UNIQUE). - */ -#define SUMMON_UNIQUE 32 - -/** @def SUMMON_BIZARRE1 - * @note Summon mold (m) excluding uniques. - */ -#define SUMMON_BIZARRE1 33 - -/** @def SUMMON_BIZARRE2 - * @note Summon giant bat (b) excluding uniques. - */ -#define SUMMON_BIZARRE2 34 - -/** @def SUMMON_BIZARRE3 - * @note Summon quylthulg (Q) excluding uniques. - */ -#define SUMMON_BIZARRE3 35 - -/** @def SUMMON_BIZARRE4 - * @note Summon vortex (v) excluding uniques. - */ -#define SUMMON_BIZARRE4 36 - -/** @def SUMMON_BIZARRE5 - * @note Summon creeping coins ($) excluding uniques. - */ -#define SUMMON_BIZARRE5 37 - -/** @def SUMMON_BIZARRE6 - * @note Summon mimic (!?=$|) excluding uniques. - */ -#define SUMMON_BIZARRE6 38 - -/** @def SUMMON_HI_DEMON - * @note Summon demon (RF3_DEMON) and major demon (U) excluding uniques. - */ -#define SUMMON_HI_DEMON 39 - -/** @def SUMMON_KIN - * @note Summon monster of the same character type excluding uniques. - */ -#define SUMMON_KIN 40 - -/** @def SUMMON_DAWN - * @note Summon monster with "the Dawn" in the name excluding uniques. - */ -#define SUMMON_DAWN 41 - -/** @def SUMMON_ANIMAL - * @note Summon animal (RF3_ANIMAL) excluding uniques. - */ -#define SUMMON_ANIMAL 42 - -/** @def SUMMON_ANIMAL_RANGER - * @note Summon animal (RF3_ANIMAL) and giant ant, giant bat, centipede, - * feline,giant louse, quadruped, rodent, worm or worm mass, bird, canine, - * insect, snake, killer beetle, multi-headed hydra, reptile/amphibian, - * spider/scorpion/tick (abcflqrwBCIJKMRS) and not dragon (RF3_DRAGON) and not - * evil (RF3_EVIL) and not undead (RF3_UNDEAD) and not demon (RF3_DEMON) and - * not inate/breath and not normal spells and not special spells excluding - * uniques. - */ -#define SUMMON_ANIMAL_RANGER 43 - -/** @def SUMMON_HI_UNDEAD_NO_UNIQUES - * @note Summon lich (L) or vampire (V) or wight/wraith (W) excluding uniques. - */ -#define SUMMON_HI_UNDEAD_NO_UNIQUES 44 - -/** @def SUMMON_HI_DRAGON_NO_UNIQUES - * @note Summon ancient dragon (D) excluding uniques. - */ -#define SUMMON_HI_DRAGON_NO_UNIQUES 45 - -/** @def SUMMON_NO_UNIQUES - * @note Summon non-uniques (not RF1_UNIQUE). - */ -#define SUMMON_NO_UNIQUES 46 - -/** @def SUMMON_PHANTOM - * @note Summon monster with "Phantom" in the name excluding uniques. - */ -#define SUMMON_PHANTOM 47 - -/** @def SUMMON_ELEMENTAL - * @note Summon monster with "lemental" in the name excluding uniques. - */ -#define SUMMON_ELEMENTAL 48 - -/** @def SUMMON_THUNDERLORD - * @note Summon thunderlords (RF3_THUNDERLORD) including uniques. - */ -#define SUMMON_THUNDERLORD 49 - -/** @def SUMMON_BLUE_HORROR - * @note Summon monster with "lue horror" in the name excluding uniques. - */ -#define SUMMON_BLUE_HORROR 50 - -/** @def SUMMON_BUG - * @note Summon monster with "Software bug" in the name excluding uniques. - */ -#define SUMMON_BUG 51 - -/** @def SUMMON_RNG - * @note Summon monster with "Random Number Generator" in the name excluding - * uniques. - */ -#define SUMMON_RNG 52 - -/** @def SUMMON_MINE - * @note Summon mines (RF1_NEVER_MOVE) including uniques. - */ -#define SUMMON_MINE 53 - -/** @def SUMMON_HUMAN - * @note Summon (p) excluding uniques. - */ -#define SUMMON_HUMAN 54 - -/** @def SUMMON_SHADOWS - * @note Summon ghost (G) excluding uniques. - */ -#define SUMMON_SHADOWS 55 - -/** @def SUMMON_GHOST - * @note Summon ghost (G) including uniques. - */ -#define SUMMON_GHOST 56 - -/** @def SUMMON_QUYLTHULG - * @note Summon (Q) excluding uniques. - */ -#define SUMMON_QUYLTHULG 57 - -/** @} */ - -/** @fn do_control_reconnect() - * @brief Find the controlled monster and reconnect to it. - * @return Boolean \n TRUE if there is a controlled monster, otherwise FALSE. - * @note - * The monster list is scanned for a monster with MFLAG_CONTROL. If it is - * found, the function returns TRUE. - * @note (see file monster3.c) - */ -extern bool do_control_reconnect(); - -/* monster thing */ -/** @var m_max - * @brief Number - * @note The number of monsters currently in the monster list. - */ -extern s16b m_max; |