OSDN Git Service

[Refactor] #37353 spells.hにスペルに関する共通定義を追加。。 / Add common definition to spells.h.
[hengband/hengband.git] / src / realm-nature.c
index fb608a7..836a69e 100644 (file)
@@ -1,5 +1,8 @@
 #include "angband.h"\r
 #include "cmd-spell.h"\r
+#include "projection.h"\r
+#include "spells-summon.h"\r
+#include "avatar.h"\r
 \r
 \r
 /*!\r
 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)\r
 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。\r
 */\r
-cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
+concptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)\r
 {\r
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;\r
        bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;\r
        bool info = (mode == SPELL_INFO) ? TRUE : FALSE;\r
        bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;\r
 \r
-       static const char s_dam[] = _("損傷:", "dam ");\r
-       static const char s_rng[] = _("射程", "rng ");\r
-\r
        DIRECTION dir;\r
        PLAYER_LEVEL plev = p_ptr->lev;\r
 \r
@@ -44,11 +44,11 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("電撃の短いビームを放つ。", "Fires a short beam of lightning.");\r
 \r
                {\r
-                       int dice = 3 + (plev - 1) / 5;\r
-                       int sides = 4;\r
+                       DICE_NUMBER dice = 3 + (plev - 1) / 5;\r
+                       DICE_SID sides = 4;\r
                        POSITION range = plev / 6 + 2;\r
 \r
-                       if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);\r
+                       if (info) return format("%s%dd%d %s%d", KWD_DAM, dice, sides, KWD_RANGE, range);\r
 \r
                        if (cast)\r
                        {\r
@@ -103,8 +103,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");\r
 \r
                {\r
-                       int dice = 2;\r
-                       int sides = plev / 2;\r
+                       DICE_NUMBER dice = 2;\r
+                       DICE_SID sides = plev / 2;\r
                        POSITION rad = (plev / 10) + 1;\r
 \r
                        if (info) return info_damage(dice, sides, 0);\r
@@ -164,8 +164,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("怪我を全快させ、毒を体から完全に取り除き、体力を少し回復させる。", "Heals all cut and poison status. Heals HP a little.");\r
 \r
                {\r
-                       int dice = 2;\r
-                       int sides = 8;\r
+                       DICE_NUMBER dice = 2;\r
+                       DICE_SID sides = 8;\r
 \r
                        if (info) return info_heal(dice, sides, 0);\r
 \r
@@ -183,8 +183,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("壁を溶かして床にする。", "Turns one rock square to mud.");\r
 \r
                {\r
-                       int dice = 1;\r
-                       int sides = 30;\r
+                       DICE_NUMBER dice = 1;\r
+                       DICE_SID sides = 30;\r
                        int base = 20;\r
 \r
                        if (info) return info_damage(dice, sides, base);\r
@@ -203,8 +203,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("冷気のボルトもしくはビームを放つ。", "Fires a bolt or beam of cold.");\r
 \r
                {\r
-                       int dice = 3 + (plev - 5) / 4;\r
-                       int sides = 8;\r
+                       DICE_NUMBER dice = 3 + (plev - 5) / 4;\r
+                       DICE_SID sides = 8;\r
 \r
                        if (info) return info_damage(dice, sides, 0);\r
 \r
@@ -243,8 +243,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("火炎のボルトもしくはビームを放つ。", "Fires a bolt or beam of fire.");\r
 \r
                {\r
-                       int dice = 5 + (plev - 5) / 4;\r
-                       int sides = 8;\r
+                       DICE_NUMBER dice = 5 + (plev - 5) / 4;\r
+                       DICE_SID sides = 8;\r
 \r
                        if (info) return info_damage(dice, sides, 0);\r
 \r
@@ -261,8 +261,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("光線を放つ。光りを嫌うモンスターに効果がある。", "Fires a beam of light which damages to light-sensitive monsters.");\r
 \r
                {\r
-                       int dice = 6;\r
-                       int sides = 8;\r
+                       DICE_NUMBER dice = 6;\r
+                       DICE_SID sides = 8;\r
 \r
                        if (info) return info_damage(dice, sides, 0);\r
 \r
@@ -278,16 +278,10 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 13:\r
                if (name) return _("足かせ", "Entangle");\r
                if (desc) return _("視界内の全てのモンスターを減速させる。抵抗されると無効。", "Attempts to slow all monsters in sight.");\r
-\r
                {\r
                        int power = plev;\r
-\r
                        if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               slow_monsters(plev);\r
-                       }\r
+                       if (cast) slow_monsters(plev);\r
                }\r
                break;\r
 \r
@@ -298,7 +292,7 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {\r
                        if (cast)\r
                        {\r
-                               if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))\r
+                               if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0')))\r
                                {\r
                                        msg_print(_("動物は現れなかった。", "No animals arrive."));\r
                                }\r
@@ -335,7 +329,7 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
 \r
                {\r
                        int base = 20;\r
-                       int sides = 30;\r
+                       DICE_SID sides = 30;\r
 \r
                        if (info) return info_duration(base, sides);\r
 \r
@@ -385,13 +379,8 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
 \r
                {\r
                        int power = plev * 2;\r
-\r
                        if (info) return info_power(power);\r
-\r
-                       if (cast)\r
-                       {\r
-                               charm_animals(power);\r
-                       }\r
+                       if (cast) charm_animals(power);\r
                }\r
                break;\r
 \r
@@ -449,31 +438,9 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                break;\r
 \r
        case 25:\r
-               if (name) return _("カマイタチ", "Cyclone");\r
+               if (name) return _("カマイタチ", "Whirlwind");\r
                if (desc) return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");\r
-\r
-               {\r
-                       if (cast)\r
-                       {\r
-                               int y = 0, x = 0;\r
-                               cave_type       *c_ptr;\r
-                               monster_type    *m_ptr;\r
-\r
-                               for (dir = 0; dir < 8; dir++)\r
-                               {\r
-                                       y = p_ptr->y + ddy_ddd[dir];\r
-                                       x = p_ptr->x + ddx_ddd[dir];\r
-                                       c_ptr = &cave[y][x];\r
-\r
-                                       /* Get the monster */\r
-                                       m_ptr = &m_list[c_ptr->m_idx];\r
-\r
-                                       /* Hack -- attack monsters */\r
-                                       if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))\r
-                                               py_attack(y, x, 0);\r
-                               }\r
-                       }\r
-               }\r
+               if (cast) massacre();\r
                break;\r
 \r
        case 26:\r
@@ -579,10 +546,10 @@ cptr do_nature_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {\r
                        int d_dam = 4 * plev;\r
                        int b_dam = (100 + plev) * 2;\r
-                       int b_rad = 1 + plev / 12;\r
-                       int q_rad = 20 + plev / 2;\r
+                       POSITION b_rad = 1 + plev / 12;\r
+                       POSITION q_rad = 20 + plev / 2;\r
 \r
-                       if (info) return format("%s%d+%d", s_dam, d_dam, b_dam / 2);\r
+                       if (info) return format("%s%d+%d", KWD_DAM, d_dam, b_dam / 2);\r
 \r
                        if (cast)\r
                        {\r