OSDN Git Service

auto_scum系オプションに関する記述が残っていたので削除.
[hengband/hengband.git] / src / melee1.c
index ce9914e..d0a11b5 100644 (file)
@@ -30,7 +30,7 @@ static int monster_critical(int dice, int sides, int dam)
        if ((dam < 20) && (randint0(100) >= dam)) return (0);
 
        /* Perfect damage */
-       if (dam == total && dam >= 40) max++;
+       if ((dam >= total) && (dam >= 40)) max++;
 
        /* Super-charge */
        if (dam >= 20)
@@ -155,8 +155,6 @@ bool make_attack_normal(int m_idx)
 
        object_type *o_ptr;
 
-       object_kind *k_ptr;
-
        char o_name[MAX_NLEN];
 
        char m_name[80];
@@ -166,10 +164,11 @@ bool make_attack_normal(int m_idx)
        bool blinked;
        bool touched = FALSE, fear = FALSE, alive = TRUE;
        bool explode = FALSE;
-       bool resist_drain = FALSE;
        bool do_silly_attack = (one_in_(2) && p_ptr->image);
-       int syouryaku = 0;
        int get_damage = 0;
+#ifdef JP
+       int abbreviate = 0;
+#endif
 
        /* Not allowed to attack */
        if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
@@ -187,7 +186,7 @@ bool make_attack_normal(int m_idx)
        monster_desc(m_name, m_ptr, 0);
 
        /* Get the "died from" information (i.e. "a kobold") */
-       monster_desc(ddesc, m_ptr, 0x288);
+       monster_desc(ddesc, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
 
        if (p_ptr->special_defense & KATA_IAI)
        {
@@ -269,18 +268,18 @@ bool make_attack_normal(int m_idx)
                            ((randint0(100) + p_ptr->lev) > 50))
                        {
                                /* Remember the Evil-ness */
-                               if (m_ptr->ml)
+                               if (m_ptr->ml && is_original_ap(m_ptr))
                                {
                                        r_ptr->r_flags3 |= RF3_EVIL;
                                }
 
                                /* Message */
 #ifdef JP
-                               if (syouryaku)
+                               if (abbreviate)
                                    msg_format("·âÂष¤¿¡£");
                                else
                                    msg_format("%^s¤Ï·âÂव¤ì¤¿¡£", m_name);
-                               syouryaku = 1;/*£²²óÌܰʹߤϾÊά */
+                               abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
 #else
                                msg_format("%^s is repelled.", m_name);
 #endif
@@ -451,7 +450,7 @@ bool make_attack_normal(int m_idx)
                                case RBM_CHARGE:
                                {
 #ifdef JP
-                                       syouryaku = -1;
+                                       abbreviate = -1;
                                        act = "¤ÏÀÁµá½ñ¤ò¤è¤³¤·¤¿¡£";
 #else
                                        act = "charges you.";
@@ -465,7 +464,7 @@ bool make_attack_normal(int m_idx)
                                case RBM_CRAWL:
                                {
 #ifdef JP
-                                       syouryaku = -1;
+                                       abbreviate = -1;
                                        act = "¤¬ÂΤξå¤òÇ礤²ó¤Ã¤¿¡£";
 #else
                                        act = "crawls on you.";
@@ -502,8 +501,8 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_EXPLODE:
                                {
-                                       syouryaku = -1;
 #ifdef JP
+                                       abbreviate = -1;
                                        act = "¤ÏÇúȯ¤·¤¿¡£";
 #else
                                        act = "explodes.";
@@ -550,8 +549,8 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_XXX4:
                                {
-                                       syouryaku = -1;
 #ifdef JP
+                                       abbreviate = -1;
                                        act = "¤¬ XXX4 ¤òȯ¼Í¤·¤¿¡£";
 #else
                                        act = "projects XXX4's at you.";
@@ -574,7 +573,9 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_INSULT:
                                {
-                                       syouryaku = -1;
+#ifdef JP
+                                       abbreviate = -1;
+#endif
                                        act = desc_insult[randint0(m_ptr->r_idx == MON_DEBBY ? 10 : 8)];
                                        sound(SOUND_MOAN);
                                        break;
@@ -582,7 +583,9 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_MOAN:
                                {
-                                       syouryaku = -1;
+#ifdef JP
+                                       abbreviate = -1;
+#endif
                                        act = desc_moan[randint0(4)];
                                        sound(SOUND_MOAN);
                                        break;
@@ -590,7 +593,9 @@ bool make_attack_normal(int m_idx)
 
                                case RBM_SHOW:
                                {
-                                       syouryaku = -1;
+#ifdef JP
+                                       abbreviate = -1;
+#endif
                                        if (m_ptr->r_idx == MON_JAIAN)
                                        {
 #ifdef JP
@@ -666,19 +671,21 @@ bool make_attack_normal(int m_idx)
                        {
                                if (do_silly_attack)
                                {
-                                       syouryaku = -1;
+#ifdef JP
+                                       abbreviate = -1;
+#endif
                                        act = silly_attacks[randint0(MAX_SILLY_ATTACK)];
                                }
 #ifdef JP
-                               if(syouryaku==0)
+                               if (abbreviate == 0)
                                    msg_format("%^s¤Ë%s", m_name, act);
-                               else if(syouryaku==1)
+                               else if (abbreviate == 1)
                                    msg_format("%s", act);
-                               else /*if(syouryaku==-1)*/
+                               else /* if (abbreviate == -1) */
                                    msg_format("%^s%s", m_name, act);
-                               syouryaku = 1;/*£²²óÌܰʹߤϾÊά */
+                               abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
 #else
-                               msg_format("%^s %s", m_name, act);
+                               msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : "");
 #endif
                        }
 
@@ -744,7 +751,7 @@ bool make_attack_normal(int m_idx)
                                        if (explode) break;
 
                                        /* Take "poison" effect */
-                                       if (!(p_ptr->resist_pois || p_ptr->oppose_pois))
+                                       if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
                                        {
                                                if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
                                                {
@@ -988,7 +995,7 @@ bool make_attack_normal(int m_idx)
                                                if (artifact_p(o_ptr) || o_ptr->art_name) continue;
 
                                                /* Get a description */
-                                               object_desc(o_name, o_ptr, FALSE, 3);
+                                               object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
 
                                                /* Message */
 #ifdef JP
@@ -1027,7 +1034,6 @@ bool make_attack_normal(int m_idx)
                                                         */
                                                        if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
                                                        {
-                                                               k_ptr = &k_info[o_ptr->k_idx];
                                                                j_ptr->pval = o_ptr->pval / o_ptr->number;
                                                                o_ptr->pval -= j_ptr->pval;
                                                        }
@@ -1085,7 +1091,7 @@ bool make_attack_normal(int m_idx)
                                                if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue;
 
                                                /* Get a description */
-                                               object_desc(o_name, o_ptr, FALSE, 0);
+                                               object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
 
                                                /* Message */
 #ifdef JP
@@ -1569,7 +1575,7 @@ bool make_attack_normal(int m_idx)
                                        if (p_ptr->is_dead) break;
 
                                        /* Take "poison" effect */
-                                       if (!(p_ptr->resist_pois || p_ptr->oppose_pois))
+                                       if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))
                                        {
                                                if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5))
                                                {
@@ -1679,6 +1685,7 @@ bool make_attack_normal(int m_idx)
                                case RBE_EXP_VAMP:
                                {
                                        s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
+                                       bool resist_drain;
 
                                        /* Obvious */
                                        obvious = TRUE;
@@ -1727,7 +1734,7 @@ bool make_attack_normal(int m_idx)
                                                if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
 
                                                /* Special message */
-                                               if ((m_ptr->ml) && (did_heal))
+                                               if (m_ptr->ml && did_heal)
                                                {
 #ifdef JP
 msg_format("%s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name);
@@ -1742,8 +1749,6 @@ msg_format("%s
                                }
                                case RBE_DR_MANA:
                                {
-                                       bool did_heal = FALSE;
-
                                        /* Obvious */
                                        obvious = TRUE;
 
@@ -1757,8 +1762,6 @@ msg_format("%s
                                                p_ptr->csp_frac = 0;
                                        }
 
-                                       if (m_ptr->hp < m_ptr->maxhp) did_heal = TRUE;
-
                                        p_ptr->redraw |= (PR_MANA);
 
                                        break;
@@ -1846,7 +1849,7 @@ msg_format("%s
                        {
                                if (p_ptr->sh_fire && alive && !p_ptr->is_dead)
                                {
-                                       if (!(r_ptr->flags3 & RF3_IM_FIRE))
+                                       if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK))
                                        {
                                                int dam = damroll(2, 6);
 
@@ -1871,14 +1874,14 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
-                                                       r_ptr->r_flags3 |= RF3_IM_FIRE;
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
+                                                       r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
                                        }
                                }
 
                                if (p_ptr->sh_elec && alive && !p_ptr->is_dead)
                                {
-                                       if (!(r_ptr->flags3 & RF3_IM_ELEC))
+                                       if (!(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK))
                                        {
                                                int dam = damroll(2, 6);
 
@@ -1903,14 +1906,14 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
-                                                       r_ptr->r_flags3 |= RF3_IM_ELEC;
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
+                                                       r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
                                        }
                                }
 
                                if (p_ptr->sh_cold && alive && !p_ptr->is_dead)
                                {
-                                       if (!(r_ptr->flags3 & RF3_IM_COLD))
+                                       if (!(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK))
                                        {
                                                int dam = damroll(2, 6);
 
@@ -1935,15 +1938,15 @@ msg_format("%s
                                        }
                                        else
                                        {
-                                               if (m_ptr->ml)
-                                                       r_ptr->r_flags3 |= RF3_IM_COLD;
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
+                                                       r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
                                        }
                                }
 
                                /* by henkma */
                                if (p_ptr->dustrobe && alive && !p_ptr->is_dead)
                                {
-                                       if (!(r_ptr->flags4 & RF4_BR_SHAR))
+                                       if (!(r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK))
                                        {
                                                int dam = damroll(2, 6);
 
@@ -1960,12 +1963,17 @@ msg_format("%s
                                                if (mon_take_hit(m_idx, dam, &fear,
                                                    " had torn to pieces."))
 #endif
-                                                 
                                                {
                                                        blinked = FALSE;
                                                        alive = FALSE;
                                                }
                                        }
+                                       else
+                                       {
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
+                                                       r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
+                                       }
+
                                        if (is_mirror_grid(&cave[py][px])) {
                                                teleport_player(10);
                                        }
@@ -1975,52 +1983,67 @@ msg_format("%s
                                {
                                        if (r_ptr->flags3 & RF3_EVIL)
                                        {
-                                               int dam = damroll(2, 6);
+                                               if (!(r_ptr->flagsr & RFR_RES_ALL))
+                                               {
+                                                       int dam = damroll(2, 6);
 
-                                               /* Modify the damage */
-                                               dam = mon_damage_mod(m_ptr, dam, FALSE);
+                                                       /* Modify the damage */
+                                                       dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                               msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
-                                               if (mon_take_hit(m_idx, dam, &fear,
-                                                   "¤ÏÅݤ줿¡£"))
+                                                       msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
+                                                       if (mon_take_hit(m_idx, dam, &fear,
+                                                           "¤ÏÅݤ줿¡£"))
 #else
-                                               msg_format("%^s is injured by holy power!", m_name);
+                                                       msg_format("%^s is injured by holy power!", m_name);
 
-                                               if (mon_take_hit(m_idx, dam, &fear,
-                                                   " is destroyed."))
+                                                       if (mon_take_hit(m_idx, dam, &fear,
+                                                           " is destroyed."))
 #endif
-
+                                                       {
+                                                               blinked = FALSE;
+                                                               alive = FALSE;
+                                                       }
+                                                       if (m_ptr->ml && is_original_ap(m_ptr))
+                                                               r_ptr->r_flags3 |= RF3_EVIL;
+                                               }
+                                               else
                                                {
-                                                       blinked = FALSE;
-                                                       alive = FALSE;
+                                                       if (m_ptr->ml && is_original_ap(m_ptr))
+                                                               r_ptr->r_flagsr |= RFR_RES_ALL;
                                                }
-                                               if (m_ptr->ml)
-                                                       r_ptr->r_flags3 |= RF3_EVIL;
                                        }
                                }
 
                                if (p_ptr->tim_sh_touki && alive && !p_ptr->is_dead)
                                {
-                                       int dam = damroll(2, 6);
+                                       if (!(r_ptr->flagsr & RFR_RES_ALL))
+                                       {
+                                               int dam = damroll(2, 6);
 
-                                       /* Modify the damage */
-                                       dam = mon_damage_mod(m_ptr, dam, FALSE);
+                                               /* Modify the damage */
+                                               dam = mon_damage_mod(m_ptr, dam, FALSE);
 
 #ifdef JP
-                                       msg_format("%^s¤¬±Ô¤¤Æ®µ¤¤Î¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
-                                       if (mon_take_hit(m_idx, dam, &fear,
-                                           "¤ÏÅݤ줿¡£"))
+                                               msg_format("%^s¤¬±Ô¤¤Æ®µ¤¤Î¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
+                                               if (mon_take_hit(m_idx, dam, &fear,
+                                                   "¤ÏÅݤ줿¡£"))
 #else
-                                       msg_format("%^s is injured by the Force", m_name);
+                                               msg_format("%^s is injured by the Force", m_name);
 
-                                       if (mon_take_hit(m_idx, dam, &fear,
-                                           " is destroyed."))
+                                               if (mon_take_hit(m_idx, dam, &fear,
+                                                   " is destroyed."))
 #endif
 
+                                               {
+                                                       blinked = FALSE;
+                                                       alive = FALSE;
+                                               }
+                                       }
+                                       else
                                        {
-                                               blinked = FALSE;
-                                               alive = FALSE;
+                                               if (m_ptr->ml && is_original_ap(m_ptr))
+                                                       r_ptr->r_flagsr |= RFR_RES_ALL;
                                        }
                                }
                        }
@@ -2053,11 +2076,11 @@ msg_format("%s
 
                                        /* Message */
 #ifdef JP
-                                       if (syouryaku)
+                                       if (abbreviate)
                                            msg_format("%s¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : "");
                                        else
                                            msg_format("%s%^s¤Î¹¶·â¤ò¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : "", m_name);
-                                       syouryaku = 1;/*£²²óÌܰʹߤϾÊά */
+                                       abbreviate = 1;/*£²²óÌܰʹߤϾÊά */
 #else
                                        msg_format("%^s misses you.", m_name);
 #endif
@@ -2110,9 +2133,9 @@ msg_format("%^s
                msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name);
 #else
                char m_name_self[80];
-               
+
                /* hisself */
-               monster_desc(m_name_self, m_ptr, 0x23);
+               monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE);
 
                msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
 #endif
@@ -2134,6 +2157,9 @@ msg_format("%^s
 #endif
                py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER);
                fear = FALSE;
+
+               /* Redraw mana */
+               p_ptr->redraw |= (PR_MANA);
        }
 
        /* Blink away */