X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmelee1.c;h=d0a11b511947d4b6f7c09e56480f63c8315769b8;hb=24454564fba2dc72639180071698726a1bc1af9d;hp=ce9914eaa972b5ff979a4e135bf49af28ed1e326;hpb=f14d9f795d71b33bb62b76fc548652a312f8482a;p=hengband%2Fhengband.git diff --git a/src/melee1.c b/src/melee1.c index ce9914eaa..d0a11b511 100644 --- a/src/melee1.c +++ b/src/melee1.c @@ -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 */