2 #include "cmd-spell.h"
\r
3 #include "selfinfo.h"
\r
6 * @brief
\90å
\8fp
\97Ì
\88æ
\96\82\96@
\82Ì
\8ae
\8f\88\97\9d\82ð
\8ds
\82¤
\r
7 * @param spell
\96\82\96@ID
\r
8 * @param mode
\8f\88\97\9d\93à
\97e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
\r
9 * @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
11 cptr do_sorcery_spell(SPELL_IDX spell, BIT_FLAGS mode)
\r
13 bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
\r
14 bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
\r
15 bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
\r
16 bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
\r
19 int plev = p_ptr->lev;
\r
24 if (name) return _("
\83\82\83\93\83X
\83^
\81[
\8a´
\92m", "Detect Monsters");
\r
25 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
28 int rad = DETECT_RAD_DEFAULT;
\r
30 if (info) return info_radius(rad);
\r
34 detect_monsters_normal(rad);
\r
40 if (name) return _("
\83V
\83\87\81[
\83g
\81E
\83e
\83\8c\83|
\81[
\83g", "Phase Door");
\r
41 if (desc) return _("
\8bß
\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport short distance.");
\r
44 POSITION range = 10;
\r
46 if (info) return info_range(range);
\r
50 teleport_player(range, 0L);
\r
56 if (name) return _("ã©
\82Æ
\94à
\8a´
\92m", "Detect Doors and Traps");
\r
57 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\94à
\82Æã©
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects traps, doors, and stairs in your vicinity.");
\r
60 int rad = DETECT_RAD_DEFAULT;
\r
62 if (info) return info_radius(rad);
\r
66 detect_traps(rad, TRUE);
\r
74 if (name) return _("
\83\89\83C
\83g
\81E
\83G
\83\8a\83A", "Light Area");
\r
75 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
79 int sides = plev / 2;
\r
80 int rad = plev / 10 + 1;
\r
82 if (info) return info_damage(dice, sides, 0);
\r
86 lite_area(damroll(dice, sides), rad);
\r
92 if (name) return _("
\83p
\83j
\83b
\83N
\81E
\83\82\83\93\83X
\83^
\81[", "Confuse Monster");
\r
93 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\8d¬
\97\90\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to confuse a monster.");
\r
96 int power = (plev * 3) / 2;
\r
98 if (info) return info_power(power);
\r
102 if (!get_aim_dir(&dir)) return NULL;
\r
104 confuse_monster(dir, power);
\r
110 if (name) return _("
\83e
\83\8c\83|
\81[
\83g", "Teleport");
\r
111 if (desc) return _("
\89\93\8b\97\97£
\82Ì
\83e
\83\8c\83|
\81[
\83g
\82ð
\82·
\82é
\81B", "Teleport long distance.");
\r
114 POSITION range = plev * 5;
\r
116 if (info) return info_range(range);
\r
120 teleport_player(range, 0L);
\r
126 if (name) return _("
\83X
\83\8a\81[
\83v
\81E
\83\82\83\93\83X
\83^
\81[", "Sleep Monster");
\r
127 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\96°
\82ç
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to sleep a monster.");
\r
132 if (info) return info_power(power);
\r
136 if (!get_aim_dir(&dir)) return NULL;
\r
138 sleep_monster(dir, plev);
\r
144 if (name) return _("
\96\82\97Í
\8f[
\93U", "Recharging");
\r
145 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
148 int power = plev * 4;
\r
150 if (info) return info_power(power);
\r
154 if (!recharge(power)) return NULL;
\r
160 if (name) return _("
\96\82\96@
\82Ì
\92n
\90}", "Magic Mapping");
\r
161 if (desc) return _("
\8eü
\95Ó
\82Ì
\92n
\8c`
\82ð
\8a´
\92m
\82·
\82é
\81B", "Maps nearby area.");
\r
164 int rad = DETECT_RAD_MAP;
\r
166 if (info) return info_radius(rad);
\r
176 if (name) return _("
\8aÓ
\92è", "Identify");
\r
177 if (desc) return _("
\83A
\83C
\83e
\83\80\82ð
\8e¯
\95Ê
\82·
\82é
\81B", "Identifies an item.");
\r
182 if (!ident_spell(FALSE)) return NULL;
\r
188 if (name) return _("
\83X
\83\8d\83E
\81E
\83\82\83\93\83X
\83^
\81[", "Slow Monster");
\r
189 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\8c¸
\91¬
\82³
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to slow a monster.");
\r
194 if (info) return info_power(power);
\r
198 if (!get_aim_dir(&dir)) return NULL;
\r
200 slow_monster(dir, plev);
\r
206 if (name) return _("
\8eü
\95Ó
\83X
\83\8a\81[
\83v", "Mass Sleep");
\r
207 if (desc) return _("
\8e\8b\8aE
\93à
\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 all monsters in sight.");
\r
212 if (info) return info_power(power);
\r
216 sleep_monsters(plev);
\r
222 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\82\83\93\83X
\83^
\81[", "Teleport Away");
\r
223 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
228 if (info) return info_power(power);
\r
232 if (!get_aim_dir(&dir)) return NULL;
\r
234 fire_beam(GF_AWAY_ALL, dir, power);
\r
240 if (name) return _("
\83X
\83s
\81[
\83h", "Haste Self");
\r
241 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\89Á
\91¬
\82·
\82é
\81B", "Hastes you for a while.");
\r
245 int sides = 20 + plev;
\r
247 if (info) return info_duration(base, sides);
\r
251 set_fast(randint1(sides) + base, FALSE);
\r
257 if (name) return _("
\90^
\81E
\8a´
\92m", "Detection True");
\r
258 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
259 "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity.");
\r
262 int rad = DETECT_RAD_DEFAULT;
\r
264 if (info) return info_radius(rad);
\r
274 if (name) return _("
\90^
\81E
\8aÓ
\92è", "Identify True");
\r
275 if (desc) return _("
\83A
\83C
\83e
\83\80\82Ì
\8e\9d\82Â
\94\
\97Í
\82ð
\8a®
\91S
\82É
\92m
\82é
\81B", "*Identifies* an item.");
\r
280 if (!identify_fully(FALSE)) return NULL;
\r
286 if (name) return _("
\95¨
\91Ì
\82Æ
\8dà
\95ó
\8a´
\92m", "Detect items and Treasure");
\r
287 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\83A
\83C
\83e
\83\80\82Æ
\8dà
\95ó
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects all treasures and items in your vicinity.");
\r
290 int rad = DETECT_RAD_DEFAULT;
\r
292 if (info) return info_radius(rad);
\r
296 detect_objects_normal(rad);
\r
297 detect_treasure(rad);
\r
298 detect_objects_gold(rad);
\r
304 if (name) return _("
\83`
\83\83\81[
\83\80\81E
\83\82\83\93\83X
\83^
\81[", "Charm Monster");
\r
305 if (desc) return _("
\83\82\83\93\83X
\83^
\81[1
\91Ì
\82ð
\96£
\97¹
\82·
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to charm a monster.");
\r
310 if (info) return info_power(power);
\r
314 if (!get_aim_dir(&dir)) return NULL;
\r
316 charm_monster(dir, power);
\r
322 if (name) return _("
\90¸
\90_
\8a´
\92m", "Sense Minds");
\r
323 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\83e
\83\8c\83p
\83V
\81[
\94\
\97Í
\82ð
\93¾
\82é
\81B", "Gives telepathy for a while.");
\r
329 if (info) return info_duration(base, sides);
\r
333 set_tim_esp(randint1(sides) + base, FALSE);
\r
339 if (name) return _("
\8aX
\88Ú
\93®", "Teleport to town");
\r
340 if (desc) return _("
\8aX
\82Ö
\88Ú
\93®
\82·
\82é
\81B
\92n
\8fã
\82É
\82¢
\82é
\82Æ
\82«
\82µ
\82©
\8eg
\82¦
\82È
\82¢
\81B", "Teleport to a town which you choose in a moment. Can only be used outdoors.");
\r
345 if (!tele_town()) return NULL;
\r
351 if (name) return _("
\8e©
\8cÈ
\95ª
\90Í", "Self Knowledge");
\r
352 if (desc) return _("
\8c»
\8dÝ
\82Ì
\8e©
\95ª
\82Ì
\8fó
\91Ô
\82ð
\8a®
\91S
\82É
\92m
\82é
\81B",
\r
353 "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats.");
\r
364 if (name) return _("
\83e
\83\8c\83|
\81[
\83g
\81E
\83\8c\83x
\83\8b", "Teleport Level");
\r
365 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
370 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
377 if (name) return _("
\8bA
\8aÒ
\82Ì
\8eô
\95¶", "Word of Recall");
\r
378 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
379 "Recalls player from dungeon to town, or from town to the deepest level of dungeon.");
\r
385 if (info) return info_delay(base, sides);
\r
389 if (!word_of_recall()) return NULL;
\r
395 if (name) return _("
\8e\9f\8c³
\82Ì
\94à", "Dimension Door");
\r
396 if (desc) return _("
\92Z
\8b\97\97£
\93à
\82Ì
\8ew
\92è
\82µ
\82½
\8fê
\8f\8a\82É
\83e
\83\8c\83|
\81[
\83g
\82·
\82é
\81B", "Teleport to given location.");
\r
399 POSITION range = plev / 2 + 10;
\r
401 if (info) return info_range(range);
\r
405 msg_print(_("
\8e\9f\8c³
\82Ì
\94à
\82ª
\8aJ
\82¢
\82½
\81B
\96Ú
\93I
\92n
\82ð
\91I
\82ñ
\82Å
\89º
\82³
\82¢
\81B", "You open a dimensional gate. Choose a destination."));
\r
406 if (!dimension_door()) return NULL;
\r
412 if (name) return _("
\92²
\8d¸", "Probing");
\r
413 if (desc) return _("
\83\82\83\93\83X
\83^
\81[
\82Ì
\91®
\90«
\81A
\8ec
\82è
\91Ì
\97Í
\81A
\8dÅ
\91å
\91Ì
\97Í
\81A
\83X
\83s
\81[
\83h
\81A
\90³
\91Ì
\82ð
\92m
\82é
\81B",
\r
414 "Proves all monsters' alignment, HP, speed and their true character.");
\r
425 if (name) return _("
\94\9a\94
\82Ì
\83\8b\81[
\83\93", "Explosive Rune");
\r
426 if (desc) return _("
\8e©
\95ª
\82Ì
\82¢
\82é
\8f°
\82Ì
\8fã
\82É
\81A
\83\82\83\93\83X
\83^
\81[
\82ª
\92Ê
\82é
\82Æ
\94\9a\94
\82µ
\82Ä
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\82é
\83\8b\81[
\83\93\82ð
\95`
\82
\81B",
\r
427 "Sets a glyph under you. The glyph will explode when a monster moves on it.");
\r
434 if (info) return info_damage(dice, sides, base);
\r
444 if (name) return _("
\94O
\93®
\97Í", "Telekinesis");
\r
445 if (desc) return _("
\83A
\83C
\83e
\83\80\82ð
\8e©
\95ª
\82Ì
\91«
\8c³
\82Ö
\88Ú
\93®
\82³
\82¹
\82é
\81B", "Pulls a distant item close to you.");
\r
448 int weight = plev * 15;
\r
450 if (info) return info_weight(weight);
\r
454 if (!get_aim_dir(&dir)) return NULL;
\r
456 fetch(dir, weight, FALSE);
\r
462 if (name) return _("
\90ç
\97¢
\8aá", "Clairvoyance");
\r
463 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
464 "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while.");
\r
470 if (info) return info_duration(base, sides);
\r
474 chg_virtue(V_KNOWLEDGE, 1);
\r
475 chg_virtue(V_ENLIGHTEN, 1);
\r
479 if (!p_ptr->telepathy)
\r
481 set_tim_esp(randint1(sides) + base, FALSE);
\r
488 if (name) return _("
\96£
\97¹
\82Ì
\8e\8b\90ü", "Charm monsters");
\r
489 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\82ð
\96£
\97¹
\82·
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to charm all monsters in sight.");
\r
492 int power = plev * 2;
\r
494 if (info) return info_power(power);
\r
498 charm_monsters(power);
\r
504 if (name) return _("
\98B
\8bà
\8fp", "Alchemy");
\r
505 if (desc) return _("
\83A
\83C
\83e
\83\801
\82Â
\82ð
\82¨
\8bà
\82É
\95Ï
\82¦
\82é
\81B", "Turns an item into 1/3 of its value in gold.");
\r
510 if (!alchemy()) return NULL;
\r
516 if (name) return _("
\89ö
\95¨
\92Ç
\95ú", "Banishment");
\r
517 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\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", "Teleports all monsters in sight away unless resisted.");
\r
520 int power = plev * 4;
\r
522 if (info) return info_power(power);
\r
526 banish_monsters(power);
\r
532 if (name) return _("
\96³
\8f\9d\82Ì
\8b\85", "Globe of Invulnerability");
\r
533 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\83_
\83\81\81[
\83W
\82ð
\8eó
\82¯
\82È
\82
\82È
\82é
\83o
\83\8a\83A
\82ð
\92£
\82é
\81B
\90Ø
\82ê
\82½
\8fu
\8aÔ
\82É
\8f
\82µ
\83^
\81[
\83\93\82ð
\8fÁ
\94ï
\82·
\82é
\82Ì
\82Å
\92\8d\88Ó
\81B",
\r
534 "Generates barrier which completely protect you from almost all damages. Takes a few your turns when the barrier breaks or duration time is exceeded.");
\r
539 if (info) return info_duration(base, base);
\r
543 set_invuln(randint1(base) + base, FALSE);
\r