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