#include "angband.h"
#include "cmd-pet.h"
+#include "player-damage.h"
* @return 命中と判定された場合TRUEを返す
* @note Always miss 5%, always hit 5%, otherwise random.
*/
-bool test_hit_norm(int chance, int ac, int vis)
+bool test_hit_norm(int chance, ARMOUR_CLASS ac, int vis)
{
int k;
* @param mode オプションフラグ
* @return クリティカル修正が入ったダメージ値
*/
-HIT_POINT critical_norm(int weight, int plus, HIT_POINT dam, s16b meichuu, BIT_FLAGS mode)
+HIT_POINT critical_norm(WEIGHT weight, int plus, HIT_POINT dam, s16b meichuu, BIT_FLAGS mode)
{
int i, k;
* and which also do at least 20 damage, or, sometimes, N damage.
* This is used only to determine "cuts" and "stuns".
*/
-static int monster_critical(int dice, int sides, HIT_POINT dam)
+static int monster_critical(DICE_NUMBER dice, DICE_SID sides, HIT_POINT dam)
{
int max = 0;
int total = dice * sides;
* Always miss 5% of the time, Always hit 5% of the time.
* Otherwise, match monster power against player armor.
*/
-static int check_hit(int power, int level, int stun)
+static int check_hit(int power, DEPTH level, int stun)
{
int i, k, ac;
* @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];
/* Test for hit */
if ((!(r_ptr->flags2 & RF2_QUANTUM) || !randint0(2)) && test_hit_norm(chance, r_ptr->ac, m_ptr->ml))
{
- /* Sound */
sound(SOUND_HIT);
msg_format(_("%sを%sで攻撃した。", "You hit %s with your %s."), m_name, atk_desc);
/* Player misses */
else
{
- /* Sound */
sound(SOUND_MISS);
- /* Message */
msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name);
}
}
* @details
* If no "weapon" is available, then "punch" the monster one time.
*/
-static void py_attack_aux(int y, int x, bool *fear, bool *mdeath, s16b hand, BIT_FLAGS mode)
+static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b hand, BIT_FLAGS mode)
{
- int num = 0, bonus, chance, vir;
+ int num = 0, bonus, chance, vir;
HIT_POINT k;
cave_type *c_ptr = &cave[y][x];
bool can_drain = FALSE;
int num_blow;
int drain_left = MAX_VAMPIRIC_DRAIN;
- u32b flgs[TR_FLAG_SIZE]; /* A massive hack -- life-draining weapons */
+ BIT_FLAGS flgs[TR_FLAG_SIZE]; /* A massive hack -- life-draining weapons */
bool is_human = (r_ptr->d_char == 'p');
bool is_lowlevel = (r_ptr->level < (p_ptr->lev - 15));
bool zantetsu_mukou, e_j_mukou;
{
int vorpal_chance = ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD)) ? 2 : 4;
- /* Sound */
sound(SOUND_HIT);
- /* Message */
if (backstab) msg_format(_("あなたは冷酷にも眠っている無力な%sを突き刺した!", "You cruelly stab the helpless, sleeping %s!"), m_name);
else if (fuiuchi) msg_format(_("不意を突いて%sに強烈な一撃を喰らわせた!", "You make surprise attack, and hit %s with a powerful blow!"), m_name);
else if (stab_fleeing) msg_format(_("逃げる%sを背中から突き刺した!", "You backstab the fleeing %s!"), m_name);
int min_level = 1;
const martial_arts *ma_ptr = &ma_blows[0], *old_ptr = &ma_blows[0];
int resist_stun = 0;
- int weight = 8;
+ WEIGHT weight = 8;
if (r_ptr->flags1 & RF1_UNIQUE) resist_stun += 88;
if (r_ptr->flags3 & RF3_NO_STUN) resist_stun += 66;
{
u32b flgs_aux[TR_FLAG_SIZE];
- /* Sound */
sound(SOUND_HIT);
- /* Message */
msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name);
- /* Message */
msg_print(_("振り回した大鎌が自分自身に返ってきた!", "Your scythe returns to you!"));
/* Extract the flags */
}
else
{
- /* Sound */
sound(SOUND_MISS);
- /* Message */
msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name);
}
}
* @details
* If no "weapon" is available, then "punch" the monster one time.
*/
-bool py_attack(int y, int x, BIT_FLAGS mode)
+bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode)
{
bool fear = FALSE;
bool mdeath = FALSE;
monster_race *r_ptr = &r_info[m_ptr->r_idx];
char m_name[80];
- /* Disturb the player */
- disturb(0, 1);
+ disturb(FALSE, TRUE);
p_ptr->energy_use = 100;
/* Handle player fear */
if (p_ptr->afraid)
{
- /* Message */
if (m_ptr->ml)
msg_format(_("恐くて%sを攻撃できない!", "You are too afraid to attack %s!"), m_name);
else
/* Disturb the monster */
(void)set_monster_csleep(c_ptr->m_idx, 0);
- /* Done */
return FALSE;
}
/* Hack -- delay fear messages */
if (fear && m_ptr->ml && !mdeath)
{
- /* Sound */
sound(SOUND_FLEE);
- /* Message */
msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), m_name);
}
int ap_cnt;
- int i, k, tmp, ac, rlev;
+ INVENTORY_IDX i;
+ int k, tmp, ac, rlev;
int do_cut, do_stun;
s32b gold;
if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr)))
{
/* Always disturbing */
- disturb(1, 1);
+ disturb(TRUE, TRUE);
/* Hack -- Apply "protection from evil" */
/* Remember the Evil-ness */
if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL;
- /* Message */
#ifdef JP
if (abbreviate)
msg_format("撃退した。");
}
}
- /* Message */
if (act)
{
if (do_silly_attack)
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:
{
- /* 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;
for (k = 0; k < 10; k++)
{
/* Pick an item */
- i = randint0(INVEN_PACK);
+ i = (INVENTORY_IDX)randint0(INVEN_PACK);
/* Obtain the item */
o_ptr = &inventory[i];
/* Don't heal more than max hp */
heal = MIN(heal, m_ptr->maxhp - m_ptr->hp);
- /* Message */
msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!"));
- /* Obvious */
obvious = TRUE;
/* Heal the monster */
/* Combine / Reorder the pack */
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
- /* Window stuff */
p_ptr->window |= (PW_INVEN);
- /* Done */
break;
}
}
if (p_ptr->is_dead || CHECK_MULTISHADOW()) break;
- /* Obvious */
obvious = TRUE;
/* Saving throw (unless paralyzed) based on dex and level */
/* Redraw gold */
p_ptr->redraw |= (PR_GOLD);
- /* Window stuff */
p_ptr->window |= (PW_PLAYER);
/* Blink away */
/* Occasional "blink" anyway */
blinked = TRUE;
- /* Obvious */
obvious = TRUE;
- /* Done */
break;
}
s16b o_idx;
/* Pick an item */
- i = randint0(INVEN_PACK);
+ i = (INVENTORY_IDX)randint0(INVEN_PACK);
/* Obtain the item */
o_ptr = &inventory[i];
/* Get a description */
object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
- /* Message */
#ifdef JP
msg_format("%s(%c)を%s盗まれた!",
o_name, index_to_label(i),
inven_item_increase(i, -1);
inven_item_optimize(i);
- /* Obvious */
obvious = TRUE;
/* Blink away */
blinked = TRUE;
- /* Done */
break;
}
for (k = 0; k < 10; k++)
{
/* Pick an item from the pack */
- i = randint0(INVEN_PACK);
+ i = (INVENTORY_IDX)randint0(INVEN_PACK);
- /* Get the item */
o_ptr = &inventory[i];
/* Skip non-objects */
/* Get a description */
object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
- /* Message */
#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;
- /* Done */
break;
}
o_ptr->xtra4 -= (s16b)(250 + randint1(250));
if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1;
- /* Notice */
if (!p_ptr->blind)
{
msg_print(_("明かりが暗くなってしまった。", "Your light dims."));
obvious = TRUE;
}
- /* Window stuff */
p_ptr->window |= (PW_EQUIP);
}
case RBE_ACID:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
- /* Message */
msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
/* Special damage */
case RBE_ELEC:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
- /* Message */
msg_print(_("電撃を浴びせられた!", "You are struck by electricity!"));
/* Special damage */
case RBE_FIRE:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
- /* Message */
msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!"));
/* Special damage */
case RBE_COLD:
{
if (explode) break;
- /* Obvious */
obvious = TRUE;
- /* Message */
msg_print(_("全身が冷気で覆われた!", "You are covered with frost!"));
/* Special damage */
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;
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;
{
int j;
BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
- int typ[4][2] = {
+ EFFECT_ID typ[4][2] = {
{ INVEN_HEAD, GF_OLD_CONF },
{ INVEN_LARM, GF_OLD_SLEEP },
{ INVEN_HANDS, GF_TURN_ALL },
if (m_ptr->ml)
{
/* Disturbing */
- disturb(1, 1);
+ disturb(TRUE, TRUE);
- /* Message */
#ifdef JP
if (abbreviate)
msg_format("%sかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "");