2 #include "cmd-spell.h"
\r
5 * @brief
\94é
\8fp
\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_arcane_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
18 int plev = p_ptr->lev;
\r
23 if (name) return _("
\93d
\8c\82", "Zap");
\r
24 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
27 int dice = 3 + (plev - 1) / 5;
\r
30 if (info) return info_damage(dice, sides, 0);
\r
34 if (!get_aim_dir(&dir)) return NULL;
\r
36 fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, damroll(dice, sides));
\r
42 if (name) return _("
\96\82\96@
\82Ì
\8e{
\8fù", "Wizard Lock");
\r
43 if (desc) return _("
\94à
\82É
\8c®
\82ð
\82©
\82¯
\82é
\81B", "Locks a door.");
\r
48 if (!get_aim_dir(&dir)) return NULL;
\r
56 if (name) return _("
\93§
\96¾
\91Ì
\8a´
\92m", "Detect Invisibility");
\r
57 if (desc) return _("
\8bß
\82
\82Ì
\93§
\96¾
\82È
\83\82\83\93\83X
\83^
\81[
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all invisible monsters in your vicinity.");
\r
60 int rad = DETECT_RAD_DEFAULT;
\r
62 if (info) return info_radius(rad);
\r
66 detect_monsters_invis(rad);
\r
72 if (name) return _("
\83\82\83\93\83X
\83^
\81[
\8a´
\92m", "Detect Monsters");
\r
73 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\8c©
\82¦
\82é
\83\82\83\93\83X
\83^
\81[
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all monsters in your vicinity unless invisible.");
\r
76 int rad = DETECT_RAD_DEFAULT;
\r
78 if (info) return info_radius(rad);
\r
82 detect_monsters_normal(rad);
\r
88 if (name) return _("
\83V
\83\87\81[
\83g
\81E
\83e
\83\8c\83|
\81[
\83g", "Blink");
\r
89 if (desc) return _("
\8bß
\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport short distance.");
\r
92 POSITION range = 10;
\r
94 if (info) return info_range(range);
\r
98 teleport_player(range, 0L);
\r
104 if (name) return _("
\83\89\83C
\83g
\81E
\83G
\83\8a\83A", "Light Area");
\r
105 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
109 int sides = plev / 2;
\r
110 int rad = plev / 10 + 1;
\r
112 if (info) return info_damage(dice, sides, 0);
\r
116 lite_area(damroll(dice, sides), rad);
\r
122 if (name) return _("ã©
\82Æ
\94à
\94j
\89ó", "Trap & Door Destruction");
\r
123 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
128 if (!get_aim_dir(&dir)) return NULL;
\r
136 if (name) return _("
\8cy
\8f\9d\82Ì
\8e¡
\96ü", "Cure Light Wounds");
\r
137 if (desc) return _("
\89ö
\89ä
\82Æ
\91Ì
\97Í
\82ð
\8f
\82µ
\89ñ
\95\9c\82³
\82¹
\82é
\81B", "Heals cut and HP a little.");
\r
143 if (info) return info_heal(dice, sides, 0);
\r
144 if (cast) (void)cure_light_wound(dice, sides);
\r
149 if (name) return _("ã©
\82Æ
\94à
\8a´
\92m", "Detect Doors & Traps");
\r
150 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ìã©
\82Æ
\94à
\82Æ
\8aK
\92i
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects traps, doors, and stairs in your vicinity.");
\r
153 int rad = DETECT_RAD_DEFAULT;
\r
155 if (info) return info_radius(rad);
\r
159 detect_traps(rad, TRUE);
\r
161 detect_stairs(rad);
\r
167 if (name) return _("
\94R
\91f", "Phlogiston");
\r
168 if (desc) return _("
\8cõ
\8c¹
\82É
\94R
\97¿
\82ð
\95â
\8b\8b\82·
\82é
\81B", "Adds more turns of light to a lantern or torch.");
\r
179 if (name) return _("
\8dà
\95ó
\8a´
\92m", "Detect Treasure");
\r
180 if (desc) return _("
\8bß
\82
\82Ì
\8dà
\95ó
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all treasures in your vicinity.");
\r
183 int rad = DETECT_RAD_DEFAULT;
\r
185 if (info) return info_radius(rad);
\r
189 detect_treasure(rad);
\r
190 detect_objects_gold(rad);
\r
196 if (name) return _("
\96\82\96@
\8a´
\92m", "Detect Enchantment");
\r
197 if (desc) return _("
\8bß
\82
\82Ì
\96\82\96@
\82ª
\82©
\82©
\82Á
\82½
\83A
\83C
\83e
\83\80\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all magical items in your vicinity.");
\r
200 int rad = DETECT_RAD_DEFAULT;
\r
202 if (info) return info_radius(rad);
\r
206 detect_objects_magic(rad);
\r
212 if (name) return _("
\83A
\83C
\83e
\83\80\8a´
\92m", "Detect Objects");
\r
213 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\83A
\83C
\83e
\83\80\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all items in your vicinity.");
\r
216 int rad = DETECT_RAD_DEFAULT;
\r
218 if (info) return info_radius(rad);
\r
222 detect_objects_normal(rad);
\r
228 if (name) return _("
\89ð
\93Å", "Cure Poison");
\r
229 if (desc) return _("
\93Å
\82ð
\91Ì
\93à
\82©
\82ç
\8a®
\91S
\82É
\8eæ
\82è
\8f\9c\82
\81B", "Cures poison status.");
\r
240 if (name) return _("
\91Ï
\97â", "Resist Cold");
\r
241 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\97â
\8bC
\82Ö
\82Ì
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B", "Gives resistance to cold. This resistance can be added to which from equipment for more powerful resistance.");
\r
246 if (info) return info_duration(base, base);
\r
250 set_oppose_cold(randint1(base) + base, FALSE);
\r
256 if (name) return _("
\91Ï
\89Î", "Resist Fire");
\r
257 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\89\8a\82Ö
\82Ì
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B",
\r
258 "Gives resistance to fire. This resistance can be added to which from equipment for more powerful resistance.");
\r
263 if (info) return info_duration(base, base);
\r
267 set_oppose_fire(randint1(base) + base, FALSE);
\r
273 if (name) return _("
\91Ï
\93d", "Resist Lightning");
\r
274 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\93d
\8c\82\82Ö
\82Ì
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B",
\r
275 "Gives resistance to electricity. This resistance can be added to which from equipment for more powerful resistance.");
\r
280 if (info) return info_duration(base, base);
\r
284 set_oppose_elec(randint1(base) + base, FALSE);
\r
290 if (name) return _("
\91Ï
\8e_", "Resist Acid");
\r
291 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\8e_
\82Ö
\82Ì
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B",
\r
292 "Gives resistance to acid. This resistance can be added to which from equipment for more powerful resistance.");
\r
297 if (info) return info_duration(base, base);
\r
301 set_oppose_acid(randint1(base) + base, FALSE);
\r
307 if (name) return _("
\8fd
\8f\9d\82Ì
\8e¡
\96ü", "Cure Medium Wounds");
\r
308 if (desc) return _("
\89ö
\89ä
\82Æ
\91Ì
\97Í
\82ð
\92\86\92ö
\93x
\89ñ
\95\9c\82³
\82¹
\82é
\81B", "Heals cut and HP more.");
\r
314 if (info) return info_heal(dice, sides, 0);
\r
315 if (cast) (void)cure_serious_wound(4, 8);
\r
320 if (name) return _("
\83e
\83\8c\83|
\81[
\83g", "Teleport");
\r
321 if (desc) return _("
\89\93\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport long distance.");
\r
324 POSITION range = plev * 5;
\r
326 if (info) return info_range(range);
\r
330 teleport_player(range, 0L);
\r
336 if (name) return _("
\8aÓ
\92è", "Identify");
\r
337 if (desc) return _("
\83A
\83C
\83e
\83\80\82ð
\8e¯
\95Ê
\82·
\82é
\81B", "Identifies an item.");
\r
342 if (!ident_spell(FALSE)) return NULL;
\r
348 if (name) return _("
\8aâ
\90Î
\97n
\89ð", "Stone to Mud");
\r
349 if (desc) return _("
\95Ç
\82ð
\97n
\82©
\82µ
\82Ä
\8f°
\82É
\82·
\82é
\81B", "Turns one rock square to mud.");
\r
356 if (info) return info_damage(dice, sides, base);
\r
360 if (!get_aim_dir(&dir)) return NULL;
\r
362 wall_to_mud(dir, 20 + randint1(30));
\r
368 if (name) return _("
\91M
\8cõ", "Ray of Light");
\r
369 if (desc) return _("
\8cõ
\90ü
\82ð
\95ú
\82Â
\81B
\8cõ
\82è
\82ð
\8c\99\82¤
\83\82\83\93\83X
\83^
\81[
\82É
\8cø
\89Ê
\82ª
\82 \82é
\81B", "Fires a beam of light which damages to light-sensitive monsters.");
\r
375 if (info) return info_damage(dice, sides, 0);
\r
379 if (!get_aim_dir(&dir)) return NULL;
\r
381 msg_print(_("
\8cõ
\90ü
\82ª
\95ú
\82½
\82ê
\82½
\81B", "A line of light appears."));
\r
382 lite_line(dir, damroll(6, 8));
\r
388 if (name) return _("
\8bó
\95 \8f[
\91«", "Satisfy Hunger");
\r
389 if (desc) return _("
\96\9e\95 \82É
\82·
\82é
\81B", "Satisfies hunger.");
\r
394 set_food(PY_FOOD_MAX - 1);
\r
400 if (name) return _("
\93§
\96¾
\8e\8b\94F", "See Invisible");
\r
401 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
406 if (info) return info_duration(base, base);
\r
410 set_tim_invis(randint1(base) + base, FALSE);
\r
416 if (name) return _("
\83G
\83\8c\83\81\83\93\83^
\83\8b\8f¢
\8a«", "Conjure Elemental");
\r
417 if (desc) return _("1
\91Ì
\82Ì
\83G
\83\8c\83\81\83\93\83^
\83\8b\82ð
\8f¢
\8a«
\82·
\82é
\81B", "Summons an elemental.");
\r
422 if (!summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
\r
424 msg_print(_("
\83G
\83\8c\83\81\83\93\83^
\83\8b\82Í
\8c»
\82ê
\82È
\82©
\82Á
\82½
\81B", "No Elementals arrive."));
\r
431 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\8c\83x
\83\8b", "Teleport Level");
\r
432 if (desc) return _("
\8fu
\8e\9e\82É
\8fã
\82©
\89º
\82Ì
\8aK
\82É
\83e
\83\8c\83|
\81[
\83g
\82·
\82é
\81B", "Teleport to up or down stairs in a moment.");
\r
437 if (!get_check(_("
\96{
\93\96\82É
\91¼
\82Ì
\8aK
\82É
\83e
\83\8c\83|
\81[
\83g
\82µ
\82Ü
\82·
\82©
\81H", "Are you sure? (Teleport Level)"))) return NULL;
\r
444 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\82\83\93\83X
\83^
\81[", "Teleport Away");
\r
445 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
450 if (info) return info_power(power);
\r
454 if (!get_aim_dir(&dir)) return NULL;
\r
456 fire_beam(GF_AWAY_ALL, dir, power);
\r
462 if (name) return _("
\8c³
\91f
\82Ì
\8b\85", "Elemental Ball");
\r
463 if (desc) return _("
\89\8a\81A
\93d
\8c\82\81A
\97â
\8bC
\81A
\8e_
\82Ì
\82Ç
\82ê
\82©
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a ball of some elements.");
\r
466 HIT_POINT dam = 75 + plev;
\r
469 if (info) return info_damage(0, 0, dam);
\r
475 if (!get_aim_dir(&dir)) return NULL;
\r
477 switch (randint1(4))
\r
479 case 1: type = GF_FIRE; break;
\r
480 case 2: type = GF_ELEC; break;
\r
481 case 3: type = GF_COLD; break;
\r
482 default: type = GF_ACID; break;
\r
485 fire_ball(type, dir, dam, rad);
\r
491 if (name) return _("
\91S
\8a´
\92m", "Detection");
\r
492 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\81Aã©
\81A
\94à
\81A
\8aK
\92i
\81A
\8dà
\95ó
\81A
\82»
\82µ
\82Ä
\83A
\83C
\83e
\83\80\82ð
\8a´
\92m
\82·
\82é
\81B",
\r
493 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
\r
496 int rad = DETECT_RAD_DEFAULT;
\r
498 if (info) return info_radius(rad);
\r
508 if (name) return _("
\8bA
\8aÒ
\82Ì
\8eô
\95¶", "Word of Recall");
\r
509 if (desc) return _("
\92n
\8fã
\82É
\82¢
\82é
\82Æ
\82«
\82Í
\83_
\83\93\83W
\83\87\83\93\82Ì
\8dÅ
\90[
\8aK
\82Ö
\81A
\83_
\83\93\83W
\83\87\83\93\82É
\82¢
\82é
\82Æ
\82«
\82Í
\92n
\8fã
\82Ö
\82Æ
\88Ú
\93®
\82·
\82é
\81B",
\r
510 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
\r
516 if (info) return info_delay(base, sides);
\r
520 if (!word_of_recall()) return NULL;
\r
526 if (name) return _("
\90ç
\97¢
\8aá", "Clairvoyance");
\r
527 if (desc) return _("
\82»
\82Ì
\8aK
\91S
\91Ì
\82ð
\89i
\8bv
\82É
\8fÆ
\82ç
\82µ
\81A
\83_
\83\93\83W
\83\87\83\93\93à
\82·
\82×
\82Ä
\82Ì
\83A
\83C
\83e
\83\80\82ð
\8a´
\92m
\82·
\82é
\81B
\82³
\82ç
\82É
\81A
\88ê
\92è
\8e\9e\8aÔ
\83e
\83\8c\83p
\83V
\81[
\94\
\97Í
\82ð
\93¾
\82é
\81B",
\r
528 "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
\r
534 if (info) return info_duration(base, sides);
\r
538 chg_virtue(V_KNOWLEDGE, 1);
\r
539 chg_virtue(V_ENLIGHTEN, 1);
\r
543 if (!p_ptr->telepathy)
\r
545 set_tim_esp(randint1(sides) + base, FALSE);
\r