From f492cf0039fe18a1a81ee742e4f3d6ef369a3b80 Mon Sep 17 00:00:00 2001 From: Deskull Date: Fri, 4 Jan 2019 12:07:02 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20summon=5Fkin=5Fplayer()=20?= =?utf8?q?=E3=82=92=20spells-summon.c=20=E3=81=B8=E7=A7=BB=E5=8B=95?= =?utf8?q?=E3=80=82=20/=20Separate=20summon=5Fkin=5Fplayer()=20to=20spells?= =?utf8?q?-summon.c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/cmd-read.c | 1 + src/externs.h | 1 - src/mane.c | 1 + src/monster2.c | 1 - src/mspells3.c | 1 + src/spells-summon.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/spells-summon.h | 2 + src/spells3.c | 115 --------------------------------------------------- 8 files changed, 121 insertions(+), 117 deletions(-) diff --git a/src/cmd-read.c b/src/cmd-read.c index 24c4fd4f6..28c21b599 100644 --- a/src/cmd-read.c +++ b/src/cmd-read.c @@ -8,6 +8,7 @@ #include "angband.h" #include "object-hook.h" +#include "spells-summon.h" /*! * @brief 巻物を読むコマンドのサブルーチン diff --git a/src/externs.h b/src/externs.h index 3b434edf2..0f4f24cfc 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1064,7 +1064,6 @@ extern bool brand_bolts(void); extern bool polymorph_monster(POSITION y, POSITION x); extern bool dimension_door(void); extern bool mirror_tunnel(void); -extern bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode); extern void massacre(void); extern bool eat_lock(void); extern bool shock_power(void); diff --git a/src/mane.c b/src/mane.c index ee4da6a58..256859374 100644 --- a/src/mane.c +++ b/src/mane.c @@ -11,6 +11,7 @@ */ #include "angband.h" +#include "spells-summon.h" static int damage; diff --git a/src/monster2.c b/src/monster2.c index 8647dbf0a..661693a51 100644 --- a/src/monster2.c +++ b/src/monster2.c @@ -793,7 +793,6 @@ static bool summon_specific_aux(MONRACE_IDX r_idx) break; } - case SUMMON_KIN: { okay = ((r_ptr->d_char == summon_kin_type) && (r_idx != MON_HAGURE)); diff --git a/src/mspells3.c b/src/mspells3.c index 9257783ae..31bc510bd 100644 --- a/src/mspells3.c +++ b/src/mspells3.c @@ -11,6 +11,7 @@ */ #include "angband.h" +#include "spells-summon.h" #define pseudo_plev() (((p_ptr->lev + 40) * (p_ptr->lev + 40) - 1550) / 130) /*!< モンスター魔法をプレイヤーが使用する場合の換算レベル */ diff --git a/src/spells-summon.c b/src/spells-summon.c index 53cb422da..d36f7f128 100644 --- a/src/spells-summon.c +++ b/src/spells-summon.c @@ -164,3 +164,119 @@ bool cast_summon_greater_demon(void) return TRUE; } + +/*! + * @brief 同族召喚(援軍)処理 + * @param level 召喚基準レベル + * @param y 召喚先Y座標 + * @param x 召喚先X座標 + * @param mode 召喚オプション + * @return ターンを消費した場合TRUEを返す + */ +bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode) +{ + bool pet = (bool)(mode & PM_FORCE_PET); + if (!pet) mode |= PM_NO_PET; + + switch (p_ptr->mimic_form) + { + case MIMIC_NONE: + switch (p_ptr->prace) + { + case RACE_HUMAN: + case RACE_AMBERITE: + case RACE_BARBARIAN: + case RACE_BEASTMAN: + case RACE_DUNADAN: + summon_kin_type = 'p'; + break; + case RACE_HALF_ELF: + case RACE_ELF: + case RACE_HOBBIT: + case RACE_GNOME: + case RACE_DWARF: + case RACE_HIGH_ELF: + case RACE_NIBELUNG: + case RACE_DARK_ELF: + case RACE_MIND_FLAYER: + case RACE_KUTAR: + case RACE_S_FAIRY: + summon_kin_type = 'h'; + break; + case RACE_HALF_ORC: + summon_kin_type = 'o'; + break; + case RACE_HALF_TROLL: + summon_kin_type = 'T'; + break; + case RACE_HALF_OGRE: + summon_kin_type = 'O'; + break; + case RACE_HALF_GIANT: + case RACE_HALF_TITAN: + case RACE_CYCLOPS: + summon_kin_type = 'P'; + break; + case RACE_YEEK: + summon_kin_type = 'y'; + break; + case RACE_KLACKON: + summon_kin_type = 'K'; + break; + case RACE_KOBOLD: + summon_kin_type = 'k'; + break; + case RACE_IMP: + if (one_in_(13)) summon_kin_type = 'U'; + else summon_kin_type = 'u'; + break; + case RACE_DRACONIAN: + summon_kin_type = 'd'; + break; + case RACE_GOLEM: + case RACE_ANDROID: + summon_kin_type = 'g'; + break; + case RACE_SKELETON: + if (one_in_(13)) summon_kin_type = 'L'; + else summon_kin_type = 's'; + break; + case RACE_ZOMBIE: + summon_kin_type = 'z'; + break; + case RACE_VAMPIRE: + summon_kin_type = 'V'; + break; + case RACE_SPECTRE: + summon_kin_type = 'G'; + break; + case RACE_SPRITE: + summon_kin_type = 'I'; + break; + case RACE_ENT: + summon_kin_type = '#'; + break; + case RACE_ANGEL: + summon_kin_type = 'A'; + break; + case RACE_DEMON: + summon_kin_type = 'U'; + break; + default: + summon_kin_type = 'p'; + break; + } + break; + case MIMIC_DEMON: + if (one_in_(13)) summon_kin_type = 'U'; + else summon_kin_type = 'u'; + break; + case MIMIC_DEMON_LORD: + summon_kin_type = 'U'; + break; + case MIMIC_VAMPIRE: + summon_kin_type = 'V'; + break; + } + return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode); +} diff --git a/src/spells-summon.h b/src/spells-summon.h index a22eb2919..fa448ed86 100644 --- a/src/spells-summon.h +++ b/src/spells-summon.h @@ -2,3 +2,5 @@ extern bool cast_summon_demon(int power); extern bool item_tester_offer(object_type *o_ptr); extern bool cast_summon_greater_demon(void); +extern bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode); + diff --git a/src/spells3.c b/src/spells3.c index 40a1b4159..1c6c30fdd 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -4750,121 +4750,6 @@ bool eat_magic(int power) return TRUE; } -/*! - * @brief 同族召喚(援軍)処理 - * @param level 召喚基準レベル - * @param y 召喚先Y座標 - * @param x 召喚先X座標 - * @param mode 召喚オプション - * @return ターンを消費した場合TRUEを返す - */ -bool summon_kin_player(DEPTH level, POSITION y, POSITION x, BIT_FLAGS mode) -{ - bool pet = (bool)(mode & PM_FORCE_PET); - if (!pet) mode |= PM_NO_PET; - - switch (p_ptr->mimic_form) - { - case MIMIC_NONE: - switch (p_ptr->prace) - { - case RACE_HUMAN: - case RACE_AMBERITE: - case RACE_BARBARIAN: - case RACE_BEASTMAN: - case RACE_DUNADAN: - summon_kin_type = 'p'; - break; - case RACE_HALF_ELF: - case RACE_ELF: - case RACE_HOBBIT: - case RACE_GNOME: - case RACE_DWARF: - case RACE_HIGH_ELF: - case RACE_NIBELUNG: - case RACE_DARK_ELF: - case RACE_MIND_FLAYER: - case RACE_KUTAR: - case RACE_S_FAIRY: - summon_kin_type = 'h'; - break; - case RACE_HALF_ORC: - summon_kin_type = 'o'; - break; - case RACE_HALF_TROLL: - summon_kin_type = 'T'; - break; - case RACE_HALF_OGRE: - summon_kin_type = 'O'; - break; - case RACE_HALF_GIANT: - case RACE_HALF_TITAN: - case RACE_CYCLOPS: - summon_kin_type = 'P'; - break; - case RACE_YEEK: - summon_kin_type = 'y'; - break; - case RACE_KLACKON: - summon_kin_type = 'K'; - break; - case RACE_KOBOLD: - summon_kin_type = 'k'; - break; - case RACE_IMP: - if (one_in_(13)) summon_kin_type = 'U'; - else summon_kin_type = 'u'; - break; - case RACE_DRACONIAN: - summon_kin_type = 'd'; - break; - case RACE_GOLEM: - case RACE_ANDROID: - summon_kin_type = 'g'; - break; - case RACE_SKELETON: - if (one_in_(13)) summon_kin_type = 'L'; - else summon_kin_type = 's'; - break; - case RACE_ZOMBIE: - summon_kin_type = 'z'; - break; - case RACE_VAMPIRE: - summon_kin_type = 'V'; - break; - case RACE_SPECTRE: - summon_kin_type = 'G'; - break; - case RACE_SPRITE: - summon_kin_type = 'I'; - break; - case RACE_ENT: - summon_kin_type = '#'; - break; - case RACE_ANGEL: - summon_kin_type = 'A'; - break; - case RACE_DEMON: - summon_kin_type = 'U'; - break; - default: - summon_kin_type = 'p'; - break; - } - break; - case MIMIC_DEMON: - if (one_in_(13)) summon_kin_type = 'U'; - else summon_kin_type = 'u'; - break; - case MIMIC_DEMON_LORD: - summon_kin_type = 'U'; - break; - case MIMIC_VAMPIRE: - summon_kin_type = 'V'; - break; - } - return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode); -} /*! * @brief 皆殺し(全方向攻撃)処理 -- 2.11.0