OSDN Git Service

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