#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;
bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
DIRECTION dir;
- PLAYER_LEVEL plev = p_ptr->lev;
+ PLAYER_LEVEL plev = caster_ptr->lev;
switch (spell)
{
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;
if (info) return info_radius(rad);
if (cast)
{
- detect_monsters_evil(rad);
+ detect_monsters_evil(caster_ptr, rad);
}
}
break;
if (name) return _("恐怖除去", "Remove Fear");
if (desc) return _("恐怖を取り除く。", "Removes fear.");
{
- if (cast) set_afraid(0);
+ if (cast) set_afraid(caster_ptr, 0);
}
break;
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;
{
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;
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;
{
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;
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;
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;
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;
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;
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;
if (cast)
{
- set_tim_invis(randint1(base) + base, FALSE);
+ set_tim_invis(caster_ptr, randint1(base) + base, FALSE);
}
}
break;
{
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;
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;
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;
{
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;
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;
if (cast)
{
- set_tim_sh_holy(randint1(base) + base, FALSE);
+ set_tim_sh_holy(caster_ptr, randint1(base) + base, FALSE);
}
}
break;
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;
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;
{
if (cast)
{
- brand_weapon(13);
+ brand_weapon(caster_ptr, 13);
}
}
break;
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;
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)
{
if (cast)
{
- (void)heroism(base);
+ (void)heroism(caster_ptr, base);
}
}
break;
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;
if (cast)
{
- if (banish_evil(power))
+ if (banish_evil(caster_ptr, power))
{
msg_print(_("神聖な力が邪悪を打ち払った!", "The holy power banishes evil!"));
}
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;
if (cast)
{
- set_tim_eyeeye(randint1(base) + base, FALSE);
+ set_tim_eyeeye(caster_ptr, randint1(base) + base, FALSE);
}
}
break;
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;
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;
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)
int sp_base = plev;
int i;
- crusade();
+ crusade(caster_ptr);
for (i = 0; i < 12; i++)
{
int attempt = 10;
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;