summaryrefslogtreecommitdiff
path: root/src/player.pkg
diff options
context:
space:
mode:
Diffstat (limited to 'src/player.pkg')
-rw-r--r--src/player.pkg3525
1 files changed, 3525 insertions, 0 deletions
diff --git a/src/player.pkg b/src/player.pkg
new file mode 100644
index 00000000..f6717476
--- /dev/null
+++ b/src/player.pkg
@@ -0,0 +1,3525 @@
+/* File: player.pkg */
+
+/*
+ * Purpose: Lua interface defitions for the player.
+ * 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;
+
+/** @def PY_MAX_LEVEL
+ * @note Maximum level
+ */
+#define PY_MAX_LEVEL 50
+
+/** @var player_exp[PY_MAX_LEVEL]
+ * @brief Number
+ * @note Array of experience points per level.
+ */
+extern s32b player_exp[PY_MAX_LEVEL];
+
+/** @name Attributes
+ * @brief Indexes of the various "stats" (hard-coded by savefiles, etc).
+ * @{ */
+/** @def A_STR
+ * @note Strength */
+#define A_STR 0
+
+/** @def A_INT
+ * @note Intelligence */
+#define A_INT 1
+
+/** @def A_WIS
+ * @note Wisdom */
+#define A_WIS 2
+
+/** @def A_DEX
+ * @note Dexterity */
+#define A_DEX 3
+
+/** @def A_CON
+ * @note Constitution */
+#define A_CON 4
+
+/** @def A_CHR
+ * @note Charisma */
+#define A_CHR 5
+/** @} */
+
+/* Ugly hack, should be in foo-info, the subrace saved to the savefile */
+/** @def SUBRACE_SAVE */
+#define SUBRACE_SAVE 9
+
+
+/** @name Sex
+ * @brief Player sex constants (hard-coded by save-files, arrays, etc)
+ * @{ */
+/** @def SEX_FEMALE */
+#define SEX_FEMALE 0
+
+/** @def SEX_MALE */
+#define SEX_MALE 1
+
+/** @def SEX_NEUTER */
+#define SEX_NEUTER 2
+
+
+/** @def MAX_SEXES */
+#define MAX_SEXES 3
+/** @} */
+
+/** @name Race flags
+ * @{ */
+/** @def PR1_EXPERIMENTAL
+ * @note Is still under developemnt
+ */
+#define PR1_EXPERIMENTAL 0x00000001L
+/* XXX */
+/** @def PR1_RESIST_BLACK_BREATH
+ * @note Resist black breath
+ */
+#define PR1_RESIST_BLACK_BREATH 0x00000004L
+/** @def PR1_NO_STUN
+ * @note Never stunned
+ */
+#define PR1_NO_STUN 0x00000008L
+/** @def PR1_XTRA_MIGHT_BOW
+ * @note Xtra might with bows
+ */
+#define PR1_XTRA_MIGHT_BOW 0x00000010L
+/** @def PR1_XTRA_MIGHT_XBOW
+ * @note Xtra might with xbows
+ */
+#define PR1_XTRA_MIGHT_XBOW 0x00000020L
+/** @def PR1_XTRA_MIGHT_SLING
+ * @note Xtra might with slings
+ */
+#define PR1_XTRA_MIGHT_SLING 0x00000040L
+/** @def PR1_AC_LEVEL
+ * @note More AC with levels
+ */
+#define PR1_AC_LEVEL 0x00000080L
+/** @def PR1_HURT_LITE
+ * @note Hurt by light
+ */
+#define PR1_HURT_LITE 0x00000100L
+/** @def PR1_VAMPIRE
+ * @note Vampire
+ */
+#define PR1_VAMPIRE 0x00000200L
+/** @def PR1_UNDEAD
+ * @note Undead
+ */
+#define PR1_UNDEAD 0x00000400L
+/** @def PR1_NO_CUT
+ * @note no cuts
+ */
+#define PR1_NO_CUT 0x00000800L
+/** @def PR1_CORRUPT
+ * @note hack-- corrupted
+ */
+#define PR1_CORRUPT 0x00001000L
+/** @def PR1_NO_FOOD
+ * @note little gain from food
+ */
+#define PR1_NO_FOOD 0x00002000L
+/** @def PR1_NO_GOD
+ * @note cannot worship
+ */
+#define PR1_NO_GOD 0x00004000L
+/* XXX */
+/** @def PR1_ELF
+ * @note Is an elf
+ */
+#define PR1_ELF 0x00010000L
+/** @def PR1_SEMI_WRAITH
+ * @note Takes damage when going in walls
+ */
+#define PR1_SEMI_WRAITH 0x00020000L
+/** @def PR1_NO_SUBRACE_CHANGE
+ * @note Impossible to change subrace
+ */
+#define PR1_NO_SUBRACE_CHANGE 0x00040000L
+/* XXX */
+/** @def PR1_ANTIMAGIC
+ * @note antimagic ... hack
+ */
+#define PR1_ANTIMAGIC 0x00100000L
+/** @def PR1_MOLD_FRIEND
+ * @note Not attacked by molds wielded
+ */
+#define PR1_MOLD_FRIEND 0x00200000L
+/** @def PR1_GOD_FRIEND
+ * @note Better grace
+ */
+#define PR1_GOD_FRIEND 0x00400000L
+/* XXX */
+/** @def PR1_INNATE_SPELLS
+ * @note KNown all spells, only need books
+ */
+#define PR1_INNATE_SPELLS 0x01000000L
+/* XXX */
+/* XXX */
+/** @def PR1_EASE_STEAL
+ * @note Gain xp by stealing
+ */
+#define PR1_EASE_STEAL 0x08000000L
+/* XXX */
+/* XXX */
+/* XXX */
+/* XXX */
+
+/* XXX */
+/** @def PR2_ASTRAL
+ * @note Is it an astral being coming from th halls of mandos ?
+ */
+#define PR2_ASTRAL 0x00000002L
+/* XXX */
+/** @} */
+
+/** @name Notice flags
+ * @brief Bit flags for the "p_ptr->notice" variable
+ * @{ */
+/** @def PN_COMBINE
+ * @note Combine the pack
+ */
+#define PN_COMBINE 0x00000001L
+/** @def PN_REORDER
+ * @note Reorder the pack
+ */
+#define PN_REORDER 0x00000002L
+/* xxx (many) */
+/** @} */
+
+
+/** @name Update flags
+ * @brief Bit flags for the "p_ptr->update" variable
+ * @{ */
+/** @def PU_BONUS
+ * @note Calculate bonuses
+ */
+#define PU_BONUS 0x00000001L
+/** @def PU_TORCH
+ * @note Calculate torch radius
+ */
+#define PU_TORCH 0x00000002L
+/** @def PU_BODY
+ * @note Calculate body parts
+ */
+#define PU_BODY 0x00000004L
+/** @def PU_SANITY
+ * @note Calculate csan and msan
+ */
+#define PU_SANITY 0x00000008L
+/** @def PU_HP
+ * @note Calculate chp and mhp
+ */
+#define PU_HP 0x00000010L
+/** @def PU_MANA
+ * @note Calculate csp and msp
+ */
+#define PU_MANA 0x00000020L
+/** @def PU_SPELLS
+ * @note Calculate spells
+ */
+#define PU_SPELLS 0x00000040L
+/** @def PU_POWERS
+ * @note Calculate powers
+ */
+#define PU_POWERS 0x00000080L
+/* xxx (many) */
+/** @def PU_UN_VIEW
+ * @note Forget view
+ */
+#define PU_UN_VIEW 0x00010000L
+/* xxx (many) */
+/** @def PU_VIEW
+ * @note Update view
+ */
+#define PU_VIEW 0x00100000L
+/** @def PU_MON_LITE
+ * @note Update monster light
+ */
+#define PU_MON_LITE 0x00200000L
+/* xxx */
+/** @def PU_MONSTERS
+ * @note Update monsters
+ */
+#define PU_MONSTERS 0x01000000L
+/** @def PU_DISTANCE
+ * @note Update distances
+ */
+#define PU_DISTANCE 0x02000000L
+/* xxx */
+/** @def PU_FLOW
+ * @note Update flow
+ */
+#define PU_FLOW 0x10000000L
+/* xxx (many) */
+/** @} */
+
+
+/** @name Redraw flags
+ * @brief Bit flags for the "p_ptr->redraw" variable
+ * @{ */
+/** @def PR_MISC
+ * @note Display Race/Class
+ */
+#define PR_MISC 0x00000001L
+/** @def PR_TITLE
+ * @note Display Title
+ */
+#define PR_TITLE 0x00000002L
+/** @def PR_LEV
+ * @note Display Level
+ */
+#define PR_LEV 0x00000004L
+/** @def PR_EXP
+ * @note Display Experience
+ */
+#define PR_EXP 0x00000008L
+/** @def PR_STATS
+ * @note Display Stats
+ */
+#define PR_STATS 0x00000010L
+/** @def PR_ARMOR
+ * @note Display Armor
+ */
+#define PR_ARMOR 0x00000020L
+/** @def PR_HP
+ * @note Display Hitpoints
+ */
+#define PR_HP 0x00000040L
+/** @def PR_MANA
+ * @note Display Mana
+ */
+#define PR_MANA 0x00000080L
+/** @def PR_GOLD
+ * @note Display Gold
+ */
+#define PR_GOLD 0x00000100L
+/** @def PR_DEPTH
+ * @note Display Depth
+ */
+#define PR_DEPTH 0x00000200L
+/****/
+/** @def PR_HEALTH
+ * @note Display Health Bar
+ */
+#define PR_HEALTH 0x00000800L
+/** @def PR_CUT
+ * @note Display Extra (Cut)
+ */
+#define PR_CUT 0x00001000L
+/** @def PR_STUN
+ * @note Display Extra (Stun)
+ */
+#define PR_STUN 0x00002000L
+/** @def PR_HUNGER
+ * @note Display Extra (Hunger)
+ */
+#define PR_HUNGER 0x00004000L
+/** @def PR_PIETY
+ * @note Display Piety
+ */
+#define PR_PIETY 0x00008000L
+/** @def PR_BLIND
+ * @note Display Extra (Blind)
+ */
+#define PR_BLIND 0x00010000L
+/** @def PR_CONFUSED
+ * @note Display Extra (Confused)
+ */
+#define PR_CONFUSED 0x00020000L
+/** @def PR_AFRAID
+ * @note Display Extra (Afraid)
+ */
+#define PR_AFRAID 0x00040000L
+/** @def PR_POISONED
+ * @note Display Extra (Poisoned)
+ */
+#define PR_POISONED 0x00080000L
+/** @def PR_STATE
+ * @note Display Extra (State)
+ */
+#define PR_STATE 0x00100000L
+/** @def PR_SPEED
+ * @note Display Extra (Speed)
+ */
+#define PR_SPEED 0x00200000L
+/** @def PR_STUDY
+ * @note Display Extra (Study)
+ */
+#define PR_STUDY 0x00400000L
+/** @def PR_SANITY
+ * @note Display Sanity
+ */
+#define PR_SANITY 0x00800000L
+/** @def PR_EXTRA
+ * @note Display Extra Info
+ */
+#define PR_EXTRA 0x01000000L
+/** @def PR_BASIC
+ * @note Display Basic Info
+ */
+#define PR_BASIC 0x02000000L
+/** @def PR_MAP
+ * @note Display Map
+ */
+#define PR_MAP 0x04000000L
+/** @def PR_WIPE
+ * @note Hack -- Total Redraw
+ */
+#define PR_WIPE 0x08000000L
+/** @def PR_MH
+ * @note Display Monster hitpoints
+ */
+#define PR_MH 0x10000000L
+/** @def PR_MH
+ * @note Display Monster hitpoints
+ */
+#define PR_MH 0x10000000L
+/** @def PR_DTRAP
+ * @note Display Extra (DTrap)
+ */
+#define PR_DTRAP 0x20000000L
+/* xxx */
+/* xxx */
+/** @} */
+
+
+/** @name Window flags
+ * @brief Bit flags for the "p_ptr->window" variable (etc)
+ * @{ */
+/** @def PW_INVEN
+ * @note Display inven/equip
+ */
+#define PW_INVEN 0x00000001L
+/** @def PW_EQUIP
+ * @note Display equip/inven
+ */
+#define PW_EQUIP 0x00000002L
+/* xxx */
+/** @def PW_PLAYER
+ * @note Display character
+ */
+#define PW_PLAYER 0x00000008L
+/** @def PW_M_LIST
+ * @note Show monster list
+ */
+#define PW_M_LIST 0x00000010L
+/* xxx */
+/** @def PW_MESSAGE
+ * @note Display messages
+ */
+#define PW_MESSAGE 0x00000040L
+/** @def PW_OVERHEAD
+ * @note Display overhead view
+ */
+#define PW_OVERHEAD 0x00000080L
+/** @def PW_MONSTER
+ * @note Display monster recall
+ */
+#define PW_MONSTER 0x00000100L
+/** @def PW_OBJECT
+ * @note Display object recall
+ */
+#define PW_OBJECT 0x00000200L
+/* xxx */
+/** @def PW_SNAPSHOT
+ * @note Display snap-shot
+ */
+#define PW_SNAPSHOT 0x00000800L
+/* xxx */
+/* xxx */
+/** @def PW_BORG_1
+ * @note Display borg messages
+ */
+#define PW_BORG_1 0x00004000L
+/** @def PW_BORG_2
+ * @note Display borg status
+ */
+#define PW_BORG_2 0x00008000L
+/** @} */
+
+/** @struct deity_type
+ */
+struct deity_type
+{
+ /** @structvar name
+ * @brief String
+ */
+ cptr name;
+};
+/** @var deity_info[max_gods]
+ * @brief deity_type
+ * @note Array of gods.
+ */
+extern deity_type deity_info[max_gods];
+
+/** @name Body parts
+ * @{ */
+/** @def BODY_WEAPON */
+#define BODY_WEAPON 0
+
+/** @def BODY_TORSO */
+#define BODY_TORSO 1
+
+/** @def BODY_ARMS */
+#define BODY_ARMS 2
+
+/** @def BODY_FINGER */
+#define BODY_FINGER 3
+
+/** @def BODY_HEAD */
+#define BODY_HEAD 4
+
+/** @def BODY_LEGS */
+#define BODY_LEGS 5
+
+/** @def BODY_MAX */
+#define BODY_MAX 6
+/** @} */
+
+
+/** @struct player_type
+ */
+struct player_type
+{
+ /** @structvar lives
+ * @brief Number
+ * @note How many times we resurected
+ */
+ s32b lives;
+
+ /** @structvar oldpy
+ * @brief Number
+ * @note Previous player location -KMW-
+ */
+ s16b oldpy;
+ /** @structvar oldpx
+ * @brief Number
+ * @note Previous player location -KMW-
+ */
+ s16b oldpx;
+
+ /** @structvar py
+ * @brief Number
+ * @note Player location
+ */
+ s16b py;
+ /** @structvar px
+ * @brief Number
+ * @note Player location
+ */
+ s16b px;
+
+ /** @structvar psex
+ * @brief Number
+ * @note Sex index
+ */
+ byte psex;
+ /** @structvar prace
+ * @brief Number
+ * @note Race index
+ */
+ byte prace;
+ /** @structvar pracem
+ * @brief Number
+ * @note Race Mod index
+ */
+ byte pracem;
+ /** @structvar pclass
+ * @brief Number
+ * @note Class index
+ */
+ byte pclass;
+ /** @structvar mimic_form
+ * @brief Number
+ * @note Actualy transformation
+ */
+ byte mimic_form;
+ /** @structvar mimic_level
+ * @brief Number
+ * @note Level of the mimic effect
+ */
+ s16b mimic_level;
+ /** @structvar oops
+ * @brief Number
+ * @note Unused
+ */
+ byte oops;
+
+ object_type inventory[INVEN_TOTAL] @inventory_real;
+
+ /** @structvar hitdie
+ * @brief Number
+ * @note Hit dice (sides)
+ */
+ byte hitdie;
+ /** @structvar expfact
+ * @brief Number
+ * @note Experience factor
+ */
+ u16b expfact;
+
+ /** @structvar allow_one_death
+ * @brief Number
+ * @note Blood of life
+ */
+ byte allow_one_death;
+
+ /** @structvar age
+ * @brief Number
+ * @note Characters age
+ */
+ s16b age;
+ /** @structvar ht
+ * @brief Number
+ * @note Height
+ */
+ s16b ht;
+ /** @structvar wt
+ * @brief Number
+ * @note Weight
+ */
+ s16b wt;
+ /** @structvar sc
+ * @brief Number
+ * @note Social Class
+ */
+ s16b sc;
+
+
+ /** @structvar au
+ * @brief Number
+ * @note Current Gold
+ */
+ s32b au;
+
+ /** @structvar max_exp
+ * @brief Number
+ * @note Max experience
+ */
+ s32b max_exp;
+ /** @structvar exp
+ * @brief Number
+ * @note Cur experience
+ */
+ s32b exp;
+ /** @structvar exp_frac
+ * @brief Number
+ * @note Cur exp frac (times 2^16)
+ */
+ u16b exp_frac;
+
+ /** @structvar lev
+ * @brief Number
+ * @note Level
+ */
+ s16b lev;
+
+ /** @structvar town_num
+ * @brief Number
+ * @note Current town number
+ */
+ s16b town_num;
+ /** @structvar inside_quest
+ * @brief Number
+ * @note Inside quest level
+ */
+ s16b inside_quest;
+ /** @structvar exit_bldg
+ * @brief Boolean
+ * @note Goal obtained in arena? -KMW-
+ */
+ bool exit_bldg;
+
+ /** @structvar wilderness_x
+ * @brief Number
+ * @note Coordinates in the wilderness
+ */
+ s32b wilderness_x;
+ /** @structvar wilderness_y
+ * @brief Number
+ */
+ s32b wilderness_y;
+ /** @structvar wild_mode
+ * @brief Boolean
+ * @note TRUE = Small map, FLASE = Big map
+ */
+ bool wild_mode;
+ /** @structvar old_wild_mode
+ * @brief Boolean
+ * @note TRUE = Small map, FLASE = Big map
+ */
+ bool old_wild_mode;
+
+ /** @structvar mhp
+ * @brief Number
+ * @note Max hit pts
+ */
+ s16b mhp;
+ /** @structvar chp
+ * @brief Number
+ * @note Cur hit pts
+ */
+ s16b chp;
+ /** @structvar chp_frac
+ * @brief Number
+ * @note Cur hit frac (times 2^16)
+ */
+ u16b chp_frac;
+ /** @structvar hp_mod
+ * @brief Number
+ * @note A modificator(permanent)
+ */
+ s16b hp_mod;
+
+ /** @structvar msp
+ * @brief Number
+ * @note Max mana pts
+ */
+ s16b msp;
+ /** @structvar csp
+ * @brief Number
+ * @note Cur mana pts
+ */
+ s16b csp;
+ /** @structvar csp_frac
+ * @brief Number
+ * @note Cur mana frac (times 2^16)
+ */
+ u16b csp_frac;
+
+ /** @structvar msane
+ * @brief Number
+ * @note Max sanity
+ */
+ s16b msane;
+ /** @structvar csane
+ * @brief Number
+ * @note Cur sanity
+ */
+ s16b csane;
+ /** @structvar csane_frac
+ * @brief Number
+ * @note Cur sanity frac
+ */
+ u16b csane_frac;
+
+ /** @structvar grace
+ * @brief Number
+ * @note Your God's appreciation factor.
+ */
+ s32b grace;
+ /** @structvar pgod
+ * @brief Number
+ * @note Your God.
+ */
+ byte pgod;
+ /** @structvar praying
+ * @brief Boolean
+ * @note Praying to your god.
+ */
+ bool praying;
+
+ /** @structvar max_plv
+ * @brief Number
+ * @note Max Player Level
+ */
+ s16b max_plv;
+
+ /** @structvar stat_max[6]
+ * @brief Number
+ * @note Current "maximal" stat values
+ */
+ s16b stat_max[6];
+ /** @structvar stat_cur[6]
+ * @brief Number
+ * @note Current "natural" stat values
+ */
+ s16b stat_cur[6];
+
+ /** @structvar luck_cur
+ * @brief Number
+ * @note Current "natural" luck value (range -30 <> 30)
+ */
+ s16b luck_cur;
+ /** @structvar luck_max
+ * @brief Number
+ * @note Current "maximal base" luck value (range -30 <> 30)
+ */
+ s16b luck_max;
+ /** @structvar luck_base
+ * @brief Number
+ * @note Current "base" luck value (range -30 <> 30)
+ */
+ s16b luck_base;
+
+ /** @structvar fast
+ * @brief Number
+ * @note Timed -- Fast
+ */
+ s16b fast;
+ /** @structvar lightspeed
+ * @brief Number
+ * @note Timed -- Light Speed
+ */
+ s16b lightspeed;
+ /** @structvar slow
+ * @brief Number
+ * @note Timed -- Slow
+ */
+ s16b slow;
+ /** @structvar blind
+ * @brief Number
+ * @note Timed -- Blindness
+ */
+ s16b blind;
+ /** @structvar paralyzed
+ * @brief Number
+ * @note Timed -- Paralysis
+ */
+ s16b paralyzed;
+ /** @structvar confused
+ * @brief Number
+ * @note Timed -- Confusion
+ */
+ s16b confused;
+ /** @structvar afraid
+ * @brief Number
+ * @note Timed -- Fear
+ */
+ s16b afraid;
+ /** @structvar image
+ * @brief Number
+ * @note Timed -- Hallucination
+ */
+ s16b image;
+ /** @structvar poisoned
+ * @brief Number
+ * @note Timed -- Poisoned
+ */
+ s16b poisoned;
+ /** @structvar cut
+ * @brief Number
+ * @note Timed -- Cut
+ */
+ s16b cut;
+ /** @structvar stun
+ * @brief Number
+ * @note Timed -- Stun
+ */
+ s16b stun;
+
+ /** @structvar protevil
+ * @brief Number
+ * @note Timed -- Protection from Evil
+ */
+ s16b protevil;
+ /** @structvar protgood
+ * @brief Number
+ * @note Timed -- Protection from Good
+ */
+ s16b protgood;
+ /** @structvar protundead
+ * @brief Number
+ * @note Timed -- Protection from Undead
+ */
+ s16b protundead;
+ /** @structvar invuln
+ * @brief Number
+ * @note Timed -- Invulnerable
+ */
+ s16b invuln;
+ /** @structvar hero
+ * @brief Number
+ * @note Timed -- Heroism
+ */
+ s16b hero;
+ /** @structvar shero
+ * @brief Number
+ * @note Timed -- Super Heroism
+ */
+ s16b shero;
+ /** @structvar shield
+ * @brief Number
+ * @note Timed -- Shield Spell
+ */
+ s16b shield;
+ /** @structvar shield_power
+ * @brief Number
+ * @note Timed -- Shield Spell Power
+ */
+ s16b shield_power;
+ /** @structvar shield_opt
+ * @brief Number
+ * @note Timed -- Shield Spell options
+ */
+ s16b shield_opt;
+ /** @structvar blessed
+ * @brief Number
+ * @note Timed -- Blessed
+ */
+ s16b blessed;
+ /** @structvar tim_invis
+ * @brief Number
+ * @note Timed -- See Invisible
+ */
+ s16b tim_invis;
+ /** @structvar tim_infra
+ * @brief Number
+ * @note Timed -- Infra Vision
+ */
+ s16b tim_infra;
+
+ /** @structvar oppose_acid
+ * @brief Number
+ * @note Timed -- oppose acid
+ */
+ s16b oppose_acid;
+ /** @structvar oppose_elec
+ * @brief Number
+ * @note Timed -- oppose lightning
+ */
+ s16b oppose_elec;
+ /** @structvar oppose_fire
+ * @brief Number
+ * @note Timed -- oppose heat
+ */
+ s16b oppose_fire;
+ /** @structvar oppose_cold
+ * @brief Number
+ * @note Timed -- oppose cold
+ */
+ s16b oppose_cold;
+ /** @structvar oppose_pois
+ * @brief Number
+ * @note Timed -- oppose poison
+ */
+ s16b oppose_pois;
+ /** @structvar oppose_ld
+ * @brief Number
+ * @note Timed -- oppose light & dark
+ */
+ s16b oppose_ld;
+ /** @structvar oppose_cc
+ * @brief Number
+ * @note Timed -- oppose chaos & confusion
+ */
+ s16b oppose_cc;
+ /** @structvar oppose_ss
+ * @brief Number
+ * @note Timed -- oppose sound & shards
+ */
+ s16b oppose_ss;
+ /** @structvar oppose_nex
+ * @brief Number
+ * @note Timed -- oppose nexus
+ */
+ s16b oppose_nex;
+
+
+ /** @structvar tim_esp
+ * @brief Number
+ * @note Timed ESP
+ */
+ s16b tim_esp;
+ /** @structvar tim_wraith
+ * @brief Number
+ * @note Timed wraithform
+ */
+ s16b tim_wraith;
+ /** @structvar tim_ffall
+ * @brief Number
+ * @note Timed Levitation
+ */
+ s16b tim_ffall;
+ /** @structvar tim_fly
+ * @brief Number
+ * @note Timed Levitation
+ */
+ s16b tim_fly;
+ /** @structvar tim_fire_aura
+ * @brief Number
+ * @note Timed Fire Aura
+ */
+ s16b tim_fire_aura;
+ /** @structvar tim_regen
+ * @brief Number
+ * @note Timed regen
+ */
+ s16b tim_regen;
+ /** @structvar tim_regen_pow
+ * @brief Number
+ * @note Timed regen
+ */
+ s16b tim_regen_pow;
+ /** @structvar tim_poison
+ * @brief Number
+ * @note Timed poison hands
+ */
+ s16b tim_poison;
+ /** @structvar tim_thunder
+ * @brief Number
+ * @note Timed thunderstorm
+ */
+ s16b tim_thunder;
+ /** @structvar tim_thunder_p1
+ * @brief Number
+ * @note Timed thunderstorm
+ */
+ s16b tim_thunder_p1;
+ /** @structvar tim_thunder_p2
+ * @brief Number
+ * @note Timed thunderstorm
+ */
+ s16b tim_thunder_p2;
+
+ /** @structvar resist_magic
+ * @brief Number
+ * @note Timed Resist Magic (later)
+ */
+ s16b resist_magic;
+ /** @structvar tim_invisible
+ * @brief Number
+ * @note Timed Invisibility
+ */
+ s16b tim_invisible;
+ /** @structvar tim_inv_pow
+ * @brief Number
+ * @note Power of timed invisibility
+ */
+ s16b tim_inv_pow;
+ /** @structvar tim_mimic
+ * @brief Number
+ * @note Timed Mimic
+ */
+ s16b tim_mimic;
+ /** @structvar tim_lite
+ * @brief Number
+ * @note Timed Lite
+ */
+ s16b tim_lite;
+ /** @structvar holy
+ * @brief Number
+ * @note Holy Aura
+ */
+ s16b holy;
+ /** @structvar walk_water
+ * @brief Number
+ * @note Walk over water as a god
+ */
+ s16b walk_water;
+ /** @structvar tim_mental_barrier
+ * @brief Number
+ * @note Sustain Int&Wis
+ */
+ s16b tim_mental_barrier;
+ /** @structvar strike
+ * @brief Number
+ * @note True Strike(+25 hit)
+ */
+ s16b strike;
+ /** @structvar meditation
+ * @brief Number
+ * @note Meditation(+50 mana -25 to hit/to dam)
+ */
+ s16b meditation;
+ /** @structvar tim_reflect
+ * @brief Number
+ * @note Timed Reflection
+ */
+ s16b tim_reflect;
+ /** @structvar tim_res_time
+ * @brief Number
+ * @note Timed Resistance to Time
+ */
+ s16b tim_res_time;
+ /** @structvar tim_deadly
+ * @brief Number
+ * @note Timed deadly blow
+ */
+ s16b tim_deadly;
+ /** @structvar prob_travel
+ * @brief Number
+ * @note Timed probability travel
+ */
+ s16b prob_travel;
+ /** @structvar disrupt_shield
+ * @brief Number
+ * @note Timed disruption shield
+ */
+ s16b disrupt_shield;
+ /** @structvar parasite
+ * @brief Number
+ * @note Timed parasite
+ */
+ s16b parasite;
+ /** @structvar parasite_r_idx
+ * @brief Number
+ * @note Timed parasite monster
+ */
+ s16b parasite_r_idx;
+ /** @structvar loan
+ * @brief Number
+ */
+ u32b loan;
+ /** @structvar loan_time
+ * @brief Number
+ * @note Timer -- loan
+ */
+ u32b loan_time;
+ /** @structvar tim_magic_breath
+ * @brief Number
+ * @note Magical breathing -- can breath anywhere
+ */
+ s16b tim_magic_breath;
+ /** @structvar tim_water_breath
+ * @brief Number
+ * @note Water breathing -- can breath underwater
+ */
+ s16b tim_water_breath;
+
+ /** @structvar immov_cntr
+ * @brief Number
+ * @note Timed -- Last ``immovable'' command.
+ */
+ s16b immov_cntr;
+
+ /** @structvar music_extra
+ * @brief Number
+ * @note Music songs
+ */
+ u32b music_extra;
+ /** @structvar music_extra2
+ * @brief Number
+ * @note Music songs
+ */
+ u32b music_extra2;
+
+ /** @structvar chaos_patron
+ * @brief Number
+ */
+ s16b chaos_patron;
+
+ /** @structvar recall_dungeon
+ * @brief Number
+ * @note Recall in which dungeon
+ */
+ s16b recall_dungeon;
+ /** @structvar word_recall
+ * @brief Number
+ * @note Word of recall counter
+ */
+ s16b word_recall;
+
+ /** @structvar energy
+ * @brief Number
+ * @note Current energy
+ */
+ s32b energy;
+
+ /** @structvar food
+ * @brief Number
+ * @note Current nutrition
+ */
+ s16b food;
+
+ /** @structvar confusing
+ * @brief Number
+ * @note Glowing hands
+ */
+ byte confusing;
+ /** @structvar searching
+ * @brief Number
+ * @note Currently searching
+ */
+ byte searching;
+
+ /** @structvar new_spells
+ * @brief Number
+ * @note Number of spells available
+ */
+ s16b new_spells;
+
+ /** @structvar old_spells
+ * @brief Number
+ */
+ s16b old_spells;
+
+ /** @structvar xtra_spells
+ * @brief Number
+ * @note Number of xtra spell learned(via potion)
+ */
+ s16b xtra_spells;
+
+ /** @structvar cur_lite
+ * @brief Number
+ * @note Radius of lite (if any)
+ */
+ s16b cur_lite;
+
+ /*** Extra flags -- used for lua and easying stuff ***/
+ /** @structvar xtra_f1
+ * @brief Number
+ */
+ u32b xtra_f1;
+ /** @structvar xtra_f2
+ * @brief Number
+ */
+ u32b xtra_f2;
+ /** @structvar xtra_f3
+ * @brief Number
+ */
+ u32b xtra_f3;
+ /** @structvar xtra_f4
+ * @brief Number
+ */
+ u32b xtra_f4;
+ /** @structvar xtra_f5
+ * @brief Number
+ */
+ u32b xtra_f5;
+ /** @structvar xtra_esp
+ * @brief Number
+ */
+ u32b xtra_esp;
+
+ /** @structvar pspeed
+ * @brief Number
+ * @note Current speed
+ */
+ s16b pspeed;
+
+ /** @structvar notice
+ * @brief Number
+ * @note Special Updates (bit flags)
+ */
+ u32b notice;
+ /** @structvar update
+ * @brief Number
+ * @note Pending Updates (bit flags)
+ */
+ u32b update;
+ /** @structvar redraw
+ * @brief Number
+ * @note Normal Redraws (bit flags)
+ */
+ u32b redraw;
+ /** @structvar window
+ * @brief Number
+ * @note Window Redraws (bit flags)
+ */
+ u32b window;
+
+ /** @structvar stat_use[6]
+ * @brief Number
+ * @note Current modified stats
+ */
+ s16b stat_use[6];
+ /** @structvar stat_top[6]
+ * @brief Number
+ * @note Maximal modified stats
+ */
+ s16b stat_top[6];
+
+ /** @structvar stat_add[6]
+ * @brief Number
+ * @note Modifiers to stat values
+ */
+ s16b stat_add[6];
+ /** @structvar stat_ind[6]
+ * @brief Number
+ * @note Indexes into stat tables
+ */
+ s16b stat_ind[6];
+ /** @structvar stat_cnt[6]
+ * @brief Number
+ * @note Counter for temporary drains
+ */
+ s16b stat_cnt[6];
+ /** @structvar stat_los[6]
+ * @brief Number
+ * @note Amount of temporary drains
+ */
+ s16b stat_los[6];
+
+ /** @structvar immune_acid
+ * @brief Boolean
+ * @note Immunity to acid
+ */
+ bool immune_acid;
+ /** @structvar immune_elec
+ * @brief Boolean
+ * @note Immunity to lightning
+ */
+ bool immune_elec;
+ /** @structvar immune_fire
+ * @brief Boolean
+ * @note Immunity to fire
+ */
+ bool immune_fire;
+ /** @structvar immune_cold
+ * @brief Boolean
+ * @note Immunity to cold
+ */
+ bool immune_cold;
+ /** @structvar immune_neth
+ * @brief Boolean
+ * @note Immunity to nether
+ */
+ bool immune_neth;
+
+ /** @structvar resist_acid
+ * @brief Boolean
+ * @note Resist acid
+ */
+ bool resist_acid;
+ /** @structvar resist_elec
+ * @brief Boolean
+ * @note Resist lightning
+ */
+ bool resist_elec;
+ /** @structvar resist_fire
+ * @brief Boolean
+ * @note Resist fire
+ */
+ bool resist_fire;
+ /** @structvar resist_cold
+ * @brief Boolean
+ * @note Resist cold
+ */
+ bool resist_cold;
+ /** @structvar resist_pois
+ * @brief Boolean
+ * @note Resist poison
+ */
+ bool resist_pois;
+
+ /** @structvar resist_conf
+ * @brief Boolean
+ * @note Resist confusion
+ */
+ bool resist_conf;
+ /** @structvar resist_sound
+ * @brief Boolean
+ * @note Resist sound
+ */
+ bool resist_sound;
+ /** @structvar resist_lite
+ * @brief Boolean
+ * @note Resist light
+ */
+ bool resist_lite;
+ /** @structvar resist_dark
+ * @brief Boolean
+ * @note Resist darkness
+ */
+ bool resist_dark;
+ /** @structvar resist_chaos
+ * @brief Boolean
+ * @note Resist chaos
+ */
+ bool resist_chaos;
+ /** @structvar resist_disen
+ * @brief Boolean
+ * @note Resist disenchant
+ */
+ bool resist_disen;
+ /** @structvar resist_shard
+ * @brief Boolean
+ * @note Resist shards
+ */
+ bool resist_shard;
+ /** @structvar resist_nexus
+ * @brief Boolean
+ * @note Resist nexus
+ */
+ bool resist_nexus;
+ /** @structvar resist_blind
+ * @brief Boolean
+ * @note Resist blindness
+ */
+ bool resist_blind;
+ /** @structvar resist_neth
+ * @brief Boolean
+ * @note Resist nether
+ */
+ bool resist_neth;
+ /** @structvar resist_fear
+ * @brief Boolean
+ * @note Resist fear
+ */
+ bool resist_fear;
+ /** @structvar resist_continuum
+ * @brief Boolean
+ * @note Resist space-time continuum disruption
+ */
+ bool resist_continuum;
+
+ /** @structvar sensible_fire
+ * @brief Boolean
+ * @note Fire does more damage on the player
+ */
+ bool sensible_fire;
+ /** @structvar sensible_lite
+ * @brief Boolean
+ * @note Lite does more damage on the player and blinds her/him
+ */
+ bool sensible_lite;
+
+ /** @structvar reflect
+ * @brief Boolean
+ * @note Reflect 'bolt' attacks
+ */
+ bool reflect;
+ /** @structvar sh_fire
+ * @brief Boolean
+ * @note Fiery 'immolation' effect
+ */
+ bool sh_fire;
+ /** @structvar sh_elec
+ * @brief Boolean
+ * @note Electric 'immolation' effect
+ */
+ bool sh_elec;
+ /** @structvar wraith_form
+ * @brief Boolean
+ * @note wraithform
+ */
+ bool wraith_form;
+
+ /** @structvar anti_magic
+ * @brief Boolean
+ * @note Anti-magic
+ */
+ bool anti_magic;
+ /** @structvar anti_tele
+ * @brief Boolean
+ * @note Prevent teleportation
+ */
+ bool anti_tele;
+
+ /** @structvar sustain_str
+ * @brief Boolean
+ * @note Keep strength
+ */
+ bool sustain_str;
+ /** @structvar sustain_int
+ * @brief Boolean
+ * @note Keep intelligence
+ */
+ bool sustain_int;
+ /** @structvar sustain_wis
+ * @brief Boolean
+ * @note Keep wisdom
+ */
+ bool sustain_wis;
+ /** @structvar sustain_dex
+ * @brief Boolean
+ * @note Keep dexterity
+ */
+ bool sustain_dex;
+ /** @structvar sustain_con
+ * @brief Boolean
+ * @note Keep constitution
+ */
+ bool sustain_con;
+ /** @structvar sustain_chr
+ * @brief Boolean
+ * @note Keep charisma
+ */
+ bool sustain_chr;
+
+ /** @structvar aggravate
+ * @brief Boolean
+ * @note Aggravate monsters
+ */
+ bool aggravate;
+ /** @structvar teleport
+ * @brief Boolean
+ * @note Random teleporting
+ */
+ bool teleport;
+
+ /** @structvar exp_drain
+ * @brief Boolean
+ * @note Experience draining
+ */
+ bool exp_drain;
+ /** @structvar drain_mana
+ * @brief Number
+ * @note mana draining
+ */
+ byte drain_mana;
+ /** @structvar drain_life
+ * @brief Number
+ * @note hp draining
+ */
+ byte drain_life;
+
+ /** @structvar magical_breath
+ * @brief Boolean
+ * @note Magical breathing -- can breath anywhere
+ */
+ bool magical_breath;
+ /** @structvar water_breath
+ * @brief Boolean
+ * @note Water breathing -- can breath underwater
+ */
+ bool water_breath;
+ /** @structvar climb
+ * @brief Boolean
+ * @note Can climb mountains
+ */
+ bool climb;
+ /** @structvar fly
+ * @brief Boolean
+ * @note Can fly over some features
+ */
+ bool fly;
+ /** @structvar ffall
+ * @brief Boolean
+ * @note No damage falling
+ */
+ bool ffall;
+ /** @structvar lite
+ * @brief Boolean
+ * @note Permanent light
+ */
+ bool lite;
+ /** @structvar free_act
+ * @brief Boolean
+ * @note Never paralyzed
+ */
+ bool free_act;
+ /** @structvar see_inv
+ * @brief Boolean
+ * @note Can see invisible
+ */
+ bool see_inv;
+ /** @structvar regenerate
+ * @brief Boolean
+ * @note Regenerate hit pts
+ */
+ bool regenerate;
+ /** @structvar hold_life
+ * @brief Boolean
+ * @note Resist life draining
+ */
+ bool hold_life;
+ /** @structvar telepathy
+ * @brief Number
+ * @note Telepathy
+ */
+ u32b telepathy;
+ /** @structvar slow_digest
+ * @brief Boolean
+ * @note Slower digestion
+ */
+ bool slow_digest;
+ /** @structvar bless_blade
+ * @brief Boolean
+ * @note Blessed blade
+ */
+ bool bless_blade;
+ /** @structvar xtra_might
+ * @brief Number
+ * @note Extra might bow
+ */
+ byte xtra_might;
+ /** @structvar impact
+ * @brief Boolean
+ * @note Earthquake blows
+ */
+ bool impact;
+ /** @structvar auto_id
+ * @brief Boolean
+ * @note Auto id items
+ */
+ bool auto_id;
+
+ /** @structvar dis_to_h
+ * @brief Number
+ * @note Known bonus to hit
+ */
+ s16b dis_to_h;
+ /** @structvar dis_to_d
+ * @brief Number
+ * @note Known bonus to dam
+ */
+ s16b dis_to_d;
+ /** @structvar dis_to_a
+ * @brief Number
+ * @note Known bonus to ac
+ */
+ s16b dis_to_a;
+
+ /** @structvar dis_ac
+ * @brief Number
+ * @note Known base ac
+ */
+ s16b dis_ac;
+
+ /** @structvar to_m
+ * @brief Number
+ * @note Bonus to mana
+ */
+ s16b to_m;
+ /** @structvar to_s
+ * @brief Number
+ * @note Bonus to spell
+ */
+ s16b to_s;
+ /** @structvar to_h
+ * @brief Number
+ * @note Bonus to hit
+ */
+ s16b to_h;
+ /** @structvar to_d
+ * @brief Number
+ * @note Bonus to dam
+ */
+ s16b to_d;
+ /** @structvar to_a
+ * @brief Number
+ * @note Bonus to ac
+ */
+ s16b to_a;
+
+ /** @structvar to_h_melee
+ * @brief Number
+ * @note Bonus to hit
+ */
+ s16b to_h_melee;
+ /** @structvar to_d_melee
+ * @brief Number
+ * @note Bonus to dam
+ */
+ s16b to_d_melee;
+
+ /** @structvar to_h_ranged
+ * @brief Number
+ * @note Bonus to hit
+ */
+ s16b to_h_ranged;
+ /** @structvar to_d_ranged
+ * @brief Number
+ * @note Bonus to dam
+ */
+ s16b to_d_ranged;
+
+ /** @structvar num_blow
+ * @brief Number
+ * @note Number of blows
+ */
+ s16b num_blow;
+ /** @structvar num_fire
+ * @brief Number
+ * @note Number of shots
+ */
+ s16b num_fire;
+
+ /** @structvar ac
+ * @brief Number
+ * @note Base ac
+ */
+ s16b ac;
+
+ /** @structvar antimagic
+ * @brief Number
+ * @note Power of the anti magic field
+ */
+ byte antimagic;
+ /** @structvar antimagic_dis
+ * @brief Number
+ * @note Radius of the anti magic field
+ */
+ byte antimagic_dis;
+
+ /** @structvar see_infra
+ * @brief Number
+ * @note Infravision range
+ */
+ s16b see_infra;
+
+ /** @structvar skill_dis
+ * @brief Number
+ * @note Skill: Disarming
+ */
+ s16b skill_dis;
+ /** @structvar skill_dev
+ * @brief Number
+ * @note Skill: Magic Devices
+ */
+ s16b skill_dev;
+ /** @structvar skill_sav
+ * @brief Number
+ * @note Skill: Saving throw
+ */
+ s16b skill_sav;
+ /** @structvar skill_stl
+ * @brief Number
+ * @note Skill: Stealth factor
+ */
+ s16b skill_stl;
+ /** @structvar skill_srh
+ * @brief Number
+ * @note Skill: Searching ability
+ */
+ s16b skill_srh;
+ /** @structvar skill_fos
+ * @brief Number
+ * @note Skill: Searching frequency
+ */
+ s16b skill_fos;
+ /** @structvar skill_thn
+ * @brief Number
+ * @note Skill: To hit (normal)
+ */
+ s16b skill_thn;
+ /** @structvar skill_thb
+ * @brief Number
+ * @note Skill: To hit (shooting)
+ */
+ s16b skill_thb;
+ /** @structvar skill_tht
+ * @brief Number
+ * @note Skill: To hit (throwing)
+ */
+ s16b skill_tht;
+ /** @structvar skill_dig
+ * @brief Number
+ * @note Skill: Digging
+ */
+ s16b skill_dig;
+
+ /** @structvar skill_points
+ * @brief Number
+ */
+ s16b skill_points;
+
+ /** @structvar control
+ * @brief Number
+ * @note Controlled monster
+ */
+ s16b control;
+ /** @structvar control_dir
+ * @brief Number
+ * @note Controlled monster
+ */
+ byte control_dir;
+ /** @structvar companion_killed
+ * @brief Number
+ * @note Number of companion death
+ */
+ s16b companion_killed;
+ /** @structvar black_breath
+ * @brief Boolean
+ * @note The Tolkien's Black Breath
+ */
+ bool black_breath;
+ /** @structvar body_monster
+ * @brief Number
+ * @note In which body is the player
+ */
+ u16b body_monster;
+
+ /** @structvar body_parts[28]
+ * @brief Number
+ * @note Various body modifiers
+ */
+ byte body_parts[28];
+
+ /** @structvar extra_body_parts[BODY_MAX]
+ * @brief Number
+ * @note Various body modifiers
+ */
+ s16b extra_body_parts[BODY_MAX];
+
+ /** @structvar powers_mod[POWER_MAX_INIT]
+ * @brief Boolean
+ * @note Intrinsinc powers
+ */
+ bool powers_mod[POWER_MAX_INIT];
+ /** @structvar powers[power_max]
+ * @brief Boolean
+ */
+ bool powers[power_max];
+
+ /** @structvar spellbinder_num
+ * @brief Number
+ * @note Number of spells bound
+ */
+ byte spellbinder_num;
+ /** @structvar spellbinder[4]
+ * @brief Number
+ * @note Spell bounds
+ */
+ u32b spellbinder[4];
+ /** @structvar spellbinder_trigger
+ * @brief Number
+ * @note Spellbinder trigger condition
+ */
+ byte spellbinder_trigger;
+
+ /* Corruptions */
+ /** @structvar corruptions_aux;
+ * @brief Boolean
+ */
+ bool corruptions[max_corruptions] @ corruptions_aux;
+
+ /* Astral */
+ /** @structvar astral
+ * @brief Boolean
+ * @note We started at the bottom ?
+ */
+ bool astral;
+
+ /*** Temporary fields ***/
+
+ /** @structvar leaving
+ * @brief Boolean
+ * @note True if player is leaving
+ */
+ bool leaving;
+};
+
+/** @name Spellbinder triggers
+ * @{ */
+/** @def SPELLBINDER_HP75
+ * @note Trigger spellbinder at 75% maximum hit points */
+#define SPELLBINDER_HP75 1
+
+/** @def SPELLBINDER_HP50
+ * @note Trigger spellbinder at 50% maximum hit points */
+#define SPELLBINDER_HP50 2
+
+/** @def SPELLBINDER_HP25
+ * @note Trigger spellbinder at 25% maximum hit points */
+#define SPELLBINDER_HP25 3
+/** @} */
+
+
+/** @struct player_race
+ */
+struct player_race
+{
+ /** @structvar title
+ * @brief Number
+ * @note Type of race
+ */
+ s32b title;
+ /** @structvar desc
+ * @brief Number
+ */
+ s32b desc;
+
+ /** @structvar infra
+ * @brief Number
+ * @note Infra-vision range
+ */
+ byte infra;
+};
+
+/** @struct player_race_mod
+ */
+struct player_race_mod
+{
+ /** @structvar title
+ * @brief Number
+ * @note Type of race mod
+ */
+ s32b title;
+ /** @structvar desc
+ * @brief Number
+ * @note Desc
+ */
+ s32b desc;
+ /** @structvar place
+ * @brief Boolean
+ * @note TRUE = race race modifier, FALSE = Race modifier race
+ */
+ bool place;
+
+ /** @structvar r_adj[6]
+ * @brief Number
+ * @note (+) Racial stat bonuses
+ */
+ s16b r_adj[6];
+
+ /** @structvar luck
+ * @brief String
+ * @note Luck
+ */
+ char luck;
+ /** @structvar mana
+ * @brief Number
+ * @note Mana %
+ */
+ s16b mana;
+
+ /** @structvar r_dis
+ * @brief Number
+ * @note (+) disarming
+ */
+ s16b r_dis;
+ /** @structvar r_dev
+ * @brief Number
+ * @note (+) magic devices
+ */
+ s16b r_dev;
+ /** @structvar r_sav
+ * @brief Number
+ * @note (+) saving throw
+ */
+ s16b r_sav;
+ /** @structvar r_stl
+ * @brief Number
+ * @note (+) stealth
+ */
+ s16b r_stl;
+ /** @structvar r_srh
+ * @brief Number
+ * @note (+) search ability
+ */
+ s16b r_srh;
+ /** @structvar r_fos
+ * @brief Number
+ * @note (+) search frequency
+ */
+ s16b r_fos;
+ /** @structvar r_thn
+ * @brief Number
+ * @note (+) combat (normal)
+ */
+ s16b r_thn;
+ /** @structvar r_thb
+ * @brief Number
+ * @note (+) combat (shooting)
+ */
+ s16b r_thb;
+
+ /** @structvar r_mhp
+ * @brief String
+ * @note (+) Race mod hit-dice modifier
+ */
+ char r_mhp;
+ /** @structvar r_exp
+ * @brief Number
+ * @note (+) Race mod experience factor
+ */
+ s16b r_exp;
+
+ /** @structvar b_age
+ * @brief String
+ * @note (+) base age
+ */
+ char b_age;
+ /** @structvar m_age
+ * @brief String
+ * @note (+) mod age
+ */
+ char m_age;
+
+ /** @structvar m_b_ht
+ * @brief String
+ * @note (+) base height (males)
+ */
+ char m_b_ht;
+ /** @structvar m_m_ht
+ * @brief String
+ * @note (+) mod height (males)
+ */
+ char m_m_ht;
+ /** @structvar m_b_wt
+ * @brief String
+ * @note (+) base weight (males)
+ */
+ char m_b_wt;
+ /** @structvar m_m_wt
+ * @brief String
+ * @note (+) mod weight (males)
+ */
+ char m_m_wt;
+
+ /** @structvar f_b_ht
+ * @brief String
+ * @note (+) base height (females)
+ */
+ char f_b_ht;
+ /** @structvar f_m_ht
+ * @brief String
+ * @note (+) mod height (females)
+ */
+ char f_m_ht;
+ /** @structvar f_b_wt
+ * @brief String
+ * @note (+) base weight (females)
+ */
+ char f_b_wt;
+ /** @structvar f_m_wt
+ * @brief String
+ * @note (+) mod weight (females)
+ */
+ char f_m_wt;
+
+ /** @structvar infra
+ * @brief String
+ * @note (+) Infra-vision range
+ */
+ char infra;
+
+ /** @structvar choice[2]
+ * @brief Number
+ * @note Legal race choices
+ */
+ u32b choice[2];
+
+ /** @structvar pclass[2]
+ * @brief Number
+ * @note Classes allowed
+ */
+ u32b pclass[2];
+ /** @structvar mclass[2]
+ * @brief Number
+ * @note Classes restricted
+ */
+ u32b mclass[2];
+
+ /** @structvar powers[4]
+ * @brief Number
+ * @note Powers of the subrace
+ */
+ s16b powers[4];
+
+ /** @structvar body_parts[BODY_MAX]
+ * @brief String
+ * @note To help to decide what to use when body changing
+ */
+ char body_parts[BODY_MAX];
+
+ /** @structvar flags1
+ * @brief Number
+ */
+ u32b flags1;
+ /** @structvar flags2
+ * @brief Number
+ * @note flags
+ */
+ u32b flags2;
+
+ /** @structvar oflags1[51]
+ * @brief Number
+ */
+ u32b oflags1[51];
+ /** @structvar oflags2[51]
+ * @brief Number
+ */
+ u32b oflags2[51];
+ /** @structvar oflags3[51]
+ * @brief Number
+ */
+ u32b oflags3[51];
+ /** @structvar oflags4[51]
+ * @brief Number
+ */
+ u32b oflags4[51];
+ /** @structvar oflags5[51]
+ * @brief Number
+ */
+ u32b oflags5[51];
+ /** @structvar oesp[51]
+ * @brief Number
+ */
+ u32b oesp[51];
+ /** @structvar opval[51]
+ * @brief Number
+ */
+ s16b opval[51];
+
+ /** @structvar g_attr
+ * @brief Number
+ * @note Overlay graphic attribute
+ */
+ byte g_attr;
+ /** @structvar g_char
+ * @brief String
+ * @note Overlay graphic character
+ */
+ char g_char;
+
+ /** @structvar skill_basem[MAX_SKILLS]
+ * @brief String
+ */
+ char skill_basem[MAX_SKILLS];
+ /** @structvar skill_base[MAX_SKILLS]
+ * @brief Number
+ */
+ u32b skill_base[MAX_SKILLS];
+ /** @structvar skill_modm[MAX_SKILLS]
+ * @brief String
+ */
+ char skill_modm[MAX_SKILLS];
+ /** @structvar skill_mod[MAX_SKILLS]
+ * @brief Number
+ */
+ s16b skill_mod[MAX_SKILLS];
+};
+
+/** @var energy_use
+ * @brief Number
+ * @note Energy use for an action (0 if action does not take a turn).
+ */
+extern s32b energy_use;
+
+/** @var player;
+ * @brief player_type
+ * @note The player.
+ */
+extern player_type *p_ptr @ player;
+
+/** @var max_rp_idx
+ * @brief Number
+ * @note Maximum number of entries in player race array.
+ */
+extern u16b max_rp_idx;
+
+/** @var race_info[max_rp_idx]
+ * @brief player_race
+ * @note Array of player races.
+ */
+extern player_race race_info[max_rp_idx];
+
+/** @var *rp_name
+ * @brief String
+ * @note Name of player race.
+ */
+extern char *rp_name;
+
+/** @var *rp_text
+ * @brief String
+ */
+extern char *rp_text;
+
+/** @var max_rmp_idx
+ * @brief Number
+ * @note Maximum number of player subraces.
+ */
+extern u16b max_rmp_idx;
+
+/** @var _mod race_mod_info[max_rmp_idx]
+ * @brief player_race
+ * @note Array of player subraces.
+ */
+extern player_race_mod race_mod_info[max_rmp_idx];
+
+/** @var *rmp_name
+ * @brief String
+ * @note Name of player subrace.
+ */
+extern char *rmp_name;
+
+/** @var *rmp_text
+ * @brief String
+ */
+extern char *rmp_text;
+
+/** @var class_info[max_c_idx]
+ * @brief player_class
+ * @note Array of classes.
+ */
+extern player_class class_info[max_c_idx];
+
+/** @var *c_name
+ * @brief String
+ * @note Name of player class.
+ */
+extern char *c_name;
+
+/** @var *c_text
+ * @brief String
+ */
+extern char *c_text;
+
+/** @var flush_failure
+ * @brief Boolean
+ * @note TRUE if flush input on any failure, otherwise FALSE.
+ */
+extern bool flush_failure;
+
+/** @fn set_roots(int v, s16b ac, s16b dam)
+ * @brief Player has timed roots.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param ac Number \n bonus to AC
+ * @brief AC bonus
+ * @param dam Number \n bonus to melee to-damage
+ * @brief To-damage bonus
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_roots(int v, s16b ac, s16b dam);
+
+/** @fn set_shadow(int v)
+ * @brief Player has wraith form.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_shadow(int v);
+
+/** @fn set_parasite(int v, int r)
+ * @brief Player has timed parasite.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param r Number \n index of race in monster race array
+ * @brief Parasite race index
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * When the time remaining reaches 0, there is an 80% chance the parasite will
+ * be born, otherwise it will die away.
+ * @note (see file xtra2.c)
+ */
+extern bool set_parasite(int v, int r);
+
+/** @fn set_disrupt_shield(int v)
+ * @brief Player has timed disrupt shield (feels invulnerable).\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_disrupt_shield(int v);
+
+/** @fn set_prob_travel(int v)
+ * @brief Player has timed probability travel.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_prob_travel(int v);
+
+/** @fn set_project(int v, s16b gf, s16b dam, s16b rad, s16b flag)
+ * @brief Player's weapon has a spell effect.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param gf Number \n spell effect
+ * @brief Spell effect
+ * @param dam Number \n damage caused by spell effect
+ * @brief Spell damage
+ * @param rad Number \n radius of spell effect
+ * @brief Spell radius
+ * @param flag Number \n spell projection effect
+ * @brief Spell properties
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_project(int v, s16b gf, s16b dam, s16b rad, s16b flag);
+
+/** @fn set_tim_deadly(int v)
+ * @brief Player has deadly accuracy.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_deadly(int v);
+
+/** @fn set_tim_res_time(int v)
+ * @brief Player has timed time resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_res_time(int v);
+
+/** @fn set_tim_reflect(int v)
+ * @brief Player has timed reflection.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_reflect(int v);
+
+/** @fn set_meditation(int v)
+ * @brief Player can meditate (forcibly pseudo-id).\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_meditation(int v);
+
+/** @fn set_strike(int v)
+ * @brief Player has true strike.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_strike(int v);
+
+/** @fn set_walk_water(int v)
+ * @brief Player can walk on water.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_walk_water(int v);
+
+/** @fn set_tim_ffall(int v)
+ * @brief Player has timed levitation (feather-fall).\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_ffall(int v);
+
+/** @fn set_tim_fire_aura(int v)
+ * @brief Player has a timed fiery aura.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_fire_aura(int v);
+
+/** @fn set_tim_regen(int v, int p)
+ * @brief Player has timed regeneration.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p Number \n power of regeneration
+ * @brief Regeneration power
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_regen(int v, int p);
+
+/** @fn set_holy(int v)
+ * @brief Player has a timed holy aura.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_holy(int v);
+
+/** @fn set_grace(s32b v)
+ * @brief Set the amount of grace a player has with a god.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range -30,000 to 30,000)
+ * @brief Grace
+ * @note (see file xtra2.c)
+ */
+extern void set_grace(s32b v);
+
+/** @fn set_mimic(int v, int p, int level)
+ * @brief Player has mimic form.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p Number \n the mimic form
+ * @brief Mimic form
+ * @param level Number \n the level of the mimic form
+ * @brief Mimic level
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_mimic(int v, int p, int level);
+
+/** @fn set_no_breeders(int v)
+ * @brief Player has timed breeder prevention.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_no_breeders(int v);
+
+/** @fn set_tim_esp(int v)
+ * @brief Player has timed ESP.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_esp(int v);
+
+/** @fn set_invis(int v, int p)
+ * @brief Player has timed invisibility.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p Number \n power of invisibility
+ * @brief Invisibility power
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_invis(int v, int p);
+
+/** @fn set_lite(int v)
+ * @brief Player has timed light.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Note the use of "PU_VIEW", which is needed to
+ * memorize any terrain features which suddenly become "visible".
+ * @note
+ * Note that blindness is currently the only thing which can affect
+ * "player_can_see_bold()".
+ * @note (see file xtra2.c)
+ */
+extern bool set_lite(int v);
+
+/** @fn set_blind(int v)
+ * @brief Player has timed blindness.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Note the use of "PU_UN_VIEW", which is needed to memorize any terrain
+ * features which suddenly become "visible".
+ * @note
+ * Note that blindness is currently the only thing which can affect
+ * "player_can_see_bold()".
+ * @note (see file xtra2.c)
+ */
+extern bool set_blind(int v);
+
+/** @fn set_confused(int v)
+ * @brief Player has timed confusion.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_confused(int v);
+
+/** @fn set_poisoned(int v)
+ * @brief Player has timed poisoning.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_poisoned(int v);
+
+/** @fn set_afraid(int v)
+ * @brief Player has timed fear.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_afraid(int v);
+
+/** @fn set_paralyzed(int v)
+ * @brief Player has timed paralysis.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_paralyzed(int v);
+
+/** @fn set_image(int v)
+ * @brief Player has timed hallucination.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Note that we must redraw the map when hallucination changes.
+ * @note (see file xtra2.c)
+ */
+extern bool set_image(int v);
+
+/** @fn set_fast(int v, int p)
+ * @brief Player has timed speed boost.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p Number \n speed factor
+ * @brief Speed factor
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_fast(int v, int p);
+
+/** @fn set_light_speed(int v)
+ * @brief Player has timed light speed.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_light_speed(int v);
+
+/** @fn set_slow(int v)
+ * @brief Player has timed slowness.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_slow(int v);
+
+/** @fn set_shield(int v, int p, s16b o, s16b d1, s16b d2)
+ * @brief Player has timed mystic shield.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p Number \n bonus to AC
+ * @brief AC bonus
+ * @param o Number \n type of shield (see SHIELD_foo fields)
+ * @brief Shield type
+ * @param d1 Number \n number of dice for damage roll
+ * @brief Damage dice
+ * @param d2 Number \n number of sides per die for damage roll
+ * @brief Damage sides
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_shield(int v, int p, s16b o, s16b d1, s16b d2);
+
+/* For calc_bonus hooks */
+/** @fn apply_flags(u32b f1, u32b f2, u32b f3, u32b f4, u32b f5, u32b esp, s16b pval = 0, s16b tval = 0, s16b to_h = 0, s16b to_d = 0, s16b to_a = 0)
+ * @brief Apply flags and values to the player.\n
+ * @param f1 Number \n flags to be applied to the player
+ * @brief Flag1
+ * @param f2 Number \n flags to be applied to the player
+ * @brief Flag2
+ * @param f3 Number \n flags to be applied to the player
+ * @brief Flag3
+ * @param f4 Number \n flags to be applied to the player
+ * @brief Flag4
+ * @param f5 Number \n flags to be applied to the player
+ * @brief Flag5
+ * @param esp Number \n ESP flag
+ * @brief Esp flag
+ * @param pval Number \n PVal to be applied to the player
+ * @brief Pval
+ * @param tval Number \n TVal to be applied to the player
+ * @brief Tval
+ * @param to_h Number \n to-hit bonus to be applied to the player
+ * @brief To-hit
+ * @param to_d Number \n to-damage bonus to be applied to the player
+ * @brief To-damage
+ * @param to_a Number \n AC bonus to be applied to the player
+ * @brief AC
+ * @note
+ * f1 can apply to attribuets, spell power, mana capacity, stealth, searching
+ * ability and frequency, infravision, digging, speed, extra blows, and
+ * earthquakes.
+ * @note
+ * f2 can apply to life capacity, sensible fire, invisibility, free action,
+ * hold life, immunities (except neither), resistances, reflection, and
+ * sustains.
+ * @note
+ * f3 can apply to extra shots, aggravate, teleport, drain XP, blessed, extra
+ * might, slow digestion, regeneration, lite, see invisible, wraith form,
+ * feather fall, fire sheath, electricity sheath, anti magic, and anti
+ * teleport.
+ * @note
+ * f4 can apply to lite, flying, climbing, nether immunity, precognition, and
+ * anti-magic power and radius.
+ * @note
+ * f5 can apply to luck, critical hits, drain mana, drain life, immovable,
+ * water breath, and magic breath.
+ * @note
+ * esp can apply to, well, just telepathy.
+ * @note
+ * pval can apply to attributes, luck, spell power, mana capacity, life
+ * capacity, stealth, search ability and frequency (x 5), infravision, digging
+ * (x 20), speed, extra blows, critical blows, invisibility (x 10), extra
+ * might, anti-magic power and radius.
+ * @note
+ * tval can apply to lite
+ * @note
+ * to_h, to_d, and to_ac can apply to anti-magic power and radius.
+ * @note (see file xtra1.c)
+ */
+extern void apply_flags(u32b f1, u32b f2, u32b f3, u32b f4, u32b f5, u32b esp, s16b pval = 0, s16b tval = 0, s16b to_h = 0, s16b to_d = 0, s16b to_a = 0);
+
+/** @name Shield effect options
+ * @{ */
+/** @def SHIELD_NONE */
+#define SHIELD_NONE 0x0000
+
+/** @def SHIELD_COUNTER */
+#define SHIELD_COUNTER 0x0001
+
+/** @def SHIELD_FIRE */
+#define SHIELD_FIRE 0x0002
+
+/** @def SHIELD_GREAT_FIRE */
+#define SHIELD_GREAT_FIRE 0x0004
+
+/** @def SHIELD_FEAR */
+#define SHIELD_FEAR 0x0008
+/** @} */
+
+
+/** @fn set_tim_thunder(int v, int p1, int p2)
+ * @brief Player has timed thunderstorm.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param p1 Number \n number of dice for damage roll
+ * @brief Damage dice
+ * @param p2 Number \n number of sides per die for damage roll
+ * @brief Damage sides
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_thunder(int v, int p1, int p2);
+
+/** @fn set_tim_breath(int v, bool magical)
+ * @brief Player has timed magic/water breath.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @param magical Boolean \n TRUE if player has magic breath, or FALSE if the
+ * player has water breath
+ * @brief Magic breath?
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_breath(int v, bool magical);
+
+/** @fn set_tim_fly(int v)
+ * @brief Player has timed flight.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_fly(int v);
+
+/** @fn set_blessed(int v)
+ * @brief Player has timed blessing.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Blessing gives +5 bonus AC and +10 bonus to-hit.
+ * @note (see file xtra2.c)
+ */
+extern bool set_blessed(int v);
+
+/** @fn set_hero(int v)
+ * @brief Player has timed heroism.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Heroism gives +10 bonus max HP, +12 bonus to-hit, and resist fear.
+ * @note (see file xtra2.c)
+ */
+extern bool set_hero(int v);
+
+/** @fn set_shero(int v)
+ * @brief Player has timed berserk strength.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Berserk strength gives +30 bonus max HP, +24 bonus to-hit, -10 penalty AC,
+ * and resist fear.
+ * @note (see file xtra2.c)
+ */
+extern bool set_shero(int v);
+
+/** @fn set_protevil(int v)
+ * @brief Player has timed protection from evil.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Protection from evil gives the player a chance to repel evil monsters.
+ * @note (see file xtra2.c)
+ */
+extern bool set_protevil(int v);
+
+/** @fn set_protgood(int v)
+ * @brief Player has timed protection from good.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Protection from good gives the player a chance to repel good monsters.
+ * @note (see file xtra2.c)
+ */
+extern bool set_protgood(int v);
+
+/** @fn set_protundead(int v)
+ * @brief Player has timed protection from undead.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Protection from undead protects against getting the Black Breath in a melee
+ * attack.
+ * @note (see file xtra2.c)
+ */
+extern bool set_protundead(int v);
+
+/** @fn set_invuln(int v)
+ * @brief Player has timed invulnerability.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Invulnerability prevents damage from walking on lava, walking the Straight
+ * Road, poison, cuts, and starvation. It gives +100 bonus to AC.
+ * @note
+ * It can be ended by the player attacking a monster, firing a missile,
+ * throwing an object, or activating a power.
+ * @note (see file xtra2.c)
+ */
+extern bool set_invuln(int v);
+
+/** @fn set_tim_invis(int v)
+ * @brief Player has timed "see invisibile".\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_invis(int v);
+
+/** @fn set_tim_infra(int v)
+ * @brief Player has timed infravision.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_tim_infra(int v);
+
+/** @fn set_mental_barrier(int v)
+ * @brief Player has timed mental barrier.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Mental barrier sustains intelligence and wisdom.
+ * @note (see file xtra2.c)
+ */
+extern bool set_mental_barrier(int v);
+
+/** @fn set_poison(int v)
+ * @brief Player has timed poison hands.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_poison(int v);
+
+/** @fn set_oppose_acid(int v)
+ * @brief Player has timed acid resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_acid(int v);
+
+/** @fn set_oppose_elec(int v)
+ * @brief Player has timed electricity resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_elec(int v);
+
+/** @fn set_oppose_fire(int v)
+ * @brief Player has timed fire resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_fire(int v);
+
+/** @fn set_oppose_cold(int v)
+ * @brief Player has timed cold resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_cold(int v);
+
+/** @fn set_oppose_pois(int v)
+ * @brief Player has timed poison resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_pois(int v);
+
+/** @fn set_oppose_ld(int v)
+ * @brief Player has timed light and dark resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_ld(int v);
+
+/** @fn set_oppose_cc(int v)
+ * @brief Player has timed chaos and confusion resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_cc(int v);
+
+/** @fn set_oppose_ss(int v)
+ * @brief Player has timed sound and shard resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_ss(int v);
+
+/** @fn set_oppose_nex(int v)
+ * @brief Player has timed nexus resistance.\n
+ * @param v Number \n time remaining until effect expires
+ * (must be in the range 0 to 10,000)
+ * @brief Time remaining
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note (see file xtra2.c)
+ */
+extern bool set_oppose_nex(int v);
+
+/** @fn set_stun(int v)
+ * @brief Player stun level changes.\n
+ * @param v Number \n the level of stun (must be in the range 0 to 10,000)
+ * @brief Stun level
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Note the special code to only notice "range" changes.
+ * @note
+ * Some races resist stunning.
+ * @note
+ * There is a v chance in 1000 or 1 in 16 that a stun will be the result of
+ * a vicious blow to the head. If so, the player will lose a point of
+ * intelligence, or wisdom, or both unless the stat is sustained.
+ * @note (see file xtra2.c)
+ */
+extern bool set_stun(int v);
+
+/** @fn set_cut(int v)
+ * @brief Player cut level changes.\n
+ * @param v Number \n the level of cut (must be in the range 0 to 10,000)
+ * @brief Cut level
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * Note the special code to only notice "range" changes.
+ * @note
+ * Some races resist cutting.
+ * @note
+ * There is a v chance in 1000 or 1 in 16 that a cut will result in scarrring.
+ * If so, the player will lose a point of charisma unless it is sustained.
+ * @note (see file xtra2.c)
+ */
+extern bool set_cut(int v);
+
+/** @fn set_food(int v)
+ * @brief Player hunger level changes.\n
+ * @param v Number \n the level of cut (must be in the range 0 to 10,000)
+ * @brief Cut level
+ * @return Boolean \n TRUE if player notices the effect, otherwise FALSE.
+ * @note
+ * The "p_ptr->food" variable can get as large as 20000, allowing the
+ * addition of the most "filling" item, Elvish Waybread, which adds
+ * 7500 food units, without overflowing the 32767 maximum limit.
+ * @note
+ * Perhaps we should disturb the player with various messages,
+ * especially messages about hunger status changes. XXX XXX XXX
+ * @note
+ * Digestion of food is handled in "dungeon.c", in which, normally,
+ * the player digests about 20 food units per 100 game turns, more
+ * when "fast", more when "regenerating", less with "slow digestion",
+ * but when the player is "gorged", he digests 100 food units per 10
+ * game turns, or a full 1000 food units per 100 game turns.
+ * @note
+ * Note that the player's speed is reduced by 10 units while gorged,
+ * so if the player eats a single food ration (5000 food units) when
+ * full (15000 food units), he will be gorged for (5000/100)*10 = 500
+ * game turns, or 500/(100/5) = 25 player turns (if nothing else is
+ * affecting the player speed).
+ * @note (see file xtra2.c)
+ */
+extern bool set_food(int v);
+
+/** @name Hunger flags
+ * @brief Player "food" crucial values
+ * @{ */
+/** @def PY_FOOD_MAX
+ * @note Food value (Bloated)
+ */
+#define PY_FOOD_MAX 15000
+/** @def PY_FOOD_FULL
+ * @note Food value (Normal)
+ */
+#define PY_FOOD_FULL 10000
+/** @def PY_FOOD_ALERT
+ * @note Food value (Hungry)
+ */
+#define PY_FOOD_ALERT 2000
+/** @def PY_FOOD_WEAK
+ * @note Food value (Weak)
+ */
+#define PY_FOOD_WEAK 1000
+/** @def PY_FOOD_FAINT
+ * @note Food value (Fainting)
+ */
+#define PY_FOOD_FAINT 500
+/** @def PY_FOOD_STARVE
+ * @note Food value (Starving)
+ */
+#define PY_FOOD_STARVE 100
+/** @} */
+
+/** @fn check_experience(void)
+ * @brief Check if player experience level has changed.\n
+ * @note
+ * If a player has achieved a level for the first time, give a corruption
+ * (1 chance in 3) if it applies, increase skill points, check ability levels,
+ * and add a note if notes are taken.
+ * @note (see file xtra2.c)
+ */
+extern void check_experience(void);
+
+/** @fn check_experience_obj(object_type *o_ptr)
+ * @brief Check if object "o_ptr" experience level has changed.\n
+ * @param *o_ptr object_type \n the object
+ * @brief Object
+ * @note
+ * If an object has achieved a level for the first time, apply gains.
+ * @note (see file xtra2.c)
+ */
+extern void check_experience_obj(object_type *o_ptr);
+
+/** @fn gain_exp(s32b amount)
+ * @brief Gain "amount" of experience.\n
+ * @param amount Number \n the experience points to gain.
+ * @brief Experience
+ * @note
+ * Count the number of objects which will gain experience. The objects share
+ * equally 2/3 of "amount". Give corruption if it applies. Gain experience.
+ * If experience is less than maximum, then increase maximum experience by 20%
+ * of "amount". Check for level change and print experience (check_experience).
+ * @note (see file xtra2.c)
+ */
+extern void gain_exp(s32b amount);
+
+/** @fn lose_exp(s32b amount)
+ * @brief Decrease experience by "amount".\n
+ * @param amount Number \n the experience points to lose.
+ * @brief Experience
+ * @note
+ * Experience can not fall below zero. Check for level change and print
+ * experience (check_experience).
+ * @note (see file xtra2.c)
+ */
+extern void lose_exp(s32b amount);
+
+/** @fn no_lite(void)
+ * @brief Return true if the player's grid is dark.
+ * @return Boolean \n TRUE if the player's grid is dark, otherwise FALSE.
+ * @note (see file cave.c)
+ */
+extern bool no_lite(void);
+
+/** @var dun_level
+ * @brief Number
+ * @note Current dungeon level
+ */
+extern s16b dun_level;
+
+
+/** @name Gods
+ * @{ */
+/** @def GOD_ALL */
+#define GOD_ALL -1
+
+/** @def GOD_NONE */
+#define GOD_NONE 0
+
+/** @def GOD_ERU */
+#define GOD_ERU 1
+
+/** @def GOD_MANWE */
+#define GOD_MANWE 2
+
+/** @def GOD_TULKAS */
+#define GOD_TULKAS 3
+
+/** @def GOD_MELKOR */
+#define GOD_MELKOR 4
+
+/** @def GOD_YAVANNA */
+#define GOD_YAVANNA 5
+/** @} */
+
+
+/** @fn inc_piety(int god, s32b amt)
+ * @brief Increase piety for god "god" by amount "amt".\n
+ * @param god Number \n the god
+ * @brief God
+ * @param amt Number \n the amount of piety
+ * @brief Piety
+ * @note
+ * If the player worships all gods, or "god", the piety (grace) will increase.
+ * @note (see file gods.c)
+ */
+extern void inc_piety(int god, s32b amt);
+
+/** @fn abandon_god(int god)
+ * @brief Player renounces their religion.\n
+ * @param god Number \n the god
+ * @brief God
+ * @note
+ * If the player worships all gods or "god", the player worships no god and
+ * the piety score is set to 0.
+ * @note (see file gods.c)
+ */
+extern void abandon_god(int god);
+
+/** @fn wisdom_scale(int max)
+ * @brief Rescale the wisdom value to a 0 <-> max range.\n
+ * @param max Number \n the new maximum value of the rescaled wisdom
+ * @brief New maximum wisdom
+ * @return Number \n The rescaled value of player wisdom.
+ * @note (see file gods.c)
+ */
+extern int wisdom_scale(int max);
+
+/** @fn follow_god(int god, bool silent)
+ * @brief Player starts to follow god "god".\n
+ * @param god Number \n the god
+ * @brief God
+ * @param silent Boolean \n TRUE if Melkor message is displayed, otherwise
+ * FALSE.
+ * @brief Show message?
+ * @note
+ * Unbelievers can not follow a god.
+ * @note
+ * If the player does not worship a god, they start worshipping "god". If the
+ * god is Melkor, the player gains the Udun skill (show a message if silent is
+ * FALSE).
+ * @note (see file gods.c)
+ */
+extern void follow_god(int god, bool silent);
+
+/** @fn add_new_gods(char *name)
+ * @brief Add a new god to the deity array.\n
+ * @param *name String \n the name of the god
+ * @brief God name
+ * @return Number \n The index of the new god inthe deity array.
+ * @note (see file lua_bind.c)
+ */
+extern s16b add_new_gods(char *name);
+
+/** @fn desc_god(int g_idx, int d, char *desc)
+ * @brief Return line "d" of the description of god with god index "g_idx".\n
+ * @param g_idx Number \n the index of god in the deity array.
+ * @brief God index
+ * @param d Number \n the line of the description
+ * (must be in the range 0 to 9).
+ * @brief Line of description
+ * @param *desc String
+ * @brief Description
+ * @return *desc String \n Line "d" of the god description.
+ * @note (see file lua_bind.c)
+ */
+extern void desc_god(int g_idx, int d, char *desc);
+
+/** @name Powers
+ * @{ */
+/** @def PWR_SPIT_ACID
+ * @note Spit acid (GF_ACID) */
+#define PWR_SPIT_ACID 0
+
+/** @def PWR_BR_FIRE
+ * @note Breathe fire (GF_FIRE) */
+#define PWR_BR_FIRE 1
+
+/** @def PWR_HYPN_GAZE
+ * @note Hypnotic gaze */
+#define PWR_HYPN_GAZE 2
+
+/** @def PWR_TELEKINES
+ * @note Telekinesis (fetch an object) */
+#define PWR_TELEKINES 3
+
+/** @def PWR_VTELEPORT
+ * @note Teleport */
+#define PWR_VTELEPORT 4
+
+/** @def PWR_MIND_BLST
+ * @note Mind blast (GF_PSI) */
+#define PWR_MIND_BLST 5
+
+/** @def PWR_RADIATION
+ * @note Emit radiation (GF_NUKE) */
+#define PWR_RADIATION 6
+
+/** @def PWR_VAMPIRISM
+ * @note Vampire bite */
+#define PWR_VAMPIRISM 7
+
+/** @def PWR_SMELL_MET
+ * @note Detect treasure */
+#define PWR_SMELL_MET 8
+
+/** @def PWR_SMELL_MON
+ * @note Detect normal monsters */
+#define PWR_SMELL_MON 9
+
+/** @def PWR_BLINK
+ * @note Short teleport (up to 10 grids) */
+#define PWR_BLINK 10
+
+/** @def PWR_EAT_ROCK
+ * @note Eat rock for food (wall to mud) */
+#define PWR_EAT_ROCK 11
+
+/** @def PWR_SWAP_POS
+ * @note Swap position with a monster */
+#define PWR_SWAP_POS 12
+
+/** @def PWR_SHRIEK
+ * @note Shriek (GF_SOUND and aggravate) */
+#define PWR_SHRIEK 13
+
+/** @def PWR_ILLUMINE
+ * @note Lite area */
+#define PWR_ILLUMINE 14
+
+/** @def PWR_DET_CURSE
+ * @note Detect cursed items in inventory */
+#define PWR_DET_CURSE 15
+
+/** @def PWR_BERSERK
+ * @note Berserk rage */
+#define PWR_BERSERK 16
+
+/** @def PWR_POLYMORPH
+ * @note Polymorph self */
+#define PWR_POLYMORPH 17
+
+/** @def PWR_MIDAS_TCH
+ * @note Midas touch - turn an item into gold */
+#define PWR_MIDAS_TCH 18
+
+/** @def PWR_GROW_MOLD
+ * @note Summon mold */
+#define PWR_GROW_MOLD 19
+
+/** @def PWR_RESIST
+ * @note Temporary elemental resist */
+#define PWR_RESIST 20
+
+/** @def PWR_EARTHQUAKE
+ * @note Cause an earthquake (destruction) */
+#define PWR_EARTHQUAKE 21
+
+/** @def PWR_EAT_MAGIC
+ * @note Absorb energy from magic items */
+#define PWR_EAT_MAGIC 22
+
+/** @def PWR_WEIGH_MAG
+ * @note Report magic affecting player */
+#define PWR_WEIGH_MAG 23
+
+/** @def PWR_STERILITY
+ * @note Player experiences forced abstinence */
+#define PWR_STERILITY 24
+
+/** @def PWR_PANIC_HIT
+ * @note Hit a monster and run away */
+#define PWR_PANIC_HIT 25
+
+/** @def PWR_DAZZLE
+ * @note Stun, confuse, and turn monsters */
+#define PWR_DAZZLE 26
+
+/** @def PWR_DARKRAY
+ * @note Fire a beam of light (GF_LITE) */
+#define PWR_DARKRAY 27
+
+/** @def PWR_RECALL
+ * @note Recall to dungeon/town */
+#define PWR_RECALL 28
+
+/** @def PWR_BANISH
+ * @note Banish evil creatures */
+#define PWR_BANISH 29
+
+/** @def PWR_COLD_TOUCH
+ * @note Bolt of cold (GF_COLD) */
+#define PWR_COLD_TOUCH 30
+
+/** @def PWR_LAUNCHER
+ * @note Increase the multiplier for a thrown object */
+#define PWR_LAUNCHER 31
+
+/** @def PWR_PASSWALL
+ * @note Walk through a wall */
+#define PWR_PASSWALL 32
+
+/** @def PWR_DETECT_TD
+ * @note Detect traps, doors, and stairs */
+#define PWR_DETECT_TD 33
+
+/** @def PWR_COOK_FOOD
+ * @note Create some food */
+#define PWR_COOK_FOOD 34
+
+/** @def PWR_UNFEAR
+ * @note Remove fear */
+#define PWR_UNFEAR 35
+
+/** @def PWR_EXPL_RUNE
+ * @note Set an explosive rune */
+#define PWR_EXPL_RUNE 36
+
+/** @def PWR_STM
+ * @note Bash a wall (stone to mud) */
+#define PWR_STM 37
+
+/** @def PWR_POIS_DART
+ * @note Throw a poison dart (GF_POIS) */
+#define PWR_POIS_DART 38
+
+/** @def PWR_MAGIC_MISSILE
+ * @note Fire a magic missile (GF_MISSILE) */
+#define PWR_MAGIC_MISSILE 39
+
+/** @def PWR_GROW_TREE
+ * @note Grow trees around the player */
+#define PWR_GROW_TREE 40
+
+/** @def PWR_BR_COLD
+ * @note Breathe cold (GF_COLD) */
+#define PWR_BR_COLD 41
+
+/** @def PWR_BR_CHAOS
+ * @note Breathe chaos (GF_CHAOS) */
+#define PWR_BR_CHAOS 42
+
+/** @def PWR_BR_ELEM
+ * @note Breath elements (GF_MISSILE) */
+#define PWR_BR_ELEM 43
+
+/** @def PWR_WRECK_WORLD
+ * @note Change the world (new level) */
+#define PWR_WRECK_WORLD 44
+
+/** @def PWR_SCARE
+ * @note Howl to scare monsters */
+#define PWR_SCARE 45
+
+/** @def PWR_REST_LIFE
+ * @note Restore life levels */
+#define PWR_REST_LIFE 46
+
+/** @def PWR_SUMMON_MONSTER
+ * @note Beastmaster powers (summon pets) */
+#define PWR_SUMMON_MONSTER 47
+
+/** @def PWR_NECRO
+ * @note Cast a necromancy spell */
+#define PWR_NECRO 48
+
+/** @def PWR_ROHAN
+ * @note Use flash aura or light speed jump */
+#define PWR_ROHAN 49
+
+/** @def PWR_THUNDER
+ * @note Use thunder strike, ride the straight road, or go back in town */
+#define PWR_THUNDER 50
+
+/** @def PWR_DEATHMOLD
+ * @note Use deathmold powers:\n
+ * (a) Teleport to a specific place\n
+ * (b) Fetch an item\n
+ * (c) Go up 50'\n
+ * (d) Go down 50'
+ */
+#define PWR_DEATHMOLD 51
+
+/** @def PWR_HYPNO
+ * @note Hypnotise a pet */
+#define PWR_HYPNO 52
+
+/** @def PWR_UNHYPNO
+ * @note Unhypnotise a pet */
+#define PWR_UNHYPNO 53
+
+/** @def PWR_INCARNATE
+ * @note Incarnate into a body */
+#define PWR_INCARNATE 54
+
+/** @def PWR_MAGIC_MAP
+ * @note Magic mapping */
+#define PWR_MAGIC_MAP 55
+
+/** @def PWR_LAY_TRAP
+ * @note Set a trap */
+#define PWR_LAY_TRAP 56
+
+/** @def PWR_MERCHANT
+ * @note Appraise item, warp item, or identify item */
+#define PWR_MERCHANT 57
+
+/** @def PWR_COMPANION
+ * @note Create a companion */
+#define PWR_COMPANION 58
+
+/** @def PWR_BEAR
+ * @note Mimic a bear */
+#define PWR_BEAR 59
+
+/** @def PWR_DODGE
+ * @note Report chance of dodging a monster */
+#define PWR_DODGE 60
+
+/** @def PWR_BALROG
+ * @note Mimic a balrog */
+#define PWR_BALROG 61
+/** @} */
+
+/* Misc */
+/** @fn do_cmd_throw(void)
+ * @brief Throw an object from the pack or floor.
+ * @note
+ * Note: "unseen" monsters are very hard to hit.
+ * @note
+ * Should throwing a weapon do full damage? Should it allow the magic
+ * to hit bonus of the weapon to have an effect? Should it ever cause
+ * the item to be destroyed? Should it do any damage at all?
+ * @note (see file cmd2.c)
+ */
+extern void do_cmd_throw(void);
+
+/** @fn change_wild_mode()
+ * @brief Toggle between big map and little map.
+ * @note
+ * If the player is immovable, and the map is big, the player receives a
+ * warning and is allowed to proceed.
+ * @note
+ * If the player is about to be recalled, and the map is big, the map is
+ * not changed.
+ * @note
+ * The map is changed. The game is saved if autosave is set to "levels".
+ * @note (see file spells2.c)
+ */
+extern void change_wild_mode();
+
+/** @fn switch_class(int sclass)
+ * @brief Change to an other class.\n
+ * @param sclass Number \n the inex of the new class in the class array
+ * @brief Class index
+ * @note (see file xtra2.c)
+ */
+extern void switch_class(int sclass);
+
+/** @fn switch_subclass(int sclass)
+ * @brief Change to an other subclass.\n
+ * @param sclass Number \n the new subclass
+ * @brief Subclass
+ * @note (see file xtra2.c)
+ */
+extern void switch_subclass(int sclass);
+
+/** @fn switch_subrace(int racem, bool copy_old)
+ * @brief Change to an other subrace.\n
+ * @param racem Number \n index of subrace in subrace array
+ * @brief Subrace index
+ * @param copy_old Boolean \n TRUE if the new subrace is to be saved,
+ * otherwise FALSE.
+ * @brief Copy old subrace?
+ * @note (see file xtra2.c)
+ */
+extern void switch_subrace(int racem, bool copy_old);
+
+/** @fn get_subrace_title(int racem)
+ * @brief Return the subrace title.\n
+ * @param racem Number \n index of subrace in subrace array
+ * @brief Subrace index
+ * @return String \n Title of subrace.
+ * @note (see file xtra2.c)
+ */
+extern cptr get_subrace_title(int racem);
+
+/** @fn set_subrace_title(int racem, cptr name)
+ * @brief Set the subrace title.\n
+ * @param racem Number \n index of subrace in subrace array
+ * @brief Subrace index
+ * @param name String \n new title of subrace
+ * @brief New title
+ * @note (see file xtra2.c)
+ */
+extern void set_subrace_title(int racem, cptr name);
+
+/** @fn do_rebirth()
+ * @brief The player is reborn after a class, race, or subrace change.
+ * @note
+ * The experience factor is recalculated. The hit dice are reset and new HP
+ * are calculated. There may be a level change involved.
+ * @note (see file xtra2.c)
+ */
+extern void do_rebirth();
+
+/* Player race flags */
+$static bool lua_test_race_flags(int slot, u32b flags) { if (slot == 1) return (PRACE_FLAG(flags)) ? TRUE : FALSE; else return (PRACE_FLAG2(flags)) ? TRUE : FALSE; }
+/** @fn test_race_flags(int slot, u32b flags);
+ * @brief Test flag "flags" against race flags, race modifier flags, class
+ * flags, and specialist flags.\n
+ * @param slot Number \n 1 if testing against first set of flags (PRACE_FLAG),
+ * 2 if testing against second set of flags (PRACE_FLAG2)
+ * @brief Flag selecter.
+ * @param flags Number \n the flags to be tested
+ * @brief Test flags
+ * @return Boolean \n TRUE if test flags match any of the corresponding race,
+ * race modifier, class, and specialist flags.
+ * @note (see file w_player.c)
+ */
+static bool lua_test_race_flags@test_race_flags(int slot, u32b flags);
+
+/** @name Winner states
+ * @{ */
+/** @def WINNER_NORMAL
+ * @note Player has killed Morgoth */
+#define WINNER_NORMAL 1
+
+/** @def WINNER_ULTRA
+ * @note Player has killed Melkor */
+#define WINNER_ULTRA 2
+/** @} */
+
+/** @var wizard
+ * @brief Boolean
+ * @note TRUE if player currently in Wizard mode, otherwise FALSE.
+ */
+extern bool wizard;
+
+/** @var total_winner
+ * @brief Number
+ * @note Game has been won (see WINNER_foo fields).
+ */
+extern u16b total_winner;
+
+/** @var has_won
+ * @brief Number
+ * @note Game has been won (see WINNER_foo fields).
+ */
+extern u16b has_won;
+
+/** @var joke_monsters
+ * @brief Boolean
+ * @note TRUE if allowing joke monsters, otherwise FALSE.
+ */
+extern bool joke_monsters;
+
+extern s16b max_dlv[999999];