diff options
Diffstat (limited to 'src/defines.h')
-rw-r--r-- | src/defines.h | 4695 |
1 files changed, 4695 insertions, 0 deletions
diff --git a/src/defines.h b/src/defines.h new file mode 100644 index 00000000..850bbc7a --- /dev/null +++ b/src/defines.h @@ -0,0 +1,4695 @@ +/* File: defines.h */ + +/* Purpose: global constants and macro definitions */ + + +/* + * Do not edit this file unless you know *exactly* what you are doing. + * + * Some of the values in this file were chosen to preserve game balance, + * while others are hard-coded based on the format of old save-files, the + * definition of arrays in various places, mathematical properties, fast + * computation, storage limits, or the format of external text files. + * + * Changing some of these values will induce crashes or memory errors or + * savefile mis-reads. Most of the comments in this file are meant as + * reminders, not complete descriptions, and even a complete knowledge + * of the source may not be sufficient to fully understand the effects + * of changing certain definitions. + * + * Lastly, note that the code does not always use the symbolic constants + * below, and sometimes uses various hard-coded values that may not even + * be defined in this file, but which may be related to definitions here. + * This is of course bad programming practice, but nobody is perfect... + * + * For example, there are MANY things that depend on the screen being + * 80x24, with the top line used for messages, the bottom line being + * used for status, and exactly 22 lines used to show the dungeon. + * Just because your screen can hold 46 lines does not mean that the + * game will work if you try to use 44 lines to show the dungeon. + * + * You have been warned. + */ + + +/* + * Release state, CVS or not, remember to switch it when making releases + */ + +#ifndef IS_CVS +#define IS_CVS " (ah)" +/* #define IS_CVS " (ah, git)" */ +#endif + +#define USER_PATH_VERSION "/2.3" + +#define ANGBAND_2_8_1 + +#define SAVEFILE_VERSION 104 + +/* + * This value is not currently used + */ +#define VERSION_EXTRA 0 + +/* + * Maximum amount of Angband windows. + */ +#define ANGBAND_TERM_MAX 8 + +/* + * Number of grids in each block (vertically) + * Probably hard-coded to 11, see "generate.c" + */ +#define BLOCK_HGT 11 + +/* + * Number of grids in each block (horizontally) + * Probably hard-coded to 11, see "generate.c" + */ +#define BLOCK_WID 11 + + +/* + * Number of grids in each panel (vertically) + * Must be a multiple of BLOCK_HGT + */ +#define PANEL_HGT 11 + +/* + * Number of grids in each panel (horizontally) + * Must be a multiple of BLOCK_WID + */ +#define PANEL_WID 33 + + +/* + * Number of grids used to display the dungeon (vertically). + * Must be a multiple of 11, probably hard-coded to 22. + */ +#define SCREEN_HGT 22 + +/* + * Number of grids used to display the dungeon (horizontally). + * Must be a multiple of 33, probably hard-coded to 66. + */ +#define SCREEN_WID 66 + + +/* + * Maximum dungeon height in grids, must be a multiple of SCREEN_HGT, + * probably hard-coded to SCREEN_HGT * 3. + */ +#define MAX_HGT 66 + +/* + * Maximum dungeon width in grids, must be a multiple of SCREEN_WID, + * probably hard-coded to SCREEN_WID * 3. + */ +#define MAX_WID 198 + +/* Used only in object3.c / trap effects */ +#if ((MAX_HGT / SCREEN_HGT) < (MAX_WID / SCREEN_WID)) + #define RATIO (MAX_WID / SCREEN_WID) +#else + #define RATIO (MAX_HGT / SCREEN_HGT) +#endif + +/* + * Default radius of detection spells + * Its area must be at least as large as SCREEN_WID * SCREEN_HGT + */ +#define DEFAULT_RADIUS 25 + + +#define CHANCE_TRAP_JAMMED_DOOR 2500 +#define CHANCE_TRAP_SECRET_DOOR 1500 +#define CHANCE_TRAP_LOCKED_DOOR 1000 +#define CHANCE_TRAP_DOOR 500 /* in 10000 */ +#define CHANCE_TRAP_FLOOR 4 /* in 10000 chance of placing a trap */ + +#define MAX_BOUNTIES 24 + +#define MAX_SPELLS 100 +#define MAX_RUNES 100 + +/* + * Arena constants + */ +#define MAX_ARENA_MONS 29 /* -KMW- */ + +/* + * Total number of stores (see "store.c", etc) + */ +#define STORE_GENERAL 0 +#define STORE_ARMOURY 1 +#define STORE_WEAPON 2 +#define STORE_TEMPLE 3 +#define STORE_ALCHEMIST 4 +#define STORE_MAGIC 5 +#define STORE_BLACK 6 +#define STORE_HOME 7 +#define STORE_BOOK 8 +#define STORE_PET 9 + +/* + * Maximum number of player "sex" types (see "table.c", etc) + */ +#define MAX_SEXES 3 + +/* The number of "patrons" available (for Chaos Warriors) */ +#define MAX_PATRON 16 + +/* Number of Random Artifacts */ +#define MAX_RANDARTS 84 +#define MAX_T_ACT 51 + +/* Chaos Warrior: Reward types: */ +#define REW_POLY_SLF 0 +#define REW_GAIN_EXP 1 +#define REW_LOSE_EXP 2 +#define REW_GOOD_OBJ 3 +#define REW_GREA_OBJ 4 +#define REW_CHAOS_WP 5 +#define REW_GOOD_OBS 6 +#define REW_GREA_OBS 7 +#define REW_TY_CURSE 8 +#define REW_SUMMON_M 9 +#define REW_H_SUMMON 10 +#define REW_DO_HAVOC 11 +#define REW_GAIN_ABL 12 +#define REW_LOSE_ABL 13 +#define REW_RUIN_ABL 14 +#define REW_AUGM_ABL 15 +#define REW_POLY_WND 16 +#define REW_HEAL_FUL 17 +#define REW_HURT_LOT 18 +#define REW_CURSE_WP 19 +#define REW_CURSE_AR 20 +#define REW_PISS_OFF 21 +#define REW_WRATH 22 +#define REW_DESTRUCT 23 +#define REW_GENOCIDE 24 +#define REW_MASS_GEN 25 +#define REW_DISPEL_C 26 +#define REW_UNUSED_1 27 +#define REW_UNUSED_2 28 +#define REW_UNUSED_3 29 +#define REW_UNUSED_4 30 +#define REW_UNUSED_5 31 +#define REW_IGNORE 32 +#define REW_SER_UNDE 33 +#define REW_SER_DEMO 34 +#define REW_SER_MONS 35 + + +/* bear barehanded attacks ... */ +#define MAX_BEAR 8 + +/* Monk martial arts... */ +#define MAX_MA 17 + +#define MA_KNEE 0x0001 +#define MA_SLOW 0x0002 +#define MA_WOUND 0x0004 +#define MA_STUN 0x0008 +#define MA_FULL_SLOW 0x0010 + +/* Mindcraft */ +#define MAX_MINDCRAFT_POWERS 12 + +/* Necromancy */ +#define MAX_NECRO_POWERS 6 + +/* Mimicry */ +#define MAX_MIMIC_POWERS 5 + +/* Symbiosis */ +#define MAX_SYMBIOTIC_POWERS 9 + + +/* A hack for cave.c */ +#define BMP_FIRST_PC_CLASS 164 +#define BMP_FIRST_PC_RACE 128 + + +/* + * Size of memory reserved for initialization of some arrays + */ +#define FAKE_NAME_SIZE 40 * 1024L +#define FAKE_TEXT_SIZE 120 * 1024L + + +/* + * Maximum number of high scores in the high score file + */ +#define MAX_HISCORES 100 + + +/* + * Maximum dungeon level. The player can never reach this level + * in the dungeon, and this value is used for various calculations + * involving object and monster creation. It must be at least 100. + * Setting it below 128 may prevent the creation of some objects. + */ +#define MAX_DEPTH 128 +#define MAX_DEPTH_MONSTER 200 + + +/* + * Maximum size of the "lite" array (see "cave.c") + * Note that the "lite radius" will NEVER exceed 5, and even if the "lite" + * was rectangular, we would never require more than 128 entries in the array. + */ +#define LITE_MAX 1536 + +/* + * Maximum size of the "view" array (see "cave.c") + * Note that the "view radius" will NEVER exceed 20, and even if the "view" + * was octagonal, we would never require more than 1520 entries in the array. + */ +#define VIEW_MAX 1536 + +/* + * Maximum size of the "temp" array (see "cave.c") + * We must be as large as "VIEW_MAX" and "LITE_MAX" for proper functioning + * of "update_view()" and "update_lite()". We must also be as large as the + * largest illuminatable room, but no room is larger than 800 grids. We + * must also be large enough to allow "good enough" use as a circular queue, + * to calculate monster flow, but note that the flow code is "paranoid". + */ +#define TEMP_MAX 16384 + + +/* + * Number of keymap modes + */ +#define KEYMAP_MODES 2 + +/* + * Mode for original keyset commands + */ +#define KEYMAP_MODE_ORIG 0 + +/* + * Mode for roguelike keyset commands + */ +#define KEYMAP_MODE_ROGUE 1 + + +/* + * OPTION: Maximum number of macros (see "io.c") + * Default: assume at most 256 macros are used + */ +#define MACRO_MAX 256 + +/* + * OPTION: Maximum number of "quarks" (see "io.c") + * Default: assume at most 512 different inscriptions are used + */ +#define QUARK_MAX 768 + /* Was 512... 256 quarks added for random artifacts */ + +/* + * OPTION: Maximum number of messages to remember (see "io.c") + * Default: assume maximal memorization of 2048 total messages + */ +#define MESSAGE_MAX 2048 + +#define MESSAGE_NONE 0 +#define MESSAGE_MSG 1 + +/* + * OPTION: Maximum space for the message text buffer (see "io.c") + * Default: assume that each of the 2048 messages is repeated an + * average of three times, and has an average length of 48 + */ +#define MESSAGE_BUF 32768 + + +/* + * Maximum value storable in a "byte" (hard-coded) + */ +#define MAX_UCHAR 255 + +/* + * Maximum value storable in a "s16b" (hard-coded) + */ +#define MAX_SHORT 32767 + + +/* + * Store constants + */ +#define STORE_INVEN_MAX 255 /* Max number of discrete objs in inven */ +#define STORE_CHOICES 56 /* Number of items to choose stock from */ +#define STORE_OBJ_LEVEL 5 /* Magic Level for normal stores */ +#define STORE_TURNOVER 9 /* Normal shop turnover, per day */ +#define STORE_MIN_KEEP 6 /* Min slots to "always" keep full */ +#define STORE_MAX_KEEP 18 /* Max slots to "always" keep full */ +#define STORE_SHUFFLE 21 /* 1/Chance (per day) of an owner changing */ +#define STORE_TURNS 1000 /* Number of turns between turnovers */ + +/* + * Misc constants + */ +#define DAY 11520 /* Number of turns per day */ +#define YEAR (DAY * 365) /* Number of turns per year */ +#define HOUR (DAY / 24) /* Number of turns per hour */ +#define MINUTE (HOUR / 60) /* Number of turns per minute */ +#define DAY_START (HOUR * 6) /* Sunrise */ +#define START_YEAR 2890 /* Bilbo birthday year */ +#define START_DAY (DAY * (42 + 127)) /* Bilbo birthday */ + +#define BREAK_GLYPH 550 /* Rune of protection resistance */ +#define BREAK_MINOR_GLYPH 99 /* For explosive runes */ +#define BTH_PLUS_ADJ 3 /* Adjust BTH per plus-to-hit */ +#define MON_MULT_ADJ 10 /* High value slows multiplication */ +#define MON_SUMMON_ADJ 2 /* Adjust level of summoned creatures */ +#define MON_DRAIN_LIFE 2 /* Percent of player exp drained per hit */ +#define USE_DEVICE 3 /* x> Harder devices x< Easier devices */ + +#define BIAS_ELEC 1 /* "Biases" for random artifact gen */ +#define BIAS_POIS 2 +#define BIAS_FIRE 3 +#define BIAS_COLD 4 +#define BIAS_ACID 5 +#define BIAS_STR 6 +#define BIAS_INT 7 +#define BIAS_WIS 8 +#define BIAS_DEX 9 +#define BIAS_CON 10 +#define BIAS_CHR 11 +#define BIAS_CHAOS 12 +#define BIAS_PRIESTLY 13 +#define BIAS_NECROMANTIC 14 +#define BIAS_LAW 15 +#define BIAS_ROGUE 16 +#define BIAS_MAGE 17 +#define BIAS_WARRIOR 18 +#define BIAS_RANGER 19 + +/* + * Location of objects when they were found + */ +#define OBJ_FOUND_MONSTER 1 +#define OBJ_FOUND_FLOOR 2 +#define OBJ_FOUND_VAULT 3 +#define OBJ_FOUND_SPECIAL 4 +#define OBJ_FOUND_RUBBLE 5 +#define OBJ_FOUND_REWARD 6 +#define OBJ_FOUND_STORE 7 +#define OBJ_FOUND_STOLEN 8 +#define OBJ_FOUND_SELFMADE 9 +/* + * There is a 1/20 (5%) chance of inflating the requested object_level + * during the creation of an object (see "get_obj_num()" in "object.c"). + * Lower values yield better objects more often. + */ +#define GREAT_OBJ 20 + +#define GREAT_EGO 20 + +/* + * There is a 1/50 (2%) chance of inflating the requested monster_level + * during the creation of a monsters (see "get_mon_num()" in "monster.c"). + * Lower values yield harder monsters more often. + */ +#define NASTY_MON 50 /* 1/chance of inflated monster level */ + + + +/* + * Refueling constants + */ +#define FUEL_TORCH 5000 /* Maximum amount of fuel in a torch */ +#define FUEL_LAMP 15000 /* Maximum amount of fuel in a lantern */ + + +/* + * More maximum values + */ +#define MAX_SIGHT 20 /* Maximum view distance */ +#define MAX_RANGE 18 /* Maximum range (spells, etc) */ + + + +/* + * The town starts out with 4 residents during the day + */ +#define MIN_M_ALLOC_TD 4 + +/* + * The town starts out with 8 residents during the night + */ +#define MIN_M_ALLOC_TN 8 + + +/* + * A monster can only "multiply" (reproduce) if there are fewer than 100 + * monsters on the level capable of such spontaneous reproduction. This + * is a hack which prevents the "m_list[]" array from exploding due to + * reproducing monsters. Messy, but necessary. + */ +#define MAX_REPRO 100 + + +/* + * Player constants + */ +#define SUBRACE_SAVE 9 /* Ugly hack, should be in foo-info, the subrace saved to the savefile */ +#define PY_MAX_EXP 99999999L /* Maximum exp */ +#define PY_MAX_GOLD 999999999L /* Maximum gold */ +#define PY_MAX_LEVEL 50 /* Maximum level */ + +/* + * Player "food" crucial values + */ +#define PY_FOOD_MAX 15000 /* Food value (Bloated) */ +#define PY_FOOD_FULL 10000 /* Food value (Normal) */ +#define PY_FOOD_ALERT 2000 /* Food value (Hungry) */ +#define PY_FOOD_WEAK 1000 /* Food value (Weak) */ +#define PY_FOOD_FAINT 500 /* Food value (Fainting) */ +#define PY_FOOD_STARVE 100 /* Food value (Starving) */ + +/* + * Player regeneration constants + */ +#define PY_REGEN_NORMAL 197 /* Regen factor*2^16 when full */ +#define PY_REGEN_WEAK 98 /* Regen factor*2^16 when weak */ +#define PY_REGEN_FAINT 33 /* Regen factor*2^16 when fainting */ +#define PY_REGEN_HPBASE 1442 /* Min amount hp regen*2^16 */ +#define PY_REGEN_MNBASE 524 /* Min amount mana regen*2^16 */ + +/* + * Maximum number of "normal" pack slots, and the index of the "overflow" + * slot, which can hold an item, but only temporarily, since it causes the + * pack to "overflow", dropping the "last" item onto the ground. Since this + * value is used as an actual slot, it must be less than "INVEN_WIELD" (below). + * Note that "INVEN_PACK" is probably hard-coded by its use in savefiles, and + * by the fact that the screen can only show 23 items plus a one-line prompt. + */ +#define INVEN_PACK 23 + +/* + * Body parts + */ +#define BODY_WEAPON 0 +#define BODY_TORSO 1 +#define BODY_ARMS 2 +#define BODY_FINGER 3 +#define BODY_HEAD 4 +#define BODY_LEGS 5 +#define BODY_MAX 6 + +/* + * Indexes used for various "equipment" slots (hard-coded by savefiles, etc). + */ +#define INVEN_WIELD 24 /* 3 weapons -- WEAPONS */ +#define INVEN_BOW 27 /* 1 bow -- WEAPON */ +#define INVEN_RING 28 /* 6 rings -- FINGER */ +#define INVEN_NECK 34 /* 2 amulets -- HEAD */ +#define INVEN_LITE 36 /* 1 lite -- TORSO */ +#define INVEN_BODY 37 /* 1 body -- TORSO */ +#define INVEN_OUTER 38 /* 1 cloak -- TORSO */ +#define INVEN_ARM 39 /* 3 arms -- ARMS */ +#define INVEN_HEAD 42 /* 2 heads -- HEAD */ +#define INVEN_HANDS 44 /* 3 hands -- ARMS */ +#define INVEN_FEET 47 /* 2 feets -- LEGS */ +#define INVEN_CARRY 49 /* 1 carried monster -- TORSO */ +#define INVEN_AMMO 50 /* 1 quiver -- TORSO */ +#define INVEN_TOOL 51 /* 1 tool -- ARMS */ + +/* + * Total number of inventory slots (hard-coded). + */ +#define INVEN_TOTAL 52 +#define INVEN_EQ (INVEN_TOTAL - INVEN_WIELD) + +/* + * A "stack" of items is limited to less than 100 items (hard-coded). + */ +#define MAX_STACK_SIZE 100 + + + +/* + * Indexes of the various "stats" (hard-coded by savefiles, etc). + */ +#define A_STR 0 +#define A_INT 1 +#define A_WIS 2 +#define A_DEX 3 +#define A_CON 4 +#define A_CHR 5 + +/* + * Player sex constants (hard-coded by save-files, arrays, etc) + */ +#define SEX_FEMALE 0 +#define SEX_MALE 1 +#define SEX_NEUTER 2 + + +/* Race flags */ +#define PR1_EXPERIMENTAL 0x00000001L /* Is still under developemnt */ +/* XXX */ +#define PR1_RESIST_BLACK_BREATH 0x00000004L /* Resist black breath */ +#define PR1_NO_STUN 0x00000008L /* Never stunned */ +#define PR1_XTRA_MIGHT_BOW 0x00000010L /* Xtra might with bows */ +#define PR1_XTRA_MIGHT_XBOW 0x00000020L /* Xtra might with xbows */ +#define PR1_XTRA_MIGHT_SLING 0x00000040L /* Xtra might with slings */ +#define PR1_AC_LEVEL 0x00000080L /* More AC with levels */ +#define PR1_HURT_LITE 0x00000100L /* Hurt by light */ +#define PR1_VAMPIRE 0x00000200L /* Vampire */ +#define PR1_UNDEAD 0x00000400L /* Undead */ +#define PR1_NO_CUT 0x00000800L /* no cuts */ +#define PR1_CORRUPT 0x00001000L /* hack-- corrupted */ +#define PR1_NO_FOOD 0x00002000L /* little gain from food */ +#define PR1_NO_GOD 0x00004000L /* cannot worship */ +/* XXX */ +#define PR1_ELF 0x00010000L /* Is an elf */ +#define PR1_SEMI_WRAITH 0x00020000L /* Takes damage when going in walls */ +#define PR1_NO_SUBRACE_CHANGE 0x00040000L /* Impossible to change subrace */ +/* XXX */ +#define PR1_ANTIMAGIC 0x00100000L /* antimagic ... hack */ +#define PR1_MOLD_FRIEND 0x00200000L /* Not attacked by molds wielded */ +#define PR1_GOD_FRIEND 0x00400000L /* Better grace */ +/* XXX */ +#define PR1_INNATE_SPELLS 0x01000000L /* KNown all spells, only need books */ +/* XXX */ +/* XXX */ +#define PR1_EASE_STEAL 0x08000000L /* Gain xp by stealing */ +/* XXX */ +/* XXX */ +/* XXX */ +/* XXX */ + +/* XXX */ +#define PR2_ASTRAL 0x00000002L /* Is it an astral being coming from th halls of mandos ? */ +/* XXX */ + +#define PRACE_FLAG2(f) ((rp_ptr->flags2 | rmp_ptr->flags2 | cp_ptr->flags2 | spp_ptr->flags2) & (f)) +#define PRACE_FLAG(f) ((rp_ptr->flags1 | rmp_ptr->flags1 | cp_ptr->flags1 | spp_ptr->flags1) & (f)) +#define PRACE_FLAGS(f) PRACE_FLAG(f) + +/* XXX */ +#define MKEY_MINDCRAFT 2 +#define MKEY_ANTIMAGIC 3 +#define MKEY_BLADE 4 +#define MKEY_ALCHEMY 5 +#define MKEY_MIMIC 6 +#define MKEY_NECRO 7 +#define MKEY_POWER_MAGE 8 +#define MKEY_RUNE 9 +#define MKEY_FORGING 10 +#define MKEY_INCARNATION 11 +#define MKEY_TELEKINESIS 12 +#define MKEY_SUMMON 13 +#define MKEY_TRAP 14 +#define MKEY_STEAL 15 +#define MKEY_DODGE 16 +#define MKEY_SCHOOL 17 +#define MKEY_LEARN 18 +#define MKEY_COPY 19 +#define MKEY_SYMBIOTIC 20 +#define MKEY_BOULDER 21 +#define MKEY_COMPANION 22 +#define MKEY_PIERCING 23 + + +/*** Screen Locations ***/ + +/* + * Some screen locations for various display routines + * Currently, row 8 and 15 are the only "blank" rows. + * That leaves a "border" around the "stat" values. + */ + +#define ROW_MAP 1 +#define COL_MAP 13 /* Dungeon map */ + +#define ROW_RACE 1 +#define COL_RACE 0 /* <race name> */ + +#define ROW_CLASS 2 +#define COL_CLASS 0 /* <class name> */ + +#define ROW_TITLE 3 +#define COL_TITLE 0 /* <title> or <mode> */ + +#define ROW_LEVEL 4 +#define COL_LEVEL 0 /* "LEVEL xxxxxx" */ + +#define ROW_EXP 5 +#define COL_EXP 0 /* "EXP xxxxxxxx" */ + +#define ROW_GOLD 6 +#define COL_GOLD 0 /* "AU xxxxxxxxx" */ + +#define ROW_STAT 8 +#define COL_STAT 0 /* "xxx xxxxxx" */ + +#define ROW_AC 14 +#define COL_AC 0 /* "Cur AC xxxxx" */ + +#define ROW_HP 15 +#define COL_HP 0 /* "HP xxxxx/xxxxx" */ + +#define ROW_SANITY 16 /* "Sanity 100%" */ +#define COL_SANITY 0 + +#define ROW_SP 17 +#define COL_SP 0 /* "SP xxxxx/xxxxx" */ + +#define ROW_PIETY 18 +#define COL_PIETY 0 /* "Pt xxxxx/xxxxx" */ + +#define ROW_MH 19 +#define COL_MH 0 /* "MH xxxxx/xxxxx" */ + +#define ROW_INFO (Term->hgt - 4) +#define COL_INFO 0 /* "xxxxxxxxxxxx" */ + +#define ROW_CUT (Term->hgt - 3) +#define COL_CUT 0 /* <cut> */ + +#define ROW_STUN (Term->hgt - 2) +#define COL_STUN 0 /* <stun> */ + +#define ROW_HUNGRY (Term->hgt - 1) +#define COL_HUNGRY 0 /* "Weak" / "Hungry" / "Full" / "Gorged" */ + +#define ROW_BLIND (Term->hgt - 1) +#define COL_BLIND 7 /* "Blind" */ + +#define ROW_CONFUSED (Term->hgt - 1) +#define COL_CONFUSED 13 /* "Conf" */ + +#define ROW_AFRAID (Term->hgt - 1) +#define COL_AFRAID 18 /* "Afraid" */ + +#define ROW_POISONED (Term->hgt - 1) +#define COL_POISONED 25 /* "Poison" */ + +#define ROW_DTRAP (Term->hgt - 1) +#define COL_DTRAP 32 /* "DTrap" */ + +#define ROW_STATE (Term->hgt - 1) +#define COL_STATE 38 /* <state> */ + +#define ROW_SPEED (Term->hgt - 1) +#define COL_SPEED 49 /* "Slow (-NN)" or "Fast (+NN)" */ + +#define ROW_STUDY (Term->hgt - 1) +#define COL_STUDY 60 /* "Study" */ + +#define ROW_DEPTH (Term->hgt - 1) +#define COL_DEPTH (Term->wid - 14) /* "Lev NNN" / "NNNN ft" */ + + + +/*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/ + +/* Nothing */ +#define FEAT_NONE 0x00 + +/* Basic features */ +#define FEAT_FLOOR 0x01 +#define FEAT_FOUNTAIN 0x02 +#define FEAT_GLYPH 0x03 +#define FEAT_OPEN 0x04 +#define FEAT_BROKEN 0x05 +#define FEAT_LESS 0x06 +#define FEAT_MORE 0x07 + +/* Quest features -KMW- */ +#define FEAT_QUEST_ENTER 0x08 +#define FEAT_QUEST_EXIT 0x09 +#define FEAT_QUEST_DOWN 0x0A +#define FEAT_QUEST_UP 0x0B + +/* Shafts -GSN- */ +#define FEAT_SHAFT_DOWN 0x0D +#define FEAT_SHAFT_UP 0x0E + +/* Basic feature */ +#define FEAT_EMPTY_FOUNTAIN 0x0F + +/* Feature 0x10 -- web */ + +/* Traps */ +#define FEAT_TRAP 0x11 + +/* Features 0x12 - 0x1F -- unused */ + +/* Doors */ +#define FEAT_DOOR_HEAD 0x20 +#define FEAT_DOOR_TAIL 0x2F + +/* Extra */ +#define FEAT_SECRET 0x30 +#define FEAT_RUBBLE 0x31 + +/* Seams */ +#define FEAT_MAGMA 0x32 +#define FEAT_QUARTZ 0x33 +#define FEAT_MAGMA_H 0x34 +#define FEAT_QUARTZ_H 0x35 +#define FEAT_MAGMA_K 0x36 +#define FEAT_QUARTZ_K 0x37 + +/* Walls */ +#define FEAT_WALL_EXTRA 0x38 +#define FEAT_WALL_INNER 0x39 +#define FEAT_WALL_OUTER 0x3A +#define FEAT_WALL_SOLID 0x3B +#define FEAT_PERM_EXTRA 0x3C +#define FEAT_PERM_INNER 0x3D +#define FEAT_PERM_OUTER 0x3E +#define FEAT_PERM_SOLID 0x3F + +/* Explosive rune */ +#define FEAT_MINOR_GLYPH 0x40 + +/* Pattern */ +#define FEAT_PATTERN_START 0x41 +#define FEAT_PATTERN_1 0x42 +#define FEAT_PATTERN_2 0x43 +#define FEAT_PATTERN_3 0x44 +#define FEAT_PATTERN_4 0x45 +#define FEAT_PATTERN_END 0x46 +#define FEAT_PATTERN_OLD 0x47 +#define FEAT_PATTERN_XTRA1 0x48 +#define FEAT_PATTERN_XTRA2 0x49 + +/* Shops */ +#define FEAT_SHOP 0x4A + +/* Permanent walls for quests */ +#define FEAT_QUEST1 0x4B +#define FEAT_QUEST2 0x4C +#define FEAT_QUEST3 0x4D +#define FEAT_QUEST4 0x4E + +/* Features 0x4F - 0x53 -- unused */ + +/* Additional terrains */ +#define FEAT_SHAL_WATER 0x54 +#define FEAT_DEEP_LAVA 0x55 +#define FEAT_SHAL_LAVA 0x56 +#define FEAT_DARK_PIT 0x57 +#define FEAT_DIRT 0x58 +#define FEAT_GRASS 0x59 +#define FEAT_ICE 0x5A +#define FEAT_SAND 0x5B +#define FEAT_DEAD_TREE 0x5C +#define FEAT_DEAD_SMALL_TREE 212 +#define FEAT_ASH 0x5D +#define FEAT_MUD 0x5E +#define FEAT_ICE_WALL 0x5F +#define FEAT_TREES 0x60 +#define FEAT_MOUNTAIN 0x61 +#define FEAT_SANDWALL 0x62 +#define FEAT_SANDWALL_H 0x63 +#define FEAT_SANDWALL_K 0x64 +/* Feature 0x65 -- high mountain chain */ +/* Feature 0x66 -- nether mist */ + +/* Features 0x67 - 0x9F -- unused */ + +#define FEAT_BETWEEN 0xA0 /* 160 */ + +/* Altars */ +#define FEAT_ALTAR_HEAD 0xA1 /* 161 */ +#define FEAT_ALTAR_TAIL 0xAB /* 171 */ + +#define FEAT_MARKER 0xAC /* 172 */ +/* Feature 0xAD -- Underground Tunnel */ +#define FEAT_TAINTED_WATER 0xAE /* 174 */ +#define FEAT_MON_TRAP 0xAF /* 175 */ +#define FEAT_BETWEEN2 0xB0 /* 176 */ +#define FEAT_LAVA_WALL 0xB1 /* 177 */ +#define FEAT_GREAT_FIRE 0xB2 /* 178 */ +#define FEAT_WAY_MORE 0xB3 /* 179 */ +#define FEAT_WAY_LESS 0xB4 /* 180 */ +/* Feature 0xB5 -- field */ +#define FEAT_EKKAIA 0xB6 /* 182 */ + +/* Features 0xB7 - 0xBA -- unused */ + +#define FEAT_DEEP_WATER 0xBB /* 187 */ +#define FEAT_GLASS_WALL 0xBC /* 188 */ +#define FEAT_ILLUS_WALL 0xBD /* 189 */ +/* Feature 0xBE -- grass roof */ +/* Feature 0xBF -- grass roof top */ +/* Feature 0xC0 -- grass roof chimney */ +/* Feature 0xC1 -- brick roof */ +/* Feature 0xC2 -- brick roof top */ +/* Feature 0xC3 -- brick roof chimney */ +/* Feature 0xC4 -- window */ +/* Feature 0xC5 -- small window */ +/* Feature 0xC6 -- rain barrel */ +#define FEAT_FLOWER 0xC7 /* 199 */ +/* Feature 0xC8 -- cobblestone road */ +/* Feature 0xC9 -- cobblestone with outlet */ +#define FEAT_SMALL_TREES 0xCA /* 202 */ +#define FEAT_TOWN 0xCB /* 203 */ +/* Feature 0xCC -- Underground Tunnel */ +#define FEAT_FIRE 0xCD /* 205 */ +/* Feature 0xCE -- pile of rubble (permanent) */ + +/* Features 0xCF - 0xFF -- unused */ + + +#define MAX_BETWEEN_EXITS 2 + +/* + * Number of effects + */ +#define MAX_EFFECTS 128 +#define EFF_WAVE 0x00000001 /* A circle whose radius increase */ +#define EFF_LAST 0x00000002 /* The wave lasts */ +#define EFF_STORM 0x00000004 /* The area follows the player */ +#define EFF_DIR1 0x00000008 /* Directed effect */ +#define EFF_DIR2 0x00000010 /* Directed effect */ +#define EFF_DIR3 0x00000020 /* Directed effect */ +#define EFF_DIR4 0x00000040 /* Directed effect */ +#define EFF_DIR6 0x00000080 /* Directed effect */ +#define EFF_DIR7 0x00000100 /* Directed effect */ +#define EFF_DIR8 0x00000200 /* Directed effect */ +#define EFF_DIR9 0x00000400 /* Directed effect */ + +/* + * Wilderness terrains + */ +#define TERRAIN_EDGE 0 /* Edge of the World */ +#define TERRAIN_TOWN 1 /* Town */ +#define TERRAIN_DEEP_WATER 2 /* Deep water */ +#define TERRAIN_SHALLOW_WATER 3 /* Shallow water */ +#define TERRAIN_SWAMP 4 /* Swamp */ +#define TERRAIN_DIRT 5 /* Dirt */ +#define TERRAIN_GRASS 6 /* Grass */ +#define TERRAIN_TREES 7 /* Trees */ +#define TERRAIN_DESERT 8 /* Desert */ +#define TERRAIN_SHALLOW_LAVA 9 /* Shallow lava */ +#define TERRAIN_DEEP_LAVA 10 /* Deep lava */ +#define TERRAIN_MOUNTAIN 11 /* Mountain */ + +#define MAX_WILD_TERRAIN 18 + +/*** Artifact indexes (see "lib/edit/a_info.txt") ***/ + + +/* Lites */ +#define ART_GALADRIEL 1 +#define ART_ELENDIL 2 +#define ART_THRAIN 3 +#define ART_PALANTIR 202 +#define ART_UNDEATH 200 +#define ART_STONE_LORE 15 +#define ART_PALANTIR_ITHIL 208 + +/* Amulets */ +#define ART_CARLAMMAS 4 +#define ART_INGWE 5 +#define ART_DWARVES 6 +#define ART_ANCHOR 14 +#define ART_ELESSAR 206 +#define ART_EVENSTAR 207 + +/* Rings */ +#define ART_FLAR 7 +#define ART_BARAHIR 8 +#define ART_TULKAS 9 +#define ART_NARYA 10 +#define ART_NENYA 11 +#define ART_VILYA 12 +#define ART_POWER 13 +/* 14 used by the anchor of space-time */ +/* 15 used by the stone of lore */ + +/* Dragon Scale */ +#define ART_RAZORBACK 16 +#define ART_BLADETURNER 17 +#define ART_MEDIATOR 166 + +/* Hard Armour */ +#define ART_HIMRING 167 +#define ART_SOULKEEPER 19 +#define ART_ISILDUR 20 +#define ART_ROHIRRIM 21 +#define ART_BELEGENNON 22 +#define ART_CELEBORN 23 +#define ART_ARVEDUI 24 +#define ART_CASPANION 25 + +/* Thunderlord flying suit */ +#define ART_MARDA 26 +#define ART_TRON 27 + +/* Soft Armour */ +#define ART_THALKETTOTH 28 + +/* Shields */ +#define ART_THORIN 30 +#define ART_CELEGORM 31 +#define ART_ANARION 32 +#define ART_GILGALAD 169 +#define ART_HARADRIM 176 + +/* Helms and Crowns */ +#define ART_MORGOTH 34 +#define ART_BERUTHIEL 35 +#define ART_THRANDUIL 36 +#define ART_THENGEL 37 +#define ART_HAMMERHAND 38 +#define ART_DOR 39 +#define ART_HOLHENNETH 40 +#define ART_GORLIM 41 +#define ART_GONDOR 42 +#define ART_KNOWLEDGE 160 +#define ART_NUMENOR 43 +#define ART_CELEBRIMBOR 170 + +/* Cloaks */ +#define ART_COLLUIN 44 +#define ART_HOLCOLLETH 45 +#define ART_THINGOL 46 +#define ART_THORONGIL 47 +#define ART_COLANNON 48 +#define ART_LUTHIEN 49 +#define ART_TUOR 50 + +/* Gloves */ +#define ART_CAMBELEG 52 +#define ART_CAMMITHRIM 53 +#define ART_PAURHACH 54 +#define ART_PAURNIMMEN 55 +#define ART_PAURAEGEN 56 +#define ART_PAURNEN 57 +#define ART_CAMLOST 58 +#define ART_FINGOLFIN 59 +#define ART_EOL 178 + +/* Boots */ +#define ART_FEANOR 60 +#define ART_DAL 61 +#define ART_THROR 62 + +/* Swords */ +#define ART_NARSIL 164 +#define ART_MAEDHROS 64 +#define ART_ANGRIST 65 +#define ART_NARTHANC 66 +#define ART_NIMTHANC 67 +#define ART_DETHANC 68 +#define ART_RILIA 69 +#define ART_BELANGIL 70 +#define ART_CALRIS 71 +#define ART_ARUNRUTH 72 +#define ART_GLAMDRING 73 +#define ART_AEGLIN 74 +#define ART_ORCRIST 75 +#define ART_GURTHANG 76 +#define ART_ZARCUTHRA 77 +#define ART_MORMEGIL 78 +#define ART_GONDRICAM 79 +#define ART_CRISDURIAN 80 +#define ART_AGLARANG 81 +#define ART_RINGIL 82 +#define ART_ANDURIL 83 +#define ART_ANGUIREL 84 +#define ART_ELVAGIL 85 +#define ART_FORASGIL 86 +#define ART_CARETH 87 +#define ART_STING 88 +#define ART_HARADEKKET 89 +#define ART_GILETTAR 90 +#define ART_DOOMCALLER 91 +#define ART_VORPAL_BLADE 92 +#define ART_ERU 147 + +/* Polearms */ +#define ART_THEODEN 93 +#define ART_PAIN 94 +#define ART_OSONDIR 95 +#define ART_TIL 96 +#define ART_AEGLOS 97 +#define ART_OROME 98 +#define ART_NIMLOTH 99 +#define ART_EORLINGAS 100 +#define ART_DURIN 101 +#define ART_EONWE 102 +#define ART_BALLI 103 +#define ART_LOTHARANG 104 +#define ART_MUNDWINE 105 +#define ART_BARUKKHELED 106 +#define ART_WRATH 107 +#define ART_ULMO 108 +#define ART_AVAVIR 109 +#define ART_FUNDIN 175 + +/* The sword of the Dawn */ +#define ART_DAWN 110 + +/* Hafted */ +#define ART_MELKOR 18 +#define ART_HURIN 33 +#define ART_GROND 111 +#define ART_TOTILA 112 +#define ART_THUNDERFIST 113 +#define ART_BLOODSPIKE 114 +#define ART_FIRESTAR 115 +#define ART_TARATOL 116 +#define ART_AULE 117 +#define ART_NAR 118 +#define ART_ERIRIL 119 +#define ART_OLORIN 120 +#define ART_DEATHWREAKER 121 +#define ART_TURMIL 122 +#define ART_GOTHMOG 123 +#define ART_AXE_GOTHMOG 145 +#define ART_SKULLCLEAVER 177 + +#define ART_NAIN 174 + +/* Bows */ +#define ART_BELTHRONDING 124 +#define ART_BARD 125 +#define ART_CUBRAGOL 126 +#define ART_UMBAR 171 + +/* Mage Staffs */ +#define ART_GANDALF 127 + +/* Boomerangs */ +#define ART_BEOR 128 +#define ART_GLIMDRIR 129 + +/* Musical Instrument */ +#define ART_MAGLOR 137 +#define ART_SKY 138 +#define ART_DAERON 139 +#define ART_DRUEDAIN 141 +#define ART_ROHAN 142 +#define ART_HELM 143 +#define ART_BOROMIR 144 + +/* Diggers */ +#define ART_EREBOR 140 + +#define ART_ORCHAST 156 +#define ART_NIGHT 157 +#define ART_NATUREBANE 158 + +/* Spell for various object */ +#define SPELL_ID_PLAIN 1 +#define SPELL_BO_FIRE 2 +#define SPELL_BO_COLD 3 +#define SPELL_BO_ELEC 4 +#define SPELL_BO_POIS 5 +#define SPELL_BO_ACID 6 +#define SPELL_MAPPING 7 +#define SPELL_CURE 8 +#define SPELL_ID_FULL 9 +#define SPELL_WRAITH 10 +#define SPELL_INVIS 11 + + +/*** Ego-Item indexes (see "lib/edit/e_info.txt") ***/ + +#define EGO_MANA 1 +#define EGO_POWER 2 +#define EGO_MANA_POWER 3 +#define EGO_MSTAFF_SPELL 4 +#define EGO_BRAND_POIS 77 +#define EGO_BRAND_ELEC 74 +#define EGO_BRAND_FIRE 75 +#define EGO_BRAND_COLD 76 +#define EGO_BRAND_ACID 73 +#define EGO_EARTHQUAKES 80 +#define EGO_BLESS_BLADE 67 +#define EGO_VAMPIRIC 97 +#define EGO_CHAOTIC 78 +#define EGO_BLASTED 127 +#define EGO_SHATTERED 126 +#define EGO_FLAME 122 +#define EGO_FROST 123 +#define EGO_LIGHTNING_BOLT 121 +#define EGO_FREE_ACTION 49 +#define EGO_DF 66 +#define EGO_MOTION 59 +#define EGO_SPECTRAL 102 +#define EGO_NOLDOR 23 +#define EGO_JUMP 15 +#define EGO_SPINING 72 +#define EGO_DRAGON 99 +#define EGO_INST_DRAGONKIND 130 +#define EGO_ENDURE_ELEC 17 +#define EGO_ENDURE_ACID 16 +#define EGO_ENDURE_FIRE 18 +#define EGO_ENDURE_COLD 19 +#define EGO_QUIET 58 +#define EGO_WISDOM 25 +#define EGO_RESIST_ELEC 6 +#define EGO_RESIST_ACID 5 +#define EGO_RESIST_FIRE 7 +#define EGO_RESIST_COLD 8 +#define EGO_LIFE 68 +#define EGO_STEALTH 42 +#define EGO_PROTECTION 41 +#define EGO_MAGI 27 +#define EGO_SPEED 60 +#define EGO_RESISTANCE 9 +#define EGO_LITE 32 +#define EGO_AURA_FIRE 44 +#define EGO_SLAYING_WEAPON 71 +#define EGO_SLAYING 50 +#define EGO_TELEPORTATION 35 +#define EGO_ELVENKIND 10 +#define EGO_LITE_MAGI 163 +#define EGO_HA 65 + + +/* Activation effects for random artifacts */ +#define ACT_SUNLIGHT 1 +#define ACT_BO_MISS_1 2 +#define ACT_BA_POIS_1 3 +#define ACT_BO_ELEC_1 4 +#define ACT_BO_ACID_1 5 +#define ACT_BO_COLD_1 6 +#define ACT_BO_FIRE_1 7 +#define ACT_BA_COLD_1 8 +#define ACT_BA_FIRE_1 9 +#define ACT_DRAIN_1 10 +#define ACT_BA_COLD_2 11 +#define ACT_BA_ELEC_2 12 +#define ACT_DRAIN_2 13 +#define ACT_VAMPIRE_1 14 +#define ACT_BO_MISS_2 15 +#define ACT_BA_FIRE_2 16 +#define ACT_BA_COLD_3 17 +#define ACT_BA_ELEC_3 18 +#define ACT_WHIRLWIND 19 +#define ACT_VAMPIRE_2 20 +#define ACT_CALL_CHAOS 21 +#define ACT_ROCKET 22 +#define ACT_DISP_EVIL 23 +#define ACT_BA_MISS_3 24 +#define ACT_DISP_GOOD 25 +#define ACT_GILGALAD 26 +#define ACT_CELEBRIMBOR 27 +#define ACT_SKULLCLEAVER 28 +#define ACT_HARADRIM 29 +#define ACT_FUNDIN 30 +#define ACT_EOL 31 +#define ACT_UMBAR 32 +#define ACT_NUMENOR 33 +#define ACT_KNOWLEDGE 34 +#define ACT_UNDEATH 35 +#define ACT_THRAIN 36 +#define ACT_BARAHIR 37 +#define ACT_TULKAS 38 +#define ACT_NARYA 39 +#define ACT_NENYA 40 +#define ACT_VILYA 41 +#define ACT_POWER 42 +#define ACT_STONE_LORE 43 +#define ACT_RAZORBACK 44 +#define ACT_BLADETURNER 45 +#define ACT_MEDIATOR 46 +#define ACT_BELEGENNON 47 +#define ACT_GORLIM 48 +#define ACT_COLLUIN 49 +#define ACT_BELANGIL 50 +#define ACT_CONFUSE 51 +#define ACT_SLEEP 52 +#define ACT_QUAKE 53 +#define ACT_TERROR 54 +#define ACT_TELE_AWAY 55 +#define ACT_BANISH_EVIL 56 +#define ACT_GENOCIDE 57 +#define ACT_MASS_GENO 58 +#define ACT_ANGUIREL 59 +#define ACT_ERU 60 +#define ACT_DAWN 61 +#define ACT_FIRESTAR 62 +#define ACT_TURMIL 63 +#define ACT_CUBRAGOL 64 +#define ACT_CHARM_ANIMAL 65 +#define ACT_CHARM_UNDEAD 66 +#define ACT_CHARM_OTHER 67 +#define ACT_CHARM_ANIMALS 68 +#define ACT_CHARM_OTHERS 69 +#define ACT_SUMMON_ANIMAL 70 +#define ACT_SUMMON_PHANTOM 71 +#define ACT_SUMMON_ELEMENTAL 72 +#define ACT_SUMMON_DEMON 73 +#define ACT_SUMMON_UNDEAD 74 +#define ACT_ELESSAR 75 +#define ACT_GANDALF 76 +#define ACT_MARDA 77 +#define ACT_PALANTIR 78 +/* + 79 + 80 +*/ +#define ACT_CURE_LW 81 +#define ACT_CURE_MW 82 +#define ACT_CURE_POISON 83 +#define ACT_REST_LIFE 84 +#define ACT_REST_ALL 85 +#define ACT_CURE_700 86 +#define ACT_CURE_1000 87 +/* + 88 +*/ +#define ACT_EREBOR 89 +#define ACT_DRUEDAIN 90 +#define ACT_ESP 91 +#define ACT_BERSERK 92 +#define ACT_PROT_EVIL 93 +#define ACT_RESIST_ALL 94 +#define ACT_SPEED 95 +#define ACT_XTRA_SPEED 96 +#define ACT_WRAITH 97 +#define ACT_INVULN 98 +#define ACT_ROHAN 99 +#define ACT_HELM 100 +#define ACT_BOROMIR 101 +#define ACT_HURIN 102 +#define ACT_AXE_GOTHMOG 103 +#define ACT_MELKOR 104 +#define ACT_GROND 105 +#define ACT_NATUREBANE 106 +#define ACT_NIGHT 107 +#define ACT_ORCHAST 108 +#define ACT_LIGHT 111 +#define ACT_MAP_LIGHT 112 +#define ACT_DETECT_ALL 113 +#define ACT_DETECT_XTRA 114 +#define ACT_ID_FULL 115 +#define ACT_ID_PLAIN 116 +#define ACT_RUNE_EXPLO 117 +#define ACT_RUNE_PROT 118 +#define ACT_SATIATE 119 +#define ACT_DEST_DOOR 120 +#define ACT_STONE_MUD 121 +#define ACT_RECHARGE 122 +#define ACT_ALCHEMY 123 +#define ACT_DIM_DOOR 124 +#define ACT_TELEPORT 125 +#define ACT_RECALL 126 + +#define ACT_DEATH 127 +#define ACT_RUINATION 128 +#define ACT_DESTRUC 129 +#define ACT_UNINT 130 +#define ACT_UNSTR 131 +#define ACT_UNCON 132 +#define ACT_UNCHR 133 +#define ACT_UNDEX 134 +#define ACT_UNWIS 135 +#define ACT_STATLOSS 136 +#define ACT_HISTATLOSS 137 +#define ACT_EXPLOSS 138 +#define ACT_HIEXPLOSS 139 +#define ACT_SUMMON_MONST 140 +#define ACT_PARALYZE 141 +#define ACT_HALLU 142 +#define ACT_POISON 143 +#define ACT_HUNGER 144 +#define ACT_STUN 145 +#define ACT_CUTS 146 +#define ACT_PARANO 147 +#define ACT_CONFUSION 148 +#define ACT_BLIND 149 +#define ACT_PET_SUMMON 150 +#define ACT_CURE_PARA 151 +#define ACT_CURE_HALLU 152 +#define ACT_CURE_POIS 153 +#define ACT_CURE_HUNGER 154 +#define ACT_CURE_STUN 155 +#define ACT_CURE_CUTS 156 +#define ACT_CURE_FEAR 157 +#define ACT_CURE_CONF 158 +#define ACT_CURE_BLIND 159 +#define ACT_CURING 160 +#define ACT_DARKNESS 161 +#define ACT_LEV_TELE 162 +#define ACT_ACQUIREMENT 163 +#define ACT_WEIRD 164 +#define ACT_AGGRAVATE 165 +#define ACT_MUT 166 +#define ACT_CURE_INSANITY 167 +#define ACT_CURE_MUT 168 +#define ACT_LIGHT_ABSORBTION 169 +/* of dragonkind?*/ +#define ACT_BA_FIRE_H 170 +#define ACT_BA_COLD_H 171 +#define ACT_BA_ELEC_H 172 +#define ACT_BA_ACID_H 173 +#define ACT_SPIN 174 +#define ACT_NOLDOR 175 +#define ACT_SPECTRAL 176 +#define ACT_JUMP 177 +#define ACT_DEST_TELE 178 +/*amulet of serpents dam 100, rad 2 timout 40+d60 */ +#define ACT_BA_POIS_4 179 +/*rings of X 50,50+d50 dur 20+d20 */ +#define ACT_BA_COLD_4 180 +#define ACT_BA_FIRE_4 181 +#define ACT_BA_ACID_4 182 +#define ACT_BA_ELEC_4 183 +#define ACT_BR_ELEC 184 +#define ACT_BR_COLD 185 +#define ACT_BR_FIRE 186 +#define ACT_BR_ACID 187 +#define ACT_BR_POIS 188 +#define ACT_BR_MANY 189 +#define ACT_BR_CONF 190 +#define ACT_BR_SOUND 191 +#define ACT_BR_CHAOS 192 +#define ACT_BR_SHARD 193 +#define ACT_BR_BALANCE 194 +#define ACT_BR_LIGHT 195 +#define ACT_BR_POWER 196 +#define ACT_GROW_MOLD 197 +#define ACT_MUSIC 200 +/* 170 -> unused */ + +/*** Object "tval" and "sval" codes ***/ + + +/* + * The values for the "tval" field of various objects. + * + * This value is the primary means by which items are sorted in the + * player inventory, followed by "sval" and "cost". + * + * Note that a "BOW" with tval = 19 and sval S = 10*N+P takes a missile + * weapon with tval = 16+N, and does (xP) damage when so combined. This + * fact is not actually used in the source, but it kind of interesting. + * + * Note that as of 2.7.8, the "item flags" apply to all items, though + * only armor and weapons and a few other items use any of these flags. + */ + +#define TV_SKELETON 1 /* Skeletons ('s') */ +#define TV_BOTTLE 2 /* Empty bottles ('!') */ +/* XXX */ +#define TV_BATERIE 4 /* For the Alchemists */ +#define TV_SPIKE 5 /* Spikes ('~') */ +#define TV_MSTAFF 6 /* Mage Staffs */ +#define TV_CHEST 7 /* Chests ('~') */ +#define TV_PARCHMENT 8 /* Parchments from Kamband */ +#define TV_PARCHEMENT 8 /* compatibility define */ +#define TV_CORPSE 9 /* Monster corpses */ +#define TV_EGG 10 /* Monster Eggs */ +#define TV_JUNK 11 /* Sticks, Pottery, etc ('~') */ +#define TV_TOOL 12 /* Tools */ +#define TV_INSTRUMENT 14 /* Musical instruments */ +#define TV_BOOMERANG 15 /* Boomerangs */ +#define TV_SHOT 16 /* Ammo for slings */ +#define TV_ARROW 17 /* Ammo for bows */ +#define TV_BOLT 18 /* Ammo for x-bows */ +#define TV_BOW 19 /* Slings/Bows/Xbows */ +#define TV_DIGGING 20 /* Shovels/Picks */ +#define TV_HAFTED 21 /* Priest Weapons */ +#define TV_POLEARM 22 /* Pikes/Glaives/Spears/etc. */ +#define TV_SWORD 23 /* Edged Weapons */ +#define TV_AXE 24 /* Axes/Cleavers */ +#define TV_BOOTS 30 /* Boots */ +#define TV_GLOVES 31 /* Gloves */ +#define TV_HELM 32 /* Helms */ +#define TV_CROWN 33 /* Crowns */ +#define TV_SHIELD 34 /* Shields */ +#define TV_CLOAK 35 /* Cloaks */ +#define TV_SOFT_ARMOR 36 /* Soft Armor */ +#define TV_HARD_ARMOR 37 /* Hard Armor */ +#define TV_DRAG_ARMOR 38 /* Dragon Scale Mail */ +#define TV_LITE 39 /* Lites (including Specials) */ +#define TV_AMULET 40 /* Amulets (including Specials) */ +#define TV_RING 45 /* Rings (including Specials) */ +#define TV_TRAPKIT 46 /* Trapkits */ +#define TV_TOTEM 54 /* Summoner totems */ +#define TV_STAFF 55 +#define TV_WAND 65 +#define TV_ROD 66 +#define TV_ROD_MAIN 67 +#define TV_SCROLL 70 +#define TV_POTION 71 +#define TV_POTION2 72 /* Second set of potion */ +#define TV_FLASK 77 +#define TV_FOOD 80 +#define TV_HYPNOS 99 /* To wield monsters !:) */ +#define TV_GOLD 100 /* Gold can only be picked up by players */ +#define TV_RANDART 102 /* Random Artifacts */ +#define TV_RUNE1 104 /* Base runes */ +#define TV_RUNE2 105 /* Modifier runes */ + +#define TV_BOOK 111 +#define TV_SYMBIOTIC_BOOK 112 +#define TV_MUSIC_BOOK 113 +#define TV_DRUID_BOOK 114 +#define TV_DAEMON_BOOK 115 + + +/* The "sval" codes for TV_JUNK */ +#define SV_BOULDER 1 + + +/* The "sval" codes for TV_TOOL */ +#define SV_TOOL_CLIMB 0 +#define SV_PORTABLE_HOLE 1 + +/* The "sval" codes for TV_MSTAFF */ +#define SV_MSTAFF 1 + +/* The "sval" codes for TV_SHOT/TV_ARROW/TV_BOLT */ +#define SV_AMMO_LIGHT 0 /* pebbles */ +#define SV_AMMO_NORMAL 1 /* shots, arrows, bolts */ +#define SV_AMMO_HEAVY 2 /* seeker arrows and bolts, mithril shots */ + +/* The "sval" codes for TV_INSTRUMENT */ +#define SV_DRUM 58 +#define SV_HARP 59 +#define SV_HORN 60 + +/* The "sval" codes for TV_TRAPKIT */ +#define SV_TRAPKIT_SLING 1 +#define SV_TRAPKIT_BOW 2 +#define SV_TRAPKIT_XBOW 3 +#define SV_TRAPKIT_POTION 4 +#define SV_TRAPKIT_SCROLL 5 +#define SV_TRAPKIT_DEVICE 6 + +/* The "sval" codes for TV_BOOMERANG */ +#define SV_BOOM_S_WOOD 1 /* 1d4 */ +#define SV_BOOM_WOOD 2 /* 1d8 */ +#define SV_BOOM_S_METAL 3 /* 3d4 */ +#define SV_BOOM_METAL 4 /* 4d5 */ + +/* The "sval" codes for TV_BOW (note information in "sval") */ +#define SV_SLING 2 /* (x2) */ +#define SV_SHORT_BOW 12 /* (x2) */ +#define SV_LONG_BOW 13 /* (x3) */ +#define SV_LIGHT_XBOW 23 /* (x3) */ +#define SV_HEAVY_XBOW 24 /* (x4) */ + +/* The "sval" codes for TV_DIGGING */ +#define SV_SHOVEL 1 +#define SV_GNOMISH_SHOVEL 2 +#define SV_DWARVEN_SHOVEL 3 +#define SV_PICK 4 +#define SV_ORCISH_PICK 5 +#define SV_DWARVEN_PICK 6 +#define SV_MATTOCK 7 + +/* The "sval" values for TV_HAFTED */ +#define SV_CLUB 1 /* 1d4 */ +#define SV_WHIP 2 /* 1d6 */ +#define SV_QUARTERSTAFF 3 /* 1d9 */ +#define SV_NUNCHAKU 4 /* 2d3 */ +#define SV_MACE 5 /* 2d4 */ +#define SV_BALL_AND_CHAIN 6 /* 2d4 */ +#define SV_WAR_HAMMER 8 /* 3d3 */ +#define SV_LUCERN_HAMMER 10 /* 2d5 */ +#define SV_THREE_PIECE_ROD 11 /* 3d3 */ +#define SV_MORNING_STAR 12 /* 2d6 */ +#define SV_FLAIL 13 /* 2d6 */ +#define SV_LEAD_FILLED_MACE 15 /* 3d4 */ +#define SV_TWO_HANDED_FLAIL 18 /* 3d6 */ +#define SV_GREAT_HAMMER 19 /* 4d6 */ +#define SV_MACE_OF_DISRUPTION 20 /* 5d8 */ +#define SV_GROND 50 /* 3d4 */ + +/* The "sval" values for TV_AXE */ +#define SV_HATCHET 1 /* 1d5 */ +#define SV_CLEAVER 2 /* 2d4 */ +#define SV_LIGHT_WAR_AXE 8 /* 2d5 */ +#define SV_BEAKED_AXE 10 /* 2d6 */ +#define SV_BROAD_AXE 11 /* 2d6 */ +#define SV_BATTLE_AXE 22 /* 2d8 */ +#define SV_GREAT_AXE 25 /* 4d4 */ +#define SV_LOCHABER_AXE 28 /* 3d8 */ +#define SV_SLAUGHTER_AXE 30 /* 5d7 */ + +/* The "sval" values for TV_POLEARM */ +#define SV_SPEAR 2 /* 1d6 */ +#define SV_SICKLE 3 /* 2d3 */ +#define SV_AWL_PIKE 4 /* 1d8 */ +#define SV_TRIDENT 5 /* 1d9 */ +#define SV_FAUCHARD 6 /* 1d10 */ +#define SV_BROAD_SPEAR 7 /* 1d9 */ +#define SV_PIKE 8 /* 2d5 */ +#define SV_GLAIVE 13 /* 2d6 */ +#define SV_HALBERD 15 /* 3d4 */ +#define SV_GUISARME 16 /* 2d5 */ +#define SV_SCYTHE 17 /* 5d3 */ +#define SV_LANCE 20 /* 2d8 */ +#define SV_TRIFURCATE_SPEAR 26 /* 2d9 */ +#define SV_HEAVY_LANCE 29 /* 4d8 */ +#define SV_SCYTHE_OF_SLICING 30 /* 8d4 */ + +/* The "sval" codes for TV_SWORD */ +#define SV_BROKEN_DAGGER 1 /* 1d1 */ +#define SV_BROKEN_SWORD 2 /* 1d2 */ +#define SV_DAGGER 4 /* 1d4 */ +#define SV_MAIN_GAUCHE 5 /* 1d5 */ +#define SV_RAPIER 7 /* 1d6 */ +#define SV_SMALL_SWORD 8 /* 1d6 */ +#define SV_BASILLARD 9 /* 1d8 */ +#define SV_SHORT_SWORD 10 /* 1d7 */ +#define SV_SABRE 11 /* 1d7 */ +#define SV_CUTLASS 12 /* 1d7 */ +#define SV_KHOPESH 14 /* 2d4 */ +#define SV_TULWAR 15 /* 2d4 */ +#define SV_BROAD_SWORD 16 /* 2d5 */ +#define SV_LONG_SWORD 17 /* 2d5 */ +#define SV_SCIMITAR 18 /* 2d5 */ +#define SV_KATANA 20 /* 3d4 */ +#define SV_BASTARD_SWORD 21 /* 3d4 */ +#define SV_GREAT_SCIMITAR 22 /* 4d5 */ +#define SV_CLAYMORE 23 /* 2d8 */ +#define SV_ESPADON 24 /* 2d9 */ +#define SV_TWO_HANDED_SWORD 25 /* 3d6 */ +#define SV_FLAMBERGE 26 /* 3d7 */ +#define SV_EXECUTIONERS_SWORD 28 /* 4d5 */ +#define SV_ZWEIHANDER 29 /* 4d6 */ +#define SV_BLADE_OF_CHAOS 30 /* 6d5 */ +#define SV_BLUESTEEL_BLADE 31 /* 3d9 */ +#define SV_SHADOW_BLADE 32 /* 4d4 */ +#define SV_DARK_SWORD 33 /* 3d7 */ + +/* The "sval" codes for TV_SHIELD */ +#define SV_SMALL_LEATHER_SHIELD 2 +#define SV_SMALL_METAL_SHIELD 3 +#define SV_LARGE_LEATHER_SHIELD 4 +#define SV_LARGE_METAL_SHIELD 5 +#define SV_DRAGON_SHIELD 6 +#define SV_SHIELD_OF_DEFLECTION 10 + +/* The "sval" codes for TV_HELM */ +#define SV_HARD_LEATHER_CAP 2 +#define SV_METAL_CAP 3 +#define SV_IRON_HELM 5 +#define SV_STEEL_HELM 6 +#define SV_DRAGON_HELM 7 +#define SV_IRON_CROWN 10 +#define SV_GOLDEN_CROWN 11 +#define SV_JEWELED_CROWN 12 +#define SV_MORGOTH 50 + +/* The "sval" codes for TV_BOOTS */ +#define SV_PAIR_OF_SOFT_LEATHER_BOOTS 2 +#define SV_PAIR_OF_HARD_LEATHER_BOOTS 3 +#define SV_PAIR_OF_METAL_SHOD_BOOTS 6 + +/* The "sval" codes for TV_CLOAK */ +#define SV_CLOAK 1 +#define SV_ELVEN_CLOAK 2 +#define SV_FUR_CLOAK 3 +#define SV_SHADOW_CLOAK 6 +#define SV_MIMIC_CLOAK 100 + +/* The "sval" codes for TV_GLOVES */ +#define SV_SET_OF_LEATHER_GLOVES 1 +#define SV_SET_OF_GAUNTLETS 2 +#define SV_SET_OF_CESTI 5 + +/* The "sval" codes for TV_SOFT_ARMOR */ +#define SV_FILTHY_RAG 1 +#define SV_ROBE 2 +#define SV_PAPER_ARMOR 3 /* 4 */ +#define SV_SOFT_LEATHER_ARMOR 4 +#define SV_SOFT_STUDDED_LEATHER 5 +#define SV_HARD_LEATHER_ARMOR 6 +#define SV_HARD_STUDDED_LEATHER 7 +#define SV_RHINO_HIDE_ARMOR 8 +#define SV_CORD_ARMOR 9 /* 6 */ +#define SV_PADDED_ARMOR 10 /* 4 */ +#define SV_LEATHER_SCALE_MAIL 11 +#define SV_LEATHER_JACK 12 +#define SV_STONE_AND_HIDE_ARMOR 15 /* 15 */ +#define SV_THUNDERLORD_SUIT 16 + +/* The "sval" codes for TV_HARD_ARMOR */ +#define SV_RUSTY_CHAIN_MAIL 1 /* 14- */ +#define SV_RING_MAIL 2 /* 12 */ +#define SV_METAL_SCALE_MAIL 3 /* 13 */ +#define SV_CHAIN_MAIL 4 /* 14 */ +#define SV_DOUBLE_RING_MAIL 5 /* 15 */ +#define SV_AUGMENTED_CHAIN_MAIL 6 /* 16 */ +#define SV_DOUBLE_CHAIN_MAIL 7 /* 16 */ +#define SV_BAR_CHAIN_MAIL 8 /* 18 */ +#define SV_METAL_BRIGANDINE_ARMOUR 9 /* 19 */ +#define SV_SPLINT_MAIL 10 /* 19 */ +#define SV_PARTIAL_PLATE_ARMOUR 12 /* 22 */ +#define SV_METAL_LAMELLAR_ARMOUR 13 /* 23 */ +#define SV_FULL_PLATE_ARMOUR 15 /* 25 */ +#define SV_RIBBED_PLATE_ARMOUR 18 /* 28 */ +#define SV_MITHRIL_CHAIN_MAIL 20 /* 28+ */ +#define SV_MITHRIL_PLATE_MAIL 25 /* 35+ */ +#define SV_ADAMANTITE_PLATE_MAIL 30 /* 40+ */ + +/* The "sval" codes for TV_DRAG_ARMOR */ +#define SV_DRAGON_BLACK 1 +#define SV_DRAGON_BLUE 2 +#define SV_DRAGON_WHITE 3 +#define SV_DRAGON_RED 4 +#define SV_DRAGON_GREEN 5 +#define SV_DRAGON_MULTIHUED 6 +#define SV_DRAGON_SHINING 10 +#define SV_DRAGON_LAW 12 +#define SV_DRAGON_BRONZE 14 +#define SV_DRAGON_GOLD 16 +#define SV_DRAGON_CHAOS 18 +#define SV_DRAGON_BALANCE 20 +#define SV_DRAGON_POWER 30 + +/* The sval codes for TV_LITE */ +#define SV_LITE_TORCH 0 +#define SV_LITE_LANTERN 1 +#define SV_LITE_TORCH_EVER 2 +#define SV_LITE_DWARVEN 3 +#define SV_LITE_FEANORIAN 4 +#define SV_LITE_GALADRIEL 100 +#define SV_LITE_ELENDIL 101 +#define SV_LITE_THRAIN 102 +#define SV_LITE_UNDEATH 103 +#define SV_LITE_PALANTIR 104 +#define SV_ANCHOR_SPACETIME 105 +#define SV_STONE_LORE 106 + + +/* The "sval" codes for TV_AMULET */ +#define SV_AMULET_DOOM 0 +#define SV_AMULET_TELEPORT 1 +#define SV_AMULET_ADORNMENT 2 +#define SV_AMULET_SLOW_DIGEST 3 +#define SV_AMULET_RESIST_ACID 4 +#define SV_AMULET_SEARCHING 5 +#define SV_AMULET_BRILLANCE 6 +#define SV_AMULET_CHARISMA 7 +#define SV_AMULET_THE_MAGI 8 +#define SV_AMULET_REFLECTION 9 +#define SV_AMULET_CARLAMMAS 10 +#define SV_AMULET_INGWE 11 +#define SV_AMULET_DWARVES 12 +#define SV_AMULET_NO_MAGIC 13 +#define SV_AMULET_NO_TELE 14 +#define SV_AMULET_RESISTANCE 15 +#define SV_AMULET_NOTHING 16 +#define SV_AMULET_SERPENT 17 +#define SV_AMULET_TORIS_MEJISTOS 18 +#define SV_AMULET_ELESSAR 19 +#define SV_AMULET_EVENSTAR 20 +#define SV_AMULET_SUSTENANCE 21 +#define SV_AMULET_TELEPATHY 22 +#define SV_AMULET_TRICKERY 23 +#define SV_AMULET_WEAPONMASTERY 24 +#define SV_AMULET_DEVOTION 25 +#define SV_AMULET_INFRA 26 +#define SV_AMULET_SPELL 27 +#define SV_AMULET_WISDOM 28 +#define SV_AMULET_RESIST_ELEC 29 +#define SV_AMULET_REGEN 30 + +/* The sval codes for TV_RING */ +#define SV_RING_WOE 0 +#define SV_RING_AGGRAVATION 1 +#define SV_RING_WEAKNESS 2 +#define SV_RING_STUPIDITY 3 +#define SV_RING_TELEPORTATION 4 +#define SV_RING_SPECIAL 5 +#define SV_RING_SLOW_DIGESTION 6 +#define SV_RING_FEATHER_FALL 7 +#define SV_RING_RESIST_FIRE 8 +#define SV_RING_RESIST_COLD 9 +#define SV_RING_SUSTAIN_STR 10 +#define SV_RING_SUSTAIN_INT 11 +#define SV_RING_SUSTAIN_WIS 12 +#define SV_RING_SUSTAIN_CON 13 +#define SV_RING_SUSTAIN_DEX 14 +#define SV_RING_SUSTAIN_CHR 15 +#define SV_RING_PROTECTION 16 +#define SV_RING_ACID 17 +#define SV_RING_FLAMES 18 +#define SV_RING_ICE 19 +#define SV_RING_RESIST_POIS 20 +#define SV_RING_FREE_ACTION 21 +#define SV_RING_SEE_INVIS 22 +#define SV_RING_SEARCHING 23 +#define SV_RING_STR 24 +#define SV_RING_INT 25 +#define SV_RING_DEX 26 +#define SV_RING_CON 27 +#define SV_RING_ACCURACY 28 +#define SV_RING_DAMAGE 29 +#define SV_RING_SLAYING 30 +#define SV_RING_SPEED 31 +#define SV_RING_BARAHIR 32 +#define SV_RING_TULKAS 33 +#define SV_RING_NARYA 34 +#define SV_RING_NENYA 35 +#define SV_RING_VILYA 36 +#define SV_RING_POWER 37 +#define SV_RING_RES_FEAR 38 +#define SV_RING_RES_LD 39 +#define SV_RING_RES_NETHER 40 +#define SV_RING_RES_NEXUS 41 +#define SV_RING_RES_SOUND 42 +#define SV_RING_RES_CONFUSION 43 +#define SV_RING_RES_SHARDS 44 +#define SV_RING_RES_DISENCHANT 45 +#define SV_RING_RES_CHAOS 46 +#define SV_RING_RES_BLINDNESS 47 +#define SV_RING_LORDLY 48 +#define SV_RING_ATTACKS 49 +#define SV_RING_NOTHING 50 +#define SV_RING_PRECONITION 51 +#define SV_RING_FLAR 52 +#define SV_RING_INVIS 53 +#define SV_RING_FLYING 54 +#define SV_RING_WRAITH 55 +#define SV_RING_ELEC 56 +#define SV_RING_DURIN 57 +#define SV_RING_SPELL 58 +#define SV_RING_CRIT 59 + +/* The "sval" codes for TV_STAFF */ +#define SV_STAFF_SCHOOL 1 +#define SV_STAFF_NOTHING 2 + +/* needed for monster traps */ +#define SV_STAFF_LIGHT 3 +#define SV_STAFF_FIERY_SHIELD 4 +#define SV_STAFF_REMOVE_CURSES 5 +#define SV_STAFF_WINGS_WIND 6 +#define SV_STAFF_SHAKE 7 +#define SV_STAFF_DISARM 8 +#define SV_STAFF_TELEPORTATION 9 +#define SV_STAFF_PROBABILITY_TRAVEL 10 +#define SV_STAFF_RECOVERY 11 +#define SV_STAFF_HEALING 12 +#define SV_STAFF_VISION 13 +#define SV_STAFF_IDENTIFY 14 +#define SV_STAFF_SENSE_HIDDEN 15 +#define SV_STAFF_REVEAL_WAYS 16 +#define SV_STAFF_SENSE_MONSTER 17 +#define SV_STAFF_GENOCIDE 18 +#define SV_STAFF_SUMMON 19 +#define SV_STAFF_WISH 20 +#define SV_STAFF_MANA 21 +#define SV_STAFF_MITHRANDIR 22 + +/* The "sval" codes for TV_WAND */ +#define SV_WAND_SCHOOL 1 +#define SV_WAND_NOTHING 2 + +/* needed for monster traps */ +#define SV_WAND_MANATHRUST 3 +#define SV_WAND_FIREFLASH 4 +#define SV_WAND_FIREWALL 5 +#define SV_WAND_TIDAL_WAVE 6 +#define SV_WAND_ICE_STORM 7 +#define SV_WAND_NOXIOUS_CLOUD 8 +#define SV_WAND_POISON_BLOOD 9 +#define SV_WAND_THUNDERSTORM 10 +#define SV_WAND_DIG 11 +#define SV_WAND_STONE_PRISON 12 +#define SV_WAND_STRIKE 13 +#define SV_WAND_TELEPORT_AWAY 14 +#define SV_WAND_SUMMON_ANIMAL 15 +#define SV_WAND_MAGELOCK 16 +#define SV_WAND_SLOW_MONSTER 17 +#define SV_WAND_SPEED 18 +#define SV_WAND_BANISHMENT 19 +#define SV_WAND_DISPERSE_MAGIC 20 +#define SV_WAND_CHARM 21 +#define SV_WAND_CONFUSE 22 +#define SV_WAND_DEMON_BLADE 23 +#define SV_WAND_HEAL_MONSTER 24 +#define SV_WAND_HASTE_MONSTER 25 +#define SV_WAND_THRAIN 26 + +/* The "sval" codes for TV_ROD(Rod Tips) */ +#define SV_ROD_NOTHING 0 +#define SV_ROD_DETECT_DOOR 1 +#define SV_ROD_IDENTIFY 2 +#define SV_ROD_RECALL 3 +#define SV_ROD_ILLUMINATION 4 +#define SV_ROD_MAPPING 5 +#define SV_ROD_DETECTION 6 +#define SV_ROD_PROBING 7 +#define SV_ROD_CURING 8 +#define SV_ROD_HEALING 9 +#define SV_ROD_RESTORATION 10 +#define SV_ROD_SPEED 11 +/* xxx (aimed) */ +#define SV_ROD_TELEPORT_AWAY 13 +#define SV_ROD_DISARMING 14 +#define SV_ROD_LITE 15 +#define SV_ROD_SLEEP_MONSTER 16 +#define SV_ROD_SLOW_MONSTER 17 +#define SV_ROD_DRAIN_LIFE 18 +#define SV_ROD_POLYMORPH 19 +#define SV_ROD_ACID_BOLT 20 +#define SV_ROD_ELEC_BOLT 21 +#define SV_ROD_FIRE_BOLT 22 +#define SV_ROD_COLD_BOLT 23 +#define SV_ROD_ACID_BALL 24 +#define SV_ROD_ELEC_BALL 25 +#define SV_ROD_FIRE_BALL 26 +#define SV_ROD_COLD_BALL 27 +#define SV_ROD_HAVOC 28 +#define SV_ROD_DETECT_TRAP 29 +#define SV_ROD_HOME 30 + + +/* The "sval" codes for TV_ROD_MAIN(Rods) */ +/* Note that the sval is the max mana capacity of the rod */ + +#define SV_ROD_WOODEN 10 +#define SV_ROD_COPPER 20 +#define SV_ROD_IRON 50 +#define SV_ROD_ALUMINIUM 75 +#define SV_ROD_SILVER 100 +#define SV_ROD_GOLDEN 125 +#define SV_ROD_MITHRIL 160 +#define SV_ROD_ADMANTITE 200 + + +/* The "sval" codes for TV_SCROLL */ + +#define SV_SCROLL_DARKNESS 0 +#define SV_SCROLL_AGGRAVATE_MONSTER 1 +#define SV_SCROLL_CURSE_ARMOR 2 +#define SV_SCROLL_CURSE_WEAPON 3 +#define SV_SCROLL_SUMMON_MONSTER 4 +#define SV_SCROLL_SUMMON_UNDEAD 5 +#define SV_SCROLL_SUMMON_MINE 6 +#define SV_SCROLL_TRAP_CREATION 7 +#define SV_SCROLL_PHASE_DOOR 8 +#define SV_SCROLL_TELEPORT 9 +#define SV_SCROLL_TELEPORT_LEVEL 10 +#define SV_SCROLL_WORD_OF_RECALL 11 +#define SV_SCROLL_IDENTIFY 12 +#define SV_SCROLL_STAR_IDENTIFY 13 +#define SV_SCROLL_REMOVE_CURSE 14 +#define SV_SCROLL_STAR_REMOVE_CURSE 15 +#define SV_SCROLL_ENCHANT_ARMOR 16 +#define SV_SCROLL_ENCHANT_WEAPON_TO_HIT 17 +#define SV_SCROLL_ENCHANT_WEAPON_TO_DAM 18 +#define SV_SCROLL_ENCHANT_WEAPON_PVAL 19 +#define SV_SCROLL_STAR_ENCHANT_ARMOR 20 +#define SV_SCROLL_STAR_ENCHANT_WEAPON 21 +#define SV_SCROLL_RECHARGING 22 +#define SV_SCROLL_RESET_RECALL 23 +#define SV_SCROLL_LIGHT 24 +#define SV_SCROLL_MAPPING 25 +#define SV_SCROLL_DETECT_GOLD 26 +#define SV_SCROLL_DETECT_ITEM 27 +#define SV_SCROLL_DETECT_TRAP 28 +#define SV_SCROLL_DETECT_DOOR 29 +#define SV_SCROLL_DETECT_INVIS 30 +#define SV_SCROLL_DIVINATION 31 +#define SV_SCROLL_SATISFY_HUNGER 32 +#define SV_SCROLL_BLESSING 33 +#define SV_SCROLL_HOLY_CHANT 34 +#define SV_SCROLL_HOLY_PRAYER 35 +#define SV_SCROLL_MONSTER_CONFUSION 36 +#define SV_SCROLL_PROTECTION_FROM_EVIL 37 +#define SV_SCROLL_RUNE_OF_PROTECTION 38 +#define SV_SCROLL_TRAP_DOOR_DESTRUCTION 39 +#define SV_SCROLL_DEINCARNATION 40 +#define SV_SCROLL_STAR_DESTRUCTION 41 +#define SV_SCROLL_DISPEL_UNDEAD 42 +#define SV_SCROLL_MASS_RESURECTION 43 +#define SV_SCROLL_GENOCIDE 44 +#define SV_SCROLL_MASS_GENOCIDE 45 +#define SV_SCROLL_ACQUIREMENT 46 +#define SV_SCROLL_STAR_ACQUIREMENT 47 +#define SV_SCROLL_FIRE 48 +#define SV_SCROLL_ICE 49 +#define SV_SCROLL_CHAOS 50 +#define SV_SCROLL_RUMOR 51 +#define SV_SCROLL_ARTIFACT 52 +#define SV_SCROLL_NOTHING 53 + +/* The "sval" codes for TV_POTION */ +#define SV_POTION_WATER 0 +#define SV_POTION_APPLE_JUICE 1 +#define SV_POTION_SLIME_MOLD 2 +#define SV_POTION_BLOOD 3 +#define SV_POTION_SLOWNESS 4 +#define SV_POTION_SALT_WATER 5 +#define SV_POTION_POISON 6 +#define SV_POTION_BLINDNESS 7 +#define SV_POTION_INVIS 8 +#define SV_POTION_CONFUSION 9 +#define SV_POTION_MUTATION 10 +#define SV_POTION_SLEEP 11 +#define SV_POTION_LEARNING 12 +#define SV_POTION_LOSE_MEMORIES 13 +/* xxx */ +#define SV_POTION_RUINATION 15 +#define SV_POTION_DEC_STR 16 +#define SV_POTION_DEC_INT 17 +#define SV_POTION_DEC_WIS 18 +#define SV_POTION_DEC_DEX 19 +#define SV_POTION_DEC_CON 20 +#define SV_POTION_DEC_CHR 21 +#define SV_POTION_DETONATIONS 22 +#define SV_POTION_DEATH 23 +#define SV_POTION_INFRAVISION 24 +#define SV_POTION_DETECT_INVIS 25 +#define SV_POTION_SLOW_POISON 26 +#define SV_POTION_CURE_POISON 27 +#define SV_POTION_BOLDNESS 28 +#define SV_POTION_SPEED 29 +#define SV_POTION_RESIST_HEAT 30 +#define SV_POTION_RESIST_COLD 31 +#define SV_POTION_HEROISM 32 +#define SV_POTION_BESERK_STRENGTH 33 +#define SV_POTION_CURE_LIGHT 34 +#define SV_POTION_CURE_SERIOUS 35 +#define SV_POTION_CURE_CRITICAL 36 +#define SV_POTION_HEALING 37 +#define SV_POTION_STAR_HEALING 38 +#define SV_POTION_LIFE 39 +#define SV_POTION_RESTORE_MANA 40 +#define SV_POTION_RESTORE_EXP 41 +#define SV_POTION_RES_STR 42 +#define SV_POTION_RES_INT 43 +#define SV_POTION_RES_WIS 44 +#define SV_POTION_RES_DEX 45 +#define SV_POTION_RES_CON 46 +#define SV_POTION_RES_CHR 47 +#define SV_POTION_INC_STR 48 +#define SV_POTION_INC_INT 49 +#define SV_POTION_INC_WIS 50 +#define SV_POTION_INC_DEX 51 +#define SV_POTION_INC_CON 52 +#define SV_POTION_INC_CHR 53 +/* xxx */ +#define SV_POTION_AUGMENTATION 55 +#define SV_POTION_ENLIGHTENMENT 56 +#define SV_POTION_STAR_ENLIGHTENMENT 57 +#define SV_POTION_SELF_KNOWLEDGE 58 +#define SV_POTION_EXPERIENCE 59 +#define SV_POTION_RESISTANCE 60 +#define SV_POTION_CURING 61 +#define SV_POTION_INVULNERABILITY 62 +#define SV_POTION_NEW_LIFE 63 + +#define SV_POTION_LAST 63 + +/* The "sval" codes for TV_POTION2 */ +#define SV_POTION2_MIMIC 1 +#define SV_POTION2_CURE_LIGHT_SANITY 14 +#define SV_POTION2_CURE_SERIOUS_SANITY 15 +#define SV_POTION2_CURE_CRITICAL_SANITY 16 +#define SV_POTION2_CURE_SANITY 17 +#define SV_POTION2_CURE_WATER 18 + +#define SV_POTION2_LAST 18 + +/* The "sval" codes for TV_FOOD */ +#define SV_FOOD_POISON 0 +#define SV_FOOD_BLINDNESS 1 +#define SV_FOOD_PARANOIA 2 +#define SV_FOOD_CONFUSION 3 +#define SV_FOOD_HALLUCINATION 4 +#define SV_FOOD_PARALYSIS 5 +#define SV_FOOD_WEAKNESS 6 +#define SV_FOOD_SICKNESS 7 +#define SV_FOOD_STUPIDITY 8 +#define SV_FOOD_NAIVETY 9 +#define SV_FOOD_UNHEALTH 10 +#define SV_FOOD_DISEASE 11 +#define SV_FOOD_CURE_POISON 12 +#define SV_FOOD_CURE_BLINDNESS 13 +#define SV_FOOD_CURE_PARANOIA 14 +#define SV_FOOD_CURE_CONFUSION 15 +#define SV_FOOD_CURE_SERIOUS 16 +#define SV_FOOD_RESTORE_STR 17 +#define SV_FOOD_RESTORE_CON 18 +#define SV_FOOD_RESTORING 19 +/* many missing mushrooms */ +#define SV_FOOD_BISCUIT 32 +#define SV_FOOD_JERKY 33 +#define SV_FOOD_RATION 35 +#define SV_FOOD_SLIME_MOLD 36 +#define SV_FOOD_WAYBREAD 37 +#define SV_FOOD_PINT_OF_ALE 38 +#define SV_FOOD_PINT_OF_WINE 39 +#define SV_FOOD_ATHELAS 40 +#define SV_FOOD_GREAT_HEALTH 41 +#define SV_FOOD_FORTUNE_COOKIE 42 + +/* The "sval" codes for TV_BATERIE */ +#define SV_BATERIE_POISON 1 +#define SV_BATERIE_EXPLOSION 2 +#define SV_BATERIE_TELEPORT 3 +#define SV_BATERIE_COLD 4 +#define SV_BATERIE_FIRE 5 +#define SV_BATERIE_ACID 6 +#define SV_BATERIE_LIFE 7 +#define SV_BATERIE_CONFUSION 8 +#define SV_BATERIE_LITE 9 +#define SV_BATERIE_CHAOS 10 +#define SV_BATERIE_TIME 11 +#define SV_BATERIE_MAGIC 12 +#define SV_BATERIE_XTRA_LIFE 13 +#define SV_BATERIE_DARKNESS 14 +#define SV_BATERIE_KNOWLEDGE 15 +#define SV_BATERIE_FORCE 16 +#define SV_BATERIE_LIGHTNING 17 +#define SV_BATERIE_MANA 18 +#define MAX_BATERIE_SVAL 18 + +/* The "sval" codes for TV_CORPSE */ +#define SV_CORPSE_CORPSE 1 +#define SV_CORPSE_SKELETON 2 +#define SV_CORPSE_HEAD 3 +#define SV_CORPSE_SKULL 4 +#define SV_CORPSE_MEAT 5 + +/* The "sval" codes for TV_DAEMON_BOOK */ +#define SV_DEMONBLADE 55 +#define SV_DEMONSHIELD 56 +#define SV_DEMONHORN 57 + +/* + * Special "sval" limit -- first "normal" food + */ +#define SV_FOOD_MIN_FOOD 32 + +/* + * Special "sval" limit -- first "aimed" rod + */ +#define SV_ROD_MIN_DIRECTION 12 + +/* + * Special "sval" limit -- first "large" chest + */ +#define SV_CHEST_MIN_LARGE 4 + +/* + * Special "sval" limit -- last "good" magic/prayer book + */ +#define SV_BOOK_MAX_GOOD 49 + +/* flags for operation in get_random_trap in object3.c */ + +#define TRAP_EXISTS 0x00000001L +#define TRAP_FOUND 0x00000002L +#define TRAP_NOTFOUND 0x00000004L +#define TRAP_IDENTIFIED 0x00000008L + +/*** General flag values ***/ + + +/* + * Special cave grid flags + */ +#define CAVE_MARK 0x0001 /* memorized feature */ +#define CAVE_GLOW 0x0002 /* self-illuminating */ +#define CAVE_ICKY 0x0004 /* part of a vault */ +#define CAVE_ROOM 0x0008 /* part of a room */ +#define CAVE_SEEN 0x0010 /* seen flag */ +#define CAVE_VIEW 0x0020 /* view flag */ +#define CAVE_TEMP 0x0040 /* temp flag */ +#define CAVE_WALL 0x0080 /* wall flag */ +#define CAVE_TRDT 0x0100 /* trap detected */ +#define CAVE_IDNT 0x0200 /* grid identified (fountains) */ +#define CAVE_SPEC 0x0400 /* special mark(quests) */ +#define CAVE_FREE 0x0800 /* no random generation on it */ +#define CAVE_DETECT 0x1000 /* Traps detected here */ +#define CAVE_PLIT 0x2000 /* Player lit grid */ +#define CAVE_MLIT 0x4000 /* Monster lit grid */ + +/* + * Bit flags for the "project()" function + * + * JUMP: Jump directly to the target location (this is a hack) + * BEAM: Work as a beam weapon (affect every grid passed through) + * THRU: Continue "through" the target (used for "bolts"/"beams") + * WALL: Continue "through" the walls + * STOP: Stop as soon as we hit a monster (used for "bolts") + * GRID: Affect each grid in the "blast area" in some way + * ITEM: Affect each object in the "blast area" in some way + * KILL: Affect each monster in the "blast area" in some way + * HIDE: Hack -- disable "visual" feedback from projection + */ +#define PROJECT_JUMP 0x00000001 +#define PROJECT_BEAM 0x00000002 +#define PROJECT_THRU 0x00000004 +#define PROJECT_STOP 0x00000008 +#define PROJECT_GRID 0x00000010 +#define PROJECT_ITEM 0x00000020 +#define PROJECT_KILL 0x00000040 +#define PROJECT_HIDE 0x00000080 +#define PROJECT_VIEWABLE 0x00000100 /* Affect monsters in LOS */ +#define PROJECT_METEOR_SHOWER 0x00000200 /* Affect random grids */ +#define PROJECT_BLAST 0x00000400 /* Like Mega_blast, but will only affect viewable grids */ +#define PROJECT_PANEL 0x00000800 /* Affect everything in the panel. */ +#define PROJECT_ALL 0x00001000 /* Affect every single grid. */ +#define PROJECT_WALL 0x00002000 +#define PROJECT_MANA_PATH 0x00004000 /* Follow a mana path. */ +#define PROJECT_ABSORB_MANA 0x00008000 /* The spell increase in power as it absord grid's mana. */ +#define PROJECT_STAY 0x00010000 + +/* + * Bit flags for the "enchant()" function + */ +#define ENCH_TOHIT 0x01 +#define ENCH_TODAM 0x02 +#define ENCH_TOAC 0x04 +#define ENCH_PVAL 0x08 + +/* + * Bit flags for the "target_set" function XXX XXX XXX + * + * KILL: Target monsters + * LOOK: Describe grid fully + * XTRA: Currently unused flag + * GRID: Select from all grids + */ +#define TARGET_KILL 0x01 +#define TARGET_LOOK 0x02 +#define TARGET_XTRA 0x04 +#define TARGET_GRID 0x08 + + +/* + * Some bit-flags for the "smart" field + */ +#define SM_RES_ACID 0x00000001 +#define SM_RES_ELEC 0x00000002 +#define SM_RES_FIRE 0x00000004 +#define SM_RES_COLD 0x00000008 +#define SM_RES_POIS 0x00000010 +#define SM_RES_NETH 0x00000020 +#define SM_RES_LITE 0x00000040 +#define SM_RES_DARK 0x00000080 +#define SM_RES_FEAR 0x00000100 +#define SM_RES_CONF 0x00000200 +#define SM_RES_CHAOS 0x00000400 +#define SM_RES_DISEN 0x00000800 +#define SM_RES_BLIND 0x00001000 +#define SM_RES_NEXUS 0x00002000 +#define SM_RES_SOUND 0x00004000 +#define SM_RES_SHARD 0x00008000 +#define SM_OPP_ACID 0x00010000 +#define SM_OPP_ELEC 0x00020000 +#define SM_OPP_FIRE 0x00040000 +#define SM_OPP_COLD 0x00080000 +#define SM_OPP_POIS 0x00100000 +#define SM_OPP_XXX1 0x00200000 +#define SM_CLONED 0x00400000 +#define SM_NOTE_TRAP 0x00800000 +#define SM_IMM_ACID 0x01000000 +#define SM_IMM_ELEC 0x02000000 +#define SM_IMM_FIRE 0x04000000 +#define SM_IMM_COLD 0x08000000 +#define SM_IMM_XXX5 0x10000000 +#define SM_IMM_REFLECT 0x20000000 +#define SM_IMM_FREE 0x40000000 +#define SM_IMM_MANA 0x80000000 + +/* + * Monster status(Player POV) + */ +#define MSTATUS_ENEMY -2 +#define MSTATUS_NEUTRAL_M -1 +#define MSTATUS_NEUTRAL 0 +#define MSTATUS_NEUTRAL_P 1 +#define MSTATUS_FRIEND 2 +#define MSTATUS_PET 3 +#define MSTATUS_COMPANION 4 + +/* + * Bit flags for the "get_item" function + */ +#define USE_EQUIP 0x01 /* Allow equip items */ +#define USE_INVEN 0x02 /* Allow inven items */ +#define USE_FLOOR 0x04 /* Allow floor items */ +#define USE_EXTRA 0x08 /* Allow extra items */ +#define USE_AUTO 0x10 /* Allow creation of automatizer rule */ +/* + * Bit flags for the "p_ptr->notice" variable + */ +#define PN_COMBINE 0x00000001L /* Combine the pack */ +#define PN_REORDER 0x00000002L /* Reorder the pack */ +/* xxx (many) */ + + +/* + * Bit flags for the "p_ptr->update" variable + */ +#define PU_BONUS 0x00000001L /* Calculate bonuses */ +#define PU_TORCH 0x00000002L /* Calculate torch radius */ +#define PU_BODY 0x00000004L /* Calculate body parts */ +#define PU_SANITY 0x00000008L /* Calculate csan and msan */ +#define PU_HP 0x00000010L /* Calculate chp and mhp */ +#define PU_MANA 0x00000020L /* Calculate csp and msp */ +#define PU_SPELLS 0x00000040L /* Calculate spells */ +#define PU_POWERS 0x00000080L /* Calculate powers */ +/* xxx (many) */ +#define PU_UN_VIEW 0x00010000L /* Forget view */ +/* xxx (many) */ +#define PU_VIEW 0x00100000L /* Update view */ +#define PU_MON_LITE 0x00200000L /* Update monster light */ +/* xxx */ +#define PU_MONSTERS 0x01000000L /* Update monsters */ +#define PU_DISTANCE 0x02000000L /* Update distances */ +/* xxx */ +#define PU_FLOW 0x10000000L /* Update flow */ +/* xxx (many) */ + + +/* + * Bit flags for the "p_ptr->redraw" variable + */ +#define PR_MISC 0x00000001L /* Display Race/Class */ +#define PR_TITLE 0x00000002L /* Display Title */ +#define PR_LEV 0x00000004L /* Display Level */ +#define PR_EXP 0x00000008L /* Display Experience */ +#define PR_STATS 0x00000010L /* Display Stats */ +#define PR_ARMOR 0x00000020L /* Display Armor */ +#define PR_HP 0x00000040L /* Display Hitpoints */ +#define PR_MANA 0x00000080L /* Display Mana */ +#define PR_GOLD 0x00000100L /* Display Gold */ +#define PR_DEPTH 0x00000200L /* Display Depth */ +/****/ +#define PR_HEALTH 0x00000800L /* Display Health Bar */ +#define PR_CUT 0x00001000L /* Display Extra (Cut) */ +#define PR_STUN 0x00002000L /* Display Extra (Stun) */ +#define PR_HUNGER 0x00004000L /* Display Extra (Hunger) */ +#define PR_PIETY 0x00008000L /* Display Piety */ +#define PR_BLIND 0x00010000L /* Display Extra (Blind) */ +#define PR_CONFUSED 0x00020000L /* Display Extra (Confused) */ +#define PR_AFRAID 0x00040000L /* Display Extra (Afraid) */ +#define PR_POISONED 0x00080000L /* Display Extra (Poisoned) */ +#define PR_STATE 0x00100000L /* Display Extra (State) */ +#define PR_SPEED 0x00200000L /* Display Extra (Speed) */ +#define PR_STUDY 0x00400000L /* Display Extra (Study) */ +#define PR_SANITY 0x00800000L /* Display Sanity */ +#define PR_EXTRA 0x01000000L /* Display Extra Info */ +#define PR_BASIC 0x02000000L /* Display Basic Info */ +#define PR_MAP 0x04000000L /* Display Map */ +#define PR_WIPE 0x08000000L /* Hack -- Total Redraw */ +#define PR_MH 0x10000000L /* Display Monster hitpoints */ +#define PR_DTRAP 0x20000000L /* Display Extra (DTrap) */ +/* xxx */ +/* xxx */ + +/* + * Bit flags for the "p_ptr->window" variable (etc) + */ +#define PW_INVEN 0x00000001L /* Display inven/equip */ +#define PW_EQUIP 0x00000002L /* Display equip/inven */ +/* xxx */ +#define PW_PLAYER 0x00000008L /* Display character */ +#define PW_M_LIST 0x00000010L /* Show monster list */ +/* xxx */ +#define PW_MESSAGE 0x00000040L /* Display messages */ +#define PW_OVERHEAD 0x00000080L /* Display overhead view */ +#define PW_MONSTER 0x00000100L /* Display monster recall */ +#define PW_OBJECT 0x00000200L /* Display object recall */ +/* xxx */ +#define PW_SNAPSHOT 0x00000800L /* Display snap-shot */ +/* xxx */ +/* xxx */ +#define PW_BORG_1 0x00004000L /* Display borg messages */ +#define PW_BORG_2 0x00008000L /* Display borg status */ + + +/* jk */ +#define FTRAP_CHEST 0x000000001 /* may appear on chests */ +#define FTRAP_DOOR 0x000000002 /* may appear on doors/floors */ +#define FTRAP_FLOOR 0x000000004 /* may appear on floor */ +#define FTRAP_CHANGE 0x000000008 /* Color changing */ +#define FTRAP_XXX5 0x000000010 +#define FTRAP_XXX6 0x000000020 +#define FTRAP_XXX7 0x000000040 +#define FTRAP_XXX8 0x000000080 +#define FTRAP_XXX9 0x000000100 +#define FTRAP_XXX10 0x000000200 +#define FTRAP_XXX11 0x000000400 +#define FTRAP_XXX12 0x000000800 +#define FTRAP_XXX13 0x000001000 +#define FTRAP_XXX14 0x000002000 +#define FTRAP_XXX15 0x000004000 +#define FTRAP_XXX16 0x000008000 +#define FTRAP_LEVEL1 0x000010000 /* low level ball/bolt trap */ +#define FTRAP_LEVEL2 0x000020000 /* medium level ball/bolt trap */ +#define FTRAP_LEVEL3 0x000040000 /* high level ball/bolt trap */ +#define FTRAP_LEVEL4 0x000080000 /* oops level ball/bolt trap */ +#define FTRAP_XXX21 0x000100000 +#define FTRAP_XXX22 0x000200000 +#define FTRAP_XXX23 0x000400000 +#define FTRAP_XXX24 0x000800000 +#define FTRAP_XXX25 0x001000000 +#define FTRAP_XXX26 0x002000000 +#define FTRAP_XXX27 0x004000000 +#define FTRAP_XXX28 0x008000000 +#define FTRAP_XXX29 0x010000000 +#define FTRAP_XXX30 0x020000000 +#define FTRAP_XXX31 0x040000000 +#define FTRAP_XXX32 0x080000000 + +/* jk */ +#define STAT_DEC_TEMPORARY 1 +#define STAT_DEC_NORMAL 2 +#define STAT_DEC_PERMANENT 3 + +/* jk - which trap is which number */ +#define TRAP_OF_WEAKNESS_I 1 +#define TRAP_OF_WEAKNESS_II 2 +#define TRAP_OF_WEAKNESS_III 3 +#define TRAP_OF_INTELLIGENCE_I 4 +#define TRAP_OF_INTELLIGENCE_II 5 +#define TRAP_OF_INTELLIGENCE_III 6 +#define TRAP_OF_WISDOM_I 7 +#define TRAP_OF_WISDOM_II 8 +#define TRAP_OF_WISDOM_III 9 +#define TRAP_OF_FUMBLING_I 10 +#define TRAP_OF_FUMBLING_II 11 +#define TRAP_OF_FUMBLING_III 12 +#define TRAP_OF_WASTING_I 13 +#define TRAP_OF_WASTING_II 14 +#define TRAP_OF_WASTING_III 15 +#define TRAP_OF_BEAUTY_I 16 +#define TRAP_OF_BEAUTY_II 17 +#define TRAP_OF_BEAUTY_III 18 + +#define TRAP_OF_CURSE_WEAPON 20 +#define TRAP_OF_CURSE_ARMOR 21 +#define TRAP_OF_EARTHQUAKE 22 +#define TRAP_OF_POISON_NEEDLE 23 +#define TRAP_OF_SUMMON_MONSTER 24 +#define TRAP_OF_SUMMON_UNDEAD 25 +#define TRAP_OF_SUMMON_GREATER_UNDEAD 26 +#define TRAP_OF_TELEPORT 27 +#define TRAP_OF_PARALYZING 28 +#define TRAP_OF_EXPLOSIVE_DEVICE 29 +#define TRAP_OF_TELEPORT_AWAY 30 +#define TRAP_OF_LOSE_MEMORY 31 +#define TRAP_OF_BITTER_REGRET 32 +#define TRAP_OF_BOWEL_CRAMPS 33 +#define TRAP_OF_BLINDNESS_CONFUSION 34 +#define TRAP_OF_AGGRAVATION 35 +#define TRAP_OF_MULTIPLICATION 36 +#define TRAP_OF_STEAL_ITEM 37 +#define TRAP_OF_SUMMON_FAST_QUYLTHULGS 38 +#define TRAP_OF_SINKING 39 +#define TRAP_OF_MANA_DRAIN 40 +#define TRAP_OF_MISSING_MONEY 41 +#define TRAP_OF_NO_RETURN 42 +#define TRAP_OF_SILENT_SWITCHING 43 +#define TRAP_OF_WALLS 44 +#define TRAP_OF_CALLING_OUT 45 +#define TRAP_OF_SLIDING 46 +#define TRAP_OF_CHARGES_DRAIN 47 +#define TRAP_OF_STAIR_MOVEMENT 48 +#define TRAP_OF_NEW 49 +#define TRAP_OF_SCATTER_ITEMS 50 +#define TRAP_OF_DECAY 51 +#define TRAP_OF_WASTING_WANDS 52 +#define TRAP_OF_FILLING 53 +#define TRAP_OF_DRAIN_SPEED 54 + +#define TRAP_OF_ELEC_BOLT 60 +#define TRAP_OF_POIS_BOLT 61 +#define TRAP_OF_ACID_BOLT 62 +#define TRAP_OF_COLD_BOLT 63 +#define TRAP_OF_FIRE_BOLT 64 +#define TRAP_OF_PLASMA_BOLT 65 +#define TRAP_OF_WATER_BOLT 66 +#define TRAP_OF_LITE_BOLT 67 +#define TRAP_OF_DARK_BOLT 68 +#define TRAP_OF_SHARDS_BOLT 69 +#define TRAP_OF_SOUND_BOLT 70 +#define TRAP_OF_CONFUSION_BOLT 71 +#define TRAP_OF_FORCE_BOLT 72 +#define TRAP_OF_INERTIA_BOLT 73 +#define TRAP_OF_MANA_BOLT 74 +#define TRAP_OF_ICE_BOLT 75 +#define TRAP_OF_CHAOS_BOLT 76 +#define TRAP_OF_NETHER_BOLT 77 +#define TRAP_OF_DISENCHANT_BOLT 78 +#define TRAP_OF_NEXUS_BOLT 79 +#define TRAP_OF_TIME_BOLT 80 +#define TRAP_OF_GRAVITY_BOLT 81 + +#define TRAP_OF_ELEC_BALL 82 +#define TRAP_OF_POIS_BALL 83 +#define TRAP_OF_ACID_BALL 84 +#define TRAP_OF_COLD_BALL 85 +#define TRAP_OF_FIRE_BALL 86 +#define TRAP_OF_PLASMA_BALL 87 +#define TRAP_OF_WATER_BALL 88 +#define TRAP_OF_LITE_BALL 89 +#define TRAP_OF_DARK_BALL 90 +#define TRAP_OF_SHARDS_BALL 91 +#define TRAP_OF_SOUND_BALL 92 +#define TRAP_OF_CONFUSION_BALL 93 +#define TRAP_OF_FORCE_BALL 94 +#define TRAP_OF_INERTIA_BALL 95 +#define TRAP_OF_MANA_BALL 96 +#define TRAP_OF_ICE_BALL 97 +#define TRAP_OF_CHAOS_BALL 98 +#define TRAP_OF_NETHER_BALL 99 +#define TRAP_OF_DISENCHANT_BALL 100 +#define TRAP_OF_NEXUS_BALL 101 +#define TRAP_OF_TIME_BALL 102 +#define TRAP_OF_GRAVITY_BALL 103 + +#define TRAP_OF_ARROW_I 110 +#define TRAP_OF_ARROW_II 111 +#define TRAP_OF_ARROW_III 112 +#define TRAP_OF_ARROW_IV 113 +#define TRAP_OF_POISON_ARROW_I 114 +#define TRAP_OF_POISON_ARROW_II 115 +#define TRAP_OF_POISON_ARROW_III 116 +#define TRAP_OF_POISON_ARROW_IV 117 +#define TRAP_OF_DAGGER_I 118 +#define TRAP_OF_DAGGER_II 119 +#define TRAP_OF_POISON_DAGGER_I 120 +#define TRAP_OF_POISON_DAGGER_II 121 +#define TRAP_OF_ARROWS_I 122 +#define TRAP_OF_ARROWS_II 123 +#define TRAP_OF_ARROWS_III 124 +#define TRAP_OF_ARROWS_IV 125 +#define TRAP_OF_POISON_ARROWS_I 126 +#define TRAP_OF_POISON_ARROWS_II 127 +#define TRAP_OF_POISON_ARROWS_III 128 +#define TRAP_OF_POISON_ARROWS_IV 129 +#define TRAP_OF_DAGGERS_I 130 +#define TRAP_OF_DAGGERS_II 131 +#define TRAP_OF_POISON_DAGGERS_I 132 +#define TRAP_OF_POISON_DAGGERS_II 133 + +#define TRAP_OF_DROP_ITEMS 140 +#define TRAP_OF_DROP_ALL_ITEMS 141 +#define TRAP_OF_DROP_EVERYTHING 142 + +/* -SC- */ +#define TRAP_OF_FEMINITY 150 +#define TRAP_OF_MASCULINITY 151 +#define TRAP_OF_NEUTRALITY 152 +#define TRAP_OF_AGING 153 +#define TRAP_OF_GROWING 154 +#define TRAP_OF_SHRINKING 155 +#define TRAP_OF_ELDRITCH_HORROR 156 +/* XXX */ +#define TRAP_OF_DIVINE_ANGER 158 +#define TRAP_OF_DIVINE_WRATH 159 +#define TRAP_OF_HALLUCINATION 160 + +#define TRAP_OF_ROCKET 161 +#define TRAP_OF_NUKE_BOLT 162 +#define TRAP_OF_DEATH_RAY 163 +#define TRAP_OF_HOLY_FIRE 164 +#define TRAP_OF_HELL_FIRE 165 +#define TRAP_OF_PSI_BOLT 166 +#define TRAP_OF_PSI_DRAIN 167 +#define TRAP_OF_NUKE_BALL 168 +#define TRAP_OF_PSI_BALL 169 + +/* DG */ +#define TRAP_OF_ACQUIREMENT 170 + +/* Runescrye */ +#define TRAP_G_ELEC_BOLT 171 +#define TRAP_G_POIS_BOLT 172 +#define TRAP_G_ACID_BOLT 173 +#define TRAP_G_COLD_BOLT 174 +#define TRAP_G_FIRE_BOLT 175 + +/*** General index values ***/ + + +/* + * Legal restrictions for "summon_specific()" + */ +#define SUMMON_ANT 11 +#define SUMMON_SPIDER 12 +#define SUMMON_HOUND 13 +#define SUMMON_HYDRA 14 +#define SUMMON_ANGEL 15 +#define SUMMON_DEMON 16 +#define SUMMON_UNDEAD 17 +#define SUMMON_DRAGON 18 +#define SUMMON_HI_UNDEAD 21 +#define SUMMON_HI_DRAGON 22 +#define SUMMON_WRAITH 31 +#define SUMMON_UNIQUE 32 +#define SUMMON_BIZARRE1 33 +#define SUMMON_BIZARRE2 34 +#define SUMMON_BIZARRE3 35 +#define SUMMON_BIZARRE4 36 +#define SUMMON_BIZARRE5 37 +#define SUMMON_BIZARRE6 38 +#define SUMMON_HI_DEMON 39 +#define SUMMON_KIN 40 +#define SUMMON_DAWN 41 +#define SUMMON_ANIMAL 42 +#define SUMMON_ANIMAL_RANGER 43 +#define SUMMON_HI_UNDEAD_NO_UNIQUES 44 +#define SUMMON_HI_DRAGON_NO_UNIQUES 45 +#define SUMMON_NO_UNIQUES 46 +#define SUMMON_PHANTOM 47 +#define SUMMON_ELEMENTAL 48 +#define SUMMON_THUNDERLORD 49 +#define SUMMON_BLUE_HORROR 50 +#define SUMMON_BUG 51 +#define SUMMON_RNG 52 +#define SUMMON_MINE 53 +#define SUMMON_HUMAN 54 +#define SUMMON_SHADOWS 55 +#define SUMMON_GHOST 56 +#define SUMMON_QUYLTHULG 57 +#define SUMMON_LUA 58 + + +/* + * Spell types used by project(), and related functions. + */ +#define GF_ELEC 1 +#define GF_POIS 2 +#define GF_ACID 3 +#define GF_COLD 4 +#define GF_FIRE 5 +#define GF_UNBREATH 6 +#define GF_CORPSE_EXPL 7 +#define GF_MISSILE 10 +#define GF_ARROW 11 +#define GF_PLASMA 12 +#define GF_WAVE 13 +#define GF_WATER 14 +#define GF_LITE 15 +#define GF_DARK 16 +#define GF_LITE_WEAK 17 +#define GF_DARK_WEAK 18 +#define GF_SHARDS 20 +#define GF_SOUND 21 +#define GF_CONFUSION 22 +#define GF_FORCE 23 +#define GF_INERTIA 24 +#define GF_MANA 26 +#define GF_METEOR 27 +#define GF_ICE 28 +#define GF_CHAOS 30 +#define GF_NETHER 31 +#define GF_DISENCHANT 32 +#define GF_NEXUS 33 +#define GF_TIME 34 +#define GF_GRAVITY 35 +#define GF_KILL_WALL 40 +#define GF_KILL_DOOR 41 +#define GF_KILL_TRAP 42 +#define GF_MAKE_WALL 45 +#define GF_MAKE_DOOR 46 +#define GF_MAKE_TRAP 47 +#define GF_OLD_CLONE 51 +#define GF_OLD_POLY 52 +#define GF_OLD_HEAL 53 +#define GF_OLD_SPEED 54 +#define GF_OLD_SLOW 55 +#define GF_OLD_CONF 56 +#define GF_OLD_SLEEP 57 +#define GF_OLD_DRAIN 58 +#define GF_AWAY_UNDEAD 61 +#define GF_AWAY_EVIL 62 +#define GF_AWAY_ALL 63 +#define GF_TURN_UNDEAD 64 +#define GF_TURN_EVIL 65 +#define GF_TURN_ALL 66 +#define GF_DISP_UNDEAD 67 +#define GF_DISP_EVIL 68 +#define GF_DISP_ALL 69 +#define GF_DISP_DEMON 70 /* New types for Zangband begin here... */ +#define GF_DISP_LIVING 71 +#define GF_ROCKET 72 +#define GF_NUKE 73 +#define GF_MAKE_GLYPH 74 +#define GF_STASIS 75 +#define GF_STONE_WALL 76 +#define GF_DEATH_RAY 77 +#define GF_STUN 78 +#define GF_HOLY_FIRE 79 +#define GF_HELL_FIRE 80 +#define GF_DISINTEGRATE 81 +#define GF_CHARM 82 +#define GF_CONTROL_UNDEAD 83 +#define GF_CONTROL_ANIMAL 84 +#define GF_PSI 85 +#define GF_PSI_DRAIN 86 +#define GF_TELEKINESIS 87 +#define GF_JAM_DOOR 88 +#define GF_DOMINATION 89 +#define GF_DISP_GOOD 90 +#define GF_IDENTIFY 91 +#define GF_RAISE 92 +#define GF_STAR_IDENTIFY 93 +#define GF_DESTRUCTION 94 +#define GF_STUN_CONF 95 +#define GF_STUN_DAM 96 +#define GF_CONF_DAM 98 +#define GF_STAR_CHARM 99 +#define GF_IMPLOSION 100 +#define GF_LAVA_FLOW 101 +#define GF_FEAR 102 +#define GF_BETWEEN_GATE 103 +#define GF_WINDS_MANA 104 +#define GF_DEATH 105 +#define GF_CONTROL_DEMON 106 +#define GF_RAISE_DEMON 107 +#define GF_TRAP_DEMONSOUL 108 +#define GF_ATTACK 109 +#define GF_CHARM_UNMOVING 110 +#define MAX_GF 111 + +/* + * Some things which induce learning + */ +#define DRS_ACID 1 +#define DRS_ELEC 2 +#define DRS_FIRE 3 +#define DRS_COLD 4 +#define DRS_POIS 5 +#define DRS_NETH 6 +#define DRS_LITE 7 +#define DRS_DARK 8 +#define DRS_FEAR 9 +#define DRS_CONF 10 +#define DRS_CHAOS 11 +#define DRS_DISEN 12 +#define DRS_BLIND 13 +#define DRS_NEXUS 14 +#define DRS_SOUND 15 +#define DRS_SHARD 16 +#define DRS_FREE 30 +#define DRS_MANA 31 +#define DRS_REFLECT 32 + + + +/* + * Hack -- first "normal" artifact in the artifact list. All of + * the artifacts with indexes from 1 to 15 are "special" (lights, + * rings, amulets), and the ones from 16 to 127 are "normal". + */ +#define ART_MIN_NORMAL 16 +#define ART_MIN_SPECIAL 200 + + +/* + * Hack -- special "xtra" object powers + */ + +/* Sustain one stat */ +#define EGO_XTRA_SUSTAIN 1 + +/* High resist */ +#define EGO_XTRA_POWER 2 + +/* Special ability */ +#define EGO_XTRA_ABILITY 3 + +/*** Object flag values ***/ + + +/* + * Special Object Flags + */ +#define IDENT_SENSE 0x01 /* Item has been "sensed" */ +#define IDENT_FIXED 0x02 /* Item has been "haggled" */ +#define IDENT_EMPTY 0x04 /* Item charges are known */ +#define IDENT_KNOWN 0x08 /* Item abilities are known */ +#define IDENT_STOREB 0x10 /* Item is storebought !!!! */ +#define IDENT_MENTAL 0x20 /* Item information is known */ +#define IDENT_CURSED 0x40 /* Item is temporarily cursed */ + + + +/* + * Special Monster Flags + */ +#define MFLAG_VIEW 0x00000001 /* Monster is in line of sight */ +#define MFLAG_QUEST 0x00000002 /* Monster is subject to a quest */ +#define MFLAG_PARTIAL 0x00000004 /* Monster is a partial summon */ +#define MFLAG_CONTROL 0x00000008 /* Monster is controlled */ +#define MFLAG_BORN 0x00000010 /* Monster is still being born */ +#define MFLAG_NICE 0x00000020 /* Monster is still being nice */ +#define MFLAG_SHOW 0x00000040 /* Monster is recently memorized */ +#define MFLAG_MARK 0x00000080 /* Monster is currently memorized */ +#define MFLAG_NO_DROP 0x00000100 /* Monster wont drop obj/corpse */ +#define MFLAG_QUEST2 0x00000200 /* Monster is subject to a quest */ +#define PERM_MFLAG_MASK ( \ + MFLAG_QUEST | MFLAG_QUEST2 | \ + MFLAG_PARTIAL | MFLAG_CONTROL | MFLAG_NO_DROP \ + ) + + +/* + * As of 2.7.8, the "object flags" are valid for all objects, and as + * of 2.7.9, these flags are not actually stored with the object. + * + * Note that "flags1" contains all flags dependant on "pval" (including + * stat bonuses, but NOT stat sustainers), plus all "extra attack damage" + * flags (SLAY_XXX and BRAND_XXX). + * + * Note that "flags2" contains all "resistances" (including "Stat Sustainers", + * actual immunities, and resistances). Note that "Hold Life" is really an + * "immunity" to ExpLoss, and "Free Action" is "immunity to paralysis". + * + * Note that "flags3" contains everything else -- including the three "CURSED" + * flags, and the "BLESSED" flag, several "item display" parameters, some new + * flags for powerful Bows, and flags which affect the player in a "general" + * way (LITE, TELEPATHY, SEE_INVIS, SLOW_DIGEST, REGEN, FEATHER), including + * all the "general" curses (TELEPORT, AGGRAVATE, EXP_DRAIN). It also has + * four new flags called "ITEM_IGNORE_XXX" which lets an item specify that + * it can not be affected by various forms of destruction. This is NOT as + * powerful as actually granting resistance/immunity to the wearer. + */ + +#define TR1_STR 0x00000001L /* STR += "pval" */ +#define TR1_INT 0x00000002L /* INT += "pval" */ +#define TR1_WIS 0x00000004L /* WIS += "pval" */ +#define TR1_DEX 0x00000008L /* DEX += "pval" */ +#define TR1_CON 0x00000010L /* CON += "pval" */ +#define TR1_CHR 0x00000020L /* CHR += "pval" */ +#define TR1_MANA 0x00000040L /* Mana multipler */ +#define TR1_SPELL 0x00000080L /* Spell power increase */ +#define TR1_STEALTH 0x00000100L /* Stealth += "pval" */ +#define TR1_SEARCH 0x00000200L /* Search += "pval" */ +#define TR1_INFRA 0x00000400L /* Infra += "pval" */ +#define TR1_TUNNEL 0x00000800L /* Tunnel += "pval" */ +#define TR1_SPEED 0x00001000L /* Speed += "pval" */ +#define TR1_BLOWS 0x00002000L /* Blows += "pval" */ +#define TR1_CHAOTIC 0x00004000L +#define TR1_VAMPIRIC 0x00008000L +#define TR1_SLAY_ANIMAL 0x00010000L +#define TR1_SLAY_EVIL 0x00020000L +#define TR1_SLAY_UNDEAD 0x00040000L +#define TR1_SLAY_DEMON 0x00080000L +#define TR1_SLAY_ORC 0x00100000L +#define TR1_SLAY_TROLL 0x00200000L +#define TR1_SLAY_GIANT 0x00400000L +#define TR1_SLAY_DRAGON 0x00800000L +#define TR1_KILL_DRAGON 0x01000000L /* Execute Dragon */ +#define TR1_VORPAL 0x02000000L /* Later */ +#define TR1_IMPACT 0x04000000L /* Cause Earthquakes */ +#define TR1_BRAND_POIS 0x08000000L +#define TR1_BRAND_ACID 0x10000000L +#define TR1_BRAND_ELEC 0x20000000L +#define TR1_BRAND_FIRE 0x40000000L +#define TR1_BRAND_COLD 0x80000000L +#define TR1_NULL_MASK 0x00000000L + +#define TRAP2_AUTOMATIC_5 0x00000001L /* Trap automatically rearms itself, 1 in 5 failure */ +#define TRAP2_AUTOMATIC_99 0x00000002L /* Trap automatically rearms itself */ +#define TRAP2_KILL_GHOST 0x00000004L /* Trap also affects PASS_WALL creatures */ +#define TRAP2_TELEPORT_TO 0x00000008L /* After everything else, teleport to player */ +#define TRAP2_ONLY_DRAGON 0x00000010L /* Affect only dragons & other AFFECTed creatures */ +#define TRAP2_ONLY_DEMON 0x00000020L /* Affect only demons & other AFFECTed creatures */ +#define TRAP2_ONLY_ANIMAL 0x00000100L /* Affect only animals & other AFFECTed creatures */ +#define TRAP2_ONLY_UNDEAD 0x00000200L /* Affect only undead & others */ +#define TRAP2_ONLY_EVIL 0x00000400L /* Affect only evil creatures &c. */ + +#define TRAP2_ONLY_MASK (TRAP2_ONLY_DRAGON | TRAP2_ONLY_DEMON | TRAP2_ONLY_ANIMAL | \ + TRAP2_ONLY_UNDEAD | TRAP2_ONLY_EVIL ) + +#define TR2_SUST_STR 0x00000001L +#define TR2_SUST_INT 0x00000002L +#define TR2_SUST_WIS 0x00000004L +#define TR2_SUST_DEX 0x00000008L +#define TR2_SUST_CON 0x00000010L +#define TR2_SUST_CHR 0x00000020L +#define TR2_INVIS 0x00000040L /* Invisibility */ +#define TR2_LIFE 0x00000080L /* Life multiplier */ +#define TR2_IM_ACID 0x00000100L +#define TR2_IM_ELEC 0x00000200L +#define TR2_IM_FIRE 0x00000400L +#define TR2_IM_COLD 0x00000800L +#define TR2_SENS_FIRE 0x00001000L /* Sensibility to fire */ +#define TR2_REFLECT 0x00002000L /* Reflect 'bolts' */ +#define TR2_FREE_ACT 0x00004000L /* Free Action */ +#define TR2_HOLD_LIFE 0x00008000L /* Hold Life */ +#define TR2_RES_ACID 0x00010000L +#define TR2_RES_ELEC 0x00020000L +#define TR2_RES_FIRE 0x00040000L +#define TR2_RES_COLD 0x00080000L +#define TR2_RES_POIS 0x00100000L +#define TR2_RES_FEAR 0x00200000L +#define TR2_RES_LITE 0x00400000L +#define TR2_RES_DARK 0x00800000L +#define TR2_RES_BLIND 0x01000000L +#define TR2_RES_CONF 0x02000000L +#define TR2_RES_SOUND 0x04000000L +#define TR2_RES_SHARDS 0x08000000L +#define TR2_RES_NETHER 0x10000000L +#define TR2_RES_NEXUS 0x20000000L +#define TR2_RES_CHAOS 0x40000000L +#define TR2_RES_DISEN 0x80000000L +#define TR2_NULL_MASK 0x00000000L + +#define TR3_SH_FIRE 0x00000001L /* Immolation (Fire) */ +#define TR3_SH_ELEC 0x00000002L /* Electric Sheath */ +#define TR3_AUTO_CURSE 0x00000004L /* The obj will recurse itself */ +#define TR3_DECAY 0x00000008L /* Decay */ +#define TR3_NO_TELE 0x00000010L /* Anti-teleportation */ +#define TR3_NO_MAGIC 0x00000020L /* Anti-magic */ +#define TR3_WRAITH 0x00000040L /* Wraithform */ +#define TR3_TY_CURSE 0x00000080L /* The Ancient Curse */ +#define TR3_EASY_KNOW 0x00000100L /* Aware -> Known */ +#define TR3_HIDE_TYPE 0x00000200L /* Hide "pval" description */ +#define TR3_SHOW_MODS 0x00000400L /* Always show Tohit/Todam */ +#define TR3_INSTA_ART 0x00000800L /* Item must be an artifact */ +#define TR3_FEATHER 0x00001000L /* Feather Falling */ +#define TR3_LITE1 0x00002000L /* lite radius 1 */ +#define TR3_SEE_INVIS 0x00004000L /* See Invisible */ +#define TR3_NORM_ART 0x00008000L /* Artifact in k_info */ +#define TR3_SLOW_DIGEST 0x00010000L /* Item slows down digestion */ +#define TR3_REGEN 0x00020000L /* Item induces regeneration */ +#define TR3_XTRA_MIGHT 0x00040000L /* Bows get extra multiplier */ +#define TR3_XTRA_SHOTS 0x00080000L /* Bows get extra shots */ +#define TR3_IGNORE_ACID 0x00100000L /* Item ignores Acid Damage */ +#define TR3_IGNORE_ELEC 0x00200000L /* Item ignores Elec Damage */ +#define TR3_IGNORE_FIRE 0x00400000L /* Item ignores Fire Damage */ +#define TR3_IGNORE_COLD 0x00800000L /* Item ignores Cold Damage */ +#define TR3_ACTIVATE 0x01000000L /* Item can be activated */ +#define TR3_DRAIN_EXP 0x02000000L /* Item drains Experience */ +#define TR3_TELEPORT 0x04000000L /* Item teleports player */ +#define TR3_AGGRAVATE 0x08000000L /* Item aggravates monsters */ +#define TR3_BLESSED 0x10000000L /* Item is Blessed */ +#define TR3_CURSED 0x20000000L /* Item is Cursed */ +#define TR3_HEAVY_CURSE 0x40000000L /* Item is Heavily Cursed */ +#define TR3_PERMA_CURSE 0x80000000L /* Item is Perma Cursed */ +#define TR3_NULL_MASK 0x00000000L + + +#define TR4_NEVER_BLOW 0x00000001L /* Weapon can't attack */ +#define TR4_PRECOGNITION 0x00000002L /* Like activating the cheat mode */ +#define TR4_BLACK_BREATH 0x00000004L /* Tolkien's Black Breath */ +#define TR4_RECHARGE 0x00000008L /* For artifact Wands and Staffs */ +#define TR4_FLY 0x00000010L /* This one and ONLY this one allow you to fly over trees */ +#define TR4_DG_CURSE 0x00000020L /* The Ancient Morgothian Curse */ +#define TR4_COULD2H 0x00000040L /* Can wield it 2 Handed */ +#define TR4_MUST2H 0x00000080L /* Must wield it 2 Handed */ +#define TR4_LEVELS 0x00000100L /* Can gain exp/exp levels !! */ +#define TR4_CLONE 0x00000200L /* Can clone monsters */ +#define TR4_SPECIAL_GENE 0x00000400L /* The object can only be generated in special conditions like quests, special dungeons, ... */ +#define TR4_CLIMB 0x00000800L /* Allow climbing mountains */ +#define TR4_FAST_CAST 0x00001000L /* Rod is x2 time faster to use */ +#define TR4_CAPACITY 0x00002000L /* Rod can take x2 mana */ +#define TR4_CHARGING 0x00004000L /* Rod recharge faster */ +#define TR4_CHEAPNESS 0x00008000L /* Rod spells are cheaper(in mana cost) to cast */ +#define TR4_FOUNTAIN 0x00010000L /* Available as fountain (for potions) */ +#define TR4_ANTIMAGIC_50 0x00020000L /* Forbid magic */ +#define TR4_ANTIMAGIC_30 0x00040000L /* Forbid magic */ +#define TR4_ANTIMAGIC_20 0x00080000L /* Forbid magic */ +#define TR4_ANTIMAGIC_10 0x00100000L /* Forbid magic */ +#define TR4_EASY_USE 0x00200000L /* Easily activable */ +#define TR4_IM_NETHER 0x00400000L /* Immunity to nether */ +#define TR4_RECHARGED 0x00800000L /* Object has been recharged once */ +#define TR4_ULTIMATE 0x01000000L /* ULTIMATE artifact */ +#define TR4_AUTO_ID 0x02000000L /* Id stuff on floor */ +#define TR4_LITE2 0x04000000L /* lite radius 2 */ +#define TR4_LITE3 0x08000000L /* lite radius 3 */ +#define TR4_FUEL_LITE 0x10000000L /* fuelable lite */ +#define TR4_ART_EXP 0x20000000L /* Will accumulate xp */ +#define TR4_CURSE_NO_DROP 0x40000000L /* The obj wont be dropped */ +#define TR4_NO_RECHARGE 0x80000000L /* Object Cannot be recharged */ +#define TR4_NULL_MASK 0xFFFFFFFCL + +#define TR5_TEMPORARY 0x00000001L /* In timeout turns it is destroyed */ +#define TR5_DRAIN_MANA 0x00000002L /* Drains mana */ +#define TR5_DRAIN_HP 0x00000004L /* Drains hp */ +#define TR5_KILL_DEMON 0x00000008L /* Execute Demon */ +#define TR5_KILL_UNDEAD 0x00000010L /* Execute Undead */ +#define TR5_CRIT 0x00000020L /* More critical hits */ +#define TR5_ATTR_MULTI 0x00000040L /* Object shimmer -- only allowed in k_info */ +#define TR5_WOUNDING 0x00000080L /* Wounds monsters */ +#define TR5_FULL_NAME 0x00000100L /* Uses direct name from k_info */ +#define TR5_LUCK 0x00000200L /* Luck += pval */ +#define TR5_IMMOVABLE 0x00000400L /* Cannot move */ +#define TR5_SPELL_CONTAIN 0x00000800L /* Can contain a spell */ +#define TR5_RES_MORGUL 0x00001000L /* Is not shattered by morgul fiends(nazguls) */ +#define TR5_ACTIVATE_NO_WIELD 0x00002000L /* Can be 'A'ctivated without being wielded */ +#define TR5_MAGIC_BREATH 0x00004000L /* Can breath anywere */ +#define TR5_WATER_BREATH 0x00008000L /* Can breath underwater */ +#define TR5_WIELD_CAST 0x00010000L /* Need to be wielded to cast spelsl fomr it(if it can be wiekded) */ + +/* ESP defines */ +#define ESP_ORC 0x00000001L +#define ESP_TROLL 0x00000002L +#define ESP_DRAGON 0x00000004L +#define ESP_GIANT 0x00000008L +#define ESP_DEMON 0x00000010L +#define ESP_UNDEAD 0x00000020L +#define ESP_EVIL 0x00000040L +#define ESP_ANIMAL 0x00000080L +#define ESP_THUNDERLORD 0x00000100L +#define ESP_GOOD 0x00000200L +#define ESP_NONLIVING 0x00000400L +#define ESP_UNIQUE 0x00000800L +#define ESP_SPIDER 0x00001000L +#define ESP_ALL 0x80000000L + +/* Number of group of flags to choose from */ +#define MAX_FLAG_GROUP 12 +#define NEW_GROUP_CHANCE 40 /* Chance to get a new group */ + +/* + * Hack masks for "pval-dependant" flags. + */ +#define TR1_PVAL_MASK \ + (TR1_STR | TR1_INT | TR1_WIS | TR1_DEX | \ + TR1_CON | TR1_CHR | \ + TR1_STEALTH | TR1_SEARCH | TR1_INFRA | TR1_TUNNEL | \ + TR1_SPEED | TR1_BLOWS | TR1_SPELL) + +#define TR5_PVAL_MASK \ + (TR5_CRIT | TR5_LUCK) + + +/*** Ego flags ***/ +#define ETR4_SUSTAIN 0x00000001L /* Ego-Item gives a Random Sustain */ +#define ETR4_OLD_RESIST 0x00000002L /* The old "extra power" random high resist */ +#define ETR4_ABILITY 0x00000004L /* Ego-Item has a random Sustain */ +#define ETR4_R_ELEM 0x00000008L /* Item resists Acid/Fire/Cold/Elec or Poison */ +#define ETR4_R_LOW 0x00000010L /* Item has a random low resist */ +#define ETR4_R_HIGH 0x00000020L /* Item has a random high resist */ +#define ETR4_R_ANY 0x00000040L /* Item has one additional resist */ +#define ETR4_R_DRAGON 0x00000080L /* Item gets "Dragon" Resist */ +#define ETR4_SLAY_WEAP 0x00000100L /* Special 'Slaying' bonus */ +#define ETR4_DAM_DIE 0x00000200L /* Item has an additional dam die */ +#define ETR4_DAM_SIZE 0x00000400L /* Item has greater damage dice */ +#define ETR4_PVAL_M1 0x00000800L /* Item has +1 to pval */ +#define ETR4_PVAL_M2 0x00001000L /* Item has +(up to 2) to pval */ +#define ETR4_PVAL_M3 0x00002000L /* Item has +(up to 3) to pval */ +#define ETR4_PVAL_M5 0x00004000L /* Item has +(up to 5) to pval */ +#define ETR4_AC_M1 0x00008000L /* Item has +1 to AC */ +#define ETR4_AC_M2 0x00010000L /* Item has +(up to 2) to AC */ +#define ETR4_AC_M3 0x00020000L /* Item has +(up to 3) to AC */ +#define ETR4_AC_M5 0x00040000L /* Item has +(up to 5) to AC */ +#define ETR4_TH_M1 0x00080000L /* Item has +1 to hit */ +#define ETR4_TH_M2 0x00100000L /* Item has +(up to 2) to hit */ +#define ETR4_TH_M3 0x00200000L /* Item has +(up to 3) to hit */ +#define ETR4_TH_M5 0x00400000L /* Item has +(up to 5) to hit */ +#define ETR4_TD_M1 0x00800000L /* Item has +1 to dam */ +#define ETR4_TD_M2 0x01000000L /* Item has +(up to 2) to dam */ +#define ETR4_TD_M3 0x02000000L /* Item has +(up to 3) to dam */ +#define ETR4_TD_M5 0x04000000L /* Item has +(up to 5) to dam */ +#define ETR4_R_P_ABILITY 0x08000000L /* Item has a random pval-affected ability */ +#define ETR4_R_STAT 0x10000000L /* Item affects a random stat */ +#define ETR4_R_STAT_SUST 0x20000000L /* Item affects a random stat & sustains it */ +#define ETR4_R_IMMUNITY 0x40000000L /* Item gives a random immunity */ +#define ETR4_LIMIT_BLOWS 0x80000000L /* switch the "limit blows" feature */ + +/*** Features flags -- DG ***/ +#define FF1_NO_WALK 0x00000001L +#define FF1_NO_VISION 0x00000002L +#define FF1_CAN_LEVITATE 0x00000004L +#define FF1_CAN_PASS 0x00000008L +#define FF1_FLOOR 0x00000010L +#define FF1_WALL 0x00000020L +#define FF1_PERMANENT 0x00000040L +#define FF1_CAN_FLY 0x00000080L +#define FF1_REMEMBER 0x00000100L +#define FF1_NOTICE 0x00000200L +#define FF1_DONT_NOTICE_RUNNING 0x00000400L +#define FF1_CAN_RUN 0x00000800L +#define FF1_DOOR 0x00001000L +#define FF1_SUPPORT_LIGHT 0x00002000L +#define FF1_CAN_CLIMB 0x00004000L +#define FF1_TUNNELABLE 0x00008000L +#define FF1_WEB 0x00010000L +#define FF1_ATTR_MULTI 0x00020000L +#define FF1_SUPPORT_GROWTH 0x00040000L + +/*** Dungeon type flags -- DG ***/ +#define DF1_PRINCIPAL 0x00000001L /* Is a principal dungeon */ +#define DF1_MAZE 0x00000002L /* Is a maze-type dungeon */ +#define DF1_SMALLEST 0x00000004L /* Creates VERY small levels like The Maze */ +#define DF1_SMALL 0x00000008L /* Creates small levels like Dol Goldor */ +#define DF1_BIG 0x00000010L /* Creates big levels like Moria, and Angband dungeons */ +#define DF1_NO_DOORS 0x00000020L /* No doors on rooms, like Barrowdowns, Old Forest etc) */ +#define DF1_WATER_RIVER 0x00000040L /* Allow a single water streamer on a level */ +#define DF1_LAVA_RIVER 0x00000080L /* Allow a single lava streamer on a level */ +#define DF1_WATER_RIVERS 0x00000100L /* Allow multiple water streamers on a level */ +#define DF1_LAVA_RIVERS 0x00000200L /* Allow multiple lava streamers on a level */ +#define DF1_CAVE 0x00000400L /* Allow rooms */ +#define DF1_CAVERN 0x00000800L /* Allow cavern rooms */ +#define DF1_NO_UP 0x00001000L /* Disallow up stairs */ +#define DF1_HOT 0x00002000L /* Corpses on ground and in pack decay quicker through heat */ +#define DF1_COLD 0x00004000L /* Corpses on ground and in pack decay quicker through cold */ +#define DF1_FORCE_DOWN 0x00008000L /* No up stairs generated */ +#define DF1_FORGET 0x00010000L /* Features are forgotten, like the Maze and Illusory Castle */ +#define DF1_NO_DESTROY 0x00020000L /* No destroyed levels in dungeon */ +#define DF1_SAND_VEIN 0x00040000L /* Like in the sandworm lair */ +#define DF1_CIRCULAR_ROOMS 0x00080000L /* Allow circular rooms */ +#define DF1_EMPTY 0x00100000L /* Allow arena levels */ +#define DF1_DAMAGE_FEAT 0x00200000L +#define DF1_FLAT 0x00400000L /* Creates paths to next areas at edge of level, like Barrowdowns */ +#define DF1_TOWER 0x00800000L /* You start at bottom and go up rather than the reverse */ +#define DF1_RANDOM_TOWNS 0x01000000L /* Allow random towns */ +#define DF1_DOUBLE 0x02000000L /* Creates double-walled dungeon like Helcaraxe and Erebor */ +#define DF1_LIFE_LEVEL 0x04000000L /* Creates dungeon level on modified 'game of life' algorithm */ +#define DF1_EVOLVE 0x08000000L /* Evolving, pulsing levels like Heart of the Earth */ +#define DF1_ADJUST_LEVEL_1 0x10000000L /* Minimum monster level will be equal to dungeon level */ +#define DF1_ADJUST_LEVEL_2 0x20000000L /* Minimum monster level will be double the dungeon level */ +#define DF1_NO_RECALL 0x40000000L /* No recall allowed */ +#define DF1_NO_STREAMERS 0x80000000L /* No streamers */ + +#define DF2_ADJUST_LEVEL_1_2 0x00000001L /* Minimum monster level will be half the dungeon level */ +#define DF2_NO_SHAFT 0x00000002L /* No shafts */ +#define DF2_ADJUST_LEVEL_PLAYER 0x00000004L /* Uses player level*2 instead of dungeon level for other ADJUST_LEVEL flags */ +#define DF2_NO_TELEPORT 0x00000008L +#define DF2_ASK_LEAVE 0x00000010L +#define DF2_NO_STAIR 0x00000020L +#define DF2_SPECIAL 0x00000040L +#define DF2_NO_NEW_MONSTER 0x00000080L +#define DF2_DESC 0x00000100L +#define DF2_NO_GENO 0x00000200L +#define DF2_NO_BREATH 0x00000400L /* Oups, cannot breath here */ +#define DF2_WATER_BREATH 0x00000800L /* Oups, cannot breath here, need water breathing */ +#define DF2_ELVEN 0x00001000L /* Try to create elven monster ego */ +#define DF2_DWARVEN 0x00002000L /* Try to create dwarven monster ego */ +#define DF2_NO_EASY_MOVE 0x00004000L /* Forbid stuff like teleport level, probability travel, ... */ +#define DF2_NO_RECALL_OUT 0x00008000L /* Cannot recall out of the place */ +#define DF2_DESC_ALWAYS 0x00010000L /* Always shows the desc */ + +/*** Town flags ***/ +#define TOWN_REAL 0x01 /* Town is really present */ +#define TOWN_KNOWN 0x02 /* Town is found by the player */ + + + +/*** Monster blow constants ***/ + +#define MODIFY_AUX(o, n) ((o) = modify_aux((o), (n) >> 2, (n) & 3)) +#define MODIFY(o, n, min) MODIFY_AUX(o, n); (o) = ((o) < (min))?(min):(o) + +/* + * New monster blow methods + */ +#define RBM_ANY 0 +#define RBM_HIT 1 +#define RBM_TOUCH 2 +#define RBM_PUNCH 3 +#define RBM_KICK 4 +#define RBM_CLAW 5 +#define RBM_BITE 6 +#define RBM_STING 7 +#define RBM_XXX1 8 +#define RBM_BUTT 9 +#define RBM_CRUSH 10 +#define RBM_ENGULF 11 +#define RBM_CHARGE 12 +#define RBM_CRAWL 13 +#define RBM_DROOL 14 +#define RBM_SPIT 15 +#define RBM_EXPLODE 16 +#define RBM_GAZE 17 +#define RBM_WAIL 18 +#define RBM_SPORE 19 +#define RBM_XXX4 20 +#define RBM_BEG 21 +#define RBM_INSULT 22 +#define RBM_MOAN 23 +#define RBM_SHOW 24 + + +/* + * New monster blow effects + */ +#define RBE_ANY 0 +#define RBE_HURT 1 +#define RBE_POISON 2 +#define RBE_UN_BONUS 3 +#define RBE_UN_POWER 4 +#define RBE_EAT_GOLD 5 +#define RBE_EAT_ITEM 6 +#define RBE_EAT_FOOD 7 +#define RBE_EAT_LITE 8 +#define RBE_ACID 9 +#define RBE_ELEC 10 +#define RBE_FIRE 11 +#define RBE_COLD 12 +#define RBE_BLIND 13 +#define RBE_CONFUSE 14 +#define RBE_TERRIFY 15 +#define RBE_PARALYZE 16 +#define RBE_LOSE_STR 17 +#define RBE_LOSE_INT 18 +#define RBE_LOSE_WIS 19 +#define RBE_LOSE_DEX 20 +#define RBE_LOSE_CON 21 +#define RBE_LOSE_CHR 22 +#define RBE_LOSE_ALL 23 +#define RBE_SHATTER 24 +#define RBE_EXP_10 25 +#define RBE_EXP_20 26 +#define RBE_EXP_40 27 +#define RBE_EXP_80 28 +#define RBE_DISEASE 29 +#define RBE_TIME 30 +#define RBE_SANITY 31 +#define RBE_HALLU 32 +#define RBE_PARASITE 33 +#define RBE_ABOMINATION 34 + + +/*** Monster flag values (hard-coded) ***/ + +#define MONSTER_LEVEL_MAX 150 +#define MONSTER_EXP(level) ((((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * (((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * (((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * 6) + +/* + * New monster race bit flags + */ +#define RF1_UNIQUE 0x00000001 /* Unique Monster */ +#define RF1_QUESTOR 0x00000002 /* Quest Monster */ +#define RF1_MALE 0x00000004 /* Male gender */ +#define RF1_FEMALE 0x00000008 /* Female gender */ +#define RF1_CHAR_CLEAR 0x00000010 /* Absorbs symbol */ +#define RF1_CHAR_MULTI 0x00000020 /* Changes symbol */ +#define RF1_ATTR_CLEAR 0x00000040 /* Absorbs color */ +#define RF1_ATTR_MULTI 0x00000080 /* Changes color */ +#define RF1_FORCE_DEPTH 0x00000100 /* Start at "correct" depth */ +#define RF1_FORCE_MAXHP 0x00000200 /* Start with max hitpoints */ +#define RF1_FORCE_SLEEP 0x00000400 /* Start out sleeping */ +#define RF1_FORCE_EXTRA 0x00000800 /* Start out something */ +#define RF1_FRIEND 0x00001000 /* Arrive with a friend */ +#define RF1_FRIENDS 0x00002000 /* Arrive with some friends */ +#define RF1_ESCORT 0x00004000 /* Arrive with an escort */ +#define RF1_ESCORTS 0x00008000 /* Arrive with some escorts */ +#define RF1_NEVER_BLOW 0x00010000 /* Never make physical blow */ +#define RF1_NEVER_MOVE 0x00020000 /* Never make physical move */ +#define RF1_RAND_25 0x00040000 /* Moves randomly (25%) */ +#define RF1_RAND_50 0x00080000 /* Moves randomly (50%) */ +#define RF1_ONLY_GOLD 0x00100000 /* Drop only gold */ +#define RF1_ONLY_ITEM 0x00200000 /* Drop only items */ +#define RF1_DROP_60 0x00400000 /* Drop an item/gold (60%) */ +#define RF1_DROP_90 0x00800000 /* Drop an item/gold (90%) */ +#define RF1_DROP_1D2 0x01000000 /* Drop 1d2 items/gold */ +#define RF1_DROP_2D2 0x02000000 /* Drop 2d2 items/gold */ +#define RF1_DROP_3D2 0x04000000 /* Drop 3d2 items/gold */ +#define RF1_DROP_4D2 0x08000000 /* Drop 4d2 items/gold */ +#define RF1_DROP_GOOD 0x10000000 /* Drop good items */ +#define RF1_DROP_GREAT 0x20000000 /* Drop great items */ +#define RF1_DROP_USEFUL 0x40000000 /* Drop "useful" items */ +#define RF1_DROP_CHOSEN 0x80000000 /* Drop "chosen" items */ + +/* + * New monster race bit flags + */ +#define RF2_STUPID 0x00000001 /* Monster is stupid */ +#define RF2_SMART 0x00000002 /* Monster is smart */ +#define RF2_CAN_SPEAK 0x00000004 /* TY: can speak */ +#define RF2_REFLECTING 0x00000008 /* Reflects bolts */ +#define RF2_INVISIBLE 0x00000010 /* Monster avoids vision */ +#define RF2_COLD_BLOOD 0x00000020 /* Monster avoids infra */ +#define RF2_EMPTY_MIND 0x00000040 /* Monster avoids telepathy */ +#define RF2_WEIRD_MIND 0x00000080 /* Monster avoids telepathy? */ +#define RF2_DEATH_ORB 0x00000100 /* Death Orb */ +#define RF2_REGENERATE 0x00000200 /* Monster regenerates */ +#define RF2_SHAPECHANGER 0x00000400 /* TY: shapechanger */ +#define RF2_ATTR_ANY 0x00000800 /* TY: Attr_any */ +#define RF2_POWERFUL 0x00001000 /* Monster has strong breath */ +#define RF2_ELDRITCH_HORROR 0x00002000 /* Sanity-blasting horror */ +#define RF2_AURA_FIRE 0x00004000 /* Burns in melee */ +#define RF2_AURA_ELEC 0x00008000 /* Shocks in melee */ +#define RF2_OPEN_DOOR 0x00010000 /* Monster can open doors */ +#define RF2_BASH_DOOR 0x00020000 /* Monster can bash doors */ +#define RF2_PASS_WALL 0x00040000 /* Monster can pass walls */ +#define RF2_KILL_WALL 0x00080000 /* Monster can destroy walls */ +#define RF2_MOVE_BODY 0x00100000 /* Monster can move monsters */ +#define RF2_KILL_BODY 0x00200000 /* Monster can kill monsters */ +#define RF2_TAKE_ITEM 0x00400000 /* Monster can pick up items */ +#define RF2_KILL_ITEM 0x00800000 /* Monster can crush items */ +#define RF2_BRAIN_1 0x01000000 +#define RF2_BRAIN_2 0x02000000 +#define RF2_BRAIN_3 0x04000000 +#define RF2_BRAIN_4 0x08000000 +#define RF2_BRAIN_5 0x10000000 +#define RF2_BRAIN_6 0x20000000 +#define RF2_BRAIN_7 0x40000000 +#define RF2_BRAIN_8 0x80000000 + +/* + * New monster race bit flags + */ +#define RF3_ORC 0x00000001 /* Orc */ +#define RF3_TROLL 0x00000002 /* Troll */ +#define RF3_GIANT 0x00000004 /* Giant */ +#define RF3_DRAGON 0x00000008 /* Dragon */ +#define RF3_DEMON 0x00000010 /* Demon */ +#define RF3_UNDEAD 0x00000020 /* Undead */ +#define RF3_EVIL 0x00000040 /* Evil */ +#define RF3_ANIMAL 0x00000080 /* Animal */ +#define RF3_THUNDERLORD 0x00000100 /* DG: Thunderlord */ +#define RF3_GOOD 0x00000200 /* Good */ +#define RF3_AURA_COLD 0x00000400 /* Freezes in melee */ +#define RF3_NONLIVING 0x00000800 /* TY: Non-Living (?) */ +#define RF3_HURT_LITE 0x00001000 /* Hurt by lite */ +#define RF3_HURT_ROCK 0x00002000 /* Hurt by rock remover */ +#define RF3_SUSCEP_FIRE 0x00004000 /* Hurt badly by fire */ +#define RF3_SUSCEP_COLD 0x00008000 /* Hurt badly by cold */ +#define RF3_IM_ACID 0x00010000 /* Resist acid a lot */ +#define RF3_IM_ELEC 0x00020000 /* Resist elec a lot */ +#define RF3_IM_FIRE 0x00040000 /* Resist fire a lot */ +#define RF3_IM_COLD 0x00080000 /* Resist cold a lot */ +#define RF3_IM_POIS 0x00100000 /* Resist poison a lot */ +#define RF3_RES_TELE 0x00200000 /* Resist teleportation */ +#define RF3_RES_NETH 0x00400000 /* Resist nether a lot */ +#define RF3_RES_WATE 0x00800000 /* Resist water */ +#define RF3_RES_PLAS 0x01000000 /* Resist plasma */ +#define RF3_RES_NEXU 0x02000000 /* Resist nexus */ +#define RF3_RES_DISE 0x04000000 /* Resist disenchantment */ +#define RF3_UNIQUE_4 0x08000000 /* Is a "Nazgul" unique */ +#define RF3_NO_FEAR 0x10000000 /* Cannot be scared */ +#define RF3_NO_STUN 0x20000000 /* Cannot be stunned */ +#define RF3_NO_CONF 0x40000000 /* Cannot be confused */ +#define RF3_NO_SLEEP 0x80000000 /* Cannot be slept */ + +/* + * New monster race bit flags + */ +#define RF4_SHRIEK 0x00000001 /* Shriek for help */ +#define RF4_MULTIPLY 0x00000002 /* Monster reproduces */ +#define RF4_S_ANIMAL 0x00000004 /* Summon animals */ +#define RF4_ROCKET 0x00000008 /* TY: Rocket */ +#define RF4_ARROW_1 0x00000010 /* Fire an arrow (light) */ +#define RF4_ARROW_2 0x00000020 /* Fire an arrow (heavy) */ +#define RF4_ARROW_3 0x00000040 /* Fire missiles (light) */ +#define RF4_ARROW_4 0x00000080 /* Fire missiles (heavy) */ +#define RF4_BR_ACID 0x00000100 /* Breathe Acid */ +#define RF4_BR_ELEC 0x00000200 /* Breathe Elec */ +#define RF4_BR_FIRE 0x00000400 /* Breathe Fire */ +#define RF4_BR_COLD 0x00000800 /* Breathe Cold */ +#define RF4_BR_POIS 0x00001000 /* Breathe Poison */ +#define RF4_BR_NETH 0x00002000 /* Breathe Nether */ +#define RF4_BR_LITE 0x00004000 /* Breathe Lite */ +#define RF4_BR_DARK 0x00008000 /* Breathe Dark */ +#define RF4_BR_CONF 0x00010000 /* Breathe Confusion */ +#define RF4_BR_SOUN 0x00020000 /* Breathe Sound */ +#define RF4_BR_CHAO 0x00040000 /* Breathe Chaos */ +#define RF4_BR_DISE 0x00080000 /* Breathe Disenchant */ +#define RF4_BR_NEXU 0x00100000 /* Breathe Nexus */ +#define RF4_BR_TIME 0x00200000 /* Breathe Time */ +#define RF4_BR_INER 0x00400000 /* Breathe Inertia */ +#define RF4_BR_GRAV 0x00800000 /* Breathe Gravity */ +#define RF4_BR_SHAR 0x01000000 /* Breathe Shards */ +#define RF4_BR_PLAS 0x02000000 /* Breathe Plasma */ +#define RF4_BR_WALL 0x04000000 /* Breathe Force */ +#define RF4_BR_MANA 0x08000000 /* Breathe Mana */ +#define RF4_BA_NUKE 0x10000000 /* TY: Nuke Ball */ +#define RF4_BR_NUKE 0x20000000 /* TY: Toxic Breath */ +#define RF4_BA_CHAO 0x40000000 /* Chaos Ball */ +#define RF4_BR_DISI 0x80000000 /* Breathe Disintegration */ + +/* + * New monster race bit flags + */ +#define RF5_BA_ACID 0x00000001 /* Acid Ball */ +#define RF5_BA_ELEC 0x00000002 /* Elec Ball */ +#define RF5_BA_FIRE 0x00000004 /* Fire Ball */ +#define RF5_BA_COLD 0x00000008 /* Cold Ball */ +#define RF5_BA_POIS 0x00000010 /* Poison Ball */ +#define RF5_BA_NETH 0x00000020 /* Nether Ball */ +#define RF5_BA_WATE 0x00000040 /* Water Ball */ +#define RF5_BA_MANA 0x00000080 /* Mana Storm */ +#define RF5_BA_DARK 0x00000100 /* Darkness Storm */ +#define RF5_DRAIN_MANA 0x00000200 /* Drain Mana */ +#define RF5_MIND_BLAST 0x00000400 /* Blast Mind */ +#define RF5_BRAIN_SMASH 0x00000800 /* Smash Brain */ +#define RF5_CAUSE_1 0x00001000 /* Cause Light Wound */ +#define RF5_CAUSE_2 0x00002000 /* Cause Serious Wound */ +#define RF5_CAUSE_3 0x00004000 /* Cause Critical Wound */ +#define RF5_CAUSE_4 0x00008000 /* Cause Mortal Wound */ +#define RF5_BO_ACID 0x00010000 /* Acid Bolt */ +#define RF5_BO_ELEC 0x00020000 /* Elec Bolt (unused) */ +#define RF5_BO_FIRE 0x00040000 /* Fire Bolt */ +#define RF5_BO_COLD 0x00080000 /* Cold Bolt */ +#define RF5_BO_POIS 0x00100000 /* Poison Bolt (unused) */ +#define RF5_BO_NETH 0x00200000 /* Nether Bolt */ +#define RF5_BO_WATE 0x00400000 /* Water Bolt */ +#define RF5_BO_MANA 0x00800000 /* Mana Bolt */ +#define RF5_BO_PLAS 0x01000000 /* Plasma Bolt */ +#define RF5_BO_ICEE 0x02000000 /* Ice Bolt */ +#define RF5_MISSILE 0x04000000 /* Magic Missile */ +#define RF5_SCARE 0x08000000 /* Frighten Player */ +#define RF5_BLIND 0x10000000 /* Blind Player */ +#define RF5_CONF 0x20000000 /* Confuse Player */ +#define RF5_SLOW 0x40000000 /* Slow Player */ +#define RF5_HOLD 0x80000000 /* Paralyze Player */ + +/* + * New monster race bit flags + */ +#define RF6_HASTE 0x00000001 /* Speed self */ +#define RF6_HAND_DOOM 0x00000002 /* Hand of Doom */ +#define RF6_HEAL 0x00000004 /* Heal self */ +#define RF6_S_ANIMALS 0x00000008 /* Summon animals */ +#define RF6_BLINK 0x00000010 /* Teleport Short */ +#define RF6_TPORT 0x00000020 /* Teleport Long */ +#define RF6_TELE_TO 0x00000040 /* Move player to monster */ +#define RF6_TELE_AWAY 0x00000080 /* Move player far away */ +#define RF6_TELE_LEVEL 0x00000100 /* Move player vertically */ +#define RF6_DARKNESS 0x00000200 /* Create Darkness */ +#define RF6_TRAPS 0x00000400 /* Create Traps */ +#define RF6_FORGET 0x00000800 /* Cause amnesia */ +#define RF6_RAISE_DEAD 0x00001000 /* Raise Dead */ +#define RF6_S_BUG 0x00002000 /* Summon Software bug */ +#define RF6_S_RNG 0x00004000 /* Summon RNG */ +#define RF6_S_THUNDERLORD 0x00008000 /* Summon Thunderlords */ +#define RF6_S_KIN 0x00010000 /* Summon "kin" */ +#define RF6_S_HI_DEMON 0x00020000 /* Summon greater demons! */ +#define RF6_S_MONSTER 0x00040000 /* Summon Monster */ +#define RF6_S_MONSTERS 0x00080000 /* Summon Monsters */ +#define RF6_S_ANT 0x00100000 /* Summon Ants */ +#define RF6_S_SPIDER 0x00200000 /* Summon Spiders */ +#define RF6_S_HOUND 0x00400000 /* Summon Hounds */ +#define RF6_S_HYDRA 0x00800000 /* Summon Hydras */ +#define RF6_S_ANGEL 0x01000000 /* Summon Angel */ +#define RF6_S_DEMON 0x02000000 /* Summon Demon */ +#define RF6_S_UNDEAD 0x04000000 /* Summon Undead */ +#define RF6_S_DRAGON 0x08000000 /* Summon Dragon */ +#define RF6_S_HI_UNDEAD 0x10000000 /* Summon Greater Undead */ +#define RF6_S_HI_DRAGON 0x20000000 /* Summon Ancient Dragon */ +#define RF6_S_WRAITH 0x40000000 /* Summon Unique Wraith */ +#define RF6_S_UNIQUE 0x80000000 /* Summon Unique Monster */ + +/* + * New monster race bit flags + */ +#define RF7_AQUATIC 0x00000001 /* Aquatic monster */ +#define RF7_CAN_SWIM 0x00000002 /* Monster can swim */ +#define RF7_CAN_FLY 0x00000004 /* Monster can fly */ +#define RF7_FRIENDLY 0x00000008 /* Monster is friendly */ +#define RF7_PET 0x00000010 /* Monster is a pet */ +#define RF7_MORTAL 0x00000020 /* Monster is a mortal being */ +#define RF7_SPIDER 0x00000040 /* Monster is a spider (can pass webs) */ +#define RF7_NAZGUL 0x00000080 /* Monster is a Nazgul */ +#define RF7_DG_CURSE 0x00000100 /* If killed the monster grant a DG Curse to the player */ +#define RF7_POSSESSOR 0x00000200 /* Is it a dreaded possessor monster ? */ +#define RF7_NO_DEATH 0x00000400 /* Cannot be killed */ +#define RF7_NO_TARGET 0x00000800 /* Cannot be targeted */ +#define RF7_AI_ANNOY 0x00001000 /* Try to tease the player */ +#define RF7_AI_SPECIAL 0x00002000 /* For quests */ +#define RF7_NEUTRAL 0x00004000 /* Monster is neutral */ +#define RF7_DROP_ART 0x00008000 /* Monster drop one art */ +#define RF7_DROP_RANDART 0x00010000 /* Monster drop one randart */ +#define RF7_AI_PLAYER 0x00020000 /* Controlled by the player */ +#define RF7_NO_THEFT 0x00040000 /* Monster is immune to theft */ +#define RF7_SPIRIT 0x00080000 /* This is a Spirit, coming from the Void */ +#define RF7_IM_MELEE 0x00100000 /* IM melee */ + + +/* + * Monster race flags + */ +#define RF8_DUNGEON 0x00000001 +#define RF8_WILD_TOWN 0x00000002 +#define RF8_XXX8X02 0x00000004 +#define RF8_WILD_SHORE 0x00000008 +#define RF8_WILD_OCEAN 0x00000010 +#define RF8_WILD_WASTE 0x00000020 +#define RF8_WILD_WOOD 0x00000040 +#define RF8_WILD_VOLCANO 0x00000080 +#define RF8_XXX8X08 0x00000100 +#define RF8_WILD_MOUNTAIN 0x00000200 +#define RF8_WILD_GRASS 0x00000400 +#define RF8_NO_CUT 0x00000800 +#define RF8_CTHANGBAND 0x00001000 /* Not used in ToME */ +/* XXX */ +#define RF8_ZANGBAND 0x00004000 /* Not used in ToME */ +#define RF8_JOKEANGBAND 0x00008000 +#define RF8_ANGBAND 0x00010000 + +#define RF8_WILD_TOO 0x80000000 + + +/* + * Monster race flags + */ +#define RF9_DROP_CORPSE 0x00000001 +#define RF9_DROP_SKELETON 0x00000002 +#define RF9_HAS_LITE 0x00000004 /* Carries a lite */ +#define RF9_MIMIC 0x00000008 /* *REALLY* looks like an object ... only nastier */ +#define RF9_HAS_EGG 0x00000010 /* Can be monster's eggs */ +#define RF9_IMPRESED 0x00000020 /* The monster can follow you on each level until he dies */ +#define RF9_SUSCEP_ACID 0x00000040 /* Susceptible to acid */ +#define RF9_SUSCEP_ELEC 0x00000080 /* Susceptible to lightning */ +#define RF9_SUSCEP_POIS 0x00000100 /* Susceptible to poison */ +#define RF9_KILL_TREES 0x00000200 /* Monster can eat trees */ +#define RF9_WYRM_PROTECT 0x00000400 /* The monster is protected by great wyrms of power: They'll be summoned if it's killed */ +#define RF9_DOPPLEGANGER 0x00000800 /* The monster looks like you */ +#define RF9_ONLY_DEPTH 0x00001000 /* The monster can only be generated at the GIVEN depth */ +#define RF9_SPECIAL_GENE 0x00002000 /* The monster can only be generated in special conditions like quests, special dungeons, ... */ +#define RF9_NEVER_GENE 0x00004000 /* The monster cannot be normaly generated */ + + +/* + * Hack -- choose "intelligent" spells when desperate + */ + +#define RF4_INT_MASK \ + (RF4_S_ANIMAL) + +#define RF5_INT_MASK \ + (RF5_HOLD | RF5_SLOW | RF5_CONF | RF5_BLIND | RF5_SCARE) + +#define RF6_INT_MASK \ + (RF6_BLINK | RF6_TPORT | RF6_TELE_LEVEL | RF6_TELE_AWAY | \ + RF6_HEAL | RF6_HASTE | RF6_TRAPS | \ + RF6_S_KIN | RF6_S_HI_DEMON | RF6_S_MONSTER | RF6_S_MONSTERS | \ + RF6_S_ANT | RF6_S_SPIDER | RF6_S_HOUND | RF6_S_HYDRA | \ + RF6_S_ANGEL | RF6_S_DRAGON | RF6_S_UNDEAD | RF6_S_DEMON | \ + RF6_S_HI_DRAGON | RF6_S_HI_UNDEAD | RF6_S_WRAITH | RF6_S_UNIQUE | \ + RF6_S_THUNDERLORD | RF6_S_BUG | RF6_S_RNG | RF6_S_ANIMALS) + + +/* + * Hack -- "bolt" spells that may hurt fellow monsters + */ +#define RF4_BOLT_MASK \ + (RF4_ARROW_1 | RF4_ARROW_2 | RF4_ARROW_3 | RF4_ARROW_4) + +#define RF5_BOLT_MASK \ + (RF5_BO_ACID | RF5_BO_ELEC | RF5_BO_FIRE | RF5_BO_COLD | \ + RF5_BO_POIS | RF5_BO_NETH | RF5_BO_WATE | RF5_BO_MANA | \ + RF5_BO_PLAS | RF5_BO_ICEE | RF5_MISSILE) + +#define RF6_BOLT_MASK \ + 0L + + +/* Hack -- summon spells */ + +#define RF4_SUMMON_MASK \ + (RF4_S_ANIMAL) + +#define RF5_SUMMON_MASK \ + 0L + +#define RF6_SUMMON_MASK \ + (RF6_S_KIN | RF6_S_HI_DEMON | RF6_S_MONSTER | RF6_S_MONSTERS | RF6_S_ANT | \ + RF6_S_SPIDER | RF6_S_HOUND | RF6_S_HYDRA | RF6_S_ANGEL | RF6_S_DEMON | \ + RF6_S_UNDEAD | RF6_S_DRAGON | RF6_S_HI_UNDEAD | RF6_S_HI_DRAGON | \ + RF6_S_WRAITH | RF6_S_UNIQUE | RF6_S_THUNDERLORD | RF6_S_BUG | RF6_S_RNG | \ + RF6_S_ANIMALS) + + +/*** Macro Definitions ***/ + + +/* + * Hack -- The main "screen" + */ +#define term_screen (angband_term[0]) + + +/* + * Determine if a given inventory item is "aware" + */ +#define object_aware_p(T) \ + (k_info[(T)->k_idx].aware) + +/* + * Determine if a given inventory item is "tried" + */ +#define object_tried_p(T) \ + (k_info[(T)->k_idx].tried) + + +/* + * Determine if a given inventory item is "known" + * Test One -- Check for special "known" tag + * Test Two -- Check for "Easy Know" + "Aware" + */ +#define object_known_p(T) \ + (((T)->ident & (IDENT_KNOWN)) || \ + (k_info[(T)->k_idx].easy_know && k_info[(T)->k_idx].aware)) + + +/* + * Return the "attr" for a given item. + * Use "flavor" if available. + * Default to user definitions. + */ +#define object_attr(T) \ + (((T)->tval == TV_RANDART) ? \ + random_artifacts[(T)->sval].attr : \ + (k_info[(T)->k_idx].flavor) ? \ + misc_to_attr[k_info[(T)->k_idx].flavor] : \ + k_info[(T)->k_idx].x_attr) + +#define object_attr_default(T) \ + (((T)->tval == TV_RANDART) ? \ + random_artifacts[(T)->sval].attr : \ + (k_info[(T)->k_idx].flavor) ? \ + misc_to_attr[k_info[(T)->k_idx].flavor] : \ + k_info[(T)->k_idx].d_attr) + +/* + * Return the "char" for a given item. + * Use "flavor" if available. + * Default to user definitions. + */ +#define object_char(T) \ + ((k_info[(T)->k_idx].flavor) ? \ + misc_to_char[k_info[(T)->k_idx].flavor] : \ + k_info[(T)->k_idx].x_char) + +#define object_char_default(T) \ + ((k_info[(T)->k_idx].flavor) ? \ + misc_to_char[k_info[(T)->k_idx].flavor] : \ + k_info[(T)->k_idx].d_char) + + + +/* + * Artifacts use the "name1" field + */ +#define artifact_p(T) \ + ( \ + ((T)->tval == TV_RANDART || \ + ((T)->name1 ? TRUE : FALSE) || \ + ((T)->art_name ? TRUE : FALSE) || \ + ((k_info[(T)->k_idx].flags3 & TR3_NORM_ART)? TRUE : FALSE)) \ + ) + +/* + * Ego-Items use the "name2" field + */ +#define ego_item_p(T) \ + ((T)->name2 || (T)->name2b ? TRUE : FALSE) + +/* + * Ego-Items use the "name2" field + */ +#define is_ego_p(T, e) \ + (((T)->name2 == (e)) || ((T)->name2b == (e))) + + + +/* + * Cursed items. + */ +#define cursed_p(T) \ + ((T)->ident & (IDENT_CURSED)) + + +/* + * Convert an "attr"/"char" pair into a "pict" (P) + */ +#define PICT(A,C) \ + ((((u16b)(A)) << 8) | ((byte)(C))) + +/* + * Convert a "pict" (P) into an "attr" (A) + */ +#define PICT_A(P) \ + ((byte)((P) >> 8)) + +/* + * Convert a "pict" (P) into an "char" (C) + */ +#define PICT_C(P) \ + ((char)((byte)(P))) + + +/* + * Convert a "location" (Y,X) into a "grid" (G) + */ +#define GRID(Y,X) \ + (256 * (Y) + (X)) + +/* + * Convert a "grid" (G) into a "location" (Y) + */ +#define GRID_Y(G) \ + ((int)((G) / 256U)) + +/* + * Convert a "grid" (G) into a "location" (X) + */ +#define GRID_X(G) \ + ((int)((G) % 256U)) + + +/* + * Determines if a map location is fully inside the outer walls + */ +#define in_bounds(Y,X) \ + (((Y) > 0) && ((X) > 0) && ((Y) < cur_hgt-1) && ((X) < cur_wid-1)) + +/* + * Determines if a map location is on or inside the outer walls + */ +#define in_bounds2(Y,X) \ + (((Y) >= 0) && ((X) >= 0) && ((Y) < cur_hgt) && ((X) < cur_wid)) + + +/* + * Determines if a map location is currently "on screen" -RAK- + * Note that "panel_contains(Y,X)" always implies "in_bounds2(Y,X)". + */ +#define panel_contains(Y,X) \ + (((Y) >= panel_row_min) && ((Y) <= panel_row_max) && \ + ((X) >= panel_col_min) && ((X) <= panel_col_max)) + + + +/* + * Determine if a "legal" grid is a "floor" grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * + * Note that the terrain features are split by a one bit test + * into those features which block line of sight and those that + * do not, allowing an extremely fast single bit check below. + * + * Add in the fact that some new terrain (water & lava) do NOT block sight + * -KMW- + */ +#define cave_floor_bold(Y,X) \ + ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ + (cave[Y][X].feat != FEAT_MON_TRAP)) + + +/* + * Determine if a "legal" grid is floor without the REMEMBER flag set + * Sometimes called "boring" grid + */ +#define cave_plain_floor_bold(Y,X) \ + ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ + !(f_info[cave[Y][X].feat].flags1 & FF1_REMEMBER)) + + +/* + * Determine if a "legal" grid isn't a "blocking line of sight" grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * + * Note that the terrain features are split by a one bit test + * into those features which block line of sight and those that + * do not, allowing an extremely fast single bit check below. + * + * Add in the fact that some new terrain (water & lava) do NOT block sight + * -KMW- + */ +#define cave_sight_bold(Y,X) \ + (!(f_info[cave[Y][X].feat].flags1 & FF1_NO_VISION)) + + +/* + * Determine if a "legal" grid is a "clean" floor grid + * + * Line 1 -- forbid non-floors + * Line 2 -- forbid deep water -KMW- + * Line 3 -- forbid deep lava -KMW- + * Line 4 -- forbid normal objects + */ +#define cave_clean_bold(Y,X) \ + ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ + (cave[Y][X].feat != FEAT_MON_TRAP) && \ + (cave[Y][X].o_idx == 0) && \ + !(f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT)) + + +/* + * Determine if a "legal" grid is an "empty" floor grid + * + * Line 1 -- forbid doors, rubble, seams, walls + * Line 2 -- forbid normal monsters + * Line 3 -- forbid the player + */ +#define cave_empty_bold(Y,X) \ + (cave_floor_bold(Y,X) && \ + !(cave[Y][X].m_idx) && \ + !(((Y) == p_ptr->py) && ((X) == p_ptr->px))) + + +/* + * Determine if a "legal" grid is an "naked" floor grid + * + * Line 1 -- forbid non-floors, non-shallow water & lava -KMW- + * Line 2 -- forbid normal objects + * Line 3 -- forbid player/monsters + */ +#define cave_naked_bold(Y,X) \ + ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ + (cave[Y][X].feat != FEAT_MON_TRAP) && \ + !(f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT) && \ + (cave[Y][X].o_idx == 0) && \ + (cave[Y][X].m_idx == 0)) + +#define cave_naked_bold2(Y,X) \ + ((f_info[cave[Y][X].feat].flags1 & FF1_FLOOR) && \ + (cave[Y][X].feat != FEAT_MON_TRAP) && \ + (cave[Y][X].o_idx == 0) && \ + (cave[Y][X].m_idx == 0)) + + + +/* + * Determine if a "legal" grid is "permanent" + * + * Line 1 -- perma-walls + * Line 2-3 -- stairs + * Line 4-5 -- building doors -KMW- + * Line 6-7 -- shop doors + */ +#define cave_perma_bold(Y,X) \ + (f_info[cave[Y][X].feat].flags1 & FF1_PERMANENT) + + +/* + * Grid based version of "cave_floor_bold()" + */ +#define cave_floor_grid(C) \ + ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP)) + + +/* + * Grid based version of "cave_plain_floor_bold()" + */ +#define cave_plain_floor_grid(C) \ + ((f_info[(C)->feat].flags1 & FF1_FLOOR) && \ + !(f_info[(C)->feat].flags1 & FF1_REMEMBER)) + + +/* + * Grid based version of "cave_clean_bold()" + */ +#define cave_clean_grid(C) \ + ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP) && \ + (!(C)->o_idx)) + +/* + * Grid based version of "cave_sight_bold()" + */ +#define cave_sight_grid(C) \ + (!(f_info[(C)->feat].flags1 & FF1_NO_VISION)) + +/* + * Grid based version of "cave_empty_bold()" + */ +#define cave_empty_grid(C) \ + (cave_floor_grid(C) && \ + !((C)->m_idx) && \ + !((C) == &cave[p_ptr->py][p_ptr->px])) + +/* + * Grid based version of "cave_empty_bold()" + */ +#define cave_naked_grid(C) \ + ((f_info[(C)->feat].flags1 & FF1_FLOOR) && ((C)->feat != FEAT_MON_TRAP) && \ + !((C)->o_idx) && \ + !((C)->m_idx) && \ + !((C) == &cave[p_ptr->py][p_ptr->px])) + + +/* + * Grid based version of "cave_perma_bold()" + */ +#define cave_perma_grid(C) \ + (f_info[(C)->feat].flags1 & FF1_PERMANENT) + + + +/* + * Determine if a "legal" grid is within "los" of the player + * + * Note the use of comparison to zero to force a "boolean" result + */ +#define player_has_los_bold(Y,X) \ + ((cave[Y][X].info & (CAVE_VIEW)) != 0) + + + +/* + * Determine if a "legal" grid can be "seen" by the player + * + * Note the use of comparison to zero to force a "boolean" result + */ +#define player_can_see_bold(Y,X) \ + ((cave[Y][X].info & (CAVE_SEEN)) != 0) + + + +/*** Color constants ***/ + + +/* + * Angband "attributes" (with symbols, and base (R,G,B) codes) + * + * The "(R,G,B)" codes are given in "fourths" of the "maximal" value, + * and should "gamma corrected" on most (non-Macintosh) machines. + */ +#define TERM_DARK 0 /* 'd' */ /* 0,0,0 */ +#define TERM_WHITE 1 /* 'w' */ /* 4,4,4 */ +#define TERM_SLATE 2 /* 's' */ /* 2,2,2 */ +#define TERM_ORANGE 3 /* 'o' */ /* 4,2,0 */ +#define TERM_RED 4 /* 'r' */ /* 3,0,0 */ +#define TERM_GREEN 5 /* 'g' */ /* 0,2,1 */ +#define TERM_BLUE 6 /* 'b' */ /* 0,0,4 */ +#define TERM_UMBER 7 /* 'u' */ /* 2,1,0 */ +#define TERM_L_DARK 8 /* 'D' */ /* 1,1,1 */ +#define TERM_L_WHITE 9 /* 'W' */ /* 3,3,3 */ +#define TERM_VIOLET 10 /* 'v' */ /* 4,0,4 */ +#define TERM_YELLOW 11 /* 'y' */ /* 4,4,0 */ +#define TERM_L_RED 12 /* 'R' */ /* 4,0,0 */ +#define TERM_L_GREEN 13 /* 'G' */ /* 0,4,0 */ +#define TERM_L_BLUE 14 /* 'B' */ /* 0,4,4 */ +#define TERM_L_UMBER 15 /* 'U' */ /* 3,2,1 */ + + +/*** Graphics constants ***/ + +/* + * Possible values of graphics_mode + * Good only when use_graphics is set to TRUE + * Set by reset_visuals() and used by map_info() + */ +#define GRAPHICS_NONE 0 +#define GRAPHICS_UNKNOWN 1 +#define GRAPHICS_IBM 2 +#define GRAPHICS_OLD 3 +#define GRAPHICS_NEW 4 +#define GRAPHICS_ISO 5 + + +/*** Sound constants ***/ + + +/* + * Mega-Hack -- some primitive sound support (see "main-win.c") + * + * Some "sound" constants for "Term_xtra(TERM_XTRA_SOUND, val)" + */ +#define SOUND_HIT 1 +#define SOUND_MISS 2 +#define SOUND_FLEE 3 +#define SOUND_DROP 4 +#define SOUND_KILL 5 +#define SOUND_LEVEL 6 +#define SOUND_DEATH 7 +#define SOUND_STUDY 8 +#define SOUND_TELEPORT 9 +#define SOUND_SHOOT 10 +#define SOUND_QUAFF 11 +#define SOUND_ZAP 12 +#define SOUND_WALK 13 +#define SOUND_TPOTHER 14 +#define SOUND_HITWALL 15 +#define SOUND_EAT 16 +#define SOUND_STORE1 17 +#define SOUND_STORE2 18 +#define SOUND_STORE3 19 +#define SOUND_STORE4 20 +#define SOUND_DIG 21 +#define SOUND_OPENDOOR 22 +#define SOUND_SHUTDOOR 23 +#define SOUND_TPLEVEL 24 +#define SOUND_SCROLL 25 +#define SOUND_BUY 26 +#define SOUND_SELL 27 +#define SOUND_WARN 28 +#define SOUND_ROCKET 29 /* Somebody's shooting rockets */ +#define SOUND_N_KILL 30 /* The player kills a non-living/undead monster */ +#define SOUND_U_KILL 31 /* The player kills a unique */ +#define SOUND_QUEST 32 /* The player has just completed a quest */ +#define SOUND_HEAL 33 /* The player was healed a little bit */ +#define SOUND_X_HEAL 34 /* The player was healed full health */ +#define SOUND_BITE 35 /* A monster bites you */ +#define SOUND_CLAW 36 /* A monster claws you */ +#define SOUND_M_SPELL 37 /* A monster casts a miscellaneous spell */ +#define SOUND_SUMMON 38 /* A monster casts a summoning spell */ +#define SOUND_BREATH 39 /* A monster breathes */ +#define SOUND_BALL 40 /* A monster casts a ball / bolt spell */ +#define SOUND_M_HEAL 41 /* A monster heals itself somehow */ +#define SOUND_ATK_SPELL 42 /* A monster casts a misc. offensive spell */ +#define SOUND_EVIL 43 /* Something nasty has just happened! */ +#define SOUND_TOUCH 44 /* A monster touches you */ +#define SOUND_STING 45 /* A monster stings you */ +#define SOUND_CRUSH 46 /* A monster crushes / envelopes you */ +#define SOUND_SLIME 47 /* A monster drools/spits/etc on you */ +#define SOUND_WAIL 48 /* A monster wails */ +#define SOUND_WINNER 49 /* Just won the game! */ +#define SOUND_FIRE 50 /* An item was burned */ +#define SOUND_ACID 51 /* An item was destroyed by acid */ +#define SOUND_ELEC 52 /* An item was destroyed by electricity */ +#define SOUND_COLD 53 /* An item was shattered */ +#define SOUND_ILLEGAL 54 /* Illegal command attempted */ +#define SOUND_FAIL 55 /* Fail to get a spell off / activate an item */ +#define SOUND_WAKEUP 56 /* A monster wakes up */ +#define SOUND_INVULN 57 /* Invulnerability! */ +#define SOUND_FALL 58 /* Falling through a trapdoor... */ +#define SOUND_PAIN 59 /* A monster is in pain! */ +#define SOUND_DESTITEM 60 /* An item was destroyed by misc. means */ +#define SOUND_MOAN 61 /* A monster makes a moan/beg/insult attack */ +#define SOUND_SHOW 62 /* A monster makes a "show" attack */ +#define SOUND_UNUSED 63 /* (no sound for gaze attacks) */ +#define SOUND_EXPLODE 64 /* Something (or somebody) explodes */ + +/* + * Mega-Hack -- maximum known sounds + */ +#define SOUND_MAX 65 + + + +/*** Hack ***/ + + +/* + * Road flags + */ +#define ROAD_NORTH 1 +#define ROAD_SOUTH 2 +#define ROAD_EAST 4 +#define ROAD_WEST 8 + + +/* + * Buildings actions + */ +#define BACT_RESEARCH_ITEM 1 +#define BACT_TOWN_HISTORY 2 +#define BACT_RACE_LEGENDS 3 +#define BACT_GREET_KING 4 +#define BACT_KING_LEGENDS 5 +#define BACT_QUEST1 6 +#define BACT_POSTER 8 +#define BACT_ARENA_RULES 9 +#define BACT_ARENA 10 +#define BACT_ARENA_LEGENDS 11 +#define BACT_IN_BETWEEN 12 +#define BACT_GAMBLE_RULES 13 +#define BACT_CRAPS 14 +#define BACT_SPIN_WHEEL 15 +#define BACT_DICE_SLOTS 16 +#define BACT_REST 17 +#define BACT_FOOD 18 +#define BACT_RUMORS 19 +#define BACT_RESEARCH_MONSTER 20 +#define BACT_COMPARE_WEAPONS 21 +#define BACT_LEGENDS 22 +#define BACT_ENCHANT_WEAPON 23 +#define BACT_ENCHANT_ARMOR 24 +#define BACT_RECHARGE 25 +#define BACT_IDENTS 26 +#define BACT_LEARN 27 +#define BACT_HEALING 28 +#define BACT_RESTORE 29 +#define BACT_ENCHANT_ARROWS 30 +#define BACT_ENCHANT_BOW 31 +#define BACT_GREET 32 +#define BACT_RECALL 33 +#define BACT_TELEPORT_LEVEL 34 +/* XXX */ +/* XXX */ +#define BACT_MIMIC_NORMAL 37 +#define BACT_VIEW_BOUNTIES 38 +#define BACT_SELL_CORPSES 39 +#define BACT_VIEW_QUEST_MON 40 +#define BACT_SELL_QUEST_MON 41 +#define BACT_DIVINATION 42 +#define BACT_SELL 43 +#define BACT_BUY 44 +#define BACT_EXAMINE 45 +#define BACT_STEAL 46 +#define BACT_QUEST2 47 +#define BACT_QUEST3 48 +#define BACT_QUEST4 49 +#define BACT_STAR_HEAL 50 +#define BACT_REQUEST_ITEM 51 +#define BACT_GET_LOAN 52 +#define BACT_PAY_BACK_LOAN 53 +/* If one adds new BACT_ do NOT forget to increase max_bact in variables.c */ + + +/* + * Quest status + */ +#define QUEST_STATUS_IGNORED -1 +#define QUEST_STATUS_UNTAKEN 0 +#define QUEST_STATUS_TAKEN 1 +#define QUEST_STATUS_COMPLETED 2 +#define QUEST_STATUS_REWARDED 3 +#define QUEST_STATUS_FAILED 4 +#define QUEST_STATUS_FINISHED 5 +#define QUEST_STATUS_FAILED_DONE 6 + +/* + * Quest flags + */ +#define QUEST_FLAG_SILENT 0x01 /* no messages for completion */ +#define QUEST_FLAG_PRESET 0x02 /* quest is outside the main dungeon */ +#define QUEST_FLAG_ONCE 0x04 /* quest is marked finished after leaving */ + +/* + * Initialization flags + */ +#define INIT_SHOW_TEXT 0x01 +#define INIT_ASSIGN 0x02 +#define INIT_CREATE_DUNGEON 0x04 +#define INIT_GET_SIZE 0x08 +#define INIT_POSITION 0x10 + +/* + * Alchemists defines + */ +#define MAX_ALCHEMIST_RECIPES 20 +#define ALCHEMIST_ENCHANT_DAM 0x01 +#define ALCHEMIST_ENCHANT_PVAL 0x02 +#define ALCHEMIST_ENCHANT_AC 0x04 + +/* + * Music songs + */ +#define MUSIC_NONE 0 +#define MUSIC_SLOW 1 +#define MUSIC_CONF 2 +#define MUSIC_STUN 3 +#define MUSIC_LIFE 4 +#define MUSIC_MIND 5 +#define MUSIC_LITE 6 +#define MUSIC_FURY 7 +#define MUSIC_AWARE 8 +#define MUSIC_ID 9 +#define MUSIC_ILLUSION 10 +#define MUSIC_WALL 11 +#define MUSIC_RESIST 12 +#define MUSIC_TIME 13 +#define MUSIC_BETWEEN 14 +#define MUSIC_CHARME 15 +#define MUSIC_VIBRA 16 +#define MUSIC_HOLY 17 +#define MUSIC_HIDE 18 +#define MUSIC_LIBERTY 19 +#define MUSIC_RAISE 20 +#define MUSIC_SHADOW 21 +#define MUSIC_STAR_ID 22 + +#define MAX_MUSIC 23 +#define MAX_MUSICS 11 + +/* + * Fate + */ +#define MAX_FATES 200 + +#define FATE_NONE 0 +#define FATE_FIND_O 1 +#define FATE_NO_DIE_MORTAL 2 +#define FATE_FIND_A 3 +#define FATE_FIND_R 4 +#define FATE_FIND_V 5 +#define FATE_DIE 6 + +/* + * Runes definition + */ +#define RUNE_SELF 0x00000001 +#define RUNE_ARROW 0x00000002 +#define RUNE_RAY 0x00000004 +#define RUNE_SPHERE 0x00000008 +#define RUNE_POWER_SURGE 0x00000010 +#define RUNE_ARMAGEDDON 0x00000020 +#define RUNE_MOD_MAX 6 +#define RUNE_STONE 0x000000FF + + +/* + * Defines of the different dungeon types + */ +#define DUNGEON_WILDERNESS 0 +#define DUNGEON_MIRKWOOD 1 +#define DUNGEON_MORDOR 2 +#define DUNGEON_ANGBAND 3 +#define DUNGEON_BARROW_DOWNS 4 +#define DUNGEON_MOUNT_DOOM 5 +#define DUNGEON_NETHER_REALM 6 +#define DUNGEON_NUMENOR 7 +#define DUNGEON_MANDOS 8 +#define DUNGEON_VOID 11 +#define DUNGEON_MAZE 18 +#define DUNGEON_DOL_GULDUR 23 + +/* Max depth of each dungeon(max_depth - min_depth) */ +#define MAX_DUNGEON_DEPTH 128 + +#define DUNGEON_MODE_NONE 0 +#define DUNGEON_MODE_AND 1 +#define DUNGEON_MODE_NAND 2 +#define DUNGEON_MODE_OR 3 +#define DUNGEON_MODE_NOR 4 + + +/* + * Returns the dungeon level or the feat, + * if the player is not in a dungeon + */ +#define level_or_feat(DTYPE, DLEVEL) \ + ((DTYPE) == DUNGEON_WILDERNESS ? \ + wild_map[p_ptr->wilderness_y][p_ptr->wilderness_x].feat : \ + (DLEVEL) ) + + +/* + * Defines for the inscriptions + */ +#define INSCRIP_EXEC_ENGRAVE 0x01 +#define INSCRIP_EXEC_WALK 0x02 +#define INSCRIP_EXEC_MONST_WALK 0x04 + +#define INSCRIP_NONE 0 +#define INSCRIP_LIGHT 1 +#define INSCRIP_DARK 2 +#define INSCRIP_STORM 3 +#define INSCRIP_PROTECTION 4 +#define INSCRIP_DWARF_SUMMON 5 +#define INSCRIP_CHASM 6 +#define INSCRIP_BLACK_FIRE 7 +#define MAX_INSCRIPTIONS 8 + +/* + * Various class dependant defines + */ +#define CLASS_NONE 0 +#define CLASS_MANA_PATH 1 +#define CLASS_CANALIZE_MANA 2 +#define CLASS_WINDS_MANA 3 + +#define CLASS_MANA_PATH_ERASE 0x0001 +#define CLASS_FLOOD_LEVEL 0x0002 +#define CLASS_CANALIZE_MANA_EXTRA 0x0004 +#define CLASS_UNDEAD 0x0008 +#define CLASS_ANTIMAGIC 0x0010 +#define CLASS_LEGS 0x0020 +#define CLASS_ARMS 0x0040 +#define CLASS_WALL 0x0080 + +/* + * Types of birth presents + */ +#define BIRTH_NONE 0 +#define BIRTH_RING 1 +#define BIRTH_AMULET 2 + +/* + * Automatic note taking types + */ +#define NOTE_BIRTH 1 +#define NOTE_WINNER 2 +#define NOTE_SAVE_GAME 3 +#define NOTE_ENTER_DUNGEON 4 + +/* + * Player monsters & ghost defines + * NO MORE USED but for savefile compatibility + */ +#define GHOST_R_IDX_HEAD 967 +#define GHOST_R_IDX_TAIL 977 +#define MAX_GHOSTS (GHOST_R_IDX_TAIL - GHOST_R_IDX_HEAD) + +/* Stores/buildings defines */ +#define STORE_HATED 0 +#define STORE_LIKED 1 +#define STORE_NORMAL 2 + +/* Pseudo-id defines */ +#define SENSE_NONE 0 +#define SENSE_CURSED 1 +#define SENSE_AVERAGE 2 +#define SENSE_GOOD_LIGHT 3 +#define SENSE_GOOD_HEAVY 4 +#define SENSE_EXCELLENT 5 +#define SENSE_WORTHLESS 6 +#define SENSE_TERRIBLE 7 +#define SENSE_SPECIAL 8 +#define SENSE_BROKEN 9 +#define SENSE_UNCURSED 10 + +/* Wilderness map related */ +#define WILDERNESS_SEE_RADIUS 3 /* The amount of wilderness seen around the player */ + +/* Ego monsters defines */ +#define MEGO_CHAR_ANY 127 +#define MEGO_ADD 0 +#define MEGO_SUB 1 +#define MEGO_FIX 2 +#define MEGO_PRC 3 + +#define MEGO_CHANCE 18 /* % chances of getting ego monsters */ + +#define race_inf(m_ptr) (((m_ptr)->sr_ptr) ? (m_ptr)->sr_ptr : race_info_idx((m_ptr)->r_idx, (m_ptr)->ego)) + +/* Object generation */ +#define OBJ_GENE_TREASURE 20 +#define OBJ_GENE_COMBAT 20 +#define OBJ_GENE_MAGIC 20 +#define OBJ_GENE_TOOL 20 + +/* + * Used (or should be) by various functions and tables needing access to + * single bits + */ +#define BIT(x) (1L << (x)) + +/* Town defines */ +#define TOWN_RANDOM 20 /* First random town */ +#define TOWN_DUNGEON 4 /* Maximun number of towns per dungeon */ +#define TOWN_CHANCE 50 /* Chance of 1 town */ + + +/* + * Store flags + */ +#define SF1_DEPEND_LEVEL 0x00000001L +#define SF1_SHALLOW_LEVEL 0x00000002L +#define SF1_MEDIUM_LEVEL 0x00000004L +#define SF1_DEEP_LEVEL 0x00000008L +#define SF1_RARE 0x00000010L +#define SF1_VERY_RARE 0x00000020L +#define SF1_COMMON 0x00000040L +#define SF1_ALL_ITEM 0x00000080L /* Works as the BM */ +#define SF1_RANDOM 0x00000100L +#define SF1_FORCE_LEVEL 0x00000200L +#define SF1_MUSEUM 0x00000400L + +/* + * Powers (mutation, activations, ...) + */ +#define POWER_MAX_INIT 62 + +#define PWR_SPIT_ACID 0 +#define PWR_BR_FIRE 1 +#define PWR_HYPN_GAZE 2 +#define PWR_TELEKINES 3 +#define PWR_VTELEPORT 4 +#define PWR_MIND_BLST 5 +#define PWR_RADIATION 6 +#define PWR_VAMPIRISM 7 +#define PWR_SMELL_MET 8 +#define PWR_SMELL_MON 9 +#define PWR_BLINK 10 +#define PWR_EAT_ROCK 11 +#define PWR_SWAP_POS 12 +#define PWR_SHRIEK 13 +#define PWR_ILLUMINE 14 +#define PWR_DET_CURSE 15 +#define PWR_BERSERK 16 +#define PWR_POLYMORPH 17 +#define PWR_MIDAS_TCH 18 +#define PWR_GROW_MOLD 19 +#define PWR_RESIST 20 +#define PWR_EARTHQUAKE 21 +#define PWR_EAT_MAGIC 22 +#define PWR_WEIGH_MAG 23 +#define PWR_STERILITY 24 +#define PWR_PANIC_HIT 25 +#define PWR_DAZZLE 26 +#define PWR_DARKRAY 27 +#define PWR_RECALL 28 +#define PWR_BANISH 29 +#define PWR_COLD_TOUCH 30 +#define PWR_LAUNCHER 31 + +#define PWR_PASSWALL 32 +#define PWR_DETECT_TD 33 +#define PWR_COOK_FOOD 34 +#define PWR_UNFEAR 35 +#define PWR_EXPL_RUNE 36 +#define PWR_STM 37 +#define PWR_POIS_DART 38 +#define PWR_MAGIC_MISSILE 39 +#define PWR_GROW_TREE 40 +#define PWR_BR_COLD 41 +#define PWR_BR_CHAOS 42 +#define PWR_BR_ELEM 43 +#define PWR_WRECK_WORLD 44 +#define PWR_SCARE 45 +#define PWR_REST_LIFE 46 +#define PWR_SUMMON_MONSTER 47 +#define PWR_NECRO 48 +#define PWR_ROHAN 49 +#define PWR_THUNDER 50 +#define PWR_DEATHMOLD 51 +#define PWR_HYPNO 52 +#define PWR_UNHYPNO 53 +#define PWR_INCARNATE 54 +#define PWR_MAGIC_MAP 55 +#define PWR_LAY_TRAP 56 +#define PWR_MERCHANT 57 +#define PWR_COMPANION 58 +#define PWR_BEAR 59 +#define PWR_DODGE 60 +#define PWR_BALROG 61 + +#define ADD_POWER(pow, p) ((pow)[(p)] = TRUE) + +/* + * Shield effect options + */ +#define SHIELD_NONE 0x0000 +#define SHIELD_COUNTER 0x0001 +#define SHIELD_FIRE 0x0002 +#define SHIELD_GREAT_FIRE 0x0004 +#define SHIELD_FEAR 0x0008 + +/* + * Quest constants + */ +#define MAX_MON_QUEST 10 +#define MAX_ITEM_QUEST 5 + +#define MAX_RANDOM_QUEST 99 + +#define QUEST_NULL 0 +#define QUEST_NECRO 1 +#define QUEST_SAURON 2 +#define QUEST_MORGOTH 3 +#define QUEST_THIEVES 4 +#define QUEST_RANDOM 5 +#define QUEST_HOBBIT 6 +#define QUEST_NAZGUL 7 +#define QUEST_TROLL 8 +#define QUEST_WIGHT 9 +#define QUEST_SPIDER 10 +#define QUEST_POISON 11 +#define QUEST_NARSIL 12 +#define QUEST_EOL 13 +#define QUEST_NIRNAETH 14 +#define QUEST_INVASION 15 +#define QUEST_BETWEEN 16 +#define QUEST_ONE 17 +#define QUEST_SHROOM 18 +#define QUEST_THRAIN 19 +#define QUEST_ULTRA_GOOD 20 +#define QUEST_ULTRA_EVIL 21 +#define QUEST_WOLVES 22 +#define QUEST_DRAGONS 23 +#define QUEST_HAUNTED 24 +#define QUEST_EVIL 25 +#define MAX_Q_IDX_INIT 26 + +#define PLOT_MAIN 0 +#define PLOT_BREE 1 +#define PLOT_LORIEN 2 +#define PLOT_OTHER 3 +#define PLOT_GONDOLIN 4 +#define PLOT_MINAS 5 +#define PLOT_KHAZAD 6 +#define MAX_PLOTS 7 + +/* + * Hooks + */ +#define HOOK_MONSTER_DEATH 0 +#define HOOK_OPEN 1 +#define HOOK_GEN_QUEST 2 +#define HOOK_END_TURN 3 +#define HOOK_FEELING 4 +#define HOOK_NEW_MONSTER 5 +#define HOOK_GEN_LEVEL 6 +#define HOOK_BUILD_ROOM1 7 +#define HOOK_NEW_LEVEL 8 +#define HOOK_QUEST_FINISH 9 +#define HOOK_QUEST_FAIL 10 +#define HOOK_GIVE 11 +#define HOOK_CHAR_DUMP 12 +#define HOOK_INIT_QUEST 13 +#define HOOK_WILD_GEN 14 +#define HOOK_DROP 15 +#define HOOK_IDENTIFY 16 +#define HOOK_MOVE 17 +#define HOOK_STAIR 18 +#define HOOK_MONSTER_AI 19 +#define HOOK_PLAYER_LEVEL 20 +#define HOOK_WIELD 21 +#define HOOK_INIT 22 +#define HOOK_QUAFF 23 +#define HOOK_AIM 24 +#define HOOK_USE 25 +#define HOOK_ACTIVATE 26 +#define HOOK_ZAP 27 +#define HOOK_READ 28 +#define HOOK_CALC_BONUS 29 +#define HOOK_CALC_POWERS 30 +#define HOOK_KEYPRESS 31 +#define HOOK_CHAT 32 +#define HOOK_MON_SPEAK 33 +#define HOOK_MKEY 34 +#define HOOK_BIRTH_OBJECTS 35 +#define HOOK_ACTIVATE_DESC 36 +#define HOOK_INIT_GAME 37 +#define HOOK_ACTIVATE_POWER 38 +#define HOOK_ITEM_NAME 39 +#define HOOK_SAVE_GAME 40 +#define HOOK_LOAD_GAME 41 +#define HOOK_LEVEL_REGEN 42 +#define HOOK_LEVEL_END_GEN 43 +#define HOOK_BUILDING_ACTION 44 +#define HOOK_PROCESS_WORLD 45 +#define HOOK_WIELD_SLOT 46 +#define HOOK_STORE_STOCK 47 +#define HOOK_STORE_BUY 48 +#define HOOK_GEN_LEVEL_BEGIN 49 +#define HOOK_GET 50 +#define HOOK_REDRAW 51 +#define HOOK_RECALC_SKILLS 52 +#define HOOK_ENTER_DUNGEON 53 +#define HOOK_FIRE 54 +#define HOOK_EAT 55 +#define HOOK_DIE 56 +#define HOOK_CALC_HP 57 +#define HOOK_GF_COLOR 58 +#define HOOK_GF_EXEC 59 +#define HOOK_CALC_MANA 60 +#define HOOK_LOAD_END 61 +#define HOOK_RECALL 62 +#define HOOK_FOLLOW_GOD 63 +#define HOOK_SACRIFICE_GOD 64 +#define HOOK_BODY_PARTS 65 +#define HOOK_APPLY_MAGIC 66 +#define HOOK_PLAYER_EXP 67 +#define HOOK_BIRTH 68 +#define HOOK_CALC_LITE 69 +#define HOOK_LEARN_ABILITY 70 +#define HOOK_MOVED 71 +#define HOOK_GAME_START 72 +#define HOOK_TAKEOFF 73 +#define HOOK_CALC_WEIGHT 74 +#define HOOK_FORBID_TRAVEL 75 +#define HOOK_DEBUG_COMMAND 76 +#define HOOK_CALC_BONUS_END 77 +#define MAX_HOOKS 78 + +#define HOOK_TYPE_C 0 +#define HOOK_TYPE_LUA 1 + +/* + * Defines for loadsave.c + * Why 3 and 7? So if it's uninitialized, the code will be able to catch it, as + * 0 is an invalid flag. Also, having them apart means that it being accidentally + * modified will also result in an invalid value -- Improv + */ +#define LS_LOAD 3 +#define LS_SAVE 7 + +/* + * In game help + */ +#define HELP1_BETWEEN 0x00000001 +#define HELP1_ALTAR 0x00000002 +#define HELP1_FOUNTAIN 0x00000004 +#define HELP1_IDENTIFY 0x00000008 +#define HELP1_WILD_MODE 0x00000010 + +/* + * Special weapon effects + */ +#define SPEC_POIS 0x00000001L +#define SPEC_CUT 0x00000002L + +/* + * Ambushes in the wild + */ +#define AMBUSH_RACE 1 +#define AMBUSH_MIX 2 + +/* + * Macro trigger + */ +#define MAX_MACRO_MOD 12 +#define MAX_MACRO_TRIG 200 + + +/* + * Skills ! + */ +#define SKILL_MAX 50000 /* Maximun skill value */ +#define SKILL_STEP 1000 /* 1 skill point */ + +#define SKILL_EXCLUSIVE 9999 /* Flag to tell exclusive skills */ + +#define SKILL_CONVEYANCE 1 +#define SKILL_MANA 2 +#define SKILL_FIRE 3 +#define SKILL_AIR 4 +#define SKILL_WATER 5 +#define SKILL_NATURE 6 +#define SKILL_EARTH 7 +#define SKILL_SYMBIOTIC 8 +#define SKILL_MUSIC 9 +#define SKILL_DIVINATION 10 +#define SKILL_TEMPORAL 11 +#define SKILL_DRUID 12 +#define SKILL_DAEMON 13 +#define SKILL_META 14 +#define SKILL_MAGIC 15 +#define SKILL_COMBAT 16 +#define SKILL_MASTERY 17 +#define SKILL_SWORD 18 +#define SKILL_AXE 19 +#define SKILL_POLEARM 20 +#define SKILL_HAFTED 21 +#define SKILL_BACKSTAB 22 +#define SKILL_ARCHERY 23 +#define SKILL_SLING 24 +#define SKILL_BOW 25 +#define SKILL_XBOW 26 +#define SKILL_BOOMERANG 27 +#define SKILL_SPIRITUALITY 28 +#define SKILL_MINDCRAFT 29 +#define SKILL_MISC 30 +#define SKILL_NECROMANCY 31 +#define SKILL_MIMICRY 32 +#define SKILL_ANTIMAGIC 33 +#define SKILL_RUNECRAFT 34 +#define SKILL_SNEAK 35 +#define SKILL_STEALTH 36 +#define SKILL_DISARMING 37 +/* XXX */ +#define SKILL_ALCHEMY 39 +#define SKILL_STEALING 40 +#define SKILL_SORCERY 41 +#define SKILL_HAND 42 +#define SKILL_THAUMATURGY 43 +#define SKILL_SUMMON 44 +#define SKILL_SPELL 45 +#define SKILL_DODGE 46 +#define SKILL_BEAR 47 +#define SKILL_LORE 48 +#define SKILL_PRESERVATION 49 +#define SKILL_POSSESSION 50 +#define SKILL_MIND 51 +#define SKILL_CRITS 52 +#define SKILL_PRAY 53 +#define SKILL_LEARN 54 +#define SKILL_UDUN 55 +#define SKILL_DEVICE 56 +#define SKILL_STUN 57 +#define SKILL_BOULDER 58 +#define SKILL_GEOMANCY 59 + +/* Ugly but needed */ +#define MAX_SKILLS 200 + +/* Number of skill choices for Lost Sword quests. */ +#define LOST_SWORD_NSKILLS 4 + +/* SKill flags */ +#define SKF1_HIDDEN 0x00000001 /* Starts hidden */ +#define SKF1_AUTO_HIDE 0x00000002 /* Tries to rehide at calc_bonus */ +#define SKF1_RANDOM_GAIN 0x00000004 /* Can be randomly gained by certain quests & such */ + +#define MAX_MELEE 3 + +/* + * Player specialities, should be external but ti would be a mess + */ +#define MAX_SPEC 20 + + +/* + * Spellbinder triggers + */ +#define SPELLBINDER_HP75 1 +#define SPELLBINDER_HP50 2 +#define SPELLBINDER_HP25 3 + +/* + * God's defines + */ +#define GOD_ALL -1 +#define GOD_NONE 0 +#define GOD_ERU 1 +#define GOD_MANWE 2 +#define GOD_TULKAS 3 +#define GOD_MELKOR 4 +#define GOD_YAVANNA 5 +#define MAX_GODS_INIT 6 + +#define GOD(g) if (p_ptr->pgod == (g)) +#define PRAY_GOD(g) if ((p_ptr->pgod == (g)) && (p_ptr->praying)) +#define NOT_PRAY_GOD(g) if ((p_ptr->pgod == (g)) && (!p_ptr->praying)) + +/* + * Command numbers for do_cmd_cli(). + * + * As the user is not intended to have a way to enter these codes directly + * (doing so isn't harmful, but these codes are not intended as mnemonics), + * only codes in the range 0xE000 - 0xF8FF (the private area of Unicode 3.0) + * should be used. + * + * In addition, values at the lower end of this range are preferred as the upper + * end may have a system-specific encoding + */ +#define CMD_CLI_HELP -8192 +#define CMD_SHOW_TIME -8188 +#define CMD_SHOW_SKILL -8187 +#define CMD_DUMP_HTML -8186 +#define CMD_MACRO -8185 +#define CMD_QUEST -8184 +#define CMD_BLUNDER -8183 +#define CMD_SHOW_ABILITY -8182 + +#define CLI_MAX 128 + + +/* + * The various winner state + */ +#define WINNER_NORMAL 1 +#define WINNER_ULTRA 2 + +/* + * The abilities + */ +#define AB_SPREAD_BLOWS 0 +#define AB_TREE_WALK 1 +#define AB_PERFECT_CASTING 2 +#define AB_MAX_BLOW1 3 +#define AB_MAX_BLOW2 4 +#define AB_AMMO_CREATION 5 +#define AB_DEATH_TOUCH 6 +#define AB_CREATE_ART 7 +#define AB_FAR_REACHING 8 +#define AB_TRAPPING 9 +#define AB_UNDEAD_FORM 10 |