* @brief
* 腕力、器用さに応じた攻撃回数テーブル /
* This table is used to help calculate the number of blows the player can
- * make in a single round of attacks (one player current_world_ptr->game_turn) with a normal weapon.
+ * make in a single round of attacks (one player turn) with a normal weapon.
* @details
* <pre>
* This number ranges from a single blow/round for weak players to up to six
* @param mode オプションフラグ
* @return クリティカル修正が入ったダメージ値
*/
-HIT_POINT critical_norm(WEIGHT weight, int plus, HIT_POINT dam, s16b meichuu, BIT_FLAGS mode)
+HIT_POINT critical_norm(player_type *attacker_ptr, WEIGHT weight, int plus, HIT_POINT dam, s16b meichuu, BIT_FLAGS mode)
{
int i, k;
/* Extract "blow" power */
- i = (weight + (meichuu * 3 + plus * 5) + p_ptr->skill_thn);
+ i = (weight + (meichuu * 3 + plus * 5) + attacker_ptr->skill_thn);
/* Chance */
- if ((randint1((p_ptr->pclass == CLASS_NINJA) ? 4444 : 5000) <= i) || (mode == HISSATSU_MAJIN) || (mode == HISSATSU_3DAN))
+ if ((randint1((attacker_ptr->pclass == CLASS_NINJA) ? 4444 : 5000) <= i) || (mode == HISSATSU_MAJIN) || (mode == HISSATSU_3DAN))
{
k = weight + randint1(650);
if ((mode == HISSATSU_MAJIN) || (mode == HISSATSU_3DAN)) k += randint1(650);
* 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, DEPTH level, int stun)
+static int check_hit(player_type *target_ptr, int power, DEPTH level, int stun)
{
int i, k, ac;
if (k < 10) return (k < 5);
i = (power + (level * 3));
- ac = p_ptr->ac + p_ptr->to_a;
- if (p_ptr->special_attack & ATTACK_SUIKEN) ac += (p_ptr->lev * 2);
+ ac = target_ptr->ac + target_ptr->to_a;
+ if (target_ptr->special_attack & ATTACK_SUIKEN) ac += (target_ptr->lev * 2);
if ((i > 0) && (randint1(i) > ((ac * 3) / 4))) return (TRUE);
return (FALSE);
* @param message オーラダメージを受けた際のメッセージ
* @return なし
*/
-static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_offset, int r_flags_offset, u32b aura_flag,
- HIT_POINT(*dam_func)(HIT_POINT dam, concptr kb_str, int monspell, bool aura), concptr message)
+static void touch_zap_player_aux(monster_type *m_ptr, player_type *touched_ptr, bool immune, int flags_offset, int r_flags_offset, u32b aura_flag,
+ HIT_POINT(*dam_func)(player_type *creature_type, HIT_POINT dam, concptr kb_str, int monspell, bool aura), concptr message)
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
- if ((atoffset(BIT_FLAGS, r_ptr, flags_offset) & aura_flag) && !immune)
- {
- GAME_TEXT mon_name[MAX_NLEN];
- int aura_damage = damroll(1 + (r_ptr->level / 26), 1 + (r_ptr->level / 17));
+ if (!(atoffset(BIT_FLAGS, r_ptr, flags_offset) & aura_flag) || immune) return;
+
+ GAME_TEXT mon_name[MAX_NLEN];
+ int aura_damage = damroll(1 + (r_ptr->level / 26), 1 + (r_ptr->level / 17));
- monster_desc(mon_name, m_ptr, MD_WRONGDOER_NAME);
- msg_print(message);
- dam_func(aura_damage, mon_name, -1, TRUE);
+ monster_desc(mon_name, m_ptr, MD_WRONGDOER_NAME);
+ msg_print(message);
+ dam_func(touched_ptr, aura_damage, mon_name, -1, TRUE);
- if (is_original_ap_and_seen(m_ptr))
- {
- atoffset(BIT_FLAGS, r_ptr, r_flags_offset) |= aura_flag;
- }
-
- handle_stuff();
+ if (is_original_ap_and_seen(m_ptr))
+ {
+ atoffset(BIT_FLAGS, r_ptr, r_flags_offset) |= aura_flag;
}
+
+ handle_stuff(touched_ptr);
}
/*!
* @brief 敵オーラによるプレイヤーのダメージ処理(メイン)
* @param m_ptr オーラを持つモンスターの構造体参照ポインタ
+* @param touched_ptr オーラを持つ相手に振れたクリーチャーの参照ポインタ
* @return なし
*/
-static void touch_zap_player(monster_type *m_ptr)
+static void touch_zap_player(monster_type *m_ptr, player_type *touched_ptr)
{
- touch_zap_player_aux(m_ptr, p_ptr->immune_fire, offsetof(monster_race, flags2), offsetof(monster_race, r_flags2), RF2_AURA_FIRE,
+ touch_zap_player_aux(m_ptr, touched_ptr, touched_ptr->immune_fire, offsetof(monster_race, flags2), offsetof(monster_race, r_flags2), RF2_AURA_FIRE,
fire_dam, _("突然とても熱くなった!", "You are suddenly very hot!"));
- touch_zap_player_aux(m_ptr, p_ptr->immune_cold, offsetof(monster_race, flags3), offsetof(monster_race, r_flags3), RF3_AURA_COLD,
+ touch_zap_player_aux(m_ptr, touched_ptr, touched_ptr->immune_cold, offsetof(monster_race, flags3), offsetof(monster_race, r_flags3), RF3_AURA_COLD,
cold_dam, _("突然とても寒くなった!", "You are suddenly very cold!"));
- touch_zap_player_aux(m_ptr, p_ptr->immune_elec, offsetof(monster_race, flags2), offsetof(monster_race, r_flags2), RF2_AURA_ELEC,
+ touch_zap_player_aux(m_ptr, touched_ptr, touched_ptr->immune_elec, offsetof(monster_race, flags2), offsetof(monster_race, r_flags2), RF2_AURA_ELEC,
elec_dam, _("電撃をくらった!", "You get zapped!"));
}
HIT_POINT k;
int bonus, chance;
WEIGHT n_weight = 0;
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[MAX_NLEN];
msg_format(_("%sを%sで攻撃した。", "You hit %s with your %s."), m_name, atk_desc);
k = damroll(dice_num, dice_side);
- k = critical_norm(n_weight, bonus, k, (s16b)bonus, 0);
+ k = critical_norm(p_ptr, n_weight, bonus, k, (s16b)bonus, 0);
/* Apply the player damage bonuses */
k += p_ptr->to_d_m;
switch (attack)
{
case MUT2_SCOR_TAIL:
- project(0, 0, m_ptr->fy, m_ptr->fx, k, GF_POIS, PROJECT_KILL, -1);
+ project(p_ptr, 0, 0, m_ptr->fy, m_ptr->fx, k, GF_POIS, PROJECT_KILL, -1);
*mdeath = (m_ptr->r_idx == 0);
break;
case MUT2_HORNS:
*mdeath = mon_take_hit(m_idx, k, fear, NULL);
}
- touch_zap_player(m_ptr);
+ touch_zap_player(m_ptr, p_ptr);
}
/* Player misses */
else
int num = 0, bonus, chance, vir;
HIT_POINT k;
- grid_type *g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ floor_type *floor_ptr = attacker_ptr->current_floor_ptr;
+ grid_type *g_ptr = &floor_ptr->grid_array[y][x];
- monster_type *m_ptr = ¤t_floor_ptr->m_list[g_ptr->m_idx];
+ monster_type *m_ptr = &floor_ptr->m_list[g_ptr->m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
/* Access the weapon */
if (weight > 20) weight = 20;
}
- k = critical_norm(attacker_ptr->lev * weight, min_level, k, attacker_ptr->to_h[0], 0);
+ k = critical_norm(attacker_ptr, attacker_ptr->lev * weight, min_level, k, attacker_ptr->to_h[0], 0);
if ((special_effect == MA_KNEE) && ((k + attacker_ptr->to_d[hand]) < m_ptr->hp))
{
}
if ((!(o_ptr->tval == TV_SWORD) || !(o_ptr->sval == SV_DOKUBARI)) && !(mode == HISSATSU_KYUSHO))
- k = critical_norm(o_ptr->weight, o_ptr->to_h, k, attacker_ptr->to_h[hand], mode);
+ k = critical_norm(attacker_ptr, o_ptr->weight, o_ptr->to_h, k, attacker_ptr->to_h[hand], mode);
drain_result = k;
/* Anger the monster */
if (k > 0) anger_monster(m_ptr);
- touch_zap_player(m_ptr);
+ touch_zap_player(m_ptr, attacker_ptr);
/* Are we draining it? A little note: If the monster is
dead, the drain does not work... */
if (!resists_tele)
{
msg_format(_("%^sは消えた!", "%^s disappears!"), m_name);
- teleport_away(g_ptr->m_idx, 50, TELEPORT_PASSIVE);
+ teleport_away(attacker_ptr, g_ptr->m_idx, 50, TELEPORT_PASSIVE);
num = num_blow + 1; /* Can't hit it anymore! */
*mdeath = TRUE;
}
if (!(r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) &&
!(r_ptr->flagsr & RFR_EFF_RES_CHAO_MASK))
{
- if (polymorph_monster(y, x))
+ if (polymorph_monster(attacker_ptr, y, x))
{
msg_format(_("%^sは変化した!", "%^s changes!"), m_name);
*fear = FALSE;
}
/* Hack -- Get new monster */
- m_ptr = ¤t_floor_ptr->m_list[g_ptr->m_idx];
+ m_ptr = &floor_ptr->m_list[g_ptr->m_idx];
/* Oops, we need a different name... */
monster_desc(m_name, m_ptr, 0);
}
else if (o_ptr->name1 == ART_G_HAMMER)
{
- monster_type *target_ptr = ¤t_floor_ptr->m_list[g_ptr->m_idx];
+ monster_type *target_ptr = &floor_ptr->m_list[g_ptr->m_idx];
if (target_ptr->hold_o_idx)
{
- object_type *q_ptr = ¤t_floor_ptr->o_list[target_ptr->hold_o_idx];
+ object_type *q_ptr = &floor_ptr->o_list[target_ptr->hold_o_idx];
GAME_TEXT o_name[MAX_NLEN];
object_desc(o_name, q_ptr, OD_NAME_ONLY);
target_ptr->hold_o_idx = q_ptr->next_o_idx;
q_ptr->next_o_idx = 0;
msg_format(_("%sを奪った。", "You snatched %s."), o_name);
- inven_carry(q_ptr);
+ inven_carry(attacker_ptr, q_ptr);
}
}
}
k /= 10;
}
- k = critical_norm(o_ptr->weight, o_ptr->to_h, k, attacker_ptr->to_h[hand], mode);
+ k = critical_norm(attacker_ptr, o_ptr->weight, o_ptr->to_h, k, attacker_ptr->to_h[hand], mode);
if (one_in_(6))
{
int mult = 2;
if (k < 0) k = 0;
take_hit(attacker_ptr, DAMAGE_FORCE, k, _("死の大鎌", "Death scythe"), -1);
- handle_stuff();
+ handle_stuff(attacker_ptr);
}
else
{
msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name);
}
}
+
backstab = FALSE;
fuiuchi = FALSE;
}
/* Mega-Hack -- apply earthquake brand */
if (do_quake)
{
- earthquake(attacker_ptr->y, attacker_ptr->x, 10, 0);
- if (!current_floor_ptr->grid_array[y][x].m_idx) *mdeath = TRUE;
+ earthquake(attacker_ptr, attacker_ptr->y, attacker_ptr->x, 10, 0);
+ if (!floor_ptr->grid_array[y][x].m_idx) *mdeath = TRUE;
}
}
bool mdeath = FALSE;
bool stormbringer = FALSE;
- grid_type *g_ptr = ¤t_floor_ptr->grid_array[y][x];
- monster_type *m_ptr = ¤t_floor_ptr->m_list[g_ptr->m_idx];
+ grid_type *g_ptr = &attacker_ptr->current_floor_ptr->grid_array[y][x];
+ monster_type *m_ptr = &attacker_ptr->current_floor_ptr->m_list[g_ptr->m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[MAX_NLEN];
if (cur < max)
{
- DEPTH ridinglevel = r_info[current_floor_ptr->m_list[attacker_ptr->riding].r_idx].level;
+ DEPTH ridinglevel = r_info[attacker_ptr->current_floor_ptr->m_list[attacker_ptr->riding].r_idx].level;
DEPTH targetlevel = r_ptr->level;
int inc = 0;
*/
bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
int ap_cnt;
if (target_ptr->special_defense & KATA_IAI)
{
- msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, draw and cut in one motion before %s move."), m_name);
+ msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, draw and cut in one motion before %s moved."), m_name);
if (py_attack(target_ptr, m_ptr->fy, m_ptr->fx, HISSATSU_IAI)) return TRUE;
}
if ((target_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (target_ptr->lev*3/5+20)))
{
- if (kawarimi(TRUE)) return TRUE;
+ if (kawarimi(target_ptr, TRUE)) return TRUE;
}
/* Assume no blink */
ac = target_ptr->ac + target_ptr->to_a;
/* Monster hits player */
- if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr)))
+ if (!effect || check_hit(target_ptr, power, rlev, MON_STUNNED(m_ptr)))
{
/* Always disturbing */
disturb(target_ptr, TRUE, TRUE);
if (!target_ptr->resist_disen && !CHECK_MULTISHADOW(target_ptr))
{
/* Apply disenchantment */
- if (apply_disenchant(0))
+ if (apply_disenchant(target_ptr, 0))
{
/* Hack -- Update AC */
update_creature(target_ptr);
msg_format("%sour %s (%c) was stolen!", ((o_ptr->number > 1) ? "One of y" : "Y"), o_name, index_to_label(i));
#endif
chg_virtue(target_ptr, V_SACRIFICE, 1);
- o_idx = o_pop();
+ o_idx = o_pop(target_ptr->current_floor_ptr);
/* Success */
if (o_idx)
{
object_type *j_ptr;
- j_ptr = ¤t_floor_ptr->o_list[o_idx];
+ j_ptr = &p_ptr->current_floor_ptr->o_list[o_idx];
object_copy(j_ptr, o_ptr);
/* Modify number */
}
/* Steal the items */
- inven_item_increase(i, -1);
- inven_item_optimize(i);
+ inven_item_increase(target_ptr, i, -1);
+ inven_item_optimize(target_ptr, i);
obvious = TRUE;
#endif
/* Steal the items */
- inven_item_increase(i, -1);
- inven_item_optimize(i);
+ inven_item_increase(target_ptr, i, -1);
+ inven_item_optimize(target_ptr, i);
obvious = TRUE;
if (explode) break;
obvious = TRUE;
msg_print(_("酸を浴びせられた!", "You are covered in acid!"));
- get_damage += acid_dam(damage, ddesc, -1, FALSE);
+ get_damage += acid_dam(target_ptr, damage, ddesc, -1, FALSE);
update_creature(target_ptr);
update_smart_learn(m_idx, DRS_ACID);
break;
if (explode) break;
obvious = TRUE;
msg_print(_("電撃を浴びせられた!", "You are struck by electricity!"));
- get_damage += elec_dam(damage, ddesc, -1, FALSE);
+ get_damage += elec_dam(target_ptr, damage, ddesc, -1, FALSE);
update_smart_learn(m_idx, DRS_ELEC);
break;
}
if (explode) break;
obvious = TRUE;
msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!"));
- get_damage += fire_dam(damage, ddesc, -1, FALSE);
+ get_damage += fire_dam(target_ptr, damage, ddesc, -1, FALSE);
update_smart_learn(m_idx, DRS_FIRE);
break;
}
if (explode) break;
obvious = TRUE;
msg_print(_("全身が冷気で覆われた!", "You are covered with frost!"));
- get_damage += cold_dam(damage, ddesc, -1, FALSE);
+ get_damage += cold_dam(target_ptr, damage, ddesc, -1, FALSE);
update_smart_learn(m_idx, DRS_COLD);
break;
}
/* Radius 8 earthquake centered at the monster */
if (damage > 23 || explode)
{
- earthquake(m_ptr->fy, m_ptr->fx, 8, m_idx);
+ earthquake(target_ptr, m_ptr->fy, m_ptr->fx, 8, m_idx);
}
break;
r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK);
}
- if (is_mirror_grid(¤t_floor_ptr->grid_array[target_ptr->y][target_ptr->x]))
+ if (is_mirror_grid(&p_ptr->current_floor_ptr->grid_array[target_ptr->y][target_ptr->x]))
{
- teleport_player(10, 0L);
+ teleport_player(target_ptr, 10, 0L);
}
}
/* Modify the damage */
dam = mon_damage_mod(m_ptr, dam, FALSE);
- msg_format(_("影のオーラが%^sに反撃した!", "Enveloped shadows attack %^s."), m_name);
+ msg_format(_("影のオーラが%^sに反撃した!", "Enveloping shadows attack %^s."), m_name);
if (mon_take_hit(m_idx, dam, &fear, _("は倒れた。", " is destroyed.")))
{
blinked = FALSE;
{
o_armed_ptr = &target_ptr->inventory_list[typ[j][0]];
if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr))
- project(0, 0, m_ptr->fy, m_ptr->fx, (target_ptr->lev * 2), typ[j][1], flg, -1);
+ project(target_ptr, 0, 0, m_ptr->fy, m_ptr->fx, (target_ptr->lev * 2), typ[j][1], flg, -1);
}
}
}
}
}
-
/* Analyze "visible" monsters only */
if (is_original_ap_and_seen(m_ptr) && !do_silly_attack)
{
if (target_ptr->riding && damage)
{
char m_steed_name[MAX_NLEN];
- monster_desc(m_steed_name, ¤t_floor_ptr->m_list[target_ptr->riding], 0);
+ monster_desc(m_steed_name, &p_ptr->current_floor_ptr->m_list[target_ptr->riding], 0);
if (rakuba(target_ptr, (damage > 200) ? 200 : damage, FALSE))
{
msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_steed_name);
if (target_ptr->special_defense & NINJA_KAWARIMI)
{
- if (kawarimi(FALSE)) return TRUE;
+ if (kawarimi(target_ptr, FALSE)) return TRUE;
}
}
/* Hex - revenge damage stored */
- revenge_store(get_damage);
+ revenge_store(target_ptr, get_damage);
if ((target_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE))
&& get_damage > 0 && !target_ptr->is_dead)
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, -1);
+ project(target_ptr, 0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1);
if (target_ptr->tim_eyeeye) set_tim_eyeeye(target_ptr, target_ptr->tim_eyeeye-5, TRUE);
}
monster_desc(m_target_name, m_ptr, 0);
target_ptr->csp -= 7;
- msg_format(_("%^sに反撃した!", "Your counterattack to %s!"), m_target_name);
+ msg_format(_("%^sに反撃した!", "Your counterattacked to %s!"), m_target_name);
py_attack(target_ptr, m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER);
fear = FALSE;
target_ptr->redraw |= (PR_MANA);
/* Blink away */
if (blinked && alive && !target_ptr->is_dead)
{
- if (teleport_barrier(m_idx))
+ if (teleport_barrier(target_ptr, m_idx))
{
msg_print(_("泥棒は笑って逃げ...ようとしたがバリアに防がれた。", "The thief flees laughing...? But magic barrier obstructs it."));
}
else
{
msg_print(_("泥棒は笑って逃げた!", "The thief flees laughing!"));
- teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
+ teleport_away(target_ptr, m_idx, MAX_SIGHT * 2 + 5, 0L);
}
}
/* Always notice cause of death */
- if (target_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !target_ptr->inside_arena)
+ if (target_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !target_ptr->current_floor_ptr->inside_arena)
{
r_ptr->r_deaths++;
}
* @param t_idx 目標側モンスターの参照ID
* @return 実際に打撃処理が行われた場合TRUEを返す
*/
-bool monst_attack_monst(MONSTER_IDX m_idx, MONSTER_IDX t_idx)
+bool monst_attack_monst(player_type *subject_ptr, MONSTER_IDX m_idx, MONSTER_IDX t_idx)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
- monster_type *t_ptr = ¤t_floor_ptr->m_list[t_idx];
+ monster_type *m_ptr = &subject_ptr->current_floor_ptr->m_list[m_idx];
+ monster_type *t_ptr = &subject_ptr->current_floor_ptr->m_list[t_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
monster_race *tr_ptr = &r_info[t_ptr->r_idx];
/* Can the player be aware of this attack? */
bool known = (m_ptr->cdis <= MAX_SIGHT) || (t_ptr->cdis <= MAX_SIGHT);
- bool do_silly_attack = (one_in_(2) && p_ptr->image);
+ bool do_silly_attack = (one_in_(2) && subject_ptr->image);
/* Cannot attack self */
if (m_idx == t_idx) return FALSE;
/* Not allowed to attack */
if (r_ptr->flags1 & RF1_NEVER_BLOW) return FALSE;
- if (d_info[p_ptr->dungeon_idx].flags1 & DF1_NO_MELEE) return (FALSE);
+ if (d_info[subject_ptr->dungeon_idx].flags1 & DF1_NO_MELEE) return (FALSE);
/* Total armor */
ac = tr_ptr->ac;
if (!see_either && known)
{
- current_floor_ptr->monster_noise = TRUE;
+ subject_ptr->current_floor_ptr->monster_noise = TRUE;
}
- if (p_ptr->riding && (m_idx == p_ptr->riding)) disturb(p_ptr, TRUE, TRUE);
+ if (subject_ptr->riding && (m_idx == subject_ptr->riding)) disturb(subject_ptr, TRUE, TRUE);
/* Scan through all four blows */
for (ap_cnt = 0; ap_cnt < 4; ap_cnt++)
if (t_ptr->ml)
{
/* Redraw the health bar */
- if (p_ptr->health_who == t_idx) p_ptr->redraw |= (PR_HEALTH);
- if (p_ptr->riding == t_idx) p_ptr->redraw |= (PR_UHEALTH);
+ if (subject_ptr->health_who == t_idx) subject_ptr->redraw |= (PR_HEALTH);
+ if (subject_ptr->riding == t_idx) subject_ptr->redraw |= (PR_UHEALTH);
}
/* Describe the attack method */
case RBM_EXPLODE:
{
- if (see_either) disturb(p_ptr, TRUE, TRUE);
+ if (see_either) disturb(subject_ptr, TRUE, TRUE);
act = _("爆発した。", "explodes.");
explode = TRUE;
touched = FALSE;
case RBE_EAT_ITEM:
case RBE_EAT_GOLD:
- if ((p_ptr->riding != m_idx) && one_in_(2)) blinked = TRUE;
+ if ((subject_ptr->riding != m_idx) && one_in_(2)) blinked = TRUE;
break;
case RBE_EAT_FOOD:
case RBE_SHATTER:
damage -= (damage * ((ac < 150) ? ac : 150) / 250);
- if (damage > 23) earthquake(m_ptr->fy, m_ptr->fx, 8, m_idx);
+ if (damage > 23) earthquake(subject_ptr, m_ptr->fy, m_ptr->fx, 8, m_idx);
break;
case RBE_EXP_10:
/* Do damage if not exploding */
if (!explode)
{
- project(m_idx, 0, t_ptr->fy, t_ptr->fx,
+ project(subject_ptr, m_idx, 0, t_ptr->fy, t_ptr->fx,
damage, pt, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
}
switch (effect_type)
{
case BLOW_EFFECT_TYPE_FEAR:
- project(m_idx, 0, t_ptr->fy, t_ptr->fx,
+ project(subject_ptr, m_idx, 0, t_ptr->fy, t_ptr->fx,
damage, GF_TURN_ALL, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
break;
case BLOW_EFFECT_TYPE_SLEEP:
- project(m_idx, 0, t_ptr->fy, t_ptr->fx,
+ project(subject_ptr, m_idx, 0, t_ptr->fy, t_ptr->fx,
r_ptr->level, GF_OLD_SLEEP, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
break;
if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp;
/* Redraw (later) if needed */
- if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH);
- if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH);
+ if (subject_ptr->health_who == m_idx) subject_ptr->redraw |= (PR_HEALTH);
+ if (subject_ptr->riding == m_idx) subject_ptr->redraw |= (PR_UHEALTH);
/* Special message */
if (see_m && did_heal)
msg_format(_("%^sは突然熱くなった!", "%^s is suddenly very hot!"), m_name);
}
if (m_ptr->ml && is_original_ap_and_seen(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_FIRE;
- project(t_idx, 0, m_ptr->fy, m_ptr->fx,
+ project(subject_ptr, t_idx, 0, m_ptr->fy, m_ptr->fx,
damroll(1 + ((tr_ptr->level) / 26),
1 + ((tr_ptr->level) / 17)),
GF_FIRE, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
msg_format(_("%^sは突然寒くなった!", "%^s is suddenly very cold!"), m_name);
}
if (m_ptr->ml && is_original_ap_and_seen(t_ptr)) tr_ptr->r_flags3 |= RF3_AURA_COLD;
- project(t_idx, 0, m_ptr->fy, m_ptr->fx,
+ project(subject_ptr, t_idx, 0, m_ptr->fy, m_ptr->fx,
damroll(1 + ((tr_ptr->level) / 26),
1 + ((tr_ptr->level) / 17)),
GF_COLD, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
msg_format(_("%^sは電撃を食らった!", "%^s gets zapped!"), m_name);
}
if (m_ptr->ml && is_original_ap_and_seen(t_ptr)) tr_ptr->r_flags2 |= RF2_AURA_ELEC;
- project(t_idx, 0, m_ptr->fy, m_ptr->fx,
+ project(subject_ptr, t_idx, 0, m_ptr->fy, m_ptr->fx,
damroll(1 + ((tr_ptr->level) / 26),
1 + ((tr_ptr->level) / 17)),
GF_ELEC, PROJECT_KILL | PROJECT_STOP | PROJECT_AIMED, -1);
/* Blink away */
if (blinked && m_ptr->r_idx)
{
- if (teleport_barrier(m_idx))
+ if (teleport_barrier(subject_ptr, m_idx))
{
if (see_m)
{
}
else if (known)
{
- current_floor_ptr->monster_noise = TRUE;
+ subject_ptr->current_floor_ptr->monster_noise = TRUE;
}
}
else
}
else if (known)
{
- current_floor_ptr->monster_noise = TRUE;
+ subject_ptr->current_floor_ptr->monster_noise = TRUE;
}
- teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L);
+ teleport_away(subject_ptr, m_idx, MAX_SIGHT * 2 + 5, 0L);
}
}
*/
void mon_take_hit_mon(MONSTER_IDX m_idx, HIT_POINT dam, bool *dead, bool *fear, concptr note, MONSTER_IDX who)
{
- monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
+ monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[160];
bool seen = is_seen(m_ptr);
/* Unseen death by normal attack */
if (!seen)
{
- current_floor_ptr->monster_noise = TRUE;
+ p_ptr->current_floor_ptr->monster_noise = TRUE;
}
/* Death by special attack */
else if (note)
if ((dam > 0) && !is_pet(m_ptr) && !is_friendly(m_ptr) && (who != m_idx))
{
- if (is_pet(¤t_floor_ptr->m_list[who]) && !player_bold(m_ptr->target_y, m_ptr->target_x))
+ if (is_pet(&p_ptr->current_floor_ptr->m_list[who]) && !player_bold(p_ptr, m_ptr->target_y, m_ptr->target_x))
{
- set_target(m_ptr, current_floor_ptr->m_list[who].fy, current_floor_ptr->m_list[who].fx);
+ set_target(m_ptr, p_ptr->current_floor_ptr->m_list[who].fy, p_ptr->current_floor_ptr->m_list[who].fx);
}
}
if (m_ptr->hp > m_ptr->maxhp / 3) dam = (dam + 1) / 2;
if (rakuba(p_ptr, (dam > 200) ? 200 : dam, FALSE))
{
- msg_format(_("%^sに振り落とされた!", "You have thrown off from %s!"), m_name);
+ msg_format(_("%^sに振り落とされた!", "You have been thrown off from %s!"), m_name);
}
}