#define H_VER_MAJOR 1
#define H_VER_MINOR 7
#define H_VER_PATCH 0
-#define H_VER_EXTRA 3
+#define H_VER_EXTRA 5
#define ANGBAND_2_8_1
*/
#define TOWN_DAWN 10000 /* Number of ticks from dawn to dawn XXX */
#define TURNS_PER_TICK 10L /* Number of energy-gain-turns per ticks */
+#define MAX_DAYS 20000 /* Maximum days */
#define BREAK_GLYPH 550 /* Rune of protection resistance */
#define BREAK_MINOR_GLYPH 299 /* For explosive runes */
#define BTH_PLUS_ADJ 3 /* Adjust BTH per plus-to-hit */
#define PF_RYOUTE 0x0040
-/* Maximum number of preservable pets */
-#define MAX_PARTY_MON 21
+#define CAN_TWO_HANDS_WIELDING() (!p_ptr->riding || (p_ptr->pet_extra_flags & PF_RYOUTE))
/*
#define REALM_DEATH 5
#define REALM_TRUMP 6
#define REALM_ARCANE 7
-#define REALM_ENCHANT 8
+#define REALM_CRAFT 8
#define REALM_DAEMON 9
#define REALM_CRUSADE 10
#define MAX_MAGIC 10
/*
+ * Mode constant for do_spell()
+ */
+#define SPELL_NAME 0
+#define SPELL_DESC 1
+#define SPELL_INFO 2
+#define SPELL_CAST 3
+#define SPELL_FAIL 4
+#define SPELL_STOP 5
+#define SPELL_CONT 6
+
+
+/*
* Maximum number of "normal" pack slots, and the index of the "overflow"
* slot, which can hold an item, but only temporarily, since it causes the
* pack to "overflow", dropping the "last" item onto the ground. Since this
#define MAX_FEAT_STATES 8
-/*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/
-
-/* Nothing */
-#define FEAT_NONE 0x00
-
-/* Various */
-#define FEAT_FLOOR 0x01
-#define FEAT_INVIS 0x02
-#define FEAT_GLYPH 0x03
-#define FEAT_OPEN 0x04
-#define FEAT_BROKEN 0x05
-#define FEAT_LESS 0x06
-#define FEAT_MORE 0x07
-
-/* Quest features -KMW- */
-#define FEAT_QUEST_ENTER 0x08
-#define FEAT_QUEST_EXIT 0x09
-#define FEAT_QUEST_DOWN 0x0A
-#define FEAT_QUEST_UP 0x0B
-
-#define FEAT_LESS_LESS 0x0D
-#define FEAT_MORE_MORE 0x0E
-
-/* Feature 0x0E - 0x0F unused */
-
-/* Traps */
-#define FEAT_TRAP_TRAPDOOR 0x10
-#define FEAT_TRAP_PIT 0x11
-#define FEAT_TRAP_SPIKED_PIT 0x12
-#define FEAT_TRAP_POISON_PIT 0x13
-#define FEAT_TRAP_TY_CURSE 0x14
-#define FEAT_TRAP_TELEPORT 0x15
-#define FEAT_TRAP_FIRE 0x16
-#define FEAT_TRAP_ACID 0x17
-#define FEAT_TRAP_SLOW 0x18
-#define FEAT_TRAP_LOSE_STR 0x19
-#define FEAT_TRAP_LOSE_DEX 0x1A
-#define FEAT_TRAP_LOSE_CON 0x1B
-#define FEAT_TRAP_BLIND 0x1C
-#define FEAT_TRAP_CONFUSE 0x1D
-#define FEAT_TRAP_POISON 0x1E
-#define FEAT_TRAP_SLEEP 0x1F
-
-/* Doors */
-#define FEAT_DOOR_HEAD 0x20
-#define FEAT_DOOR_TAIL 0x2F
-
-/* Extra */
-#define FEAT_SECRET 0x30
-#define FEAT_RUBBLE 0x31
-
-/* Seams */
-#define FEAT_MAGMA 0x32
-#define FEAT_QUARTZ 0x33
-#define FEAT_MAGMA_H 0x34
-#define FEAT_QUARTZ_H 0x35
-#define FEAT_MAGMA_K 0x36
-#define FEAT_QUARTZ_K 0x37
-
-/* Walls */
-#define FEAT_WALL 0x38
-#define FEAT_WALL_INNER 0x39
-#define FEAT_WALL_OUTER 0x3A
-#define FEAT_WALL_SOLID 0x3B
-#define FEAT_PERM 0x3C
-#define FEAT_PERM_INNER 0x3D
-#define FEAT_PERM_OUTER 0x3E
-#define FEAT_PERM_SOLID 0x3F
-
-/* Glyph */
-#define FEAT_MINOR_GLYPH 0x40
-
-/* Pattern */
-#define FEAT_PATTERN_START 0x41
-#define FEAT_PATTERN_1 0x42
-#define FEAT_PATTERN_2 0x43
-#define FEAT_PATTERN_3 0x44
-#define FEAT_PATTERN_4 0x45
-#define FEAT_PATTERN_END 0x46
-#define FEAT_PATTERN_OLD 0x47
-#define FEAT_PATTERN_XTRA1 0x48
-#define FEAT_PATTERN_XTRA2 0x49
-
-/* Shops */
-#define FEAT_SHOP_HEAD 0x4A
-#define FEAT_SHOP_TAIL 0x52
-
-/* Terrains */
-#define FEAT_DEEP_WATER 0x53
-#define FEAT_SHAL_WATER 0x54
-#define FEAT_DEEP_LAVA 0x55
-#define FEAT_SHAL_LAVA 0x56
-#define FEAT_DARK_PIT 0x57
-#define FEAT_DIRT 0x58
-#define FEAT_GRASS 0x59
-
-#define FEAT_TRAP_TRAPS 0x5A
-#define FEAT_TRAP_ALARM 0x5B
-#define FEAT_TRAP_OPEN 0x5C
-
-#define FEAT_FLOWER 0x5D
-#define FEAT_DEEP_GRASS 0x5E
-#define FEAT_MUSEUM 0x5F
-
-/* Terrain */
-#define FEAT_TREES 0x60
-#define FEAT_MOUNTAIN 0x61
-#define FEAT_MOUNTAIN_WALL 0x62
-
-/* Feature 0x63 - 0x7F unused */
-
-/* Buildings */
-#define FEAT_BLDG_HEAD 0x80
-#define FEAT_BLDG_TAIL 0x9F
-
-/* Hack -- Special fake terrains for f_info */
-#define FEAT_CONVERT_FLOOR 0xa0
-#define FEAT_CONVERT_WALL 0xa1
-#define FEAT_CONVERT_INNER 0xa2
-#define FEAT_CONVERT_OUTER 0xa3
-#define FEAT_CONVERT_SOLID 0xa4
-#define FEAT_CONVERT_STREAM1 0xa5
-#define FEAT_CONVERT_STREAM2 0xa6
-
-#define FEAT_TOWN 0xc0
-#define FEAT_ENTRANCE 0xc1
-#define FEAT_SWAMP 0xc2
-
-/* for mirror master */
-#define FEAT_MIRROR 0xc3
-
-/* unknown grid (not detected) */
-#define FEAT_UNDETECTED 0xc4
-
-/* special traps */
-#define FEAT_TRAP_ARMAGEDDON 0xc5
-#define FEAT_TRAP_PIRANHA 0xc6
-
/*
* Wilderness terrains
*/
#define FF_UNPERM 109
#define FF_TELEPORTABLE 110
#define FF_CONVERT 111
+#define FF_GLASS 112
-#define FF_FLAG_MAX 112
+#define FF_FLAG_MAX 113
#define FF_FLAG_SIZE (1 + ((FF_FLAG_MAX - 1) / 32))
/* Which features are dynamic */
/*
* Feature action flags
*/
-#define FAF_DESTROY 0x01
-#define FAF_NO_DROP 0x02
+#define FAF_DESTROY 0x01
+#define FAF_NO_DROP 0x02
+#define FAF_CRASH_GLASS 0x04
+
+
+/*
+ * Bit flags for teleportation
+ */
+#define TELEPORT_NONMAGICAL 0x00000001
+#define TELEPORT_PASSIVE 0x00000002
+#define TELEPORT_DEC_VALOUR 0x00000004
+
+
+/* Types of doors */
+#define DOOR_DEFAULT -1
+#define DOOR_DOOR 0
+#define DOOR_GLASS_DOOR 1
+#define DOOR_CURTAIN 2
+
+#define MAX_DOOR_TYPES 3
+
+#define feat_locked_door_random(DOOR_TYPE) \
+ (feat_door[(DOOR_TYPE)].num_locked ? \
+ feat_door[(DOOR_TYPE)].locked[randint0(feat_door[(DOOR_TYPE)].num_locked)] : feat_none)
+
+#define feat_jammed_door_random(DOOR_TYPE) \
+ (feat_door[(DOOR_TYPE)].num_jammed ? \
+ feat_door[(DOOR_TYPE)].jammed[randint0(feat_door[(DOOR_TYPE)].num_jammed)] : feat_none)
+
+
+/* Types of normal traps */
+#define NOT_TRAP -1
+#define TRAP_TRAPDOOR 0
+#define TRAP_PIT 1
+#define TRAP_SPIKED_PIT 2
+#define TRAP_POISON_PIT 3
+#define TRAP_TY_CURSE 4
+#define TRAP_TELEPORT 5
+#define TRAP_FIRE 6
+#define TRAP_ACID 7
+#define TRAP_SLOW 8
+#define TRAP_LOSE_STR 9
+#define TRAP_LOSE_DEX 10
+#define TRAP_LOSE_CON 11
+#define TRAP_BLIND 12
+#define TRAP_CONFUSE 13
+#define TRAP_POISON 14
+#define TRAP_SLEEP 15
+#define TRAP_TRAPS 16
+#define TRAP_ALARM 17
+
+
+/* Types of special traps */
+#define TRAP_OPEN 18
+#define TRAP_ARMAGEDDON 19
+#define TRAP_PIRANHA 20
-/* Type of pattern tiles */
+/* Maximum locked/jammed doors */
+#define MAX_LJ_DOORS 8
+
+
+/* Types of pattern tiles */
#define NOT_PATTERN_TILE -1
#define PATTERN_TILE_START 0
#define PATTERN_TILE_1 1
#define PATTERN_TILE_WRECKED 8
-/* Type of conversions */
+/* Types of conversions */
#define CONVERT_TYPE_FLOOR 0
#define CONVERT_TYPE_WALL 1
#define CONVERT_TYPE_INNER 2
#define F_LIT_STANDARD 0 /* Standard */
#define F_LIT_LITE 1 /* Brightly lit */
#define F_LIT_DARK 2 /* Darkened */
-#define F_LIT_DARKDARK 3 /* Darkly darkened */
#define F_LIT_NS_BEGIN 1 /* Nonstandard */
-#define F_LIT_MAX 4
+#define F_LIT_MAX 3
/*** Artifact indexes (see "lib/edit/a_info.txt") ***/
#define TV_DEATH_BOOK 94
#define TV_TRUMP_BOOK 95
#define TV_ARCANE_BOOK 96
-#define TV_ENCHANT_BOOK 97
+#define TV_CRAFT_BOOK 97
#define TV_DAEMON_BOOK 98
#define TV_CRUSADE_BOOK 99
#define TV_MUSIC_BOOK 105
#define SV_RING_STUPIDITY 3
#define SV_RING_TELEPORTATION 4
#define SV_RING_SLOW_DIGESTION 6
-#define SV_RING_FEATHER_FALL 7
+#define SV_RING_LEVITATION_FALL 7
#define SV_RING_RESIST_FIRE 8
#define SV_RING_RESIST_COLD 9
#define SV_RING_SUSTAIN_STR 10
#define PROJECT_FAST 0x4000
#define PROJECT_LOS 0x8000
+
+/*
+ * Special caster ID for project()
+ */
+#define PROJECT_WHO_UNCTRL_POWER -1
+#define PROJECT_WHO_GLASS_SHARDS -2
+
+
/*
* Bit flags for the "enchant()" function
*/
#define PR_STATE 0x00100000L /* Display Extra (State) */
#define PR_SPEED 0x00200000L /* Display Extra (Speed) */
#define PR_STUDY 0x00400000L /* Display Extra (Study) */
-#define PR_MANE 0x00800000L /* Display Extra (Mane) */
+#define PR_IMITATION 0x00800000L /* Display Extra (Imitation) */
#define PR_EXTRA 0x01000000L /* Display Extra Info */
#define PR_BASIC 0x02000000L /* Display Basic Info */
#define PR_MAP 0x04000000L /* Display Map */
#define PM_IGNORE_TERRAIN 0x00000080
#define PM_HASTE 0x00000100
#define PM_KAGE 0x00000200
+#define PM_MULTIPLY 0x00000400
/* Bit flags for monster_desc() */
#define OD_NO_PLURAL 0x00000010 /* Don't use plural */
#define OD_STORE 0x00000020 /* Assume to be aware and known */
#define OD_NO_FLAVOR 0x00000040 /* Allow to hidden flavor */
+#define OD_FORCE_FLAVOR 0x00000080 /* Get un-shuffled flavor name */
/*
#define TR_HIDE_TYPE 73 /* Hide "pval" description */
#define TR_SHOW_MODS 74 /* Always show Tohit/Todam */
#define TR_XXX1 75 /* XXX1 */
-#define TR_FEATHER 76 /* Feather Falling */
+#define TR_LEVITATION 76 /* Feather Falling */
#define TR_LITE 77 /* Permanent Light */
#define TR_SEE_INVIS 78 /* See Invisible */
#define TR_TELEPATHY 79 /* Telepathy */
#define TR_ESP_NONLIVING 114
#define TR_ESP_UNIQUE 115
#define TR_FULL_NAME 116
+#define TR_FIXED_FLAVOR 117
-#define TR_FLAG_MAX 117
+#define TR_FLAG_MAX 118
#define TR_FLAG_SIZE 4
#define is_original_ap(A) \
(bool)(((A)->ap_r_idx == (A)->r_idx) ? TRUE : FALSE)
+#define is_original_ap_and_seen(A) \
+ (bool)((A)->ml && !p_ptr->image && ((A)->ap_r_idx == (A)->r_idx))
+
+/*
+ * Is the monster seen by the player?
+ */
+#define is_seen(A) \
+ ((bool)((A)->ml && (!ignore_unview || p_ptr->inside_battle || \
+ (player_can_see_bold((A)->fy, (A)->fx) && projectable(py, px, (A)->fy, (A)->fx)))))
+
/*** Option Definitions ***/
#define term_screen (angband_term[0])
-#ifndef SCRIPT_OBJ_KIND
/*
* Determine if a given inventory item is "aware"
*/
-#define object_aware_p(T) \
+#define object_is_aware(T) \
(k_info[(T)->k_idx].aware)
/*
* Determine if a given inventory item is "tried"
*/
-#define object_tried_p(T) \
+#define object_is_tried(T) \
(k_info[(T)->k_idx].tried)
* Test One -- Check for special "known" tag
* Test Two -- Check for "Easy Know" + "Aware"
*/
-#define object_known_p(T) \
+#define object_is_known(T) \
(((T)->ident & (IDENT_KNOWN)) || \
(k_info[(T)->k_idx].easy_know && k_info[(T)->k_idx].aware))
*/
#define object_attr(T) \
((k_info[(T)->k_idx].flavor) ? \
- (misc_to_attr[k_info[(T)->k_idx].flavor]) : \
- (k_info[(T)->k_idx].x_attr))
+ (k_info[k_info[(T)->k_idx].flavor].x_attr) : \
+ ((!(T)->k_idx || ((T)->tval != TV_CORPSE) || ((T)->sval != SV_CORPSE) || \
+ (k_info[(T)->k_idx].x_attr != TERM_DARK)) ? \
+ (k_info[(T)->k_idx].x_attr) : (r_info[(T)->pval].x_attr)))
/*
* Return the "char" for a given item.
*/
#define object_char(T) \
((k_info[(T)->k_idx].flavor) ? \
- (misc_to_char[k_info[(T)->k_idx].flavor]) : \
+ (k_info[k_info[(T)->k_idx].flavor].x_char) : \
(k_info[(T)->k_idx].x_char))
-#else /* SCRIPT_OBJ_KIND */
-
-
-/*
- * Determine if a given inventory item is "aware"
- */
-#define object_aware_p(T) \
- ((T)->aware)
-
-/*
- * Determine if a given inventory item is "tried"
- */
-#define object_tried_p(T) \
- ((T)->tried)
-
-
-/*
- * Determine if a given inventory item is "known"
- * Test One -- Check for special "known" tag
- * Test Two -- Check for "Easy Know" + "Aware"
- */
-#define object_known_p(T) \
- (((T)->ident & (IDENT_KNOWN)) || \
- ((T)->easy_know && (T)->aware))
-
-
-/*
- * Return the "attr" for a given item.
- * Use "flavor" if available.
- * Default to user definitions.
- */
-#define object_attr(T) \
- (((T)->flavor) ? \
- (misc_to_attr[(T)->flavor]) : \
- ((T)->x_attr))
-
-/*
- * Return the "char" for a given item.
- * Use "flavor" if available.
- * Default to user definitions.
- */
-#define object_char(T) \
- (((T)->flavor) ? \
- (misc_to_char[(T)->flavor]) : \
- ((T)->x_char))
-
-#endif /* SCRIPT_OBJ_KIND */
-
-
-
-
/*
* Artifacts use the "name1" field
*/
-#define artifact_p(T) \
+#define object_is_fixed_artifact(T) \
((T)->name1 ? TRUE : FALSE)
/*
* Ego-Items use the "name2" field
*/
-#define ego_item_p(T) \
+#define object_is_ego(T) \
((T)->name2 ? TRUE : FALSE)
/*
* Broken items.
*/
-#define broken_p(T) \
+#define object_is_broken(T) \
((T)->ident & (IDENT_BROKEN))
/*
* Cursed items.
*/
-#define cursed_p(T) \
+#define object_is_cursed(T) \
((T)->curse_flags)
((C) == &cave[py][px])
-#define f_flags_bold(Y,X) \
- (f_info[cave[(Y)][(X)].feat].flags)
+#define cave_have_flag_bold(Y,X,INDEX) \
+ (have_flag(f_info[cave[(Y)][(X)].feat].flags, (INDEX)))
-#define f_flags_grid(C) \
- (f_info[(C)->feat].flags)
+#define cave_have_flag_grid(C,INDEX) \
+ (have_flag(f_info[(C)->feat].flags, (INDEX)))
/*
* Line 3 -- forbid normal objects
*/
#define cave_clean_bold(Y,X) \
- (have_flag(f_flags_bold((Y), (X)), FF_FLOOR) && \
+ (cave_have_flag_bold((Y), (X), FF_FLOOR) && \
!(cave[Y][X].info & CAVE_OBJECT) && \
(cave[Y][X].o_idx == 0))
* Line 2 -- forbid object terrains
*/
#define cave_drop_bold(Y,X) \
- (have_flag(f_flags_bold((Y), (X)), FF_DROP) && \
+ (cave_have_flag_bold((Y), (X), FF_DROP) && \
!(cave[Y][X].info & CAVE_OBJECT))
* Line 3 -- forbid the player
*/
#define cave_empty_bold(Y,X) \
- (have_flag(f_flags_bold((Y), (X)), FF_PLACE) && \
+ (cave_have_flag_bold((Y), (X), FF_PLACE) && \
!(cave[Y][X].m_idx) && \
!player_bold(Y,X))
*/
#define cave_empty_bold2(Y,X) \
(cave_empty_bold(Y,X) && \
- (character_dungeon || !have_flag(f_flags_bold((Y), (X)), FF_TREE)))
+ (character_dungeon || !cave_have_flag_bold((Y), (X), FF_TREE)))
/*
* Line 1 -- permanent flag
*/
#define cave_perma_bold(Y,X) \
- (have_flag(f_flags_bold((Y), (X)), FF_PERMANENT))
+ (cave_have_flag_bold((Y), (X), FF_PERMANENT))
/*
* Grid based version of "cave_empty_bold()"
*/
#define cave_empty_grid(C) \
- (have_flag(f_flags_grid(C), FF_PLACE) && \
+ (cave_have_flag_grid((C), FF_PLACE) && \
!((C)->m_idx) && \
!player_grid(C))
* Grid based version of "cave_perma_bold()"
*/
#define cave_perma_grid(C) \
- (have_flag(f_flags_grid(C), FF_PERMANENT))
+ (cave_have_flag_grid((C), FF_PERMANENT))
#define pattern_tile(Y,X) \
- (have_flag(f_flags_bold((Y), (X)), FF_PATTERN))
+ (cave_have_flag_bold((Y), (X), FF_PATTERN))
/*
* Does the grid stop disintegration?
*/
#define cave_stop_disintegration(Y,X) \
- (!have_flag(f_flags_bold((Y), (X)), FF_PROJECT) && \
- (!have_flag(f_flags_bold((Y), (X)), FF_HURT_DISI) || \
- have_flag(f_flags_bold((Y), (X)), FF_PERMANENT)))
+ (!cave_have_flag_bold((Y), (X), FF_PROJECT) && \
+ (!cave_have_flag_bold((Y), (X), FF_HURT_DISI) || \
+ cave_have_flag_bold((Y), (X), FF_PERMANENT)))
/*
#define SOUND_SHOW 62 /* A monster makes a "show" attack */
#define SOUND_UNUSED 63 /* (no sound for gaze attacks) */
#define SOUND_EXPLODE 64 /* Something (or somebody) explodes */
+#define SOUND_GLASS 65 /* A glass feature was crashed */
/*
* Mega-Hack -- maximum known sounds
*/
-#define SOUND_MAX 65
+#define SOUND_MAX 66
#define MAX_VIRTUE 18
#define NIKKI_NAMED_PET 21
#define NIKKI_PAT_TELE 22
+#define RECORD_NAMED_PET_NAME 0
+#define RECORD_NAMED_PET_UNNAME 1
+#define RECORD_NAMED_PET_DISMISS 2
+#define RECORD_NAMED_PET_DEATH 3
+#define RECORD_NAMED_PET_MOVED 4
+#define RECORD_NAMED_PET_LOST_SIGHT 5
+#define RECORD_NAMED_PET_DESTROY 6
+#define RECORD_NAMED_PET_EARTHQUAKE 7
+#define RECORD_NAMED_PET_GENOCIDE 8
+#define RECORD_NAMED_PET_WIZ_ZAP 9
+#define RECORD_NAMED_PET_TELE_LEVEL 10
+#define RECORD_NAMED_PET_BLAST 11
+#define RECORD_NAMED_PET_HEAL_LEPER 12
+#define RECORD_NAMED_PET_COMPACT 13
+#define RECORD_NAMED_PET_LOSE_PARENT 14
+
#define MAX_MANE 16
#define MAX_MONSPELLS 96
#define MONSPELL_TYPE_BOLT 1
#define MUSIC_DETECT 101
-#define music_singing(X) ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] == X))
+#define music_singing(X) ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0] == (X)))
+#define music_singing_any() ((p_ptr->pclass == CLASS_BARD) && p_ptr->magic_num1[0])
#define HISSATSU_NONE 0
#define HISSATSU_2 1
#define DF1_NO_DOORS 0x00000020L
#define DF1_WATER_RIVER 0x00000040L
#define DF1_LAVA_RIVER 0x00000080L
-#define DF1_XXX08 0x00000100L
-#define DF1_XXX09 0x00000200L
+#define DF1_CURTAIN 0x00000100L
+#define DF1_GLASS_DOOR 0x00000200L
#define DF1_CAVE 0x00000400L
#define DF1_CAVERN 0x00000800L
#define DF1_XXX12 0x00001000L
#define DF1_NO_VAULT 0x00200000L
#define DF1_ARENA 0x00400000L
#define DF1_DESTROY 0x00800000L
-#define DF1_XXX24 0x01000000L
+#define DF1_GLASS_ROOM 0x01000000L
#define DF1_NO_CAVE 0x02000000L
#define DF1_NO_MAGIC 0x04000000L
#define DF1_NO_MELEE 0x08000000L
#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(MUSIC_MIND))
#define IS_TIM_STEALTH() (p_ptr->tim_stealth || music_singing(MUSIC_STEALTH))
+/* Multishadow effects is determined by turn */
+#define CHECK_MULTISHADOW() (p_ptr->multishadow && (turn & 1))
+
/* Is "teleport level" ineffective to this target? */
#define TELE_LEVEL_IS_INEFF(TARGET) \
(p_ptr->inside_arena || p_ptr->inside_battle || \
#define SKEY_TOP 0xf007
#define SKEY_BOTTOM 0xf008
+/*
+ * Bit flags for move_player_effect()
+ */
+#define MPE_STAYING 0x00000001
+#define MPE_FORGET_FLOW 0x00000002
+#define MPE_HANDLE_STUFF 0x00000004
+#define MPE_ENERGY_USE 0x00000008
+#define MPE_DONT_PICKUP 0x00000010
+#define MPE_DO_PICKUP 0x00000020
+#define MPE_BREAK_TRAP 0x00000040
+#define MPE_DONT_SWAP_MON 0x00000080
+
+
+#define MTIMED_CSLEEP 0 /* Monster is sleeping */
+#define MTIMED_FAST 1 /* Monster is temporarily fast */
+#define MTIMED_SLOW 2 /* Monster is temporarily slow */
+#define MTIMED_STUNNED 3 /* Monster is stunned */
+#define MTIMED_CONFUSED 4 /* Monster is confused */
+#define MTIMED_MONFEAR 5 /* Monster is afraid */
+#define MTIMED_INVULNER 6 /* Monster is temporarily invulnerable */
+
+#define MAX_MTIMED 7
+
+#define MON_CSLEEP(M_PTR) ((M_PTR)->mtimed[MTIMED_CSLEEP])
+#define MON_FAST(M_PTR) ((M_PTR)->mtimed[MTIMED_FAST])
+#define MON_SLOW(M_PTR) ((M_PTR)->mtimed[MTIMED_SLOW])
+#define MON_STUNNED(M_PTR) ((M_PTR)->mtimed[MTIMED_STUNNED])
+#define MON_CONFUSED(M_PTR) ((M_PTR)->mtimed[MTIMED_CONFUSED])
+#define MON_MONFEAR(M_PTR) ((M_PTR)->mtimed[MTIMED_MONFEAR])
+#define MON_INVULNER(M_PTR) ((M_PTR)->mtimed[MTIMED_INVULNER])
+
+/*
+ * Bit flags for screen_object()
+ */
+#define SCROBJ_FAKE_OBJECT 0x00000001
+#define SCROBJ_FORCE_DETAIL 0x00000002