OSDN Git Service

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