OSDN Git Service

[Refactor] #37353 ドラコニアンのブレス処理を draconian_breath() に分離。 / Separate Draconian racial...
authorDeskull <deskull@users.sourceforge.jp>
Wed, 23 Jan 2019 03:59:23 +0000 (12:59 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Wed, 23 Jan 2019 03:59:23 +0000 (12:59 +0900)
src/externs.h
src/racial.c
src/spells2.c

index 511b894..c30875d 100644 (file)
@@ -989,6 +989,7 @@ extern void stop_mouth(void);
 extern bool_hack vampirism(void);
 extern bool panic_hit(void);
 extern bool psychometry(void);
+extern bool draconian_breath(player_type *creature_ptr);
 
 /* spells3.c */
 extern bool teleport_away(MONSTER_IDX m_idx, POSITION dis, BIT_FLAGS mode);
index 5688708..de903f6 100644 (file)
@@ -970,142 +970,11 @@ static bool cmd_racial_power_aux(s32b command)
                case RACE_DARK_ELF:
                        if (!get_aim_dir(&dir)) return FALSE;
                        msg_print(_("マジック・ミサイルを放った。", "You cast a magic missile."));
-                       fire_bolt_or_beam(10, GF_MISSILE, dir,
-                           damroll(3 + ((plev - 1) / 5), 4));
+                       fire_bolt_or_beam(10, GF_MISSILE, dir, damroll(3 + ((plev - 1) / 5), 4));
                        break;
 
                case RACE_DRACONIAN:
-                       {
-                               int Type = (one_in_(3) ? GF_COLD : GF_FIRE);
-                               concptr Type_desc = ((Type == GF_COLD) ? _("冷気", "cold") : _("炎", "fire"));
-
-                               if (!get_aim_dir(&dir)) return FALSE;
-
-                               if (randint1(100) < plev)
-                               {
-                                       switch (p_ptr->pclass)
-                                       {
-                                               case CLASS_WARRIOR:
-                                               case CLASS_BERSERKER:
-                                               case CLASS_RANGER:
-                                               case CLASS_TOURIST:
-                                               case CLASS_IMITATOR:
-                                               case CLASS_ARCHER:
-                                               case CLASS_SMITH:
-                                                       if (one_in_(3))
-                                                       {
-                                                               Type = GF_MISSILE;
-                                                               Type_desc = _("エレメント", "the elements");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_SHARDS;
-                                                               Type_desc = _("破片", "shards");
-                                                       }
-                                                       break;
-                                               case CLASS_MAGE:
-                                               case CLASS_WARRIOR_MAGE:
-                                               case CLASS_HIGH_MAGE:
-                                               case CLASS_SORCERER:
-                                               case CLASS_MAGIC_EATER:
-                                               case CLASS_RED_MAGE:
-                                               case CLASS_BLUE_MAGE:
-                                               case CLASS_MIRROR_MASTER:
-                                                       if (one_in_(3))
-                                                       {
-                                                               Type = GF_MANA;
-                                                               Type_desc = _("魔力", "mana");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_DISENCHANT;
-                                                               Type_desc = _("劣化", "disenchantment");
-                                                       }
-                                                       break;
-                                               case CLASS_CHAOS_WARRIOR:
-                                                       if (!one_in_(3))
-                                                       {
-                                                               Type = GF_CONFUSION;
-                                                               Type_desc = _("混乱", "confusion");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_CHAOS;
-                                                               Type_desc = _("カオス", "chaos");
-                                                       }
-                                                       break;
-                                               case CLASS_MONK:
-                                               case CLASS_SAMURAI:
-                                               case CLASS_FORCETRAINER:
-                                                       if (!one_in_(3))
-                                                       {
-                                                               Type = GF_CONFUSION;
-                                                               Type_desc = _("混乱", "confusion");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_SOUND;
-                                                               Type_desc = _("轟音", "sound");
-                                                       }
-                                                       break;
-                                               case CLASS_MINDCRAFTER:
-                                                       if (!one_in_(3))
-                                                       {
-                                                               Type = GF_CONFUSION;
-                                                               Type_desc = _("混乱", "confusion");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_PSI;
-                                                               Type_desc = _("精神エネルギー", "mental energy");
-                                                       }
-                                                       break;
-                                               case CLASS_PRIEST:
-                                               case CLASS_PALADIN:
-                                                       if (one_in_(3))
-                                                       {
-                                                               Type = GF_HELL_FIRE;
-                                                               Type_desc = _("地獄の劫火", "hellfire");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_HOLY_FIRE;
-                                                               Type_desc = _("聖なる炎", "holy fire");
-                                                       }
-                                                       break;
-                                               case CLASS_ROGUE:
-                                               case CLASS_NINJA:
-                                                       if (one_in_(3))
-                                                       {
-                                                               Type = GF_DARK;
-                                                               Type_desc = _("暗黒", "darkness");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_POIS;
-                                                               Type_desc = _("毒", "poison");
-                                                       }
-                                                       break;
-                                               case CLASS_BARD:
-                                                       if (!one_in_(3))
-                                                       {
-                                                               Type = GF_SOUND;
-                                                               Type_desc = _("轟音", "sound");
-                                                       }
-                                                       else
-                                                       {
-                                                               Type = GF_CONFUSION;
-                                                               Type_desc = _("混乱", "confusion");
-                                                       }
-                                                       break;
-                                       }
-                               }
-
-                               stop_mouth();
-                               msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), Type_desc);
-
-                               fire_breath(Type, dir, plev * 2, (plev / 15) + 1);
-                       }
+                       return draconian_breath(p_ptr);
                        break;
 
                case RACE_MIND_FLAYER:
index 3e99e39..17cfd38 100644 (file)
@@ -4982,3 +4982,139 @@ bool psychometry(void)
        /* Something happened */
        return (TRUE);
 }
+
+
+bool draconian_breath(player_type *creature_ptr)
+{
+       DIRECTION dir;
+       int Type = (one_in_(3) ? GF_COLD : GF_FIRE);
+       concptr Type_desc = ((Type == GF_COLD) ? _("冷気", "cold") : _("炎", "fire"));
+
+       if (!get_aim_dir(&dir)) return FALSE;
+
+       if (randint1(100) < creature_ptr->lev)
+       {
+               switch (creature_ptr->pclass)
+               {
+               case CLASS_WARRIOR:
+               case CLASS_BERSERKER:
+               case CLASS_RANGER:
+               case CLASS_TOURIST:
+               case CLASS_IMITATOR:
+               case CLASS_ARCHER:
+               case CLASS_SMITH:
+                       if (one_in_(3))
+                       {
+                               Type = GF_MISSILE;
+                               Type_desc = _("エレメント", "the elements");
+                       }
+                       else
+                       {
+                               Type = GF_SHARDS;
+                               Type_desc = _("破片", "shards");
+                       }
+                       break;
+               case CLASS_MAGE:
+               case CLASS_WARRIOR_MAGE:
+               case CLASS_HIGH_MAGE:
+               case CLASS_SORCERER:
+               case CLASS_MAGIC_EATER:
+               case CLASS_RED_MAGE:
+               case CLASS_BLUE_MAGE:
+               case CLASS_MIRROR_MASTER:
+                       if (one_in_(3))
+                       {
+                               Type = GF_MANA;
+                               Type_desc = _("魔力", "mana");
+                       }
+                       else
+                       {
+                               Type = GF_DISENCHANT;
+                               Type_desc = _("劣化", "disenchantment");
+                       }
+                       break;
+               case CLASS_CHAOS_WARRIOR:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_CHAOS;
+                               Type_desc = _("カオス", "chaos");
+                       }
+                       break;
+               case CLASS_MONK:
+               case CLASS_SAMURAI:
+               case CLASS_FORCETRAINER:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_SOUND;
+                               Type_desc = _("轟音", "sound");
+                       }
+                       break;
+               case CLASS_MINDCRAFTER:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_PSI;
+                               Type_desc = _("精神エネルギー", "mental energy");
+                       }
+                       break;
+               case CLASS_PRIEST:
+               case CLASS_PALADIN:
+                       if (one_in_(3))
+                       {
+                               Type = GF_HELL_FIRE;
+                               Type_desc = _("地獄の劫火", "hellfire");
+                       }
+                       else
+                       {
+                               Type = GF_HOLY_FIRE;
+                               Type_desc = _("聖なる炎", "holy fire");
+                       }
+                       break;
+               case CLASS_ROGUE:
+               case CLASS_NINJA:
+                       if (one_in_(3))
+                       {
+                               Type = GF_DARK;
+                               Type_desc = _("暗黒", "darkness");
+                       }
+                       else
+                       {
+                               Type = GF_POIS;
+                               Type_desc = _("毒", "poison");
+                       }
+                       break;
+               case CLASS_BARD:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_SOUND;
+                               Type_desc = _("轟音", "sound");
+                       }
+                       else
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       break;
+               }
+       }
+
+       stop_mouth();
+       msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), Type_desc);
+
+       fire_breath(Type, creature_ptr->lev, dir, creature_ptr->lev * 2, (creature_ptr->lev / 15) + 1);
+}
+