OSDN Git Service

[Fix] 悪魔領域血の呪いでテレポートアウェイが発生したとき画面が@で埋まる
authordis- <dis.rogue@gmail.com>
Sat, 3 Feb 2024 13:12:56 +0000 (22:12 +0900)
committerdis- <dis.rogue@gmail.com>
Sat, 3 Feb 2024 13:13:00 +0000 (22:13 +0900)
update_monster(player_ptr, 0, false) が走ってしまうことによる画面崩壊。
affect_monster()内部で対象モンスターの座標が移動することを考慮していないことによるバグ。
座標の上のm_idxではなく、事前にm_idxを覚えさせておくことで回避する。

src/effect/effect-monster.cpp

index 725f97b..3458531 100644 (file)
@@ -737,10 +737,11 @@ bool affect_monster(
 {
     EffectMonster tmp_effect(player_ptr, who, r, y, x, dam, attribute, flag, see_s_msg);
     auto *em_ptr = &tmp_effect;
+    auto target_m_idx = em_ptr->g_ptr->m_idx;
 
     make_description_of_affecred_monster(player_ptr, em_ptr);
 
-    if (player_ptr->riding && (em_ptr->g_ptr->m_idx == player_ptr->riding)) {
+    if (player_ptr->riding && (target_m_idx == player_ptr->riding)) {
         disturb(player_ptr, true, true);
     }
 
@@ -758,7 +759,7 @@ bool affect_monster(
     update_phase_out_stat(player_ptr, em_ptr);
     const auto monster_is_valid = MonsterRace(em_ptr->m_ptr->r_idx).is_valid();
     if (monster_is_valid) {
-        update_monster(player_ptr, em_ptr->g_ptr->m_idx, false);
+        update_monster(player_ptr, target_m_idx, false);
     }
 
     lite_spot(player_ptr, em_ptr->y, em_ptr->x);