OSDN Git Service

[Refactor] item_tester_tval をグローバル変数から排除. fix_inventory(),fix_equip() のみ未サポート化. /
[hengband/hengband.git] / src / realm-sorcery.c
index 2b0875e..260c79e 100644 (file)
@@ -1,17 +1,24 @@
 #include "angband.h"
+#include "util.h"
+
 #include "cmd-spell.h"
 #include "selfinfo.h"
-#include "projection.h"
 #include "avatar.h"
+
+#include "spells.h"
 #include "spells-status.h"
+#include "spells-floor.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文字列を返す。
 */
-concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
+concptr do_sorcery_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;
@@ -19,7 +26,7 @@ concptr do_sorcery_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)
        {
@@ -34,14 +41,14 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               detect_monsters_normal(rad);
+                               detect_monsters_normal(caster_ptr, rad);
                        }
                }
                break;
 
        case 1:
                if (name) return _("ショート・テレポート", "Phase Door");
-               if (desc) return _("近距離のテレポートをする。", "Teleport short distance.");
+               if (desc) return _("近距離のテレポートをする。", "Teleports you a short distance.");
 
                {
                        POSITION range = 10;
@@ -50,7 +57,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               teleport_player(range, 0L);
+                               teleport_player(caster_ptr, range, 0L);
                        }
                }
                break;
@@ -66,9 +73,9 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               detect_traps(rad, TRUE);
-                               detect_doors(rad);
-                               detect_stairs(rad);
+                               detect_traps(caster_ptr, rad, TRUE);
+                               detect_doors(caster_ptr, rad);
+                               detect_stairs(caster_ptr, rad);
                        }
                }
                break;
@@ -86,7 +93,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               lite_area(damroll(dice, sides), rad);
+                               lite_area(caster_ptr, damroll(dice, sides), rad);
                        }
                }
                break;
@@ -102,16 +109,16 @@ concptr do_sorcery_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;
 
-                               confuse_monster(dir, power);
+                               confuse_monster(caster_ptr, dir, power);
                        }
                }
                break;
 
        case 5:
                if (name) return _("テレポート", "Teleport");
-               if (desc) return _("遠距離のテレポートをする。", "Teleport long distance.");
+               if (desc) return _("遠距離のテレポートをする。", "Teleports you a long distance.");
 
                {
                        POSITION range = plev * 5;
@@ -120,14 +127,14 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               teleport_player(range, 0L);
+                               teleport_player(caster_ptr, range, 0L);
                        }
                }
                break;
 
        case 6:
                if (name) return _("スリープ・モンスター", "Sleep Monster");
-               if (desc) return _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to sleep a monster.");
+               if (desc) return _("モンスター1体を眠らせる。抵抗されると無効。", "Attempts to put a monster to sleep.");
 
                {
                        int power = plev;
@@ -136,9 +143,9 @@ concptr do_sorcery_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;
 
-                               sleep_monster(dir, plev);
+                               sleep_monster(caster_ptr, dir, plev);
                        }
                }
                break;
@@ -154,7 +161,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!recharge(power)) return NULL;
+                               if (!recharge(caster_ptr, power)) return NULL;
                        }
                }
                break;
@@ -170,7 +177,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               map_area(rad);
+                               map_area(caster_ptr, rad);
                        }
                }
                break;
@@ -182,7 +189,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               if (!ident_spell(FALSE)) return NULL;
+                               if (!ident_spell(caster_ptr, FALSE, 0)) return NULL;
                        }
                }
                break;
@@ -198,16 +205,16 @@ concptr do_sorcery_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;
 
-                               slow_monster(dir, plev);
+                               slow_monster(caster_ptr, dir, plev);
                        }
                }
                break;
 
        case 11:
                if (name) return _("周辺スリープ", "Mass Sleep");
-               if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to sleep all monsters in sight.");
+               if (desc) return _("視界内の全てのモンスターを眠らせる。抵抗されると無効。", "Attempts to put all monsters in sight to sleep.");
 
                {
                        int power = plev;
@@ -216,7 +223,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               sleep_monsters(plev);
+                               sleep_monsters(caster_ptr, plev);
                        }
                }
                break;
@@ -232,9 +239,9 @@ concptr do_sorcery_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_beam(GF_AWAY_ALL, dir, power);
+                               fire_beam(caster_ptr, GF_AWAY_ALL, dir, power);
                        }
                }
                break;
@@ -251,7 +258,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_fast(randint1(sides) + base, FALSE);
+                               set_fast(caster_ptr, randint1(sides) + base, FALSE);
                        }
                }
                break;
@@ -268,7 +275,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               detect_all(rad);
+                               detect_all(caster_ptr, rad);
                        }
                }
                break;
@@ -280,7 +287,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               if (!identify_fully(FALSE)) return NULL;
+                               if (!identify_fully(caster_ptr, FALSE, 0)) return NULL;
                        }
                }
                break;
@@ -296,9 +303,9 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               detect_objects_normal(rad);
-                               detect_treasure(rad);
-                               detect_objects_gold(rad);
+                               detect_objects_normal(caster_ptr, rad);
+                               detect_treasure(caster_ptr, rad);
+                               detect_objects_gold(caster_ptr, rad);
                        }
                }
                break;
@@ -314,9 +321,9 @@ concptr do_sorcery_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;
 
-                               charm_monster(dir, plev);
+                               charm_monster(caster_ptr, dir, plev);
                        }
                }
                break;
@@ -333,19 +340,19 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_tim_esp(randint1(sides) + base, FALSE);
+                               set_tim_esp(caster_ptr, randint1(sides) + base, FALSE);
                        }
                }
                break;
 
        case 19:
                if (name) return _("街移動", "Teleport to town");
-               if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Teleport to a town which you choose in a moment. Can only be used outdoors.");
+               if (desc) return _("街へ移動する。地上にいるときしか使えない。", "Instantly teleports you to a town which you choose. Can only be used outdoors.");
 
                {
                        if (cast)
                        {
-                               if (!tele_town()) return NULL;
+                               if (!tele_town(caster_ptr)) return NULL;
                        }
                }
                break;
@@ -358,20 +365,20 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               self_knowledge();
+                               self_knowledge(caster_ptr);
                        }
                }
                break;
 
        case 21:
                if (name) return _("テレポート・レベル", "Teleport Level");
-               if (desc) return _("瞬時に上か下の階にテレポートする。", "Teleport to up or down stairs in a moment.");
+               if (desc) return _("瞬時に上か下の階にテレポートする。", "Instantly teleports you up or down a level.");
 
                {
                        if (cast)
                        {
                                if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
-                               teleport_level(0);
+                               teleport_level(caster_ptr, 0);
                        }
                }
                break;
@@ -379,7 +386,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 22:
                if (name) return _("帰還の呪文", "Word of Recall");
                if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。",
-                       "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
+                       "Recalls player from dungeon to town or from town to the deepest level of dungeon.");
 
                {
                        int base = 15;
@@ -389,14 +396,14 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               if (!recall_player(p_ptr, randint0(21) + 15)) return NULL;
+                               if (!recall_player(caster_ptr, randint0(21) + 15)) return NULL;
                        }
                }
                break;
 
        case 23:
                if (name) return _("次元の扉", "Dimension Door");
-               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleport to given location.");
+               if (desc) return _("短距離内の指定した場所にテレポートする。", "Teleports you to a given location.");
 
                {
                        POSITION range = plev / 2 + 10;
@@ -406,7 +413,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (cast)
                        {
                                msg_print(_("次元の扉が開いた。目的地を選んで下さい。", "You open a dimensional gate. Choose a destination."));
-                               if (!dimension_door()) return NULL;
+                               if (!dimension_door(caster_ptr)) return NULL;
                        }
                }
                break;
@@ -414,12 +421,12 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 24:
                if (name) return _("調査", "Probing");
                if (desc) return _("モンスターの属性、残り体力、最大体力、スピード、正体を知る。",
-                       "Proves all monsters' alignment, HP, speed and their true character.");
+                       "Probes all monsters' alignment, HP, speed and their true character.");
 
                {
                        if (cast)
                        {
-                               probing();
+                               probing(caster_ptr);
                        }
                }
                break;
@@ -438,7 +445,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               explosive_rune();
+                               explosive_rune(caster_ptr, caster_ptr->y, caster_ptr->x);
                        }
                }
                break;
@@ -454,9 +461,9 @@ concptr do_sorcery_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;
 
-                               fetch(dir, weight, FALSE);
+                               fetch(caster_ptr, dir, weight, FALSE);
                        }
                }
                break;
@@ -474,14 +481,14 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               chg_virtue(V_KNOWLEDGE, 1);
-                               chg_virtue(V_ENLIGHTEN, 1);
+                               chg_virtue(caster_ptr, V_KNOWLEDGE, 1);
+                               chg_virtue(caster_ptr, V_ENLIGHTEN, 1);
 
-                               wiz_lite(FALSE);
+                               wiz_lite(caster_ptr, FALSE);
 
-                               if (!p_ptr->telepathy)
+                               if (!caster_ptr->telepathy)
                                {
-                                       set_tim_esp(randint1(sides) + base, FALSE);
+                                       set_tim_esp(caster_ptr, randint1(sides) + base, FALSE);
                                }
                        }
                }
@@ -498,7 +505,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               charm_monsters(power);
+                               charm_monsters(caster_ptr, power);
                        }
                }
                break;
@@ -510,7 +517,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
                {
                        if (cast)
                        {
-                               if (!alchemy()) return NULL;
+                               if (!alchemy(caster_ptr)) return NULL;
                        }
                }
                break;
@@ -526,7 +533,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               banish_monsters(power);
+                               banish_monsters(caster_ptr, power);
                        }
                }
                break;
@@ -534,7 +541,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
        case 31:
                if (name) return _("無傷の球", "Globe of Invulnerability");
                if (desc) return _("一定時間、ダメージを受けなくなるバリアを張る。切れた瞬間に少しターンを消費するので注意。",
-                       "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");
+                       "Generates a barrier which completely protects you from almost all damage. Takes a few of your turns when the barrier breaks or duration time is exceeded.");
 
                {
                        int base = 4;
@@ -543,7 +550,7 @@ concptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
 
                        if (cast)
                        {
-                               set_invuln(randint1(base) + base, FALSE);
+                               set_invuln(caster_ptr, randint1(base) + base, FALSE);
                        }
                }
                break;