From: Deskull Date: Wed, 30 Jan 2019 04:27:47 +0000 (+0900) Subject: [Refactor] #37353 青魔法とものまねのレベルテレポートアウェイを teleport_level_other() に分離。 / Separate telep... X-Git-Url: http://git.osdn.net/view?p=hengband%2Fhengband.git;a=commitdiff_plain;h=31ccf1a8b7326da5e38d86ef1a323d0aaff35588 [Refactor] #37353 青魔法とものまねのレベルテレポートアウェイを teleport_level_other() に分離。 / Separate teleport level other of blue magic and mimic to teleport_level_other(). --- 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)