OSDN Git Service

[Refactor] #37353 歌に関するマクロ定義を realm-song.h へ移動.
[hengband/hengband.git] / src / melee1.c
index bfb7a6a..5e34b04 100644 (file)
  */
 
 #include "angband.h"
+#include "core.h"
+#include "util.h"
+
 #include "artifact.h"
 #include "cmd-pet.h"
-#include "player-damage.h"
 #include "monsterrace-hook.h"
 #include "melee.h"
 #include "monster.h"
 #include "monster-status.h"
 #include "monster-spell.h"
 #include "avatar.h"
-#include "player-status.h"
 #include "realm-hex.h"
+#include "realm-song.h"
 #include "object-flavor.h"
 #include "object-hook.h"
 #include "grid.h"
-#include "player-move.h"
+#include "dungeon.h"
 #include "floor.h"
+#include "dungeon.h"
 #include "spells.h"
 #include "files.h"
+#include "player-move.h"
 #include "player-effects.h"
+#include "player-skill.h"
+#include "player-damage.h"
+#include "player-status.h"
+#include "player-race.h"
 #include "view-mainwindow.h"
+#include "world.h"
 
 
+ /*!
+  * @brief モンスターの打撃効力テーブル /
+  * The table of monsters' blow effects
+  */
+const mbe_info_type mbe_info[] =
+{
+       {  0, 0,             }, /* None      */
+       { 60, GF_MISSILE,    }, /* HURT      */
+       {  5, GF_POIS,       }, /* POISON    */
+       { 20, GF_DISENCHANT, }, /* UN_BONUS  */
+       { 15, GF_MISSILE,    }, /* UN_POWER  */ /* ToDo: Apply the correct effects */
+       {  5, GF_MISSILE,    }, /* EAT_GOLD  */
+       {  5, GF_MISSILE,    }, /* EAT_ITEM  */
+       {  5, GF_MISSILE,    }, /* EAT_FOOD  */
+       {  5, GF_MISSILE,    }, /* EAT_LITE  */
+       {  0, GF_ACID,       }, /* ACID      */
+       { 10, GF_ELEC,       }, /* ELEC      */
+       { 10, GF_FIRE,       }, /* FIRE      */
+       { 10, GF_COLD,       }, /* COLD      */
+       {  2, GF_MISSILE,    }, /* BLIND     */
+       { 10, GF_CONFUSION,  }, /* CONFUSE   */
+       { 10, GF_MISSILE,    }, /* TERRIFY   */
+       {  2, GF_MISSILE,    }, /* PARALYZE  */
+       {  0, GF_MISSILE,    }, /* LOSE_STR  */
+       {  0, GF_MISSILE,    }, /* LOSE_INT  */
+       {  0, GF_MISSILE,    }, /* LOSE_WIS  */
+       {  0, GF_MISSILE,    }, /* LOSE_DEX  */
+       {  0, GF_MISSILE,    }, /* LOSE_CON  */
+       {  0, GF_MISSILE,    }, /* LOSE_CHR  */
+       {  2, GF_MISSILE,    }, /* LOSE_ALL  */
+       { 60, GF_ROCKET,     }, /* SHATTER   */
+       {  5, GF_MISSILE,    }, /* EXP_10    */
+       {  5, GF_MISSILE,    }, /* EXP_20    */
+       {  5, GF_MISSILE,    }, /* EXP_40    */
+       {  5, GF_MISSILE,    }, /* EXP_80    */
+       {  5, GF_POIS,       }, /* DISEASE   */
+       {  5, GF_TIME,       }, /* TIME      */
+       {  5, GF_MISSILE,    }, /* EXP_VAMP  */
+       {  5, GF_MANA,       }, /* DR_MANA   */
+       { 60, GF_MISSILE,    }, /* SUPERHURT */
+};
+
+ /*!
+  * @brief 幻覚時の打撃記述テーブル / Weird melee attack types when hallucinating
+  */
+#ifdef JP
+const concptr silly_attacks[MAX_SILLY_ATTACK] =
+{
+       "に小便をかけられた。",
+       "があなたの回りを3回回ってワンと言った。",
+       "にしばきまわされた。",
+       "に靴をなめさせられた。",
+       "にハナクソを飛ばされた。",
+       "にジャン拳で攻撃された。",
+       "があなたの頬を札束でしばいた。",
+       "があなたの前でポージングをした。",
+       "にアカンベーされた。",
+       "に「神の国」発言の撤回を求められた。",
+       "にメッ○ールを飲まされた。",
+       "につっこみを入れられた。",
+       "はあなたと踊った。",
+       "に顔にらく書きをされた。",
+       "に借金の返済をせまられた。",
+       "にスカートをめくられた。",
+       "はあなたの手相を占った。",
+       "から役満を上がられた。",
+       "から愛の告白をされた。",
+       "はあなたを時給500円で雇った。",
+       "はあなたの100の秘密について熱く語った。",
+       "がニャーと鳴いた。",
+       "はあなたに気をつけた。",
+       "はあなたをポリゴン化させた。",
+       "に少しかじられた。",
+       "はアルテマの呪文を唱えた!",
+       "はあなたのスパイクをブロックした。",
+       "はスライド移動した。",
+       "は昇龍拳コマンドの入力に失敗した。",
+       "は拡散波動砲を発射した。",
+       "はデスラー戦法をしかけた。",
+       "にライダーキックで攻撃された。",
+       "に二週間以内でビデオを人に見せないと死ぬ呪いをかけられた。",
+       "はパルプンテを唱えた。",
+       "はスーパーウルトラギャラクティカマグナムを放った。",
+       "にしゃがみ小キックでハメられた。",
+       "にジェットストリームアタックをかけられた。",
+       "はあなたに卍固めをかけて「1、2、3、ダーッ!」と叫んだ。",
+       "は「いくじなし!ばかばかばか!」といって駆け出した。",
+       "が「ごらん、ルーベンスの絵だよ」と言って静かに目を閉じた。",
+       "は言った。「変愚蛮怒、絶賛公開中!」",
+};
+
+/*!
+ * @brief 幻覚時の打撃記述テーブル(フォーマットつき) / Weird melee attack types when hallucinating (%s for strfmt())
+ */
+const concptr silly_attacks2[MAX_SILLY_ATTACK] =
+{
+       "%sに小便をかけた。",
+       "%sの回りを3回回ってワンと言った。",
+       "%sをしばきまわした。",
+       "%sに靴をなめさせた。",
+       "%sにハナクソを飛ばした。",
+       "%sをジャン拳で攻撃した。",
+       "%sの頬を札束でしばいた。",
+       "%sの前でポージングをした。",
+       "%sにアカンベーした。",
+       "%sに「神の国」発言の撤回を求めた。",
+       "%sにメッ○ールを飲ませた。",
+       "%sにつっこみを入れた。",
+       "%sと踊った。",
+       "%sの顔にらく書きをした。",
+       "%sに借金の返済をせまった。",
+       "%sのスカートをめくった。",
+       "%sの手相を占った。",
+       "%sから役満を上がった。",
+       "%sに愛の告白をした。",
+       "%sを時給500円で雇った。",
+       "%sの100の秘密について熱く語った。",
+       "ニャーと鳴いた。",
+       "%sに気をつけた。",
+       "%sをポリゴン化させた。",
+       "%sを少しかじった。",
+       "アルテマの呪文を唱えた!",
+       "%sのスパイクをブロックした。",
+       "スライド移動した。",
+       "昇龍拳コマンドの入力に失敗した。",
+       "%sに拡散波動砲を発射した。",
+       "%sにデスラー戦法をしかけた。",
+       "%sをライダーキックで攻撃した。",
+       "%sに二週間以内でビデオを人に見せないと死ぬ呪いをかけた。",
+       "パルプンテを唱えた。",
+       "%sにスーパーウルトラギャラクティカマグナムを放った。",
+       "%sをしゃがみ小キックでハメた。",
+       "%sにジェットストリームアタックをかけた。",
+       "%sに卍固めをかけて「1、2、3、ダーッ!」と叫んだ。",
+       "「いくじなし!ばかばかばか!」といって駆け出した。",
+       "「ごらん、ルーベンスの絵だよ」と言って静かに目を閉じた。",
+       "言った。「変愚蛮怒、絶賛公開中!」",
+};
+#else
+const concptr silly_attacks[MAX_SILLY_ATTACK] =
+{
+       "smothers",
+       "hugs",
+       "humiliates",
+       "whips",
+       "kisses",
+
+       "disgusts",
+       "pees all over",
+       "passes the gas on",
+       "makes obscene gestures at",
+       "licks",
+
+       "stomps on",
+       "swallows",
+       "drools on",
+       "misses",
+       "shrinks",
+
+       "emasculates",
+       "evaporates",
+       "solidifies",
+       "digitizes",
+       "insta-kills",
+
+       "massacres",
+       "slaughters",
+       "drugs",
+       "psychoanalyzes",
+       "deconstructs",
+
+       "falsifies",
+       "disbelieves",
+       "molests",
+       "pusupusu",
+};
+#endif
+
+
+
+/*!
+ * @brief マーシャルアーツ打撃テーブル
+ */
+const martial_arts ma_blows[MAX_MA] =
+{
+#ifdef JP
+       { "%sを殴った。",                          1, 0, 1, 5, 0 },
+       { "%sを蹴った。",                           2, 0, 1, 7, 0 },
+       { "%sに正拳突きをくらわした。",                         3, 0, 1, 9, 0 },
+       { "%sに膝蹴りをくらわした。",             5, 5, 2, 4, MA_KNEE },
+       { "%sに肘打ちをくらわした。",            7, 5, 1, 12, 0 },
+       { "%sに体当りした。",                           9, 10, 2, 6, 0 },
+       { "%sを蹴った。",                           11, 10, 3, 6, MA_SLOW },
+       { "%sにアッパーをくらわした。",                       13, 12, 5, 5, 6 },
+       { "%sに二段蹴りをくらわした。",                    16, 15, 5, 6, 8 },
+       { "%sに猫爪撃をくらわした。",          20, 20, 5, 8, 0 },
+       { "%sに跳空脚をくらわした。",           24, 25, 6, 8, 10 },
+       { "%sに鷲爪襲をくらわした。",       28, 25, 7, 9, 0 },
+       { "%sに回し蹴りをくらわした。",         32, 30, 8, 10, 10 },
+       { "%sに鉄拳撃をくらわした。",          35, 35, 8, 11, 10 },
+       { "%sに飛空脚をくらわした。",         39, 35, 8, 12, 12 },
+       { "%sに昇龍拳をくらわした。",         43, 35, 9, 12, 16 },
+       { "%sに石破天驚拳をくらわした。",       48, 40, 10, 13, 18 },
+#else
+       { "You punch %s.",                          1, 0, 1, 4, 0 },
+       { "You kick %s.",                           2, 0, 1, 6, 0 },
+       { "You strike %s.",                         3, 0, 1, 7, 0 },
+       { "You hit %s with your knee.",             5, 5, 2, 3, MA_KNEE },
+       { "You hit %s with your elbow.",            7, 5, 1, 8, 0 },
+       { "You butt %s.",                           9, 10, 2, 5, 0 },
+       { "You kick %s.",                           11, 10, 3, 4, MA_SLOW },
+       { "You uppercut %s.",                       13, 12, 4, 4, 6 },
+       { "You double-kick %s.",                    16, 15, 5, 4, 8 },
+       { "You hit %s with a Cat's Claw.",          20, 20, 5, 5, 0 },
+       { "You hit %s with a jump kick.",           25, 25, 5, 6, 10 },
+       { "You hit %s with an Eagle's Claw.",       29, 25, 6, 6, 0 },
+       { "You hit %s with a circle kick.",         33, 30, 6, 8, 10 },
+       { "You hit %s with an Iron Fist.",          37, 35, 8, 8, 10 },
+       { "You hit %s with a flying kick.",         41, 35, 8, 10, 12 },
+       { "You hit %s with a Dragon Fist.",         45, 35, 10, 10, 16 },
+       { "You hit %s with a Crushing Blow.",       48, 35, 10, 12, 18 },
+#endif
+
+};
+
+/*!
+ * @brief 修行僧のターンダメージ算出テーブル
+ */
+const int monk_ave_damage[PY_MAX_LEVEL + 1][3] =
+{
+  {0, 0, 0},
+  {249, 249, 249},
+  {324, 324, 324},
+  {382, 438, 382},
+  {382, 439, 382},
+  {390, 446, 390},
+  {394, 473, 394},
+  {425, 528, 425},
+  {430, 535, 430},
+  {505, 560, 435},
+  {517, 575, 444},
+  {566, 655, 474},
+  {585, 713, 486},
+  {653, 843, 527},
+  {678, 890, 544},
+  {703, 973, 558},
+  {765, 1096, 596},
+  {914, 1146, 614},
+  {943, 1240, 629},
+  {971, 1276, 643},
+  {1018, 1350, 667},
+  {1063, 1464, 688},
+  {1099, 1515, 705},
+  {1128, 1559, 721},
+  {1153, 1640, 735},
+  {1336, 1720, 757},
+  {1387, 1789, 778},
+  {1430, 1893, 794},
+  {1610, 2199, 863},
+  {1666, 2280, 885},
+  {1713, 2401, 908},
+  {1755, 2465, 925},
+  {1909, 2730, 984},
+  {2156, 2891, 1009},
+  {2218, 2970, 1031},
+  {2319, 3107, 1063},
+  {2404, 3290, 1098},
+  {2477, 3389, 1125},
+  {2544, 3483, 1150},
+  {2771, 3899, 1228},
+  {2844, 3982, 1259},
+  {3129, 4064, 1287},
+  {3200, 4190, 1313},
+  {3554, 4674, 1432},
+  {3614, 4738, 1463},
+  {3679, 4853, 1485},
+  {3741, 4905, 1512},
+  {3785, 4943, 1538},
+  {4141, 5532, 1652},
+  {4442, 5581, 1679},
+  {4486, 5636, 1702},
+};
+
+/*!
+ * 腕力による攻撃回数算定値テーブル
+ * Stat Table (STR) -- help index into the "blow" table
+ */
+const byte adj_str_blow[] =
+{
+       3       /* 3 */,
+       4       /* 4 */,
+       5       /* 5 */,
+       6       /* 6 */,
+       7       /* 7 */,
+       8       /* 8 */,
+       9       /* 9 */,
+       10      /* 10 */,
+       11      /* 11 */,
+       12      /* 12 */,
+       13      /* 13 */,
+       14      /* 14 */,
+       15      /* 15 */,
+       16      /* 16 */,
+       17      /* 17 */,
+       20 /* 18/00-18/09 */,
+       30 /* 18/10-18/19 */,
+       40 /* 18/20-18/29 */,
+       50 /* 18/30-18/39 */,
+       60 /* 18/40-18/49 */,
+       70 /* 18/50-18/59 */,
+       80 /* 18/60-18/69 */,
+       90 /* 18/70-18/79 */,
+       100 /* 18/80-18/89 */,
+       110 /* 18/90-18/99 */,
+       120 /* 18/100-18/109 */,
+       130 /* 18/110-18/119 */,
+       140 /* 18/120-18/129 */,
+       150 /* 18/130-18/139 */,
+       160 /* 18/140-18/149 */,
+       170 /* 18/150-18/159 */,
+       180 /* 18/160-18/169 */,
+       190 /* 18/170-18/179 */,
+       200 /* 18/180-18/189 */,
+       210 /* 18/190-18/199 */,
+       220 /* 18/200-18/209 */,
+       230 /* 18/210-18/219 */,
+       240 /* 18/220+ */
+};
+
+
+/*!
+ * 器用さによる攻撃回数インデックステーブル
+ * Stat Table (DEX) -- index into the "blow" table
+ */
+const byte adj_dex_blow[] =
+{
+       0       /* 3 */,
+       0       /* 4 */,
+       0       /* 5 */,
+       0       /* 6 */,
+       0       /* 7 */,
+       0       /* 8 */,
+       0       /* 9 */,
+       1       /* 10 */,
+       1       /* 11 */,
+       1       /* 12 */,
+       1       /* 13 */,
+       1       /* 14 */,
+       2       /* 15 */,
+       2       /* 16 */,
+       2       /* 17 */,
+       2       /* 18/00-18/09 */,
+       3       /* 18/10-18/19 */,
+       3       /* 18/20-18/29 */,
+       3       /* 18/30-18/39 */,
+       4       /* 18/40-18/49 */,
+       4       /* 18/50-18/59 */,
+       5       /* 18/60-18/69 */,
+       5       /* 18/70-18/79 */,
+       6       /* 18/80-18/89 */,
+       6       /* 18/90-18/99 */,
+       7       /* 18/100-18/109 */,
+       7       /* 18/110-18/119 */,
+       8       /* 18/120-18/129 */,
+       8       /* 18/130-18/139 */,
+       9      /* 18/140-18/149 */,
+       9      /* 18/150-18/159 */,
+       10      /* 18/160-18/169 */,
+       10      /* 18/170-18/179 */,
+       11      /* 18/180-18/189 */,
+       11      /* 18/190-18/199 */,
+       12      /* 18/200-18/209 */,
+       12      /* 18/210-18/219 */,
+       13      /* 18/220+ */
+};
+
+
+/*!
+ * @brief
+ * 腕力、器用さに応じた攻撃回数テーブル /
+ * This table is used to help calculate the number of blows the player can
+ * make in a single round of attacks (one player current_world_ptr->game_turn) with a normal weapon.
+ * @details
+ * <pre>
+ * This number ranges from a single blow/round for weak players to up to six
+ * blows/round for powerful warriors.
+ *
+ * Note that certain artifacts and ego-items give "bonus" blows/round.
+ *
+ * First, from the player class, we extract some values:
+ *
+ * Warrior       num = 6; mul = 5; div = MAX(70, weapon_weight);
+ * Berserker     num = 6; mul = 7; div = MAX(70, weapon_weight);
+ * Mage          num = 3; mul = 2; div = MAX(100, weapon_weight);
+ * Priest        num = 5; mul = 3; div = MAX(100, weapon_weight);
+ * Mindcrafter   num = 5; mul = 3; div = MAX(100, weapon_weight);
+ * Rogue         num = 5; mul = 3; div = MAX(40, weapon_weight);
+ * Ranger        num = 5; mul = 4; div = MAX(70, weapon_weight);
+ * Paladin       num = 5; mul = 4; div = MAX(70, weapon_weight);
+ * Weaponsmith   num = 5; mul = 5; div = MAX(150, weapon_weight);
+ * Warrior-Mage  num = 5; mul = 3; div = MAX(70, weapon_weight);
+ * Chaos Warrior num = 5; mul = 4; div = MAX(70, weapon_weight);
+ * Monk          num = 5; mul = 3; div = MAX(60, weapon_weight);
+ * Tourist       num = 4; mul = 3; div = MAX(100, weapon_weight);
+ * Imitator      num = 5; mul = 4; div = MAX(70, weapon_weight);
+ * Beastmaster   num = 5; mul = 3; div = MAX(70, weapon_weight);
+ * Cavalry(Ride) num = 5; mul = 4; div = MAX(70, weapon_weight);
+ * Cavalry(Walk) num = 5; mul = 3; div = MAX(100, weapon_weight);
+ * Sorcerer      num = 1; mul = 1; div = MAX(1, weapon_weight);
+ * Archer        num = 4; mul = 2; div = MAX(70, weapon_weight);
+ * Magic eater   num = 4; mul = 2; div = MAX(70, weapon_weight);
+ * ForceTrainer  num = 4; mul = 2; div = MAX(60, weapon_weight);
+ * Mirror Master num = 3; mul = 3; div = MAX(100, weapon_weight);
+ * Ninja         num = 4; mul = 1; div = MAX(20, weapon_weight);
+ *
+ * To get "P", we look up the relevant "adj_str_blow[]" (see above),
+ * multiply it by "mul", and then divide it by "div".
+ * Increase P by 1 if you wield a weapon two-handed.
+ * Decrease P by 1 if you are a Ninja.
+ *
+ * To get "D", we look up the relevant "adj_dex_blow[]" (see above),
+ *
+ * The player gets "blows_table[P][D]" blows/round, as shown below,
+ * up to a maximum of "num" blows/round, plus any "bonus" blows/round.
+ * </pre>
+ */
+const byte blows_table[12][12] =
+{
+       /* P/D */
+       /*      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11+ */
+       /*      3   10   15  /10  /40  /60  /80 /100 /120 /140 /160 /180  */
+       /* 0 */{        1,   1,   1,   1,   1,   2,   2,   2,   2,   3,   3,   4 },
+       /* 1 */{        1,   1,   1,   2,   2,   2,   3,   3,   3,   4,   4,   4 },
+       /* 2 */{        1,   1,   2,   2,   3,   3,   4,   4,   4,   5,   5,   5 },
+       /* 3 */{        1,   1,   2,   3,   3,   4,   4,   4,   5,   5,   5,   5 },
+       /* 4 */{        1,   1,   2,   3,   3,   4,   4,   5,   5,   5,   5,   5 },
+       /* 5 */{        1,   1,   2,   3,   4,   4,   4,   5,   5,   5,   5,   6 },
+       /* 6 */{        1,   1,   2,   3,   4,   4,   4,   5,   5,   5,   5,   6 },
+       /* 7 */{        1,   2,   2,   3,   4,   4,   4,   5,   5,   5,   5,   6 },
+       /* 8 */{        1,   2,   3,   3,   4,   4,   4,   5,   5,   5,   6,   6 },
+       /* 9 */{        1,   2,   3,   4,   4,   4,   5,   5,   5,   5,   6,   6 },
+       /* 10*/{        2,   2,   3,   4,   4,   4,   5,   5,   5,   6,   6,   6 },
+       /*11+*/{        2,   2,   3,   4,   4,   4,   5,   5,   6,   6,   6,   6 },
+};
 
  /*!
  * @brief プレイヤーからモンスターへの打撃命中判定 /
@@ -824,7 +1277,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
        monster_race    *r_ptr = &r_info[m_ptr->r_idx];
 
        /* Access the weapon */
-       object_type     *o_ptr = &inventory[INVEN_RARM + hand];
+       object_type     *o_ptr = &p_ptr->inventory_list[INVEN_RARM + hand];
 
        GAME_TEXT m_name[MAX_NLEN];
 
@@ -902,8 +1355,8 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b
        {
                if ((r_ptr->level + 10) > p_ptr->lev)
                {
-                       OBJECT_TYPE_VALUE tval = inventory[INVEN_RARM + hand].tval - TV_WEAPON_BEGIN;
-                       OBJECT_SUBTYPE_VALUE sval = inventory[INVEN_RARM + hand].sval;
+                       OBJECT_TYPE_VALUE tval = p_ptr->inventory_list[INVEN_RARM + hand].tval - TV_WEAPON_BEGIN;
+                       OBJECT_SUBTYPE_VALUE sval = p_ptr->inventory_list[INVEN_RARM + hand].sval;
                        int now_exp = p_ptr->weapon_exp[tval][sval];
                        if (now_exp < s_info[p_ptr->pclass].w_max[tval][sval])
                        {
@@ -1740,7 +2193,7 @@ bool py_attack(POSITION y, POSITION x, COMBAT_OPTION_IDX mode)
        if ((r_ptr->flags1 & RF1_FEMALE) &&
                !(p_ptr->stun || p_ptr->confused || p_ptr->image || !m_ptr->ml))
        {
-               if ((inventory[INVEN_RARM].name1 == ART_ZANTETSU) || (inventory[INVEN_LARM].name1 == ART_ZANTETSU))
+               if ((p_ptr->inventory_list[INVEN_RARM].name1 == ART_ZANTETSU) || (p_ptr->inventory_list[INVEN_LARM].name1 == ART_ZANTETSU))
                {
                        msg_print(_("拙者、おなごは斬れぬ!", "I can not attack women!"));
                        return FALSE;
@@ -1758,8 +2211,8 @@ bool py_attack(POSITION y, POSITION x, COMBAT_OPTION_IDX mode)
                !(p_ptr->stun || p_ptr->confused || p_ptr->image ||
                        p_ptr->shero || !m_ptr->ml))
        {
-               if (inventory[INVEN_RARM].name1 == ART_STORMBRINGER) stormbringer = TRUE;
-               if (inventory[INVEN_LARM].name1 == ART_STORMBRINGER) stormbringer = TRUE;
+               if (p_ptr->inventory_list[INVEN_RARM].name1 == ART_STORMBRINGER) stormbringer = TRUE;
+               if (p_ptr->inventory_list[INVEN_LARM].name1 == ART_STORMBRINGER) stormbringer = TRUE;
                if (stormbringer)
                {
                        msg_format(_("黒い刃は強欲に%sを攻撃した!", "Your black blade greedily attacks %s!"), m_name);
@@ -2405,9 +2858,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                i = (INVENTORY_IDX)randint0(INVEN_PACK);
 
                                                /* Obtain the item */
-                                               o_ptr = &inventory[i];
-
-                                               /* Skip non-objects */
+                                               o_ptr = &p_ptr->inventory_list[i];
                                                if (!o_ptr->k_idx) continue;
 
                                                /* Drain charged wands/staffs */
@@ -2540,9 +2991,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                i = (INVENTORY_IDX)randint0(INVEN_PACK);
 
                                                /* Obtain the item */
-                                               o_ptr = &inventory[i];
-
-                                               /* Skip non-objects */
+                                               o_ptr = &p_ptr->inventory_list[i];
                                                if (!o_ptr->k_idx) continue;
 
                                                /* Skip artifacts */
@@ -2618,9 +3067,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                /* Pick an item from the pack */
                                                i = (INVENTORY_IDX)randint0(INVEN_PACK);
 
-                                               o_ptr = &inventory[i];
-
-                                               /* Skip non-objects */
+                                               o_ptr = &p_ptr->inventory_list[i];
                                                if (!o_ptr->k_idx) continue;
 
                                                /* Skip non-food objects */
@@ -2649,7 +3096,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                case RBE_EAT_LITE:
                                {
                                        /* Access the lite */
-                                       o_ptr = &inventory[INVEN_LITE];
+                                       o_ptr = &p_ptr->inventory_list[INVEN_LITE];
                                        get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
 
                                        if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
@@ -3439,7 +3886,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                if (hex_spelling(HEX_SHADOW_CLOAK) && alive && !p_ptr->is_dead)
                                {
                                        HIT_POINT dam = 1;
-                                       object_type *o_armed_ptr = &inventory[INVEN_RARM];
+                                       object_type *o_armed_ptr = &p_ptr->inventory_list[INVEN_RARM];
 
                                        if (!(r_ptr->flagsr & RFR_RES_ALL || r_ptr->flagsr & RFR_RES_DARK))
                                        {
@@ -3450,7 +3897,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                }
 
                                                /* Cursed armor makes damages doubled */
-                                               o_armed_ptr = &inventory[INVEN_BODY];
+                                               o_armed_ptr = &p_ptr->inventory_list[INVEN_BODY];
                                                if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr)) dam *= 2;
 
                                                /* Modify the damage */
@@ -3476,7 +3923,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                                        /* Some cursed armours gives an extra effect */
                                                        for (j = 0; j < 4; j++)
                                                        {
-                                                               o_armed_ptr = &inventory[typ[j][0]];
+                                                               o_armed_ptr = &p_ptr->inventory_list[typ[j][0]];
                                                                if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr))
                                                                        project(0, 0, m_ptr->fy, m_ptr->fx, (p_ptr->lev * 2), typ[j][1], flg, -1);
                                                        }
@@ -3528,7 +3975,7 @@ bool make_attack_normal(MONSTER_IDX m_idx)
                                }
 
                                /* Gain shield experience */
-                               if (object_is_armour(&inventory[INVEN_RARM]) || object_is_armour(&inventory[INVEN_LARM]))
+                               if (object_is_armour(&p_ptr->inventory_list[INVEN_RARM]) || object_is_armour(&p_ptr->inventory_list[INVEN_LARM]))
                                {
                                        int cur = p_ptr->skill_exp[GINOU_SHIELD];
                                        int max = s_info[p_ptr->pclass].s_max[GINOU_SHIELD];
@@ -3752,7 +4199,7 @@ void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *dead, bool *fear,
                                /* Unseen death by normal attack */
                                if (!seen)
                                {
-                                       mon_fight = TRUE;
+                                       current_floor_ptr->monster_noise = TRUE;
                                }
                                /* Death by special attack */
                                else if (note)