root/trunk/src/defines.h

Revision 171, 90.0 kB (checked in by takkaria, 3 years ago)
  • Dump squelch and autoinscribe settings as part of the options dump.
  • Make version numbers more centralised
  • Nuke MAINTAINER define, update bugs address
Line 
1 /* File: defines.h */
2
3 /*
4  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
5  *
6  * This software may be copied and distributed for educational, research,
7  * and not for profit purposes provided that this copyright and statement
8  * are included in all such copies.  Other copyrights may also apply.
9  */
10
11
12 /*
13  * Do not edit this file unless you know *exactly* what you are doing.
14  *
15  * Some of the values in this file were chosen to preserve game balance,
16  * while others are hard-coded based on the format of old save-files, the
17  * definition of arrays in various places, mathematical properties, fast
18  * computation, storage limits, or the format of external text files.
19  *
20  * Changing some of these values will induce crashes or memory errors or
21  * savefile mis-reads.  Most of the comments in this file are meant as
22  * reminders, not complete descriptions, and even a complete knowledge
23  * of the source may not be sufficient to fully understand the effects
24  * of changing certain definitions.
25  *
26  * Lastly, note that the code does not always use the symbolic constants
27  * below, and sometimes uses various hard-coded values that may not even
28  * be defined in this file, but which may be related to definitions here.
29  * This is of course bad programming practice, but nobody is perfect...
30  *
31  * You have been warned.
32  */
33
34
35 /*
36  * Name of the version/variant and its version string
37  */
38 #define VERSION_NAME   "Angband"
39 #define VERSION_STRING "3.0.8"
40
41
42 /*
43  * Current savefile version
44  */
45 #define VERSION_MAJOR   3
46 #define VERSION_MINOR   0
47 #define VERSION_PATCH   9
48 #define VERSION_EXTRA   0
49
50 /*
51  * Oldest version number that can still be imported
52  */
53 #define OLD_VERSION_MAJOR       2
54 #define OLD_VERSION_MINOR       9
55 #define OLD_VERSION_PATCH       0
56
57
58 /*
59  * Version of random artifact code.
60  */
61 #define RANDART_VERSION 62
62
63
64 /*
65  * Number of grids in each block (vertically)
66  * Probably hard-coded to 11, see "generate.c"
67  */
68 #define BLOCK_HGT       11
69
70 /*
71  * Number of grids in each block (horizontally)
72  * Probably hard-coded to 11, see "generate.c"
73  */
74 #define BLOCK_WID       11
75
76
77 /*
78  * Number of grids in each panel (vertically)
79  * Must be a multiple of BLOCK_HGT
80  */
81 #define PANEL_HGT       11
82
83 /*
84  * Number of grids in each panel (horizontally)
85  * Must be a multiple of BLOCK_WID
86  */
87 #define PANEL_WID       (use_bigtile ? 16 : 33)
88
89 #define ROW_MAP                 1
90 #define COL_MAP                 13
91
92
93 /*
94  * Number of grids in each screen (vertically)
95  * Must be a multiple of PANEL_HGT (at least 2x)
96  */
97 #define SCREEN_HGT      (Term->hgt - ROW_MAP - 1)
98
99 /*
100  * Number of grids in each screen (horizontally)
101  * Must be a multiple of PANEL_WID (at least 2x)
102  */
103 #define SCREEN_WID      ((Term->wid - COL_MAP - 1) / (use_bigtile ? 2 : 1))
104
105
106 /*
107  * Number of grids in each dungeon (horizontally)
108  * Must be a multiple of SCREEN_HGT
109  * Must be less or equal to 256
110  */
111 #define DUNGEON_HGT             66
112
113 /*
114  * Number of grids in each dungeon (vertically)
115  * Must be a multiple of SCREEN_WID
116  * Must be less or equal to 256
117  */
118 #define DUNGEON_WID             198
119
120 #define TOWN_WID 66
121 #define TOWN_HGT 22
122
123
124 /*
125  * Maximum amount of Angband windows.
126  */
127 #define ANGBAND_TERM_MAX 8
128
129
130 /*
131  * Total number of stores (see "store.c", etc)
132  */
133 #define MAX_STORES      8
134
135
136 /*
137  * Store index definitions (see "store.c", etc)
138  */
139 #define STORE_GENERAL   0
140 #define STORE_ARMOR             1
141 #define STORE_WEAPON    2
142 #define STORE_TEMPLE    3
143 #define STORE_ALCHEMY   4
144 #define STORE_MAGIC             5
145 #define STORE_B_MARKET  6
146 #define STORE_HOME              7
147
148 /*
149  * Maximum number of player "sex" types (see "table.c", etc)
150  */
151 #define MAX_SEXES            2
152
153
154 /*
155  * Maximum amount of starting equipment
156  */
157 #define MAX_START_ITEMS 4
158
159
160 /*
161  * Number of tval/min-sval/max-sval slots per ego_item
162  */
163 #define EGO_TVALS_MAX 3
164
165
166 /*
167  * Hack -- Maximum number of quests
168  */
169 #define MAX_Q_IDX       4
170
171 /*
172  * Maximum number of high scores in the high score file
173  */
174 #define MAX_HISCORES    100
175
176
177 /*
178  * Maximum dungeon level.  The player can never reach this level
179  * in the dungeon, and this value is used for various calculations
180  * involving object and monster creation.  It must be at least 100.
181  * Setting it below 128 may prevent the creation of some objects.
182  */
183 #define MAX_DEPTH       128
184
185
186 /*
187  * Maximum size of the "view" array (see "cave.c")
188  * Note that the "view radius" will NEVER exceed 20, and even if the "view"
189  * was octagonal, we would never require more than 1520 entries in the array.
190  */
191 #define VIEW_MAX 1536
192
193 /*
194  * Maximum size of the "temp" array (see "cave.c")
195  * Note that we must be as large as "VIEW_MAX" for proper functioning
196  * of the "update_view()" function, and we must also be as large as the
197  * largest illuminatable room, but no room is larger than 800 grids.  We
198  * must also be large enough to allow "good enough" use as a circular queue,
199  * to calculate monster flow, but note that the flow code is "paranoid".
200  */
201 #define TEMP_MAX 1536
202
203
204 /*
205  * OPTION: Maximum number of macros (see "util.c")
206  * Default: assume at most 256 macros are used
207  */
208 #define MACRO_MAX       256
209
210 /*
211  * OPTION: Maximum number of "quarks" (see "util.c")
212  * Default: assume at most 512 different inscriptions are used
213  */
214 #define QUARK_MAX       512
215
216 /*
217  * OPTION: Maximum number of autoinscriptions(see "object1.c")
218  */
219 #define AUTOINSCRIPTIONS_MAX 216
220
221 /*
222  * OPTION: Maximum number of messages to remember (see "util.c")
223  * Default: assume maximal memorization of 2048 total messages
224  */
225 #define MESSAGE_MAX     2048
226
227 /*
228  * OPTION: Maximum space for the message text buffer (see "util.c")
229  * Default: assume that each of the 2048 messages is repeated an
230  * average of three times, and has an average length of 48
231  */
232 #define MESSAGE_BUF     32768
233
234
235 /*
236  * Store constants
237  *
238  * STORE_MAX_KEEP must be < STORE_INVEN_MAX.
239  *
240  */
241 #define STORE_INVEN_MAX 24              /* Max number of discrete objs in inven */
242 #define STORE_TURNS             1000    /* Number of turns between turnovers */
243 #define STORE_SHUFFLE   25              /* 1/Chance (per day) of an owner changing */
244 #define STORE_CHOICES   32              /* Number of choices in the store selection table */
245
246
247 /*
248  * Misc constants
249  */
250 #define TOWN_DAWN               10000   /* Number of turns from dawn to dawn XXX */
251 #define BREAK_GLYPH             550             /* Rune of protection resistance */
252 #define BTH_PLUS_ADJ    3       /* Adjust BTH per plus-to-hit */
253 #define MON_MULT_ADJ    8               /* High value slows multiplication */
254 #define MON_SUMMON_ADJ  2               /* Adjust level of summoned creatures */
255 #define MON_DRAIN_LIFE  2               /* Percent of player exp drained per hit */
256 #define USE_DEVICE      3               /* x> Harder devices x< Easier devices */
257
258 /*
259  * There is a 1/20 (5%) chance of inflating the requested object_level
260  * during the creation of an object (see "get_obj_num()" in "object.c").
261  * Lower values yield better objects more often.
262  */
263 #define GREAT_OBJ       20
264
265 /*
266  * There is a 1/20 (5%) chance that ego-items with an inflated base-level are
267  * generated when an object is turned into an ego-item (see make_ego_item()
268  * in object2.c). As above, lower values yield better ego-items more often.
269  */
270 #define GREAT_EGO       20
271
272 /*
273  * There is a 1/50 (2%) chance of inflating the requested monster_level
274  * during the creation of a monsters (see "get_mon_num()" in "monster.c").
275  * Lower values yield harder monsters more often.
276  */
277 #define NASTY_MON       50              /* 1/chance of inflated monster level */
278
279
280
281 /*
282  * Refueling constants
283  */
284 #define FUEL_TORCH      6000    /* Maximum amount of fuel in a torch */
285 #define FUEL_LAMP       15000   /* Maximum amount of fuel in a lantern */
286
287
288 /*
289  * More maximum values
290  */
291 #define MAX_SIGHT       20      /* Maximum view distance */
292 #define MAX_RANGE       18      /* Maximum range (spells, etc) */
293
294
295
296 /*
297  * There is a 1/160 chance per round of creating a new monster
298  */
299 #define MAX_M_ALLOC_CHANCE      160
300
301 /*
302  * Normal levels get at least 14 monsters
303  */
304 #define MIN_M_ALLOC_LEVEL       14
305
306 /*
307  * The town starts out with 4 residents during the day
308  */
309 #define MIN_M_ALLOC_TD          4
310
311 /*
312  * The town starts out with 8 residents during the night
313  */
314 #define MIN_M_ALLOC_TN          8
315
316
317 /*
318  * A monster can only "multiply" (reproduce) if there are fewer than 100
319  * monsters on the level capable of such spontaneous reproduction.  This
320  * is a hack which prevents the "mon_list[]" array from exploding due to
321  * reproducing monsters.  Messy, but necessary.
322  */
323 #define MAX_REPRO       100
324
325
326 /*
327  * Player constants
328  */
329 #define PY_MAX_EXP      99999999L       /* Maximum exp */
330 #define PY_MAX_GOLD     999999999L      /* Maximum gold */
331 #define PY_MAX_LEVEL    50              /* Maximum level */
332
333 /*
334  * Player "food" crucial values
335  */
336 #define PY_FOOD_MAX             15000   /* Food value (Bloated) */
337 #define PY_FOOD_FULL    10000   /* Food value (Normal) */
338 #define PY_FOOD_ALERT   2000    /* Food value (Hungry) */
339 #define PY_FOOD_WEAK    1000    /* Food value (Weak) */
340 #define PY_FOOD_FAINT   500             /* Food value (Fainting) */
341 #define PY_FOOD_STARVE  100             /* Food value (Starving) */
342
343 /*
344  * Player regeneration constants
345  */
346 #define PY_REGEN_NORMAL         197             /* Regen factor*2^16 when full */
347 #define PY_REGEN_WEAK           98              /* Regen factor*2^16 when weak */
348 #define PY_REGEN_FAINT          33              /* Regen factor*2^16 when fainting */
349 #define PY_REGEN_HPBASE         1442    /* Min amount hp regen*2^16 */
350 #define PY_REGEN_MNBASE         524             /* Min amount mana regen*2^16 */
351
352
353 /*
354  * Maximum number of players spells
355  */
356 #define PY_MAX_SPELLS 64
357
358 /*
359  * Number of spells per book
360  */
361 #define SPELLS_PER_BOOK 9
362
363 /*
364  * Maximum number of spells per realm
365  */
366 #define BOOKS_PER_REALM 9
367
368 /*
369  * Maximum number realms
370  */
371 #define MAX_REALMS 2
372
373
374 /*
375  * Flags for player_type.spell_flags[]
376  */
377 #define PY_SPELL_LEARNED    0x01 /* Spell has been learned */
378 #define PY_SPELL_WORKED     0x02 /* Spell has been successfully tried */
379 #define PY_SPELL_FORGOTTEN  0x04 /* Spell has been forgotten */
380
381
382 /*
383  * Maximum number of "normal" pack slots, and the index of the "overflow"
384  * slot, which can hold an item, but only temporarily, since it causes the
385  * pack to "overflow", dropping the "last" item onto the ground.  Since this
386  * value is used as an actual slot, it must be less than "INVEN_WIELD" (below).
387  * Note that "INVEN_PACK" is probably hard-coded by its use in savefiles, and
388  * by the fact that the screen can only show 23 items plus a one-line prompt.
389  */
390 #define INVEN_PACK              23
391
392 /*
393  * Indexes used for various "equipment" slots (hard-coded by savefiles, etc).
394  */
395 #define INVEN_WIELD             24
396 #define INVEN_BOW       25
397 #define INVEN_LEFT      26
398 #define INVEN_RIGHT     27
399 #define INVEN_NECK      28
400 #define INVEN_LITE      29
401 #define INVEN_BODY      30
402 #define INVEN_OUTER     31
403 #define INVEN_ARM       32
404 #define INVEN_HEAD      33
405 #define INVEN_HANDS     34
406 #define INVEN_FEET      35
407
408 /*
409  * Total number of inventory slots (hard-coded).
410  */
411 #define INVEN_TOTAL             36
412
413
414 /*
415  * Special return code corresponding to squelched items.
416  */
417 #define ALL_SQUELCHED   101
418
419
420 /*
421  * A "stack" of items is limited to less than 100 items (hard-coded).
422  */
423 #define MAX_STACK_SIZE                  100
424
425
426 /*
427  * Maximum number of objects allowed in a single dungeon grid.
428  *
429  * The main-screen has a minimum size of 24 rows, so we can always
430  * display 23 objects + 1 header line.
431  */
432 #define MAX_FLOOR_STACK                 23
433
434
435 /*** Constants for accessing the player struct ***/
436
437 /*
438  * Timed effects
439  */
440 enum
441 {
442         TMD_FAST = 0, TMD_SLOW, TMD_BLIND, TMD_PARALYZED, TMD_CONFUSED,
443         TMD_AFRAID, TMD_IMAGE, TMD_POISONED, TMD_CUT, TMD_STUN, TMD_PROTEVIL,
444         TMD_INVULN, TMD_HERO, TMD_SHERO, TMD_SHIELD, TMD_BLESSED, TMD_SINVIS,
445         TMD_SINFRA, TMD_OPP_ACID, TMD_OPP_ELEC, TMD_OPP_FIRE, TMD_OPP_COLD,
446         TMD_OPP_POIS, TMD_AMNESIA,
447
448         TMD_MAX
449 };
450
451 /*
452  * Skill indexes
453  */
454 enum
455 {
456         SKILL_DIS,      /* Skill: Disarming */
457         SKILL_DEV,      /* Skill: Magic Devices */
458         SKILL_SAV,      /* Skill: Saving throw */
459         SKILL_STL,      /* Skill: Stealth factor */
460         SKILL_SRH,      /* Skill: Searching ability */
461         SKILL_FOS,      /* Skill: Searching frequency */
462         SKILL_THN,      /* Skill: To hit (normal) */
463         SKILL_THB,      /* Skill: To hit (shooting) */
464         SKILL_THT,      /* Skill: To hit (throwing) */
465         SKILL_DIG,      /* Skill: Digging */
466
467         SKILL_MAX
468 };
469
470
471 /*
472  * Indexes of the various "stats" (hard-coded by savefiles, etc).
473  */
474 enum
475 {
476         A_STR = 0,
477         A_INT,
478         A_WIS,
479         A_DEX,
480         A_CON,
481         A_CHR,
482
483         A_MAX
484 };
485
486
487 /*
488  * Player sex constants (hard-coded by save-files, arrays, etc)
489  */
490 #define SEX_FEMALE              0
491 #define SEX_MALE                1
492
493
494
495 /*** General index values ***/
496
497
498 /*
499  * Legal restrictions for "summon_specific()"
500  */
501 #define SUMMON_ANIMAL       11
502 #define SUMMON_SPIDER       12
503 #define SUMMON_HOUND        13
504 #define SUMMON_HYDRA        14
505 #define SUMMON_ANGEL        15
506 #define SUMMON_DEMON        16
507 #define SUMMON_UNDEAD       17
508 #define SUMMON_DRAGON       18
509 /* xxx */
510 #define SUMMON_HI_DEMON     26
511 #define SUMMON_HI_UNDEAD    27
512 #define SUMMON_HI_DRAGON    28
513 /* xxx */
514 #define SUMMON_WRAITH       31
515 #define SUMMON_UNIQUE       32
516 #define SUMMON_KIN          33
517
518
519 /*
520  * Spell types used by project(), and related functions.
521  */
522 #define GF_XXX1                 1
523 #define GF_ARROW        2
524 #define GF_MISSILE      3
525 #define GF_MANA         4
526 #define GF_HOLY_ORB     5
527 #define GF_LITE_WEAK    6
528 #define GF_DARK_WEAK    7
529 #define GF_WATER        8
530 #define GF_PLASMA       9
531 #define GF_METEOR       10
532 #define GF_ICE          11
533 #define GF_GRAVITY      12
534 #define GF_INERTIA      13
535 #define GF_FORCE        14
536 #define GF_TIME         15
537 #define GF_ACID         16
538 #define GF_ELEC         17
539 #define GF_FIRE         18
540 #define GF_COLD         19
541 #define GF_POIS         20
542 #define GF_XXX2                 21
543 #define GF_LITE         22
544 #define GF_DARK         23
545 #define GF_XXX3                 24
546 #define GF_CONFUSION    25
547 #define GF_SOUND        26
548 #define GF_SHARD        27
549 #define GF_NEXUS        28
550 #define GF_NETHER       29
551 #define GF_CHAOS        30
552 #define GF_DISENCHANT   31
553 #define GF_XXX4                 32
554 #define GF_KILL_WALL    33
555 #define GF_KILL_DOOR    34
556 #define GF_KILL_TRAP    35
557 #define GF_MAKE_WALL    36
558 #define GF_MAKE_DOOR    37
559 #define GF_MAKE_TRAP    38
560 #define GF_XXX5                 39
561 #define GF_XXX6                 40
562 #define GF_AWAY_UNDEAD  41
563 #define GF_AWAY_EVIL    42
564 #define GF_AWAY_ALL             43
565 #define GF_TURN_UNDEAD  44
566 #define GF_TURN_EVIL    45
567 #define GF_TURN_ALL             46
568 #define GF_DISP_UNDEAD  47
569 #define GF_DISP_EVIL    48
570 #define GF_DISP_ALL             49
571 #define GF_XXX7                 50
572 #define GF_OLD_CLONE    51
573 #define GF_OLD_POLY             52
574 #define GF_OLD_HEAL             53
575 #define GF_OLD_SPEED    54
576 #define GF_OLD_SLOW             55
577 #define GF_OLD_CONF             56
578 #define GF_OLD_SLEEP    57
579 #define GF_OLD_DRAIN    58
580 #define GF_XXX8                 59
581
582
583 /*
584  * Some constants for the "learn" code
585  *
586  * Most of these come from the "SM_xxx" flags
587  */
588 #define DRS_FREE                14
589 #define DRS_MANA                15
590 #define DRS_RES_ACID    16
591 #define DRS_RES_ELEC    17
592 #define DRS_RES_FIRE    18
593 #define DRS_RES_COLD    19
594 #define DRS_RES_POIS    20
595 #define DRS_RES_FEAR    21
596 #define DRS_RES_LITE    22
597 #define DRS_RES_DARK    23
598 #define DRS_RES_BLIND   24
599 #define DRS_RES_CONFU   25
600 #define DRS_RES_SOUND   26
601 #define DRS_RES_SHARD   27
602 #define DRS_RES_NEXUS   28
603 #define DRS_RES_NETHR   29
604 #define DRS_RES_CHAOS   30
605 #define DRS_RES_DISEN   31
606
607
608 /*
609  * Keymap modes.
610  */
611 enum
612 {
613         KEYMAP_MODE_ORIG = 0,
614         KEYMAP_MODE_ROGUE,
615
616         KEYMAP_MODES            /* Total */
617 };
618
619
620
621 /*** Feature Indexes (see "lib/edit/feature.txt") ***/
622
623 /* Nothing */
624 #define FEAT_NONE               0x00
625
626 /* Various */
627 #define FEAT_FLOOR              0x01
628 #define FEAT_INVIS              0x02
629 #define FEAT_GLYPH              0x03
630 #define FEAT_OPEN               0x04
631 #define FEAT_BROKEN             0x05
632 #define FEAT_LESS               0x06
633 #define FEAT_MORE               0x07
634
635 /* Shops */
636 #define FEAT_SHOP_HEAD  0x08
637 #define FEAT_SHOP_TAIL  0x0F
638
639 /* Traps */
640 #define FEAT_TRAP_HEAD  0x10
641 #define FEAT_TRAP_TAIL  0x1F
642
643 /* Doors */
644 #define FEAT_DOOR_HEAD  0x20
645 #define FEAT_DOOR_TAIL  0x2F
646
647 /* Extra */
648 #define FEAT_SECRET             0x30
649 #define FEAT_RUBBLE             0x31
650
651 /* Seams */
652 #define FEAT_MAGMA              0x32
653 #define FEAT_QUARTZ             0x33
654 #define FEAT_MAGMA_H    0x34
655 #define FEAT_QUARTZ_H   0x35
656 #define FEAT_MAGMA_K    0x36
657 #define FEAT_QUARTZ_K   0x37
658
659 /* Walls */
660 #define FEAT_WALL_EXTRA 0x38
661 #define FEAT_WALL_INNER 0x39
662 #define FEAT_WALL_OUTER 0x3A
663 #define FEAT_WALL_SOLID 0x3B
664 #define FEAT_PERM_EXTRA 0x3C
665 #define FEAT_PERM_INNER 0x3D
666 #define FEAT_PERM_OUTER 0x3E
667 #define FEAT_PERM_SOLID 0x3F
668
669
670
671 /*** Important artifact indexes (see "lib/edit/artifact.txt") ***/
672
673 #define ART_POWER                       13
674 #define ART_MORGOTH                     34
675 #define ART_GROND                       111
676
677
678 /*
679  * Hack -- first "normal" artifact in the artifact list.  All of
680  * the artifacts with indexes from 1 to 15 are "special" (lights,
681  * rings, amulets), and the ones from 16 to 127 are "normal".
682  */
683 #define ART_MIN_NORMAL          16
684
685
686
687 /*** Ego-Item indexes (see "lib/edit/ego_item.txt") ***/
688
689
690 /* Nothing */
691 /* xxx */
692 /* xxx */
693 /* xxx */
694
695 /* Body Armor */
696 #define EGO_RESIST_ACID         4
697 #define EGO_RESIST_ELEC         5
698 #define EGO_RESIST_FIRE         6
699 #define EGO_RESIST_COLD         7
700 #define EGO_RESISTANCE          8
701 #define EGO_ELVENKIND           9
702 #define EGO_ARMR_VULN           10
703 #define EGO_PERMANENCE          11
704 #define EGO_ARMR_DWARVEN        12
705 /* xxx */
706 /* xxx */
707 /* xxx */
708
709 /* Shields */
710 #define EGO_ENDURE_ACID         16
711 #define EGO_ENDURE_ELEC         17
712 #define EGO_ENDURE_FIRE         18
713 #define EGO_ENDURE_COLD         19
714 #define EGO_ENDURANCE           20
715 #define EGO_SHIELD_ELVENKIND    21
716 #define EGO_SHIELD_PRESERVATION 22
717 #define EGO_SHIELD_VULN         23
718
719 /* Crowns and Helms */
720 #define EGO_INTELLIGENCE        24
721 #define EGO_WISDOM                      25
722 #define EGO_BEAUTY                      26
723 #define EGO_MAGI                        27
724 #define EGO_MIGHT                       28
725 #define EGO_LORDLINESS          29
726 #define EGO_SEEING                      30
727 #define EGO_INFRAVISION         31
728 #define EGO_LITE                        32
729 #define EGO_TELEPATHY           33
730 #define EGO_REGENERATION        34
731 #define EGO_TELEPORTATION       35
732 #define EGO_STUPIDITY           36
733 #define EGO_NAIVETY                     37
734 #define EGO_UGLINESS            38
735 #define EGO_SICKLINESS          39
736
737 /* Cloaks */
738 #define EGO_PROTECTION          40
739 #define EGO_STEALTH                     41
740 #define EGO_AMAN                        42
741 #define EGO_CLOAK_MAGI          43
742 #define EGO_ENVELOPING          44
743 #define EGO_VULNERABILITY       45
744 #define EGO_IRRITATION          46
745 /* xxx */
746
747 /* Gloves */
748 #define EGO_FREE_ACTION         48
749 #define EGO_SLAYING                     49
750 #define EGO_AGILITY                     50
751 #define EGO_POWER                       51
752 #define EGO_GLOVES_THIEVERY     52
753 #define EGO_GAUNTLETS_COMBAT    53
754 #define EGO_WEAKNESS            54
755 #define EGO_CLUMSINESS          55
756
757 /* Boots */
758 #define EGO_SLOW_DESCENT        56
759 #define EGO_QUIET                       57
760 #define EGO_MOTION                      58
761 #define EGO_SPEED                       59
762 #define EGO_STABILITY           60
763 #define EGO_NOISE                       61
764 #define EGO_SLOWNESS            62
765 #define EGO_ANNOYANCE           63
766
767 /* Weapons */
768 #define EGO_HA                          64
769 #define EGO_DF                          65
770 #define EGO_BLESS_BLADE         66
771 #define EGO_GONDOLIN            67
772 #define EGO_WEST                        68
773 #define EGO_ATTACKS                     69
774 #define EGO_FURY                        70
775 /* xxx */
776 #define EGO_BRAND_ACID          72
777 #define EGO_BRAND_ELEC          73
778 #define EGO_BRAND_FIRE          74
779 #define EGO_BRAND_COLD          75
780 #define EGO_BRAND_POIS          76
781 /* xxx */
782 /* xxx */
783 /* xxx */
784 #define EGO_SLAY_ANIMAL         80
785 #define EGO_SLAY_EVIL           81
786 #define EGO_SLAY_UNDEAD         82
787 #define EGO_SLAY_DEMON          83
788 #define EGO_SLAY_ORC            84
789 #define EGO_SLAY_TROLL          85
790 #define EGO_SLAY_GIANT          86
791 #define EGO_SLAY_DRAGON         87
792 #define EGO_KILL_ANIMAL         88
793 #define EGO_KILL_EVIL           89
794 #define EGO_KILL_UNDEAD         90
795 #define EGO_KILL_DEMON          83
796 #define EGO_KILL_ORC            84
797 #define EGO_KILL_TROLL          85
798 #define EGO_KILL_GIANT          86
799 #define EGO_KILL_DRAGON         95
800 /* xxx */
801 /* xxx */
802 /* xxx */
803 /* xxx */
804 #define EGO_DIGGING                     100
805 #define EGO_DIGGER_EARTHQUAKE           101
806 #define EGO_MORGUL                      102
807 /* xxx */
808
809 /* Bows */
810 #define EGO_ACCURACY            104
811 #define EGO_VELOCITY            105
812 #define EGO_BOW_LORIEN          106
813 #define EGO_CROSSBOW_HARAD      107
814 #define EGO_EXTRA_MIGHT         108
815 #define EGO_EXTRA_SHOTS         109
816 #define EGO_SLING_BUCKLAND      110
817 #define EGO_NAZGUL                      111
818
819 /* Ammo */
820 #define EGO_HURT_ANIMAL         112
821 #define EGO_HURT_EVIL           113
822 #define EGO_HURT_UNDEAD         114
823 #define EGO_HURT_DEMON          115
824 #define EGO_HURT_ORC            116
825 #define EGO_HURT_TROLL          117
826 #define EGO_HURT_GIANT          118
827 #define EGO_HURT_DRAGON         119
828 #define EGO_AMMO_HOLY           120
829 #define EGO_AMMO_VENOM          121
830 #define EGO_FLAME                       122
831 #define EGO_FROST                       123
832 #define EGO_WOUNDING            124
833 #define EGO_BACKBITING          125
834 #define EGO_SHATTERED           126
835 #define EGO_BLASTED                     127
836
837
838
839 /*** Object "tval" and "sval" codes ***/
840
841
842 /*
843  * The values for the "tval" field of various objects.
844  *
845  * This value is the primary means by which items are sorted in the
846  * player inventory, followed by "sval" and "cost".
847  *
848  * Note that a "BOW" with tval = 19 and sval S = 10*N+P takes a missile
849  * weapon with tval = 16+N, and does (xP) damage when so combined.  This
850  * fact is not actually used in the source, but it kind of interesting.
851  *
852  * Note that as of 2.7.8, the "item flags" apply to all items, though
853  * only armor and weapons and a few other items use any of these flags.
854  */
855
856 #define TV_SKELETON      1      /* Skeletons ('s') */
857 #define TV_BOTTLE                2      /* Empty bottles ('!') */
858 #define TV_JUNK          3      /* Sticks, Pottery, etc ('~') */
859 #define TV_SPIKE         5      /* Spikes ('~') */
860 #define TV_CHEST         7      /* Chests ('~') */
861 #define TV_SHOT                 16      /* Ammo for slings */
862 #define TV_ARROW        17      /* Ammo for bows */
863 #define TV_BOLT         18      /* Ammo for x-bows */
864 #define TV_BOW          19      /* Slings/Bows/Xbows */
865 #define TV_DIGGING      20      /* Shovels/Picks */
866 #define TV_HAFTED       21      /* Priest Weapons */
867 #define TV_POLEARM      22      /* Axes and Pikes */
868 #define TV_SWORD        23      /* Edged Weapons */
869 #define TV_BOOTS        30      /* Boots */
870 #define TV_GLOVES       31      /* Gloves */
871 #define TV_HELM         32      /* Helms */
872 #define TV_CROWN        33      /* Crowns */
873 #define TV_SHIELD       34      /* Shields */
874 #define TV_CLOAK        35      /* Cloaks */
875 #define TV_SOFT_ARMOR   36      /* Soft Armor */
876 #define TV_HARD_ARMOR   37      /* Hard Armor */
877 #define TV_DRAG_ARMOR   38      /* Dragon Scale Mail */
878 #define TV_LITE         39      /* Lites (including Specials) */
879 #define TV_AMULET       40      /* Amulets (including Specials) */
880 #define TV_RING         45      /* Rings (including Specials) */
881 #define TV_STAFF        55
882 #define TV_WAND         65
883 #define TV_ROD          66
884 #define TV_SCROLL       70
885 #define TV_POTION       75
886 #define TV_FLASK        77
887 #define TV_FOOD         80
888 #define TV_MAGIC_BOOK   90
889 #define TV_PRAYER_BOOK  91
890 #define TV_GOLD         100     /* Gold can only be picked up by players */
891
892
893
894 /* The "sval" codes for TV_SHOT/TV_ARROW/TV_BOLT */
895 #define SV_AMMO_LIGHT           0       /* pebbles */
896 #define SV_AMMO_NORMAL          1       /* shots, arrows, bolts */
897 #define SV_AMMO_HEAVY           2       /* seeker arrows and bolts */
898 #define SV_AMMO_SILVER          3       /* silver arrows and bolts */
899
900 /* The "sval" codes for TV_BOW (note information in "sval") */
901 #define SV_SLING                        2       /* (x2) */
902 #define SV_SHORT_BOW            12      /* (x2) */
903 #define SV_LONG_BOW                     13      /* (x3) */
904 #define SV_LIGHT_XBOW           23      /* (x3) */
905 #define SV_HEAVY_XBOW           24      /* (x4) */
906
907 /* The "sval" codes for TV_DIGGING */
908 #define SV_SHOVEL                       1
909 #define SV_GNOMISH_SHOVEL       2
910 #define SV_DWARVEN_SHOVEL       3
911 #define SV_PICK                         4
912 #define SV_ORCISH_PICK          5
913 #define SV_DWARVEN_PICK         6
914 #define SV_MATTOCK                      7
915
916 /* The "sval" values for TV_HAFTED */
917 #define SV_WHIP                                 2       /* 1d6 */
918 #define SV_QUARTERSTAFF                 3       /* 1d9 */
919 #define SV_MACE                                 5       /* 2d4 */
920 #define SV_BALL_AND_CHAIN               6       /* 2d4 */
921 #define SV_WAR_HAMMER                   8       /* 3d3 */
922 #define SV_LUCERN_HAMMER                10      /* 2d5 */
923 #define SV_MORNING_STAR                 12      /* 2d6 */
924 #define SV_FLAIL                                13      /* 2d6 */
925 #define SV_LEAD_FILLED_MACE             15      /* 3d4 */
926 #define SV_TWO_HANDED_FLAIL             18      /* 3d6 */
927 #define SV_MACE_OF_DISRUPTION   20      /* 5d8 */
928 #define SV_GROND                                50      /* 3d4 */
929
930 /* The "sval" values for TV_POLEARM */
931 #define SV_SPEAR                                2       /* 1d6 */
932 #define SV_AWL_PIKE                             4       /* 1d8 */
933 #define SV_TRIDENT                              5       /* 1d9 */
934 #define SV_PIKE                                 8       /* 2d5 */
935 #define SV_BEAKED_AXE                   10      /* 2d6 */
936 #define SV_BROAD_AXE                    11      /* 2d6 */
937 #define SV_GLAIVE                               13      /* 2d6 */
938 #define SV_HALBERD                              15      /* 3d4 */
939 #define SV_SCYTHE                               17      /* 5d3 */
940 #define SV_LANCE                                20      /* 2d8 */
941 #define SV_BATTLE_AXE                   22      /* 2d8 */
942 #define SV_GREAT_AXE                    25      /* 4d4 */
943 #define SV_LOCHABER_AXE                 28      /* 3d8 */
944 #define SV_SCYTHE_OF_SLICING    30      /* 8d4 */
945
946 /* The "sval" codes for TV_SWORD */
947 #define SV_BROKEN_DAGGER                1       /* 1d1 */
948 #define SV_BROKEN_SWORD                 2       /* 1d2 */
949 #define SV_DAGGER                               4       /* 1d4 */
950 #define SV_MAIN_GAUCHE                  5       /* 1d5 */
951 #define SV_RAPIER                               7       /* 1d6 */
952 #define SV_SMALL_SWORD                  8       /* 1d6 */
953 #define SV_SHORT_SWORD                  10      /* 1d7 */
954 #define SV_SABRE                                11      /* 1d7 */
955 #define SV_CUTLASS                              12      /* 1d7 */
956 #define SV_TULWAR                               15      /* 2d4 */
957 #define SV_BROAD_SWORD                  16      /* 2d5 */
958 #define SV_LONG_SWORD                   17      /* 2d5 */
959 #define SV_SCIMITAR                             18      /* 2d5 */
960 #define SV_KATANA                               20      /* 3d4 */
961 #define SV_BASTARD_SWORD                21      /* 3d4 */
962 #define SV_TWO_HANDED_SWORD             25      /* 3d6 */
963 #define SV_EXECUTIONERS_SWORD   28      /* 4d5 */
964 #define SV_BLADE_OF_CHAOS               30      /* 6d5 */
965
966 /* The "sval" codes for TV_SHIELD */
967 #define SV_SMALL_LEATHER_SHIELD         2
968 #define SV_SMALL_METAL_SHIELD           3
969 #define SV_LARGE_LEATHER_SHIELD         4
970 #define SV_LARGE_METAL_SHIELD           5
971 #define SV_SHIELD_OF_DEFLECTION         10
972
973 /* The "sval" codes for TV_HELM */
974 #define SV_HARD_LEATHER_CAP             2
975 #define SV_METAL_CAP                    3
976 #define SV_IRON_HELM                    5
977 #define SV_STEEL_HELM                   6
978 #define SV_IRON_CROWN                   10
979 #define SV_GOLDEN_CROWN                 11
980 #define SV_JEWELED_CROWN                12
981 #define SV_MORGOTH                              50
982
983 /* The "sval" codes for TV_BOOTS */
984 #define SV_PAIR_OF_SOFT_LEATHER_BOOTS   2
985 #define SV_PAIR_OF_HARD_LEATHER_BOOTS   3
986 #define SV_PAIR_OF_METAL_SHOD_BOOTS             6
987
988 /* The "sval" codes for TV_CLOAK */
989 #define SV_CLOAK                                        1
990 #define SV_SHADOW_CLOAK                         6
991
992 /* The "sval" codes for TV_GLOVES */
993 #define SV_SET_OF_LEATHER_GLOVES        1
994 #define SV_SET_OF_GAUNTLETS                     2
995 #define SV_SET_OF_CESTI                         5
996
997 /* The "sval" codes for TV_SOFT_ARMOR */
998 #define SV_FILTHY_RAG                           1
999 #define SV_ROBE                                         2
1000 #define SV_SOFT_LEATHER_ARMOR           4
1001 #define SV_SOFT_STUDDED_LEATHER         5
1002 #define SV_HARD_LEATHER_ARMOR           6
1003 #define SV_HARD_STUDDED_LEATHER         7
1004 #define SV_LEATHER_SCALE_MAIL           11
1005
1006 /* The "sval" codes for TV_HARD_ARMOR */
1007 #define SV_RUSTY_CHAIN_MAIL                     1       /* 14- */
1008 #define SV_METAL_SCALE_MAIL                     3       /* 13 */
1009 #define SV_CHAIN_MAIL                           4       /* 14 */
1010 #define SV_AUGMENTED_CHAIN_MAIL         6       /* 16 */
1011 #define SV_DOUBLE_CHAIN_MAIL            7       /* 16 */
1012 #define SV_BAR_CHAIN_MAIL                       8       /* 18 */
1013 #define SV_METAL_BRIGANDINE_ARMOUR      9       /* 19 */
1014 #define SV_PARTIAL_PLATE_ARMOUR         12      /* 22 */
1015 #define SV_METAL_LAMELLAR_ARMOUR        13      /* 23 */
1016 #define SV_FULL_PLATE_ARMOUR            15      /* 25 */
1017 #define SV_RIBBED_PLATE_ARMOUR          18      /* 28 */
1018 #define SV_MITHRIL_CHAIN_MAIL           20      /* 28+ */
1019 #define SV_MITHRIL_PLATE_MAIL           25      /* 35+ */
1020 #define SV_ADAMANTITE_PLATE_MAIL        30      /* 40+ */
1021
1022 /* The "sval" codes for TV_DRAG_ARMOR */
1023 #define SV_DRAGON_BLACK                 1
1024 #define SV_DRAGON_BLUE                  2
1025 #define SV_DRAGON_WHITE                 3
1026 #define SV_DRAGON_RED                   4
1027 #define SV_DRAGON_GREEN                 5
1028 #define SV_DRAGON_MULTIHUED             6
1029 #define SV_DRAGON_SHINING               10
1030 #define SV_DRAGON_LAW                   12
1031 #define SV_DRAGON_BRONZE                14
1032 #define SV_DRAGON_GOLD                  16
1033 #define SV_DRAGON_CHAOS                 18
1034 #define SV_DRAGON_BALANCE               20
1035 #define SV_DRAGON_POWER                 30
1036
1037 /* The sval codes for TV_LITE */
1038 #define SV_LITE_TORCH           0
1039 #define SV_LITE_LANTERN         1
1040 #define SV_LITE_GALADRIEL       4
1041 #define SV_LITE_ELENDIL         5
1042 #define SV_LITE_THRAIN          6
1043 #define SV_LITE_PALANTIR        7
1044
1045 /* The "sval" codes for TV_AMULET */
1046 #define SV_AMULET_DOOM                  0
1047 #define SV_AMULET_TELEPORT              1
1048 #define SV_AMULET_ADORNMENT             2
1049 #define SV_AMULET_SLOW_DIGEST   3
1050 #define SV_AMULET_RESIST_ACID   4
1051 #define SV_AMULET_SEARCHING             5
1052 #define SV_AMULET_WISDOM                6
1053 #define SV_AMULET_CHARISMA              7
1054 #define SV_AMULET_THE_MAGI              8
1055 #define SV_AMULET_SUSTENANCE    9
1056 #define SV_AMULET_CARLAMMAS             10
1057 #define SV_AMULET_INGWE                 11
1058 #define SV_AMULET_DWARVES               12
1059 #define SV_AMULET_ESP                   13
1060 #define SV_AMULET_RESIST                14
1061 #define SV_AMULET_REGEN                 15
1062 #define SV_AMULET_ELESSAR               16
1063 #define SV_AMULET_EVENSTAR              17
1064 #define SV_AMULET_DEVOTION              18
1065 #define SV_AMULET_WEAPONMASTERY 19
1066 #define SV_AMULET_TRICKERY              20
1067 #define SV_AMULET_INFRAVISION           21
1068 #define SV_AMULET_RESIST_LIGHTNING  22
1069
1070
1071 /* The sval codes for TV_RING */
1072 #define SV_RING_WOE                             0
1073 #define SV_RING_AGGRAVATION             1
1074 #define SV_RING_WEAKNESS                2
1075 #define SV_RING_STUPIDITY               3
1076 #define SV_RING_TELEPORTATION   4
1077 /* xxx */
1078 #define SV_RING_SLOW_DIGESTION  6
1079 #define SV_RING_FEATHER_FALL    7
1080 #define SV_RING_RESIST_FIRE             8
1081 #define SV_RING_RESIST_COLD             9
1082 #define SV_RING_SUSTAIN_STR             10
1083 #define SV_RING_SUSTAIN_INT             11
1084 #define SV_RING_SUSTAIN_WIS             12
1085 #define SV_RING_SUSTAIN_DEX             13
1086 #define SV_RING_SUSTAIN_CON             14
1087 #define SV_RING_SUSTAIN_CHR             15
1088 #define SV_RING_PROTECTION              16
1089 #define SV_RING_ACID                    17
1090 #define SV_RING_FLAMES                  18
1091 #define SV_RING_ICE                             19
1092 #define SV_RING_RESIST_POIS             20
1093 #define SV_RING_FREE_ACTION             21
1094 #define SV_RING_SEE_INVIS               22
1095 #define SV_RING_SEARCHING               23
1096 #define SV_RING_STR                             24
1097 #define SV_RING_INT                             25
1098 #define SV_RING_DEX                             26
1099 #define SV_RING_CON                             27
1100 #define SV_RING_ACCURACY                28
1101 #define SV_RING_DAMAGE                  29
1102 #define SV_RING_SLAYING                 30
1103 #define SV_RING_SPEED                   31
1104 #define SV_RING_BARAHIR                 32
1105 #define SV_RING_TULKAS                  33
1106 #define SV_RING_NARYA                   34
1107 #define SV_RING_NENYA                   35
1108 #define SV_RING_VILYA                   36
1109 #define SV_RING_POWER                   37
1110 #define SV_RING_LIGHTNING               38
1111
1112
1113 /* The "sval" codes for TV_STAFF */
1114 #define SV_STAFF_DARKNESS               0
1115 #define SV_STAFF_SLOWNESS               1
1116 #define SV_STAFF_HASTE_MONSTERS 2
1117 #define SV_STAFF_SUMMONING              3
1118 #define SV_STAFF_TELEPORTATION  4
1119 #define SV_STAFF_IDENTIFY               5
1120 #define SV_STAFF_REMOVE_CURSE   6
1121 #define SV_STAFF_STARLITE               7
1122 #define SV_STAFF_LITE                   8
1123 #define SV_STAFF_MAPPING                9
1124 #define SV_STAFF_DETECT_GOLD    10
1125 #define SV_STAFF_DETECT_ITEM    11
1126 #define SV_STAFF_DETECT_TRAP    12
1127 #define SV_STAFF_DETECT_DOOR    13
1128 #define SV_STAFF_DETECT_INVIS   14
1129 #define SV_STAFF_DETECT_EVIL    15
1130 #define SV_STAFF_CURE_LIGHT             16
1131 #define SV_STAFF_CURING                 17
1132 #define SV_STAFF_HEALING                18
1133 #define SV_STAFF_THE_MAGI               19
1134 #define SV_STAFF_SLEEP_MONSTERS 20
1135 #define SV_STAFF_SLOW_MONSTERS  21
1136 #define SV_STAFF_SPEED                  22
1137 #define SV_STAFF_PROBING                23
1138 #define SV_STAFF_DISPEL_EVIL    24
1139 #define SV_STAFF_POWER                  25
1140 #define SV_STAFF_HOLINESS               26
1141 #define SV_STAFF_BANISHMENT             27
1142 #define SV_STAFF_EARTHQUAKES    28
1143 #define SV_STAFF_DESTRUCTION    29
1144
1145
1146 /* The "sval" codes for TV_WAND */
1147 #define SV_WAND_HEAL_MONSTER    0
1148 #define SV_WAND_HASTE_MONSTER   1
1149 #define SV_WAND_CLONE_MONSTER   2
1150 #define SV_WAND_TELEPORT_AWAY   3
1151 #define SV_WAND_DISARMING               4
1152 #define SV_WAND_TRAP_DOOR_DEST  5
1153 #define SV_WAND_STONE_TO_MUD    6
1154 #define SV_WAND_LITE                    7
1155 #define SV_WAND_SLEEP_MONSTER   8
1156 #define SV_WAND_SLOW_MONSTER    9
1157 #define SV_WAND_CONFUSE_MONSTER 10
1158 #define SV_WAND_FEAR_MONSTER    11
1159 #define SV_WAND_DRAIN_LIFE              12
1160 #define SV_WAND_POLYMORPH               13
1161 #define SV_WAND_STINKING_CLOUD  14
1162 #define SV_WAND_MAGIC_MISSILE   15
1163 #define SV_WAND_ACID_BOLT               16
1164 #define SV_WAND_ELEC_BOLT               17
1165 #define SV_WAND_FIRE_BOLT               18
1166 #define SV_WAND_COLD_BOLT               19
1167 #define SV_WAND_ACID_BALL               20
1168 #define SV_WAND_ELEC_BALL               21
1169 #define SV_WAND_FIRE_BALL               22
1170 #define SV_WAND_COLD_BALL               23
1171 #define SV_WAND_WONDER                  24
1172 #define SV_WAND_ANNIHILATION    25
1173 #define SV_WAND_DRAGON_FIRE             26
1174 #define SV_WAND_DRAGON_COLD             27
1175 #define SV_WAND_DRAGON_BREATH   28
1176
1177 /* The "sval" codes for TV_ROD */
1178 #define SV_ROD_DETECT_TRAP              0
1179 #define SV_ROD_DETECT_DOOR              1
1180 #define SV_ROD_IDENTIFY                 2
1181 #define SV_ROD_RECALL                   3
1182 #define SV_ROD_ILLUMINATION             4
1183 #define SV_ROD_MAPPING                  5
1184 #define SV_ROD_DETECTION                6
1185 #define SV_ROD_PROBING                  7
1186 #define SV_ROD_CURING                   8
1187 #define SV_ROD_HEALING                  9
1188 #define SV_ROD_RESTORATION              10
1189 #define SV_ROD_SPEED                    11
1190 /* xxx (aimed) */
1191 #define SV_ROD_TELEPORT_AWAY    13
1192 #define SV_ROD_DISARMING                14
1193 #define SV_ROD_LITE                             15
1194 #define SV_ROD_SLEEP_MONSTER    16
1195 #define SV_ROD_SLOW_MONSTER             17
1196 #define SV_ROD_DRAIN_LIFE               18
1197 #define SV_ROD_POLYMORPH                19
1198 #define SV_ROD_ACID_BOLT                20
1199 #define SV_ROD_ELEC_BOLT                21
1200 #define SV_ROD_FIRE_BOLT                22
1201 #define SV_ROD_COLD_BOLT                23
1202 #define SV_ROD_ACID_BALL                24
1203 #define SV_ROD_ELEC_BALL                25
1204 #define SV_ROD_FIRE_BALL                26
1205 #define SV_ROD_COLD_BALL                27
1206
1207
1208 /* The "sval" codes for TV_SCROLL */
1209
1210 #define SV_SCROLL_DARKNESS                              0
1211 #define SV_SCROLL_AGGRAVATE_MONSTER             1
1212 #define SV_SCROLL_CURSE_ARMOR                   2
1213 #define SV_SCROLL_CURSE_WEAPON                  3
1214 #define SV_SCROLL_SUMMON_MONSTER                4
1215 #define SV_SCROLL_SUMMON_UNDEAD                 5
1216 /* xxx (summon?) */
1217 #define SV_SCROLL_TRAP_CREATION                 7
1218 #define SV_SCROLL_PHASE_DOOR                    8
1219 #define SV_SCROLL_TELEPORT                              9
1220 #define SV_SCROLL_TELEPORT_LEVEL                10
1221 #define SV_SCROLL_WORD_OF_RECALL                11
1222 #define SV_SCROLL_IDENTIFY                              12
1223 #define SV_SCROLL_STAR_IDENTIFY                 13
1224 #define SV_SCROLL_REMOVE_CURSE                  14
1225 #define SV_SCROLL_STAR_REMOVE_CURSE             15
1226 #define SV_SCROLL_ENCHANT_ARMOR                 16
1227 #define SV_SCROLL_ENCHANT_WEAPON_TO_HIT 17
1228 #define SV_SCROLL_ENCHANT_WEAPON_TO_DAM 18
1229 /* xxx enchant missile? */
1230 #define SV_SCROLL_STAR_ENCHANT_ARMOR    20
1231 #define SV_SCROLL_STAR_ENCHANT_WEAPON   21
1232 #define SV_SCROLL_RECHARGING                    22
1233 /* xxx */
1234 #define SV_SCROLL_LIGHT                                 24
1235 #define SV_SCROLL_MAPPING                               25
1236 #define SV_SCROLL_DETECT_GOLD                   26
1237 #define SV_SCROLL_DETECT_ITEM                   27
1238 #define SV_SCROLL_DETECT_TRAP                   28
1239 #define SV_SCROLL_DETECT_DOOR                   29
1240 #define SV_SCROLL_DETECT_INVIS                  30
1241 /* xxx (detect evil?) */
1242 #define SV_SCROLL_SATISFY_HUNGER                32
1243 #define SV_SCROLL_BLESSING                              33
1244 #define SV_SCROLL_HOLY_CHANT                    34
1245 #define SV_SCROLL_HOLY_PRAYER                   35
1246 #define SV_SCROLL_MONSTER_CONFUSION             36
1247 #define SV_SCROLL_PROTECTION_FROM_EVIL  37
1248 #define SV_SCROLL_RUNE_OF_PROTECTION    38
1249 #define SV_SCROLL_TRAP_DOOR_DESTRUCTION 39
1250 /* xxx */
1251 #define SV_SCROLL_STAR_DESTRUCTION              41
1252 #define SV_SCROLL_DISPEL_UNDEAD                 42
1253 /* xxx */
1254 #define SV_SCROLL_BANISHMENT                    44
1255 #define SV_SCROLL_MASS_BANISHMENT               45
1256 #define SV_SCROLL_ACQUIREMENT                   46
1257 #define SV_SCROLL_STAR_ACQUIREMENT              47
1258
1259 /* The "sval" codes for TV_POTION */
1260 #define SV_POTION_WATER                         0
1261 #define SV_POTION_APPLE_JUICE           1
1262 #define SV_POTION_SLIME_MOLD            2
1263 /* xxx (fixed color) */
1264 #define SV_POTION_SLOWNESS                      4
1265 #define SV_POTION_SALT_WATER            5
1266 #define SV_POTION_POISON                        6
1267 #define SV_POTION_BLINDNESS                     7
1268 /* xxx */
1269 #define SV_POTION_CONFUSION                     9
1270 /* xxx */
1271 #define SV_POTION_SLEEP                         11
1272 /* xxx */
1273 #define SV_POTION_LOSE_MEMORIES         13
1274 /* xxx */
1275 #define SV_POTION_RUINATION                     15
1276 #define SV_POTION_DEC_STR                       16
1277 #define SV_POTION_DEC_INT                       17
1278 #define SV_POTION_DEC_WIS                       18
1279 #define SV_POTION_DEC_DEX                       19
1280 #define SV_POTION_DEC_CON                       20
1281 #define SV_POTION_DEC_CHR                       21
1282 #define SV_POTION_DETONATIONS           22
1283 #define SV_POTION_DEATH                         23
1284 #define SV_POTION_INFRAVISION           24
1285 #define SV_POTION_DETECT_INVIS          25
1286 #define SV_POTION_SLOW_POISON           26
1287 #define SV_POTION_CURE_POISON           27
1288 #define SV_POTION_BOLDNESS                      28
1289 #define SV_POTION_SPEED                         29
1290 #define SV_POTION_RESIST_HEAT           30
1291 #define SV_POTION_RESIST_COLD           31
1292 #define SV_POTION_HEROISM                       32
1293 #define SV_POTION_BERSERK_STRENGTH      33
1294 #define SV_POTION_CURE_LIGHT            34
1295 #define SV_POTION_CURE_SERIOUS          35
1296 #define SV_POTION_CURE_CRITICAL         36
1297 #define SV_POTION_HEALING                       37
1298 #define SV_POTION_STAR_HEALING          38
1299 #define SV_POTION_LIFE                          39
1300 #define SV_POTION_RESTORE_MANA          40
1301 #define SV_POTION_RESTORE_EXP           41
1302 #define SV_POTION_RES_STR                       42
1303 #define SV_POTION_RES_INT                       43
1304 #define SV_POTION_RES_WIS                       44
1305 #define SV_POTION_RES_DEX                       45
1306 #define SV_POTION_RES_CON                       46
1307 #define SV_POTION_RES_CHR                       47
1308 #define SV_POTION_INC_STR                       48
1309 #define SV_POTION_INC_INT                       49
1310 #define SV_POTION_INC_WIS                       50
1311 #define SV_POTION_INC_DEX                       51
1312 #define SV_POTION_INC_CON                       52
1313 #define SV_POTION_INC_CHR                       53
1314 /* xxx */
1315 #define SV_POTION_AUGMENTATION                  55
1316 #define SV_POTION_ENLIGHTENMENT                 56
1317 #define SV_POTION_STAR_ENLIGHTENMENT    57
1318 #define SV_POTION_SELF_KNOWLEDGE                58
1319 #define SV_POTION_EXPERIENCE                    59
1320
1321 /* The "sval" codes for TV_FOOD */
1322 #define SV_FOOD_POISON                  0
1323 #define SV_FOOD_BLINDNESS               1
1324 #define SV_FOOD_PARANOIA                2
1325 #define SV_FOOD_CONFUSION               3
1326 #define SV_FOOD_HALLUCINATION   4
1327 #define SV_FOOD_PARALYSIS               5
1328 #define SV_FOOD_WEAKNESS                6
1329 #define SV_FOOD_SICKNESS                7
1330 #define SV_FOOD_STUPIDITY               8
1331 #define SV_FOOD_NAIVETY                 9
1332 #define SV_FOOD_UNHEALTH                10
1333 #define SV_FOOD_DISEASE                 11
1334 #define SV_FOOD_CURE_POISON             12
1335 #define SV_FOOD_CURE_BLINDNESS  13
1336 #define SV_FOOD_CURE_PARANOIA   14
1337 #define SV_FOOD_CURE_CONFUSION  15
1338 #define SV_FOOD_CURE_SERIOUS    16
1339 #define SV_FOOD_RESTORE_STR             17
1340 #define SV_FOOD_RESTORE_CON             18
1341 #define SV_FOOD_RESTORING               19
1342 /* many missing mushrooms */
1343 #define SV_FOOD_BISCUIT                 32
1344 #define SV_FOOD_JERKY                   33
1345 #define SV_FOOD_RATION                  35
1346 #define SV_FOOD_SLIME_MOLD              36
1347 #define SV_FOOD_WAYBREAD                37
1348 #define SV_FOOD_PINT_OF_ALE             38
1349 #define SV_FOOD_PINT_OF_WINE    39
1350
1351 /* The "sval" codes for TV_GOLD */
1352 #define SV_COPPER1                        1
1353 #define SV_COPPER2                        2
1354 #define SV_COPPER3                        3
1355 #define SV_SILVER1                        4
1356 #define SV_SILVER2                        5
1357 #define SV_SILVER3                        6
1358 #define SV_GARNETS1                       7
1359 #define SV_GARNETS2                       8
1360 #define SV_GOLD1                          9
1361 #define SV_GOLD2                         10
1362 #define SV_GOLD3                         11
1363 #define SV_OPALS                         12
1364 #define SV_SAPPHIRES                     13
1365 #define SV_RUBIES                        14
1366 #define SV_DIAMONDS                      15
1367 #define SV_EMERALDS                      16
1368 #define SV_MITHRIL                       17
1369 #define SV_ADAMANTITE                    18
1370
1371 #define SV_GOLD_MAX                      19
1372
1373
1374
1375 /*
1376  * Special "sval" limit -- first "normal" food
1377  */
1378 #define SV_FOOD_MIN_FOOD        32
1379
1380 /*
1381  * Special "sval" limit -- first "aimed" rod
1382  */
1383 #define SV_ROD_MIN_DIRECTION    12
1384
1385 /*
1386  * Special "sval" limit -- first "large" chest
1387  */
1388 #define SV_CHEST_MIN_LARGE      4
1389
1390 /*
1391  * Special "sval" limit -- first "good" magic/prayer book
1392  */
1393 #define SV_BOOK_MIN_GOOD        4
1394
1395 /*
1396  * Special "sval" value -- unknown "sval"
1397  */
1398 #define SV_UNKNOWN                      255
1399
1400
1401
1402
1403 /*** Squelch stuff ***/
1404
1405 /* Number of bytes used in squelch sub-quality array */
1406 #define SQUELCH_BYTES    6
1407
1408
1409
1410 /*** Monster blow constants ***/
1411
1412
1413 #define MONSTER_BLOW_MAX 4
1414
1415 /*
1416  * New monster blow methods
1417  */
1418 #define RBM_HIT         1
1419 #define RBM_TOUCH       2
1420 #define RBM_PUNCH       3
1421 #define RBM_KICK        4
1422 #define RBM_CLAW        5
1423 #define RBM_BITE        6
1424 #define RBM_STING       7
1425 #define RBM_XXX1        8
1426 #define RBM_BUTT        9
1427 #define RBM_CRUSH       10
1428 #define RBM_ENGULF      11
1429 #define RBM_XXX2        12
1430 #define RBM_CRAWL       13
1431 #define RBM_DROOL       14
1432 #define RBM_SPIT        15
1433 #define RBM_XXX3        16
1434 #define RBM_GAZE        17
1435 #define RBM_WAIL        18
1436 #define RBM_SPORE       19
1437 #define RBM_XXX4        20
1438 #define RBM_BEG         21
1439 #define RBM_INSULT      22
1440 #define RBM_MOAN        23
1441 #define RBM_XXX5        24
1442
1443
1444 /*
1445  * New monster blow effects
1446  */
1447 #define RBE_HURT                1
1448 #define RBE_POISON              2
1449 #define RBE_UN_BONUS    3
1450 #define RBE_UN_POWER    4
1451 #define RBE_EAT_GOLD    5
1452 #define RBE_EAT_ITEM    6
1453 #define RBE_EAT_FOOD    7
1454 #define RBE_EAT_LITE    8
1455 #define RBE_ACID                9
1456 #define RBE_ELEC                10
1457 #define RBE_FIRE                11
1458 #define RBE_COLD                12
1459 #define RBE_BLIND               13
1460 #define RBE_CONFUSE             14
1461 #define RBE_TERRIFY             15
1462 #define RBE_PARALYZE    16
1463 #define RBE_LOSE_STR    17
1464 #define RBE_LOSE_INT    18
1465 #define RBE_LOSE_WIS    19
1466 #define RBE_LOSE_DEX    20
1467 #define RBE_LOSE_CON    21
1468 #define RBE_LOSE_CHR    22
1469 #define RBE_LOSE_ALL    23
1470 #define RBE_SHATTER             24
1471 #define RBE_EXP_10              25
1472 #define RBE_EXP_20              26
1473 #define RBE_EXP_40              27
1474 #define RBE_EXP_80              28
1475 #define RBE_HALLU               29
1476
1477
1478 /*** Function flags ***/
1479
1480
1481 /*
1482  * Bit flags for the "project()" function
1483  *
1484  *   JUMP: Jump directly to the target location (this is a hack)
1485  *   BEAM: Work as a beam weapon (affect every grid passed through)
1486  *   THRU: Continue "through" the target (used for "bolts"/"beams")
1487  *   STOP: Stop as soon as we hit a monster (used for "bolts")
1488  *   GRID: Affect each grid in the "blast area" in some way
1489  *   ITEM: Affect each object in the "blast area" in some way
1490  *   KILL: Affect each monster in the "blast area" in some way
1491  *   HIDE: Hack -- disable "visual" feedback from projection
1492  */
1493 #define PROJECT_JUMP    0x01
1494 #define PROJECT_BEAM    0x02
1495 #define PROJECT_THRU    0x04
1496 #define PROJECT_STOP    0x08
1497 #define PROJECT_GRID    0x10
1498 #define PROJECT_ITEM    0x20
1499 #define PROJECT_KILL    0x40
1500 #define PROJECT_HIDE    0x80
1501
1502
1503 /*
1504  * Bit flags for the "enchant()" function
1505  */
1506 #define ENCH_TOHIT   0x01
1507 #define ENCH_TODAM   0x02
1508 #define ENCH_TOAC    0x04
1509
1510
1511 /*
1512  * Bit flags for the "target_set" function
1513  *
1514  *      KILL: Target monsters
1515  *      LOOK: Describe grid fully
1516  *      XTRA: Currently unused flag
1517  *      GRID: Select from all grids
1518  */
1519 #define TARGET_KILL             0x01
1520 #define TARGET_LOOK             0x02
1521 #define TARGET_XTRA             0x04
1522 #define TARGET_GRID             0x08
1523
1524
1525 /*
1526  * Bit flags for the "monster_desc" function
1527  */
1528 #define MDESC_OBJE              0x01    /* Objective (or Reflexive) */
1529 #define MDESC_POSS              0x02    /* Possessive (or Reflexive) */
1530 #define MDESC_IND1              0x04    /* Indefinites for hidden monsters */
1531 #define MDESC_IND2              0x08    /* Indefinites for visible monsters */
1532 #define MDESC_PRO1              0x10    /* Pronominalize hidden monsters */
1533 #define MDESC_PRO2              0x20    /* Pronominalize visible monsters */
1534 #define MDESC_HIDE              0x40    /* Assume the monster is hidden */
1535 #define MDESC_SHOW              0x80    /* Assume the monster is visible */
1536
1537
1538 /*
1539  * Bit flags for the "get_item" function
1540  */
1541 #define USE_EQUIP               0x01    /* Allow equip items */
1542 #define USE_INVEN               0x02    /* Allow inven items */
1543 #define USE_FLOOR               0x04    /* Allow floor items */
1544 #define CAN_SQUELCH             0x08    /* Allow selection of all squelched items */
1545
1546
1547 /*** Player flags ***/
1548
1549
1550 /*
1551  * Bit flags for the "p_ptr->notice" variable
1552  */
1553 #define PN_COMBINE              0x00000001L     /* Combine the pack */
1554 #define PN_REORDER              0x00000002L     /* Reorder the pack */
1555 #define PN_AUTOINSCRIBE 0x00000004L     /* Autoinscribe items */
1556 #define PN_PICKUP0      0x00000008L     /* Notice stuff (allow pickup) */
1557 #define PN_PICKUP1      0x00000010L     /* Pick up stuff */
1558 /* xxx (many) */
1559
1560
1561 /*
1562  * Bit flags for the "p_ptr->update" variable
1563  */
1564 #define PU_BONUS                0x00000001L     /* Calculate bonuses */
1565 #define PU_TORCH                0x00000002L     /* Calculate torch radius */
1566 /* xxx (many) */
1567 #define PU_HP                   0x00000010L     /* Calculate chp and mhp */
1568 #define PU_MANA                 0x00000020L     /* Calculate csp and msp */
1569 #define PU_SPELLS               0x00000040L     /* Calculate spells */
1570 /* xxx (many) */
1571 #define PU_FORGET_VIEW  0x00010000L     /* Forget field of view */
1572 #define PU_UPDATE_VIEW  0x00020000L     /* Update field of view */
1573 /* xxx (many) */
1574 #define PU_FORGET_FLOW  0x00100000L     /* Forget flow data */
1575 #define PU_UPDATE_FLOW  0x00200000L     /* Update flow data */
1576 /* xxx (many) */
1577 #define PU_MONSTERS             0x10000000L     /* Update monsters */
1578 #define PU_DISTANCE             0x20000000L     /* Update distances */
1579 /* xxx */
1580 #define PU_PANEL                0x80000000L     /* Update panel */
1581
1582
1583 /*
1584  * Bit flags for the "p_ptr->redraw" variable
1585  */
1586 #define PR_MISC                 0x00000001L     /* Display Race/Class */
1587 #define PR_TITLE                0x00000002L     /* Display Title */
1588 #define PR_LEV                  0x00000004L     /* Display Level */
1589 #define PR_EXP                  0x00000008L     /* Display Experience */
1590 #define PR_STATS                0x00000010L     /* Display Stats */
1591 #define PR_ARMOR                0x00000020L     /* Display Armor */
1592 #define PR_HP                   0x00000040L     /* Display Hitpoints */
1593 #define PR_MANA                 0x00000080L     /* Display Mana */
1594 #define PR_GOLD                 0x00000100L     /* Display Gold */
1595 #define PR_DEPTH                0x00000200L     /* Display Depth */
1596 #define PR_EQUIPPY              0x00000400L     /* Display Equippy chars */
1597 #define PR_HEALTH               0x00000800L     /* Display Health Bar */
1598 #define PR_CUT                  0x00001000L     /* Display Extra (Cut) */
1599 #define PR_STUN                 0x00002000L     /* Display Extra (Stun) */
1600 #define PR_HUNGER               0x00004000L     /* Display Extra (Hunger) */
1601 /* xxx */
1602 #define PR_BLIND                0x00010000L     /* Display Extra (Blind) */
1603 #define PR_CONFUSED             0x00020000L     /* Display Extra (Confused) */
1604 #define PR_AFRAID               0x00040000L     /* Display Extra (Afraid) */
1605 #define PR_POISONED             0x00080000L     /* Display Extra (Poisoned) */
1606 #define PR_STATE                0x00100000L     /* Display Extra (State) */
1607 #define PR_SPEED                0x00200000L     /* Display Extra (Speed) */
1608 #define PR_STUDY                0x00400000L     /* Display Extra (Study) */
1609 #define PR_MAP                  0x00800000L     /* Display Map */
1610 #define PR_OPPOSE_ELEMENTS      0x01000000L     /* Display temp. resists */
1611 #define PR_TEMP_SPELLS          0x02000000L     /* Display temp. spell effects */
1612
1613 /* Display Basic Info */
1614 #define PR_BASIC \
1615         (PR_MISC | PR_TITLE | PR_STATS | PR_LEV |\
1616          PR_EXP | PR_GOLD | PR_ARMOR | PR_HP |\
1617          PR_MANA | PR_DEPTH | PR_HEALTH | PR_EQUIPPY)
1618
1619 /* Display Extra Info */
1620 #define PR_EXTRA \
1621         (PR_CUT | PR_STUN | PR_HUNGER | PR_BLIND |\
1622          PR_CONFUSED | PR_AFRAID | PR_POISONED | PR_STATE |\
1623          PR_SPEED | PR_STUDY | PR_OPPOSE_ELEMENTS)
1624
1625
1626 /*
1627  * Bit flags for the "p_ptr->window" variable.
1628  */
1629 #define PW_INVEN            0x00000001L /* Display inven/equip */
1630 #define PW_EQUIP            0x00000002L /* Display equip/inven */
1631 #define PW_PLAYER_0         0x00000004L /* Display player (basic) */
1632 #define PW_PLAYER_1         0x00000008L /* Display player (extra) */
1633 #define PW_PLAYER_2         0x00000010L /* Display player (compact) */
1634 #define PW_MAP              0x00000020L /* Display dungeon map */
1635 #define PW_MESSAGE          0x00000040L /* Display messages */
1636 #define PW_OVERHEAD         0x00000080L /* Display overhead view */
1637 #define PW_MONSTER          0x00000100L /* Display monster recall */
1638 #define PW_OBJECT           0x00000200L /* Display object recall */
1639 #define PW_MONLIST          0x00000400L /* Display monster list */
1640 #define PW_STATUS           0x00000800L /* Display status */
1641 /* xxx */
1642 #define PW_BORG_1           0x00004000L /* Display borg messages */
1643 #define PW_BORG_2           0x00008000L /* Display borg status */
1644
1645
1646 #define PW_MAX_FLAGS            16
1647
1648
1649 /*** Cave flags ***/
1650
1651
1652 /*
1653  * Special cave grid flags
1654  */
1655 #define CAVE_MARK               0x01    /* memorized feature */
1656 #define CAVE_GLOW               0x02    /* self-illuminating */
1657 #define CAVE_ICKY               0x04    /* part of a vault */
1658 #define CAVE_ROOM               0x08    /* part of a room */
1659 #define CAVE_SEEN               0x10    /* seen flag */
1660 #define CAVE_VIEW               0x20    /* view flag */
1661 #define CAVE_TEMP               0x40    /* temp flag */
1662 #define CAVE_WALL               0x80    /* wall flag */
1663
1664
1665
1666 /*** Object flags ***/
1667
1668
1669 /*
1670  * Chest trap flags (see "tables.c")
1671  */
1672 #define CHEST_LOSE_STR  0x01
1673 #define CHEST_LOSE_CON  0x02
1674 #define CHEST_POISON    0x04
1675 #define CHEST_PARALYZE  0x08
1676 #define CHEST_EXPLODE   0x10
1677 #define CHEST_SUMMON    0x20
1678
1679
1680 /*
1681  * Special object flags
1682  */
1683 #define IDENT_SENSE     0x01    /* Item has been "sensed" */
1684 /* ... */
1685 #define IDENT_EMPTY     0x04    /* Item charges are known */
1686 #define IDENT_KNOWN     0x08    /* Item abilities are known */
1687 #define IDENT_STORE     0x10    /* Item is in the inventory of a store */
1688 #define IDENT_MENTAL    0x20    /* Item information is known */
1689 #define IDENT_CURSED    0x40    /* Item is temporarily cursed */
1690 #define IDENT_BROKEN    0x80    /* Item is permanently worthless */
1691
1692
1693 /*
1694  * The special inscriptions.
1695  */
1696 #define INSCRIP_NULL            0
1697 #define INSCRIP_TERRIBLE        1
1698 #define INSCRIP_WORTHLESS       2
1699 #define INSCRIP_CURSED          3
1700 #define INSCRIP_BROKEN          4
1701 #define INSCRIP_AVERAGE         5
1702 #define INSCRIP_GOOD            6
1703 #define INSCRIP_EXCELLENT       7
1704 #define INSCRIP_SPECIAL         8
1705 #define INSCRIP_UNCURSED        9
1706 #define INSCRIP_INDESTRUCTIBLE  10
1707 #define INSCRIP_SQUELCH                 11
1708
1709 /*
1710  * Number of special inscriptions, plus one.
1711  */
1712 #define MAX_INSCRIP                     11
1713
1714
1715 /*
1716  * Some bit-flags for the "smart" field of "monster_type".
1717  *
1718  * Most of these map to the "TR2_xxx" flags.
1719  */
1720 #define SM_OPP_ACID             0x00000001
1721 #define SM_OPP_ELEC             0x00000002
1722 #define SM_OPP_FIRE             0x00000004
1723 #define SM_OPP_COLD             0x00000008
1724 #define SM_OPP_POIS             0x00000010
1725 #define SM_OPP_XXX1             0x00000020
1726 #define SM_OPP_XXX2             0x00000040
1727 #define SM_OPP_XXX3             0x00000080
1728 #define SM_IMM_XXX5             0x00000100
1729 #define SM_IMM_XXX6             0x00000200
1730 #define SM_IMM_FREE             0x00000400
1731 #define SM_IMM_MANA             0x00000800
1732 #define SM_IMM_ACID             0x00001000
1733 #define SM_IMM_ELEC             0x00002000
1734 #define SM_IMM_FIRE             0x00004000
1735 #define SM_IMM_COLD             0x00008000
1736 #define SM_RES_ACID             0x00010000
1737 #define SM_RES_ELEC             0x00020000
1738 #define SM_RES_FIRE             0x00040000
1739 #define SM_RES_COLD             0x00080000
1740 #define SM_RES_POIS             0x00100000
1741 #define SM_RES_FEAR             0x00200000
1742 #define SM_RES_LITE             0x00400000
1743 #define SM_RES_DARK             0x00800000
1744 #define SM_RES_BLIND    0x01000000
1745 #define SM_RES_CONFU    0x02000000
1746 #define SM_RES_SOUND    0x04000000
1747 #define SM_RES_SHARD    0x08000000
1748 #define SM_RES_NEXUS    0x10000000
1749 #define SM_RES_NETHR    0x20000000
1750 #define SM_RES_CHAOS    0x40000000
1751 #define SM_RES_DISEN    0x80000000
1752
1753
1754 /*
1755  * As of 2.7.8, the "object flags" are valid for all objects, and as
1756  * of 2.7.9, these flags are not actually stored with the object, but
1757  * rather in the object_kind, ego_item, and artifact structures.
1758  *
1759  * Note that "flags1" contains all flags dependant on "pval" (including
1760  * stat bonuses, but NOT stat sustainers), plus all "extra attack damage"
1761  * flags (SLAY_XXX and BRAND_XXX).
1762  *
1763  * Note that "flags2" contains all "resistances" (including "sustain" flags,
1764  * immunity flags, and resistance flags).  Note that "free action" and "hold
1765  * life" are no longer considered to be "immunities".
1766  *
1767  * Note that "flags3" contains everything else (including eight good flags,
1768  * seven unused flags, four bad flags, four damage ignoring flags, six weird
1769  * flags, and three cursed flags).
1770  */
1771
1772 #define TR1_STR             0x00000001L /* STR += "pval" */
1773 #define TR1_INT             0x00000002L /* INT += "pval" */
1774 #define TR1_WIS             0x00000004L /* WIS += "pval" */
1775 #define TR1_DEX             0x00000008L /* DEX += "pval" */
1776 #define TR1_CON             0x00000010L /* CON += "pval" */
1777 #define TR1_CHR             0x00000020L /* CHR += "pval" */
1778 #define TR1_XXX1            0x00000040L /* (reserved) */
1779 #define TR1_XXX2            0x00000080L /* (reserved) */
1780 #define TR1_STEALTH         0x00000100L /* Stealth += "pval" */
1781 #define TR1_SEARCH          0x00000200L /* Search += "pval" */
1782 #define TR1_INFRA           0x00000400L /* Infra += "pval" */
1783 #define TR1_TUNNEL          0x00000800L /* Tunnel += "pval" */
1784 #define TR1_SPEED           0x00001000L /* Speed += "pval" */
1785 #define TR1_BLOWS           0x00002000L /* Blows += "pval" */
1786 #define TR1_SHOTS           0x00004000L /* Shots += "pval" */
1787 #define TR1_MIGHT           0x00008000L /* Might += "pval" */
1788 #define TR1_SLAY_ANIMAL     0x00010000L /* Weapon slays animals */
1789 #define TR1_SLAY_EVIL       0x00020000L /* Weapon slays evil */
1790 #define TR1_SLAY_UNDEAD     0x00040000L /* Weapon slays undead */
1791 #define TR1_SLAY_DEMON      0x00080000L /* Weapon slays demon */
1792 #define TR1_SLAY_ORC        0x00100000L /* Weapon slays orc */
1793 #define TR1_SLAY_TROLL      0x00200000L /* Weapon slays troll */
1794 #define TR1_SLAY_GIANT      0x00400000L /* Weapon slays giant */
1795 #define TR1_SLAY_DRAGON     0x00800000L /* Weapon slays dragon */
1796 #define TR1_KILL_DRAGON     0x01000000L /* Weapon kills dragon */
1797 #define TR1_KILL_DEMON      0x02000000L /* Weapon kills demon */
1798 #define TR1_KILL_UNDEAD     0x04000000L /* Weapon "kills" undead */
1799 #define TR1_BRAND_POIS      0x08000000L /* Weapon has poison brand */
1800 #define TR1_BRAND_ACID      0x10000000L /* Weapon has acid brand */
1801 #define TR1_BRAND_ELEC      0x20000000L /* Weapon has elec brand */
1802 #define TR1_BRAND_FIRE      0x40000000L /* Weapon has fire brand */
1803 #define TR1_BRAND_COLD      0x80000000L /* Weapon has cold brand */
1804
1805 #define TR2_SUST_STR        0x00000001L /* Sustain STR */
1806 #define TR2_SUST_INT        0x00000002L /* Sustain INT */
1807 #define TR2_SUST_WIS        0x00000004L /* Sustain WIS */
1808 #define TR2_SUST_DEX        0x00000008L /* Sustain DEX */
1809 #define TR2_SUST_CON        0x00000010L /* Sustain CON */
1810 #define TR2_SUST_CHR        0x00000020L /* Sustain CHR */
1811 #define TR2_XXX1            0x00000040L /* (reserved) */
1812 #define TR2_XXX2            0x00000080L /* (reserved) */
1813 #define TR2_XXX3            0x00000100L /* (reserved) */
1814 #define TR2_XXX4            0x00000200L /* (reserved) */
1815 #define TR2_XXX5            0x00000400L /* (reserved) */
1816 #define TR2_XXX6            0x00000800L /* (reserved) */
1817 #define TR2_IM_ACID         0x00001000L /* Immunity to acid */
1818 #define TR2_IM_ELEC         0x00002000L /* Immunity to elec */
1819 #define TR2_IM_FIRE         0x00004000L /* Immunity to fire */
1820 #define TR2_IM_COLD         0x00008000L /* Immunity to cold */
1821 #define TR2_RES_ACID        0x00010000L /* Resist acid */
1822 #define TR2_RES_ELEC        0x00020000L /* Resist elec */
1823 #define TR2_RES_FIRE        0x00040000L /* Resist fire */
1824 #define TR2_RES_COLD        0x00080000L /* Resist cold */
1825 #define TR2_RES_POIS        0x00100000L /* Resist poison */
1826 #define TR2_RES_FEAR        0x00200000L /* Resist fear */
1827 #define TR2_RES_LITE        0x00400000L /* Resist lite */
1828 #define TR2_RES_DARK        0x00800000L /* Resist dark */
1829 #define TR2_RES_BLIND       0x01000000L /* Resist blind */
1830 #define TR2_RES_CONFU       0x02000000L /* Resist confusion */
1831 #define TR2_RES_SOUND       0x04000000L /* Resist sound */
1832 #define TR2_RES_SHARD       0x08000000L /* Resist shards */
1833 #define TR2_RES_NEXUS       0x10000000L /* Resist nexus */
1834 #define TR2_RES_NETHR       0x20000000L /* Resist nether */
1835 #define TR2_RES_CHAOS       0x40000000L /* Resist chaos */
1836 #define TR2_RES_DISEN       0x80000000L /* Resist disenchant */
1837
1838 #define TR3_SLOW_DIGEST     0x00000001L /* Slow digest */
1839 #define TR3_FEATHER         0x00000002L /* Feather Falling */
1840 #define TR3_LITE            0x00000004L /* Perma-Lite */
1841 #define TR3_REGEN           0x00000008L /* Regeneration */
1842 #define TR3_TELEPATHY       0x00000010L /* Telepathy */
1843 #define TR3_SEE_INVIS       0x00000020L /* See Invis */
1844 #define TR3_FREE_ACT        0x00000040L /* Free action */
1845 #define TR3_HOLD_LIFE       0x00000080L /* Hold life */
1846 #define TR3_NO_FUEL         0x00000100L /* Light source uses no fuel */
1847 #define TR3_XXX2            0x00000200L
1848 #define TR3_XXX3            0x00000400L
1849 #define TR3_XXX4            0x00000800L
1850 #define TR3_IMPACT          0x00001000L /* Earthquake blows */
1851 #define TR3_TELEPORT        0x00002000L /* Random teleportation */
1852 #define TR3_AGGRAVATE       0x00004000L /* Aggravate monsters */
1853 #define TR3_DRAIN_EXP       0x00008000L /* Experience drain */
1854 #define TR3_IGNORE_ACID     0x00010000L /* Item ignores Acid Damage */
1855 #define TR3_IGNORE_ELEC     0x00020000L /* Item ignores Elec Damage */
1856 #define TR3_IGNORE_FIRE     0x00040000L /* Item ignores Fire Damage */
1857 #define TR3_IGNORE_COLD     0x00080000L /* Item ignores Cold Damage */
1858 #define TR3_XXX5            0x00100000L /* (reserved) */
1859 #define TR3_XXX6            0x00200000L /* (reserved) */
1860 #define TR3_BLESSED         0x00400000L /* Item has been blessed */
1861 #define TR3_ACTIVATE        0x00800000L /* Item can be activated */
1862 #define TR3_INSTA_ART       0x01000000L /* Item makes an artifact */
1863 #define TR3_EASY_KNOW       0x02000000L /* Item is known if aware */
1864 #define TR3_HIDE_TYPE       0x04000000L /* Item hides description */
1865 #define TR3_SHOW_MODS       0x08000000L /* Item shows Tohit/Todam */
1866 #define TR3_XXX7            0x10000000L /* (reserved) */
1867 #define TR3_LIGHT_CURSE     0x20000000L /* Item has Light Curse */
1868 #define TR3_HEAVY_CURSE     0x40000000L /* Item has Heavy Curse */
1869 #define TR3_PERMA_CURSE     0x80000000L /* Item has Perma Curse */
1870
1871
1872 /*
1873  * Hack -- flag set 1 -- mask for "pval-dependant" flags.
1874  * Note that all "pval" dependant flags must be in "flags1".
1875  */
1876 #define TR1_PVAL_MASK \
1877         (TR1_STR | TR1_INT | TR1_WIS | TR1_DEX | \
1878          TR1_CON | TR1_CHR | TR1_XXX1 | TR1_XXX2 | \
1879          TR1_STEALTH | TR1_SEARCH | TR1_INFRA | TR1_TUNNEL | \
1880          TR1_SPEED | TR1_BLOWS | TR1_SHOTS | TR1_MIGHT)
1881
1882 /*
1883  * Flag set 3 -- mask for "ignore element" flags.
1884  */
1885 #define TR3_IGNORE_MASK \
1886         (TR3_IGNORE_ACID | TR3_IGNORE_ELEC | TR3_IGNORE_FIRE | \
1887          TR3_IGNORE_COLD )
1888
1889
1890 /*
1891  * Hack -- special "xtra" object flag info (type)
1892  */
1893 #define OBJECT_XTRA_TYPE_SUSTAIN        1
1894 #define OBJECT_XTRA_TYPE_RESIST         2
1895 #define OBJECT_XTRA_TYPE_POWER          3
1896
1897 /*
1898  * Hack -- special "xtra" object flag info (what flag set)
1899  */
1900 #define OBJECT_XTRA_WHAT_SUSTAIN        2
1901 #define OBJECT_XTRA_WHAT_RESIST         2
1902 #define OBJECT_XTRA_WHAT_POWER          3
1903
1904 /*
1905  * Hack -- special "xtra" object flag info (base flag value)
1906  */
1907 #define OBJECT_XTRA_BASE_SUSTAIN        TR2_SUST_STR
1908 #define OBJECT_XTRA_BASE_RESIST         TR2_RES_POIS
1909 #define OBJECT_XTRA_BASE_POWER          TR3_SLOW_DIGEST
1910
1911 /*
1912  * Hack -- special "xtra" object flag info (number of flags)
1913  */
1914 #define OBJECT_XTRA_SIZE_SUSTAIN        6
1915 #define OBJECT_XTRA_SIZE_RESIST         12
1916 #define OBJECT_XTRA_SIZE_POWER          8
1917
1918
1919 /*** Class flags ***/
1920
1921 #define CF_EXTRA_SHOT           0x00000001L     /* Extra shots */
1922 #define CF_BRAVERY_30           0x00000002L     /* Gains resist fear at plev 30 */
1923 #define CF_BLESS_WEAPON         0x00000004L     /* Requires blessed/hafted weapons */
1924 #define CF_CUMBER_GLOVE         0x00000008L     /* Gloves disturb spellcasting */
1925 #define CF_ZERO_FAIL            0x00000010L /* Fail rates can reach 0% */
1926 #define CF_BEAM                         0x00000020L /* Higher chance of spells beaming */
1927 #define CF_CHOOSE_SPELLS        0x00000040L     /* Allow choice of spells */
1928 #define CF_PSEUDO_ID_HEAVY      0x00000080L /* Allow heavy pseudo-id */
1929 #define CF_PSEUDO_ID_IMPROV     0x00000100L /* Pseudo-id improves quicker with player-level */
1930 #define CF_XXX10                        0x00000200L
1931 #define CF_XXX11                        0x00000400L
1932 #define CF_XXX12                        0x00000800L
1933 #define CF_XXX13                        0x00001000L
1934 #define CF_XXX14                        0x00002000L
1935 #define CF_XXX15                        0x00004000L
1936 #define CF_XXX16                        0x00008000L
1937 #define CF_XXX17                        0x00010000L
1938 #define CF_XXX18                        0x00020000L
1939 #define CF_XXX19                        0x00040000L
1940 #define CF_XXX20                        0x00080000L
1941 #define CF_XXX21                        0x00100000L
1942 #define CF_XXX22                        0x00200000L
1943 #define CF_XXX23                        0x00400000L
1944 #define CF_XXX24                        0x00800000L
1945 #define CF_XXX25                        0x01000000L
1946 #define CF_XXX26                        0x02000000L
1947 #define CF_XXX27                        0x04000000L
1948 #define CF_XXX28                        0x08000000L
1949 #define CF_XXX29                        0x10000000L
1950 #define CF_XXX30                        0x20000000L
1951 #define CF_XXX31                        0x40000000L
1952 #define CF_XXX32                        0x80000000L
1953
1954
1955 /*** Monster flags ***/
1956
1957
1958 /*
1959  * Special Monster Flags (all temporary)
1960  */
1961 #define MFLAG_VIEW      0x01    /* Monster is in line of sight */
1962 /* xxx */
1963 #define MFLAG_NICE      0x20    /* Monster is still being nice */
1964 #define MFLAG_SHOW      0x40    /* Monster is recently memorized */
1965 #define MFLAG_MARK      0x80    /* Monster is currently memorized */
1966
1967
1968 /*
1969  * New monster race bit flags
1970  */
1971 #define RF1_UNIQUE                      0x00000001      /* Unique Monster */
1972 #define RF1_QUESTOR                     0x00000002      /* Quest Monster */
1973 #define RF1_MALE                        0x00000004      /* Male gender */
1974 #define RF1_FEMALE                      0x00000008      /* Female gender */
1975 #define RF1_CHAR_CLEAR          0x00000010      /* Absorbs symbol */
1976 #define RF1_CHAR_MULTI          0x00000020      /* Changes symbol */
1977 #define RF1_ATTR_CLEAR          0x00000040      /* Absorbs color */
1978 #define RF1_ATTR_MULTI          0x00000080      /* Changes color */
1979 #define RF1_FORCE_DEPTH         0x00000100      /* Start at "correct" depth */
1980 #define RF1_FORCE_MAXHP         0x00000200      /* Start with max hitpoints */
1981 #define RF1_FORCE_SLEEP         0x00000400      /* Start out sleeping */
1982 #define RF1_FORCE_EXTRA         0x00000800      /* Start out something */
1983 #define RF1_FRIEND                      0x00001000      /* Arrive with a friend */
1984 #define RF1_FRIENDS                     0x00002000      /* Arrive with some friends */
1985 #define RF1_ESCORT                      0x00004000      /* Arrive with an escort */
1986 #define RF1_ESCORTS                     0x00008000      /* Arrive with some escorts */
1987 #define RF1_NEVER_BLOW          0x00010000      /* Never make physical blow */
1988 #define RF1_NEVER_MOVE          0x00020000      /* Never make physical move */
1989 #define RF1_RAND_25                     0x00040000      /* Moves randomly (25%) */
1990 #define RF1_RAND_50                     0x00080000      /* Moves randomly (50%) */
1991 #define RF1_ONLY_GOLD           0x00100000      /* Drop only gold */
1992 #define RF1_ONLY_ITEM           0x00200000      /* Drop only items */
1993 #define RF1_DROP_60                     0x00400000      /* Drop an item/gold (60%) */
1994 #define RF1_DROP_90                     0x00800000      /* Drop an item/gold (90%) */
1995 #define RF1_DROP_1D2            0x01000000      /* Drop 1d2 items/gold */
1996 #define RF1_DROP_2D2            0x02000000      /* Drop 2d2 items/gold */
1997 #define RF1_DROP_3D2            0x04000000      /* Drop 3d2 items/gold */
1998 #define RF1_DROP_4D2            0x08000000      /* Drop 4d2 items/gold */
1999 #define RF1_DROP_GOOD           0x10000000      /* Drop good items */
2000 #define RF1_DROP_GREAT          0x20000000      /* Drop great items */
2001 #define RF1_DROP_USEFUL         0x40000000      /* Drop "useful" items */
2002 #define RF1_DROP_CHOSEN         0x80000000      /* Drop "chosen" items */
2003
2004 /*
2005  * New monster race bit flags
2006  */
2007 #define RF2_STUPID                      0x00000001      /* Monster is stupid */
2008 #define RF2_SMART                       0x00000002      /* Monster is smart */
2009 #define RF2_XXX1                        0x00000004      /* (?) */
2010 #define RF2_XXX2                        0x00000008      /* (?) */
2011 #define RF2_INVISIBLE           0x00000010      /* Monster avoids vision */
2012 #define RF2_COLD_BLOOD          0x00000020      /* Monster avoids infra */
2013 #define RF2_EMPTY_MIND          0x00000040      /* Monster avoids telepathy */
2014 #define RF2_WEIRD_MIND          0x00000080      /* Monster avoids telepathy? */
2015 #define RF2_MULTIPLY            0x00000100      /* Monster reproduces */
2016 #define RF2_REGENERATE          0x00000200      /* Monster regenerates */
2017 #define RF2_XXX3                        0x00000400      /* (?) */
2018 #define RF2_XXX4                        0x00000800      /* (?) */
2019 #define RF2_POWERFUL            0x00001000      /* Monster has strong breath */
2020 #define RF2_XXX5                        0x00002000      /* (?) */
2021 #define RF2_XXX7                        0x00004000      /* (?) */
2022 #define RF2_XXX6                        0x00008000      /* (?) */
2023 #define RF2_OPEN_DOOR           0x00010000      /* Monster can open doors */
2024 #define RF2_BASH_DOOR           0x00020000      /* Monster can bash doors */
2025 #define RF2_PASS_WALL           0x00040000      /* Monster can pass walls */
2026 #define RF2_KILL_WALL           0x00080000      /* Monster can destroy walls */
2027 #define RF2_MOVE_BODY           0x00100000      /* Monster can move monsters */
2028 #define RF2_KILL_BODY           0x00200000      /* Monster can kill monsters */
2029 #define RF2_TAKE_ITEM           0x00400000      /* Monster can pick up items */
2030 #define RF2_KILL_ITEM           0x00800000      /* Monster can crush items */
2031 #define RF2_BRAIN_1                     0x01000000
2032 #define RF2_BRAIN_2                     0x02000000
2033 #define RF2_BRAIN_3                     0x04000000
2034 #define RF2_BRAIN_4                     0x08000000
2035 #define RF2_BRAIN_5                     0x10000000
2036 #define RF2_BRAIN_6                     0x20000000
2037 #define RF2_BRAIN_7                     0x40000000
2038 #define RF2_BRAIN_8                     0x80000000
2039
2040 /*
2041  * New monster race bit flags
2042  */
2043 #define RF3_ORC                         0x00000001      /* Orc */
2044 #define RF3_TROLL                       0x00000002      /* Troll */
2045 #define RF3_GIANT                       0x00000004      /* Giant */
2046 #define RF3_DRAGON                      0x00000008      /* Dragon */
2047 #define RF3_DEMON                       0x00000010      /* Demon */
2048 #define RF3_UNDEAD                      0x00000020      /* Undead */
2049 #define RF3_EVIL                        0x00000040      /* Evil */
2050 #define RF3_ANIMAL                      0x00000080      /* Animal */
2051 #define RF3_XXX1                        0x00000100      /* (?) */
2052 #define RF3_XXX2                        0x00000200      /* (?) */
2053 #define RF3_XXX3                        0x00000400      /* Non-Vocal (?) */
2054 #define RF3_XXX4                        0x00000800      /* Non-Living (?) */
2055 #define RF3_HURT_LITE           0x00001000      /* Hurt by lite */
2056 #define RF3_HURT_ROCK           0x00002000      /* Hurt by rock remover */
2057 #define RF3_HURT_FIRE           0x00004000      /* Hurt badly by fire */
2058 #define RF3_HURT_COLD           0x00008000      /* Hurt badly by cold */
2059 #define RF3_IM_ACID                     0x00010000      /* Resist acid a lot */
2060 #define RF3_IM_ELEC                     0x00020000      /* Resist elec a lot */
2061 #define RF3_IM_FIRE                     0x00040000      /* Resist fire a lot */
2062 #define RF3_IM_COLD                     0x00080000      /* Resist cold a lot */
2063 #define RF3_IM_POIS                     0x00100000      /* Resist poison a lot */
2064 #define RF3_XXX5                        0x00200000      /* Immune to (?) */
2065 #define RF3_RES_NETH            0x00400000      /* Resist nether a lot */
2066 #define RF3_IM_WATER            0x00800000      /* Immune to water */
2067 #define RF3_RES_PLAS            0x01000000      /* Resist plasma */
2068 #define RF3_RES_NEXUS           0x02000000      /* Resist nexus */
2069 #define RF3_RES_DISE            0x04000000      /* Resist disenchantment */
2070 #define RF3_XXX6                        0x08000000      /* Resist (?) */
2071 #define RF3_NO_FEAR                     0x10000000      /* Cannot be scared */
2072 #define RF3_NO_STUN                     0x20000000      /* Cannot be stunned */
2073 #define RF3_NO_CONF                     0x40000000      /* Cannot be confused */
2074 #define RF3_NO_SLEEP            0x80000000      /* Cannot be slept */
2075
2076 /*
2077  * New monster race bit flags
2078  */
2079 #define RF4_SHRIEK          0x00000001 /* Shriek for help */
2080 #define RF4_XXX2            0x00000002 /* (?) */
2081 #define RF4_XXX3            0x00000004 /* (?) */
2082 #define RF4_XXX4            0x00000008 /* (?) */
2083 #define RF4_ARROW_1         0x00000010 /* Fire an arrow (light) */
2084 #define RF4_ARROW_2         0x00000020 /* Fire an arrow (heavy) */
2085 #define RF4_ARROW_3         0x00000040 /* Fire missiles (light) */
2086 #define RF4_ARROW_4         0x00000080 /* Fire missiles (heavy) */
2087 #define RF4_BR_ACID         0x00000100 /* Breathe Acid */
2088 #define RF4_BR_ELEC         0x00000200 /* Breathe Elec */
2089 #define RF4_BR_FIRE         0x00000400 /* Breathe Fire */
2090 #define RF4_BR_COLD         0x00000800 /* Breathe Cold */
2091 #define RF4_BR_POIS         0x00001000 /* Breathe Poison */
2092 #define RF4_BR_NETH         0x00002000 /* Breathe Nether */
2093 #define RF4_BR_LITE         0x00004000 /* Breathe Lite */
2094 #define RF4_BR_DARK         0x00008000 /* Breathe Dark */
2095 #define RF4_BR_CONF         0x00010000 /* Breathe Confusion */
2096 #define RF4_BR_SOUN         0x00020000 /* Breathe Sound */
2097 #define RF4_BR_CHAO         0x00040000 /* Breathe Chaos */
2098 #define RF4_BR_DISE         0x00080000 /* Breathe Disenchant */
2099 #define RF4_BR_NEXU         0x00100000 /* Breathe Nexus */
2100 #define RF4_BR_TIME         0x00200000 /* Breathe Time */
2101 #define RF4_BR_INER         0x00400000 /* Breathe Inertia */
2102 #define RF4_BR_GRAV         0x00800000 /* Breathe Gravity */
2103 #define RF4_BR_SHAR         0x01000000 /* Breathe Shards */
2104 #define RF4_BR_PLAS         0x02000000 /* Breathe Plasma */
2105 #define RF4_BR_WALL         0x04000000 /* Breathe Force */
2106 #define RF4_BR_MANA         0x08000000 /* Breathe Mana */
2107 #define RF4_XXX5            0x10000000
2108 #define RF4_XXX6            0x20000000
2109 #define RF4_XXX7            0x40000000
2110 #define RF4_BOULDER         0x80000000 /* Throw a boulder */
2111
2112 /*
2113  * New monster race bit flags
2114  */
2115 #define RF5_BA_ACID                     0x00000001      /* Acid Ball */
2116 #define RF5_BA_ELEC                     0x00000002      /* Elec Ball */
2117 #define RF5_BA_FIRE                     0x00000004      /* Fire Ball */
2118 #define RF5_BA_COLD                     0x00000008      /* Cold Ball */
2119 #define RF5_BA_POIS                     0x00000010      /* Poison Ball */
2120 #define RF5_BA_NETH                     0x00000020      /* Nether Ball */
2121 #define RF5_BA_WATE                     0x00000040      /* Water Ball */
2122 #define RF5_BA_MANA                     0x00000080      /* Mana Storm */
2123 #define RF5_BA_DARK                     0x00000100      /* Darkness Storm */
2124 #define RF5_DRAIN_MANA          0x00000200      /* Drain Mana */
2125 #define RF5_MIND_BLAST          0x00000400      /* Blast Mind */
2126 #define RF5_BRAIN_SMASH         0x00000800      /* Smash Brain */
2127 #define RF5_CAUSE_1                     0x00001000      /* Cause Light Wound */
2128 #define RF5_CAUSE_2                     0x00002000      /* Cause Serious Wound */
2129 #define RF5_CAUSE_3                     0x00004000      /* Cause Critical Wound */
2130 #define RF5_CAUSE_4                     0x00008000      /* Cause Mortal Wound */
2131 #define RF5_BO_ACID                     0x00010000      /* Acid Bolt */
2132 #define RF5_BO_ELEC                     0x00020000      /* Elec Bolt (unused) */
2133 #define RF5_BO_FIRE                     0x00040000      /* Fire Bolt */
2134 #define RF5_BO_COLD                     0x00080000      /* Cold Bolt */
2135 #define RF5_BO_POIS                     0x00100000      /* Poison Bolt (unused) */
2136 #define RF5_BO_NETH                     0x00200000      /* Nether Bolt */
2137 #define RF5_BO_WATE                     0x00400000      /* Water Bolt */
2138 #define RF5_BO_MANA                     0x00800000      /* Mana Bolt */
2139 #define RF5_BO_PLAS                     0x01000000      /* Plasma Bolt */
2140 #define RF5_BO_ICEE                     0x02000000      /* Ice Bolt */
2141 #define RF5_MISSILE                     0x04000000      /* Magic Missile */
2142 #define RF5_SCARE                       0x08000000      /* Frighten Player */
2143 #define RF5_BLIND                       0x10000000      /* Blind Player */
2144 #define RF5_CONF                        0x20000000      /* Confuse Player */
2145 #define RF5_SLOW                        0x40000000      /* Slow Player */
2146 #define RF5_HOLD                        0x80000000      /* Paralyze Player */
2147
2148 /*
2149  * New monster race bit flags
2150  */
2151 #define RF6_HASTE           0x00000001 /* Speed self */
2152 #define RF6_XXX1            0x00000002 /* Speed a lot (?) */
2153 #define RF6_HEAL            0x00000004 /* Heal self */
2154 #define RF6_XXX2            0x00000008 /* Heal a lot (?) */
2155 #define RF6_BLINK           0x00000010 /* Teleport Short */
2156 #define RF6_TPORT           0x00000020 /* Teleport Long */
2157 #define RF6_XXX3            0x00000040 /* Move to Player (?) */
2158 #define RF6_XXX4            0x00000080 /* Move to Monster (?) */
2159 #define RF6_TELE_TO         0x00000100 /* Move player to monster */
2160 #define RF6_TELE_AWAY       0x00000200 /* Move player far away */
2161 #define RF6_TELE_LEVEL      0x00000400 /* Move player vertically */
2162 #define RF6_XXX5            0x00000800 /* Move player (?) */
2163 #define RF6_DARKNESS        0x00001000 /* Create Darkness */
2164 #define RF6_TRAPS           0x00002000 /* Create Traps */
2165 #define RF6_FORGET          0x00004000 /* Cause amnesia */
2166 #define RF6_XXX6            0x00008000 /* (?) */
2167 #define RF6_S_KIN           0x00010000 /* Summon Kin */
2168 #define RF6_S_HI_DEMON      0x00020000 /* Summon Greater Demons */
2169 #define RF6_S_MONSTER       0x00040000 /* Summon Monster */
2170 #define RF6_S_MONSTERS      0x00080000 /* Summon Monsters */
2171 #define RF6_S_ANIMAL        0x00100000 /* Summon Animals */
2172 #define RF6_S_SPIDER        0x00200000 /* Summon Spiders */
2173 #define RF6_S_HOUND         0x00400000 /* Summon Hounds */
2174 #define RF6_S_HYDRA         0x00800000 /* Summon Hydras */
2175 #define RF6_S_ANGEL         0x01000000 /* Summon Angel */
2176 #define RF6_S_DEMON         0x02000000 /* Summon Demon */
2177 #define RF6_S_UNDEAD        0x04000000 /* Summon Undead */
2178 #define RF6_S_DRAGON        0x08000000 /* Summon Dragon */
2179 #define RF6_S_HI_UNDEAD     0x10000000 /* Summon Greater Undead */
2180 #define RF6_S_HI_DRAGON     0x20000000 /* Summon Ancient Dragon */
2181 #define RF6_S_WRAITH        0x40000000 /* Summon Unique Wraith */
2182 #define RF6_S_UNIQUE        0x80000000 /* Summon Unique Monster */
2183
2184
2185 /*
2186  * Some flags are obvious
2187  */
2188 #define RF1_OBVIOUS_MASK \
2189         (RF1_UNIQUE | RF1_QUESTOR | RF1_MALE | RF1_FEMALE | \
2190          RF1_FRIEND | RF1_FRIENDS | RF1_ESCORT | RF1_ESCORTS)
2191
2192 /*
2193  * "race" flags
2194  */
2195 #define RF3_RACE_MASK \
2196         (RF3_ORC | RF3_TROLL | RF3_GIANT | RF3_DRAGON | \
2197          RF3_DEMON | RF3_UNDEAD | RF3_EVIL | RF3_ANIMAL)
2198
2199
2200 /*
2201  * Hack -- Bit masks to control what spells are considered
2202  */
2203
2204 /*
2205  * Choose "intelligent" spells when desperate
2206  */
2207
2208 #define RF4_INT_MASK \
2209         (0L)
2210
2211 #define RF5_INT_MASK \
2212         (RF5_HOLD | RF5_SLOW | RF5_CONF | RF5_BLIND | RF5_SCARE)
2213
2214 #define RF6_INT_MASK \
2215         (RF6_BLINK |  RF6_TPORT | RF6_TELE_LEVEL | RF6_TELE_AWAY | \
2216          RF6_HEAL | RF6_HASTE | RF6_TRAPS | \
2217          RF6_S_ANIMAL | RF6_S_KIN | RF6_S_MONSTER | RF6_S_MONSTERS | \
2218          RF6_S_SPIDER | RF6_S_HOUND | RF6_S_HYDRA | \
2219          RF6_S_ANGEL | RF6_S_DRAGON | RF6_S_UNDEAD | RF6_S_DEMON | \
2220          RF6_S_HI_DRAGON | RF6_S_HI_UNDEAD | RF6_S_HI_DEMON | \
2221          RF6_S_WRAITH | RF6_S_UNIQUE)
2222
2223
2224 /*
2225  * "Bolt" spells that may hurt fellow monsters
2226  */
2227 #define RF4_BOLT_MASK \
2228         (RF4_ARROW_1 | RF4_ARROW_2 | RF4_ARROW_3 | RF4_ARROW_4 | \
2229          RF4_BOULDER)
2230
2231 #define RF5_BOLT_MASK \
2232         (RF5_BO_ACID | RF5_BO_ELEC | RF5_BO_FIRE | RF5_BO_COLD | \
2233          RF5_BO_POIS | RF5_BO_NETH | RF5_BO_WATE | RF5_BO_MANA | \
2234          RF5_BO_PLAS | RF5_BO_ICEE | RF5_MISSILE)
2235
2236 #define RF6_BOLT_MASK \
2237         (0L)
2238
2239 /*
2240  * Spells that allow the caster to escape
2241  */
2242 #define RF4_ESCAPE_MASK \
2243         (0L)
2244
2245 #define RF5_ESCAPE_MASK \
2246         (0L)
2247
2248 #define RF6_ESCAPE_MASK \
2249         (RF6_BLINK | RF6_TPORT | RF6_TELE_AWAY | RF6_TELE_LEVEL)
2250
2251
2252 /*
2253  * Spells that hurt the player directly
2254  */
2255 #define RF4_ATTACK_MASK \
2256         (RF4_ARROW_1 | RF4_ARROW_2 | RF4_ARROW_3 | RF4_ARROW_4 | RF4_BOULDER | \
2257          RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS | \
2258          RF4_BR_NETH | RF4_BR_LITE | RF4_BR_DARK | RF4_BR_CONF | RF4_BR_SOUN | \
2259          RF4_BR_CHAO | RF4_BR_DISE | RF4_BR_NEXU | RF4_BR_TIME | RF4_BR_INER | \
2260          RF4_BR_GRAV | RF4_BR_SHAR | RF4_BR_PLAS | RF4_BR_WALL | RF4_BR_MANA)
2261
2262 #define RF5_ATTACK_MASK \
2263         (RF5_BA_ACID | RF5_BA_ELEC | RF5_BA_FIRE | RF5_BA_COLD | RF5_BA_POIS | \
2264          RF5_BA_NETH | RF5_BA_WATE | RF5_BA_MANA | RF5_BA_DARK | \
2265          RF5_MIND_BLAST | RF5_BRAIN_SMASH | RF5_CAUSE_1 | RF5_CAUSE_2 | \
2266          RF5_CAUSE_3 | RF5_CAUSE_4 | RF5_BO_ACID | RF5_BO_ELEC | RF5_BO_FIRE | \
2267          RF5_BO_COLD | RF5_BO_POIS | RF5_BO_NETH | RF5_BO_WATE | RF5_BO_MANA | \
2268          RF5_BO_PLAS | RF5_BO_ICEE | RF5_MISSILE)
2269
2270 #define RF6_ATTACK_MASK \
2271         (0L)
2272
2273
2274 /*
2275  * Summoning spells
2276  */
2277 #define RF4_SUMMON_MASK \
2278         (0L)
2279
2280 #define RF5_SUMMON_MASK \
2281         (0L)
2282
2283 #define RF6_SUMMON_MASK \
2284         (RF6_S_KIN | RF6_S_MONSTER | RF6_S_MONSTERS | RF6_S_ANIMAL | \
2285          RF6_S_SPIDER | RF6_S_HOUND | RF6_S_HYDRA | RF6_S_ANGEL | \
2286          RF6_S_DEMON | RF6_S_UNDEAD | RF6_S_DRAGON | RF6_S_HI_UNDEAD | \
2287          RF6_S_HI_DEMON | RF6_S_HI_DRAGON | RF6_S_WRAITH | RF6_S_UNIQUE)
2288
2289
2290 /*
2291  * Spells that improve the caster's tactical position
2292  */
2293 #define RF4_TACTIC_MASK \
2294         (0L)
2295
2296 #define RF5_TACTIC_MASK \
2297         (0L)
2298
2299 #define RF6_TACTIC_MASK \
2300         (RF6_BLINK)
2301
2302
2303 /*
2304  * Annoying spells
2305  */
2306 #define RF4_ANNOY_MASK \
2307         (RF4_SHRIEK)
2308
2309 #define RF5_ANNOY_MASK \
2310         (RF5_DRAIN_MANA | RF5_MIND_BLAST | RF5_BRAIN_SMASH | RF5_SCARE | \
2311          RF5_BLIND | RF5_CONF | RF5_SLOW | RF5_HOLD)
2312
2313 #define RF6_ANNOY_MASK \
2314         (RF6_TELE_TO | RF6_DARKNESS | RF6_TRAPS | RF6_FORGET)
2315
2316
2317 /*
2318  * Spells that increase the caster's relative speed
2319  */
2320 #define RF4_HASTE_MASK \
2321         (0L)
2322
2323 #define RF5_HASTE_MASK \
2324         (RF5_SLOW | RF5_HOLD)
2325
2326 #define RF6_HASTE_MASK \
2327         (RF6_HASTE)
2328
2329
2330 /*
2331  * Healing spells
2332  */
2333 #define RF4_HEAL_MASK \
2334         (0L)
2335
2336 #define RF5_HEAL_MASK \
2337         (0L)
2338
2339 #define RF6_HEAL_MASK \
2340         (RF6_HEAL)
2341
2342
2343 /*
2344  * Innate spell-like effects
2345  */
2346 #define RF4_INNATE_MASK \
2347         (RF4_SHRIEK | RF4_ARROW_1 | RF4_ARROW_2 | RF4_ARROW_3 | RF4_ARROW_4 | \
2348          RF4_BR_ACID | RF4_BR_ELEC | RF4_BR_FIRE | RF4_BR_COLD | RF4_BR_POIS | \
2349          RF4_BR_NETH | RF4_BR_LITE | RF4_BR_DARK | RF4_BR_CONF | RF4_BR_SOUN | \
2350          RF4_BR_CHAO | RF4_BR_DISE | RF4_BR_NEXU | RF4_BR_TIME | RF4_BR_INER | \
2351          RF4_BR_GRAV | RF4_BR_SHAR | RF4_BR_PLAS | RF4_BR_WALL | RF4_BR_MANA | \
2352          RF4_BOULDER)
2353
2354 #define RF5_INNATE_MASK \
2355         (0L)
2356
2357 #define RF6_INNATE_MASK \
2358         (0L)
2359
2360
2361
2362 /*** Option Definitions ***/
2363
2364 /*
2365  * Option indexes (offsets)
2366  *
2367  * These values are hard-coded by savefiles (and various pieces of code).
2368  */
2369 #define OPT_BIRTH                                       128
2370 #define OPT_CHEAT                                       160
2371 #define OPT_ADULT                                       192
2372 #define OPT_SCORE                                       224
2373 #define OPT_NONE                                        255
2374 #define OPT_MAX                                         256
2375
2376
2377 /*
2378  * Option indexes (normal)
2379  *
2380  * These values are hard-coded by savefiles.
2381  */
2382 #define OPT_rogue_like_commands         0
2383 #define OPT_quick_messages                      1
2384 #define OPT_use_sound               2
2385 #define OPT_query_floor                         3
2386 #define OPT_use_old_target                      4
2387 #define OPT_always_pickup                       5
2388 #define OPT_pickup_inven                        6
2389 #define OPT_depth_in_feet                       7
2390
2391 #define OPT_show_labels                         10
2392
2393 #define OPT_ring_bell                           14
2394 #define OPT_show_flavors                        15
2395
2396 #define OPT_disturb_move                        20
2397 #define OPT_disturb_near                        21
2398 #define OPT_disturb_panel                       22
2399 #define OPT_disturb_state                       23
2400 #define OPT_disturb_minor                       24
2401
2402 #define OPT_view_perma_grids            38
2403 #define OPT_view_torch_grids            39
2404
2405 #define OPT_flush_failure                       52
2406 #define OPT_flush_disturb                       53
2407
2408 #define OPT_hilite_player                       59
2409 #define OPT_view_yellow_lite            60
2410 #define OPT_view_bright_lite            61
2411 #define OPT_view_granite_lite           62
2412 #define OPT_view_special_lite           63
2413 #define OPT_easy_open                           64
2414 #define OPT_easy_alter                          65
2415 #define OPT_show_piles                          67
2416 #define OPT_center_player                       68
2417
2418 #define OPT_auto_more                           71
2419 #define OPT_hp_changes_color            74
2420
2421
2422 #define OPT_birth_maximize          (OPT_BIRTH+0)
2423 #define OPT_birth_randarts          (OPT_BIRTH+1)
2424 #define OPT_birth_autoscum          (OPT_BIRTH+2)
2425 #define OPT_birth_ironman           (OPT_BIRTH+3)
2426 #define OPT_birth_no_stores         (OPT_BIRTH+4)
2427 #define OPT_birth_no_artifacts      (OPT_BIRTH+5)
2428 #define OPT_birth_no_stacking       (OPT_BIRTH+6)
2429 #define OPT_birth_no_preserve       (OPT_BIRTH+7)
2430 #define OPT_birth_no_stairs                     (OPT_BIRTH+8)
2431 /* leave four spaces for future */
2432 #define OPT_birth_ai_sound                      (OPT_BIRTH+13)
2433 #define OPT_birth_ai_smell                      (OPT_BIRTH+14)
2434 #define OPT_birth_ai_packs                      (OPT_BIRTH+15)
2435 #define OPT_birth_ai_learn                      (OPT_BIRTH+16)
2436 #define OPT_birth_ai_cheat                      (OPT_BIRTH+17)
2437 #define OPT_birth_ai_smart                      (OPT_BIRTH+18)
2438
2439 #define OPT_cheat_peek                          (OPT_CHEAT+0)
2440 #define OPT_cheat_hear                          (OPT_CHEAT+1)
2441 #define OPT_cheat_room                          (OPT_CHEAT+2)
2442 #define OPT_cheat_xtra                          (OPT_CHEAT+3)
2443 #define OPT_cheat_know                          (OPT_CHEAT+4)
2444 #define OPT_cheat_live                          (OPT_CHEAT+5)
2445
2446 #define OPT_adult_maximize          (OPT_ADULT+0)
2447 #define OPT_adult_randarts          (OPT_ADULT+1)
2448 #define OPT_adult_autoscum          (OPT_ADULT+2)
2449 #define OPT_adult_ironman           (OPT_ADULT+3)
2450 #define OPT_adult_no_stores         (OPT_ADULT+4)
2451 #define OPT_adult_no_artifacts      (OPT_ADULT+5)
2452 #define OPT_adult_no_stacking       (OPT_ADULT+6)
2453 #define OPT_adult_no_preserve       (OPT_ADULT+7)
2454 #define OPT_adult_no_stairs                     (OPT_ADULT+8)
2455 /* leave four spaces for future */
2456 #define OPT_adult_ai_sound                      (OPT_ADULT+13)
2457 #define OPT_adult_ai_smell                      (OPT_ADULT+14)
2458 #define OPT_adult_ai_packs                      (OPT_ADULT+15)
2459 #define OPT_adult_ai_learn                      (OPT_ADULT+16)
2460 #define OPT_adult_ai_cheat                      (OPT_ADULT+17)
2461 #define OPT_adult_ai_smart                      (OPT_ADULT+18)
2462
2463 #define OPT_score_peek                          (OPT_SCORE+0)
2464 #define OPT_score_hear                          (OPT_SCORE+1)
2465 #define OPT_score_room                          (OPT_SCORE+2)
2466 #define OPT_score_xtra                          (OPT_SCORE+3)
2467 #define OPT_score_know                          (OPT_SCORE+4)
2468 #define OPT_score_live                          (OPT_SCORE+5)
2469
2470
2471 /*
2472  * Hack -- Option symbols
2473  */
2474 #define rogue_like_commands             op_ptr->opt[OPT_rogue_like_commands]
2475 #define quick_messages                  op_ptr->opt[OPT_quick_messages]
2476 #define use_sound                               op_ptr->opt[OPT_use_sound]
2477 #define query_floor                             op_ptr->opt[OPT_query_floor]
2478 #define use_old_target                  op_ptr->opt[OPT_use_old_target]
2479 #define always_pickup                   op_ptr->opt[OPT_always_pickup]
2480 #define pickup_inven                    op_ptr->opt[OPT_pickup_inven]
2481 #define depth_in_feet                   op_ptr->opt[OPT_depth_in_feet]
2482 #define show_labels                             op_ptr->opt[OPT_show_labels]
2483 #define ring_bell                               op_ptr->opt[OPT_ring_bell]
2484 #define show_flavors                    op_ptr->opt[OPT_show_flavors]
2485 #define run_ignore_doors                op_ptr->opt[OPT_run_ignore_doors]
2486 #define disturb_move                    op_ptr->opt[OPT_disturb_move]
2487 #define disturb_near                    op_ptr->opt[OPT_disturb_near]
2488 #define disturb_panel                   op_ptr->opt[OPT_disturb_panel]
2489 #define disturb_state                   op_ptr->opt[OPT_disturb_state]
2490 #define disturb_minor                   op_ptr->opt[OPT_disturb_minor]
2491 #define view_perma_grids                op_ptr->opt[OPT_view_perma_grids]
2492 #define view_torch_grids                op_ptr->opt[OPT_view_torch_grids]
2493 #define flush_failure                   op_ptr->opt[OPT_flush_failure]
2494 #define flush_disturb                   op_ptr->opt[OPT_flush_disturb]
2495 #define hilite_player                   op_ptr->opt[OPT_hilite_player]
2496 #define view_yellow_lite                op_ptr->opt[OPT_view_yellow_lite]
2497 #define view_bright_lite                op_ptr->opt[OPT_view_bright_lite]
2498 #define view_granite_lite               op_ptr->opt[OPT_view_granite_lite]
2499 #define view_special_lite               op_ptr->opt[OPT_view_special_lite]
2500 #define easy_open                               op_ptr->opt[OPT_easy_open]
2501 #define easy_alter                              op_ptr->opt[OPT_easy_alter]
2502 #define show_piles                              op_ptr->opt[OPT_show_piles]
2503 #define center_player                   op_ptr->opt[OPT_center_player]
2504 #define auto_more                               op_ptr->opt[OPT_auto_more]
2505 #define hp_changes_color                op_ptr->opt[OPT_hp_changes_color]
2506
2507 #define birth_maximize                  op_ptr->opt[OPT_birth_maximize]
2508 #define birth_randarts                  op_ptr->opt[OPT_birth_randarts]
2509 #define birth_autoscum                  op_ptr->opt[OPT_birth_autoscum]
2510 #define birth_ironman                   op_ptr->opt[OPT_birth_ironman]
2511 #define birth_no_stores                 op_ptr->opt[OPT_birth_no_stores]
2512 #define birth_no_artifacts              op_ptr->opt[OPT_birth_no_artifacts]
2513 #define birth_no_stacking       op_ptr->opt[OPT_birth_no_stacking]
2514 #define birth_no_preserve       op_ptr->opt[OPT_birth_no_preserve]
2515 #define birth_no_stairs                 op_ptr->opt[OPT_birth_no_stairs]
2516 #define birth_ai_sound                  op_ptr->opt[OPT_birth_ai_sound]
2517 #define birth_ai_smell                  op_ptr->opt[OPT_birth_ai_smell]
2518 #define birth_ai_packs                  op_ptr->opt[OPT_birth_ai_packs]
2519 #define birth_ai_learn                  op_ptr->opt[OPT_birth_ai_learn]
2520 #define birth_ai_cheat                  op_ptr->opt[OPT_birth_ai_cheat]
2521 #define birth_ai_smart                  op_ptr->opt[OPT_birth_ai_smart]
2522
2523 #define cheat_peek                              op_ptr->opt[OPT_cheat_peek]
2524 #define cheat_hear                              op_ptr->opt[OPT_cheat_hear]
2525 #define cheat_room                              op_ptr->opt[OPT_cheat_room]
2526 #define cheat_xtra                              op_ptr->opt[OPT_cheat_xtra]
2527 #define cheat_know                              op_ptr->opt[OPT_cheat_know]
2528 #define cheat_live                              op_ptr->opt[OPT_cheat_live]
2529
2530 #define adult_maximize                  op_ptr->opt[OPT_adult_maximize]
2531 #define adult_randarts                  op_ptr->opt[OPT_adult_randarts]
2532 #define adult_autoscum                  op_ptr->opt[OPT_adult_autoscum]
2533 #define adult_ironman                   op_ptr->opt[OPT_adult_ironman]
2534 #define adult_no_stores                 op_ptr->opt[OPT_adult_no_stores]
2535 #define adult_no_artifacts              op_ptr->opt[OPT_adult_no_artifacts]
2536 #define adult_no_stacking       op_ptr->opt[OPT_adult_no_stacking]
2537 #define adult_no_preserve               op_ptr->opt[OPT_adult_no_preserve]
2538 #define adult_no_stairs                 op_ptr->opt[OPT_adult_no_stairs]
2539 #define adult_ai_sound                  op_ptr->opt[OPT_adult_ai_sound]
2540 #define adult_ai_smell                  op_ptr->opt[OPT_adult_ai_smell]
2541 #define adult_ai_packs                  op_ptr->opt[OPT_adult_ai_packs]
2542 #define adult_ai_learn                  op_ptr->opt[OPT_adult_ai_learn]
2543 #define adult_ai_cheat                  op_ptr->opt[OPT_adult_ai_cheat]
2544 #define adult_ai_smart                  op_ptr->opt[OPT_adult_ai_smart]
2545
2546 #define score_peek                              op_ptr->opt[OPT_score_peek]
2547 #define score_hear                              op_ptr->opt[OPT_score_hear]
2548 #define score_room                              op_ptr->opt[OPT_score_room]
2549 #define score_xtra                              op_ptr->opt[OPT_score_xtra]
2550 #define score_know                              op_ptr->opt[OPT_score_know]
2551 #define score_live                              op_ptr->opt[OPT_score_live]
2552
2553
2554 /*
2555  * Information for "do_cmd_options()".
2556  */
2557 #define OPT_PAGE_MAX                            5
2558 #define OPT_PAGE_PER                            15
2559
2560
2561
2562 /*** Macro Definitions ***/
2563
2564
2565 /*
2566  * Hack -- The main "screen"
2567  */
2568 #define term_screen     (angband_term[0])
2569
2570
2571 /*
2572  * Determine if a given inventory item is "aware"
2573  */
2574 #define object_aware_p(T) \
2575         (k_info[(T)->k_idx].aware)
2576
2577 /*
2578  * Determine if a given inventory item is "tried"
2579  */
2580 #define object_tried_p(T) \
2581         (k_info[(T)->k_idx].tried)
2582
2583
2584 /*
2585  * Determine if a given inventory item is "known"
2586  * Test One -- Check for special "known" tag
2587  * Test Two -- Check for "Easy Know" + "Aware"
2588  */
2589 #define object_known_p(T) \
2590         (((T)->ident & (IDENT_KNOWN)) || \
2591          ((k_info[(T)->k_idx].flags3 & (TR3_EASY_KNOW)) && \
2592           k_info[(T)->k_idx].aware))
2593
2594
2595 /*
2596  * Determine if the attr and char should consider the item's flavor
2597  *
2598  * Identified scrolls should use their own tile.
2599  */
2600 #define use_flavor_glyph(T) \
2601         ((k_info[(T)->k_idx].flavor) && \
2602          !((k_info[(T)->k_idx].tval == TV_SCROLL) && object_aware_p(T)))
2603
2604
2605 /*
2606  * Return the "attr" for a given item.
2607  * Use "flavor" if available.
2608  * Default to user definitions.
2609  */
2610 #define object_attr(T) \
2611         (use_flavor_glyph(T) ? \
2612          (flavor_info[k_info[(T)->k_idx].flavor].x_attr) : \
2613          (k_info[(T)->k_idx].x_attr))
2614
2615 /*
2616  * Return the "char" for a given item.
2617  * Use "flavor" if available.
2618  * Default to user definitions.
2619  */
2620 #define object_char(T) \
2621         (use_flavor_glyph(T) ? \
2622          (flavor_info[k_info[(T)->k_idx].flavor].x_char) : \
2623          (k_info[(T)->k_idx].x_char))
2624
2625
2626 /*
2627  * Return the "attr" for a given item.
2628  * Use "flavor" if available.
2629  * Use default definitions.
2630  */
2631 #define object_attr_default(T) \
2632         ((k_info[(T)->k_idx].flavor) ? \
2633          (flavor_info[k_info[(T)->k_idx].flavor].d_attr) : \
2634          (k_info[(T)->k_idx].d_attr))
2635
2636 /*
2637  * Return the "char" for a given item.
2638  * Use "flavor" if available.
2639  * Use default definitions.
2640  */
2641 #define object_char_default(T) \
2642         ((k_info[(T)->k_idx].flavor) ? \
2643          (flavor_info[k_info[(T)->k_idx].flavor].d_char) : \
2644          (k_info[(T)->k_idx].d_char))
2645
2646
2647 /*
2648  * Artifacts use the "name1" field
2649  */
2650 #define artifact_p(T) \
2651         ((T)->name1 ? TRUE : FALSE)
2652
2653 /*
2654  * Ego-Items use the "name2" field
2655  */
2656 #define ego_item_p(T) \
2657         ((T)->name2 ? TRUE : FALSE)
2658
2659
2660 /*
2661  * Broken items.
2662  */
2663 #define broken_p(T) \
2664         ((T)->ident & (IDENT_BROKEN))
2665
2666 /*
2667  * Cursed items.
2668  */
2669 #define cursed_p(T) \
2670         ((T)->ident & (IDENT_CURSED))
2671
2672
2673 /*
2674  * Convert an "attr"/"char" pair into a "pict" (P)
2675  */
2676 #define PICT(A,C) \
2677         ((((u16b)(A)) << 8) | ((byte)(C)))
2678
2679 /*
2680  * Convert a "pict" (P) into an "attr" (A)
2681  */
2682 #define PICT_A(P) \
2683         ((byte)((P) >> 8))
2684
2685 /*
2686  * Convert a "pict" (P) into an "char" (C)
2687  */
2688 #define PICT_C(P) \
2689         ((char)((byte)(P)))
2690
2691
2692 /*
2693  * Convert a "location" (Y,X) into a "grid" (G)
2694  */
2695 #define GRID(Y,X) \
2696         (256 * (Y) + (X))
2697
2698 /*
2699  * Convert a "grid" (G) into a "location" (Y)
2700  */
2701 #define GRID_Y(G) \
2702         ((int)((G) / 256U))
2703
2704 /*
2705  * Convert a "grid" (G) into a "location" (X)
2706  */
2707 #define GRID_X(G) \
2708         ((int)((G) % 256U))
2709
2710
2711 /*
2712  * Determines if a map location is "meaningful"
2713  */
2714 #define in_bounds(Y,X) \
2715         (((unsigned)(Y) < (unsigned)(DUNGEON_HGT)) && \
2716          ((unsigned)(X) < (unsigned)(DUNGEON_WID)))
2717
2718 /*
2719  * Determines if a map location is fully inside the outer walls
2720  * This is more than twice as expensive as "in_bounds()", but
2721  * often we need to exclude the outer walls from calculations.
2722  */
2723 #define in_bounds_fully(Y,X) \
2724         (((Y) > 0) && ((Y) < DUNGEON_HGT-1) && \
2725          ((X) > 0) && ((X) < DUNGEON_WID-1))
2726
2727
2728 /*
2729  * Determines if a map location is currently "on screen"
2730  * Note that "panel_contains(Y,X)" always implies "in_bounds(Y,X)".
2731  * Pre-storing this into a cave_info flag would be nice.  XXX XXX
2732  */
2733 #define panel_contains(Y,X) \
2734         (((unsigned)((Y) - Term->offset_y) < (unsigned)(SCREEN_HGT)) && \
2735          ((unsigned)((X) - Term->offset_x) < (unsigned)(SCREEN_WID)))
2736
2737
2738
2739 /*
2740  * Determine if a "legal" grid is a "floor" grid
2741  *
2742  * Line 1 -- forbid doors, rubble, seams, walls
2743  *
2744  * Note the use of the new "CAVE_WALL" flag.
2745  */
2746 #define cave_floor_bold(Y,X) \
2747         (!(cave_info[Y][X] & (CAVE_WALL)))
2748
2749 /*
2750  * Determine if a "legal" grid is a "clean" floor grid
2751  *
2752  * Line 1 -- forbid non-floors
2753  * Line 2 -- forbid normal objects
2754  */
2755 #define cave_clean_bold(Y,X) \
2756         ((cave_feat[Y][X] == FEAT_FLOOR) && \
2757          (cave_o_idx[Y][X] == 0))
2758
2759 /*
2760  * Determine if a "legal" grid is an "empty" floor grid
2761  *
2762  * Line 1 -- forbid doors, rubble, seams, walls
2763  * Line 2 -- forbid player/monsters
2764  */
2765 #define cave_empty_bold(Y,X) \
2766         (cave_floor_bold(Y,X) && \
2767          (cave_m_idx[Y][X] == 0))
2768
2769 /*
2770  * Determine if a "legal" grid is an "naked" floor grid
2771  *
2772  * Line 1 -- forbid non-floors
2773  * Line 2 -- forbid normal objects
2774  * Line 3 -- forbid player/monsters
2775  */
2776 #define cave_naked_bold(Y,X) \
2777         ((cave_feat[Y][X] == FEAT_FLOOR) && \
2778          (cave_o_idx[Y][X] == 0) && \
2779          (cave_m_idx[Y][X] == 0))
2780
2781
2782 /*
2783  * Determine if a "legal" grid is "permanent"
2784  *
2785  * Line 1 -- perma-walls
2786  * Line 2-3 -- stairs
2787  * Line 4-5 -- shop doors
2788  */
2789 #define cave_perma_bold(Y,X) \
2790         ((cave_feat[Y][X] >= FEAT_PERM_EXTRA) || \
2791          ((cave_feat[Y][X] == FEAT_LESS) || \
2792           (cave_feat[Y][X] == FEAT_MORE)) || \
2793          ((cave_feat[Y][X] >= FEAT_SHOP_HEAD) && \
2794           (cave_feat[Y][X] <= FEAT_SHOP_TAIL)))
2795
2796
2797 /*
2798  * Determine if a "legal" grid is within "los" of the player
2799  *
2800  * Note the use of comparison to zero to force a "boolean" result
2801  */
2802 #define player_has_los_bold(Y,X) \
2803         ((cave_info[Y][X] & (CAVE_VIEW)) != 0)
2804
2805
2806 /*
2807  * Determine if a "legal" grid can be "seen" by the player
2808  *
2809  * Note the use of comparison to zero to force a "boolean" result
2810  */
2811 #define player_can_see_bold(Y,X) \
2812         ((cave_info[Y][X] & (CAVE_SEEN)) != 0)
2813
2814
2815
2816
2817 /*** Message constants ***/
2818
2819 #define MSG_GENERIC          0
2820 #define MSG_HIT              1
2821 #define MSG_MISS             2
2822 #define MSG_FLEE             3
2823 #define MSG_DROP             4
2824 #define MSG_KILL             5
2825 #define MSG_LEVEL            6
2826 #define MSG_DEATH            7
2827 #define MSG_STUDY            8
2828 #define MSG_TELEPORT         9
2829 #define MSG_SHOOT           10
2830 #define MSG_QUAFF           11
2831 #define MSG_ZAP_ROD         12
2832 #define MSG_WALK            13
2833 #define MSG_TPOTHER         14
2834 #define MSG_HITWALL         15
2835 #define MSG_EAT             16
2836 #define MSG_STORE1          17
2837 #define MSG_STORE2          18
2838 #define MSG_STORE3          19
2839 #define MSG_STORE4          20
2840 #define MSG_DIG             21
2841 #define MSG_OPENDOOR        22
2842 #define MSG_SHUTDOOR        23
2843 #define MSG_TPLEVEL         24
2844 #define MSG_BELL            25
2845 #define MSG_NOTHING_TO_OPEN 26
2846 #define MSG_LOCKPICK_FAIL   27
2847 #define MSG_STAIRS_DOWN     28
2848 #define MSG_HITPOINT_WARN   29
2849 #define MSG_ACT_ARTIFACT    30
2850 #define MSG_USE_STAFF       31
2851 #define MSG_DESTROY         32
2852 #define MSG_MON_HIT         33
2853 #define MSG_MON_TOUCH       34
2854 #define MSG_MON_PUNCH       35
2855 #define MSG_MON_KICK        36
2856 #define MSG_MON_CLAW        37
2857 #define MSG_MON_BITE        38
2858 #define MSG_MON_STING       39
2859 #define MSG_MON_BUTT        40
2860 #define MSG_MON_CRUSH       41
2861 #define MSG_MON_ENGULF      42
2862 #define MSG_MON_CRAWL       43
2863 #define MSG_MON_DROOL       44
2864 #define MSG_MON_SPIT        45
2865 #define MSG_MON_GAZE        46
2866 #define MSG_MON_WAIL        47
2867 #define MSG_MON_SPORE       48
2868 #define MSG_MON_BEG         49
2869 #define MSG_MON_INSULT      50
2870 #define MSG_MON_MOAN        51
2871 #define MSG_RECOVER         52
2872 #define MSG_BLIND           53
2873 #define MSG_CONFUSED        54
2874 #define MSG_POISONED        55
2875 #define MSG_AFRAID          56
2876 #define MSG_PARALYZED       57
2877 #define MSG_DRUGGED         58
2878 #define MSG_SPEED           59
2879 #define MSG_SLOW            60
2880 #define MSG_SHIELD          61
2881 #define MSG_BLESSED         62
2882 #define MSG_HERO            63
2883 #define MSG_BERSERK         64
2884 #define MSG_PROT_EVIL       65
2885 #define MSG_INVULN          66
2886 #define MSG_SEE_INVIS       67
2887 #define MSG_INFRARED        68
2888 #define MSG_RES_ACID        69
2889 #define MSG_RES_ELEC        70
2890 #define MSG_RES_FIRE        71
2891 #define MSG_RES_COLD        72
2892 #define MSG_RES_POIS        73
2893 #define MSG_STUN            74
2894 #define MSG_CUT             75
2895 #