OSDN Git Service

74a6e38dfdece2b1fe9454934d0751c0a2f0c33a
[hengband/hengband.git] / src / melee1.c
1 /*!
2  * @file melee1.c
3  * @brief モンスターの打撃処理 / Monster attacks
4  * @date 2014/01/17
5  * @author
6  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research,\n
8  * and not for profit purposes provided that this copyright and statement\n
9  * are included in all such copies.  Other copyrights may also apply.\n
10  * 2014 Deskull rearranged comment for Doxygen.\n
11  * @details
12  */
13
14 #include "angband.h"
15
16
17 /*!
18  * @brief モンスター打撃のクリティカルランクを返す /
19  * Critical blow. All hits that do 95% of total possible damage,
20  * @param dice モンスター打撃のダイス数
21  * @param sides モンスター打撃の最大ダイス目
22  * @param dam プレイヤーに与えたダメージ
23  * @details
24  * and which also do at least 20 damage, or, sometimes, N damage.
25  * This is used only to determine "cuts" and "stuns".
26  */
27 static int monster_critical(int dice, int sides, HIT_POINT dam)
28 {
29         int max = 0;
30         int total = dice * sides;
31
32         /* Must do at least 95% of perfect */
33         if (dam < total * 19 / 20) return (0);
34
35         /* Weak blows rarely work */
36         if ((dam < 20) && (randint0(100) >= dam)) return (0);
37
38         /* Perfect damage */
39         if ((dam >= total) && (dam >= 40)) max++;
40
41         /* Super-charge */
42         if (dam >= 20)
43         {
44                 while (randint0(100) < 2) max++;
45         }
46
47         /* Critical damage */
48         if (dam > 45) return (6 + max);
49         if (dam > 33) return (5 + max);
50         if (dam > 25) return (4 + max);
51         if (dam > 18) return (3 + max);
52         if (dam > 11) return (2 + max);
53         return (1 + max);
54 }
55
56 /*!
57  * @brief モンスター打撃の命中を判定する /
58  * Determine if a monster attack against the player succeeds.
59  * @param power 打撃属性毎の基本命中値
60  * @param level モンスターのレベル
61  * @param stun モンスターの朦朧値
62  * @return TRUEならば命中判定
63  * @details
64  * Always miss 5% of the time, Always hit 5% of the time.
65  * Otherwise, match monster power against player armor.
66  */
67 static int check_hit(int power, int level, int stun)
68 {
69         int i, k, ac;
70
71         /* Percentile dice */
72         k = randint0(100);
73
74         if (stun && one_in_(2)) return FALSE;
75
76         /* Hack -- Always miss or hit */
77         if (k < 10) return (k < 5);
78
79         /* Calculate the "attack quality" */
80         i = (power + (level * 3));
81
82         /* Total armor */
83         ac = p_ptr->ac + p_ptr->to_a;
84         if (p_ptr->special_attack & ATTACK_SUIKEN) ac += (p_ptr->lev * 2);
85
86         /* Power and Level compete against Armor */
87         if ((i > 0) && (randint1(i) > ((ac * 3) / 4))) return (TRUE);
88
89         /* Assume miss */
90         return (FALSE);
91 }
92
93
94
95 /*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */
96 static cptr desc_insult[] =
97 {
98 #ifdef JP
99         "があなたを侮辱した!",
100         "があなたの母を侮辱した!",
101         "があなたを軽蔑した!",
102         "があなたを辱めた!",
103         "があなたを汚した!",
104         "があなたの回りで踊った!",
105         "が猥褻な身ぶりをした!",
106         "があなたをぼんやりと見た!!!",
107         "があなたをパラサイト呼ばわりした!",
108         "があなたをサイボーグ扱いした!"
109 #else
110         "insults you!",
111         "insults your mother!",
112         "gives you the finger!",
113         "humiliates you!",
114         "defiles you!",
115         "dances around you!",
116         "makes obscene gestures!",
117         "moons you!!!"
118         "calls you a parasite!",
119         "calls you a cyborg!"
120 #endif
121
122 };
123
124
125 /*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */
126 static cptr desc_moan[] =
127 {
128 #ifdef JP
129         "は何かを悲しんでいるようだ。",
130         "が彼の飼い犬を見なかったかと尋ねている。",
131         "が縄張りから出て行けと言っている。",
132         "はキノコがどうとか呟いている。"
133 #else
134         "seems sad about something.",
135         "asks if you have seen his dogs.",
136         "tells you to get off his land.",
137         "mumbles something about mushrooms."
138 #endif
139
140 };
141
142
143 /*!
144  * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks.
145  * @param m_idx 打撃を行うモンスターのID
146  * @return 実際に攻撃処理を行った場合TRUEを返す
147  */
148 bool make_attack_normal(MONSTER_IDX m_idx)
149 {
150         monster_type *m_ptr = &m_list[m_idx];
151         monster_race *r_ptr = &r_info[m_ptr->r_idx];
152
153         int ap_cnt;
154
155         int i, k, tmp, ac, rlev;
156         int do_cut, do_stun;
157
158         s32b gold;
159
160         object_type *o_ptr;
161
162         char o_name[MAX_NLEN];
163
164         char m_name[80];
165
166         char ddesc[80];
167
168         bool blinked;
169         bool touched = FALSE, fear = FALSE, alive = TRUE;
170         bool explode = FALSE;
171         bool do_silly_attack = (one_in_(2) && p_ptr->image);
172         HIT_POINT get_damage = 0;
173         int abbreviate = 0;
174
175         /* Not allowed to attack */
176         if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
177
178         if (d_info[dungeon_type].flags1 & DF1_NO_MELEE) return (FALSE);
179
180         /* ...nor if friendly */
181         if (!is_hostile(m_ptr)) return FALSE;
182
183         /* Extract the effective monster level */
184         rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
185
186
187         /* Get the monster name (or "it") */
188         monster_desc(m_name, m_ptr, 0);
189
190         /* Get the "died from" information (i.e. "a kobold") */
191         monster_desc(ddesc, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
192
193         if (p_ptr->special_defense & KATA_IAI)
194         {
195                 msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, draw and cut in one motion before %s move."), m_name);
196                 if (py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_IAI)) return TRUE;
197         }
198
199         if ((p_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (p_ptr->lev*3/5+20)))
200         {
201                 if (kawarimi(TRUE)) return TRUE;
202         }
203
204         /* Assume no blink */
205         blinked = FALSE;
206
207         /* Scan through all four blows */
208         for (ap_cnt = 0; ap_cnt < 4; ap_cnt++)
209         {
210                 bool obvious = FALSE;
211
212                 HIT_POINT power = 0;
213                 HIT_POINT damage = 0;
214
215                 cptr act = NULL;
216
217                 /* Extract the attack infomation */
218                 int effect = r_ptr->blow[ap_cnt].effect;
219                 int method = r_ptr->blow[ap_cnt].method;
220                 int d_dice = r_ptr->blow[ap_cnt].d_dice;
221                 int d_side = r_ptr->blow[ap_cnt].d_side;
222
223
224                 if (!m_ptr->r_idx) break;
225
226                 /* Hack -- no more attacks */
227                 if (!method) break;
228
229                 if (is_pet(m_ptr) && (r_ptr->flags1 & RF1_UNIQUE) && (method == RBM_EXPLODE))
230                 {
231                         method = RBM_HIT;
232                         d_dice /= 10;
233                 }
234
235                 /* Stop if player is dead or gone */
236                 if (!p_ptr->playing || p_ptr->is_dead) break;
237                 if (distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx) > 1) break;
238
239                 /* Handle "leaving" */
240                 if (p_ptr->leaving) break;
241
242                 if (method == RBM_SHOOT) continue;
243
244                 /* Extract the attack "power" */
245                 power = mbe_info[effect].power;
246
247                 /* Total armor */
248                 ac = p_ptr->ac + p_ptr->to_a;
249
250                 /* Monster hits player */
251                 if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr)))
252                 {
253                         /* Always disturbing */
254                         disturb(1, 1);
255
256
257                         /* Hack -- Apply "protection from evil" */
258                         if ((p_ptr->protevil > 0) &&
259                             (r_ptr->flags3 & RF3_EVIL) &&
260                             (p_ptr->lev >= rlev) &&
261                             ((randint0(100) + p_ptr->lev) > 50))
262                         {
263                                 /* Remember the Evil-ness */
264                                 if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL;
265
266                                 /* Message */
267 #ifdef JP
268                                 if (abbreviate)
269                                     msg_format("撃退した。");
270                                 else
271                                     msg_format("%^sは撃退された。", m_name);
272                                 abbreviate = 1;/*2回目以降は省略 */
273 #else
274                                 msg_format("%^s is repelled.", m_name);
275 #endif
276
277
278                                 /* Hack -- Next attack */
279                                 continue;
280                         }
281
282
283                         /* Assume no cut or stun */
284                         do_cut = do_stun = 0;
285
286                         /* Describe the attack method */
287                         switch (method)
288                         {
289                                 case RBM_HIT:
290                                 {
291                                         act = _("殴られた。", "hits you.");
292                                         do_cut = do_stun = 1;
293                                         touched = TRUE;
294                                         sound(SOUND_HIT);
295                                         break;
296                                 }
297
298                                 case RBM_TOUCH:
299                                 {
300                                         act = _("触られた。", "touches you.");
301                                         touched = TRUE;
302                                         sound(SOUND_TOUCH);
303                                         break;
304                                 }
305
306                                 case RBM_PUNCH:
307                                 {
308                                         act = _("パンチされた。", "punches you.");
309                                         touched = TRUE;
310                                         do_stun = 1;
311                                         sound(SOUND_HIT);
312                                         break;
313                                 }
314
315                                 case RBM_KICK:
316                                 {
317                                         act = _("蹴られた。", "kicks you.");
318                                         touched = TRUE;
319                                         do_stun = 1;
320                                         sound(SOUND_HIT);
321                                         break;
322                                 }
323
324                                 case RBM_CLAW:
325                                 {
326                                         act = _("ひっかかれた。", "claws you.");
327                                         touched = TRUE;
328                                         do_cut = 1;
329                                         sound(SOUND_CLAW);
330                                         break;
331                                 }
332
333                                 case RBM_BITE:
334                                 {
335                                         act = _("噛まれた。", "bites you.");
336                                         do_cut = 1;
337                                         touched = TRUE;
338                                         sound(SOUND_BITE);
339                                         break;
340                                 }
341
342                                 case RBM_STING:
343                                 {
344                                         act = _("刺された。", "stings you.");
345                                         touched = TRUE;
346                                         sound(SOUND_STING);
347                                         break;
348                                 }
349
350                                 case RBM_SLASH:
351                                 {
352                                         act = _("斬られた。", "slashes you.");
353                                         touched = TRUE;
354                                         do_cut = 1;
355                                         sound(SOUND_CLAW);
356                                         break;
357                                 }
358
359                                 case RBM_BUTT:
360                                 {
361                                         act = _("角で突かれた。", "butts you.");
362                                         do_stun = 1;
363                                         touched = TRUE;
364                                         sound(SOUND_HIT);
365                                         break;
366                                 }
367
368                                 case RBM_CRUSH:
369                                 {
370                                         act = _("体当たりされた。", "crushes you.");
371                                         do_stun = 1;
372                                         touched = TRUE;
373                                         sound(SOUND_CRUSH);
374                                         break;
375                                 }
376
377                                 case RBM_ENGULF:
378                                 {
379                                         act = _("飲み込まれた。", "engulfs you.");
380                                         touched = TRUE;
381                                         sound(SOUND_CRUSH);
382                                         break;
383                                 }
384
385                                 case RBM_CHARGE:
386                                 {
387                                         abbreviate = -1;
388                                         act = _("は請求書をよこした。", "charges you.");
389                                         touched = TRUE;
390                                         sound(SOUND_BUY); /* Note! This is "charges", not "charges at". */
391                                         break;
392                                 }
393
394                                 case RBM_CRAWL:
395                                 {
396                                         abbreviate = -1;
397                                         act = _("が体の上を這い回った。", "crawls on you.");
398                                         touched = TRUE;
399                                         sound(SOUND_SLIME);
400                                         break;
401                                 }
402
403                                 case RBM_DROOL:
404                                 {
405                                         act = _("よだれをたらされた。", "drools on you.");
406                                         sound(SOUND_SLIME);
407                                         break;
408                                 }
409
410                                 case RBM_SPIT:
411                                 {
412                                         act = _("唾を吐かれた。", "spits on you.");
413                                         sound(SOUND_SLIME);
414                                         break;
415                                 }
416
417                                 case RBM_EXPLODE:
418                                 {
419                                         abbreviate = -1;
420                                         act = _("は爆発した。", "explodes.");
421                                         explode = TRUE;
422                                         break;
423                                 }
424
425                                 case RBM_GAZE:
426                                 {
427                                         act = _("にらまれた。", "gazes at you.");
428                                         break;
429                                 }
430
431                                 case RBM_WAIL:
432                                 {
433                                         act = _("泣き叫ばれた。", "wails at you.");
434                                         sound(SOUND_WAIL);
435                                         break;
436                                 }
437
438                                 case RBM_SPORE:
439                                 {
440                                         act = _("胞子を飛ばされた。", "releases spores at you.");
441                                         sound(SOUND_SLIME);
442                                         break;
443                                 }
444
445                                 case RBM_XXX4:
446                                 {
447                                         abbreviate = -1;
448                                         act = _("が XXX4 を発射した。", "projects XXX4's at you.");
449                                         break;
450                                 }
451
452                                 case RBM_BEG:
453                                 {
454                                         act = _("金をせがまれた。", "begs you for money.");
455                                         sound(SOUND_MOAN);
456                                         break;
457                                 }
458
459                                 case RBM_INSULT:
460                                 {
461 #ifdef JP
462                                         abbreviate = -1;
463 #endif
464                                         act = desc_insult[randint0(m_ptr->r_idx == MON_DEBBY ? 10 : 8)];
465                                         sound(SOUND_MOAN);
466                                         break;
467                                 }
468
469                                 case RBM_MOAN:
470                                 {
471 #ifdef JP
472                                         abbreviate = -1;
473 #endif
474                                         act = desc_moan[randint0(4)];
475                                         sound(SOUND_MOAN);
476                                         break;
477                                 }
478
479                                 case RBM_SHOW:
480                                 {
481 #ifdef JP
482                                         abbreviate = -1;
483 #endif
484                                         if (m_ptr->r_idx == MON_JAIAN)
485                                         {
486 #ifdef JP
487                                                 switch(randint1(15))
488                                                 {
489                                                   case 1:
490                                                   case 6:
491                                                   case 11:
492                                                         act = "「♪お~れはジャイアン~~ガ~キだいしょう~」";
493                                                         break;
494                                                   case 2:
495                                                         act = "「♪て~んかむ~てきのお~とこだぜ~~」";
496                                                         break;
497                                                   case 3:
498                                                         act = "「♪の~び太スネ夫はメじゃないよ~~」";
499                                                         break;
500                                                   case 4:
501                                                         act = "「♪け~んかスポ~ツ~どんとこい~」";
502                                                         break;
503                                                   case 5:
504                                                         act = "「♪うた~も~~う~まいぜ~まかしとけ~」";
505                                                         break;
506                                                   case 7:
507                                                         act = "「♪ま~ちいちば~んのに~んきもの~~」";
508                                                         break;
509                                                   case 8:
510                                                         act = "「♪べんきょうしゅくだいメじゃないよ~~」";
511                                                         break;
512                                                   case 9:
513                                                         act = "「♪きはやさし~くて~ち~からもち~」";
514                                                         break;
515                                                   case 10:
516                                                         act = "「♪かお~も~~スタイルも~バツグンさ~」";
517                                                         break;
518                                                   case 12:
519                                                         act = "「♪がっこうい~ちの~あ~ばれんぼう~~」";
520                                                         break;
521                                                   case 13:
522                                                         act = "「♪ド~ラもドラミもメじゃないよ~~」";
523                                                         break;
524                                                   case 14:
525                                                         act = "「♪よじげんぽけっと~な~くたって~」";
526                                                         break;
527                                                   case 15:
528                                                         act = "「♪あし~の~~ながさ~は~まけないぜ~」";
529                                                         break;
530                                                 }
531 #else
532                                                 act = "horribly sings 'I AM GIAAAAAN. THE BOOOSS OF THE KIIIIDS.'";
533 #endif
534                                         }
535                                         else
536                                         {
537                                                 if (one_in_(3))
538 #ifdef JP
539                                                         act = "は♪僕らは楽しい家族♪と歌っている。";
540                                                 else
541                                                         act = "は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。";
542 #else
543                                                         act = "sings 'We are a happy family.'";
544                                                 else
545                                                         act = "sings 'I love you, you love me.'";
546 #endif
547                                         }
548
549                                         sound(SOUND_SHOW);
550                                         break;
551                                 }
552                         }
553
554                         /* Message */
555                         if (act)
556                         {
557                                 if (do_silly_attack)
558                                 {
559 #ifdef JP
560                                         abbreviate = -1;
561 #endif
562                                         act = silly_attacks[randint0(MAX_SILLY_ATTACK)];
563                                 }
564 #ifdef JP
565                                 if (abbreviate == 0)
566                                     msg_format("%^sに%s", m_name, act);
567                                 else if (abbreviate == 1)
568                                     msg_format("%s", act);
569                                 else /* if (abbreviate == -1) */
570                                     msg_format("%^s%s", m_name, act);
571                                 abbreviate = 1;/*2回目以降は省略 */
572 #else
573                                 msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : "");
574 #endif
575                         }
576
577                         /* Hack -- assume all attacks are obvious */
578                         obvious = TRUE;
579
580                         /* Roll out the damage */
581                         damage = damroll(d_dice, d_side);
582
583                         /*
584                          * Skip the effect when exploding, since the explosion
585                          * already causes the effect.
586                          */
587                         if (explode)
588                                 damage = 0;
589                         /* Apply appropriate damage */
590                         switch (effect)
591                         {
592                                 case 0:
593                                 {
594                                         /* Hack -- Assume obvious */
595                                         obvious = TRUE;
596
597                                         /* Hack -- No damage */
598                                         damage = 0;
599
600                                         break;
601                                 }
602
603                                 case RBE_SUPERHURT:
604                                 {
605                                         if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW())
606                                         {
607                                                 int tmp_damage = damage - (damage * ((ac < 150) ? ac : 150) / 250);
608                                                 msg_print(_("痛恨の一撃!", "It was a critical hit!"));
609                                                 tmp_damage = MAX(damage, tmp_damage*2);
610
611                                                 /* Take damage */
612                                                 get_damage += take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1);
613                                                 break;
614                                         }
615                                 }
616                                 case RBE_HURT:
617                                 {
618                                         /* Obvious */
619                                         obvious = TRUE;
620
621                                         /* Hack -- Player armor reduces total damage */
622                                         damage -= (damage * ((ac < 150) ? ac : 150) / 250);
623
624                                         /* Take damage */
625                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
626
627                                         break;
628                                 }
629
630                                 case RBE_POISON:
631                                 {
632                                         if (explode) break;
633
634                                         /* Take "poison" effect */
635                                         if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()) && !CHECK_MULTISHADOW())
636                                         {
637                                                 if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
638                                                 {
639                                                         obvious = TRUE;
640                                                 }
641                                         }
642
643                                         /* Take some damage */
644                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
645
646                                         /* Learn about the player */
647                                         update_smart_learn(m_idx, DRS_POIS);
648
649                                         break;
650                                 }
651
652                                 case RBE_UN_BONUS:
653                                 {
654                                         if (explode) break;
655
656                                         /* Allow complete resist */
657                                         if (!p_ptr->resist_disen && !CHECK_MULTISHADOW())
658                                         {
659                                                 /* Apply disenchantment */
660                                                 if (apply_disenchant(0))
661                                                 {
662                                                         /* Hack -- Update AC */
663                                                         update_stuff();
664                                                         obvious = TRUE;
665                                                 }
666                                         }
667
668                                         /* Take some damage */
669                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
670
671                                         /* Learn about the player */
672                                         update_smart_learn(m_idx, DRS_DISEN);
673
674                                         break;
675                                 }
676
677                                 case RBE_UN_POWER:
678                                 {
679                                         /* Take some damage */
680                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
681
682                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
683
684                                         /* Find an item */
685                                         for (k = 0; k < 10; k++)
686                                         {
687                                                 /* Pick an item */
688                                                 i = randint0(INVEN_PACK);
689
690                                                 /* Obtain the item */
691                                                 o_ptr = &inventory[i];
692
693                                                 /* Skip non-objects */
694                                                 if (!o_ptr->k_idx) continue;
695
696                                                 /* Drain charged wands/staffs */
697                                                 if (((o_ptr->tval == TV_STAFF) ||
698                                                      (o_ptr->tval == TV_WAND)) &&
699                                                     (o_ptr->pval))
700                                                 {
701                                                         /* Calculate healed hitpoints */
702                                                         int heal=rlev * o_ptr->pval;
703                                                         if( o_ptr->tval == TV_STAFF)
704                                                             heal *=  o_ptr->number;
705
706                                                         /* Don't heal more than max hp */
707                                                         heal = MIN(heal, m_ptr->maxhp - m_ptr->hp);
708
709                                                         /* Message */
710                                                         msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
711
712                                                         /* Obvious */
713                                                         obvious = TRUE;
714
715                                                         /* Heal the monster */
716                                                         m_ptr->hp += (HIT_POINT)heal;
717
718                                                         /* Redraw (later) if needed */
719                                                         if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
720                                                         if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
721
722                                                         /* Uncharge */
723                                                         o_ptr->pval = 0;
724
725                                                         /* Combine / Reorder the pack */
726                                                         p_ptr->notice |= (PN_COMBINE | PN_REORDER);
727
728                                                         /* Window stuff */
729                                                         p_ptr->window |= (PW_INVEN);
730
731                                                         /* Done */
732                                                         break;
733                                                 }
734                                         }
735
736                                         break;
737                                 }
738
739                                 case RBE_EAT_GOLD:
740                                 {
741                                         /* Take some damage */
742                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
743
744                                         /* Confused monsters cannot steal successfully. -LM-*/
745                                         if (MON_CONFUSED(m_ptr)) break;
746
747                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
748
749                                         /* Obvious */
750                                         obvious = TRUE;
751
752                                         /* Saving throw (unless paralyzed) based on dex and level */
753                                         if (!p_ptr->paralyzed &&
754                                             (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] +
755                                                               p_ptr->lev)))
756                                         {
757                                                 /* Saving throw message */
758                                                 msg_print(_("しかし素早く財布を守った!", "You quickly protect your money pouch!"));
759
760                                                 /* Occasional blink anyway */
761                                                 if (randint0(3)) blinked = TRUE;
762                                         }
763
764                                         /* Eat gold */
765                                         else
766                                         {
767                                                 gold = (p_ptr->au / 10) + randint1(25);
768                                                 if (gold < 2) gold = 2;
769                                                 if (gold > 5000) gold = (p_ptr->au / 20) + randint1(3000);
770                                                 if (gold > p_ptr->au) gold = p_ptr->au;
771                                                 p_ptr->au -= gold;
772                                                 if (gold <= 0)
773                                                 {
774                                                         msg_print(_("しかし何も盗まれなかった。", "Nothing was stolen."));
775                                                 }
776                                                 else if (p_ptr->au)
777                                                 {
778                                                         msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter."));
779                                                         msg_format(_("$%ld のお金が盗まれた!", "%ld coins were stolen!"), (long)gold);
780                                                         chg_virtue(V_SACRIFICE, 1);
781                                                 }
782                                                 else
783                                                 {
784                                                         msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter."));
785                                                         msg_print(_("お金が全部盗まれた!", "All of your coins were stolen!"));
786                                                         chg_virtue(V_SACRIFICE, 2);
787                                                 }
788
789                                                 /* Redraw gold */
790                                                 p_ptr->redraw |= (PR_GOLD);
791
792                                                 /* Window stuff */
793                                                 p_ptr->window |= (PW_PLAYER);
794
795                                                 /* Blink away */
796                                                 blinked = TRUE;
797                                         }
798
799                                         break;
800                                 }
801
802                                 case RBE_EAT_ITEM:
803                                 {
804                                         /* Take some damage */
805                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
806
807                                         /* Confused monsters cannot steal successfully. -LM-*/
808                                         if (MON_CONFUSED(m_ptr)) break;
809
810                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
811
812                                         /* Saving throw (unless paralyzed) based on dex and level */
813                                         if (!p_ptr->paralyzed &&
814                                             (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] +
815                                                               p_ptr->lev)))
816                                         {
817                                                 /* Saving throw message */
818                                                 msg_print(_("しかしあわててザックを取り返した!", "You grab hold of your backpack!"));
819
820                                                 /* Occasional "blink" anyway */
821                                                 blinked = TRUE;
822
823                                                 /* Obvious */
824                                                 obvious = TRUE;
825
826                                                 /* Done */
827                                                 break;
828                                         }
829
830                                         /* Find an item */
831                                         for (k = 0; k < 10; k++)
832                                         {
833                                                 s16b o_idx;
834
835                                                 /* Pick an item */
836                                                 i = randint0(INVEN_PACK);
837
838                                                 /* Obtain the item */
839                                                 o_ptr = &inventory[i];
840
841                                                 /* Skip non-objects */
842                                                 if (!o_ptr->k_idx) continue;
843
844                                                 /* Skip artifacts */
845                                                 if (object_is_artifact(o_ptr)) continue;
846
847                                                 /* Get a description */
848                                                 object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
849
850                                                 /* Message */
851 #ifdef JP
852                                                 msg_format("%s(%c)を%s盗まれた!",
853                                                            o_name, index_to_label(i),
854                                                            ((o_ptr->number > 1) ? "一つ" : ""));
855 #else
856                                                 msg_format("%sour %s (%c) was stolen!",
857                                                            ((o_ptr->number > 1) ? "One of y" : "Y"),
858                                                            o_name, index_to_label(i));
859 #endif
860
861                                                 chg_virtue(V_SACRIFICE, 1);
862
863
864                                                 /* Make an object */
865                                                 o_idx = o_pop();
866
867                                                 /* Success */
868                                                 if (o_idx)
869                                                 {
870                                                         object_type *j_ptr;
871
872                                                         /* Get new object */
873                                                         j_ptr = &o_list[o_idx];
874
875                                                         /* Copy object */
876                                                         object_copy(j_ptr, o_ptr);
877
878                                                         /* Modify number */
879                                                         j_ptr->number = 1;
880
881                                                         /* Hack -- If a rod or wand, allocate total
882                                                          * maximum timeouts or charges between those
883                                                          * stolen and those missed. -LM-
884                                                          */
885                                                         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
886                                                         {
887                                                                 j_ptr->pval = o_ptr->pval / o_ptr->number;
888                                                                 o_ptr->pval -= j_ptr->pval;
889                                                         }
890
891                                                         /* Forget mark */
892                                                         j_ptr->marked = OM_TOUCHED;
893
894                                                         /* Memorize monster */
895                                                         j_ptr->held_m_idx = m_idx;
896
897                                                         /* Build stack */
898                                                         j_ptr->next_o_idx = m_ptr->hold_o_idx;
899
900                                                         /* Build stack */
901                                                         m_ptr->hold_o_idx = o_idx;
902                                                 }
903
904                                                 /* Steal the items */
905                                                 inven_item_increase(i, -1);
906                                                 inven_item_optimize(i);
907
908                                                 /* Obvious */
909                                                 obvious = TRUE;
910
911                                                 /* Blink away */
912                                                 blinked = TRUE;
913
914                                                 /* Done */
915                                                 break;
916                                         }
917
918                                         break;
919                                 }
920
921                                 case RBE_EAT_FOOD:
922                                 {
923                                         /* Take some damage */
924                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
925
926                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
927
928                                         /* Steal some food */
929                                         for (k = 0; k < 10; k++)
930                                         {
931                                                 /* Pick an item from the pack */
932                                                 i = randint0(INVEN_PACK);
933
934                                                 /* Get the item */
935                                                 o_ptr = &inventory[i];
936
937                                                 /* Skip non-objects */
938                                                 if (!o_ptr->k_idx) continue;
939
940                                                 /* Skip non-food objects */
941                                                 if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue;
942
943                                                 /* Get a description */
944                                                 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
945
946                                                 /* Message */
947 #ifdef JP
948                                                 msg_format("%s(%c)を%s食べられてしまった!",
949                                                           o_name, index_to_label(i),
950                                                           ((o_ptr->number > 1) ? "一つ" : ""));
951 #else
952                                                 msg_format("%sour %s (%c) was eaten!",
953                                                            ((o_ptr->number > 1) ? "One of y" : "Y"),
954                                                            o_name, index_to_label(i));
955 #endif
956
957
958                                                 /* Steal the items */
959                                                 inven_item_increase(i, -1);
960                                                 inven_item_optimize(i);
961
962                                                 /* Obvious */
963                                                 obvious = TRUE;
964
965                                                 /* Done */
966                                                 break;
967                                         }
968
969                                         break;
970                                 }
971
972                                 case RBE_EAT_LITE:
973                                 {
974                                         /* Access the lite */
975                                         o_ptr = &inventory[INVEN_LITE];
976
977                                         /* Take some damage */
978                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
979
980                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
981
982                                         /* Drain fuel */
983                                         if ((o_ptr->xtra4 > 0) && (!object_is_fixed_artifact(o_ptr)))
984                                         {
985                                                 /* Reduce fuel */
986                                                 o_ptr->xtra4 -= (s16b)(250 + randint1(250));
987                                                 if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1;
988
989                                                 /* Notice */
990                                                 if (!p_ptr->blind)
991                                                 {
992                                                         msg_print(_("明かりが暗くなってしまった。", "Your light dims."));
993                                                         obvious = TRUE;
994                                                 }
995
996                                                 /* Window stuff */
997                                                 p_ptr->window |= (PW_EQUIP);
998                                         }
999
1000                                         break;
1001                                 }
1002
1003                                 case RBE_ACID:
1004                                 {
1005                                         if (explode) break;
1006                                         /* Obvious */
1007                                         obvious = TRUE;
1008
1009                                         /* Message */
1010                                         msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
1011
1012                                         /* Special damage */
1013                                         get_damage += acid_dam(damage, ddesc, -1, FALSE);
1014
1015                                         /* Hack -- Update AC */
1016                                         update_stuff();
1017
1018                                         /* Learn about the player */
1019                                         update_smart_learn(m_idx, DRS_ACID);
1020
1021                                         break;
1022                                 }
1023
1024                                 case RBE_ELEC:
1025                                 {
1026                                         if (explode) break;
1027                                         /* Obvious */
1028                                         obvious = TRUE;
1029
1030                                         /* Message */
1031                                         msg_print(_("電撃を浴びせられた!", "You are struck by electricity!"));
1032
1033                                         /* Special damage */
1034                                         get_damage += elec_dam(damage, ddesc, -1, FALSE);
1035
1036                                         /* Learn about the player */
1037                                         update_smart_learn(m_idx, DRS_ELEC);
1038
1039                                         break;
1040                                 }
1041
1042                                 case RBE_FIRE:
1043                                 {
1044                                         if (explode) break;
1045                                         /* Obvious */
1046                                         obvious = TRUE;
1047
1048                                         /* Message */
1049                                         msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!"));
1050
1051                                         /* Special damage */
1052                                         get_damage += fire_dam(damage, ddesc, -1, FALSE);
1053
1054                                         /* Learn about the player */
1055                                         update_smart_learn(m_idx, DRS_FIRE);
1056
1057                                         break;
1058                                 }
1059
1060                                 case RBE_COLD:
1061                                 {
1062                                         if (explode) break;
1063                                         /* Obvious */
1064                                         obvious = TRUE;
1065
1066                                         /* Message */
1067                                         msg_print(_("全身が冷気で覆われた!", "You are covered with frost!"));
1068
1069                                         /* Special damage */
1070                                         get_damage += cold_dam(damage, ddesc, -1, FALSE);
1071
1072                                         /* Learn about the player */
1073                                         update_smart_learn(m_idx, DRS_COLD);
1074
1075                                         break;
1076                                 }
1077
1078                                 case RBE_BLIND:
1079                                 {
1080                                         /* Take damage */
1081                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1082
1083                                         if (p_ptr->is_dead) break;
1084
1085                                         /* Increase "blind" */
1086                                         if (!p_ptr->resist_blind && !CHECK_MULTISHADOW())
1087                                         {
1088                                                 if (set_blind(p_ptr->blind + 10 + randint1(rlev)))
1089                                                 {
1090 #ifdef JP
1091                                                         if (m_ptr->r_idx == MON_DIO) msg_print("どうだッ!この血の目潰しはッ!");
1092 #else
1093                                                         /* nanka */
1094 #endif
1095                                                         obvious = TRUE;
1096                                                 }
1097                                         }
1098
1099                                         /* Learn about the player */
1100                                         update_smart_learn(m_idx, DRS_BLIND);
1101
1102                                         break;
1103                                 }
1104
1105                                 case RBE_CONFUSE:
1106                                 {
1107                                         if (explode) break;
1108                                         /* Take damage */
1109                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1110
1111                                         if (p_ptr->is_dead) break;
1112
1113                                         /* Increase "confused" */
1114                                         if (!p_ptr->resist_conf && !CHECK_MULTISHADOW())
1115                                         {
1116                                                 if (set_confused(p_ptr->confused + 3 + randint1(rlev)))
1117                                                 {
1118                                                         obvious = TRUE;
1119                                                 }
1120                                         }
1121
1122                                         /* Learn about the player */
1123                                         update_smart_learn(m_idx, DRS_CONF);
1124
1125                                         break;
1126                                 }
1127
1128                                 case RBE_TERRIFY:
1129                                 {
1130                                         /* Take damage */
1131                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1132
1133                                         if (p_ptr->is_dead) break;
1134
1135                                         /* Increase "afraid" */
1136                                         if (CHECK_MULTISHADOW())
1137                                         {
1138                                                 /* Do nothing */
1139                                         }
1140                                         else if (p_ptr->resist_fear)
1141                                         {
1142                                                 msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!"));
1143                                                 obvious = TRUE;
1144                                         }
1145                                         else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
1146                                         {
1147                                                 msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!"));
1148                                                 obvious = TRUE;
1149                                         }
1150                                         else
1151                                         {
1152                                                 if (set_afraid(p_ptr->afraid + 3 + randint1(rlev)))
1153                                                 {
1154                                                         obvious = TRUE;
1155                                                 }
1156                                         }
1157
1158                                         /* Learn about the player */
1159                                         update_smart_learn(m_idx, DRS_FEAR);
1160
1161                                         break;
1162                                 }
1163
1164                                 case RBE_PARALYZE:
1165                                 {
1166                                         /* Take damage */
1167                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1168
1169                                         if (p_ptr->is_dead) break;
1170
1171                                         /* Increase "paralyzed" */
1172                                         if (CHECK_MULTISHADOW())
1173                                         {
1174                                                 /* Do nothing */
1175                                         }
1176                                         else if (p_ptr->free_act)
1177                                         {
1178                                                 msg_print(_("しかし効果がなかった!", "You are unaffected!"));
1179                                                 obvious = TRUE;
1180                                         }
1181                                         else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
1182                                         {
1183                                                 msg_print(_("しかし効力を跳ね返した!", "You resist the effects!"));
1184                                                 obvious = TRUE;
1185                                         }
1186                                         else
1187                                         {
1188                                                 if (!p_ptr->paralyzed)
1189                                                 {
1190                                                         if (set_paralyzed(3 + randint1(rlev)))
1191                                                         {
1192                                                                 obvious = TRUE;
1193                                                         }
1194                                                 }
1195                                         }
1196
1197                                         /* Learn about the player */
1198                                         update_smart_learn(m_idx, DRS_FREE);
1199
1200                                         break;
1201                                 }
1202
1203                                 case RBE_LOSE_STR:
1204                                 {
1205                                         /* Damage (physical) */
1206                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1207
1208                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1209
1210                                         /* Damage (stat) */
1211                                         if (do_dec_stat(A_STR)) obvious = TRUE;
1212
1213                                         break;
1214                                 }
1215
1216                                 case RBE_LOSE_INT:
1217                                 {
1218                                         /* Damage (physical) */
1219                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1220
1221                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1222
1223                                         /* Damage (stat) */
1224                                         if (do_dec_stat(A_INT)) obvious = TRUE;
1225
1226                                         break;
1227                                 }
1228
1229                                 case RBE_LOSE_WIS:
1230                                 {
1231                                         /* Damage (physical) */
1232                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1233
1234                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1235
1236                                         /* Damage (stat) */
1237                                         if (do_dec_stat(A_WIS)) obvious = TRUE;
1238
1239                                         break;
1240                                 }
1241
1242                                 case RBE_LOSE_DEX:
1243                                 {
1244                                         /* Damage (physical) */
1245                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1246
1247                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1248
1249                                         /* Damage (stat) */
1250                                         if (do_dec_stat(A_DEX)) obvious = TRUE;
1251
1252                                         break;
1253                                 }
1254
1255                                 case RBE_LOSE_CON:
1256                                 {
1257                                         /* Damage (physical) */
1258                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1259
1260                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1261
1262                                         /* Damage (stat) */
1263                                         if (do_dec_stat(A_CON)) obvious = TRUE;
1264
1265                                         break;
1266                                 }
1267
1268                                 case RBE_LOSE_CHR:
1269                                 {
1270                                         /* Damage (physical) */
1271                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1272
1273                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1274
1275                                         /* Damage (stat) */
1276                                         if (do_dec_stat(A_CHR)) obvious = TRUE;
1277
1278                                         break;
1279                                 }
1280
1281                                 case RBE_LOSE_ALL:
1282                                 {
1283                                         /* Damage (physical) */
1284                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1285
1286                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1287
1288                                         /* Damage (stats) */
1289                                         if (do_dec_stat(A_STR)) obvious = TRUE;
1290                                         if (do_dec_stat(A_DEX)) obvious = TRUE;
1291                                         if (do_dec_stat(A_CON)) obvious = TRUE;
1292                                         if (do_dec_stat(A_INT)) obvious = TRUE;
1293                                         if (do_dec_stat(A_WIS)) obvious = TRUE;
1294                                         if (do_dec_stat(A_CHR)) obvious = TRUE;
1295
1296                                         break;
1297                                 }
1298
1299                                 case RBE_SHATTER:
1300                                 {
1301                                         /* Obvious */
1302                                         obvious = TRUE;
1303
1304                                         /* Hack -- Reduce damage based on the player armor class */
1305                                         damage -= (damage * ((ac < 150) ? ac : 150) / 250);
1306
1307                                         /* Take damage */
1308                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1309
1310                                         /* Radius 8 earthquake centered at the monster */
1311                                         if (damage > 23 || explode)
1312                                         {
1313                                                 earthquake_aux(m_ptr->fy, m_ptr->fx, 8, m_idx);
1314                                         }
1315
1316                                         break;
1317                                 }
1318
1319                                 case RBE_EXP_10:
1320                                 {
1321                                         s32b d = damroll(10, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1322
1323                                         /* Obvious */
1324                                         obvious = TRUE;
1325
1326                                         /* Take damage */
1327                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1328
1329                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1330
1331                                         (void)drain_exp(d, d / 10, 95);
1332                                         break;
1333                                 }
1334
1335                                 case RBE_EXP_20:
1336                                 {
1337                                         s32b d = damroll(20, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1338
1339                                         /* Obvious */
1340                                         obvious = TRUE;
1341
1342                                         /* Take damage */
1343                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1344
1345                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1346
1347                                         (void)drain_exp(d, d / 10, 90);
1348                                         break;
1349                                 }
1350
1351                                 case RBE_EXP_40:
1352                                 {
1353                                         s32b d = damroll(40, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1354
1355                                         /* Obvious */
1356                                         obvious = TRUE;
1357
1358                                         /* Take damage */
1359                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1360
1361                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1362
1363                                         (void)drain_exp(d, d / 10, 75);
1364                                         break;
1365                                 }
1366
1367                                 case RBE_EXP_80:
1368                                 {
1369                                         s32b d = damroll(80, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1370
1371                                         /* Obvious */
1372                                         obvious = TRUE;
1373
1374                                         /* Take damage */
1375                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1376
1377                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1378
1379                                         (void)drain_exp(d, d / 10, 50);
1380                                         break;
1381                                 }
1382
1383                                 case RBE_DISEASE:
1384                                 {
1385                                         /* Take some damage */
1386                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1387
1388                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1389
1390                                         /* Take "poison" effect */
1391                                         if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
1392                                         {
1393                                                 if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
1394                                                 {
1395                                                         obvious = TRUE;
1396                                                 }
1397                                         }
1398
1399                                         /* Damage CON (10% chance)*/
1400                                         if ((randint1(100) < 11) && (p_ptr->prace != RACE_ANDROID))
1401                                         {
1402                                                 /* 1% chance for perm. damage */
1403                                                 bool perm = one_in_(10);
1404                                                 if (dec_stat(A_CON, randint1(10), perm))
1405                                                 {
1406                                                         msg_print(_("病があなたを蝕んでいる気がする。", "You feel strange sickness."));
1407                                                         obvious = TRUE;
1408                                                 }
1409                                         }
1410
1411                                         break;
1412                                 }
1413                                 case RBE_TIME:
1414                                 {
1415                                         if (explode) break;
1416                                         if (!p_ptr->resist_time && !CHECK_MULTISHADOW())
1417                                         {
1418                                                 switch (randint1(10))
1419                                                 {
1420                                                         case 1: case 2: case 3: case 4: case 5:
1421                                                         {
1422                                                                 if (p_ptr->prace == RACE_ANDROID) break;
1423                                                                 msg_print(_("人生が逆戻りした気がする。", "You feel life has clocked back."));
1424                                                                 lose_exp(100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE);
1425                                                                 break;
1426                                                         }
1427
1428                                                         case 6: case 7: case 8: case 9:
1429                                                         {
1430                                                                 int stat = randint0(6);
1431
1432                                                                 switch (stat)
1433                                                                 {
1434 #ifdef JP
1435                                                                         case A_STR: act = "強く"; break;
1436                                                                         case A_INT: act = "聡明で"; break;
1437                                                                         case A_WIS: act = "賢明で"; break;
1438                                                                         case A_DEX: act = "器用で"; break;
1439                                                                         case A_CON: act = "健康で"; break;
1440                                                                         case A_CHR: act = "美しく"; break;
1441 #else
1442                                                                         case A_STR: act = "strong"; break;
1443                                                                         case A_INT: act = "bright"; break;
1444                                                                         case A_WIS: act = "wise"; break;
1445                                                                         case A_DEX: act = "agile"; break;
1446                                                                         case A_CON: act = "hale"; break;
1447                                                                         case A_CHR: act = "beautiful"; break;
1448 #endif
1449
1450                                                                 }
1451
1452                                                                 msg_format(_("あなたは以前ほど%sなくなってしまった...。", "You're not as %s as you used to be..."), act);
1453                                                                 p_ptr->stat_cur[stat] = (p_ptr->stat_cur[stat] * 3) / 4;
1454                                                                 if (p_ptr->stat_cur[stat] < 3) p_ptr->stat_cur[stat] = 3;
1455                                                                 p_ptr->update |= (PU_BONUS);
1456                                                                 break;
1457                                                         }
1458
1459                                                         case 10:
1460                                                         {
1461                                                                 msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be..."));
1462
1463                                                                 for (k = 0; k < 6; k++)
1464                                                                 {
1465                                                                         p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8;
1466                                                                         if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3;
1467                                                                 }
1468                                                                 p_ptr->update |= (PU_BONUS);
1469                                                                 break;
1470                                                         }
1471                                                 }
1472                                         }
1473                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1474
1475                                         break;
1476                                 }
1477                                 case RBE_DR_LIFE:
1478                                 {
1479                                         s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1480                                         bool resist_drain;
1481
1482                                         /* Obvious */
1483                                         obvious = TRUE;
1484
1485                                         /* Take damage */
1486                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1487
1488                                         if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1489
1490                                         resist_drain = !drain_exp(d, d / 10, 50);
1491
1492                                         /* Heal the attacker? */
1493                                         if (p_ptr->mimic_form)
1494                                         {
1495                                                 if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING)
1496                                                         resist_drain = TRUE;
1497                                         }
1498                                         else
1499                                         {
1500                                                 switch (p_ptr->prace)
1501                                                 {
1502                                                 case RACE_ZOMBIE:
1503                                                 case RACE_VAMPIRE:
1504                                                 case RACE_SPECTRE:
1505                                                 case RACE_SKELETON:
1506                                                 case RACE_DEMON:
1507                                                 case RACE_GOLEM:
1508                                                 case RACE_ANDROID:
1509                                                         resist_drain = TRUE;
1510                                                         break;
1511                                                 }
1512                                         }
1513
1514                                         if ((damage > 5) && !resist_drain)
1515                                         {
1516                                                 bool did_heal = FALSE;
1517
1518                                                 if (m_ptr->hp < m_ptr->maxhp) did_heal = TRUE;
1519
1520                                                 /* Heal */
1521                                                 m_ptr->hp += damroll(4, damage / 6);
1522                                                 if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
1523
1524                                                 /* Redraw (later) if needed */
1525                                                 if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
1526                                                 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
1527
1528                                                 /* Special message */
1529                                                 if (m_ptr->ml && did_heal)
1530                                                 {
1531                                                         msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), m_name);
1532                                                 }
1533                                         }
1534
1535                                         break;
1536                                 }
1537                                 case RBE_DR_MANA:
1538                                 {
1539                                         /* Obvious */
1540                                         obvious = TRUE;
1541
1542                                         if (CHECK_MULTISHADOW())
1543                                         {
1544                                                 msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, you are unharmed!"));
1545                                         }
1546                                         else
1547                                         {
1548                                                 do_cut = 0;
1549
1550                                                 /* Take damage */
1551                                                 p_ptr->csp -= damage;
1552                                                 if (p_ptr->csp < 0)
1553                                                 {
1554                                                         p_ptr->csp = 0;
1555                                                         p_ptr->csp_frac = 0;
1556                                                 }
1557
1558                                                 p_ptr->redraw |= (PR_MANA);
1559                                         }
1560
1561                                         /* Learn about the player */
1562                                         update_smart_learn(m_idx, DRS_MANA);
1563
1564                                         break;
1565                                 }
1566                                 case RBE_INERTIA:
1567                                 {
1568                                         /* Take damage */
1569                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1570
1571                                         if (p_ptr->is_dead) break;
1572
1573                                         /* Decrease speed */
1574                                         if (CHECK_MULTISHADOW())
1575                                         {
1576                                                 /* Do nothing */
1577                                         }
1578                                         else
1579                                         {
1580                                                 if (set_slow((p_ptr->slow + 4 + randint0(rlev / 10)), FALSE))
1581                                                 {
1582                                                         obvious = TRUE;
1583                                                 }
1584                                         }
1585
1586                                         break;
1587                                 }
1588                                 case RBE_STUN:
1589                                 {
1590                                         /* Take damage */
1591                                         get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1592
1593                                         if (p_ptr->is_dead) break;
1594
1595                                         /* Decrease speed */
1596                                         if (p_ptr->resist_sound || CHECK_MULTISHADOW())
1597                                         {
1598                                                 /* Do nothing */
1599                                         }
1600                                         else
1601                                         {
1602                                                 if (set_stun(p_ptr->stun + 10 + randint1(r_ptr->level / 4)))
1603                                                 {
1604                                                         obvious = TRUE;
1605                                                 }
1606                                         }
1607
1608                                         break;
1609                                 }
1610                         }
1611
1612                         /* Hack -- only one of cut or stun */
1613                         if (do_cut && do_stun)
1614                         {
1615                                 /* Cancel cut */
1616                                 if (randint0(100) < 50)
1617                                 {
1618                                         do_cut = 0;
1619                                 }
1620
1621                                 /* Cancel stun */
1622                                 else
1623                                 {
1624                                         do_stun = 0;
1625                                 }
1626                         }
1627
1628                         /* Handle cut */
1629                         if (do_cut)
1630                         {
1631                                 int cut_plus = 0;
1632
1633                                 /* Critical hit (zero if non-critical) */
1634                                 tmp = monster_critical(d_dice, d_side, damage);
1635
1636                                 /* Roll for damage */
1637                                 switch (tmp)
1638                                 {
1639                                         case 0: cut_plus = 0; break;
1640                                         case 1: cut_plus = randint1(5); break;
1641                                         case 2: cut_plus = randint1(5) + 5; break;
1642                                         case 3: cut_plus = randint1(20) + 20; break;
1643                                         case 4: cut_plus = randint1(50) + 50; break;
1644                                         case 5: cut_plus = randint1(100) + 100; break;
1645                                         case 6: cut_plus = 300; break;
1646                                         default: cut_plus = 500; break;
1647                                 }
1648
1649                                 /* Apply the cut */
1650                                 if (cut_plus) (void)set_cut(p_ptr->cut + cut_plus);
1651                         }
1652
1653                         /* Handle stun */
1654                         if (do_stun)
1655                         {
1656                                 int stun_plus = 0;
1657
1658                                 /* Critical hit (zero if non-critical) */
1659                                 tmp = monster_critical(d_dice, d_side, damage);
1660
1661                                 /* Roll for damage */
1662                                 switch (tmp)
1663                                 {
1664                                         case 0: stun_plus = 0; break;
1665                                         case 1: stun_plus = randint1(5); break;
1666                                         case 2: stun_plus = randint1(5) + 10; break;
1667                                         case 3: stun_plus = randint1(10) + 20; break;
1668                                         case 4: stun_plus = randint1(15) + 30; break;
1669                                         case 5: stun_plus = randint1(20) + 40; break;
1670                                         case 6: stun_plus = 80; break;
1671                                         default: stun_plus = 150; break;
1672                                 }
1673
1674                                 /* Apply the stun */
1675                                 if (stun_plus) (void)set_stun(p_ptr->stun + stun_plus);
1676                         }
1677
1678                         if (explode)
1679                         {
1680                                 sound(SOUND_EXPLODE);
1681
1682                                 if (mon_take_hit(m_idx, m_ptr->hp + 1, &fear, NULL))
1683                                 {
1684                                         blinked = FALSE;
1685                                         alive = FALSE;
1686                                 }
1687                         }
1688
1689                         if (touched)
1690                         {
1691                                 if (p_ptr->sh_fire && alive && !p_ptr->is_dead)
1692                                 {
1693                                         if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK))
1694                                         {
1695                                                 HIT_POINT dam = damroll(2, 6);
1696
1697                                                 /* Modify the damage */
1698                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1699
1700 #ifdef JP
1701                                                 msg_format("%^sは突然熱くなった!", m_name);
1702                                                 if (mon_take_hit(m_idx, dam, &fear,
1703                                                     "は灰の山になった。"))
1704 #else
1705                                                 msg_format("%^s is suddenly very hot!", m_name);
1706
1707                                                 if (mon_take_hit(m_idx, dam, &fear,
1708                                                     " turns into a pile of ash."))
1709 #endif
1710
1711                                                 {
1712                                                         blinked = FALSE;
1713                                                         alive = FALSE;
1714                                                 }
1715                                         }
1716                                         else
1717                                         {
1718                                                 if (is_original_ap_and_seen(m_ptr))
1719                                                         r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
1720                                         }
1721                                 }
1722
1723                                 if (p_ptr->sh_elec && alive && !p_ptr->is_dead)
1724                                 {
1725                                         if (!(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK))
1726                                         {
1727                                                 HIT_POINT dam = damroll(2, 6);
1728
1729                                                 /* Modify the damage */
1730                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1731
1732 #ifdef JP
1733                                                 msg_format("%^sは電撃をくらった!", m_name);
1734                                                 if (mon_take_hit(m_idx, dam, &fear,
1735                                                     "は燃え殻の山になった。"))
1736 #else
1737                                                 msg_format("%^s gets zapped!", m_name);
1738
1739                                                 if (mon_take_hit(m_idx, dam, &fear,
1740                                                     " turns into a pile of cinder."))
1741 #endif
1742
1743                                                 {
1744                                                         blinked = FALSE;
1745                                                         alive = FALSE;
1746                                                 }
1747                                         }
1748                                         else
1749                                         {
1750                                                 if (is_original_ap_and_seen(m_ptr))
1751                                                         r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
1752                                         }
1753                                 }
1754
1755                                 if (p_ptr->sh_cold && alive && !p_ptr->is_dead)
1756                                 {
1757                                         if (!(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK))
1758                                         {
1759                                                 HIT_POINT dam = damroll(2, 6);
1760
1761                                                 /* Modify the damage */
1762                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1763
1764 #ifdef JP
1765                                                 msg_format("%^sは冷気をくらった!", m_name);
1766                                                 if (mon_take_hit(m_idx, dam, &fear,
1767                                                     "は凍りついた。"))
1768 #else
1769                                                 msg_format("%^s is very cold!", m_name);
1770
1771                                                 if (mon_take_hit(m_idx, dam, &fear,
1772                                                     " was frozen."))
1773 #endif
1774
1775                                                 {
1776                                                         blinked = FALSE;
1777                                                         alive = FALSE;
1778                                                 }
1779                                         }
1780                                         else
1781                                         {
1782                                                 if (is_original_ap_and_seen(m_ptr))
1783                                                         r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
1784                                         }
1785                                 }
1786
1787                                 /* by henkma */
1788                                 if (p_ptr->dustrobe && alive && !p_ptr->is_dead)
1789                                 {
1790                                         if (!(r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK))
1791                                         {
1792                                                 HIT_POINT dam = damroll(2, 6);
1793
1794                                                 /* Modify the damage */
1795                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1796
1797 #ifdef JP
1798                                                 msg_format("%^sは鏡の破片をくらった!", m_name);
1799                                                 if (mon_take_hit(m_idx, dam, &fear,
1800                                                     "はズタズタになった。"))
1801 #else
1802                                                 msg_format("%^s gets zapped!", m_name);
1803
1804                                                 if (mon_take_hit(m_idx, dam, &fear,
1805                                                     " had torn to pieces."))
1806 #endif
1807                                                 {
1808                                                         blinked = FALSE;
1809                                                         alive = FALSE;
1810                                                 }
1811                                         }
1812                                         else
1813                                         {
1814                                                 if (is_original_ap_and_seen(m_ptr))
1815                                                         r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
1816                                         }
1817
1818                                         if (is_mirror_grid(&cave[p_ptr->y][p_ptr->x]))
1819                                         {
1820                                                 teleport_player(10, 0L);
1821                                         }
1822                                 }
1823
1824                                 if (p_ptr->tim_sh_holy && alive && !p_ptr->is_dead)
1825                                 {
1826                                         if (r_ptr->flags3 & RF3_EVIL)
1827                                         {
1828                                                 if (!(r_ptr->flagsr & RFR_RES_ALL))
1829                                                 {
1830                                                         HIT_POINT dam = damroll(2, 6);
1831
1832                                                         /* Modify the damage */
1833                                                         dam = mon_damage_mod(m_ptr, dam, FALSE);
1834
1835 #ifdef JP
1836                                                         msg_format("%^sは聖なるオーラで傷ついた!", m_name);
1837                                                         if (mon_take_hit(m_idx, dam, &fear,
1838                                                             "は倒れた。"))
1839 #else
1840                                                         msg_format("%^s is injured by holy power!", m_name);
1841
1842                                                         if (mon_take_hit(m_idx, dam, &fear,
1843                                                             " is destroyed."))
1844 #endif
1845                                                         {
1846                                                                 blinked = FALSE;
1847                                                                 alive = FALSE;
1848                                                         }
1849                                                         if (is_original_ap_and_seen(m_ptr))
1850                                                                 r_ptr->r_flags3 |= RF3_EVIL;
1851                                                 }
1852                                                 else
1853                                                 {
1854                                                         if (is_original_ap_and_seen(m_ptr))
1855                                                                 r_ptr->r_flagsr |= RFR_RES_ALL;
1856                                                 }
1857                                         }
1858                                 }
1859
1860                                 if (p_ptr->tim_sh_touki && alive && !p_ptr->is_dead)
1861                                 {
1862                                         if (!(r_ptr->flagsr & RFR_RES_ALL))
1863                                         {
1864                                                 HIT_POINT dam = damroll(2, 6);
1865
1866                                                 /* Modify the damage */
1867                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1868
1869 #ifdef JP
1870                                                 msg_format("%^sが鋭い闘気のオーラで傷ついた!", m_name);
1871                                                 if (mon_take_hit(m_idx, dam, &fear,
1872                                                     "は倒れた。"))
1873 #else
1874                                                 msg_format("%^s is injured by the Force", m_name);
1875
1876                                                 if (mon_take_hit(m_idx, dam, &fear,
1877                                                     " is destroyed."))
1878 #endif
1879
1880                                                 {
1881                                                         blinked = FALSE;
1882                                                         alive = FALSE;
1883                                                 }
1884                                         }
1885                                         else
1886                                         {
1887                                                 if (is_original_ap_and_seen(m_ptr))
1888                                                         r_ptr->r_flagsr |= RFR_RES_ALL;
1889                                         }
1890                                 }
1891
1892                                 if (hex_spelling(HEX_SHADOW_CLOAK) && alive && !p_ptr->is_dead)
1893                                 {
1894                                         HIT_POINT dam = 1;
1895                                         object_type *o_armed_ptr = &inventory[INVEN_RARM];
1896
1897                                         if (!(r_ptr->flagsr & RFR_RES_ALL || r_ptr->flagsr & RFR_RES_DARK))
1898                                         {
1899                                                 if (o_armed_ptr->k_idx)
1900                                                 {
1901                                                         int basedam = ((o_armed_ptr->dd + p_ptr->to_dd[0]) * (o_armed_ptr->ds + p_ptr->to_ds[0] + 1));
1902                                                         dam = basedam / 2 + o_armed_ptr->to_d + p_ptr->to_d[0];
1903                                                 }
1904
1905                                                 /* Cursed armor makes damages doubled */
1906                                                 o_armed_ptr = &inventory[INVEN_BODY];
1907                                                 if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr)) dam *= 2;
1908
1909                                                 /* Modify the damage */
1910                                                 dam = mon_damage_mod(m_ptr, dam, FALSE);
1911
1912 #ifdef JP
1913                                                 msg_format("影のオーラが%^sに反撃した!", m_name);
1914                                                 if (mon_take_hit(m_idx, dam, &fear, "は倒れた。"))
1915 #else
1916                                                 msg_format("Enveloped shadows attack %^s.", m_name);
1917
1918                                                 if (mon_take_hit(m_idx, dam, &fear, " is destroyed."))
1919 #endif
1920                                                 {
1921                                                         blinked = FALSE;
1922                                                         alive = FALSE;
1923                                                 }
1924                                                 else /* monster does not dead */
1925                                                 {
1926                                                         int j;
1927                                                         BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
1928                                                         int typ[4][2] = {
1929                                                                 { INVEN_HEAD, GF_OLD_CONF },
1930                                                                 { INVEN_LARM,  GF_OLD_SLEEP },
1931                                                                 { INVEN_HANDS, GF_TURN_ALL },
1932                                                                 { INVEN_FEET, GF_OLD_SLOW }
1933                                                         };
1934
1935                                                         /* Some cursed armours gives an extra effect */
1936                                                         for (j = 0; j < 4; j++)
1937                                                         {
1938                                                                 o_armed_ptr = &inventory[typ[j][0]];
1939                                                                 if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr))
1940                                                                         project(0, 0, m_ptr->fy, m_ptr->fx, (p_ptr->lev * 2), typ[j][1], flg, -1);
1941                                                         }
1942                                                 }
1943                                         }
1944                                         else
1945                                         {
1946                                                 if (is_original_ap_and_seen(m_ptr))
1947                                                         r_ptr->r_flagsr |= (RFR_RES_ALL | RFR_RES_DARK);
1948                                         }
1949                                 }
1950                         }
1951                 }
1952
1953                 /* Monster missed player */
1954                 else
1955                 {
1956                         /* Analyze failed attacks */
1957                         switch (method)
1958                         {
1959                                 case RBM_HIT:
1960                                 case RBM_TOUCH:
1961                                 case RBM_PUNCH:
1962                                 case RBM_KICK:
1963                                 case RBM_CLAW:
1964                                 case RBM_BITE:
1965                                 case RBM_STING:
1966                                 case RBM_SLASH:
1967                                 case RBM_BUTT:
1968                                 case RBM_CRUSH:
1969                                 case RBM_ENGULF:
1970                                 case RBM_CHARGE:
1971
1972                                 /* Visible monsters */
1973                                 if (m_ptr->ml)
1974                                 {
1975                                         /* Disturbing */
1976                                         disturb(1, 1);
1977
1978                                         /* Message */
1979 #ifdef JP
1980                                         if (abbreviate)
1981                                             msg_format("%sかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "");
1982                                         else
1983                                             msg_format("%s%^sの攻撃をかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "", m_name);
1984                                         abbreviate = 1;/*2回目以降は省略 */
1985 #else
1986                                         msg_format("%^s misses you.", m_name);
1987 #endif
1988
1989                                 }
1990                                 damage = 0;
1991
1992                                 break;
1993                         }
1994                 }
1995
1996
1997                 /* Analyze "visible" monsters only */
1998                 if (is_original_ap_and_seen(m_ptr) && !do_silly_attack)
1999                 {
2000                         /* Count "obvious" attacks (and ones that cause damage) */
2001                         if (obvious || damage || (r_ptr->r_blows[ap_cnt] > 10))
2002                         {
2003                                 /* Count attacks of this type */
2004                                 if (r_ptr->r_blows[ap_cnt] < MAX_UCHAR)
2005                                 {
2006                                         r_ptr->r_blows[ap_cnt]++;
2007                                 }
2008                         }
2009                 }
2010
2011                 if (p_ptr->riding && damage)
2012                 {
2013                         char m_steed_name[80];
2014                         monster_desc(m_steed_name, &m_list[p_ptr->riding], 0);
2015                         if (rakuba((damage > 200) ? 200 : damage, FALSE))
2016                         {
2017                                 msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_steed_name);
2018                         }
2019                 }
2020
2021                 if (p_ptr->special_defense & NINJA_KAWARIMI)
2022                 {
2023                         if (kawarimi(FALSE)) return TRUE;
2024                 }
2025         }
2026
2027         /* Hex - revenge damage stored */
2028         revenge_store(get_damage);
2029
2030         if ((p_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE))
2031                 && get_damage > 0 && !p_ptr->is_dead)
2032         {
2033 #ifdef JP
2034                 msg_format("攻撃が%s自身を傷つけた!", m_name);
2035 #else
2036                 char m_name_self[80];
2037
2038                 /* hisself */
2039                 monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
2040
2041                 msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
2042 #endif
2043                 project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
2044                 if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
2045         }
2046
2047         if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7))
2048         {
2049                 char m_target_name[80];
2050                 monster_desc(m_target_name, m_ptr, 0);
2051
2052                 p_ptr->csp -= 7;
2053                 msg_format(_("%^sに反撃した!", "Your counterattack to %s!"), m_target_name);
2054                 py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER);
2055                 fear = FALSE;
2056
2057                 /* Redraw mana */
2058                 p_ptr->redraw |= (PR_MANA);
2059         }
2060
2061         /* Blink away */
2062         if (blinked && alive && !p_ptr->is_dead)
2063         {
2064                 if (teleport_barrier(m_idx))
2065                 {
2066                         msg_print(_("泥棒は笑って逃げ...ようとしたがバリアに防がれた。", "The thief flees laughing...? But magic barrier obstructs it."));
2067                 }
2068                 else
2069                 {
2070                         msg_print(_("泥棒は笑って逃げた!", "The thief flees laughing!"));
2071                         teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
2072                 }
2073         }
2074
2075
2076         /* Always notice cause of death */
2077         if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
2078         {
2079                 r_ptr->r_deaths++;
2080         }
2081
2082         if (m_ptr->ml && fear && alive && !p_ptr->is_dead)
2083         {
2084                 sound(SOUND_FLEE);
2085                 msg_format(_("%^sは恐怖で逃げ出した!", "%^s flees in terror!"), m_name);
2086         }
2087
2088         if (p_ptr->special_defense & KATA_IAI)
2089         {
2090                 set_action(ACTION_NONE);
2091         }
2092
2093         /* Assume we attacked */
2094         return (TRUE);
2095 }