From 31ccf1a8b7326da5e38d86ef1a323d0aaff35588 Mon Sep 17 00:00:00 2001 From: Deskull Date: Wed, 30 Jan 2019 13:27:47 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20=E9=9D=92=E9=AD=94?= =?utf8?q?=E6=B3=95=E3=81=A8=E3=82=82=E3=81=AE=E3=81=BE=E3=81=AD=E3=81=AE?= =?utf8?q?=E3=83=AC=E3=83=99=E3=83=AB=E3=83=86=E3=83=AC=E3=83=9D=E3=83=BC?= =?utf8?q?=E3=83=88=E3=82=A2=E3=82=A6=E3=82=A7=E3=82=A4=E3=82=92=20telepor?= =?utf8?q?t=5Flevel=5Fother()=20=E3=81=AB=E5=88=86=E9=9B=A2=E3=80=82=20/?= =?utf8?q?=20Separate=20teleport=20level=20other=20of=20blue=20magic=20and?= =?utf8?q?=20mimic=20to=20teleport=5Flevel=5Fother().?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/externs.h | 1 + src/mane.c | 25 ++----------------------- src/mspells3.c | 26 +++----------------------- src/spells3.c | 26 ++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 46 deletions(-) diff --git a/src/externs.h b/src/externs.h index bceae5fed..1ee9598b9 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1009,6 +1009,7 @@ extern void teleport_player(POSITION dis, BIT_FLAGS mode); extern void teleport_player_away(MONSTER_IDX m_idx, POSITION dis); extern void teleport_player_to(POSITION ny, POSITION nx, BIT_FLAGS mode); extern void teleport_away_followable(MONSTER_IDX m_idx); +extern bool teleport_level_other(player_type *creature_ptr); extern void teleport_level(MONSTER_IDX m_idx); extern DUNGEON_IDX choose_dungeon(concptr note, POSITION y, POSITION x); extern bool recall_player(player_type *creature_ptr, TIME_EFFECT turns); diff --git a/src/mane.c b/src/mane.c index 4bfe464f3..8b27f5d51 100644 --- a/src/mane.c +++ b/src/mane.c @@ -721,31 +721,10 @@ static bool use_mane(int spell) (void)fire_beam(GF_AWAY_ALL, dir, plev); break; - case MS_TELE_LEVEL: - { - IDX target_m_idx; - monster_type *m_ptr; - monster_race *r_ptr; - GAME_TEXT m_name[MAX_NLEN]; - if (!target_set(TARGET_KILL)) return FALSE; - target_m_idx = cave[target_row][target_col].m_idx; - if (!target_m_idx) break; - if (!player_has_los_bold(target_row, target_col)) break; - if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break; - m_ptr = &m_list[target_m_idx]; - r_ptr = &r_info[m_ptr->r_idx]; - monster_desc(m_name, m_ptr, 0); - msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name); - - if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) || - (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60))) - { - msg_print(_("しかし効果がなかった!", "%^s is unaffected!")); - } - else teleport_level(target_m_idx); + case MS_TELE_LEVEL: + return teleport_level_other(p_ptr); break; - } case MS_PSY_SPEAR: if (!get_aim_dir(&dir)) return FALSE; diff --git a/src/mspells3.c b/src/mspells3.c index 5b4c94798..8ce0066f5 100644 --- a/src/mspells3.c +++ b/src/mspells3.c @@ -1080,31 +1080,11 @@ static bool cast_learned_spell(int spell, bool success) (void)fire_beam(GF_AWAY_ALL, dir, 100); break; - case MS_TELE_LEVEL: - { - MONSTER_IDX target_m_idx; - monster_type *m_ptr; - monster_race *r_ptr; - GAME_TEXT m_name[MAX_NLEN]; - - if (!target_set(TARGET_KILL)) return FALSE; - target_m_idx = cave[target_row][target_col].m_idx; - if (!target_m_idx) break; - if (!player_has_los_bold(target_row, target_col)) break; - if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break; - m_ptr = &m_list[target_m_idx]; - r_ptr = &r_info[m_ptr->r_idx]; - monster_desc(m_name, m_ptr, 0); - msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name); - if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) || - (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60))) - { - msg_format(_("しかし効果がなかった!", "%^s is unaffected!"), m_name); - } - else teleport_level(target_m_idx); + case MS_TELE_LEVEL: + return teleport_level_other(p_ptr); break; - } + case MS_PSY_SPEAR: if (!get_aim_dir(&dir)) return FALSE; diff --git a/src/spells3.c b/src/spells3.c index a1b0d4156..85be23418 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -553,6 +553,32 @@ void teleport_away_followable(MONSTER_IDX m_idx) } +bool teleport_level_other(player_type *creature_ptr) +{ + MONSTER_IDX target_m_idx; + monster_type *m_ptr; + monster_race *r_ptr; + GAME_TEXT m_name[MAX_NLEN]; + + if (!target_set(TARGET_KILL)) return FALSE; + target_m_idx = cave[target_row][target_col].m_idx; + if (!target_m_idx) return TRUE; + if (!player_has_los_bold(target_row, target_col)) return TRUE; + if (!projectable(creature_ptr->y, creature_ptr->x, target_row, target_col)) return TRUE; + m_ptr = &m_list[target_m_idx]; + r_ptr = &r_info[m_ptr->r_idx]; + monster_desc(m_name, m_ptr, 0); + msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name); + + if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) || + (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > creature_ptr->lev + randint1(60))) + { + msg_format(_("しかし効果がなかった!", "%^s is unaffected!"), m_name); + } + else teleport_level(target_m_idx); + return TRUE; +} + /*! * @brief プレイヤー及びモンスターをレベルテレポートさせる / * Teleport the player one level up or down (random when legal) -- 2.11.0