From 769e0e7056ec90343477e3b9c999e37b425ab7c7 Mon Sep 17 00:00:00 2001 From: Hourier Date: Sun, 12 Jan 2020 23:54:06 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#38997=20monster=5Frace=5Ftrack()?= =?utf8?q?=20=E3=81=A8=20object=5Fkind=5Ftrack()=20=E3=81=ABplayer=5Ftype?= =?utf8?q?=20*=20=E5=BC=95=E6=95=B0=E3=82=92=E8=BF=BD=E5=8A=A0=20/=20Added?= =?utf8?q?=20player=5Ftype=20*=20argument=20to=20monster=5Frace=5Ftrack()?= =?utf8?q?=20and=20object=5Fkind=5Ftrack()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/bldg.c | 2 +- src/cmd/cmd-basic.c | 4 +-- src/cmd/cmd-dump.c | 4 +-- src/cmd/cmd-item.c | 2 +- src/cmd/cmd-spell.c | 6 ++-- src/combat/melee1.c | 43 ++++++++++++----------- src/combat/shoot.c | 4 +-- src/mind.c | 2 +- src/monster-status.c | 96 +++++++++++++++++++++++++-------------------------- src/monster-status.h | 2 +- src/player-move.c | 2 +- src/spells1.c | 10 +++--- src/targeting.c | 2 +- src/view-mainwindow.c | 9 ++--- src/view-mainwindow.h | 4 +-- 15 files changed, 95 insertions(+), 97 deletions(-) diff --git a/src/bldg.c b/src/bldg.c index c36f16b94..ae0730f64 100644 --- a/src/bldg.c +++ b/src/bldg.c @@ -3824,7 +3824,7 @@ static bool research_mon(player_type *player_ptr) lore_do_probe(r_idx); /* Save this monster ID */ - monster_race_track(r_idx); + monster_race_track(player_ptr, r_idx); handle_stuff(player_ptr); /* know every thing mode */ diff --git a/src/cmd/cmd-basic.c b/src/cmd/cmd-basic.c index 8c86c2280..080b0d5e8 100644 --- a/src/cmd/cmd-basic.c +++ b/src/cmd/cmd-basic.c @@ -2588,7 +2588,7 @@ bool do_cmd_throw(player_type *creature_ptr, int mult, bool boomerang, OBJECT_ID if (m_ptr->ml) { - if (!creature_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!creature_ptr->image) monster_race_track(creature_ptr, m_ptr->ap_r_idx); health_track(creature_ptr, g_ptr->m_idx); } } @@ -2635,7 +2635,7 @@ bool do_cmd_throw(player_type *creature_ptr, int mult, bool boomerang, OBJECT_ID tdam, m_ptr->hp - tdam, m_ptr->maxhp, m_ptr->max_maxhp); /* Hit the monster, check for death */ - if (mon_take_hit(g_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) + if (mon_take_hit(creature_ptr, g_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) { /* Dead monster */ } diff --git a/src/cmd/cmd-dump.c b/src/cmd/cmd-dump.c index 45126cbfe..578db2c05 100644 --- a/src/cmd/cmd-dump.c +++ b/src/cmd/cmd-dump.c @@ -5334,7 +5334,7 @@ static void do_cmd_knowledge_monsters(player_type *creature_ptr, bool *need_redr if (!visual_only) { /* Mega Hack -- track this monster race */ - if (mon_cnt) monster_race_track(mon_idx[mon_cur]); + if (mon_cnt) monster_race_track(creature_ptr, mon_idx[mon_cur]); handle_stuff(creature_ptr); } @@ -5708,7 +5708,7 @@ static void do_cmd_knowledge_objects(player_type *creature_ptr, bool *need_redra if (!visual_only) { /* Mega Hack -- track this object */ - if (object_cnt) object_kind_track(object_idx[object_cur]); + if (object_cnt) object_kind_track(creature_ptr, object_idx[object_cur]); /* The "current" object changed */ if (object_old != object_idx[object_cur]) diff --git a/src/cmd/cmd-item.c b/src/cmd/cmd-item.c index 00870b97d..39da13179 100644 --- a/src/cmd/cmd-item.c +++ b/src/cmd/cmd-item.c @@ -1373,7 +1373,7 @@ void do_cmd_query_symbol(player_type *creature_ptr) r_idx = who[i]; /* Hack -- Auto-recall */ - monster_race_track(r_idx); + monster_race_track(creature_ptr, r_idx); handle_stuff(creature_ptr); /* Interact */ diff --git a/src/cmd/cmd-spell.c b/src/cmd/cmd-spell.c index aafa5ae70..2759fbbdc 100644 --- a/src/cmd/cmd-spell.c +++ b/src/cmd/cmd-spell.c @@ -685,7 +685,7 @@ void do_cmd_browse(player_type *caster_ptr) use_realm = tval2realm(o_ptr->tval); /* Track the object kind */ - object_kind_track(o_ptr->k_idx); + object_kind_track(caster_ptr, o_ptr->k_idx); handle_stuff(caster_ptr); /* Extract spells */ @@ -860,7 +860,7 @@ void do_cmd_study(player_type *caster_ptr) } /* Track the object kind */ - object_kind_track(o_ptr->k_idx); + object_kind_track(caster_ptr, o_ptr->k_idx); handle_stuff(caster_ptr); /* Mage -- Learn a selected spell */ @@ -1113,7 +1113,7 @@ void do_cmd_cast(player_type *caster_ptr) if ((caster_ptr->pclass != CLASS_SORCERER) && (caster_ptr->pclass != CLASS_RED_MAGE) && (o_ptr->tval == REALM2_BOOK)) increment = 32; /* Track the object kind */ - object_kind_track(o_ptr->k_idx); + object_kind_track(caster_ptr, o_ptr->k_idx); handle_stuff(caster_ptr); if ((caster_ptr->pclass == CLASS_SORCERER) || (caster_ptr->pclass == CLASS_RED_MAGE)) diff --git a/src/combat/melee1.c b/src/combat/melee1.c index 7741146f4..76575128e 100644 --- a/src/combat/melee1.c +++ b/src/combat/melee1.c @@ -1139,13 +1139,14 @@ static void touch_zap_player(monster_type *m_ptr, player_type *touched_ptr) /*! * @brief プレイヤーの変異要素による打撃処理 +* @param attacker_ptr プレーヤーへの参照ポインタ * @param m_idx 攻撃目標となったモンスターの参照ID * @param attack 変異要素による攻撃要素の種類 * @param fear 攻撃を受けたモンスターが恐慌状態に陥ったかを返す参照ポインタ * @param mdeath 攻撃を受けたモンスターが死亡したかを返す参照ポインタ * @return なし */ -static void natural_attack(MONSTER_IDX m_idx, int attack, bool *fear, bool *mdeath) +static void natural_attack(player_type *attacker_ptr, MONSTER_IDX m_idx, int attack, bool *fear, bool *mdeath) { HIT_POINT k; int bonus, chance; @@ -1241,19 +1242,19 @@ static void natural_attack(MONSTER_IDX m_idx, int attack, bool *fear, bool *mdea *mdeath = (m_ptr->r_idx == 0); break; case MUT2_HORNS: - *mdeath = mon_take_hit(m_idx, k, fear, NULL); + *mdeath = mon_take_hit(attacker_ptr, m_idx, k, fear, NULL); break; case MUT2_BEAK: - *mdeath = mon_take_hit(m_idx, k, fear, NULL); + *mdeath = mon_take_hit(attacker_ptr, m_idx, k, fear, NULL); break; case MUT2_TRUNK: - *mdeath = mon_take_hit(m_idx, k, fear, NULL); + *mdeath = mon_take_hit(attacker_ptr, m_idx, k, fear, NULL); break; case MUT2_TENTACLES: - *mdeath = mon_take_hit(m_idx, k, fear, NULL); + *mdeath = mon_take_hit(attacker_ptr, m_idx, k, fear, NULL); break; default: - *mdeath = mon_take_hit(m_idx, k, fear, NULL); + *mdeath = mon_take_hit(attacker_ptr, m_idx, k, fear, NULL); } touch_zap_player(m_ptr, p_ptr); @@ -1823,7 +1824,7 @@ static void py_attack_aux(player_type *attacker_ptr, POSITION y, POSITION x, boo drain_result = m_ptr->hp; /* Damage, check for fear and death */ - if (mon_take_hit(g_ptr->m_idx, k, fear, NULL)) + if (mon_take_hit(attacker_ptr, g_ptr->m_idx, k, fear, NULL)) { *mdeath = TRUE; if ((attacker_ptr->pclass == CLASS_BERSERKER) && attacker_ptr->energy_use) @@ -2196,7 +2197,7 @@ bool py_attack(player_type *attacker_ptr, POSITION y, POSITION x, COMBAT_OPTION_ if (m_ptr->ml) { /* Auto-Recall if possible and visible */ - if (!attacker_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!attacker_ptr->image) monster_race_track(attacker_ptr, m_ptr->ap_r_idx); health_track(attacker_ptr, g_ptr->m_idx); } @@ -2323,15 +2324,15 @@ bool py_attack(player_type *attacker_ptr, POSITION y, POSITION x, COMBAT_OPTION_ if (!mdeath) { if ((attacker_ptr->muta2 & MUT2_HORNS) && !mdeath) - natural_attack(g_ptr->m_idx, MUT2_HORNS, &fear, &mdeath); + natural_attack(attacker_ptr, g_ptr->m_idx, MUT2_HORNS, &fear, &mdeath); if ((attacker_ptr->muta2 & MUT2_BEAK) && !mdeath) - natural_attack(g_ptr->m_idx, MUT2_BEAK, &fear, &mdeath); + natural_attack(attacker_ptr, g_ptr->m_idx, MUT2_BEAK, &fear, &mdeath); if ((attacker_ptr->muta2 & MUT2_SCOR_TAIL) && !mdeath) - natural_attack(g_ptr->m_idx, MUT2_SCOR_TAIL, &fear, &mdeath); + natural_attack(attacker_ptr, g_ptr->m_idx, MUT2_SCOR_TAIL, &fear, &mdeath); if ((attacker_ptr->muta2 & MUT2_TRUNK) && !mdeath) - natural_attack(g_ptr->m_idx, MUT2_TRUNK, &fear, &mdeath); + natural_attack(attacker_ptr, g_ptr->m_idx, MUT2_TRUNK, &fear, &mdeath); if ((attacker_ptr->muta2 & MUT2_TENTACLES) && !mdeath) - natural_attack(g_ptr->m_idx, MUT2_TENTACLES, &fear, &mdeath); + natural_attack(attacker_ptr, g_ptr->m_idx, MUT2_TENTACLES, &fear, &mdeath); } /* Hack -- delay fear messages */ @@ -3733,7 +3734,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) { sound(SOUND_EXPLODE); - if (mon_take_hit(m_idx, m_ptr->hp + 1, &fear, NULL)) + if (mon_take_hit(target_ptr, m_idx, m_ptr->hp + 1, &fear, NULL)) { blinked = FALSE; alive = FALSE; @@ -3753,7 +3754,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) msg_format(_("%^sは突然熱くなった!", "%^s is suddenly very hot!"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は灰の山になった。", " turns into a pile of ash."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は灰の山になった。", " turns into a pile of ash."))) { blinked = FALSE; alive = FALSE; @@ -3776,7 +3777,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("%^sは電撃をくらった!", "%^s gets zapped!"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は燃え殻の山になった。", " turns into a pile of cinder."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は燃え殻の山になった。", " turns into a pile of cinder."))) { blinked = FALSE; alive = FALSE; @@ -3799,7 +3800,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("%^sは冷気をくらった!", "%^s is very cold!"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は凍りついた。", " was frozen."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は凍りついた。", " was frozen."))) { blinked = FALSE; alive = FALSE; @@ -3823,7 +3824,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("%^sは鏡の破片をくらった!", "%^s gets zapped!"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("はズタズタになった。", " had torn to pieces."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("はズタズタになった。", " had torn to pieces."))) { blinked = FALSE; alive = FALSE; @@ -3853,7 +3854,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("%^sは聖なるオーラで傷ついた!", "%^s is injured by holy power!"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) { blinked = FALSE; alive = FALSE; @@ -3879,7 +3880,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("%^sが鋭い闘気のオーラで傷ついた!", "%^s is injured by the Force"), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) { blinked = FALSE; alive = FALSE; @@ -3913,7 +3914,7 @@ bool make_attack_normal(player_type *target_ptr, MONSTER_IDX m_idx) dam = mon_damage_mod(m_ptr, dam, FALSE); msg_format(_("影のオーラが%^sに反撃した!", "Enveloping shadows attack %^s."), m_name); - if (mon_take_hit(m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) + if (mon_take_hit(target_ptr, m_idx, dam, &fear, _("は倒れた。", " is destroyed."))) { blinked = FALSE; alive = FALSE; diff --git a/src/combat/shoot.c b/src/combat/shoot.c index 08eb16c9b..254af442d 100644 --- a/src/combat/shoot.c +++ b/src/combat/shoot.c @@ -672,7 +672,7 @@ void exe_fire(player_type *shooter_ptr, INVENTORY_IDX item, object_type *j_ptr, if (m_ptr->ml) { - if (!shooter_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!shooter_ptr->image) monster_race_track(shooter_ptr, m_ptr->ap_r_idx); health_track(shooter_ptr, c_mon_ptr->m_idx); } } @@ -728,7 +728,7 @@ void exe_fire(player_type *shooter_ptr, INVENTORY_IDX item, object_type *j_ptr, } /* Hit the monster, check for death */ - if (mon_take_hit(c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) + if (mon_take_hit(shooter_ptr, c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) { /* Dead monster */ } diff --git a/src/mind.c b/src/mind.c index 3fd5d291e..2feec3878 100644 --- a/src/mind.c +++ b/src/mind.c @@ -1693,7 +1693,7 @@ static bool cast_ninja_spell(player_type *caster_ptr, int spell) if (m_ptr->ml) { /* Auto-Recall if possible and visible */ - if (!caster_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!caster_ptr->image) monster_race_track(caster_ptr, m_ptr->ap_r_idx); health_track(caster_ptr, m_idx); } diff --git a/src/monster-status.c b/src/monster-status.c index c34c7e986..79269a18f 100644 --- a/src/monster-status.c +++ b/src/monster-status.c @@ -995,9 +995,9 @@ void monster_gain_exp(MONSTER_IDX m_idx, MONRACE_IDX s_idx) * to induce changes in the monster recall code. * */ -bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) +bool mon_take_hit(player_type *target_ptr, MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) { - monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx]; + monster_type *m_ptr = &target_ptr->current_floor_ptr->m_list[m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_type exp_mon; @@ -1016,15 +1016,15 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) if (!monster_is_valid(m_ptr)) m_idx = 0; /* 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 (target_ptr->health_who == m_idx) target_ptr->redraw |= (PR_HEALTH); + if (target_ptr->riding == m_idx) target_ptr->redraw |= (PR_UHEALTH); (void)set_monster_csleep(m_idx, 0); /* Hack - Cancel any special player stealth magics. -LM- */ - if (p_ptr->special_defense & NINJA_S_STEALTH) + if (target_ptr->special_defense & NINJA_S_STEALTH) { - set_superstealth(p_ptr, FALSE); + set_superstealth(target_ptr, FALSE); } /* Genocided by chaos patron */ @@ -1096,7 +1096,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) if (r_ptr->r_akills < MAX_SHORT) r_ptr->r_akills++; /* Recall even invisible uniques or winners */ - if ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)) + if ((m_ptr->ml && !target_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)) { /* Count kills this life */ if ((m_ptr->mflag2 & MFLAG2_KAGE) && (r_info[MON_KAGE].r_pkills < MAX_SHORT)) r_info[MON_KAGE].r_pkills++; @@ -1107,7 +1107,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) else if (r_ptr->r_tkills < MAX_SHORT) r_ptr->r_tkills++; /* Hack -- Auto-recall */ - monster_race_track(m_ptr->ap_r_idx); + monster_race_track(target_ptr, m_ptr->ap_r_idx); } monster_desc(m_name, m_ptr, MD_TRUE_NAME); @@ -1124,7 +1124,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) do { - stop_ty = activate_ty_curse(p_ptr, stop_ty, &count); + stop_ty = activate_ty_curse(target_ptr, stop_ty, &count); } while (--curses); } @@ -1139,86 +1139,86 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) #ifdef WORLD_SCORE if (m_ptr->r_idx == MON_SERPENT) { - screen_dump = make_screen_dump(p_ptr); + screen_dump = make_screen_dump(target_ptr); } #endif } - if (!(d_info[p_ptr->dungeon_idx].flags1 & DF1_BEGINNER)) + if (!(d_info[target_ptr->dungeon_idx].flags1 & DF1_BEGINNER)) { - if (!p_ptr->current_floor_ptr->dun_level && !p_ptr->ambush_flag && !p_ptr->current_floor_ptr->inside_arena) + if (!target_ptr->current_floor_ptr->dun_level && !target_ptr->ambush_flag && !target_ptr->current_floor_ptr->inside_arena) { - chg_virtue(p_ptr, V_VALOUR, -1); + chg_virtue(target_ptr, V_VALOUR, -1); } - else if (r_ptr->level > p_ptr->current_floor_ptr->dun_level) + else if (r_ptr->level > target_ptr->current_floor_ptr->dun_level) { - if (randint1(10) <= (r_ptr->level - p_ptr->current_floor_ptr->dun_level)) - chg_virtue(p_ptr, V_VALOUR, 1); + if (randint1(10) <= (r_ptr->level - target_ptr->current_floor_ptr->dun_level)) + chg_virtue(target_ptr, V_VALOUR, 1); } if (r_ptr->level > 60) { - chg_virtue(p_ptr, V_VALOUR, 1); + chg_virtue(target_ptr, V_VALOUR, 1); } - if (r_ptr->level >= 2 * (p_ptr->lev + 1)) - chg_virtue(p_ptr, V_VALOUR, 2); + if (r_ptr->level >= 2 * (target_ptr->lev + 1)) + chg_virtue(target_ptr, V_VALOUR, 2); } if (r_ptr->flags1 & RF1_UNIQUE) { - if (r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)) chg_virtue(p_ptr, V_HARMONY, 2); + if (r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)) chg_virtue(target_ptr, V_HARMONY, 2); if (r_ptr->flags3 & RF3_GOOD) { - chg_virtue(p_ptr, V_UNLIFE, 2); - chg_virtue(p_ptr, V_VITALITY, -2); + chg_virtue(target_ptr, V_UNLIFE, 2); + chg_virtue(target_ptr, V_VITALITY, -2); } - if (one_in_(3)) chg_virtue(p_ptr, V_INDIVIDUALISM, -1); + if (one_in_(3)) chg_virtue(target_ptr, V_INDIVIDUALISM, -1); } if (m_ptr->r_idx == MON_BEGGAR || m_ptr->r_idx == MON_LEPER) { - chg_virtue(p_ptr, V_COMPASSION, -1); + chg_virtue(target_ptr, V_COMPASSION, -1); } - if ((r_ptr->flags3 & RF3_GOOD) && ((r_ptr->level) / 10 + (3 * p_ptr->current_floor_ptr->dun_level) >= randint1(100))) - chg_virtue(p_ptr, V_UNLIFE, 1); + if ((r_ptr->flags3 & RF3_GOOD) && ((r_ptr->level) / 10 + (3 * target_ptr->current_floor_ptr->dun_level) >= randint1(100))) + chg_virtue(target_ptr, V_UNLIFE, 1); if (r_ptr->d_char == 'A') { if (r_ptr->flags1 & RF1_UNIQUE) - chg_virtue(p_ptr, V_FAITH, -2); - else if ((r_ptr->level) / 10 + (3 * p_ptr->current_floor_ptr->dun_level) >= randint1(100)) + chg_virtue(target_ptr, V_FAITH, -2); + else if ((r_ptr->level) / 10 + (3 * target_ptr->current_floor_ptr->dun_level) >= randint1(100)) { - if (r_ptr->flags3 & RF3_GOOD) chg_virtue(p_ptr, V_FAITH, -1); - else chg_virtue(p_ptr, V_FAITH, 1); + if (r_ptr->flags3 & RF3_GOOD) chg_virtue(target_ptr, V_FAITH, -1); + else chg_virtue(target_ptr, V_FAITH, 1); } } else if (r_ptr->flags3 & RF3_DEMON) { if (r_ptr->flags1 & RF1_UNIQUE) - chg_virtue(p_ptr, V_FAITH, 2); - else if ((r_ptr->level) / 10 + (3 * p_ptr->current_floor_ptr->dun_level) >= randint1(100)) - chg_virtue(p_ptr, V_FAITH, 1); + chg_virtue(target_ptr, V_FAITH, 2); + else if ((r_ptr->level) / 10 + (3 * target_ptr->current_floor_ptr->dun_level) >= randint1(100)) + chg_virtue(target_ptr, V_FAITH, 1); } if ((r_ptr->flags3 & RF3_UNDEAD) && (r_ptr->flags1 & RF1_UNIQUE)) - chg_virtue(p_ptr, V_VITALITY, 2); + chg_virtue(target_ptr, V_VITALITY, 2); if (r_ptr->r_deaths) { if (r_ptr->flags1 & RF1_UNIQUE) { - chg_virtue(p_ptr, V_HONOUR, 10); + chg_virtue(target_ptr, V_HONOUR, 10); } - else if ((r_ptr->level) / 10 + (2 * p_ptr->current_floor_ptr->dun_level) >= randint1(100)) + else if ((r_ptr->level) / 10 + (2 * target_ptr->current_floor_ptr->dun_level) >= randint1(100)) { - chg_virtue(p_ptr, V_HONOUR, 1); + chg_virtue(target_ptr, V_HONOUR, 1); } } if ((r_ptr->flags2 & RF2_MULTIPLY) && (r_ptr->r_akills > 1000) && one_in_(10)) { - chg_virtue(p_ptr, V_VALOUR, -1); + chg_virtue(target_ptr, V_VALOUR, -1); } for (i = 0; i < 4; i++) @@ -1237,25 +1237,25 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) if (thief) { if (r_ptr->flags1 & RF1_UNIQUE) - chg_virtue(p_ptr, V_JUSTICE, 3); - else if (1 + ((r_ptr->level) / 10 + (2 * p_ptr->current_floor_ptr->dun_level)) >= randint1(100)) - chg_virtue(p_ptr, V_JUSTICE, 1); + chg_virtue(target_ptr, V_JUSTICE, 3); + else if (1 + ((r_ptr->level) / 10 + (2 * target_ptr->current_floor_ptr->dun_level)) >= randint1(100)) + chg_virtue(target_ptr, V_JUSTICE, 1); } else if (innocent) { - chg_virtue(p_ptr, V_JUSTICE, -1); + chg_virtue(target_ptr, V_JUSTICE, -1); } if ((r_ptr->flags3 & RF3_ANIMAL) && !(r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags4 & ~(RF4_NOMAGIC_MASK)) && !(r_ptr->a_ability_flags1 & ~(RF5_NOMAGIC_MASK)) && !(r_ptr->a_ability_flags2 & ~(RF6_NOMAGIC_MASK))) { - if (one_in_(4)) chg_virtue(p_ptr, V_NATURE, -1); + if (one_in_(4)) chg_virtue(target_ptr, V_NATURE, -1); } if ((r_ptr->flags1 & RF1_UNIQUE) && record_destroy_uniq) { char note_buf[160]; sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? _("(クローン)", "(Clone)") : ""); - exe_write_diary(p_ptr, NIKKI_UNIQUE, 0, note_buf); + exe_write_diary(target_ptr, NIKKI_UNIQUE, 0, note_buf); } /* Make a sound */ @@ -1271,7 +1271,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) else if (!m_ptr->ml) { #ifdef JP - if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) + if ((target_ptr->pseikaku == SEIKAKU_COMBAT) || (target_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) msg_format("せっかくだから%sを殺した。", m_name); else msg_format("%sを殺した。", m_name); @@ -1297,7 +1297,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) else { #ifdef JP - if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) + if ((target_ptr->pseikaku == SEIKAKU_COMBAT) || (target_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) msg_format("せっかくだから%sを倒した。", m_name); else msg_format("%sを倒した。", m_name); @@ -1311,7 +1311,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) else { #ifdef JP - if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (p_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) + if ((target_ptr->pseikaku == SEIKAKU_COMBAT) || (target_ptr->inventory_list[INVEN_BOW].name1 == ART_CRIMSON)) msg_format("せっかくだから%sを葬り去った。", m_name); else msg_format("%sを葬り去った。", m_name); @@ -1336,7 +1336,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note) monster_death(m_idx, TRUE); /* Mega hack : replace IKETA to BIKETAL */ - if ((m_ptr->r_idx == MON_IKETA) && !(p_ptr->current_floor_ptr->inside_arena || p_ptr->phase_out)) + if ((m_ptr->r_idx == MON_IKETA) && !(target_ptr->current_floor_ptr->inside_arena || target_ptr->phase_out)) { POSITION dummy_y = m_ptr->fy; POSITION dummy_x = m_ptr->fx; diff --git a/src/monster-status.h b/src/monster-status.h index 7434b912e..2c7a8f5ec 100644 --- a/src/monster-status.h +++ b/src/monster-status.h @@ -4,7 +4,7 @@ extern bool monster_is_powerful(MONSTER_IDX m_idx); extern DEPTH monster_level_idx(MONSTER_IDX m_idx); extern HIT_POINT mon_damage_mod(monster_type *m_ptr, HIT_POINT dam, bool is_psy_spear); -extern bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note); +extern bool mon_take_hit(player_type *target_ptr, MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, concptr note); extern int get_mproc_idx(MONSTER_IDX m_idx, int mproc_type); extern bool monster_is_valid(monster_type *m_ptr); diff --git a/src/player-move.c b/src/player-move.c index b1f9cb8ab..bf4a3111c 100644 --- a/src/player-move.c +++ b/src/player-move.c @@ -999,7 +999,7 @@ void move_player(player_type *creature_ptr, DIRECTION dir, bool do_pickup, bool if (m_ptr->ml) { /* Auto-Recall if possible and visible */ - if (!creature_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!creature_ptr->image) monster_race_track(creature_ptr, m_ptr->ap_r_idx); health_track(creature_ptr, g_ptr->m_idx); } diff --git a/src/spells1.c b/src/spells1.c index 60b239edf..cc0e1e6ff 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -3864,7 +3864,7 @@ static bool project_m(player_type *caster_ptr, floor_type *floor_ptr, MONSTER_ID bool fear = FALSE; /* Hurt the monster, check for fear and death */ - if (mon_take_hit(g_ptr->m_idx, dam, &fear, note_dies)) + if (mon_take_hit(caster_ptr, g_ptr->m_idx, dam, &fear, note_dies)) { /* Dead monster */ } @@ -5812,7 +5812,7 @@ bool project(player_type *caster_ptr, MONSTER_IDX who, POSITION rad, POSITION y, if (m_ptr->ml) { - if (!caster_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!caster_ptr->image) monster_race_track(caster_ptr, m_ptr->ap_r_idx); health_track(caster_ptr, caster_ptr->current_floor_ptr->grid_array[project_m_y][project_m_x].m_idx); } } @@ -5839,7 +5839,7 @@ bool project(player_type *caster_ptr, MONSTER_IDX who, POSITION rad, POSITION y, if (m_ptr->ml) { - if (!caster_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!caster_ptr->image) monster_race_track(caster_ptr, m_ptr->ap_r_idx); health_track(caster_ptr, caster_ptr->current_floor_ptr->grid_array[project_m_y][project_m_x].m_idx); } } @@ -5973,7 +5973,7 @@ bool project(player_type *caster_ptr, MONSTER_IDX who, POSITION rad, POSITION y, if (m_ptr->ml) { - if (!caster_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!caster_ptr->image) monster_race_track(caster_ptr, m_ptr->ap_r_idx); health_track(caster_ptr, caster_ptr->current_floor_ptr->grid_array[project_m_y][project_m_x].m_idx); } } @@ -6493,7 +6493,7 @@ bool project(player_type *caster_ptr, MONSTER_IDX who, POSITION rad, POSITION y, if (m_ptr->ml) { - if (!caster_ptr->image) monster_race_track(m_ptr->ap_r_idx); + if (!caster_ptr->image) monster_race_track(caster_ptr, m_ptr->ap_r_idx); health_track(caster_ptr, caster_ptr->current_floor_ptr->grid_array[y][x].m_idx); } } diff --git a/src/targeting.c b/src/targeting.c index eb1a5c3cb..b9a496f0a 100644 --- a/src/targeting.c +++ b/src/targeting.c @@ -605,7 +605,7 @@ static char target_set_aux(player_type *subject_ptr, POSITION y, POSITION x, BIT boring = FALSE; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); - monster_race_track(m_ptr->ap_r_idx); + monster_race_track(subject_ptr, m_ptr->ap_r_idx); health_track(subject_ptr, g_ptr->m_idx); handle_stuff(subject_ptr); diff --git a/src/view-mainwindow.c b/src/view-mainwindow.c index d63ade5dd..547d3b1af 100644 --- a/src/view-mainwindow.c +++ b/src/view-mainwindow.c @@ -3887,22 +3887,19 @@ void print_path(player_type *player_ptr, POSITION y, POSITION x) /* * Hack -- track the given monster race */ -void monster_race_track(MONRACE_IDX r_idx) +void monster_race_track(player_type *player_ptr, MONRACE_IDX r_idx) { - /* Save this monster ID */ p_ptr->monster_race_idx = r_idx; - p_ptr->window |= (PW_MONSTER); } + /* * Hack -- track the given object kind */ -void object_kind_track(KIND_OBJECT_IDX k_idx) +void object_kind_track(player_type *player_ptr, KIND_OBJECT_IDX k_idx) { - /* Save this monster ID */ p_ptr->object_kind_idx = k_idx; - p_ptr->window |= (PW_OBJECT); } diff --git a/src/view-mainwindow.h b/src/view-mainwindow.h index 5622b1a3e..8bf80e493 100644 --- a/src/view-mainwindow.h +++ b/src/view-mainwindow.h @@ -13,8 +13,8 @@ extern concptr map_name(player_type *creature_ptr); extern void print_monster_list(floor_type *floor_ptr, TERM_LEN x, TERM_LEN y, TERM_LEN max_lines); extern void move_cursor_relative(int row, int col); extern void print_path(player_type *player_ptr, POSITION y, POSITION x); -extern void monster_race_track(MONRACE_IDX r_idx); -extern void object_kind_track(KIND_OBJECT_IDX k_idx); +extern void monster_race_track(player_type *player_ptr, MONRACE_IDX r_idx); +extern void object_kind_track(player_type *player_ptr, KIND_OBJECT_IDX k_idx); extern void resize_map(void); extern void redraw_window(void); extern bool change_panel(player_type *player_ptr, POSITION dy, POSITION dx); -- 2.11.0