#include "angband.h"
-extern cptr silly_attacks[MAX_SILLY_ATTACK];
/*
* Critical blow. All hits that do 95% of total possible damage,
bool resist_drain = FALSE;
bool do_silly_attack = (one_in_(2) && p_ptr->image);
int syouryaku = 0;
+ int get_damage = 0;
/* Not allowed to attack */
if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
}
/* Stop if player is dead or gone */
- if (!alive || death) break;
+ if (!p_ptr->playing || p_ptr->is_dead) break;
if (distance(py, px, m_ptr->fy, m_ptr->fx) > 1) break;
/* Handle "leaving" */
tmp_damage = MAX(damage, tmp_damage*2);
/* Take damage */
- take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1);
break;
}
}
damage -= (damage * ((ac < 150) ? ac : 150) / 250);
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
break;
}
}
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Learn about the player */
update_smart_learn(m_idx, DRS_POIS);
}
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Learn about the player */
update_smart_learn(m_idx, DRS_DISEN);
case RBE_UN_POWER:
{
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Find an item */
for (k = 0; k < 10; k++)
case RBE_EAT_GOLD:
{
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Confused monsters cannot steal successfully. -LM-*/
if (m_ptr->confused) break;
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Obvious */
obvious = TRUE;
case RBE_EAT_ITEM:
{
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Confused monsters cannot steal successfully. -LM-*/
if (m_ptr->confused) break;
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Saving throw (unless paralyzed) based on dex and level */
if (!p_ptr->paralyzed &&
case RBE_EAT_FOOD:
{
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Steal some food */
for (k = 0; k < 10; k++)
o_ptr = &inventory[INVEN_LITE];
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Drain fuel */
if ((o_ptr->xtra4 > 0) && (!artifact_p(o_ptr)))
{
/* Reduce fuel */
- o_ptr->pval -= (250 + randint1(250));
- if (o_ptr->pval < 1) o_ptr->pval = 1;
+ o_ptr->xtra4 -= (250 + randint1(250));
+ if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1;
/* Notice */
if (!p_ptr->blind)
case RBE_BLIND:
{
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Increase "blind" */
if (!p_ptr->resist_blind)
{
if (explode) break;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Increase "confused" */
if (!p_ptr->resist_conf)
case RBE_TERRIFY:
{
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Increase "afraid" */
if (p_ptr->resist_fear)
case RBE_PARALYZE:
{
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Increase "paralyzed" */
if (p_ptr->free_act)
case RBE_LOSE_STR:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_STR)) obvious = TRUE;
case RBE_LOSE_INT:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_INT)) obvious = TRUE;
case RBE_LOSE_WIS:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_WIS)) obvious = TRUE;
case RBE_LOSE_DEX:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_DEX)) obvious = TRUE;
case RBE_LOSE_CON:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_CON)) obvious = TRUE;
case RBE_LOSE_CHR:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stat) */
if (do_dec_stat(A_CHR)) obvious = TRUE;
case RBE_LOSE_ALL:
{
/* Damage (physical) */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Damage (stats) */
if (do_dec_stat(A_STR)) obvious = TRUE;
damage -= (damage * ((ac < 150) ? ac : 150) / 250);
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Radius 8 earthquake centered at the monster */
if (damage > 23 || explode)
obvious = TRUE;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
if (p_ptr->prace == RACE_ANDROID)
{
obvious = TRUE;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
if (p_ptr->prace == RACE_ANDROID)
{
obvious = TRUE;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
if (p_ptr->prace == RACE_ANDROID)
{
obvious = TRUE;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
if (p_ptr->prace == RACE_ANDROID)
{
case RBE_DISEASE:
{
/* Take some damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
/* Take "poison" effect */
if (!(p_ptr->resist_pois || p_ptr->oppose_pois))
{
/* 1% chance for perm. damage */
bool perm = one_in_(10);
- if (dec_stat(A_CON, randint1(10), perm)) obvious = TRUE;
+ if (dec_stat(A_CON, randint1(10), perm))
+ {
+#ifdef JP
+ msg_print("ɤ¬¤¢¤Ê¤¿¤ò¿ª¤ó¤Ç¤¤¤ëµ¤¤¬¤¹¤ë¡£");
+#else
+ msg_print("You feel strange sickness.");
+#endif
+
+ obvious = TRUE;
+ }
}
break;
}
}
}
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
break;
}
obvious = TRUE;
/* Take damage */
- take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
+ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
- if (death) break;
+ if (p_ptr->is_dead) break;
if (p_ptr->prace == RACE_ANDROID)
{
if (touched)
{
- if (p_ptr->sh_fire && alive && !death)
+ if (p_ptr->sh_fire && alive && !p_ptr->is_dead)
{
if (!(r_ptr->flags3 & RF3_IM_FIRE))
{
}
}
- if (p_ptr->sh_elec && alive && !death)
+ if (p_ptr->sh_elec && alive && !p_ptr->is_dead)
{
if (!(r_ptr->flags3 & RF3_IM_ELEC))
{
}
}
- if (p_ptr->sh_cold && alive && !death)
+ if (p_ptr->sh_cold && alive && !p_ptr->is_dead)
{
if (!(r_ptr->flags3 & RF3_IM_COLD))
{
}
/* by henkma */
- if (p_ptr->dustrobe && alive && !death)
+ if (p_ptr->dustrobe && alive && !p_ptr->is_dead)
{
if (!(r_ptr->flags4 & RF4_BR_SHAR))
{
}
}
+ if (p_ptr->tim_sh_holy && alive && !p_ptr->is_dead)
+ {
+ if (r_ptr->flags3 & RF3_EVIL)
+ {
+ int dam = damroll(2, 6);
+
+ /* Modify the damage */
+ dam = mon_damage_mod(m_ptr, dam, FALSE);
- if (p_ptr->tim_sh_touki && alive && !death)
+#ifdef JP
+ msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name);
+ if (mon_take_hit(m_idx, dam, &fear,
+ "¤ÏÅݤ줿¡£"))
+#else
+ msg_format("%^s is injured by holy power!", m_name);
+
+ if (mon_take_hit(m_idx, dam, &fear,
+ " is destroyed."))
+#endif
+
+ {
+ blinked = FALSE;
+ alive = FALSE;
+ }
+ 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 (mon_take_hit(m_idx, dam, &fear,
"¤ÏÅݤ줿¡£"))
#else
- msg_format("%^s is suddenly very hot!", m_name);
+ msg_format("%^s is injured by the Force", m_name);
if (mon_take_hit(m_idx, dam, &fear,
- " turns into a pile of ash."))
+ " is destroyed."))
#endif
{
alive = FALSE;
}
}
- touched = FALSE;
}
}
}
}
+ if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead)
+ {
+#ifdef JP
+ msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name);
+#else
+ char m_name_self[80];
+
+ /* hisself */
+ monster_desc(m_name_self, m_ptr, 0x23);
+
+ msg_format("The attack of %s has wounded %s!", m_name, m_name_self);
+#endif
+ project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL | PROJECT_NO_REF, -1);
+ set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE);
+ }
+
- if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !death && m_ptr->ml && (p_ptr->csp > 7))
+ if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7))
{
char m_name[80];
monster_desc(m_name, m_ptr, 0);
}
/* Blink away */
- if (blinked)
+ if (blinked && alive && !p_ptr->is_dead)
{
#ifdef JP
msg_print("Å¥ËÀ¤Ï¾Ð¤Ã¤Æƨ¤²¤¿¡ª");
/* Always notice cause of death */
- if (death && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
+ if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena)
{
r_ptr->r_deaths++;
}
- if (m_ptr->ml && fear)
+ if (m_ptr->ml && fear && alive && !p_ptr->is_dead)
{
sound(SOUND_FLEE);
#ifdef JP