2 #include "cmd-spell.h"
\r
5 * @brief
\83J
\83I
\83X
\97Ì
\88æ
\96\82\96@
\82Ì
\8ae
\8f\88\97\9d\82ð
\8ds
\82¤
\r
6 * @param spell
\96\82\96@ID
\r
7 * @param mode
\8f\88\97\9d\93à
\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
8 * @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
10 cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
12 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
13 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
14 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
15 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
17 static const char s_dam[] = _("
\91¹
\8f\9d:", "dam ");
\r
18 static const char s_random[] = _("
\83\89\83\93\83_
\83\80", "random");
\r
21 int plev = p_ptr->lev;
\r
26 if (name) return _("
\83}
\83W
\83b
\83N
\81E
\83~
\83T
\83C
\83\8b", "Magic Missile");
\r
27 if (desc) return _("
\8eã
\82¢
\96\82\96@
\82Ì
\96î
\82ð
\95ú
\82Â
\81B", "Fires a weak bolt of magic.");
\r
30 int dice = 3 + ((plev - 1) / 5);
\r
33 if (info) return info_damage(dice, sides, 0);
\r
37 if (!get_aim_dir(&dir)) return NULL;
\r
39 fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, damroll(dice, sides));
\r
45 if (name) return _("
\83g
\83\89\83b
\83v/
\83h
\83A
\94j
\89ó", "Trap / Door Destruction");
\r
46 if (desc) return _("
\97×
\90Ú
\82·
\82éã©
\82Æ
\94à
\82ð
\94j
\89ó
\82·
\82é
\81B", "Destroys all traps in adjacent squares.");
\r
51 if (info) return info_radius(rad);
\r
55 destroy_doors_touch();
\r
61 if (name) return _("
\91M
\8cõ", "Flash of Light");
\r
62 if (desc) return _("
\8cõ
\8c¹
\82ª
\8fÆ
\82ç
\82µ
\82Ä
\82¢
\82é
\94Í
\88Í
\82©
\95\94\89®
\91S
\91Ì
\82ð
\89i
\8bv
\82É
\96¾
\82é
\82
\82·
\82é
\81B", "Lights up nearby area and the inside of a room permanently.");
\r
66 int sides = plev / 2;
\r
67 int rad = (plev / 10) + 1;
\r
69 if (info) return info_damage(dice, sides, 0);
\r
73 lite_area(damroll(dice, sides), rad);
\r
79 if (name) return _("
\8d¬
\97\90\82Ì
\8eè", "Touch of Confusion");
\r
80 if (desc) return _("
\91\8a\8eè
\82ð
\8d¬
\97\90\82³
\82¹
\82é
\8dU
\8c\82\82ð
\82Å
\82«
\82é
\82æ
\82¤
\82É
\82·
\82é
\81B", "Attempts to confuse the next monster that you hit.");
\r
85 if (!(p_ptr->special_attack & ATTACK_CONFUSE))
\r
87 msg_print(_("
\82 \82È
\82½
\82Ì
\8eè
\82Í
\8cõ
\82è
\8en
\82ß
\82½
\81B", "Your hands start glowing."));
\r
88 p_ptr->special_attack |= ATTACK_CONFUSE;
\r
89 p_ptr->redraw |= (PR_STATUS);
\r
96 if (name) return _("
\96\82\97Íày
\97ô", "Mana Burst");
\r
97 if (desc) return _("
\96\82\96@
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a ball of magic.");
\r
102 int rad = (plev < 30) ? 2 : 3;
\r
105 if (IS_WIZARD_CLASS())
\r
106 base = plev + plev / 2;
\r
108 base = plev + plev / 4;
\r
111 if (info) return info_damage(dice, sides, base);
\r
115 if (!get_aim_dir(&dir)) return NULL;
\r
117 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
\r
120 * Shouldn't actually use GF_MANA, as
\r
121 * it will destroy all items on the
\r
129 if (name) return _("
\83t
\83@
\83C
\83A
\81E
\83{
\83\8b\83g", "Fire Bolt");
\r
130 if (desc) return _("
\89\8a\82Ì
\83{
\83\8b\83g
\82à
\82µ
\82
\82Í
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a bolt or beam of fire.");
\r
133 int dice = 8 + (plev - 5) / 4;
\r
136 if (info) return info_damage(dice, sides, 0);
\r
140 if (!get_aim_dir(&dir)) return NULL;
\r
142 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
\r
148 if (name) return _("
\97Í
\82Ì
\8c\9d", "Fist of Force");
\r
149 if (desc) return _("
\82²
\82
\8f¬
\82³
\82È
\95ª
\89ð
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a tiny ball of disintegration.");
\r
152 int dice = 8 + ((plev - 5) / 4);
\r
155 if (info) return info_damage(dice, sides, 0);
\r
159 if (!get_aim_dir(&dir)) return NULL;
\r
161 fire_ball(GF_DISINTEGRATE, dir, damroll(dice, sides), 0);
\r
167 if (name) return _("
\83e
\83\8c\83|
\81[
\83g", "Teleport Self");
\r
168 if (desc) return _("
\89\93\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport long distance.");
\r
171 POSITION range = plev * 5;
\r
173 if (info) return info_range(range);
\r
177 teleport_player(range, 0L);
\r
183 if (name) return _("
\83\8f\83\93\83_
\81[", "Wonder");
\r
184 if (desc) return _("
\83\82\83\93\83X
\83^
\81[
\82É
\83\89\83\93\83_
\83\80\82È
\8cø
\89Ê
\82ð
\97^
\82¦
\82é
\81B", "Fires something with random effects.");
\r
187 if (info) return s_random;
\r
192 if (!get_aim_dir(&dir)) return NULL;
\r
200 if (name) return _("
\83J
\83I
\83X
\81E
\83{
\83\8b\83g", "Chaos Bolt");
\r
201 if (desc) return _("
\83J
\83I
\83X
\82Ì
\83{
\83\8b\83g
\82à
\82µ
\82
\82Í
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a bolt or ball of chaos.");
\r
204 int dice = 10 + (plev - 5) / 4;
\r
207 if (info) return info_damage(dice, sides, 0);
\r
211 if (!get_aim_dir(&dir)) return NULL;
\r
213 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
\r
219 if (name) return _("
\83\
\83j
\83b
\83N
\81E
\83u
\81[
\83\80", "Sonic Boom");
\r
220 if (desc) return _("
\8e©
\95ª
\82ð
\92\86\90S
\82Æ
\82µ
\82½
\8d\8c\89¹
\82Ì
\8b\85\82ð
\94
\90¶
\82³
\82¹
\82é
\81B", "Generates a ball of sound centered on you.");
\r
223 HIT_POINT dam = 60 + plev;
\r
224 int rad = plev / 10 + 2;
\r
226 if (info) return info_damage(0, 0, dam / 2);
\r
230 msg_print(_("
\83h
\81[
\83\93\81I
\95\94\89®
\82ª
\97h
\82ê
\82½
\81I", "BOOM! Shake the room!"));
\r
231 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
\r
237 if (name) return _("
\94j
\96Å
\82Ì
\96î", "Doom Bolt");
\r
238 if (desc) return _("
\8f\83\90\88\82È
\96\82\97Í
\82Ì
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a beam of pure mana.");
\r
241 int dice = 11 + (plev - 5) / 4;
\r
244 if (info) return info_damage(dice, sides, 0);
\r
248 if (!get_aim_dir(&dir)) return NULL;
\r
250 fire_beam(GF_MANA, dir, damroll(dice, sides));
\r
256 if (name) return _("
\83t
\83@
\83C
\83A
\81E
\83{
\81[
\83\8b", "Fire Ball");
\r
257 if (desc) return _("
\89\8a\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a ball of fire.");
\r
260 HIT_POINT dam = plev + 55;
\r
263 if (info) return info_damage(0, 0, dam);
\r
267 if (!get_aim_dir(&dir)) return NULL;
\r
269 fire_ball(GF_FIRE, dir, dam, rad);
\r
275 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83A
\83E
\83F
\83C", "Teleport Other");
\r
276 if (desc) return _("
\83\82\83\93\83X
\83^
\81[
\82ð
\83e
\83\8c\83|
\81[
\83g
\82³
\82¹
\82é
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Teleports all monsters on the line away unless resisted.");
\r
281 if (info) return info_power(power);
\r
285 if (!get_aim_dir(&dir)) return NULL;
\r
287 fire_beam(GF_AWAY_ALL, dir, power);
\r
293 if (name) return _("
\94j
\89ó
\82Ì
\8c¾
\97t", "Word of Destruction");
\r
294 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
302 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
\r
308 if (name) return _("
\83\8d\83O
\83\8b\83X
\94
\93®", "Invoke Logrus");
\r
309 if (desc) return _("
\8b\90\91å
\82È
\83J
\83I
\83X
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of chaos.");
\r
312 HIT_POINT dam = plev * 2 + 99;
\r
313 int rad = plev / 5;
\r
315 if (info) return info_damage(0, 0, dam);
\r
319 if (!get_aim_dir(&dir)) return NULL;
\r
321 fire_ball(GF_CHAOS, dir, dam, rad);
\r
327 if (name) return _("
\91¼
\8eÒ
\95Ï
\97e", "Polymorph Other");
\r
328 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\95Ï
\90g
\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to polymorph a monster.");
\r
333 if (info) return info_power(power);
\r
337 if (!get_aim_dir(&dir)) return NULL;
\r
339 poly_monster(dir, plev);
\r
345 if (name) return _("
\98A
\8d½
\88î
\8dÈ", "Chain Lightning");
\r
346 if (desc) return _("
\91S
\95û
\8cü
\82É
\91Î
\82µ
\82Ä
\93d
\8c\82\82Ì
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires lightning beams in all directions.");
\r
349 int dice = 5 + plev / 10;
\r
352 if (info) return info_damage(dice, sides, 0);
\r
356 for (dir = 0; dir <= 9; dir++)
\r
357 fire_beam(GF_ELEC, dir, damroll(dice, sides));
\r
363 if (name) return _("
\96\82\97Í
\95\95\93ü", "Arcane Binding");
\r
364 if (desc) return _("
\8fñ/
\96\82\96@
\96_
\82Ì
\8f[
\93U
\89ñ
\90\94\82ð
\91\9d\82â
\82·
\82©
\81A
\8f[
\93U
\92\86\82Ì
\83\8d\83b
\83h
\82Ì
\8f[
\93U
\8e\9e\8aÔ
\82ð
\8c¸
\82ç
\82·
\81B", "Recharges staffs, wands or rods.");
\r
369 if (info) return info_power(power);
\r
372 if (!recharge(power)) return NULL;
\r
378 if (name) return _("
\8c´
\8eq
\95ª
\89ð", "Disintegrate");
\r
379 if (desc) return _("
\8b\90\91å
\82È
\95ª
\89ð
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of disintegration.");
\r
382 HIT_POINT dam = plev + 70;
\r
383 int rad = 3 + plev / 40;
\r
385 if (info) return info_damage(0, 0, dam);
\r
389 if (!get_aim_dir(&dir)) return NULL;
\r
391 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
\r
397 if (name) return _("
\8c»
\8eÀ
\95Ï
\97e", "Alter Reality");
\r
398 if (desc) return _("
\8c»
\8dÝ
\82Ì
\8aK
\82ð
\8dÄ
\8d\
\90¬
\82·
\82é
\81B", "Recreates current dungeon level.");
\r
404 if (info) return info_delay(base, sides);
\r
414 if (name) return _("
\83}
\83W
\83b
\83N
\81E
\83\8d\83P
\83b
\83g", "Magic Rocket");
\r
415 if (desc) return _("
\83\8d\83P
\83b
\83g
\82ð
\94
\8eË
\82·
\82é
\81B", "Fires a magic rocket.");
\r
418 HIT_POINT dam = 120 + plev * 2;
\r
421 if (info) return info_damage(0, 0, dam);
\r
425 if (!get_aim_dir(&dir)) return NULL;
\r
427 msg_print(_("
\83\8d\83P
\83b
\83g
\94
\8eË
\81I", "You launch a rocket!"));
\r
428 fire_rocket(GF_ROCKET, dir, dam, rad);
\r
434 if (name) return _("
\8d¬
\93×
\82Ì
\90n", "Chaos Branding");
\r
435 if (desc) return _("
\95\90\8aí
\82É
\83J
\83I
\83X
\82Ì
\91®
\90«
\82ð
\82Â
\82¯
\82é
\81B", "Makes current weapon a Chaotic weapon.");
\r
446 if (name) return _("
\88«
\96\82\8f¢
\8a«", "Summon Demon");
\r
447 if (desc) return _("
\88«
\96\82\82ð1
\91Ì
\8f¢
\8a«
\82·
\82é
\81B", "Summons a demon.");
\r
453 bool pet = !one_in_(3);
\r
455 if (pet) flg |= PM_FORCE_PET;
\r
456 else flg |= PM_NO_PET;
\r
457 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
\r
459 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))
\r
461 msg_print(_("
\97°
\89©
\82Ì
\88«
\8fL
\82ª
\8f[
\96\9e\82µ
\82½
\81B", "The area fills with a stench of sulphur and brimstone."));
\r
464 msg_print(_("
\81u
\82²
\97p
\82Å
\82²
\82´
\82¢
\82Ü
\82·
\82©
\81A
\82²
\8eå
\90l
\97l
\81v", "'What is thy bidding... Master?'"));
\r
468 msg_print(_("
\81u
\94Ú
\82µ
\82«
\8eÒ
\82æ
\81A
\89ä
\82Í
\93ð
\82Ì
\89º
\96l
\82É
\82 \82ç
\82¸
\81I
\82¨
\91O
\82Ì
\8d°
\82ð
\92¸
\82
\82¼
\81I
\81v",
\r
469 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
\r
477 if (name) return _("
\8fd
\97Í
\8cõ
\90ü", "Beam of Gravity");
\r
478 if (desc) return _("
\8fd
\97Í
\82Ì
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a beam of gravity.");
\r
481 int dice = 9 + (plev - 5) / 4;
\r
484 if (info) return info_damage(dice, sides, 0);
\r
488 if (!get_aim_dir(&dir)) return NULL;
\r
489 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
\r
495 if (name) return _("
\97¬
\90¯
\8cQ", "Meteor Swarm");
\r
496 if (desc) return _("
\8e©
\95ª
\82Ì
\8eü
\95Ó
\82Éè¦
\90Î
\82ð
\97\8e\82Æ
\82·
\81B", "Makes meteor balls fall down to nearby random locations.");
\r
499 HIT_POINT dam = plev * 2;
\r
502 if (info) return info_multi_damage(dam);
\r
506 cast_meteor(dam, rad);
\r
512 if (name) return _("
\89\8b\82Ì
\88ê
\8c\82", "Flame Strike");
\r
513 if (desc) return _("
\8e©
\95ª
\82ð
\92\86\90S
\82Æ
\82µ
\82½
\92´
\8b\90\91å
\82È
\89\8a\82Ì
\8b\85\82ð
\94
\90¶
\82³
\82¹
\82é
\81B", "Generate a huge ball of fire centered on you.");
\r
516 HIT_POINT dam = 300 + 3 * plev;
\r
519 if (info) return info_damage(0, 0, dam / 2);
\r
523 fire_ball(GF_FIRE, 0, dam, rad);
\r
529 if (name) return _("
\8d¬
\93×
\8f¢
\97\88", "Call Chaos");
\r
530 if (desc) return _("
\83\89\83\93\83_
\83\80\82È
\91®
\90«
\82Ì
\8b\85\82â
\83r
\81[
\83\80\82ð
\94
\90¶
\82³
\82¹
\82é
\81B", "Generate random kind of balls or beams.");
\r
533 if (info) return format("%s150 / 250", s_dam);
\r
543 if (name) return _("
\8e©
\8cÈ
\95Ï
\97e", "Polymorph Self");
\r
544 if (desc) return _("
\8e©
\95ª
\82ð
\95Ï
\90g
\82³
\82¹
\82æ
\82¤
\82Æ
\82·
\82é
\81B", "Polymorphs yourself.");
\r
549 if (!get_check(_("
\95Ï
\90g
\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H", "You will polymorph yourself. Are you sure? "))) return NULL;
\r
556 if (name) return _("
\96\82\97Í
\82Ì
\97\92", "Mana Storm");
\r
557 if (desc) return _("
\94ñ
\8fí
\82É
\8b
\97Í
\82Å
\8b\90\91å
\82È
\8f\83\90\88\82È
\96\82\97Í
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires an extremely powerful huge ball of pure mana.");
\r
560 HIT_POINT dam = 300 + plev * 4;
\r
563 if (info) return info_damage(0, 0, dam);
\r
567 if (!get_aim_dir(&dir)) return NULL;
\r
568 fire_ball(GF_MANA, dir, dam, rad);
\r
574 if (name) return _("
\83\8d\83O
\83\8b\83X
\82Ì
\83u
\83\8c\83X", "Breathe Logrus");
\r
575 if (desc) return _("
\94ñ
\8fí
\82É
\8b
\97Í
\82È
\83J
\83I
\83X
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires an extremely powerful ball of chaos.");
\r
578 HIT_POINT dam = p_ptr->chp;
\r
581 if (info) return info_damage(0, 0, dam);
\r
585 if (!get_aim_dir(&dir)) return NULL;
\r
587 fire_ball(GF_CHAOS, dir, dam, rad);
\r
593 if (name) return _("
\8b\95\96³
\8f¢
\97\88", "Call the Void");
\r
594 if (desc) return _("
\8e©
\95ª
\82Ì
\8eü
\88Í
\82É
\8cü
\82©
\82Á
\82Ä
\81A
\83\8d\83P
\83b
\83g
\81A
\8f\83\90\88\82È
\96\82\97Í
\82Ì
\8b\85\81A
\95ú
\8eË
\90«
\94p
\8aü
\95¨
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B
\82½
\82¾
\82µ
\81A
\95Ç
\82É
\97×
\90Ú
\82µ
\82Ä
\8eg
\97p
\82·
\82é
\82Æ
\8dL
\94Í
\88Í
\82ð
\94j
\89ó
\82·
\82é
\81B",
\r
595 "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");
\r
598 if (info) return format("%s3 * 175", s_dam);
\r