2 #include "cmd-spell.h"
\r
7 * @brief
\94j
\8e×
\97Ì
\88æ
\96\82\96@
\82Ì
\8ae
\8f\88\97\9d\82ð
\8ds
\82¤
\r
8 * @param spell
\96\82\96@ID
\r
9 * @param mode
\8f\88\97\9d\93à
\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
10 * @return SPELL_NAME / SPELL_DESC / SPELL_INFO
\8e\9e\82É
\82Í
\95¶
\8e\9a\97ñ
\83|
\83C
\83\93\83^
\82ð
\95Ô
\82·
\81BSPELL_CAST
\8e\9e\82ÍNULL
\95¶
\8e\9a\97ñ
\82ð
\95Ô
\82·
\81B
\r
12 cptr do_crusade_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
14 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
15 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
16 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
17 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
20 int plev = p_ptr->lev;
\r
25 if (name) return _("
\92¦
\94±", "Punishment");
\r
26 if (desc) return _("
\93d
\8c\82\82Ì
\83{
\83\8b\83g
\82à
\82µ
\82
\82Í
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a bolt or beam of lightning.");
\r
29 int dice = 3 + (plev - 1) / 5;
\r
32 if (info) return info_damage(dice, sides, 0);
\r
36 if (!get_aim_dir(&dir)) return NULL;
\r
38 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
\r
44 if (name) return _("
\8e×
\88«
\91¶
\8dÝ
\8a´
\92m", "Detect Evil");
\r
45 if (desc) return _("
\8bß
\82
\82Ì
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all evil monsters in your vicinity.");
\r
48 int rad = DETECT_RAD_DEFAULT;
\r
50 if (info) return info_radius(rad);
\r
54 detect_monsters_evil(rad);
\r
60 if (name) return _("
\8b°
\95|
\8f\9c\8b\8e", "Remove Fear");
\r
61 if (desc) return _("
\8b°
\95|
\82ð
\8eæ
\82è
\8f\9c\82
\81B", "Removes fear.");
\r
72 if (name) return _("
\88Ð
\88³", "Scare Monster");
\r
73 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\8b°
\95|
\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to scare a monster.");
\r
78 if (info) return info_power(power);
\r
82 if (!get_aim_dir(&dir)) return NULL;
\r
84 fear_monster(dir, power);
\r
90 if (name) return _("
\90¹
\88æ", "Sanctuary");
\r
91 if (desc) return _("
\97×
\90Ú
\82µ
\82½
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\82ð
\96°
\82ç
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to sleep monsters in the adjacent squares.");
\r
96 if (info) return info_power(power);
\r
100 sleep_monsters_touch();
\r
106 if (name) return _("
\93ü
\8cû", "Portal");
\r
107 if (desc) return _("
\92\86\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport medium distance.");
\r
110 POSITION range = 25 + plev / 2;
\r
112 if (info) return info_range(range);
\r
116 teleport_player(range, 0L);
\r
122 if (name) return _("
\83X
\83^
\81[
\83_
\83X
\83g", "Star Dust");
\r
123 if (desc) return _("
\83^
\81[
\83Q
\83b
\83g
\95t
\8bß
\82É
\91M
\8cõ
\82Ì
\83{
\83\8b\83g
\82ð
\98A
\8eË
\82·
\82é
\81B", "Fires many bolts of light near the target.");
\r
126 int dice = 3 + (plev - 1) / 9;
\r
129 if (info) return info_multi_damage_dice(dice, sides);
\r
133 if (!get_aim_dir(&dir)) return NULL;
\r
134 fire_blast(GF_LITE, dir, dice, sides, 10, 3);
\r
140 if (name) return _("
\90g
\91Ì
\8fò
\89»", "Purify");
\r
141 if (desc) return _("
\8f\9d\81A
\93Å
\81A
\9eN
\9eO
\82©
\82ç
\91S
\89õ
\82·
\82é
\81B", "Heals all cut, stun and poison status.");
\r
154 if (name) return _("
\8e×
\88«
\94ò
\82Î
\82µ", "Scatter Evil");
\r
155 if (desc) return _("
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\83e
\83\8c\83|
\81[
\83g
\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to teleport an evil monster away.");
\r
158 int power = MAX_SIGHT * 5;
\r
160 if (info) return info_power(power);
\r
164 if (!get_aim_dir(&dir)) return NULL;
\r
165 fire_ball(GF_AWAY_EVIL, dir, power, 0);
\r
171 if (name) return _("
\90¹
\82È
\82é
\8cõ
\8b\85", "Holy Orb");
\r
172 if (desc) return _("
\90¹
\82È
\82é
\97Í
\82ð
\82à
\82Â
\95ó
\8eì
\82ð
\95ú
\82Â
\81B
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82É
\91Î
\82µ
\82Ä
\91å
\82«
\82È
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\82é
\82ª
\81A
\91P
\97Ç
\82È
\83\82\83\93\83X
\83^
\81[
\82É
\82Í
\8cø
\89Ê
\82ª
\82È
\82¢
\81B",
\r
173 "Fires a ball with holy power. Hurts evil monsters greatly, but don't effect good monsters.");
\r
178 int rad = (plev < 30) ? 2 : 3;
\r
181 if (p_ptr->pclass == CLASS_PRIEST ||
\r
182 p_ptr->pclass == CLASS_HIGH_MAGE ||
\r
183 p_ptr->pclass == CLASS_SORCERER)
\r
184 base = plev + plev / 2;
\r
186 base = plev + plev / 4;
\r
189 if (info) return info_damage(dice, sides, base);
\r
193 if (!get_aim_dir(&dir)) return NULL;
\r
195 fire_ball(GF_HOLY_FIRE, dir, damroll(dice, sides) + base, rad);
\r
201 if (name) return _("
\88«
\96\82\95¥
\82¢", "Exorcism");
\r
202 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\83A
\83\93\83f
\83b
\83h
\8by
\82Ñ
\88«
\96\82\82É
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\81A
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\8b°
\95|
\82³
\82¹
\82é
\81B",
\r
203 "Damages all undead and demons in sight, and scares all evil monsters in sight.");
\r
209 if (info) return info_damage(1, sides, 0);
\r
213 dispel_undead(randint1(sides));
\r
214 dispel_demons(randint1(sides));
\r
221 if (name) return _("
\89ð
\8eô", "Remove Curse");
\r
222 if (desc) return _("
\83A
\83C
\83e
\83\80\82É
\82©
\82©
\82Á
\82½
\8eã
\82¢
\8eô
\82¢
\82ð
\89ð
\8f\9c\82·
\82é
\81B", "Removes normal curses from equipped items.");
\r
227 if (remove_curse())
\r
229 msg_print(_("
\92N
\82©
\82É
\8c©
\8eç
\82ç
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82·
\82é
\81B", "You feel as if someone is watching over you."));
\r
236 if (name) return _("
\93§
\96¾
\8e\8b\94F", "Sense Unseen");
\r
237 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\93§
\96¾
\82È
\82à
\82Ì
\82ª
\8c©
\82¦
\82é
\82æ
\82¤
\82É
\82È
\82é
\81B", "Gives see invisible for a while.");
\r
242 if (info) return info_duration(base, base);
\r
246 set_tim_invis(randint1(base) + base, FALSE);
\r
252 if (name) return _("
\91Î
\8e×
\88«
\8c\8b\8aE", "Protection from Evil");
\r
253 if (desc) return _("
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82Ì
\8dU
\8c\82\82ð
\96h
\82®
\83o
\83\8a\83A
\82ð
\92£
\82é
\81B", "Gives aura which protect you from evil monster's physical attack.");
\r
257 int sides = 3 * plev;
\r
259 if (info) return info_duration(base, sides);
\r
263 set_protevil(randint1(sides) + base, FALSE);
\r
269 if (name) return _("
\8dÙ
\82«
\82Ì
\97\8b", "Judgment Thunder");
\r
270 if (desc) return _("
\8b
\97Í
\82È
\93d
\8c\82\82Ì
\83{
\83\8b\83g
\82ð
\95ú
\82Â
\81B", "Fires a powerful bolt of lightning.");
\r
273 HIT_POINT dam = plev * 5;
\r
275 if (info) return info_damage(0, 0, dam);
\r
279 if (!get_aim_dir(&dir)) return NULL;
\r
280 fire_bolt(GF_ELEC, dir, dam);
\r
286 if (name) return _("
\90¹
\82È
\82é
\8cä
\8c¾
\97t", "Holy Word");
\r
287 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\8e×
\88«
\82È
\91¶
\8dÝ
\82É
\91å
\82«
\82È
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\81A
\91Ì
\97Í
\82ð
\89ñ
\95\9c\82µ
\81A
\93Å
\81A
\8b°
\95|
\81A
\9eN
\9eO
\8fó
\91Ô
\81A
\95\89\8f\9d\82©
\82ç
\91S
\89õ
\82·
\82é
\81B",
\r
288 "Damages all evil monsters in sight, heals HP somewhat, and completely heals poison, fear, stun and cut status.");
\r
291 int dam_sides = plev * 6;
\r
294 if (info) return format(_("
\91¹:1d%d/
\89ñ%d", "dam:d%d/h%d"), dam_sides, heal);
\r
297 dispel_evil(randint1(dam_sides));
\r
308 if (name) return _("
\8aJ
\82©
\82ê
\82½
\93¹", "Unbarring Ways");
\r
309 if (desc) return _("
\88ê
\92¼
\90ü
\8fã
\82Ì
\91S
\82Ä
\82Ìã©
\82Æ
\94à
\82ð
\94j
\89ó
\82·
\82é
\81B", "Fires a beam which destroy traps and doors.");
\r
314 if (!get_aim_dir(&dir)) return NULL;
\r
322 if (name) return _("
\95\95\96\82", "Arrest");
\r
323 if (desc) return _("
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82Ì
\93®
\82«
\82ð
\8e~
\82ß
\82é
\81B", "Attempts to paralyze an evil monster.");
\r
326 int power = plev * 2;
\r
328 if (info) return info_power(power);
\r
332 if (!get_aim_dir(&dir)) return NULL;
\r
339 if (name) return _("
\90¹
\82È
\82é
\83I
\81[
\83\89", "Holy Aura");
\r
340 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\8f\9d\82Â
\82¯
\82é
\90¹
\82È
\82é
\83I
\81[
\83\89\82ð
\93¾
\82é
\81B",
\r
341 "Gives aura of holy power which injures evil monsters which attacked you for a while.");
\r
346 if (info) return info_duration(base, base);
\r
350 set_tim_sh_holy(randint1(base) + base, FALSE);
\r
356 if (name) return _("
\83A
\83\93\83f
\83b
\83h&
\88«
\96\82\91Þ
\8eU", "Dispel Undead & Demons");
\r
357 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\83A
\83\93\83f
\83b
\83h
\8by
\82Ñ
\88«
\96\82\82É
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\82é
\81B", "Damages all undead and demons in sight.");
\r
360 int sides = plev * 4;
\r
362 if (info) return info_damage(1, sides, 0);
\r
366 dispel_undead(randint1(sides));
\r
367 dispel_demons(randint1(sides));
\r
373 if (name) return _("
\8e×
\88«
\91Þ
\8eU", "Dispel Evil");
\r
374 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82É
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\82é
\81B", "Damages all evil monsters in sight.");
\r
377 int sides = plev * 4;
\r
379 if (info) return info_damage(1, sides, 0);
\r
383 dispel_evil(randint1(sides));
\r
389 if (name) return _("
\90¹
\82È
\82é
\90n", "Holy Blade");
\r
390 if (desc) return _("
\92Ê
\8fí
\82Ì
\95\90\8aí
\82É
\96Å
\8e×
\82Ì
\91®
\90«
\82ð
\82Â
\82¯
\82é
\81B", "Makes current weapon especially deadly against evil monsters.");
\r
401 if (name) return _("
\83X
\83^
\81[
\83o
\81[
\83X
\83g", "Star Burst");
\r
402 if (desc) return _("
\8b\90\91å
\82È
\91M
\8cõ
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of powerful light.");
\r
405 HIT_POINT dam = 100 + plev * 2;
\r
408 if (info) return info_damage(0, 0, dam);
\r
412 if (!get_aim_dir(&dir)) return NULL;
\r
414 fire_ball(GF_LITE, dir, dam, rad);
\r
420 if (name) return _("
\93V
\8eg
\8f¢
\8a«", "Summon Angel");
\r
421 if (desc) return _("
\93V
\8eg
\82ð1
\91Ì
\8f¢
\8a«
\82·
\82é
\81B", "Summons an angel.");
\r
426 bool pet = !one_in_(3);
\r
429 if (pet) flg |= PM_FORCE_PET;
\r
430 else flg |= PM_NO_PET;
\r
431 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
\r
433 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_ANGEL, flg))
\r
437 msg_print(_("
\81u
\82²
\97p
\82Å
\82²
\82´
\82¢
\82Ü
\82·
\82©
\81A
\82²
\8eå
\90l
\97l
\81v", "'What is thy bidding... Master?'"));
\r
441 msg_print(_("
\81u
\89ä
\82Í
\93ð
\82Ì
\89º
\96l
\82É
\82 \82ç
\82¸
\81I
\88«
\8ds
\8eÒ
\82æ
\81A
\89÷
\82¢
\89ü
\82ß
\82æ
\81I
\81v", "Mortal! Repent of thy impiousness."));
\r
449 if (name) return _("
\8em
\8bC
\8d\82\97g", "Heroism");
\r
450 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\83q
\81[
\83\8d\81[
\8bC
\95ª
\82É
\82È
\82é
\81B", "Removes fear, and gives bonus to hit and 10 more HP for a while.");
\r
455 if (info) return info_duration(base, base);
\r
459 set_hero(randint1(base) + base, FALSE);
\r
467 if (name) return _("
\8eô
\82¢
\91Þ
\8eU", "Dispel Curse");
\r
468 if (desc) return _("
\83A
\83C
\83e
\83\80\82É
\82©
\82©
\82Á
\82½
\8b
\97Í
\82È
\8eô
\82¢
\82ð
\89ð
\8f\9c\82·
\82é
\81B", "Removes normal and heavy curse from equipped items.");
\r
473 if (remove_all_curse())
\r
475 msg_print(_("
\92N
\82©
\82É
\8c©
\8eç
\82ç
\82ê
\82Ä
\82¢
\82é
\82æ
\82¤
\82È
\8bC
\82ª
\82·
\82é
\81B", "You feel as if someone is watching over you."));
\r
482 if (name) return _("
\8e×
\88«
\92Ç
\95ú", "Banish Evil");
\r
483 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\8e×
\88«
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\83e
\83\8c\83|
\81[
\83g
\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B",
\r
484 "Teleports all evil monsters in sight away unless resisted.");
\r
489 if (info) return info_power(power);
\r
493 if (banish_evil(power))
\r
495 msg_print(_("
\90_
\90¹
\82È
\97Í
\82ª
\8e×
\88«
\82ð
\91Å
\82¿
\95¥
\82Á
\82½
\81I", "The holy power banishes evil!"));
\r
502 if (name) return _("
\83n
\83\8b\83}
\83Q
\83h
\83\93", "Armageddon");
\r
503 if (desc) return _("
\8eü
\95Ó
\82Ì
\83A
\83C
\83e
\83\80\81A
\83\82\83\93\83X
\83^
\81[
\81A
\92n
\8c`
\82ð
\94j
\89ó
\82·
\82é
\81B", "Destroy everything in nearby area.");
\r
511 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
\r
517 if (name) return _("
\96Ú
\82É
\82Í
\96Ú
\82ð", "An Eye for an Eye");
\r
518 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\8e©
\95ª
\82ª
\83_
\83\81\81[
\83W
\82ð
\8eó
\82¯
\82½
\82Æ
\82«
\82É
\8dU
\8c\82\82ð
\8ds
\82Á
\82½
\83\82\83\93\83X
\83^
\81[
\82É
\91Î
\82µ
\82Ä
\93¯
\93\99\82Ì
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\82é
\81B",
\r
519 "Gives special aura for a while. When you are attacked by a monster, the monster are injured with same amount of damage as you take.");
\r
524 if (info) return info_duration(base, base);
\r
528 set_tim_eyeeye(randint1(base) + base, FALSE);
\r
534 if (name) return _("
\90_
\82Ì
\93{
\82è", "Wrath of the God");
\r
535 if (desc) return _("
\83^
\81[
\83Q
\83b
\83g
\82Ì
\8eü
\88Í
\82É
\95ª
\89ð
\82Ì
\8b\85\82ð
\91½
\90\94\97\8e\82Æ
\82·
\81B", "Drops many balls of disintegration near the target.");
\r
538 HIT_POINT dam = plev * 3 + 25;
\r
541 if (info) return info_multi_damage(dam);
\r
545 if (!cast_wrath_of_the_god(dam, rad)) return NULL;
\r
551 if (name) return _("
\90_
\88Ð", "Divine Intervention");
\r
552 if (desc) return _("
\97×
\90Ú
\82·
\82é
\83\82\83\93\83X
\83^
\81[
\82É
\90¹
\82È
\82é
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\81A
\8e\8b\8aE
\93à
\82Ì
\83\82\83\93\83X
\83^
\81[
\82É
\83_
\83\81\81[
\83W
\81A
\8c¸
\91¬
\81A
\9eN
\9eO
\81A
\8d¬
\97\90\81A
\8b°
\95|
\81A
\96°
\82è
\82ð
\97^
\82¦
\82é
\81B
\82³
\82ç
\82É
\91Ì
\97Í
\82ð
\89ñ
\95\9c\82·
\82é
\81B",
\r
553 "Damages all adjacent monsters with holy power. Damages and attempt to slow, stun, confuse, scare and freeze all monsters in sight. And heals HP.");
\r
556 int b_dam = plev * 11;
\r
557 int d_dam = plev * 4;
\r
559 int power = plev * 4;
\r
561 if (info) return format(_("
\89ñ%d/
\91¹%d+%d", "h%d/dm%d+%d"), heal, d_dam, b_dam / 2);
\r
564 project(0, 1, p_ptr->y, p_ptr->x, b_dam, GF_HOLY_FIRE, PROJECT_KILL, -1);
\r
565 dispel_monsters(d_dam);
\r
566 slow_monsters(plev);
\r
567 stun_monsters(power);
\r
568 confuse_monsters(power);
\r
569 turn_monsters(power);
\r
570 stasis_monsters(power);
\r
577 if (name) return _("
\90¹
\90í", "Crusade");
\r
578 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91P
\97Ç
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\83y
\83b
\83g
\82É
\82µ
\82æ
\82¤
\82Æ
\82µ
\81A
\82È
\82ç
\82È
\82©
\82Á
\82½
\8fê
\8d\87\8by
\82Ñ
\91P
\97Ç
\82Å
\82È
\82¢
\83\82\83\93\83X
\83^
\81[
\82ð
\8b°
\95|
\82³
\82¹
\82é
\81B
\82³
\82ç
\82É
\91½
\90\94\82Ì
\89Á
\91¬
\82³
\82ê
\82½
\8bR
\8em
\82ð
\8f¢
\8a«
\82µ
\81A
\83q
\81[
\83\8d\81[
\81A
\8fj
\95\9f\81A
\89Á
\91¬
\81A
\91Î
\8e×
\88«
\8c\8b\8aE
\82ð
\93¾
\82é
\81B",
\r
579 "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.");
\r
585 int sp_sides = 20 + plev;
\r
586 int sp_base = plev;
\r
590 for (i = 0; i < 12; i++)
\r
593 POSITION my = 0, mx = 0;
\r
597 scatter(&my, &mx, p_ptr->y, p_ptr->x, 4, 0);
\r
599 /* Require empty grids */
\r
600 if (cave_empty_bold2(my, mx)) break;
\r
602 if (attempt < 0) continue;
\r
603 summon_specific(-1, my, mx, plev, SUMMON_KNIGHTS, (PM_ALLOW_GROUP | PM_FORCE_PET | PM_HASTE));
\r
605 set_hero(randint1(base) + base, FALSE);
\r
606 set_blessed(randint1(base) + base, FALSE);
\r
607 set_fast(randint1(sp_sides) + sp_base, FALSE);
\r
608 set_protevil(randint1(base) + base, FALSE);
\r