OSDN Git Service

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