OSDN Git Service

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