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
318 hp_player(damroll(dice, sides));
\r
319 set_cut((p_ptr->cut / 2) - 50);
\r
325 if (name) return _("
\83e
\83\8c\83|
\81[
\83g", "Teleport");
\r
326 if (desc) return _("
\89\93\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport long distance.");
\r
329 POSITION range = plev * 5;
\r
331 if (info) return info_range(range);
\r
335 teleport_player(range, 0L);
\r
341 if (name) return _("
\8aÓ
\92è", "Identify");
\r
342 if (desc) return _("
\83A
\83C
\83e
\83\80\82ð
\8e¯
\95Ê
\82·
\82é
\81B", "Identifies an item.");
\r
347 if (!ident_spell(FALSE)) return NULL;
\r
353 if (name) return _("
\8aâ
\90Î
\97n
\89ð", "Stone to Mud");
\r
354 if (desc) return _("
\95Ç
\82ð
\97n
\82©
\82µ
\82Ä
\8f°
\82É
\82·
\82é
\81B", "Turns one rock square to mud.");
\r
361 if (info) return info_damage(dice, sides, base);
\r
365 if (!get_aim_dir(&dir)) return NULL;
\r
367 wall_to_mud(dir, 20 + randint1(30));
\r
373 if (name) return _("
\91M
\8cõ", "Ray of Light");
\r
374 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
380 if (info) return info_damage(dice, sides, 0);
\r
384 if (!get_aim_dir(&dir)) return NULL;
\r
386 msg_print(_("
\8cõ
\90ü
\82ª
\95ú
\82½
\82ê
\82½
\81B", "A line of light appears."));
\r
387 lite_line(dir, damroll(6, 8));
\r
393 if (name) return _("
\8bó
\95 \8f[
\91«", "Satisfy Hunger");
\r
394 if (desc) return _("
\96\9e\95 \82É
\82·
\82é
\81B", "Satisfies hunger.");
\r
399 set_food(PY_FOOD_MAX - 1);
\r
405 if (name) return _("
\93§
\96¾
\8e\8b\94F", "See Invisible");
\r
406 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
411 if (info) return info_duration(base, base);
\r
415 set_tim_invis(randint1(base) + base, FALSE);
\r
421 if (name) return _("
\83G
\83\8c\83\81\83\93\83^
\83\8b\8f¢
\8a«", "Conjure Elemental");
\r
422 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
427 if (!summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ELEMENTAL, (PM_ALLOW_GROUP | PM_FORCE_PET)))
\r
429 msg_print(_("
\83G
\83\8c\83\81\83\93\83^
\83\8b\82Í
\8c»
\82ê
\82È
\82©
\82Á
\82½
\81B", "No Elementals arrive."));
\r
436 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\8c\83x
\83\8b", "Teleport Level");
\r
437 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
442 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
449 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\82\83\93\83X
\83^
\81[", "Teleport Away");
\r
450 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
455 if (info) return info_power(power);
\r
459 if (!get_aim_dir(&dir)) return NULL;
\r
461 fire_beam(GF_AWAY_ALL, dir, power);
\r
467 if (name) return _("
\8c³
\91f
\82Ì
\8b\85", "Elemental Ball");
\r
468 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
471 HIT_POINT dam = 75 + plev;
\r
474 if (info) return info_damage(0, 0, dam);
\r
480 if (!get_aim_dir(&dir)) return NULL;
\r
482 switch (randint1(4))
\r
484 case 1: type = GF_FIRE; break;
\r
485 case 2: type = GF_ELEC; break;
\r
486 case 3: type = GF_COLD; break;
\r
487 default: type = GF_ACID; break;
\r
490 fire_ball(type, dir, dam, rad);
\r
496 if (name) return _("
\91S
\8a´
\92m", "Detection");
\r
497 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
498 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
\r
501 int rad = DETECT_RAD_DEFAULT;
\r
503 if (info) return info_radius(rad);
\r
513 if (name) return _("
\8bA
\8aÒ
\82Ì
\8eô
\95¶", "Word of Recall");
\r
514 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
515 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
\r
521 if (info) return info_delay(base, sides);
\r
525 if (!word_of_recall()) return NULL;
\r
531 if (name) return _("
\90ç
\97¢
\8aá", "Clairvoyance");
\r
532 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
533 "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
\r
539 if (info) return info_duration(base, sides);
\r
543 chg_virtue(V_KNOWLEDGE, 1);
\r
544 chg_virtue(V_ENLIGHTEN, 1);
\r
548 if (!p_ptr->telepathy)
\r
550 set_tim_esp(randint1(sides) + base, FALSE);
\r