/* 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          ""
/*#define IS_CVS          ""*/
#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
#define MESSAGE_IRC     2

/*
 * 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 */
#define PW_IRC          0x00000020L     /* Display irc messages */
#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)



/*
 * Hack -- Prepare to use the "Secure" routines
 */
#if defined(SET_UID) && defined(SECURE)
extern int PlayerUID;
# define getuid() PlayerUID
# define geteuid() PlayerUID
#endif



/*** 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 ***/


/*
 * Hack -- attempt to reduce various values
 */
#ifdef ANGBAND_LITE
# undef MACRO_MAX
# define MACRO_MAX      128
# undef QUARK_MAX
# define QUARK_MAX      128
# undef MESSAGE_MAX
# define MESSAGE_MAX    128
# undef MESSAGE_BUF
# define MESSAGE_BUF    4096
#endif

/*
 * 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_GOLD                    7
#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

/* 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_IRC_CONNECT	-8191
#define CMD_IRC_CHAT	-8190
#define CMD_IRC_DISCON	-8189
#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
