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 (p_ptr->pclass == CLASS_MAGE ||
\r
106 p_ptr->pclass == CLASS_HIGH_MAGE ||
\r
107 p_ptr->pclass == CLASS_SORCERER)
\r
108 base = plev + plev / 2;
\r
110 base = plev + plev / 4;
\r
113 if (info) return info_damage(dice, sides, base);
\r
117 if (!get_aim_dir(&dir)) return NULL;
\r
119 fire_ball(GF_MISSILE, dir, damroll(dice, sides) + base, rad);
\r
122 * Shouldn't actually use GF_MANA, as
\r
123 * it will destroy all items on the
\r
131 if (name) return _("
\83t
\83@
\83C
\83A
\81E
\83{
\83\8b\83g", "Fire Bolt");
\r
132 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
135 int dice = 8 + (plev - 5) / 4;
\r
138 if (info) return info_damage(dice, sides, 0);
\r
142 if (!get_aim_dir(&dir)) return NULL;
\r
144 fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, damroll(dice, sides));
\r
150 if (name) return _("
\97Í
\82Ì
\8c\9d", "Fist of Force");
\r
151 if (desc) return _("
\82²
\82
\8f¬
\82³
\82È
\95ª
\89ð
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a tiny ball of disintegration.");
\r
154 int dice = 8 + ((plev - 5) / 4);
\r
157 if (info) return info_damage(dice, sides, 0);
\r
161 if (!get_aim_dir(&dir)) return NULL;
\r
163 fire_ball(GF_DISINTEGRATE, dir, damroll(dice, sides), 0);
\r
169 if (name) return _("
\83e
\83\8c\83|
\81[
\83g", "Teleport Self");
\r
170 if (desc) return _("
\89\93\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport long distance.");
\r
173 POSITION range = plev * 5;
\r
175 if (info) return info_range(range);
\r
179 teleport_player(range, 0L);
\r
185 if (name) return _("
\83\8f\83\93\83_
\81[", "Wonder");
\r
186 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
189 if (info) return s_random;
\r
194 if (!get_aim_dir(&dir)) return NULL;
\r
202 if (name) return _("
\83J
\83I
\83X
\81E
\83{
\83\8b\83g", "Chaos Bolt");
\r
203 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
206 int dice = 10 + (plev - 5) / 4;
\r
209 if (info) return info_damage(dice, sides, 0);
\r
213 if (!get_aim_dir(&dir)) return NULL;
\r
215 fire_bolt_or_beam(beam_chance(), GF_CHAOS, dir, damroll(dice, sides));
\r
221 if (name) return _("
\83\
\83j
\83b
\83N
\81E
\83u
\81[
\83\80", "Sonic Boom");
\r
222 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
225 HIT_POINT dam = 60 + plev;
\r
226 int rad = plev / 10 + 2;
\r
228 if (info) return info_damage(0, 0, dam / 2);
\r
232 msg_print(_("
\83h
\81[
\83\93\81I
\95\94\89®
\82ª
\97h
\82ê
\82½
\81I", "BOOM! Shake the room!"));
\r
233 project(0, rad, p_ptr->y, p_ptr->x, dam, GF_SOUND, PROJECT_KILL | PROJECT_ITEM, -1);
\r
239 if (name) return _("
\94j
\96Å
\82Ì
\96î", "Doom Bolt");
\r
240 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
243 int dice = 11 + (plev - 5) / 4;
\r
246 if (info) return info_damage(dice, sides, 0);
\r
250 if (!get_aim_dir(&dir)) return NULL;
\r
252 fire_beam(GF_MANA, dir, damroll(dice, sides));
\r
258 if (name) return _("
\83t
\83@
\83C
\83A
\81E
\83{
\81[
\83\8b", "Fire Ball");
\r
259 if (desc) return _("
\89\8a\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a ball of fire.");
\r
262 HIT_POINT dam = plev + 55;
\r
265 if (info) return info_damage(0, 0, dam);
\r
269 if (!get_aim_dir(&dir)) return NULL;
\r
271 fire_ball(GF_FIRE, dir, dam, rad);
\r
277 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83A
\83E
\83F
\83C", "Teleport Other");
\r
278 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
283 if (info) return info_power(power);
\r
287 if (!get_aim_dir(&dir)) return NULL;
\r
289 fire_beam(GF_AWAY_ALL, dir, power);
\r
295 if (name) return _("
\94j
\89ó
\82Ì
\8c¾
\97t", "Word of Destruction");
\r
296 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
304 destroy_area(p_ptr->y, p_ptr->x, base + randint1(sides), FALSE);
\r
310 if (name) return _("
\83\8d\83O
\83\8b\83X
\94
\93®", "Invoke Logrus");
\r
311 if (desc) return _("
\8b\90\91å
\82È
\83J
\83I
\83X
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of chaos.");
\r
314 HIT_POINT dam = plev * 2 + 99;
\r
315 int rad = plev / 5;
\r
317 if (info) return info_damage(0, 0, dam);
\r
321 if (!get_aim_dir(&dir)) return NULL;
\r
323 fire_ball(GF_CHAOS, dir, dam, rad);
\r
329 if (name) return _("
\91¼
\8eÒ
\95Ï
\97e", "Polymorph Other");
\r
330 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
335 if (info) return info_power(power);
\r
339 if (!get_aim_dir(&dir)) return NULL;
\r
341 poly_monster(dir, plev);
\r
347 if (name) return _("
\98A
\8d½
\88î
\8dÈ", "Chain Lightning");
\r
348 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
351 int dice = 5 + plev / 10;
\r
354 if (info) return info_damage(dice, sides, 0);
\r
358 for (dir = 0; dir <= 9; dir++)
\r
359 fire_beam(GF_ELEC, dir, damroll(dice, sides));
\r
365 if (name) return _("
\96\82\97Í
\95\95\93ü", "Arcane Binding");
\r
366 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
371 if (info) return info_power(power);
\r
375 if (!recharge(power)) return NULL;
\r
381 if (name) return _("
\8c´
\8eq
\95ª
\89ð", "Disintegrate");
\r
382 if (desc) return _("
\8b\90\91å
\82È
\95ª
\89ð
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of disintegration.");
\r
385 HIT_POINT dam = plev + 70;
\r
386 int rad = 3 + plev / 40;
\r
388 if (info) return info_damage(0, 0, dam);
\r
392 if (!get_aim_dir(&dir)) return NULL;
\r
394 fire_ball(GF_DISINTEGRATE, dir, dam, rad);
\r
400 if (name) return _("
\8c»
\8eÀ
\95Ï
\97e", "Alter Reality");
\r
401 if (desc) return _("
\8c»
\8dÝ
\82Ì
\8aK
\82ð
\8dÄ
\8d\
\90¬
\82·
\82é
\81B", "Recreates current dungeon level.");
\r
407 if (info) return info_delay(base, sides);
\r
417 if (name) return _("
\83}
\83W
\83b
\83N
\81E
\83\8d\83P
\83b
\83g", "Magic Rocket");
\r
418 if (desc) return _("
\83\8d\83P
\83b
\83g
\82ð
\94
\8eË
\82·
\82é
\81B", "Fires a magic rocket.");
\r
421 HIT_POINT dam = 120 + plev * 2;
\r
424 if (info) return info_damage(0, 0, dam);
\r
428 if (!get_aim_dir(&dir)) return NULL;
\r
430 msg_print(_("
\83\8d\83P
\83b
\83g
\94
\8eË
\81I", "You launch a rocket!"));
\r
431 fire_rocket(GF_ROCKET, dir, dam, rad);
\r
437 if (name) return _("
\8d¬
\93×
\82Ì
\90n", "Chaos Branding");
\r
438 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
449 if (name) return _("
\88«
\96\82\8f¢
\8a«", "Summon Demon");
\r
450 if (desc) return _("
\88«
\96\82\82ð1
\91Ì
\8f¢
\8a«
\82·
\82é
\81B", "Summons a demon.");
\r
456 bool pet = !one_in_(3);
\r
458 if (pet) flg |= PM_FORCE_PET;
\r
459 else flg |= PM_NO_PET;
\r
460 if (!(pet && (plev < 50))) flg |= PM_ALLOW_GROUP;
\r
462 if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, (plev * 3) / 2, SUMMON_DEMON, flg))
\r
464 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
467 msg_print(_("
\81u
\82²
\97p
\82Å
\82²
\82´
\82¢
\82Ü
\82·
\82©
\81A
\82²
\8eå
\90l
\97l
\81v", "'What is thy bidding... Master?'"));
\r
471 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
472 "'NON SERVIAM! Wretch! I shall feast on thy mortal soul!'"));
\r
480 if (name) return _("
\8fd
\97Í
\8cõ
\90ü", "Beam of Gravity");
\r
481 if (desc) return _("
\8fd
\97Í
\82Ì
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a beam of gravity.");
\r
484 int dice = 9 + (plev - 5) / 4;
\r
487 if (info) return info_damage(dice, sides, 0);
\r
491 if (!get_aim_dir(&dir)) return NULL;
\r
493 fire_beam(GF_GRAVITY, dir, damroll(dice, sides));
\r
499 if (name) return _("
\97¬
\90¯
\8cQ", "Meteor Swarm");
\r
500 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
503 HIT_POINT dam = plev * 2;
\r
506 if (info) return info_multi_damage(dam);
\r
510 cast_meteor(dam, rad);
\r
516 if (name) return _("
\89\8b\82Ì
\88ê
\8c\82", "Flame Strike");
\r
517 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
520 HIT_POINT dam = 300 + 3 * plev;
\r
523 if (info) return info_damage(0, 0, dam / 2);
\r
527 fire_ball(GF_FIRE, 0, dam, rad);
\r
533 if (name) return _("
\8d¬
\93×
\8f¢
\97\88", "Call Chaos");
\r
534 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
537 if (info) return format("%s150 / 250", s_dam);
\r
547 if (name) return _("
\8e©
\8cÈ
\95Ï
\97e", "Polymorph Self");
\r
548 if (desc) return _("
\8e©
\95ª
\82ð
\95Ï
\90g
\82³
\82¹
\82æ
\82¤
\82Æ
\82·
\82é
\81B", "Polymorphs yourself.");
\r
553 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
560 if (name) return _("
\96\82\97Í
\82Ì
\97\92", "Mana Storm");
\r
561 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
564 HIT_POINT dam = 300 + plev * 4;
\r
567 if (info) return info_damage(0, 0, dam);
\r
571 if (!get_aim_dir(&dir)) return NULL;
\r
573 fire_ball(GF_MANA, dir, dam, rad);
\r
579 if (name) return _("
\83\8d\83O
\83\8b\83X
\82Ì
\83u
\83\8c\83X", "Breathe Logrus");
\r
580 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
583 HIT_POINT dam = p_ptr->chp;
\r
586 if (info) return info_damage(0, 0, dam);
\r
590 if (!get_aim_dir(&dir)) return NULL;
\r
592 fire_ball(GF_CHAOS, dir, dam, rad);
\r
598 if (name) return _("
\8b\95\96³
\8f¢
\97\88", "Call the Void");
\r
599 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
600 "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
603 if (info) return format("%s3 * 175", s_dam);
\r