2 #include "cmd-spell.h"
\r
6 * @brief
\8e©
\91R
\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_nature_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
18 static const char s_dam[] = _("
\91¹
\8f\9d:", "dam ");
\r
19 static const char s_rng[] = _("
\8eË
\92ö", "rng ");
\r
22 int plev = p_ptr->lev;
\r
27 if (name) return _("
\83\82\83\93\83X
\83^
\81[
\8a´
\92m", "Detect Creatures");
\r
28 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
31 int rad = DETECT_RAD_DEFAULT;
\r
33 if (info) return info_radius(rad);
\r
37 detect_monsters_normal(rad);
\r
43 if (name) return _("
\88î
\8dÈ", "Lightning");
\r
44 if (desc) return _("
\93d
\8c\82\82Ì
\92Z
\82¢
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a short beam of lightning.");
\r
47 int dice = 3 + (plev - 1) / 5;
\r
49 POSITION range = plev / 6 + 2;
\r
51 if (info) return format("%s%dd%d %s%d", s_dam, dice, sides, s_rng, range);
\r
55 project_length = range;
\r
57 if (!get_aim_dir(&dir)) return NULL;
\r
59 fire_beam(GF_ELEC, dir, damroll(dice, sides));
\r
65 if (name) return _("ã©
\82Æ
\94à
\8a´
\92m", "Detect Doors and Traps");
\r
66 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ìã©
\82Æ
\94à
\82ð
\8a´
\92m
\82·
\82é
\81B", "Detects traps, doors, and stairs in your vicinity.");
\r
69 int rad = DETECT_RAD_DEFAULT;
\r
71 if (info) return info_radius(rad);
\r
75 detect_traps(rad, TRUE);
\r
83 if (name) return _("
\90H
\97Æ
\90¶
\90¬", "Produce Food");
\r
84 if (desc) return _("
\90H
\97¿
\82ð
\88ê
\82Â
\8dì
\82è
\8fo
\82·
\81B", "Produces a Ration of Food.");
\r
89 object_type forge, *q_ptr = &forge;
\r
90 msg_print(_("
\90H
\97¿
\82ð
\90¶
\90¬
\82µ
\82½
\81B", "A food ration is produced."));
\r
92 /* Create the food ration */
\r
93 object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
\r
95 /* Drop the object from heaven */
\r
96 drop_near(q_ptr, -1, p_ptr->y, p_ptr->x);
\r
102 if (name) return _("
\93ú
\82Ì
\8cõ", "Daylight");
\r
103 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
107 int sides = plev / 2;
\r
108 int rad = (plev / 10) + 1;
\r
110 if (info) return info_damage(dice, sides, 0);
\r
114 lite_area(damroll(dice, sides), rad);
\r
116 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
\r
118 msg_print(_("
\93ú
\82Ì
\8cõ
\82ª
\82 \82È
\82½
\82Ì
\93÷
\91Ì
\82ð
\8fÅ
\82ª
\82µ
\82½
\81I", "The daylight scorches your flesh!"));
\r
119 take_hit(DAMAGE_NOESCAPE, damroll(2, 2), _("
\93ú
\82Ì
\8cõ", "daylight"), -1);
\r
126 if (name) return _("
\93®
\95¨
\8fK
\82µ", "Animal Taming");
\r
127 if (desc) return _("
\93®
\95¨1
\91Ì
\82ð
\96£
\97¹
\82·
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to charm an animal.");
\r
132 if (info) return info_power(power);
\r
136 if (!get_aim_dir(&dir)) return NULL;
\r
138 charm_animal(dir, power);
\r
144 if (name) return _("
\8aÂ
\8b«
\82Ö
\82Ì
\91Ï
\90«", "Resist Environment");
\r
145 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\97â
\8bC
\81A
\89\8a\81A
\93d
\8c\82\82É
\91Î
\82·
\82é
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B",
\r
146 "Gives resistance to fire, cold and electricity for a while. These resistances can be added to which from equipment for more powerful resistances.");
\r
151 if (info) return info_duration(base, base);
\r
155 set_oppose_cold(randint1(base) + base, FALSE);
\r
156 set_oppose_fire(randint1(base) + base, FALSE);
\r
157 set_oppose_elec(randint1(base) + base, FALSE);
\r
163 if (name) return _("
\8f\9d\82Æ
\93Å
\8e¡
\97Ã", "Cure Wounds & Poison");
\r
164 if (desc) return _("
\89ö
\89ä
\82ð
\91S
\89õ
\82³
\82¹
\81A
\93Å
\82ð
\91Ì
\82©
\82ç
\8a®
\91S
\82É
\8eæ
\82è
\8f\9c\82«
\81A
\91Ì
\97Í
\82ð
\8f
\82µ
\89ñ
\95\9c\82³
\82¹
\82é
\81B", "Heals all cut and poison status. Heals HP a little.");
\r
170 if (info) return info_heal(dice, sides, 0);
\r
174 hp_player(damroll(dice, sides));
\r
182 if (name) return _("
\8aâ
\90Î
\97n
\89ð", "Stone to Mud");
\r
183 if (desc) return _("
\95Ç
\82ð
\97n
\82©
\82µ
\82Ä
\8f°
\82É
\82·
\82é
\81B", "Turns one rock square to mud.");
\r
190 if (info) return info_damage(dice, sides, base);
\r
194 if (!get_aim_dir(&dir)) return NULL;
\r
196 wall_to_mud(dir, 20 + randint1(30));
\r
202 if (name) return _("
\83A
\83C
\83X
\81E
\83{
\83\8b\83g", "Frost Bolt");
\r
203 if (desc) return _("
\97â
\8bC
\82Ì
\83{
\83\8b\83g
\82à
\82µ
\82
\82Í
\83r
\81[
\83\80\82ð
\95ú
\82Â
\81B", "Fires a bolt or beam of cold.");
\r
206 int dice = 3 + (plev - 5) / 4;
\r
209 if (info) return info_damage(dice, sides, 0);
\r
213 if (!get_aim_dir(&dir)) return NULL;
\r
214 fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, damroll(dice, sides));
\r
220 if (name) return _("
\8e©
\91R
\82Ì
\8ao
\90Á", "Nature Awareness");
\r
221 if (desc) return _("
\8eü
\95Ó
\82Ì
\92n
\8c`
\82ð
\8a´
\92m
\82µ
\81A
\8bß
\82
\82Ìã©
\81A
\94à
\81A
\8aK
\92i
\81A
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\82ð
\8a´
\92m
\82·
\82é
\81B",
\r
222 "Maps nearby area. Detects all monsters, traps, doors and stairs.");
\r
225 int rad1 = DETECT_RAD_MAP;
\r
226 int rad2 = DETECT_RAD_DEFAULT;
\r
228 if (info) return info_radius(MAX(rad1, rad2));
\r
233 detect_traps(rad2, TRUE);
\r
234 detect_doors(rad2);
\r
235 detect_stairs(rad2);
\r
236 detect_monsters_normal(rad2);
\r
242 if (name) return _("
\83t
\83@
\83C
\83A
\81E
\83{
\83\8b\83g", "Fire Bolt");
\r
243 if (desc) return _("
\89Î
\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
246 int dice = 5 + (plev - 5) / 4;
\r
249 if (info) return info_damage(dice, sides, 0);
\r
253 if (!get_aim_dir(&dir)) return NULL;
\r
254 fire_bolt_or_beam(beam_chance() - 10, GF_FIRE, dir, damroll(dice, sides));
\r
260 if (name) return _("
\91¾
\97z
\8cõ
\90ü", "Ray of Sunlight");
\r
261 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
267 if (info) return info_damage(dice, sides, 0);
\r
271 if (!get_aim_dir(&dir)) return NULL;
\r
272 msg_print(_("
\91¾
\97z
\8cõ
\90ü
\82ª
\8c»
\82ê
\82½
\81B", "A line of sunlight appears."));
\r
273 lite_line(dir, damroll(6, 8));
\r
279 if (name) return _("
\91«
\82©
\82¹", "Entangle");
\r
280 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\82ð
\8c¸
\91¬
\82³
\82¹
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to slow all monsters in sight.");
\r
285 if (info) return info_power(power);
\r
289 slow_monsters(plev);
\r
295 if (name) return _("
\93®
\95¨
\8f¢
\8a«", "Summon Animal");
\r
296 if (desc) return _("
\93®
\95¨
\82ð1
\91Ì
\8f¢
\8a«
\82·
\82é
\81B", "Summons an animal.");
\r
301 if (!(summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET))))
\r
303 msg_print(_("
\93®
\95¨
\82Í
\8c»
\82ê
\82È
\82©
\82Á
\82½
\81B", "No animals arrive."));
\r
311 if (name) return _("
\96ò
\91\90\8e¡
\97Ã", "Herbal Healing");
\r
312 if (desc) return _("
\91Ì
\97Í
\82ð
\91å
\95\9d\82É
\89ñ
\95\9c\82³
\82¹
\81A
\95\89\8f\9d\81A
\9eN
\9eO
\8fó
\91Ô
\81A
\93Å
\82©
\82ç
\91S
\89õ
\82·
\82é
\81B", "Heals HP greatly. And heals cut, stun and poison completely.");
\r
317 if (info) return info_heal(0, 0, heal);
\r
330 if (name) return _("
\8aK
\92i
\90¶
\90¬", "Stair Building");
\r
331 if (desc) return _("
\8e©
\95ª
\82Ì
\82¢
\82é
\88Ê
\92u
\82É
\8aK
\92i
\82ð
\8dì
\82é
\81B", "Creates a stair which goes down or up.");
\r
342 if (name) return _("
\94§
\90Î
\89»", "Stone Skin");
\r
343 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81AAC
\82ð
\8fã
\8f¸
\82³
\82¹
\82é
\81B", "Gives bonus to AC for a while.");
\r
349 if (info) return info_duration(base, sides);
\r
353 set_shield(randint1(sides) + base, FALSE);
\r
359 if (name) return _("
\90^
\81E
\91Ï
\90«", "Resistance True");
\r
360 if (desc) return _("
\88ê
\92è
\8e\9e\8aÔ
\81A
\8e_
\81A
\93d
\8c\82\81A
\89\8a\81A
\97â
\8bC
\81A
\93Å
\82É
\91Î
\82·
\82é
\91Ï
\90«
\82ð
\93¾
\82é
\81B
\91\95\94õ
\82É
\82æ
\82é
\91Ï
\90«
\82É
\97Ý
\90Ï
\82·
\82é
\81B",
\r
361 "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to which from equipment for more powerful resistances.");
\r
366 if (info) return info_duration(base, base);
\r
370 set_oppose_acid(randint1(base) + base, FALSE);
\r
371 set_oppose_elec(randint1(base) + base, FALSE);
\r
372 set_oppose_fire(randint1(base) + base, FALSE);
\r
373 set_oppose_cold(randint1(base) + base, FALSE);
\r
374 set_oppose_pois(randint1(base) + base, FALSE);
\r
380 if (name) return _("
\90X
\97Ñ
\91n
\91¢", "Forest Creation");
\r
381 if (desc) return _("
\8eü
\88Í
\82É
\96Ø
\82ð
\8dì
\82è
\8fo
\82·
\81B", "Creates trees in all adjacent squares.");
\r
392 if (name) return _("
\93®
\95¨
\97F
\98a", "Animal Friendship");
\r
393 if (desc) return _("
\8e\8b\8aE
\93à
\82Ì
\91S
\82Ä
\82Ì
\93®
\95¨
\82ð
\96£
\97¹
\82·
\82é
\81B
\92ï
\8dR
\82³
\82ê
\82é
\82Æ
\96³
\8cø
\81B", "Attempts to charm all animals in sight.");
\r
396 int power = plev * 2;
\r
398 if (info) return info_power(power);
\r
402 charm_animals(power);
\r
408 if (name) return _("
\8e\8e\8bà
\90Î", "Stone Tell");
\r
409 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
414 if (!identify_fully(FALSE)) return NULL;
\r
420 if (name) return _("
\90Î
\82Ì
\95Ç", "Wall of Stone");
\r
421 if (desc) return _("
\8e©
\95ª
\82Ì
\8eü
\88Í
\82É
\89Ô
\9b¼
\8aâ
\82Ì
\95Ç
\82ð
\8dì
\82é
\81B", "Creates granite walls in all adjacent squares.");
\r
432 if (name) return _("
\95\85\90H
\96h
\8e~", "Protect from Corrosion");
\r
433 if (desc) return _("
\83A
\83C
\83e
\83\80\82ð
\8e_
\82Å
\8f\9d\82Â
\82©
\82È
\82¢
\82æ
\82¤
\89Á
\8dH
\82·
\82é
\81B", "Makes an equipment acid-proof.");
\r
438 if (!rustproof()) return NULL;
\r
444 if (name) return _("
\92n
\90k", "Earthquake");
\r
445 if (desc) return _("
\8eü
\88Í
\82Ì
\83_
\83\93\83W
\83\87\83\93\82ð
\97h
\82ç
\82µ
\81A
\95Ç
\82Æ
\8f°
\82ð
\83\89\83\93\83_
\83\80\82É
\93ü
\82ê
\95Ï
\82¦
\82é
\81B",
\r
446 "Shakes dungeon structure, and results in random swapping of floors and walls.");
\r
451 if (info) return info_radius(rad);
\r
455 earthquake(p_ptr->y, p_ptr->x, rad);
\r
461 if (name) return _("
\83J
\83}
\83C
\83^
\83`", "Cyclone");
\r
462 if (desc) return _("
\91S
\95û
\8cü
\82É
\8cü
\82©
\82Á
\82Ä
\8dU
\8c\82\82·
\82é
\81B", "Attacks all adjacent monsters.");
\r
469 monster_type *m_ptr;
\r
471 for (dir = 0; dir < 8; dir++)
\r
473 y = p_ptr->y + ddy_ddd[dir];
\r
474 x = p_ptr->x + ddx_ddd[dir];
\r
475 c_ptr = &cave[y][x];
\r
477 /* Get the monster */
\r
478 m_ptr = &m_list[c_ptr->m_idx];
\r
480 /* Hack -- attack monsters */
\r
481 if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
\r
482 py_attack(y, x, 0);
\r
489 if (name) return _("
\83u
\83\8a\83U
\81[
\83h", "Blizzard");
\r
490 if (desc) return _("
\8b\90\91å
\82È
\97â
\8bC
\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of cold.");
\r
493 HIT_POINT dam = 70 + plev * 3 / 2;
\r
494 int rad = plev / 12 + 1;
\r
496 if (info) return info_damage(0, 0, dam);
\r
500 if (!get_aim_dir(&dir)) return NULL;
\r
502 fire_ball(GF_COLD, dir, dam, rad);
\r
508 if (name) return _("
\88î
\8dÈ
\97\92", "Lightning Storm");
\r
509 if (desc) return _("
\8b\90\91å
\82È
\93d
\8c\82\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge electric ball.");
\r
512 HIT_POINT dam = 90 + plev * 3 / 2;
\r
513 int rad = plev / 12 + 1;
\r
515 if (info) return info_damage(0, 0, dam);
\r
519 if (!get_aim_dir(&dir)) return NULL;
\r
520 fire_ball(GF_ELEC, dir, dam, rad);
\r
527 if (name) return _("
\89Q
\92ª", "Whirlpool");
\r
528 if (desc) return _("
\8b\90\91å
\82È
\90\85\82Ì
\8b\85\82ð
\95ú
\82Â
\81B", "Fires a huge ball of water.");
\r
531 HIT_POINT dam = 100 + plev * 3 / 2;
\r
532 int rad = plev / 12 + 1;
\r
534 if (info) return info_damage(0, 0, dam);
\r
538 if (!get_aim_dir(&dir)) return NULL;
\r
539 fire_ball(GF_WATER, dir, dam, rad);
\r
545 if (name) return _("
\97z
\8cõ
\8f¢
\8a«", "Call Sunlight");
\r
546 if (desc) return _("
\8e©
\95ª
\82ð
\92\86\90S
\82Æ
\82µ
\82½
\8cõ
\82Ì
\8b\85\82ð
\94
\90¶
\82³
\82¹
\82é
\81B
\82³
\82ç
\82É
\81A
\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",
\r
547 "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.");
\r
550 HIT_POINT dam = 150;
\r
553 if (info) return info_damage(0, 0, dam / 2);
\r
557 fire_ball(GF_LITE, 0, dam, rad);
\r
558 chg_virtue(V_KNOWLEDGE, 1);
\r
559 chg_virtue(V_ENLIGHTEN, 1);
\r
562 if ((prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) && !p_ptr->resist_lite)
\r
564 msg_print(_("
\93ú
\8cõ
\82ª
\82 \82È
\82½
\82Ì
\93÷
\91Ì
\82ð
\8fÅ
\82ª
\82µ
\82½
\81I", "The sunlight scorches your flesh!"));
\r
565 take_hit(DAMAGE_NOESCAPE, 50, _("
\93ú
\8cõ", "sunlight"), -1);
\r
572 if (name) return _("
\90¸
\97ì
\82Ì
\90n", "Elemental Branding");
\r
573 if (desc) return _("
\95\90\8aí
\82É
\89\8a\82©
\97â
\8bC
\82Ì
\91®
\90«
\82ð
\82Â
\82¯
\82é
\81B", "Makes current weapon fire or frost branded.");
\r
578 brand_weapon(randint0(2));
\r
584 if (name) return _("
\8e©
\91R
\82Ì
\8bº
\88Ð", "Nature's Wrath");
\r
585 if (desc) return _("
\8bß
\82
\82Ì
\91S
\82Ä
\82Ì
\83\82\83\93\83X
\83^
\81[
\82É
\83_
\83\81\81[
\83W
\82ð
\97^
\82¦
\81A
\92n
\90k
\82ð
\8bN
\82±
\82µ
\81A
\8e©
\95ª
\82ð
\92\86\90S
\82Æ
\82µ
\82½
\95ª
\89ð
\82Ì
\8b\85\82ð
\94
\90¶
\82³
\82¹
\82é
\81B",
\r
586 "Damages all monsters in sight. Makes quake. Generates disintegration ball centered on you.");
\r
589 int d_dam = 4 * plev;
\r
590 int b_dam = (100 + plev) * 2;
\r
591 int b_rad = 1 + plev / 12;
\r
592 int q_rad = 20 + plev / 2;
\r
594 if (info) return format("%s%d+%d", s_dam, d_dam, b_dam / 2);
\r
598 dispel_monsters(d_dam);
\r
599 earthquake(p_ptr->y, p_ptr->x, q_rad);
\r
600 project(0, b_rad, p_ptr->y, p_ptr->x, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM, -1);
\r