X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Frealm-life.c;h=78835b3e31d864eec6b66b3a3f5bb8659057b8cf;hb=eb2f15d1cfc313fda1f0578f2685246f3b76af4d;hp=37d237da0b257c35db8b291cf513e669488e6a4b;hpb=2b2fa4b1856713b776c1f05fe3db9eae7ee93742;p=hengband%2Fhengband.git diff --git a/src/realm-life.c b/src/realm-life.c index 37d237da0..78835b3e3 100644 --- a/src/realm-life.c +++ b/src/realm-life.c @@ -1,518 +1,480 @@ -#include "angband.h" -#include "cmd-spell.h" - -/*! -* @brief ¶–½—̈斂–@‚ÌŠeˆ—‚ðs‚¤ -* @param spell –‚–@ID -* @param mode ˆ—“à—e (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST) -* @return SPELL_NAME / SPELL_DESC / SPELL_INFO Žž‚É‚Í•¶Žš—ñƒ|ƒCƒ“ƒ^‚ð•Ô‚·BSPELL_CASTŽž‚ÍNULL•¶Žš—ñ‚ð•Ô‚·B -*/ -cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode) -{ - bool name = (mode == SPELL_NAME) ? TRUE : FALSE; - bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; - bool info = (mode == SPELL_INFO) ? TRUE : FALSE; - bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; - - int dir; - int plev = p_ptr->lev; - - switch (spell) - { - case 0: - if (name) return _("Œy‚ÌŽ¡–ü", "Cure Light Wounds"); - if (desc) return _("‰ö‰ä‚Æ‘Ì—Í‚ð­‚µ‰ñ•œ‚³‚¹‚éB", "Heals cut and HP a little."); - { - int dice = 2; - int sides = 10; - if (info) return info_heal(dice, sides, 0); - if (cast) (void)cure_light_wound(dice, sides); - } - break; - - case 1: - if (name) return _("j•Ÿ", "Bless"); - if (desc) return _("ˆê’莞ŠÔA–½’†—¦‚ÆAC‚Ƀ{[ƒiƒX‚𓾂éB", "Gives bonus to hit and AC for a few turns."); - { - int base = 12; - - if (info) return info_duration(base, base); - - if (cast) - { - set_blessed(randint1(base) + base, FALSE); - } - } - break; - - case 2: - if (name) return _("Œy", "Cause Light Wounds"); - if (desc) return _("1‘̂̃‚ƒ“ƒXƒ^[‚ɏ¬ƒ_ƒ[ƒW‚ð—^‚¦‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Wounds a monster a little unless resisted."); - { - int dice = 3 + (plev - 1) / 5; - int sides = 4; - - if (info) return info_damage(dice, sides, 0); - - if (cast) - { - if (!get_aim_dir(&dir)) return NULL; - fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); - } - } - break; - - case 3: - if (name) return _("Œõ‚̏¢Š«", "Call Light"); - if (desc) return _("ŒõŒ¹‚ªÆ‚炵‚Ä‚¢‚é”͈͂©•”‰®‘S‘Ì‚ð‰i‹v‚É–¾‚é‚­‚·‚éB", "Lights up nearby area and the inside of a room permanently."); - { - int dice = 2; - int sides = plev / 2; - int rad = plev / 10 + 1; - - if (info) return info_damage(dice, sides, 0); - - if (cast) - { - lite_area(damroll(dice, sides), rad); - } - } - break; - - case 4: - if (name) return _("ã© & ‰B‚µ”àŠ´’m", "Detect Doors & Traps"); - if (desc) return _("‹ß‚­‚Ì‘S‚Ä‚Ì㩂Ɣà‚ÆŠK’i‚ðŠ´’m‚·‚éB", "Detects traps, doors, and stairs in your vicinity."); - { - int rad = DETECT_RAD_DEFAULT; - - if (info) return info_radius(rad); - - if (cast) - { - detect_traps(rad, TRUE); - detect_doors(rad); - detect_stairs(rad); - } - } - break; - - case 5: - if (name) return _("d‚ÌŽ¡–ü", "Cure Medium Wounds"); - if (desc) return _("‰ö‰ä‚Æ‘Ì—Í‚ð’†’ö“x‰ñ•œ‚³‚¹‚éB", "Heals cut and HP more."); - { - int dice = 4; - int sides = 10; - - if (info) return info_heal(dice, sides, 0); - if (cast) (void)cure_serious_wound(dice, sides); - } - break; - - case 6: - if (name) return _("‰ð“Å", "Cure Poison"); - if (desc) return _("‘Ì“à‚Ì“Å‚ðŽæ‚菜‚­B", "Cure poison status."); - { - if (cast) - { - set_poisoned(0); - } - } - break; - - case 7: - if (name) return _("‹ó• [‘«", "Satisfy Hunger"); - if (desc) return _("–ž• ‚É‚·‚éB", "Satisfies hunger."); - { - if (cast) - { - set_food(PY_FOOD_MAX - 1); - } - } - break; - - case 8: - if (name) return _("‰ðŽô", "Remove Curse"); - if (desc) return _("ƒAƒCƒeƒ€‚É‚©‚©‚Á‚½Žã‚¢Žô‚¢‚ð‰ðœ‚·‚éB", "Removes normal curses from equipped items."); - { - if (cast) - { - if (remove_curse()) - { - msg_print(_("’N‚©‚ÉŒ©Žç‚ç‚ê‚Ä‚¢‚é‚悤‚È‹C‚ª‚·‚éB", "You feel as if someone is watching over you.")); - } - } - } - break; - - case 9: - if (name) return _("d", "Cause Medium Wounds"); - if (desc) return _("1‘̂̃‚ƒ“ƒXƒ^[‚É’†ƒ_ƒ[ƒW‚ð—^‚¦‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Wounds a monster unless resisted."); - { - int sides = 8 + (plev - 5) / 4; - int dice = 8; - - if (info) return info_damage(dice, sides, 0); - - if (cast) - { - if (!get_aim_dir(&dir)) return NULL; - fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); - } - } - break; - - case 10: - if (name) return _("’v–½‚ÌŽ¡–ü", "Cure Critical Wounds"); - if (desc) return _("‘Ì—Í‚ð‘啝‚ɉñ•œ‚³‚¹A•‰‚ÆžNžOó‘Ô‚à‘S‰õ‚·‚éB", "Heals cut, stun and HP greatly."); - { - int dice = 8; - int sides = 10; - - if (info) return info_heal(dice, sides, 0); - - if (cast) - { - hp_player(damroll(dice, sides)); - set_stun(0); - set_cut(0); - } - } - break; - - case 11: - if (name) return _("‘Ï”M‘ÏŠ¦", "Resist Heat and Cold"); - if (desc) return _("ˆê’莞ŠÔA‰Î‰Š‚Æ—â‹C‚ɑ΂·‚é‘ϐ«‚𓾂éB‘•”õ‚É‚æ‚é‘ϐ«‚ɗݐς·‚éB", - "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_cold(randint1(base) + base, FALSE); - set_oppose_fire(randint1(base) + base, FALSE); - } - } - break; - - case 12: - if (name) return _("Žü•ÓŠ´’m", "Sense Surroundings"); - if (desc) return _("Žü•Ó‚Ì’nŒ`‚ðŠ´’m‚·‚éB", "Maps nearby area."); - - { - int rad = DETECT_RAD_MAP; - - if (info) return info_radius(rad); - - if (cast) - { - map_area(rad); - } - } - break; - - case 13: - if (name) return _("ƒpƒjƒbƒNEƒAƒ“ƒfƒbƒh", "Turn Undead"); - if (desc) return _("Ž‹ŠE“à‚̃Aƒ“ƒfƒbƒh‚ð‹°•|‚³‚¹‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Attempts to scare undead monsters in sight."); - - { - if (cast) - { - turn_undead(); - } - } - break; - - case 14: - if (name) return _("‘̗͉ñ•œ", "Healing"); - if (desc) return _("‹É‚ß‚Ä‹­—͂ȉñ•œŽô•¶‚ŁA•‰‚ÆžNžOó‘Ô‚à‘S‰õ‚·‚éB", "Much powerful healing magic, and heals cut and stun completely."); - - { - int heal = 300; - - if (info) return info_heal(0, 0, heal); - - if (cast) - { - hp_player(heal); - set_stun(0); - set_cut(0); - } - } - break; - - case 15: - if (name) return _("Œ‹ŠE‚Ì–äÍ", "Glyph of Warding"); - if (desc) return _("Ž©•ª‚Ì‚¢‚鏰‚̏ã‚ɁAƒ‚ƒ“ƒXƒ^[‚ª’ʂ蔲‚¯‚½‚菢Š«‚³‚ꂽ‚è‚·‚邱‚Æ‚ª‚Å‚«‚È‚­‚Ȃ郋[ƒ“‚ð•`‚­B", - "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph."); - - { - if (cast) - { - warding_glyph(); - } - } - break; - - case 16: - if (name) return _("*‰ðŽô*", "Dispel Curse"); - if (desc) return _("ƒAƒCƒeƒ€‚É‚©‚©‚Á‚½‹­—Í‚ÈŽô‚¢‚ð‰ðœ‚·‚éB", "Removes normal and heavy curse from equipped items."); - - { - if (cast) - { - if (remove_all_curse()) - { - msg_print(_("’N‚©‚ÉŒ©Žç‚ç‚ê‚Ä‚¢‚é‚悤‚È‹C‚ª‚·‚éB", "You feel as if someone is watching over you.")); - } - } - } - break; - - case 17: - if (name) return _("ŠÓŽ¯", "Perception"); - if (desc) return _("ƒAƒCƒeƒ€‚ðŽ¯•Ê‚·‚éB", "Identifies an item."); - - { - if (cast) - { - if (!ident_spell(FALSE)) return NULL; - } - } - break; - - case 18: - if (name) return _("ƒAƒ“ƒfƒbƒh‘ÞŽU", "Dispel Undead"); - if (desc) return _("Ž‹ŠE“à‚Ì‘S‚ẴAƒ“ƒfƒbƒh‚Ƀ_ƒ[ƒW‚ð—^‚¦‚éB", "Damages all undead monsters in sight."); - - { - int dice = 1; - int sides = plev * 5; - - if (info) return info_damage(dice, sides, 0); - - if (cast) - { - dispel_undead(damroll(dice, sides)); - } - } - break; - - case 19: - if (name) return _("“â‚̍", "Day of the Dove"); - if (desc) return _("Ž‹ŠE“à‚Ì‘S‚Ẵ‚ƒ“ƒXƒ^[‚ð–£—¹‚·‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Attempts to charm all monsters in sight."); - - { - int power = plev * 2; - - if (info) return info_power(power); - - if (cast) - { - charm_monsters(power); - } - } - break; - - case 20: - if (name) return _("’v–½", "Cause Critical Wounds"); - if (desc) return _("1‘̂̃‚ƒ“ƒXƒ^[‚É‘åƒ_ƒ[ƒW‚ð—^‚¦‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", "Wounds a monster critically unless resisted."); - - { - int dice = 5 + (plev - 5) / 3; - int sides = 15; - - if (info) return info_damage(dice, sides, 0); - - if (cast) - { - if (!get_aim_dir(&dir)) return NULL; - fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); - } - } - break; - - case 21: - if (name) return _("‹AŠÒ‚̏Ù", "Word of Recall"); - if (desc) return _("’nã‚É‚¢‚é‚Æ‚«‚̓_ƒ“ƒWƒ‡ƒ“‚̍Ő[ŠK‚ցAƒ_ƒ“ƒWƒ‡ƒ“‚É‚¢‚é‚Æ‚«‚Í’nã‚ւƈړ®‚·‚éB", "Recalls player from dungeon to town, or from town to the deepest level of dungeon."); - - { - int base = 15; - int sides = 20; - - if (info) return info_delay(base, sides); - - if (cast) - { - if (!word_of_recall()) return NULL; - } - } - break; - - case 22: - if (name) return _("^ŽÀ‚̍Ւd", "Alter Reality"); - if (desc) return _("Œ»Ý‚ÌŠK‚ðÄ\¬‚·‚éB", "Recreates current dungeon level."); - - { - int base = 15; - int sides = 20; - - if (info) return info_delay(base, sides); - - if (cast) - { - alter_reality(); - } - } - break; - - case 23: - if (name) return _("^EŒ‹ŠE", "Warding True"); - if (desc) return _("Ž©•ª‚Ì‚¢‚鏰‚ÆŽüˆÍ8ƒ}ƒX‚̏°‚̏ã‚ɁAƒ‚ƒ“ƒXƒ^[‚ª’ʂ蔲‚¯‚½‚菢Š«‚³‚ꂽ‚è‚·‚邱‚Æ‚ª‚Å‚«‚È‚­‚Ȃ郋[ƒ“‚ð•`‚­B", "Creates glyphs in all adjacent squares and under you."); - - { - int rad = 1; - - if (info) return info_radius(rad); - - if (cast) - { - warding_glyph(); - glyph_creation(); - } - } - break; - - case 24: - if (name) return _("•s–щ»", "Sterilization"); - if (desc) return _("‚±‚ÌŠK‚Ì‘B‚·‚郂ƒ“ƒXƒ^[‚ª‘B‚Å‚«‚È‚­‚È‚éB", "Prevents any breeders on current level from breeding."); - - { - if (cast) - { - num_repro += MAX_REPRO; - } - } - break; - - case 25: - if (name) return _("‘SŠ´’m", "Detection"); - if (desc) return _("‹ß‚­‚Ì‘S‚Ẵ‚ƒ“ƒXƒ^[A㩁A”àAŠK’iAà•óA‚»‚µ‚ăAƒCƒeƒ€‚ðŠ´’m‚·‚éB", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity."); - - { - int rad = DETECT_RAD_DEFAULT; - - if (info) return info_radius(rad); - - if (cast) - { - detect_all(rad); - } - } - break; - - case 26: - if (name) return _("ƒAƒ“ƒfƒbƒhÁ–Å", "Annihilate Undead"); - if (desc) return _("Ž©•ª‚ÌŽüˆÍ‚É‚¢‚éƒAƒ“ƒfƒbƒh‚ðŒ»Ý‚ÌŠK‚©‚çÁ‚µ‹Ž‚éB’ïR‚³‚ê‚é‚Æ–³ŒøB", - "Eliminates all nearby undead monsters, exhausting you. Powerful or unique monsters may be able to resist."); - - { - int power = plev + 50; - - if (info) return info_power(power); - - if (cast) - { - mass_genocide_undead(power, TRUE); - } - } - break; - - case 27: - if (name) return _("ç—¢Šá", "Clairvoyance"); - if (desc) return _("‚»‚ÌŠK‘S‘Ì‚ð‰i‹v‚ɏƂ炵Aƒ_ƒ“ƒWƒ‡ƒ““à‚·‚ׂẴAƒCƒeƒ€‚ðŠ´’m‚·‚éB", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while."); - - { - if (cast) - { - wiz_lite(FALSE); - } - } - break; - - case 28: - if (name) return _("‘S•œŠˆ", "Restoration"); - if (desc) return _("‚·‚ׂẴXƒe[ƒ^ƒX‚ÆŒoŒ±’l‚ð‰ñ•œ‚·‚éB", "Restores all stats and experience."); - - { - if (cast) - { - do_res_stat(A_STR); - do_res_stat(A_INT); - do_res_stat(A_WIS); - do_res_stat(A_DEX); - do_res_stat(A_CON); - do_res_stat(A_CHR); - restore_level(); - } - } - break; - - case 29: - if (name) return _("*‘̗͉ñ•œ*", "Healing True"); - if (desc) return _("Å‹­‚ÌŽ¡–ü‚Ì–‚–@‚ŁA•‰‚ÆžNžOó‘Ô‚à‘S‰õ‚·‚éB", "The greatest healing magic. Heals all HP, cut and stun."); - - { - int heal = 2000; - - if (info) return info_heal(0, 0, heal); - - if (cast) - { - hp_player(heal); - set_stun(0); - set_cut(0); - } - } - break; - - case 30: - if (name) return _("¹‚È‚éƒrƒWƒ‡ƒ“", "Holy Vision"); - if (desc) return _("ƒAƒCƒeƒ€‚ÌŽ‚”\—Í‚ðŠ®‘S‚É’m‚éB", "*Identifies* an item."); - - { - if (cast) - { - if (!identify_fully(FALSE)) return NULL; - } - } - break; - - case 31: - if (name) return _("‹†‹É‚̑ϐ«", "Ultimate Resistance"); - if (desc) return _("ˆê’莞ŠÔA‚ ‚ç‚ä‚é‘ϐ«‚ð•t‚¯AAC‚Æ–‚–@–hŒä”\—Í‚ðã¸‚³‚¹‚éB", "Gives ultimate resistance, bonus to AC and speed."); - - { - TIME_EFFECT base = (TIME_EFFECT)plev / 2; - - if (info) return info_duration(base, base); - - if (cast) - { - TIME_EFFECT v = randint1(base) + base; - set_fast(v, FALSE); - set_oppose_acid(v, FALSE); - set_oppose_elec(v, FALSE); - set_oppose_fire(v, FALSE); - set_oppose_cold(v, FALSE); - set_oppose_pois(v, FALSE); - set_ultimate_res(v, FALSE); - } - } - break; - } - - return ""; -} +#include "angband.h" +#include "cmd-spell.h" + +/*! +* @brief 生命領域魔法の各処理を行う +* @param spell 魔法ID +* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST) +* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。 +*/ +cptr do_life_spell(SPELL_IDX spell, BIT_FLAGS mode) +{ + bool name = (mode == SPELL_NAME) ? TRUE : FALSE; + bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; + bool info = (mode == SPELL_INFO) ? TRUE : FALSE; + bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; + + DIRECTION dir; + PLAYER_LEVEL plev = p_ptr->lev; + + switch (spell) + { + case 0: + if (name) return _("軽傷の治癒", "Cure Light Wounds"); + if (desc) return _("怪我と体力を少し回復させる。", "Heals cut and HP a little."); + { + DICE_NUMBER dice = 2; + DICE_SID sides = 10; + if (info) return info_heal(dice, sides, 0); + if (cast) (void)cure_light_wounds(dice, sides); + } + break; + + case 1: + if (name) return _("祝福", "Bless"); + if (desc) return _("一定時間、命中率とACにボーナスを得る。", "Gives bonus to hit and AC for a few turns."); + { + int base = 12; + + if (info) return info_duration(base, base); + + if (cast) + { + set_blessed(randint1(base) + base, FALSE); + } + } + break; + + case 2: + if (name) return _("軽傷", "Cause Light Wounds"); + if (desc) return _("1体のモンスターに小ダメージを与える。抵抗されると無効。", "Wounds a monster a little unless resisted."); + { + DICE_NUMBER dice = 3 + (plev - 1) / 5; + DICE_SID sides = 4; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); + } + } + break; + + case 3: + if (name) return _("光の召喚", "Call Light"); + if (desc) return _("光源が照らしている範囲か部屋全体を永久に明るくする。", "Lights up nearby area and the inside of a room permanently."); + { + DICE_NUMBER dice = 2; + DICE_SID sides = plev / 2; + POSITION rad = plev / 10 + 1; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + lite_area(damroll(dice, sides), rad); + } + } + break; + + case 4: + if (name) return _("ç½  & 隠し扉感知", "Detect Doors & Traps"); + if (desc) return _("近くの全ての罠と扉と階段を感知する。", "Detects traps, doors, and stairs in your vicinity."); + { + POSITION rad = DETECT_RAD_DEFAULT; + + if (info) return info_radius(rad); + + if (cast) + { + detect_traps(rad, TRUE); + detect_doors(rad); + detect_stairs(rad); + } + } + break; + + case 5: + if (name) return _("重傷の治癒", "Cure Medium Wounds"); + if (desc) return _("怪我と体力を中程度回復させる。", "Heals cut and HP more."); + { + DICE_NUMBER dice = 4; + DICE_SID sides = 10; + + if (info) return info_heal(dice, sides, 0); + if (cast) (void)cure_serious_wounds(dice, sides); + } + break; + + case 6: + if (name) return _("解毒", "Cure Poison"); + if (desc) return _("体内の毒を取り除く。", "Cure poison status."); + { + if (cast) + { + set_poisoned(0); + } + } + break; + + case 7: + if (name) return _("空腹充足", "Satisfy Hunger"); + if (desc) return _("満腹にする。", "Satisfies hunger."); + { + if (cast) + { + set_food(PY_FOOD_MAX - 1); + } + } + break; + + case 8: + if (name) return _("解呪", "Remove Curse"); + if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items."); + { + if (cast) (void)remove_curse(); + } + break; + + case 9: + if (name) return _("重傷", "Cause Medium Wounds"); + if (desc) return _("1体のモンスターに中ダメージを与える。抵抗されると無効。", "Wounds a monster unless resisted."); + { + DICE_SID sides = 8 + (plev - 5) / 4; + DICE_NUMBER dice = 8; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); + } + } + break; + + case 10: + if (name) return _("致命傷の治癒", "Cure Critical Wounds"); + if (desc) return _("体力を大幅に回復させ、負傷と朦朧状態も全快する。", "Heals cut, stun and HP greatly."); + { + DICE_NUMBER dice = 8; + DICE_SID sides = 10; + + if (info) return info_heal(dice, sides, 0); + if (cast) (void)cure_critical_wounds(damroll(dice, sides)); + } + break; + + case 11: + if (name) return _("耐熱耐寒", "Resist Heat and Cold"); + if (desc) return _("一定時間、火炎と冷気に対する耐性を得る。装備による耐性に累積する。", + "Gives resistance to fire and cold. These resistances can be added to which from equipment for more powerful resistances."); + + { + int base = 20; + + if (info) return info_duration(base, base); + + if (cast) + { + set_oppose_cold(randint1(base) + base, FALSE); + set_oppose_fire(randint1(base) + base, FALSE); + } + } + break; + + case 12: + if (name) return _("周辺感知", "Sense Surroundings"); + if (desc) return _("周辺の地形を感知する。", "Maps nearby area."); + + { + POSITION rad = DETECT_RAD_MAP; + + if (info) return info_radius(rad); + + if (cast) + { + map_area(rad); + } + } + break; + + case 13: + if (name) return _("パニック・アンデッド", "Turn Undead"); + if (desc) return _("視界内のアンデッドを恐怖させる。抵抗されると無効。", "Attempts to scare undead monsters in sight."); + + { + if (cast) + { + turn_undead(); + } + } + break; + + case 14: + if (name) return _("体力回復", "Healing"); + if (desc) return _("極めて強力な回復呪文で、負傷と朦朧状態も全快する。", "Much powerful healing magic, and heals cut and stun completely."); + + { + int heal = 300; + if (info) return info_heal(0, 0, heal); + if (cast) (void)cure_critical_wounds(heal); + } + break; + + case 15: + if (name) return _("結界の紋章", "Glyph of Warding"); + if (desc) return _("自分のいる床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", + "Sets a glyph on the floor beneath you. Monsters cannot attack you if you are on a glyph, but can try to break glyph."); + + { + if (cast) + { + warding_glyph(); + } + } + break; + + case 16: + if (name) return _("*解呪*", "Dispel Curse"); + if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items."); + { + if (cast) (void)remove_all_curse(); + } + break; + + case 17: + if (name) return _("鑑識", "Perception"); + if (desc) return _("アイテムを識別する。", "Identifies an item."); + + { + if (cast) + { + if (!ident_spell(FALSE)) return NULL; + } + } + break; + + case 18: + if (name) return _("アンデッド退散", "Dispel Undead"); + if (desc) return _("視界内の全てのアンデッドにダメージを与える。", "Damages all undead monsters in sight."); + + { + DICE_NUMBER dice = 1; + DICE_SID sides = plev * 5; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + dispel_undead(damroll(dice, sides)); + } + } + break; + + case 19: + if (name) return _("凪の刻", "Day of the Dove"); + if (desc) return _("視界内の全てのモンスターを魅了する。抵抗されると無効。", "Attempts to charm all monsters in sight."); + + { + int power = plev * 2; + + if (info) return info_power(power); + + if (cast) + { + charm_monsters(power); + } + } + break; + + case 20: + if (name) return _("致命傷", "Cause Critical Wounds"); + if (desc) return _("1体のモンスターに大ダメージを与える。抵抗されると無効。", "Wounds a monster critically unless resisted."); + + { + DICE_NUMBER dice = 5 + (plev - 5) / 3; + DICE_SID sides = 15; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); + } + } + break; + + case 21: + if (name) return _("帰還の詔", "Word of Recall"); + if (desc) return _("地上にいるときはダンジョンの最深階へ、ダンジョンにいるときは地上へと移動する。", "Recalls player from dungeon to town, or from town to the deepest level of dungeon."); + + { + int base = 15; + DICE_SID sides = 20; + + if (info) return info_delay(base, sides); + + if (cast) + { + if (!word_of_recall()) return NULL; + } + } + break; + + case 22: + if (name) return _("真実の祭壇", "Alter Reality"); + if (desc) return _("現在の階を再構成する。", "Recreates current dungeon level."); + + { + int base = 15; + DICE_SID sides = 20; + + if (info) return info_delay(base, sides); + + if (cast) + { + alter_reality(); + } + } + break; + + case 23: + if (name) return _("真・結界", "Warding True"); + if (desc) return _("自分のいる床と周囲8マスの床の上に、モンスターが通り抜けたり召喚されたりすることができなくなるルーンを描く。", "Creates glyphs in all adjacent squares and under you."); + + { + POSITION rad = 1; + + if (info) return info_radius(rad); + + if (cast) + { + warding_glyph(); + glyph_creation(); + } + } + break; + + case 24: + if (name) return _("不毛化", "Sterilization"); + if (desc) return _("この階の増殖するモンスターが増殖できなくなる。", "Prevents any breeders on current level from breeding."); + + { + if (cast) + { + num_repro += MAX_REPRO; + } + } + break; + + case 25: + if (name) return _("全感知", "Detection"); + if (desc) return _("近くの全てのモンスター、罠、扉、階段、財宝、そしてアイテムを感知する。", "Detects all monsters, traps, doors, stairs, treasures and items in your vicinity."); + + { + POSITION rad = DETECT_RAD_DEFAULT; + + if (info) return info_radius(rad); + + if (cast) + { + detect_all(rad); + } + } + break; + + case 26: + if (name) return _("アンデッド消滅", "Annihilate Undead"); + if (desc) return _("自分の周囲にいるアンデッドを現在の階から消し去る。抵抗されると無効。", + "Eliminates all nearby undead monsters, exhausting you. Powerful or unique monsters may be able to resist."); + + { + int power = plev + 50; + + if (info) return info_power(power); + + if (cast) + { + mass_genocide_undead(power, TRUE); + } + } + break; + + case 27: + if (name) return _("千里眼", "Clairvoyance"); + if (desc) return _("その階全体を永久に照らし、ダンジョン内すべてのアイテムを感知する。", "Maps and lights whole dungeon level. Knows all objects location. And gives telepathy for a while."); + + { + if (cast) + { + wiz_lite(FALSE); + } + } + break; + + case 28: + if (name) return _("全復活", "Restoration"); + if (desc) return _("すべてのステータスと経験値を回復する。", "Restores all stats and experience."); + + { + if (cast) + { + (void)restore_all_status(); + restore_level(); + } + } + break; + + case 29: + if (name) return _("*体力回復*", "Healing True"); + if (desc) return _("最強の治癒の魔法で、負傷と朦朧状態も全快する。", "The greatest healing magic. Heals all HP, cut and stun."); + + { + int heal = 2000; + if (info) return info_heal(0, 0, heal); + if (cast) (void)cure_critical_wounds(heal); + } + break; + + case 30: + if (name) return _("聖なるビジョン", "Holy Vision"); + if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item."); + + { + if (cast) + { + if (!identify_fully(FALSE)) return NULL; + } + } + break; + + case 31: + if (name) return _("究極の耐性", "Ultimate Resistance"); + if (desc) return _("一定時間、あらゆる耐性を付け、ACと魔法防御能力を上昇させる。", "Gives ultimate resistance, bonus to AC and speed."); + + { + TIME_EFFECT base = (TIME_EFFECT)plev / 2; + + if (info) return info_duration(base, base); + + if (cast) + { + TIME_EFFECT v = randint1(base) + base; + set_fast(v, FALSE); + set_oppose_acid(v, FALSE); + set_oppose_elec(v, FALSE); + set_oppose_fire(v, FALSE); + set_oppose_cold(v, FALSE); + set_oppose_pois(v, FALSE); + set_ultimate_res(v, FALSE); + } + } + break; + } + + return ""; +}