OSDN Git Service

[Refactor] #37353 聖浄の杖の効果を cleasing_nova() に分離。 / Separate implementation of 'staff...
[hengband/hengband.git] / src / realm-crusade.c
index 3f6cae2..10d545e 100644 (file)
@@ -1,5 +1,7 @@
 #include "angband.h"
 #include "cmd-spell.h"
+#include "spells-summon.h"
+#include "projection.h"
 
 
 
 * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
 */
-cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
+concptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
        bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
        bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
        bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
 
-       int dir;
-       int plev = p_ptr->lev;
+       DIRECTION dir;
+       PLAYER_LEVEL plev = p_ptr->lev;
 
        switch (spell)
        {
        case 0:
                if (name) return _("懲罰", "Punishment");
                if (desc) return _("電撃のボルトもしくはビームを放つ。", "Fires a bolt or beam of lightning.");
-
                {
-                       int dice = 3 + (plev - 1) / 5;
-                       int sides = 4;
-
+                       DICE_NUMBER dice = 3 + (plev - 1) / 5;
+                       DICE_SID sides = 4;
                        if (info) return info_damage(dice, sides, 0);
-
                        if (cast)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
-
                                fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
                        }
                }
@@ -43,12 +41,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 1:
                if (name) return _("邪悪存在感知", "Detect Evil");
                if (desc) return _("近くの邪悪なモンスターを感知する。", "Detects all evil monsters in your vicinity.");
-
                {
-                       int rad = DETECT_RAD_DEFAULT;
-
+                       POSITION rad = DETECT_RAD_DEFAULT;
                        if (info) return info_radius(rad);
-
                        if (cast)
                        {
                                detect_monsters_evil(rad);
@@ -59,12 +54,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 2:
                if (name) return _("恐怖除去", "Remove Fear");
                if (desc) return _("恐怖を取り除く。", "Removes fear.");
-
                {
-                       if (cast)
-                       {
-                               set_afraid(0);
-                       }
+                       if (cast) set_afraid(0);
                }
                break;
 
@@ -73,14 +64,11 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("モンスター1体を恐怖させる。抵抗されると無効。", "Attempts to scare a monster.");
 
                {
-                       int power = plev;
-
+                       PLAYER_LEVEL power = plev;
                        if (info) return info_power(power);
-
                        if (cast)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
-
                                fear_monster(dir, power);
                        }
                }
@@ -89,16 +77,10 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 4:
                if (name) return _("聖域", "Sanctuary");
                if (desc) return _("隣接した全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep monsters in the adjacent squares.");
-
                {
-                       int power = plev;
-
+                       PLAYER_LEVEL power = plev;
                        if (info) return info_power(power);
-
-                       if (cast)
-                       {
-                               sleep_monsters_touch();
-                       }
+                       if (cast) sleep_monsters_touch();
                }
                break;
 
@@ -108,13 +90,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        POSITION range = 25 + plev / 2;
-
                        if (info) return info_range(range);
-
-                       if (cast)
-                       {
-                               teleport_player(range, 0L);
-                       }
+                       if (cast) teleport_player(range, 0L);
                }
                break;
 
@@ -123,11 +100,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("ターゲット付近に閃光のボルトを連射する。", "Fires many bolts of light near the target.");
 
                {
-                       int dice = 3 + (plev - 1) / 9;
-                       int sides = 2;
-
+                       DICE_NUMBER dice = 3 + (plev - 1) / 9;
+                       DICE_SID sides = 2;
                        if (info) return info_multi_damage_dice(dice, sides);
-
                        if (cast)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
@@ -139,7 +114,6 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 7:
                if (name) return _("身体浄化", "Purify");
                if (desc) return _("傷、毒、朦朧から全快する。", "Heals all cut, stun and poison status.");
-
                {
                        if (cast)
                        {
@@ -156,9 +130,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        int power = MAX_SIGHT * 5;
-
                        if (info) return info_power(power);
-
                        if (cast)
                        {
                                if (!get_aim_dir(&dir)) return NULL;
@@ -173,11 +145,10 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.");
 
                {
-                       int dice = 3;
-                       int sides = 6;
-                       int rad = (plev < 30) ? 2 : 3;
+                       DICE_NUMBER dice = 3;
+                       DICE_SID sides = 6;
+                       POSITION rad = (plev < 30) ? 2 : 3;
                        int base;
-
                        if (p_ptr->pclass == CLASS_PRIEST ||
                                p_ptr->pclass == CLASS_HIGH_MAGE ||
                                p_ptr->pclass == CLASS_SORCERER)
@@ -201,13 +172,10 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (name) return _("悪魔払い", "Exorcism");
                if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与え、邪悪なモンスターを恐怖させる。",
                        "Damages all undead and demons in sight, and scares all evil monsters in sight.");
-
                {
-                       int sides = plev;
+                       DICE_SID sides = plev;
                        int power = plev;
-
                        if (info) return info_damage(1, sides, 0);
-
                        if (cast)
                        {
                                dispel_undead(randint1(sides));
@@ -220,15 +188,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 11:
                if (name) return _("解呪", "Remove Curse");
                if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items.");
-
                {
-                       if (cast)
-                       {
-                               if (remove_curse())
-                               {
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
-                               }
-                       }
+                       if (cast) (void)remove_curse();
                }
                break;
 
@@ -254,7 +215,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        int base = 25;
-                       int sides = 3 * plev;
+                       DICE_SID sides = 3 * plev;
 
                        if (info) return info_duration(base, sides);
 
@@ -357,7 +318,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("視界内の全てのアンデッド及び悪魔にダメージを与える。", "Damages all undead and demons in sight.");
 
                {
-                       int sides = plev * 4;
+                       DICE_SID sides = plev * 4;
 
                        if (info) return info_damage(1, sides, 0);
 
@@ -374,7 +335,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("視界内の全ての邪悪なモンスターにダメージを与える。", "Damages all evil monsters in sight.");
 
                {
-                       int sides = plev * 4;
+                       DICE_SID sides = plev * 4;
 
                        if (info) return info_damage(1, sides, 0);
 
@@ -403,7 +364,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        HIT_POINT dam = 100 + plev * 2;
-                       int rad = 4;
+                       POSITION rad = 4;
 
                        if (info) return info_damage(0, 0, dam);
 
@@ -430,7 +391,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                                else flg |= PM_NO_PET;
                                if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
 
-                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
+                               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg, '\0'))
                                {
                                        if (pet)
                                        {
@@ -466,13 +427,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items.");
 
                {
-                       if (cast)
-                       {
-                               if (remove_all_curse())
-                               {
-                                       msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));
-                               }
-                       }
+                       if (cast) (void)remove_all_curse();
                }
                break;
 
@@ -502,7 +457,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        int base = 12;
-                       int sides = 4;
+                       DICE_SID sides = 4;
 
                        if (cast)
                        {
@@ -534,7 +489,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                {
                        HIT_POINT dam = plev * 3 + 25;
-                       int rad = 2;
+                       POSITION rad = 2;
 
                        if (info) return info_multi_damage(dam);
 
@@ -598,7 +553,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                                                if (cave_empty_bold2(my, mx)) break;
                                        }
                                        if (attempt < 0) continue;
-                                       summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
+                                       summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE), '\0');
                                }
                                set_hero(randint1(base) + base, FALSE);
                                set_blessed(randint1(base) + base, FALSE);