#include "angband.h"
#include "cmd-pet.h"
+#include "player-damage.h"
* @return なし
*/
static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_offset, int r_flags_offset, u32b aura_flag,
- int(*dam_func)(HIT_POINT dam, cptr kb_str, int monspell, bool aura), cptr message)
+ HIT_POINT(*dam_func)(HIT_POINT dam, cptr kb_str, int monspell, bool aura), cptr message)
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool explode = FALSE;
bool do_silly_attack = (one_in_(2) && p_ptr->image);
HIT_POINT get_damage = 0;
- int abbreviate = 0;
+ int abbreviate = 0; // 2回目以降の省略表現フラグ
/* Not allowed to attack */
if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE);
if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL;
#ifdef JP
- if (abbreviate)
- msg_format("撃退した。");
- else
- msg_format("%^sは撃退された。", m_name);
- abbreviate = 1;/*2回目以降は省略 */
+ if (abbreviate) msg_format("撃退した。");
+ else msg_format("%^sは撃退された。", m_name);
+ abbreviate = 1; /*2回目以降は省略 */
#else
msg_format("%^s is repelled.", m_name);
#endif
else
{
if (one_in_(3))
-#ifdef JP
- act = "は♪僕らは楽しい家族♪と歌っている。";
+ act = _("は♪僕らは楽しい家族♪と歌っている。", "sings 'We are a happy family.'");
else
- act = "は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。";
-#else
- act = "sings 'We are a happy family.'";
- else
- act = "sings 'I love you, you love me.'";
-#endif
+ act = _("は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。", "sings 'I love you, you love me.'");
}
sound(SOUND_SHOW);
}
#ifdef JP
if (abbreviate == 0)
- msg_format("%^sに%s", m_name, act);
+ msg_format("%^sに%s", m_name, act);
else if (abbreviate == 1)
- msg_format("%s", act);
+ msg_format("%s", act);
else /* if (abbreviate == -1) */
- msg_format("%^s%s", m_name, act);
+ msg_format("%^s%s", m_name, act);
abbreviate = 1;/*2回目以降は省略 */
#else
msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : "");
* Skip the effect when exploding, since the explosion
* already causes the effect.
*/
- if (explode)
- damage = 0;
+ if(explode) damage = 0;
/* Apply appropriate damage */
switch (effect)
{
case 0:
{
- /* Hack -- Assume obvious */
obvious = TRUE;
-
- /* Hack -- No damage */
damage = 0;
-
break;
}
- case RBE_SUPERHURT:
+ case RBE_SUPERHURT: /* AC軽減あり / Player armor reduces total damage */
{
if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW())
{
msg_print(_("痛恨の一撃!", "It was a critical hit!"));
tmp_damage = MAX(damage, tmp_damage*2);
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1);
break;
}
}
- case RBE_HURT:
+ case RBE_HURT: /* AC軽減あり / Player armor reduces total damage */
{
- /* Obvious */
obvious = TRUE;
-
- /* Hack -- Player armor reduces total damage */
damage -= (damage * ((ac < 150) ? ac : 150) / 250);
-
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
-
break;
}
}
}
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Learn about the player */
}
}
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Learn about the player */
case RBE_UN_POWER:
{
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
- /* Obvious */
obvious = TRUE;
/* Heal the monster */
case RBE_EAT_GOLD:
{
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Confused monsters cannot steal successfully. -LM-*/
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
- /* Obvious */
obvious = TRUE;
/* Saving throw (unless paralyzed) based on dex and level */
case RBE_EAT_ITEM:
{
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Confused monsters cannot steal successfully. -LM-*/
/* Occasional "blink" anyway */
blinked = TRUE;
- /* Obvious */
obvious = TRUE;
break;
/* Skip artifacts */
if (object_is_artifact(o_ptr)) continue;
- /* Get a description */
object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
#ifdef JP
- msg_format("%s(%c)を%s盗まれた!",
- o_name, index_to_label(i),
- ((o_ptr->number > 1) ? "一つ" : ""));
+ msg_format("%s(%c)を%s盗まれた!", o_name, index_to_label(i), ((o_ptr->number > 1) ? "一つ" : ""));
#else
- msg_format("%sour %s (%c) was stolen!",
- ((o_ptr->number > 1) ? "One of y" : "Y"),
- o_name, index_to_label(i));
+ msg_format("%sour %s (%c) was stolen!", ((o_ptr->number > 1) ? "One of y" : "Y"), o_name, index_to_label(i));
#endif
chg_virtue(V_SACRIFICE, 1);
inven_item_increase(i, -1);
inven_item_optimize(i);
- /* Obvious */
obvious = TRUE;
/* Blink away */
case RBE_EAT_FOOD:
{
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
/* Pick an item from the pack */
i = (INVENTORY_IDX)randint0(INVEN_PACK);
- /* Get the item */
o_ptr = &inventory[i];
/* Skip non-objects */
/* Skip non-food objects */
if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue;
- /* Get a description */
object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
#ifdef JP
- msg_format("%s(%c)を%s食べられてしまった!",
- o_name, index_to_label(i),
- ((o_ptr->number > 1) ? "一つ" : ""));
+ msg_format("%s(%c)を%s食べられてしまった!", o_name, index_to_label(i), ((o_ptr->number > 1) ? "一つ" : ""));
#else
- msg_format("%sour %s (%c) was eaten!",
- ((o_ptr->number > 1) ? "One of y" : "Y"),
- o_name, index_to_label(i));
+ msg_format("%sour %s (%c) was eaten!", ((o_ptr->number > 1) ? "One of y" : "Y"), o_name, index_to_label(i));
#endif
-
/* Steal the items */
inven_item_increase(i, -1);
inven_item_optimize(i);
- /* Obvious */
obvious = TRUE;
break;
{
/* Access the lite */
o_ptr = &inventory[INVEN_LITE];
-
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
case RBE_ACID:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
case RBE_ELEC:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
msg_print(_("電撃を浴びせられた!", "You are struck by electricity!"));
case RBE_FIRE:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!"));
case RBE_COLD:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
msg_print(_("全身が冷気で覆われた!", "You are covered with frost!"));
case RBE_BLIND:
{
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;
case RBE_CONFUSE:
{
if (explode) break;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;
case RBE_TERRIFY:
{
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;
case RBE_PARALYZE:
{
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;
case RBE_LOSE_STR:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_STR)) obvious = TRUE;
break;
case RBE_LOSE_INT:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_INT)) obvious = TRUE;
break;
case RBE_LOSE_WIS:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_WIS)) obvious = TRUE;
break;
case RBE_LOSE_DEX:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_DEX)) obvious = TRUE;
break;
case RBE_LOSE_CON:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_CON)) obvious = TRUE;
break;
case RBE_LOSE_CHR:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
-
- /* Damage (stat) */
if (do_dec_stat(A_CHR)) obvious = TRUE;
break;
case RBE_LOSE_ALL:
{
- /* Damage (physical) */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
case RBE_SHATTER:
{
- /* Obvious */
obvious = TRUE;
/* Hack -- Reduce damage based on the player armor class */
damage -= (damage * ((ac < 150) ? ac : 150) / 250);
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
/* Radius 8 earthquake centered at the monster */
{
s32b d = damroll(10, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
- /* Obvious */
obvious = TRUE;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
{
s32b d = damroll(20, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
- /* Obvious */
obvious = TRUE;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
{
s32b d = damroll(40, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
- /* Obvious */
obvious = TRUE;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
{
s32b d = damroll(80, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
- /* Obvious */
obvious = TRUE;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
case RBE_DISEASE:
{
- /* Take some damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE;
bool resist_drain;
- /* Obvious */
obvious = TRUE;
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
}
case RBE_DR_MANA:
{
- /* Obvious */
obvious = TRUE;
if (CHECK_MULTISHADOW())
{
do_cut = 0;
- /* Take damage */
p_ptr->csp -= damage;
if (p_ptr->csp < 0)
{
}
case RBE_INERTIA:
{
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;
}
case RBE_STUN:
{
- /* Take damage */
get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1);
if (p_ptr->is_dead) break;