OSDN Git Service

Most of the English spell descriptions use a third person singular verb with an impli...
[hengband/hengband.git] / src / realm-crusade.c
index ffdde91..5beca02 100644 (file)
@@ -1,16 +1,29 @@
 #include "angband.h"
+#include "util.h"
+
+#include "world.h"
 #include "cmd-spell.h"
+#include "floor.h"
+#include "spells.h"
+#include "spells-object.h"
 #include "spells-summon.h"
+#include "spells-status.h"
+#include "spells-floor.h"
+#include "spells-diceroll.h"
+#include "player-class.h"
+#include "player-effects.h"
+#include "targeting.h"
 
 
 
 /*!
 * @brief 破邪領域魔法の各処理を行う
+* @param caster_ptr プレーヤーへの参照ポインタ
 * @param spell 魔法ID
 * @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(player_type *caster_ptr, SPELL_IDX spell, BIT_FLAGS mode)
 {
        bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
        bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
@@ -18,7 +31,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
 
        DIRECTION dir;
-       PLAYER_LEVEL plev = p_ptr->lev;
+       PLAYER_LEVEL plev = caster_ptr->lev;
 
        switch (spell)
        {
@@ -26,13 +39,13 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                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));
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               fire_bolt_or_beam(caster_ptr, beam_chance(caster_ptr) - 10, GF_ELEC, dir, damroll(dice, sides));
                        }
                }
                break;
@@ -45,7 +58,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (info) return info_radius(rad);
                        if (cast)
                        {
-                               detect_monsters_evil(rad);
+                               detect_monsters_evil(caster_ptr, rad);
                        }
                }
                break;
@@ -54,7 +67,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                if (name) return _("恐怖除去", "Remove Fear");
                if (desc) return _("恐怖を取り除く。", "Removes fear.");
                {
-                       if (cast) set_afraid(0);
+                       if (cast) set_afraid(caster_ptr, 0);
                }
                break;
 
@@ -67,8 +80,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (info) return info_power(power);
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
-                               fear_monster(dir, power);
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               fear_monster(caster_ptr, dir, power);
                        }
                }
                break;
@@ -79,18 +92,18 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        PLAYER_LEVEL power = plev;
                        if (info) return info_power(power);
-                       if (cast) sleep_monsters_touch();
+                       if (cast) sleep_monsters_touch(caster_ptr);
                }
                break;
 
        case 5:
                if (name) return _("入口", "Portal");
-               if (desc) return _("中距離のテレポートをする。", "Teleport medium distance.");
+               if (desc) return _("中距離のテレポートをする。", "Teleports you a medium distance.");
 
                {
                        POSITION range = 25 + plev / 2;
                        if (info) return info_range(range);
-                       if (cast) teleport_player(range, 0L);
+                       if (cast) teleport_player(caster_ptr, range, 0L);
                }
                break;
 
@@ -99,13 +112,13 @@ 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;
-                               fire_blast(GF_LITE, dir, dice, sides, 10, 3);
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               fire_blast(caster_ptr, GF_LITE, dir, dice, sides, 10, 3);
                        }
                }
                break;
@@ -116,9 +129,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               set_cut(0);
-                               set_poisoned(0);
-                               set_stun(0);
+                               set_cut(caster_ptr,0);
+                               set_poisoned(caster_ptr, 0);
+                               set_stun(caster_ptr, 0);
                        }
                }
                break;
@@ -132,8 +145,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (info) return info_power(power);
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
-                               fire_ball(GF_AWAY_EVIL, dir, power, 0);
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               fire_ball(caster_ptr, GF_AWAY_EVIL, dir, power, 0);
                        }
                }
                break;
@@ -148,9 +161,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        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)
+                       if (caster_ptr->pclass == CLASS_PRIEST ||
+                               caster_ptr->pclass == CLASS_HIGH_MAGE ||
+                               caster_ptr->pclass == CLASS_SORCERER)
                                base = plev + plev / 2;
                        else
                                base = plev + plev / 4;
@@ -160,9 +173,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
 
-                               fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
+                               fire_ball(caster_ptr, GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
                        }
                }
                break;
@@ -172,14 +185,14 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                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));
-                               dispel_demons(randint1(sides));
-                               turn_evil(power);
+                               dispel_undead(caster_ptr, randint1(sides));
+                               dispel_demons(caster_ptr, randint1(sides));
+                               turn_evil(caster_ptr, power);
                        }
                }
                break;
@@ -188,13 +201,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                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(caster_ptr);
                }
                break;
 
@@ -209,7 +216,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_tim_invis(randint1(base) + base, FALSE);
+                               set_tim_invis(caster_ptr, randint1(base) + base, FALSE);
                        }
                }
                break;
@@ -220,13 +227,13 @@ 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);
 
                        if (cast)
                        {
-                               set_protevil(randint1(sides) + base, FALSE);
+                               set_protevil(caster_ptr, randint1(sides) + base, FALSE);
                        }
                }
                break;
@@ -242,8 +249,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
-                               fire_bolt(GF_ELEC, dir, dam);
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               fire_bolt(caster_ptr, GF_ELEC, dir, dam);
                        }
                }
                break;
@@ -260,12 +267,12 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (info) return format(_("損:1d%d/回%d", "dam:d%d/h%d"), dam_sides, heal);
                        if (cast)
                        {
-                               dispel_evil(randint1(dam_sides));
-                               hp_player(heal);
-                               set_afraid(0);
-                               set_poisoned(0);
-                               set_stun(0);
-                               set_cut(0);
+                               dispel_evil(caster_ptr, randint1(dam_sides));
+                               hp_player(caster_ptr, heal);
+                               set_afraid(caster_ptr, 0);
+                               set_poisoned(caster_ptr, 0);
+                               set_stun(caster_ptr, 0);
+                               set_cut(caster_ptr,0);
                        }
                }
                break;
@@ -277,9 +284,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
 
-                               destroy_door(dir);
+                               destroy_door(caster_ptr, dir);
                        }
                }
                break;
@@ -295,8 +302,8 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
-                               stasis_evil(dir);
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
+                               stasis_evil(caster_ptr, dir);
                        }
                }
                break;
@@ -313,7 +320,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_tim_sh_holy(randint1(base) + base, FALSE);
+                               set_tim_sh_holy(caster_ptr, randint1(base) + base, FALSE);
                        }
                }
                break;
@@ -323,14 +330,14 @@ 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);
 
                        if (cast)
                        {
-                               dispel_undead(randint1(sides));
-                               dispel_demons(randint1(sides));
+                               dispel_undead(caster_ptr, randint1(sides));
+                               dispel_demons(caster_ptr, randint1(sides));
                        }
                }
                break;
@@ -340,13 +347,13 @@ 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);
 
                        if (cast)
                        {
-                               dispel_evil(randint1(sides));
+                               dispel_evil(caster_ptr, randint1(sides));
                        }
                }
                break;
@@ -358,7 +365,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               brand_weapon(13);
+                               brand_weapon(caster_ptr, 13);
                        }
                }
                break;
@@ -375,9 +382,9 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!get_aim_dir(&dir)) return NULL;
+                               if (!get_aim_dir(caster_ptr, &dir)) return NULL;
 
-                               fire_ball(GF_LITE, dir, dam, rad);
+                               fire_ball(caster_ptr, GF_LITE, dir, dam, rad);
                        }
                }
                break;
@@ -396,7 +403,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(caster_ptr, (pet ? -1 : 0), caster_ptr->y, caster_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
                                {
                                        if (pet)
                                        {
@@ -422,7 +429,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               (void)heroism(base);
+                               (void)heroism(caster_ptr, base);
                        }
                }
                break;
@@ -432,13 +439,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(caster_ptr);
                }
                break;
 
@@ -454,7 +455,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (banish_evil(power))
+                               if (banish_evil(caster_ptr, power))
                                {
                                        msg_print(_("神聖な力が邪悪を打ち払った!", "The holy power banishes evil!"));
                                }
@@ -464,15 +465,15 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
        case 27:
                if (name) return _("ハルマゲドン", "Armageddon");
-               if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroy everything in nearby area.");
+               if (desc) return _("周辺のアイテム、モンスター、地形を破壊する。", "Destroys everything in nearby area.");
 
                {
                        int base = 12;
-                       int sides = 4;
+                       DICE_SID sides = 4;
 
                        if (cast)
                        {
-                               destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
+                               destroy_area(caster_ptr, caster_ptr->y, caster_ptr->x, base + randint1(sides), FALSE);
                        }
                }
                break;
@@ -489,7 +490,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_tim_eyeeye(randint1(base) + base, FALSE);
+                               set_tim_eyeeye(caster_ptr, randint1(base) + base, FALSE);
                        }
                }
                break;
@@ -506,7 +507,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!cast_wrath_of_the_god(dam, rad)) return NULL;
+                               if (!cast_wrath_of_the_god(caster_ptr, dam, rad)) return NULL;
                        }
                }
                break;
@@ -525,14 +526,14 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (info) return format(_("回%d/損%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam / 2);
                        if (cast)
                        {
-                               project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
-                               dispel_monsters(d_dam);
-                               slow_monsters(plev);
-                               stun_monsters(power);
-                               confuse_monsters(power);
-                               turn_monsters(power);
-                               stasis_monsters(power);
-                               hp_player(heal);
+                               project(caster_ptr, 0, 1, caster_ptr->y, caster_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
+                               dispel_monsters(caster_ptr, d_dam);
+                               slow_monsters(caster_ptr, plev);
+                               stun_monsters(caster_ptr, power);
+                               confuse_monsters(caster_ptr, power);
+                               turn_monsters(caster_ptr, power);
+                               stasis_monsters(caster_ptr, power);
+                               hp_player(caster_ptr, heal);
                        }
                }
                break;
@@ -540,7 +541,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 31:
                if (name) return _("聖戦", "Crusade");
                if (desc) return _("視界内の善良なモンスターをペットにしようとし、ならなかった場合及び善良でないモンスターを恐怖させる。さらに多数の加速された騎士を召喚し、ヒーロー、祝福、加速、対邪悪結界を得る。",
-                       "Attempts to charm all good monsters in sight, and scare all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.");
+                       "Attempts to charm all good monsters in sight, and scares all non-charmed monsters, and summons great number of knights, and gives heroism, bless, speed and protection from evil.");
 
                {
                        if (cast)
@@ -550,7 +551,7 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
                                int sp_base = plev;
 
                                int i;
-                               crusade();
+                               crusade(caster_ptr);
                                for (i = 0; i < 12; i++)
                                {
                                        int attempt = 10;
@@ -558,19 +559,19 @@ cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                                        while (attempt--)
                                        {
-                                               scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);
+                                               scatter(caster_ptr, &my, &mx, caster_ptr->y, caster_ptr->x, 4, 0);
 
                                                /* Require empty grids */
-                                               if (cave_empty_bold2(my, mx)) break;
+                                               if (is_cave_empty_bold2(caster_ptr, 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(caster_ptr, -1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
                                }
-                               set_hero(randint1(base) + base, FALSE);
-                               set_blessed(randint1(base) + base, FALSE);
-                               set_fast(randint1(sp_sides) + sp_base, FALSE);
-                               set_protevil(randint1(base) + base, FALSE);
-                               set_afraid(0);
+                               set_hero(caster_ptr, randint1(base) + base, FALSE);
+                               set_blessed(caster_ptr, randint1(base) + base, FALSE);
+                               set_fast(caster_ptr, randint1(sp_sides) + sp_base, FALSE);
+                               set_protevil(caster_ptr, randint1(base) + base, FALSE);
+                               set_afraid(caster_ptr, 0);
                        }
                }
                break;