3 * @brief ¥â¥ó¥¹¥¿¡¼¤ÎÂÇ·â½èÍý / Monster attacks
6 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7 * This software may be copied and distributed for educational, research,\n
8 * and not for profit purposes provided that this copyright and statement\n
9 * are included in all such copies. Other copyrights may also apply.\n
10 * 2014 Deskull rearranged comment for Doxygen.\n
18 * @brief ¥â¥ó¥¹¥¿¡¼ÂÇ·â¤Î¥¯¥ê¥Æ¥£¥«¥ë¥é¥ó¥¯¤òÊÖ¤¹ /
19 * Critical blow. All hits that do 95% of total possible damage,
20 * @param dice ¥â¥ó¥¹¥¿¡¼ÂÇ·â¤Î¥À¥¤¥¹¿ô
21 * @param sides ¥â¥ó¥¹¥¿¡¼ÂÇ·â¤ÎºÇÂç¥À¥¤¥¹ÌÜ
22 * @param dam ¥×¥ì¥¤¥ä¡¼¤ËÍ¿¤¨¤¿¥À¥á¡¼¥¸
24 * and which also do at least 20 damage, or, sometimes, N damage.
25 * This is used only to determine "cuts" and "stuns".
27 static int monster_critical(int dice, int sides, int dam)
30 int total = dice * sides;
32 /* Must do at least 95% of perfect */
33 if (dam < total * 19 / 20) return (0);
35 /* Weak blows rarely work */
36 if ((dam < 20) && (randint0(100) >= dam)) return (0);
39 if ((dam >= total) && (dam >= 40)) max++;
44 while (randint0(100) < 2) max++;
48 if (dam > 45) return (6 + max);
49 if (dam > 33) return (5 + max);
50 if (dam > 25) return (4 + max);
51 if (dam > 18) return (3 + max);
52 if (dam > 11) return (2 + max);
57 * @brief ¥â¥ó¥¹¥¿¡¼ÂÇ·â¤ÎÌ¿Ãæ¤òȽÄꤹ¤ë /
58 * Determine if a monster attack against the player succeeds.
59 * @param power ÂÇ·â°ÀËè¤Î´ðËÜÌ¿ÃæÃÍ
60 * @param level ¥â¥ó¥¹¥¿¡¼¤Î¥ì¥Ù¥ë
61 * @param stun ¥â¥ó¥¹¥¿¡¼¤ÎÛ¯Û°ÃÍ
62 * @return TRUE¤Ê¤é¤ÐÌ¿ÃæȽÄê
64 * Always miss 5% of the time, Always hit 5% of the time.
65 * Otherwise, match monster power against player armor.
67 static int check_hit(int power, int level, int stun)
74 if (stun && one_in_(2)) return FALSE;
76 /* Hack -- Always miss or hit */
77 if (k < 10) return (k < 5);
79 /* Calculate the "attack quality" */
80 i = (power + (level * 3));
83 ac = p_ptr->ac + p_ptr->to_a;
84 if (p_ptr->special_attack & ATTACK_SUIKEN) ac += (p_ptr->lev * 2);
86 /* Power and Level compete against Armor */
87 if ((i > 0) && (randint1(i) > ((ac * 3) / 4))) return (TRUE);
95 /*! ¥â¥ó¥¹¥¿¡¼¤ÎÉî¿«¹Ô°Ù¥á¥Ã¥»¡¼¥¸¥Æ¡¼¥Ö¥ë / Hack -- possible "insult" messages */
96 static cptr desc_insult[] =
99 "¤¬¤¢¤Ê¤¿¤òÉî¿«¤·¤¿¡ª",
100 "¤¬¤¢¤Ê¤¿¤ÎÊì¤òÉî¿«¤·¤¿¡ª",
101 "¤¬¤¢¤Ê¤¿¤ò·ÚÊΤ·¤¿¡ª",
102 "¤¬¤¢¤Ê¤¿¤ò¿«¤á¤¿¡ª",
103 "¤¬¤¢¤Ê¤¿¤ò±ø¤·¤¿¡ª",
104 "¤¬¤¢¤Ê¤¿¤Î²ó¤ê¤ÇÍ٤ä¿¡ª",
105 "¤¬àÐêø¤Ê¿È¤Ö¤ê¤ò¤·¤¿¡ª",
106 "¤¬¤¢¤Ê¤¿¤ò¤Ü¤ó¤ä¤ê¤È¸«¤¿¡ª¡ª¡ª",
107 "¤¬¤¢¤Ê¤¿¤ò¥Ñ¥é¥µ¥¤¥È¸Æ¤Ð¤ï¤ê¤·¤¿¡ª",
108 "¤¬¤¢¤Ê¤¿¤ò¥µ¥¤¥Ü¡¼¥°°·¤¤¤·¤¿¡ª"
111 "insults your mother!",
112 "gives you the finger!",
115 "dances around you!",
116 "makes obscene gestures!",
118 "calls you a parasite!",
119 "calls you a cyborg!"
125 /*! ¥Þ¥´¥Ã¥È¤Î¤Ü¤ä¤¥á¥Ã¥»¡¼¥¸¥Æ¡¼¥Ö¥ë / Hack -- possible "insult" messages */
126 static cptr desc_moan[] =
129 "¤Ï²¿¤«¤òÈᤷ¤ó¤Ç¤¤¤ë¤è¤¦¤À¡£",
130 "¤¬Èà¤Î»ô¤¤¸¤¤ò¸«¤Ê¤«¤Ã¤¿¤«¤È¿Ò¤Í¤Æ¤¤¤ë¡£",
131 "¤¬ÆìÄ¥¤ê¤«¤é½Ð¤Æ¹Ô¤±¤È¸À¤Ã¤Æ¤¤¤ë¡£",
132 "¤Ï¥¥Î¥³¤¬¤É¤¦¤È¤«Ò줤¤Æ¤¤¤ë¡£"
134 "seems sad about something.",
135 "asks if you have seen his dogs.",
136 "tells you to get off his land.",
137 "mumbles something about mushrooms."
144 * @brief ¥â¥ó¥¹¥¿¡¼¤«¤é¥×¥ì¥¤¥ä¡¼¤Ø¤ÎÂÇ·â½èÍý / Attack the player via physical attacks.
145 * @param m_idx ÂÇ·â¤ò¹Ô¤¦¥â¥ó¥¹¥¿¡¼¤ÎID
146 * @return ¼ÂºÝ¤Ë¹¶·â½èÍý¤ò¹Ô¤Ã¤¿¾ì¹çTRUE¤òÊÖ¤¹
148 bool make_attack_normal(int m_idx)
150 monster_type *m_ptr = &m_list[m_idx];
152 monster_race *r_ptr = &r_info[m_ptr->r_idx];
156 int i, k, tmp, ac, rlev;
163 char o_name[MAX_NLEN];
170 bool touched = FALSE, fear = FALSE, alive = TRUE;
171 bool explode = FALSE;
172 bool do_silly_attack = (one_in_(2) && p_ptr->image);
178 /* Not allowed to attack */
179 if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
181 if (d_info[dungeon_type].flags1 & DF1_NO_MELEE) return (FALSE);
183 /* ...nor if friendly */
184 if (!is_hostile(m_ptr)) return FALSE;
186 /* Extract the effective monster level */
187 rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
190 /* Get the monster name (or "it") */
191 monster_desc(m_name, m_ptr, 0);
193 /* Get the "died from" information (i.e. "a kobold") */
194 monster_desc(ddesc, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
196 if (p_ptr->special_defense & KATA_IAI)
199 msg_print("Áê¼ê¤¬½±¤¤¤«¤«¤ëÁ°¤ËÁÇÁ᤯Éð´ï¤ò¿¶¤ë¤Ã¤¿¡£");
201 msg_format("You took sen, draw and cut in one motion before %s move.", m_name);
203 if (py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_IAI)) return TRUE;
206 if ((p_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (p_ptr->lev*3/5+20)))
208 if (kawarimi(TRUE)) return TRUE;
211 /* Assume no blink */
214 /* Scan through all four blows */
215 for (ap_cnt = 0; ap_cnt < 4; ap_cnt++)
217 bool obvious = FALSE;
224 /* Extract the attack infomation */
225 int effect = r_ptr->blow[ap_cnt].effect;
226 int method = r_ptr->blow[ap_cnt].method;
227 int d_dice = r_ptr->blow[ap_cnt].d_dice;
228 int d_side = r_ptr->blow[ap_cnt].d_side;
231 if (!m_ptr->r_idx) break;
233 /* Hack -- no more attacks */
236 if (is_pet(m_ptr) && (r_ptr->flags1 & RF1_UNIQUE) && (method == RBM_EXPLODE))
242 /* Stop if player is dead or gone */
243 if (!p_ptr->playing || p_ptr->is_dead) break;
244 if (distance(py, px, m_ptr->fy, m_ptr->fx) > 1) break;
246 /* Handle "leaving" */
247 if (p_ptr->leaving) break;
249 if (method == RBM_SHOOT) continue;
251 /* Extract the attack "power" */
252 power = mbe_info[effect].power;
255 ac = p_ptr->ac + p_ptr->to_a;
257 /* Monster hits player */
258 if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr)))
260 /* Always disturbing */
264 /* Hack -- Apply "protection from evil" */
265 if ((p_ptr->protevil > 0) &&
266 (r_ptr->flags3 & RF3_EVIL) &&
267 (p_ptr->lev >= rlev) &&
268 ((randint0(100) + p_ptr->lev) > 50))
270 /* Remember the Evil-ness */
271 if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL;
276 msg_format("·âÂष¤¿¡£");
278 msg_format("%^s¤Ï·âÂव¤ì¤¿¡£", m_name);
279 abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
281 msg_format("%^s is repelled.", m_name);
285 /* Hack -- Next attack */
290 /* Assume no cut or stun */
291 do_cut = do_stun = 0;
293 /* Describe the attack method */
304 do_cut = do_stun = 1;
315 act = "touches you.";
326 act = "¥Ñ¥ó¥Á¤µ¤ì¤¿¡£";
328 act = "punches you.";
354 act = "¤Ò¤Ã¤«¤«¤ì¤¿¡£";
397 act = "slashes you.";
409 act = "³Ñ¤ÇÆͤ«¤ì¤¿¡£";
423 act = "ÂÎÅö¤¿¤ê¤µ¤ì¤¿¡£";
425 act = "crushes you.";
437 act = "°û¤ß¹þ¤Þ¤ì¤¿¡£";
439 act = "engulfs you.";
451 act = "¤ÏÀÁµá½ñ¤ò¤è¤³¤·¤¿¡£";
453 act = "charges you.";
457 sound(SOUND_BUY); /* Note! This is "charges", not "charges at". */
465 act = "¤¬ÂΤξå¤òÇ礤²ó¤Ã¤¿¡£";
467 act = "crawls on you.";
478 act = "¤è¤À¤ì¤ò¤¿¤é¤µ¤ì¤¿¡£";
480 act = "drools on you.";
490 act = "ÂäòÅǤ«¤ì¤¿¡£";
492 act = "spits on you.";
503 act = "¤ÏÇúȯ¤·¤¿¡£";
515 act = "¤Ë¤é¤Þ¤ì¤¿¡£";
517 act = "gazes at you.";
526 act = "µã¤¶«¤Ð¤ì¤¿¡£";
528 act = "wails at you.";
538 act = "˦»Ò¤òÈô¤Ð¤µ¤ì¤¿¡£";
540 act = "releases spores at you.";
551 act = "¤¬ XXX4 ¤òȯ¼Í¤·¤¿¡£";
553 act = "projects XXX4's at you.";
562 act = "¶â¤ò¤»¤¬¤Þ¤ì¤¿¡£";
564 act = "begs you for money.";
576 act = desc_insult[randint0(m_ptr->r_idx == MON_DEBBY ? 10 : 8)];
586 act = desc_moan[randint0(4)];
596 if (m_ptr->r_idx == MON_JAIAN)
604 act = "¡Ö¢ö¤ª¡Á¤ì¤Ï¥¸¥ã¥¤¥¢¥ó¡Á¡Á¥¬¡Á¥¤À¤¤¤·¤ç¤¦¡Á¡×";
607 act = "¡Ö¢ö¤Æ¡Á¤ó¤«¤à¡Á¤Æ¤¤Î¤ª¡Á¤È¤³¤À¤¼¡Á¡Á¡×";
610 act = "¡Ö¢ö¤Î¡Á¤ÓÂÀ¥¹¥ÍÉפϥᤸ¤ã¤Ê¤¤¤è¡Á¡Á¡×";
613 act = "¡Ö¢ö¤±¡Á¤ó¤«¥¹¥Ý¡Á¥Ä¡Á¤É¤ó¤È¤³¤¤¡Á¡×";
616 act = "¡Ö¢ö¤¦¤¿¡Á¤â¡Á¡Á¤¦¡Á¤Þ¤¤¤¼¡Á¤Þ¤«¤·¤È¤±¡Á¡×";
619 act = "¡Ö¢ö¤Þ¡Á¤Á¤¤¤Á¤Ð¡Á¤ó¤Î¤Ë¡Á¤ó¤¤â¤Î¡Á¡Á¡×";
622 act = "¡Ö¢ö¤Ù¤ó¤¤ç¤¦¤·¤å¤¯¤À¤¤¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×";
625 act = "¡Ö¢ö¤¤Ï¤ä¤µ¤·¡Á¤¯¤Æ¡Á¤Á¡Á¤«¤é¤â¤Á¡Á¡×";
628 act = "¡Ö¢ö¤«¤ª¡Á¤â¡Á¡Á¥¹¥¿¥¤¥ë¤â¡Á¥Ð¥Ä¥°¥ó¤µ¡Á¡×";
631 act = "¡Ö¢ö¤¬¤Ã¤³¤¦¤¤¡Á¤Á¤Î¡Á¤¢¡Á¤Ð¤ì¤ó¤Ü¤¦¡Á¡Á¡×";
634 act = "¡Ö¢ö¥É¡Á¥é¤â¥É¥é¥ß¤â¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×";
637 act = "¡Ö¢ö¤è¤¸¤²¤ó¤Ý¤±¤Ã¤È¡Á¤Ê¡Á¤¯¤¿¤Ã¤Æ¡Á¡×";
640 act = "¡Ö¢ö¤¢¤·¡Á¤Î¡Á¡Á¤Ê¤¬¤µ¡Á¤Ï¡Á¤Þ¤±¤Ê¤¤¤¼¡Á¡×";
644 act = "horribly sings 'I AM GIAAAAAN. THE BOOOSS OF THE KIIIIDS.'";
651 act = "¤Ï¢öËͤé¤Ï³Ú¤·¤¤²È²¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£";
653 act = "¤Ï¢ö¥¢¥¤ ¥é¥Ö ¥æ¡¼¡¢¥æ¡¼ ¥é¥Ö ¥ß¡¼¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£";
655 act = "sings 'We are a happy family.'";
657 act = "sings 'I love you, you love me.'";
674 act = silly_attacks[randint0(MAX_SILLY_ATTACK)];
678 msg_format("%^s¤Ë%s", m_name, act);
679 else if (abbreviate == 1)
680 msg_format("%s", act);
681 else /* if (abbreviate == -1) */
682 msg_format("%^s%s", m_name, act);
683 abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
685 msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : "");
689 /* Hack -- assume all attacks are obvious */
692 /* Roll out the damage */
693 damage = damroll(d_dice, d_side);
696 * Skip the effect when exploding, since the explosion
697 * already causes the effect.
701 /* Apply appropriate damage */
706 /* Hack -- Assume obvious */
709 /* Hack -- No damage */
717 if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW())
719 int tmp_damage = damage - (damage * ((ac < 150) ? ac : 150) / 250);
721 msg_print("Ä˺¨¤Î°ì·â¡ª");
723 msg_print("It was a critical hit!");
726 tmp_damage = MAX(damage, tmp_damage*2);
729 get_damage += take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1);
738 /* Hack -- Player armor reduces total damage */
739 damage -= (damage * ((ac < 150) ? ac : 150) / 250);
742 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
751 /* Take "poison" effect */
752 if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()) && !CHECK_MULTISHADOW())
754 if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
760 /* Take some damage */
761 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
763 /* Learn about the player */
764 update_smart_learn(m_idx, DRS_POIS);
773 /* Allow complete resist */
774 if (!p_ptr->resist_disen && !CHECK_MULTISHADOW())
776 /* Apply disenchantment */
777 if (apply_disenchant(0))
779 /* Hack -- Update AC */
785 /* Take some damage */
786 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
788 /* Learn about the player */
789 update_smart_learn(m_idx, DRS_DISEN);
796 /* Take some damage */
797 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
799 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
802 for (k = 0; k < 10; k++)
805 i = randint0(INVEN_PACK);
807 /* Obtain the item */
808 o_ptr = &inventory[i];
810 /* Skip non-objects */
811 if (!o_ptr->k_idx) continue;
813 /* Drain charged wands/staffs */
814 if (((o_ptr->tval == TV_STAFF) ||
815 (o_ptr->tval == TV_WAND)) &&
818 /* Calculate healed hitpoints */
819 int heal=rlev * o_ptr->pval;
820 if( o_ptr->tval == TV_STAFF)
821 heal *= o_ptr->number;
823 /* Don't heal more than max hp */
824 heal = MIN(heal, m_ptr->maxhp - m_ptr->hp);
828 msg_print("¥¶¥Ã¥¯¤«¤é¥¨¥Í¥ë¥®¡¼¤¬µÛ¤¤¼è¤é¤ì¤¿¡ª");
830 msg_print("Energy drains from your pack!");
837 /* Heal the monster */
840 /* Redraw (later) if needed */
841 if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
842 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
847 /* Combine / Reorder the pack */
848 p_ptr->notice |= (PN_COMBINE | PN_REORDER);
851 p_ptr->window |= (PW_INVEN);
863 /* Take some damage */
864 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
866 /* Confused monsters cannot steal successfully. -LM-*/
867 if (MON_CONFUSED(m_ptr)) break;
869 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
874 /* Saving throw (unless paralyzed) based on dex and level */
875 if (!p_ptr->paralyzed &&
876 (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] +
879 /* Saving throw message */
881 msg_print("¤·¤«¤·ÁÇÁ᤯ºâÉÛ¤ò¼é¤Ã¤¿¡ª");
883 msg_print("You quickly protect your money pouch!");
887 /* Occasional blink anyway */
888 if (randint0(3)) blinked = TRUE;
894 gold = (p_ptr->au / 10) + randint1(25);
895 if (gold < 2) gold = 2;
896 if (gold > 5000) gold = (p_ptr->au / 20) + randint1(3000);
897 if (gold > p_ptr->au) gold = p_ptr->au;
902 msg_print("¤·¤«¤·²¿¤âÅð¤Þ¤ì¤Ê¤«¤Ã¤¿¡£");
904 msg_print("Nothing was stolen.");
911 msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£");
912 msg_format("$%ld ¤Î¤ª¶â¤¬Åð¤Þ¤ì¤¿¡ª", (long)gold);
914 msg_print("Your purse feels lighter.");
915 msg_format("%ld coins were stolen!", (long)gold);
917 chg_virtue(V_SACRIFICE, 1);
922 msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£");
923 msg_print("¤ª¶â¤¬Á´ÉôÅð¤Þ¤ì¤¿¡ª");
925 msg_print("Your purse feels lighter.");
926 msg_print("All of your coins were stolen!");
929 chg_virtue(V_SACRIFICE, 2);
933 p_ptr->redraw |= (PR_GOLD);
936 p_ptr->window |= (PW_PLAYER);
947 /* Take some damage */
948 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
950 /* Confused monsters cannot steal successfully. -LM-*/
951 if (MON_CONFUSED(m_ptr)) break;
953 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
955 /* Saving throw (unless paralyzed) based on dex and level */
956 if (!p_ptr->paralyzed &&
957 (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] +
960 /* Saving throw message */
962 msg_print("¤·¤«¤·¤¢¤ï¤Æ¤Æ¥¶¥Ã¥¯¤ò¼è¤êÊÖ¤·¤¿¡ª");
964 msg_print("You grab hold of your backpack!");
968 /* Occasional "blink" anyway */
979 for (k = 0; k < 10; k++)
984 i = randint0(INVEN_PACK);
986 /* Obtain the item */
987 o_ptr = &inventory[i];
989 /* Skip non-objects */
990 if (!o_ptr->k_idx) continue;
993 if (object_is_artifact(o_ptr)) continue;
995 /* Get a description */
996 object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
1000 msg_format("%s(%c)¤ò%sÅð¤Þ¤ì¤¿¡ª",
1001 o_name, index_to_label(i),
1002 ((o_ptr->number > 1) ? "°ì¤Ä" : ""));
1004 msg_format("%sour %s (%c) was stolen!",
1005 ((o_ptr->number > 1) ? "One of y" : "Y"),
1006 o_name, index_to_label(i));
1009 chg_virtue(V_SACRIFICE, 1);
1012 /* Make an object */
1020 /* Get new object */
1021 j_ptr = &o_list[o_idx];
1024 object_copy(j_ptr, o_ptr);
1029 /* Hack -- If a rod or wand, allocate total
1030 * maximum timeouts or charges between those
1031 * stolen and those missed. -LM-
1033 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
1035 j_ptr->pval = o_ptr->pval / o_ptr->number;
1036 o_ptr->pval -= j_ptr->pval;
1040 j_ptr->marked = OM_TOUCHED;
1042 /* Memorize monster */
1043 j_ptr->held_m_idx = m_idx;
1046 j_ptr->next_o_idx = m_ptr->hold_o_idx;
1049 m_ptr->hold_o_idx = o_idx;
1052 /* Steal the items */
1053 inven_item_increase(i, -1);
1054 inven_item_optimize(i);
1071 /* Take some damage */
1072 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1074 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1076 /* Steal some food */
1077 for (k = 0; k < 10; k++)
1079 /* Pick an item from the pack */
1080 i = randint0(INVEN_PACK);
1083 o_ptr = &inventory[i];
1085 /* Skip non-objects */
1086 if (!o_ptr->k_idx) continue;
1088 /* Skip non-food objects */
1089 if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue;
1091 /* Get a description */
1092 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1096 msg_format("%s(%c)¤ò%s¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª",
1097 o_name, index_to_label(i),
1098 ((o_ptr->number > 1) ? "°ì¤Ä" : ""));
1100 msg_format("%sour %s (%c) was eaten!",
1101 ((o_ptr->number > 1) ? "One of y" : "Y"),
1102 o_name, index_to_label(i));
1106 /* Steal the items */
1107 inven_item_increase(i, -1);
1108 inven_item_optimize(i);
1122 /* Access the lite */
1123 o_ptr = &inventory[INVEN_LITE];
1125 /* Take some damage */
1126 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1128 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1131 if ((o_ptr->xtra4 > 0) && (!object_is_fixed_artifact(o_ptr)))
1134 o_ptr->xtra4 -= (s16b)(250 + randint1(250));
1135 if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1;
1141 msg_print("ÌÀ¤«¤ê¤¬°Å¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¡£");
1143 msg_print("Your light dims.");
1150 p_ptr->window |= (PW_EQUIP);
1164 msg_print("»À¤òÍá¤Ó¤»¤é¤ì¤¿¡ª");
1166 msg_print("You are covered in acid!");
1170 /* Special damage */
1171 get_damage += acid_dam(damage, ddesc, -1, FALSE);
1173 /* Hack -- Update AC */
1176 /* Learn about the player */
1177 update_smart_learn(m_idx, DRS_ACID);
1190 msg_print("ÅÅ·â¤òÍá¤Ó¤»¤é¤ì¤¿¡ª");
1192 msg_print("You are struck by electricity!");
1196 /* Special damage */
1197 get_damage += elec_dam(damage, ddesc, -1, FALSE);
1199 /* Learn about the player */
1200 update_smart_learn(m_idx, DRS_ELEC);
1213 msg_print("Á´¿È¤¬±ê¤ËÊñ¤Þ¤ì¤¿¡ª");
1215 msg_print("You are enveloped in flames!");
1219 /* Special damage */
1220 get_damage += fire_dam(damage, ddesc, -1, FALSE);
1222 /* Learn about the player */
1223 update_smart_learn(m_idx, DRS_FIRE);
1236 msg_print("Á´¿È¤¬Î䵤¤Çʤ¤ï¤ì¤¿¡ª");
1238 msg_print("You are covered with frost!");
1242 /* Special damage */
1243 get_damage += cold_dam(damage, ddesc, -1, FALSE);
1245 /* Learn about the player */
1246 update_smart_learn(m_idx, DRS_COLD);
1254 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1256 if (p_ptr->is_dead) break;
1258 /* Increase "blind" */
1259 if (!p_ptr->resist_blind && !CHECK_MULTISHADOW())
1261 if (set_blind(p_ptr->blind + 10 + randint1(rlev)))
1264 if (m_ptr->r_idx == MON_DIO) msg_print("¤É¤¦¤À¥Ã¡ª¤³¤Î·ì¤ÎÌÜÄÙ¤·¤Ï¥Ã¡ª");
1272 /* Learn about the player */
1273 update_smart_learn(m_idx, DRS_BLIND);
1282 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1284 if (p_ptr->is_dead) break;
1286 /* Increase "confused" */
1287 if (!p_ptr->resist_conf && !CHECK_MULTISHADOW())
1289 if (set_confused(p_ptr->confused + 3 + randint1(rlev)))
1295 /* Learn about the player */
1296 update_smart_learn(m_idx, DRS_CONF);
1304 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1306 if (p_ptr->is_dead) break;
1308 /* Increase "afraid" */
1309 if (CHECK_MULTISHADOW())
1313 else if (p_ptr->resist_fear)
1316 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª");
1318 msg_print("You stand your ground!");
1323 else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
1326 msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª");
1328 msg_print("You stand your ground!");
1335 if (set_afraid(p_ptr->afraid + 3 + randint1(rlev)))
1341 /* Learn about the player */
1342 update_smart_learn(m_idx, DRS_FEAR);
1350 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1352 if (p_ptr->is_dead) break;
1354 /* Increase "paralyzed" */
1355 if (CHECK_MULTISHADOW())
1359 else if (p_ptr->free_act)
1362 msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª");
1364 msg_print("You are unaffected!");
1369 else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav)
1372 msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª");
1374 msg_print("You resist the effects!");
1381 if (!p_ptr->paralyzed)
1383 if (set_paralyzed(3 + randint1(rlev)))
1390 /* Learn about the player */
1391 update_smart_learn(m_idx, DRS_FREE);
1398 /* Damage (physical) */
1399 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1401 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1404 if (do_dec_stat(A_STR)) obvious = TRUE;
1411 /* Damage (physical) */
1412 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1414 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1417 if (do_dec_stat(A_INT)) obvious = TRUE;
1424 /* Damage (physical) */
1425 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1427 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1430 if (do_dec_stat(A_WIS)) obvious = TRUE;
1437 /* Damage (physical) */
1438 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1440 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1443 if (do_dec_stat(A_DEX)) obvious = TRUE;
1450 /* Damage (physical) */
1451 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1453 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1456 if (do_dec_stat(A_CON)) obvious = TRUE;
1463 /* Damage (physical) */
1464 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1466 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1469 if (do_dec_stat(A_CHR)) obvious = TRUE;
1476 /* Damage (physical) */
1477 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1479 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1481 /* Damage (stats) */
1482 if (do_dec_stat(A_STR)) obvious = TRUE;
1483 if (do_dec_stat(A_DEX)) obvious = TRUE;
1484 if (do_dec_stat(A_CON)) obvious = TRUE;
1485 if (do_dec_stat(A_INT)) obvious = TRUE;
1486 if (do_dec_stat(A_WIS)) obvious = TRUE;
1487 if (do_dec_stat(A_CHR)) obvious = TRUE;
1497 /* Hack -- Reduce damage based on the player armor class */
1498 damage -= (damage * ((ac < 150) ? ac : 150) / 250);
1501 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1503 /* Radius 8 earthquake centered at the monster */
1504 if (damage > 23 || explode)
1506 earthquake_aux(m_ptr->fy, m_ptr->fx, 8, m_idx);
1514 s32b d = damroll(10, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1520 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1522 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1524 (void)drain_exp(d, d / 10, 95);
1530 s32b d = damroll(20, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1536 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1538 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1540 (void)drain_exp(d, d / 10, 90);
1546 s32b d = damroll(40, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1552 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1554 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1556 (void)drain_exp(d, d / 10, 75);
1562 s32b d = damroll(80, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1568 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1570 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1572 (void)drain_exp(d, d / 10, 50);
1578 /* Take some damage */
1579 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1581 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1583 /* Take "poison" effect */
1584 if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
1586 if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
1592 /* Damage CON (10% chance)*/
1593 if ((randint1(100) < 11) && (p_ptr->prace != RACE_ANDROID))
1595 /* 1% chance for perm. damage */
1596 bool perm = one_in_(10);
1597 if (dec_stat(A_CON, randint1(10), perm))
1600 msg_print("ɤ¬¤¢¤Ê¤¿¤ò¿ª¤ó¤Ç¤¤¤ëµ¤¤¬¤¹¤ë¡£");
1602 msg_print("You feel strange sickness.");
1614 if (!p_ptr->resist_time && !CHECK_MULTISHADOW())
1616 switch (randint1(10))
1618 case 1: case 2: case 3: case 4: case 5:
1620 if (p_ptr->prace == RACE_ANDROID) break;
1622 msg_print("¿ÍÀ¸¤¬µÕÌá¤ê¤·¤¿µ¤¤¬¤¹¤ë¡£");
1624 msg_print("You feel life has clocked back.");
1627 lose_exp(100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE);
1631 case 6: case 7: case 8: case 9:
1633 int stat = randint0(6);
1638 case A_STR: act = "¶¯¤¯"; break;
1639 case A_INT: act = "ÁïÌÀ¤Ç"; break;
1640 case A_WIS: act = "¸ÌÀ¤Ç"; break;
1641 case A_DEX: act = "´ïÍѤÇ"; break;
1642 case A_CON: act = "·ò¹¯¤Ç"; break;
1643 case A_CHR: act = "Èþ¤·¤¯"; break;
1645 case A_STR: act = "strong"; break;
1646 case A_INT: act = "bright"; break;
1647 case A_WIS: act = "wise"; break;
1648 case A_DEX: act = "agile"; break;
1649 case A_CON: act = "hale"; break;
1650 case A_CHR: act = "beautiful"; break;
1656 msg_format("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤É%s¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£", act);
1658 msg_format("You're not as %s as you used to be...", act);
1662 p_ptr->stat_cur[stat] = (p_ptr->stat_cur[stat] * 3) / 4;
1663 if (p_ptr->stat_cur[stat] < 3) p_ptr->stat_cur[stat] = 3;
1664 p_ptr->update |= (PU_BONUS);
1671 msg_print("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤ÉÎ϶¯¤¯¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£");
1673 msg_print("You're not as powerful as you used to be...");
1677 for (k = 0; k < 6; k++)
1679 p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8;
1680 if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3;
1682 p_ptr->update |= (PU_BONUS);
1687 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1693 s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
1700 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1702 if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
1704 resist_drain = !drain_exp(d, d / 10, 50);
1706 /* Heal the attacker? */
1707 if (p_ptr->mimic_form)
1709 if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING)
1710 resist_drain = TRUE;
1714 switch (p_ptr->prace)
1723 resist_drain = TRUE;
1728 if ((damage > 5) && !resist_drain)
1730 bool did_heal = FALSE;
1732 if (m_ptr->hp < m_ptr->maxhp) did_heal = TRUE;
1735 m_ptr->hp += damroll(4, damage / 6);
1736 if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
1738 /* Redraw (later) if needed */
1739 if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
1740 if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
1742 /* Special message */
1743 if (m_ptr->ml && did_heal)
1746 msg_format("%s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
1748 msg_format("%^s appears healthier.", m_name);
1761 if (CHECK_MULTISHADOW())
1764 msg_print("¹¶·â¤Ï¸¸±Æ¤ËÌ¿Ã椷¡¢¤¢¤Ê¤¿¤Ë¤ÏÆϤ«¤Ê¤«¤Ã¤¿¡£");
1766 msg_print("The attack hits Shadow, you are unharmed!");
1774 p_ptr->csp -= damage;
1778 p_ptr->csp_frac = 0;
1781 p_ptr->redraw |= (PR_MANA);
1784 /* Learn about the player */
1785 update_smart_learn(m_idx, DRS_MANA);
1792 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1794 if (p_ptr->is_dead) break;
1796 /* Decrease speed */
1797 if (CHECK_MULTISHADOW())
1803 if (set_slow((p_ptr->slow + 4 + randint0(rlev / 10)), FALSE))
1814 get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
1816 if (p_ptr->is_dead) break;
1818 /* Decrease speed */
1819 if (p_ptr->resist_sound || CHECK_MULTISHADOW())
1825 if (set_stun(p_ptr->stun + 10 + randint1(r_ptr->level / 4)))
1835 /* Hack -- only one of cut or stun */
1836 if (do_cut && do_stun)
1839 if (randint0(100) < 50)
1856 /* Critical hit (zero if non-critical) */
1857 tmp = monster_critical(d_dice, d_side, damage);
1859 /* Roll for damage */
1862 case 0: k = 0; break;
1863 case 1: k = randint1(5); break;
1864 case 2: k = randint1(5) + 5; break;
1865 case 3: k = randint1(20) + 20; break;
1866 case 4: k = randint1(50) + 50; break;
1867 case 5: k = randint1(100) + 100; break;
1868 case 6: k = 300; break;
1869 default: k = 500; break;
1873 if (k) (void)set_cut(p_ptr->cut + k);
1881 /* Critical hit (zero if non-critical) */
1882 tmp = monster_critical(d_dice, d_side, damage);
1884 /* Roll for damage */
1887 case 0: k = 0; break;
1888 case 1: k = randint1(5); break;
1889 case 2: k = randint1(5) + 10; break;
1890 case 3: k = randint1(10) + 20; break;
1891 case 4: k = randint1(15) + 30; break;
1892 case 5: k = randint1(20) + 40; break;
1893 case 6: k = 80; break;
1894 default: k = 150; break;
1897 /* Apply the stun */
1898 if (k) (void)set_stun(p_ptr->stun + k);
1903 sound(SOUND_EXPLODE);
1905 if (mon_take_hit(m_idx, m_ptr->hp + 1, &fear, NULL))
1914 if (p_ptr->sh_fire && alive && !p_ptr->is_dead)
1916 if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK))
1918 int dam = damroll(2, 6);
1920 /* Modify the damage */
1921 dam = mon_damage_mod(m_ptr, dam, FALSE);
1924 msg_format("%^s¤ÏÆÍÁ³Ç®¤¯¤Ê¤Ã¤¿¡ª", m_name);
1925 if (mon_take_hit(m_idx, dam, &fear,
1926 "¤Ï³¥¤Î»³¤Ë¤Ê¤Ã¤¿¡£"))
1928 msg_format("%^s is suddenly very hot!", m_name);
1930 if (mon_take_hit(m_idx, dam, &fear,
1931 " turns into a pile of ash."))
1941 if (is_original_ap_and_seen(m_ptr))
1942 r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
1946 if (p_ptr->sh_elec && alive && !p_ptr->is_dead)
1948 if (!(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK))
1950 int dam = damroll(2, 6);
1952 /* Modify the damage */
1953 dam = mon_damage_mod(m_ptr, dam, FALSE);
1956 msg_format("%^s¤ÏÅÅ·â¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
1957 if (mon_take_hit(m_idx, dam, &fear,
1958 "¤Ïdz¤¨³Ì¤Î»³¤Ë¤Ê¤Ã¤¿¡£"))
1960 msg_format("%^s gets zapped!", m_name);
1962 if (mon_take_hit(m_idx, dam, &fear,
1963 " turns into a pile of cinder."))
1973 if (is_original_ap_and_seen(m_ptr))
1974 r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
1978 if (p_ptr->sh_cold && alive && !p_ptr->is_dead)
1980 if (!(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK))
1982 int dam = damroll(2, 6);
1984 /* Modify the damage */
1985 dam = mon_damage_mod(m_ptr, dam, FALSE);
1988 msg_format("%^s¤ÏÎ䵤¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
1989 if (mon_take_hit(m_idx, dam, &fear,
1992 msg_format("%^s is very cold!", m_name);
1994 if (mon_take_hit(m_idx, dam, &fear,
2005 if (is_original_ap_and_seen(m_ptr))
2006 r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
2011 if (p_ptr->dustrobe && alive && !p_ptr->is_dead)
2013 if (!(r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK))
2015 int dam = damroll(2, 6);
2017 /* Modify the damage */
2018 dam = mon_damage_mod(m_ptr, dam, FALSE);
2021 msg_format("%^s¤Ï¶À¤ÎÇËÊÒ¤ò¤¯¤é¤Ã¤¿¡ª", m_name);
2022 if (mon_take_hit(m_idx, dam, &fear,
2023 "¤Ï¥º¥¿¥º¥¿¤Ë¤Ê¤Ã¤¿¡£"))
2025 msg_format("%^s gets zapped!", m_name);
2027 if (mon_take_hit(m_idx, dam, &fear,
2028 " had torn to pieces."))
2037 if (is_original_ap_and_seen(m_ptr))
2038 r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
2041 if (is_mirror_grid(&cave[py][px]))
2043 teleport_player(10, 0L);
2047 if (p_ptr->tim_sh_holy && alive && !p_ptr->is_dead)
2049 if (r_ptr->flags3 & RF3_EVIL)
2051 if (!(r_ptr->flagsr & RFR_RES_ALL))
2053 int dam = damroll(2, 6);
2055 /* Modify the damage */
2056 dam = mon_damage_mod(m_ptr, dam, FALSE);
2059 msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
2060 if (mon_take_hit(m_idx, dam, &fear,
2063 msg_format("%^s is injured by holy power!", m_name);
2065 if (mon_take_hit(m_idx, dam, &fear,
2072 if (is_original_ap_and_seen(m_ptr))
2073 r_ptr->r_flags3 |= RF3_EVIL;
2077 if (is_original_ap_and_seen(m_ptr))
2078 r_ptr->r_flagsr |= RFR_RES_ALL;
2083 if (p_ptr->tim_sh_touki && alive && !p_ptr->is_dead)
2085 if (!(r_ptr->flagsr & RFR_RES_ALL))
2087 int dam = damroll(2, 6);
2089 /* Modify the damage */
2090 dam = mon_damage_mod(m_ptr, dam, FALSE);
2093 msg_format("%^s¤¬±Ô¤¤Æ®µ¤¤Î¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
2094 if (mon_take_hit(m_idx, dam, &fear,
2097 msg_format("%^s is injured by the Force", m_name);
2099 if (mon_take_hit(m_idx, dam, &fear,
2110 if (is_original_ap_and_seen(m_ptr))
2111 r_ptr->r_flagsr |= RFR_RES_ALL;
2115 if (hex_spelling(HEX_SHADOW_CLOAK) && alive && !p_ptr->is_dead)
2118 object_type *o_ptr = &inventory[INVEN_RARM];
2120 if (!(r_ptr->flagsr & RFR_RES_ALL || r_ptr->flagsr & RFR_RES_DARK))
2124 int basedam = ((o_ptr->dd + p_ptr->to_dd[0]) * (o_ptr->ds + p_ptr->to_ds[0] + 1));
2125 dam = basedam / 2 + o_ptr->to_d + p_ptr->to_d[0];
2128 /* Cursed armor makes damages doubled */
2129 o_ptr = &inventory[INVEN_BODY];
2130 if ((o_ptr->k_idx) && object_is_cursed(o_ptr)) dam *= 2;
2132 /* Modify the damage */
2133 dam = mon_damage_mod(m_ptr, dam, FALSE);
2136 msg_format("±Æ¤Î¥ª¡¼¥é¤¬%^s¤ËÈ¿·â¤·¤¿¡ª", m_name);
2137 if (mon_take_hit(m_idx, dam, &fear, "¤ÏÅݤ줿¡£"))
2139 msg_format("Enveloped shadows attack %^s.", m_name);
2141 if (mon_take_hit(m_idx, dam, &fear, " is destroyed."))
2147 else /* monster does not dead */
2150 int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
2152 { INVEN_HEAD, GF_OLD_CONF },
2153 { INVEN_LARM, GF_OLD_SLEEP },
2154 { INVEN_HANDS, GF_TURN_ALL },
2155 { INVEN_FEET, GF_OLD_SLOW }
2158 /* Some cursed armours gives an extra effect */
2159 for (j = 0; j < 4; j++)
2161 o_ptr = &inventory[typ[j][0]];
2162 if ((o_ptr->k_idx) && object_is_cursed(o_ptr) && object_is_armour(o_ptr))
2163 project(0, 0, m_ptr->fy, m_ptr->fx, (p_ptr->lev * 2), typ[j][1], flg, -1);
2169 if (is_original_ap_and_seen(m_ptr))
2170 r_ptr->r_flagsr |= (RFR_RES_ALL | RFR_RES_DARK);
2176 /* Monster missed player */
2179 /* Analyze failed attacks */
2195 /* Visible monsters */
2204 msg_format("%s¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤¤Ç" : "");
2206 msg_format("%s%^s¤Î¹¶·â¤ò¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤¤Ç" : "", m_name);
2207 abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
2209 msg_format("%^s misses you.", m_name);
2220 /* Analyze "visible" monsters only */
2221 if (is_original_ap_and_seen(m_ptr) && !do_silly_attack)
2223 /* Count "obvious" attacks (and ones that cause damage) */
2224 if (obvious || damage || (r_ptr->r_blows[ap_cnt] > 10))
2226 /* Count attacks of this type */
2227 if (r_ptr->r_blows[ap_cnt] < MAX_UCHAR)
2229 r_ptr->r_blows[ap_cnt]++;
2234 if (p_ptr->riding && damage)
2237 monster_desc(m_name, &m_list[p_ptr->riding], 0);
2238 if (rakuba((damage > 200) ? 200 : damage, FALSE))
2241 msg_format("%^s¤«¤éÍî¤Á¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name);
2243 msg_format("You have fallen from %s.", m_name);
2248 if (p_ptr->special_defense & NINJA_KAWARIMI)
2250 if (kawarimi(FALSE)) return TRUE;
2254 /* Hex - revenge damage stored */
2255 revenge_store(get_damage);
2257 if ((p_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE))
2258 && get_damage > 0 && !p_ptr->is_dead)
2261 msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name);
2263 char m_name_self[80];
2266 monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
2268 msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
2270 project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
2271 if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
2274 if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7))
2277 monster_desc(m_name, m_ptr, 0);
2281 msg_format("%^s¤ËÈ¿·â¤·¤¿¡ª", m_name);
2283 msg_format("Your counterattack to %s!", m_name);
2285 py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER);
2289 p_ptr->redraw |= (PR_MANA);
2293 if (blinked && alive && !p_ptr->is_dead)
2295 if (teleport_barrier(m_idx))
2298 msg_print("Å¥ËÀ¤Ï¾Ð¤Ã¤Æƨ¤²...¤è¤¦¤È¤·¤¿¤¬¥Ð¥ê¥¢¤ËËɤ¬¤ì¤¿¡£");
2300 msg_print("The thief flees laughing...? But magic barrier obstructs it.");
2306 msg_print("Å¥ËÀ¤Ï¾Ð¤Ã¤Æƨ¤²¤¿¡ª");
2308 msg_print("The thief flees laughing!");
2310 teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
2315 /* Always notice cause of death */
2316 if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
2321 if (m_ptr->ml && fear && alive && !p_ptr->is_dead)
2325 msg_format("%^s¤Ï¶²ÉݤÇƨ¤²½Ð¤·¤¿¡ª", m_name);
2327 msg_format("%^s flees in terror!", m_name);
2332 if (p_ptr->special_defense & KATA_IAI)
2334 set_action(ACTION_NONE);
2337 /* Assume we attacked */