OSDN Git Service

溜まり場に出ていた次のバグらしき挙動を修正。
[hengband/hengband.git] / src / defines.h
index 6864772..0aff7a9 100644 (file)
@@ -76,7 +76,7 @@
 #define H_VER_MAJOR 1
 #define H_VER_MINOR 7
 #define H_VER_PATCH 0
-#define H_VER_EXTRA 3
+#define H_VER_EXTRA 6
 
 
 #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 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 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 OM_NOMSG        0x02    /* temporary flag to suppress messages */
 #define OM_NO_QUERY     0x04    /* Query for auto-pick was already answered as 'No' */
 #define OM_AUTODESTROY  0x08    /* Destroy later to avoid illegal inventry shift */
+#define OM_TOUCHED      0x10    /* Object was touched by player */
 
 
 /*
 #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 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))
 
 
        ((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)))
 
 
 /*
@@ -4531,11 +4488,12 @@ extern int PlayerUID;
 #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
 
@@ -4769,6 +4727,22 @@ extern int PlayerUID;
 #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
@@ -5187,7 +5161,8 @@ extern int PlayerUID;
 
 #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
@@ -5257,8 +5232,8 @@ extern int PlayerUID;
 #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
@@ -5273,7 +5248,7 @@ extern int PlayerUID;
 #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
@@ -5419,6 +5394,9 @@ extern int PlayerUID;
 #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 || \
@@ -5465,3 +5443,28 @@ extern int PlayerUID;
 #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