OSDN Git Service

branch-mogami-TR をマージ。バージョンを1.3.0に上げた。
[hengband/hengband.git] / src / defines.h
index 78f51cc..6df4f31 100644 (file)
  */
 #define VERSION_NAME "Hengband"
 
-
-/*
- * Current version number of Angband: 2.8.1
- */
-#define VERSION_MAJOR   2
-#define VERSION_MINOR   8
-#define VERSION_PATCH   1
-
-#define SAVEFILE_VERSION 3
+/* Savefile version for Hengband 1.1.1 and later */
+#define H_VER_MAJOR 1
+#define H_VER_MINOR 3
+#define H_VER_PATCH 0
+#define H_VER_EXTRA 0
 
 /* Added for ZAngband */
 #define FAKE_VERSION   0
 #define FAKE_VER_MAJOR 11
-#define FAKE_VER_MINOR 0
-#define FAKE_VER_PATCH 9
+#define FAKE_VER_MINOR 3
+#define FAKE_VER_PATCH 0
 
 #define ANGBAND_2_8_1
 #define ZANGBAND
 #define VERSION_EXTRA   0
 
 
-#ifdef JP
- /*
-  * ÆüËܸìÈǤΥС¼¥¸¥ç¥ó
-  */
-#define JVERSION_MAJOR 0
-#define JVERSION_MINOR 9
-#define JVERSION_PATCH 4
-#define JVERSION_EXTRA 0
-
-#endif
 /*
  * Number of grids in each block (vertically)
  * Probably hard-coded to 11, see "generate.c"
 /*
  * Maximum number of high scores in the high score file
  */
-#define MAX_HISCORES    100
+#define MAX_HISCORES    999
 
 
 /*
 
 /*
  * 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.
+ * Note that the "lite radius" will NEVER exceed 14, and we would
+ * never require more than 581 entries in the array for circular "lite".
  */
-#define LITE_MAX 512
+#define LITE_MAX 600
 
 /*
  * Maximum size of the "view" array (see "cave.c")
 #define MAX_NLEN        160
 
 /*
+ * Special internal key
+ */
+#define SPECIAL_KEY_QUEST    255
+#define SPECIAL_KEY_BUILDING 254
+#define SPECIAL_KEY_STORE    253
+#define SPECIAL_KEY_QUIT     252
+
+/*
  * Store constants
  */
 #define STORE_INVEN_MAX 24              /* Max number of discrete objs in inven */
 
 
 /*
+ * Random energy
+ */
+#define ENERGY_NEED() (randnor(100, 31))
+
+/*
  * Misc constants
  */
-#define TOWN_DAWN               10000   /* Number of turns from dawn to dawn XXX */
-#define BREAK_GLYPH             550             /* Rune of protection resistance */
-#define BREAK_MINOR_GLYPH       299             /* For explosive runes */
-#define BTH_PLUS_ADJ    3       /* Adjust BTH per plus-to-hit */
-#define MON_MULT_ADJ    8               /* 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 TOWN_DAWN         10000    /* Number of ticks from dawn to dawn XXX */
+#define TURNS_PER_TICK    10L      /* Number of energy-gain-turns per ticks */
+#define BREAK_GLYPH       550      /* Rune of protection resistance */
+#define BREAK_MINOR_GLYPH 299      /* For explosive runes */
+#define BTH_PLUS_ADJ       3       /* Adjust BTH per plus-to-hit */
+#define MON_MULT_ADJ      8       /* 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     */
 
 
 /* "Biases" for random artifact gen */
 #define CH_ARCANE       0x40
 #define CH_ENCHANT      0x80
 #define CH_DAEMON       0x100
+#define CH_CRUSADE      0x200
 
 #define CH_MUSIC        0x10000
 #define CH_HISSATSU     0x20000
 #define REALM_ARCANE       7
 #define REALM_ENCHANT      8
 #define REALM_DAEMON       9
-#define MAX_MAGIC          9
-#define MIN_TECHNIC        15
+#define REALM_CRUSADE      10
+#define MAX_MAGIC          10
+#define MIN_TECHNIC        16
 #define REALM_MUSIC        16
 #define REALM_HISSATSU     17
 #define MAX_REALM          17
 
-#define VALID_REALM        (MAX_REALM + MAX_MAGIC - MIN_TECHNIC)
-#define NUM_TECHNIC        (MAX_REALM - MIN_TECHNIC)
+#define VALID_REALM        (MAX_REALM + MAX_MAGIC - MIN_TECHNIC + 1)
+#define NUM_TECHNIC        (MAX_REALM - MIN_TECHNIC + 1)
 
 #define is_magic(A) ((A) < MAX_MAGIC + 1 ? TRUE : FALSE)
 #define tval2realm(A) ((A) - TV_LIFE_BOOK + 1)
-#define technic2magic(A)      (is_magic(A) ? (A) : (A) - MIN_TECHNIC + MAX_MAGIC)
+#define technic2magic(A)      (is_magic(A) ? (A) : (A) - MIN_TECHNIC + 1 + MAX_MAGIC)
+#define is_good_realm(REALM)   ((REALM) == REALM_LIFE || (REALM) == REALM_CRUSADE)
 
 /*
  * Magic-books for the realms
 #define ROW_STATE               20
 #define COL_STATE                7      /* <state> */
 
-#define ROW_SPEED               23
-#define COL_SPEED               58      /* "Slow (-NN)" or "Fast (+NN)" */
+#define ROW_SPEED               (-1)
+#define COL_SPEED               (-24)      /* "Slow (-NN)" or "Fast (+NN)" */
 
-#define ROW_STUDY               23
-#define COL_STUDY               68      /* "Study" */
+#define ROW_STUDY               (-1)
+#define COL_STUDY               (-13)      /* "Study" */
 
-#define ROW_DEPTH               23
-#define COL_DEPTH               72      /* "Lev NNN" / "NNNN ft" */
+#define ROW_DEPTH               (-1)
+#define COL_DEPTH               (-8)      /* "Lev NNN" / "NNNN ft" */
 
-#define ROW_STATBAR             23
+#define ROW_STATBAR             (-1)
 #define COL_STATBAR              0
+#define MAX_COL_STATBAR         (-26)
 
 
 /*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/
 #define FEAT_GRASS              0x59
 
 #define FEAT_TRAP_TRAPS         0x5A
+#define FEAT_TRAP_ALARM         0x5B
 
 #define FEAT_FLOWER             0x5D
 #define FEAT_DEEP_GRASS         0x5E
 /* for mirror master */
 #define FEAT_MIRROR             0xc3
 
+/* unknown grid (not detected)  */
+#define FEAT_UNDETECTD          0xc4
 
 /*
  * Wilderness terrains
 /* Lites */
 #define ART_GALADRIEL            1
 #define ART_ELENDIL              2
-#define ART_THRAIN               3
+#define ART_JUDGE                3
 #define ART_EDISON               7
 #define ART_PALANTIR             15
 #define ART_STONE_LORE           17
 #define ART_NIGHT                215
 
 /* Rings */
-#define ART_BARAHIR              8
+#define ART_FRAKIR               8
 #define ART_TULKAS               9
 #define ART_NARYA               10
 #define ART_NENYA               11
 #define ART_SOULKEEPER          19
 #define ART_ISILDUR             20
 #define ART_ROHIRRIM            21
-#define ART_BELEGENNON          22
-#define ART_CELEBORN            23
+#define ART_LOHENGRIN           22
+#define ART_JULIAN              23
 #define ART_ARVEDUI             24
 #define ART_CASPANION           25
+#define ART_GILES               168
 #define ART_MORLOK              203
 #define ART_VETERAN             206
 
 #define ART_YENDOR              141
 #define ART_YATA                151
 #define ART_EARENDIL            186
-#define ART_HERCULES            197
+#define ART_PERSEUS             197
 
 /* Helms and Crowns */
-#define ART_MORGOTH             34
+#define ART_INDRA               33
+#define ART_CHAOS               34
 #define ART_BERUTHIEL           35
 #define ART_THRANDUIL           36
 #define ART_THENGEL             37
 #define ART_DOR                 39
 #define ART_HOLHENNETH          40
 #define ART_TERROR              41
-#define ART_GONDOR              42
+#define ART_AMBER               42
 #define ART_NUMENOR             132
 #define ART_STONEMASK           146
 
 #define ART_CORWIN              55
 #define ART_PAURAEGEN           56
 #define ART_PAURNEN             57
-#define ART_CAMLOST             58
+#define ART_THANOS              58
 #define ART_FINGOLFIN           59
 #define ART_PAURNIMMEN          185
 
 /* Boots */
 #define ART_FEANOR              60
-#define ART_DAL                 61
+#define ART_FLORA               61
 #define ART_THROR               62
 #define ART_SHIVA_BOOTS         63
+#define ART_GLASS               165
 #define ART_GETA                210
 
 /* Digging */
 
 /* Swords */
 #define ART_MAEDHROS            64
-#define ART_ANGRIST             65
+#define ART_CAINE               65
 #define ART_NARTHANC            66
 #define ART_NIMTHANC            67
 #define ART_DETHANC             68
 #define ART_RILIA               69
-#define ART_BELANGIL            70
+#define ART_FIONA               70
 #define ART_CALRIS              71
 #define ART_GRAYSWANDIR         72
 #define ART_GLAMDRING           73
-#define ART_AEGLIN              74
+#define ART_NOTHUNG             74
 #define ART_ORCRIST             75
 #define ART_GURTHANG            76
 #define ART_ZARCUTHRA           77
-#define ART_MORMEGIL            78
+#define ART_TWILIGHT            78
 #define ART_GONDRICAM           79
 #define ART_CRISDURIAN          80
-#define ART_GROO                81
+#define ART_AGLARANG            81
 #define ART_RINGIL              82
 #define ART_ANDURIL             83
-#define ART_ANGUIREL            84
+#define ART_WEREWINDLE          84
 #define ART_CHAINSWORD          85
 #define ART_FORASGIL            86
 #define ART_CARETH              87
 #define ART_STING               88
-#define ART_HARADEKKET          89
-#define ART_GILETTAR            90
+#define ART_SOULSWORD           89
+#define ART_MERLIN              90
 #define ART_DOOMCALLER          91
 #define ART_VORPAL_BLADE        92
+#define ART_SLAYER              123
 #define ART_KUSANAGI            128
 #define ART_HURIN               133
 #define ART_AZAGHAL             135
 #define ART_FALIS               155
 #define ART_HRUNTING            156
 #define ART_ANUBIS              158
+#define ART_GURENKI             160
+#define ART_TAILBITER           167
 #define ART_MUSASI_KATANA       171
 #define ART_MUSASI_WAKIZASI     172
 #define ART_QUICKTHORN          174
 #define ART_ARUNRUTH            184
 #define ART_HAKABUSA            189
 #define ART_STORMBRINGER        190
+#define ART_NARSIL              191
 #define ART_KANNU               193
 #define ART_GRIMTOOTH           196
 #define ART_KAMUI               198
 #define ART_GOURYU              207
+#define ART_EOWYN               216
 
 /* Polearms */
 #define ART_THEODEN             93
 #define ART_OSONDIR             95
 #define ART_TIL                 96
 #define ART_RUNESPEAR           97
-#define ART_OROME               98
-#define ART_NIMLOTH             99
+#define ART_DESTINY             98
+#define ART_HAGEN               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_DWARVES_AXE         105
 #define ART_BARUKKHELED         106
 #define ART_WRATH               107
 #define ART_ULMO                108
 #define ART_AULE                117
 #define ART_NAR                 118
 #define ART_ERIRIL              119
-#define ART_OLORIN              120
+#define ART_GANDALF             120
 #define ART_DEATHWREAKER        121
 #define ART_TURMIL              122
 #define ART_MJOLLNIR            136
 #define ART_SHUTEN_DOJI         194
 #define ART_G_HAMMER            195
 #define ART_AEGISFANG           208
-#define ART_VIOLET              209
+#define ART_HERMIT              209
 #define ART_GOTHMOG             212
 #define ART_JIZO                213
 #define ART_FUNDIN              214
 #define EGO_SLAYING             49
 #define EGO_AGILITY             50
 #define EGO_POWER               51
-#define EGO_2HAND               52
+#define EGO_2WEAPON             52
 #define EGO_MAGIC_MASTERY       53
 #define EGO_WEAKNESS            54
 #define EGO_CLUMSINESS          55
 #define EGO_WEST                68
 #define EGO_ATTACKS             69
 #define EGO_SLAYING_WEAPON      70
-#define EGO_FORCE_WEPON             71
+#define EGO_FORCE_WEAPON        71
 #define EGO_BRAND_ACID          72
 #define EGO_BRAND_ELEC          73
 #define EGO_BRAND_FIRE          74
 #define EGO_TRUMP               98
 #define EGO_PATTERN             99
 #define EGO_DIGGING             100
-/* xxx */
+#define EGO_SLAY_HUMAN          101
 #define EGO_MORGUL              102
-/* xxx */
+#define EGO_KILL_HUMAN          103
 
 /* Bows */
 #define EGO_ACCURACY            104
 #define TV_ARCANE_BOOK  96
 #define TV_ENCHANT_BOOK 97
 #define TV_DAEMON_BOOK  98
+#define TV_CRUSADE_BOOK 99
 #define TV_MUSIC_BOOK   105
 #define TV_HISSATSU_BOOK 106
 #define TV_GOLD         127     /* Gold can only be picked up by players */
 #define CAVE_VIEW       0x0020    /* view flag */
 #define CAVE_TEMP       0x0040    /* temp flag */
 #define CAVE_XTRA       0x0080    /* misc flag */
-
 #define CAVE_MNLT      0x0100  /* Illuminated by monster */
+
+#define CAVE_TRAP       0x8000
+
+/* Used only while cave generation */
 #define CAVE_FLOOR      0x0200
 #define CAVE_EXTRA      0x0400
 #define CAVE_INNER      0x0800
 #define CAVE_OUTER      0x1000
 #define CAVE_SOLID      0x2000
 #define CAVE_VAULT      0x4000
-#define CAVE_TRAP       0x8000
+#define CAVE_MASK (CAVE_FLOOR | CAVE_EXTRA | CAVE_INNER | CAVE_OUTER | CAVE_SOLID | CAVE_VAULT)
+
+/* Used only after cave generation */
+#define CAVE_XXXX1      0x0200
+#define CAVE_XXXX2      0x0400
+#define CAVE_XXXX3      0x0800
+#define CAVE_IN_MIRROR  0x1000    /* mirror */
+#define CAVE_UNSAFE     0x2000    /* Might have trap */
+#define CAVE_IN_DETECT  0x4000    /* trap detected area (inner circle only) */
 
-#define CAVE_MASK (CAVE_FLOOR | CAVE_EXTRA | CAVE_INNER | CAVE_OUTER | CAVE_SOLID)
 
 /*
  * Bit flags for the "project()" function
 #define PROJECT_NO_REF     0x800
 #define PROJECT_NO_HANGEKI 0x1000
 #define PROJECT_PATH       0x2000
+#define PROJECT_FAST       0x4000
 
 /*
  * Bit flags for the "enchant()" function
 
 
 /*
+ * Bit flags for control of get_check_strict()
+ */
+#define CHECK_OKAY_CANCEL 0x01
+#define CHECK_NO_ESCAPE   0x02
+#define CHECK_NO_HISTORY  0x04
+
+
+/*
  * Some bit-flags for the "smart" field
  */
 #define SM_RES_ACID             0x00000001
 #define PW_BORG_1       0x00004000L     /* Display borg messages */
 #define PW_BORG_2       0x00008000L     /* Display borg status */
 
+/*
+ * Bit flags for the place_monster_???() (etc)
+ */
+#define PM_ALLOW_SLEEP    0x00000001
+#define PM_ALLOW_GROUP    0x00000002
+#define PM_FORCE_FRIENDLY 0x00000004
+#define PM_FORCE_PET      0x00000008
+#define PM_NO_KAGE        0x00000010
+#define PM_NO_PET         0x00000020
+#define PM_ALLOW_UNIQUE   0x00000040
+#define PM_IGNORE_TERRAIN 0x00000080
+#define PM_HASTE          0x00000100
 
 
 /*
 #define SUMMON_MANES                60
 #define SUMMON_LOUSE                61
 #define SUMMON_GUARDIANS            62
+#define SUMMON_KNIGHTS              63
+#define SUMMON_EAGLES               64
 
 
 /*
 #define GF_SEEKER 110
 #define GF_SUPER_RAY 111
 #define GF_STAR_HEAL 112
+#define GF_WATER_FLOW   113
+#define GF_CRUSADE     114
+#define GF_STASIS_EVIL 115
+#define GF_WOUNDS      116
 
-#define MAX_GF                         113
+#define MAX_GF                         117
 
 /*
  * Some things which induce learning
 #define CHEST_BIRD_STORM        0x0100
 #define CHEST_H_SUMMON          0x0200
 #define CHEST_RUNES_OF_EVIL     0x0400
-
+#define CHEST_ALARM             0x0800
 
 
 /*
 #define IDENT_KNOWN     0x08    /* Item abilities are known */
 #define IDENT_STOREB    0x10    /* Item is storebought !!!! */
 #define IDENT_MENTAL    0x20    /* Item information is known */
+#if 0
 #define IDENT_CURSED    0x40    /* Item is temporarily cursed */
+#endif
 #define IDENT_BROKEN    0x80    /* Item is permanently worthless */
 
 
  * 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_MAGIC_MASTERY       0x00000040L     /* Later */
-#define TR1_FORCE_WEPON             0x00000080L     /* Later */
-#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 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_RIDING               0x00000040L     /* Later */
-#define TR2_XXX2                0x00000080L     /* Later */
-#define TR2_IM_ACID             0x00000100L
-#define TR2_IM_ELEC             0x00000200L
-#define TR2_IM_FIRE             0x00000400L
-#define TR2_IM_COLD             0x00000800L
-#define TR2_THROW               0x00001000L     /* Later */
-#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     /* Added for Zangband */
-#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 TR3_SH_FIRE             0x00000001L     /* Immolation (Fire) */
-#define TR3_SH_ELEC             0x00000002L     /* Electric Sheath */
-#define TR3_QUESTITEM           0x00000004L     /* quest level item -KMW- */
-#define TR3_SH_COLD             0x00000008L     /* cold aura */
-#define TR3_NO_TELE             0x00000010L     /* Anti-teleportation */
-#define TR3_NO_MAGIC            0x00000020L     /* Anti-magic */
-#define TR3_DEC_MANA            0x00000040L     /* ??? */
-#define TR3_TY_CURSE            0x00000080L     /* The Ancient Curse */
-#define TR3_XXX1                0x00000100L
-#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_LITE                0x00002000L     /* Permanent Light */
-#define TR3_SEE_INVIS           0x00004000L     /* See Invisible */
-#define TR3_TELEPATHY           0x00008000L     /* Telepathy */
-#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 */
-
-
-/*
- * Hack -- flag set 1 -- mask for "pval-dependant" flags.
- * Note that all "pval" dependant flags must be in "flags1".
- */
-#define TR1_PVAL_MASK   \
-       (TR1_STR | TR1_INT | TR1_WIS | TR1_DEX | \
-     TR1_CON | TR1_CHR | \
-        TR1_MAGIC_MASTERY | TR1_STEALTH | TR1_SEARCH | TR1_INFRA | \
-        TR1_TUNNEL | TR1_SPEED | TR1_BLOWS)
-
+#define have_flag(ARRAY, INDEX) !!((ARRAY)[(INDEX)/32] & (1L << ((INDEX)%32)))
+#define add_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] |= (1L << ((INDEX)%32)))
+#define remove_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] &= ~(1L << ((INDEX)%32)))
+#define is_pval_flag(INDEX) ((TR_STR <= (INDEX) && (INDEX) <= TR_MAGIC_MASTERY) || (TR_STEALTH <= (INDEX) && (INDEX) <= TR_BLOWS))
+#define have_pval_flags(ARRAY) !!((ARRAY)[0] & (0x00003f7f))
+
+
+#define TR_STR                 0      /* STR += "pval" */
+#define TR_INT                 1      /* INT += "pval" */
+#define TR_WIS                 2      /* WIS += "pval" */
+#define TR_DEX                 3      /* DEX += "pval" */
+#define TR_CON                 4      /* CON += "pval" */
+#define TR_CHR                 5      /* CHR += "pval" */
+#define TR_MAGIC_MASTERY       6      /* Later */
+#define TR_FORCE_WEAPON        7      /* Later */
+#define TR_STEALTH             8      /* Stealth += "pval" */
+#define TR_SEARCH              9      /* Search += "pval" */
+#define TR_INFRA               10     /* Infra += "pval" */
+#define TR_TUNNEL              11     /* Tunnel += "pval" */
+#define TR_SPEED               12     /* Speed += "pval" */
+#define TR_BLOWS               13     /* Blows += "pval" */
+#define TR_CHAOTIC             14
+#define TR_VAMPIRIC            15
+#define TR_SLAY_ANIMAL         16
+#define TR_SLAY_EVIL           17
+#define TR_SLAY_UNDEAD         18
+#define TR_SLAY_DEMON          19
+#define TR_SLAY_ORC            20
+#define TR_SLAY_TROLL          21
+#define TR_SLAY_GIANT          22
+#define TR_SLAY_DRAGON         23
+#define TR_KILL_DRAGON         24     /* Execute Dragon */
+#define TR_VORPAL              25     /* Later */
+#define TR_IMPACT              26     /* Cause Earthquakes */
+#define TR_BRAND_POIS          27
+#define TR_BRAND_ACID          28
+#define TR_BRAND_ELEC          29
+#define TR_BRAND_FIRE          30
+#define TR_BRAND_COLD          31
+
+#define TR_SUST_STR            32
+#define TR_SUST_INT            33
+#define TR_SUST_WIS            34
+#define TR_SUST_DEX            35
+#define TR_SUST_CON            36
+#define TR_SUST_CHR            37
+#define TR_RIDING              38
+#define TR_XXX2                39     /* Later */
+#define TR_IM_ACID             40
+#define TR_IM_ELEC             41
+#define TR_IM_FIRE             42
+#define TR_IM_COLD             43
+#define TR_THROW               44     /* Later */
+#define TR_REFLECT             45     /* Reflect 'bolts' */
+#define TR_FREE_ACT            46     /* Free Action */
+#define TR_HOLD_LIFE           47     /* Hold Life */
+#define TR_RES_ACID            48
+#define TR_RES_ELEC            49
+#define TR_RES_FIRE            50
+#define TR_RES_COLD            51
+#define TR_RES_POIS            52
+#define TR_RES_FEAR            53     /* Added for Zangband */
+#define TR_RES_LITE            54
+#define TR_RES_DARK            55
+#define TR_RES_BLIND           56
+#define TR_RES_CONF            57
+#define TR_RES_SOUND           58
+#define TR_RES_SHARDS          59
+#define TR_RES_NETHER          60
+#define TR_RES_NEXUS           61
+#define TR_RES_CHAOS           62
+#define TR_RES_DISEN           63
+
+#define TR_SH_FIRE             64     /* Immolation (Fire) */
+#define TR_SH_ELEC             65     /* Electric Sheath */
+#define TR_SLAY_HUMAN          66     /* Slay human */
+#define TR_SH_COLD             67     /* cold aura */
+#define TR_NO_TELE             68     /* Anti-teleportation */
+#define TR_NO_MAGIC            69     /* Anti-magic */
+#define TR_DEC_MANA            70     /* ??? */
+#define TR_TY_CURSE            71     /* The Ancient Curse */
+#define TR_WARNING             72     /* Warning */
+#define TR_HIDE_TYPE           73     /* Hide "pval" description */
+#define TR_SHOW_MODS           74     /* Always show Tohit/Todam */
+#define TR_XXX1                75     /* XXX1 */
+#define TR_FEATHER             76     /* Feather Falling */
+#define TR_LITE                77     /* Permanent Light */
+#define TR_SEE_INVIS           78     /* See Invisible */
+#define TR_TELEPATHY           79     /* Telepathy */
+#define TR_SLOW_DIGEST         80     /* Item slows down digestion */
+#define TR_REGEN               81     /* Item induces regeneration */
+#define TR_XTRA_MIGHT          82     /* Bows get extra multiplier */
+#define TR_XTRA_SHOTS          83     /* Bows get extra shots */
+#define TR_IGNORE_ACID         84     /* Item ignores Acid Damage */
+#define TR_IGNORE_ELEC         85     /* Item ignores Elec Damage */
+#define TR_IGNORE_FIRE         86     /* Item ignores Fire Damage */
+#define TR_IGNORE_COLD         87     /* Item ignores Cold Damage */
+#define TR_ACTIVATE            88     /* Item can be activated */
+#define TR_DRAIN_EXP           89     /* Item drains Experience */
+#define TR_TELEPORT            90     /* Item teleports player */
+#define TR_AGGRAVATE           91     /* Item aggravates monsters */
+#define TR_BLESSED             92     /* Item is Blessed */
+#define TR_XXX3                93
+#define TR_XXX4                94
+#define TR_XXX5                95
+
+#define TR_KILL_ANIMAL         96
+#define TR_KILL_EVIL           97
+#define TR_KILL_UNDEAD         98
+#define TR_KILL_DEMON          99
+#define TR_KILL_ORC            100
+#define TR_KILL_TROLL          101
+#define TR_KILL_GIANT          102
+#define TR_KILL_HUMAN          103
+#define TR_ESP_ANIMAL          104
+#define TR_ESP_UNDEAD          105
+#define TR_ESP_DEMON           106
+#define TR_ESP_ORC             107
+#define TR_ESP_TROLL           108
+#define TR_ESP_GIANT           109
+#define TR_ESP_DRAGON          110
+#define TR_ESP_HUMAN           111
+#define TR_ESP_EVIL            112
+#define TR_ESP_GOOD            113
+#define TR_ESP_NONLIVING       114
+#define TR_ESP_UNIQUE          115
+#define TR_FULL_NAME           116
+
+#define TR_FLAG_MAX            117
+#define TR_FLAG_SIZE           4
+
+
+#define TRG_INSTA_ART           0x00000001L     /* Item must be an artifact */
+#define TRG_QUESTITEM           0x00000002L     /* quest level item -KMW- */
+#define TRG_XTRA_POWER          0x00000004L     /* Extra power */
+#define TRG_ONE_SUSTAIN         0x00000008L     /* One sustain */
+#define TRG_XTRA_RES_OR_POWER   0x00000010L     /* Extra resistance or power */
+#define TRG_XTRA_H_RES          0x00000020L     /* Extra high resistance */
+#define TRG_XTRA_E_RES          0x00000040L     /* Extra element resistance */
+#define TRG_XTRA_L_RES          0x00000080L     /* Extra lordly resistance */
+#define TRG_XTRA_D_RES          0x00000100L     /* Extra dragon resistance */
+#define TRG_XTRA_RES            0x00000200L     /* Extra resistance */
+#define TRG_CURSED              0x00000400L     /* Item is Cursed */
+#define TRG_HEAVY_CURSE         0x00000800L     /* Item is Heavily Cursed */
+#define TRG_PERMA_CURSE         0x00001000L     /* Item is Perma Cursed */
+#define TRG_RANDOM_CURSE0       0x00002000L     /* Item is Random Cursed */
+#define TRG_RANDOM_CURSE1       0x00004000L     /* Item is Random Cursed */
+#define TRG_RANDOM_CURSE2       0x00008000L     /* Item is Random Cursed */
+
+
+#define MAX_CURSE 17
+
+#define TRC_CURSED              0x00000001L
+#define TRC_HEAVY_CURSE         0x00000002L
+#define TRC_PERMA_CURSE         0x00000004L
+#define TRC_XXX1                0x00000008L
+#define TRC_TY_CURSE            0x00000010L
+#define TRC_AGGRAVATE           0x00000020L
+#define TRC_DRAIN_EXP           0x00000040L
+#define TRC_SLOW_REGEN          0x00000080L
+#define TRC_ADD_L_CURSE         0x00000100L
+#define TRC_ADD_H_CURSE         0x00000200L
+#define TRC_CALL_ANIMAL         0x00000400L
+#define TRC_CALL_DEMON          0x00000800L
+#define TRC_CALL_DRAGON         0x00001000L
+#define TRC_COWARDICE           0x00002000L
+#define TRC_TELEPORT            0x00004000L
+#define TRC_LOW_MELEE           0x00008000L
+#define TRC_LOW_AC              0x00010000L
+#define TRC_LOW_MAGIC           0x00020000L
+#define TRC_FAST_DIGEST         0x00040000L
+#define TRC_DRAIN_HP            0x00080000L
+#define TRC_DRAIN_MANA          0x00100000L
+
+#define TRC_TELEPORT_SELF       0x00000001L
+#define TRC_CHAINSWORD          0x00000002L
+
+#define TRC_SPECIAL_MASK \
+       (TRC_TY_CURSE | TRC_AGGRAVATE)
+
+#define TRC_HEAVY_MASK   \
+       (TRC_TY_CURSE | TRC_AGGRAVATE | TRC_DRAIN_EXP | TRC_ADD_H_CURSE | \
+        TRC_CALL_DEMON | TRC_CALL_DRAGON | TRC_TELEPORT)
+
+#define TRC_P_FLAG_MASK  \
+       (TRC_TY_CURSE | TRC_DRAIN_EXP | TRC_ADD_L_CURSE | TRC_ADD_H_CURSE | \
+        TRC_CALL_ANIMAL | TRC_CALL_DEMON | TRC_CALL_DRAGON | TRC_COWARDICE | \
+        TRC_TELEPORT | TRC_DRAIN_HP | TRC_DRAIN_MANA)
 
 
 /*** Monster blow constants ***/
 #define RBM_INSULT      22
 #define RBM_MOAN        23
 #define RBM_SHOW        24
+#define RBM_SHOOT       25
 
 
 /*
 #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_XXX1                0x00001000  /* XXX */
 #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_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 */
+#define RF1_XXX2                0x40000000  /* XXX */
+#define RF1_XXX3                0x80000000  /* XXX */
 
 /*
  * New monster race bit flags
 #define RF2_BRAIN_4         0x08000000
 #define RF2_BRAIN_5         0x10000000
 #define RF2_BRAIN_6         0x20000000
-#define RF2_BRAIN_7         0x40000000
+#define RF2_HUMAN           0x40000000
 #define RF2_QUANTUM         0x80000000  /* Monster has quantum behavior */
 
 /*
 #define RF4_XXX1            0x00000002  /* XXX */
 #define RF4_DISPEL          0x00000004  /* Dispel magic */
 #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_SHOOT           0x00000010  /* Fire missiles */
+#define RF4_XXX2            0x00000020
+#define RF4_XXX3            0x00000040
+#define RF4_XXX4            0x00000080
 #define RF4_BR_ACID         0x00000100  /* Breathe Acid */
 #define RF4_BR_ELEC         0x00000200  /* Breathe Elec */
 #define RF4_BR_FIRE         0x00000400  /* Breathe Fire */
 #define RF7_CAN_FLY             0x00000004  /* Monster can fly */
 #define RF7_FRIENDLY            0x00000008  /* Monster is friendly */
 #define RF7_UNIQUE_7            0x00000010  /* Is a "Nazgul" unique */
-#define RF7_UNIQUE2             0x00000020  /* uso unique */
-#define RF7_RIDING               0x00000040  /* Can riding */
+#define RF7_UNIQUE2             0x00000020  /* Fake unique */
+#define RF7_RIDING              0x00000040  /* Good for riding */
 #define RF7_KAGE                0x00000080  /* Is kage */
 #define RF7_HAS_LITE_1          0x00000100  /* Monster carries light */
 #define RF7_SELF_LITE_1         0x00000200  /* Monster lights itself */
 #define RF7_HAS_LITE_2          0x00000400  /* Monster carries light */
 #define RF7_SELF_LITE_2         0x00000800  /* Monster lights itself */
-#define RF7_GUARDIAN            0x00001000
-#define RF7_CHAMELEON           0x00002000
-#define RF7_KILL_EXP            0x00004000
+#define RF7_GUARDIAN            0x00001000  /* Guardian of a dungeon */
+#define RF7_CHAMELEON           0x00002000  /* Chameleon can change */
+#define RF7_KILL_EXP            0x00004000  /* No exp until you kill it */
+#define RF7_TANUKI              0x00008000  /* Tanuki disguise */
 
 /*
  * Monster race flags
  * Hack -- "bolt" spells that may hurt fellow monsters
  */
 #define RF4_BOLT_MASK \
-  (RF4_ROCKET | RF4_ARROW_1 | RF4_ARROW_2 | RF4_ARROW_3 | RF4_ARROW_4)
+  (RF4_ROCKET | RF4_SHOOT)
 
 #define RF5_BOLT_MASK \
    (RF5_BO_ACID | RF5_BO_ELEC | RF5_BO_FIRE | RF5_BO_COLD | \
  * Hack -- "attack" spells
  */
 #define RF4_ATTACK_MASK \
-  (RF4_SHRIEK | RF4_DISPEL | RF4_ROCKET | RF4_ARROW_1 | RF4_ARROW_2 | \
-   RF4_ARROW_3 | RF4_ARROW_4 | RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | \
+  (RF4_SHRIEK | RF4_DISPEL | RF4_ROCKET | RF4_SHOOT | \
+   RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | \
    RF4_BR_COLD | RF4_BR_POIS | RF4_BR_NETH | RF4_BR_LITE | RF4_BR_DARK | \
    RF4_BR_CONF | RF4_BR_SOUN | RF4_BR_CHAO | RF4_BR_DISE | RF4_BR_NEXU | \
    RF4_BR_TIME | RF4_BR_INER | RF4_BR_GRAV | RF4_BR_SHAR | RF4_BR_PLAS | \
  * Hack -- "indirect" spells
  */
 #define RF4_INDIRECT_MASK \
-  (RF4_SHRIEK | RF4_XXX1)
+  (RF4_SHRIEK | RF4_XXX1 | RF4_XXX2 | RF4_XXX3 | RF4_XXX4)
 
 #define RF5_INDIRECT_MASK \
   0L
  * Hack -- "no magic" spells
  */
 #define RF4_NOMAGIC_MASK \
-       (RF4_SHRIEK | RF4_ROCKET | RF4_ARROW_1 | RF4_ARROW_2 | \
-        RF4_ARROW_3 | RF4_ARROW_4 | RF4_BR_ACID | RF4_BR_ELEC | \
+       (RF4_SHRIEK | RF4_ROCKET | RF4_SHOOT | \
+        RF4_BR_ACID | RF4_BR_ELEC | \
         RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS | RF4_BR_NETH | \
         RF4_BR_LITE | RF4_BR_DARK | RF4_BR_CONF | RF4_BR_SOUN | \
         RF4_BR_CHAO | RF4_BR_DISE | RF4_BR_NEXU | RF4_BR_SHAR | \
 #define is_friendly(A) \
         (bool)(((A)->smart & SM_FRIENDLY) ? TRUE : FALSE)
 
+#define is_friendly_idx(IDX) \
+        (bool)((IDX) > 0 && is_friendly(&m_list[(IDX)]))
+
 #define is_pet(A) \
         (bool)(((A)->smart & SM_PET) ? TRUE : FALSE)
 
  * Cursed items.
  */
 #define cursed_p(T) \
-       ((T)->ident & (IDENT_CURSED))
+       ((T)->curse_flags)
 
 
 /*
          (cave[Y][X].feat == FEAT_GRASS) || \
          (cave[Y][X].feat == FEAT_DIRT)) && \
          !(cave[Y][X].info & CAVE_TRAP) && \
+         !(cave[Y][X].info & CAVE_IN_MIRROR) && \
          (cave[Y][X].o_idx == 0))
 
 
      ((cave[Y][X].feat <= FEAT_PATTERN_XTRA2) && (cave[Y][X].feat >= FEAT_PATTERN_START))
 
 /*
+ * Does the grid stop disintegration?
+ */
+#define cave_stop_disintegration(Y,X) \
+       (((cave[Y][X].feat >= FEAT_PERM_EXTRA) && \
+         (cave[Y][X].feat <= FEAT_PERM_SOLID)) || \
+         (cave[Y][X].feat == FEAT_MOUNTAIN) || \
+        ((cave[Y][X].feat >= FEAT_SHOP_HEAD) && \
+         (cave[Y][X].feat <= FEAT_SHOP_TAIL)) || \
+        ((cave[Y][X].feat >= FEAT_BLDG_HEAD) && \
+         (cave[Y][X].feat <= FEAT_BLDG_TAIL)) || \
+         (cave[Y][X].feat == FEAT_MUSEUM))
+
+
+/*
  * Determine if a "legal" grid is within "los" of the player
  *
  * Note the use of comparison to zero to force a "boolean" result
@@ -4249,10 +4401,15 @@ extern int PlayerUID;
 #define NIKKI_GAMESTART   19
 #define NIKKI_WIZ_TELE    20
 #define NIKKI_NAMED_PET   21
+#define NIKKI_PAT_TELE    22
 
 #define MAX_MANE 16
 #define MAX_MONSPELLS 96
 
+#define EATER_EXT 36
+#define EATER_CHARGE 0x10000L
+#define EATER_ROD_CHARGE 0x10L
+
 #define MAX_KUBI 20
 
 #define DETECT_RAD_DEFAULT 30
@@ -4264,10 +4421,10 @@ extern int PlayerUID;
 #define MS_XXX1           1
 #define MS_DISPEL         2
 #define MS_ROCKET         3
-#define MS_ARROW_1        4
-#define MS_ARROW_2        5
-#define MS_ARROW_3        6
-#define MS_ARROW_4        7
+#define MS_SHOOT          4
+#define MS_XXX2           5
+#define MS_XXX3           6
+#define MS_XXX4           7
 #define MS_BR_ACID        8
 #define MS_BR_ELEC        9
 #define MS_BR_FIRE        10
@@ -4394,11 +4551,14 @@ extern int PlayerUID;
 #define MON_ENERGY_VOR    359
 #define MON_JADE_MONK     370
 #define MON_HAGEN         383
+#define MON_MENELDOR      384
 #define MON_PHANTOM_B     385
+#define MON_GWAIHIR       410
 #define MON_ANGEL         417
 #define MON_ADAMANT_COINS 423
 #define MON_BARNEY        441
 #define MON_ARCHANGEL     456
+#define MON_THORONDOR     468
 #define MON_GHOST         477
 #define MON_NINJA         485
 #define MON_IVORY_MONK    492
@@ -4484,6 +4644,7 @@ extern int PlayerUID;
 #define MON_CYBER_KING    843
 #define MON_WYRM_POWER    847
 #define MON_NODENS        849
+#define MON_JORMUNGAND    854
 #define MON_DESTROYER     855
 #define MON_GOTHMOG       856
 #define MON_G_CTHULHU     857
@@ -4518,6 +4679,7 @@ extern int PlayerUID;
 #define MON_BANOR         933
 #define MON_LUPART        934
 #define MON_KENSHIROU     936
+#define MON_W_KNIGHT      938
 #define MON_PLANETAR      942
 #define MON_SOLAR         943
 #define MON_BIKETAL       945
@@ -4553,6 +4715,7 @@ extern int PlayerUID;
 #define MON_TOPAZ_MONK    1047
 #define MON_LOUSY         1063
 #define MON_JIZOTAKO      1065
+#define MON_TANUKI        1067
 
 #define MAX_AUTOPICK 1009
 #define DO_AUTOPICK    0x01
@@ -4696,8 +4859,10 @@ extern int PlayerUID;
 #define ESSENCE_RES_DISEN     64
 #define ESSENCE__SH__FIRE     65
 #define ESSENCE__SH__ELEC     66
+#define ESSENCE_S_HUMAN       67
 #define ESSENCE__SH__COLD     68
 #define ESSENCE_NO_MAGIC      70
+#define ESSENCE_WARNING       73
 #define ESSENCE_FEATHER       77
 #define ESSENCE_LITE          78
 #define ESSENCE_SEE_INVIS     79
@@ -4798,6 +4963,10 @@ extern int PlayerUID;
 
 #define prace_is_(A) (!p_ptr->mimic_form && (p_ptr->prace == A))
 
+/* Sub-alignment flags for neutral monsters */
+#define SUB_ALIGN_NEUTRAL 0x0000
+#define SUB_ALIGN_EVIL    0x0001
+#define SUB_ALIGN_GOOD    0x0002
 
 /*
  * World Score -- internet resource value