#include "angband.h"
+#include "util.h"
+
#include "cmd-spell.h"
#include "selfinfo.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文字列を返す。
*/
-cptr 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;
bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
DIRECTION dir;
- int plev = p_ptr->lev;
+ PLAYER_LEVEL plev = caster_ptr->lev;
switch (spell)
{
if (cast)
{
- detect_monsters_normal(rad);
+ detect_monsters_normal(caster_ptr, rad);
}
}
break;
if (cast)
{
- teleport_player(range, 0L);
+ teleport_player(caster_ptr, range, 0L);
}
}
break;
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;
if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently.");
{
- int dice = 2;
- int sides = plev / 2;
+ DICE_NUMBER dice = 2;
+ DICE_SID sides = plev / 2;
POSITION rad = plev / 10 + 1;
if (info) return info_damage(dice, sides, 0);
if (desc) return _("モンスター1体を混乱させる。抵抗されると無効。", "Attempts to confuse a monster.");
{
- int power = (plev * 3) / 2;
+ PLAYER_LEVEL power = (plev * 3) / 2;
if (info) return info_power(power);
if (cast)
{
- teleport_player(range, 0L);
+ teleport_player(caster_ptr, range, 0L);
}
}
break;
if (cast)
{
- if (!recharge(power)) return NULL;
+ if (!recharge(caster_ptr, power)) return NULL;
}
}
break;
if (cast)
{
- map_area(rad);
+ map_area(caster_ptr, rad);
}
}
break;
{
if (cast)
{
- if (!ident_spell(FALSE)) return NULL;
+ if (!ident_spell(caster_ptr, FALSE)) return NULL;
}
}
break;
{
if (!get_aim_dir(&dir)) return NULL;
- fire_beam(GF_AWAY_ALL, dir, power);
+ fire_beam(caster_ptr, GF_AWAY_ALL, dir, power);
}
}
break;
{
int base = plev;
- int sides = 20 + plev;
+ DICE_SID sides = 20 + plev;
if (info) return info_duration(base, sides);
if (cast)
{
- set_fast(randint1(sides) + base, FALSE);
+ set_fast(caster_ptr, randint1(sides) + base, FALSE);
}
}
break;
if (cast)
{
- detect_all(rad);
+ detect_all(caster_ptr, rad);
}
}
break;
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;
{
if (!get_aim_dir(&dir)) return NULL;
- charm_monster(dir, power);
+ charm_monster(dir, plev);
}
}
break;
{
int base = 25;
- int sides = 30;
+ DICE_SID sides = 30;
if (info) return info_duration(base, sides);
if (cast)
{
- set_tim_esp(randint1(sides) + base, FALSE);
+ set_tim_esp(caster_ptr, randint1(sides) + base, FALSE);
}
}
break;
{
if (cast)
{
- if (!tele_town()) return NULL;
+ if (!tele_town(caster_ptr)) return NULL;
}
}
break;
{
if (cast)
{
- self_knowledge();
+ self_knowledge(caster_ptr);
}
}
break;
if (cast)
{
if (!get_check(_("本当に他の階にテレポートしますか?", "Are you sure? (Teleport Level)"))) return NULL;
- teleport_level(0);
+ teleport_level(caster_ptr, 0);
}
}
break;
{
int base = 15;
- int sides = 20;
+ DICE_SID sides = 20;
if (info) return info_delay(base, sides);
if (cast)
{
- if (!word_of_recall()) return NULL;
+ if (!recall_player(caster_ptr, randint0(21) + 15)) return NULL;
}
}
break;
{
if (cast)
{
- probing();
+ probing(caster_ptr);
}
}
break;
"Sets a glyph under you. The glyph will explode when a monster moves on it.");
{
- int dice = 7;
- int sides = 7;
+ DICE_NUMBER dice = 7;
+ DICE_SID sides = 7;
int base = plev;
if (info) return info_damage(dice, sides, base);
if (cast)
{
- explosive_rune();
+ explosive_rune(caster_ptr->current_floor_ptr, caster_ptr->y, caster_ptr->x);
}
}
break;
if (desc) return _("アイテムを自分の足元へ移動させる。", "Pulls a distant item close to you.");
{
- int weight = plev * 15;
+ WEIGHT weight = plev * 15;
if (info) return info_weight(weight);
{
if (!get_aim_dir(&dir)) return NULL;
- fetch(dir, weight, FALSE);
+ fetch(caster_ptr, dir, weight, FALSE);
}
}
break;
{
int base = 25;
- int sides = 30;
+ DICE_SID sides = 30;
if (info) return info_duration(base, sides);
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(p_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);
}
}
}
{
if (cast)
{
- if (!alchemy()) return NULL;
+ if (!alchemy(caster_ptr)) return NULL;
}
}
break;
if (cast)
{
- set_invuln(randint1(base) + base, FALSE);
+ set_invuln(caster_ptr, randint1(base) + base, FALSE);
}
}
break;