OSDN Git Service

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