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