X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fdo-spell.c;h=139df0f10f226929068dd40ea221ba849749b28e;hb=a71c13d36b80a3dd714c8a129987271604d189bd;hp=3a4940909bbb007e82c7cb6fd3c6900c53eed738;hpb=65719eb85057bae9d340f46aefa57dc8abbdac50;p=hengband%2Fhengband.git diff --git a/src/do-spell.c b/src/do-spell.c index 3a4940909..139df0f10 100644 --- a/src/do-spell.c +++ b/src/do-spell.c @@ -507,16 +507,16 @@ static void wild_magic(int spell) case 1: case 2: case 3: - teleport_player(10, TRUE); + teleport_player(10, TELEPORT_PASSIVE); break; case 4: case 5: case 6: - teleport_player(100, TRUE); + teleport_player(100, TELEPORT_PASSIVE); break; case 7: case 8: - teleport_player(200, TRUE); + teleport_player(200, TELEPORT_PASSIVE); break; case 9: case 10: @@ -722,7 +722,7 @@ static void cast_shuffle(void) msg_print("It's a teleport trump card."); #endif - teleport_player(10, TRUE); + teleport_player(10, TELEPORT_PASSIVE); } else if (die < 42) { @@ -742,7 +742,7 @@ static void cast_shuffle(void) msg_print("It's a teleport trump card."); #endif - teleport_player(100, TRUE); + teleport_player(100, TELEPORT_PASSIVE); } else if (die < 52) { @@ -752,7 +752,7 @@ static void cast_shuffle(void) msg_print("It's a teleport trump card."); #endif - teleport_player(200, TRUE); + teleport_player(200, TELEPORT_PASSIVE); } else if (die < 60) { @@ -931,7 +931,8 @@ static void cast_meteor(int dam, int rad) if (d >= 9) continue; - if (!in_bounds(y, x) || !projectable(py, px, y, x)) continue; + if (!in_bounds(y, x) || !projectable(py, px, y, x) + || !cave_have_flag_bold(y, x, FF_PROJECT)) continue; /* Valid position */ break; @@ -1932,7 +1933,7 @@ static cptr do_sorcery_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -2022,7 +2023,7 @@ static cptr do_sorcery_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -3597,7 +3598,7 @@ static cptr do_chaos_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -5049,7 +5050,7 @@ static cptr do_trump_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -5139,7 +5140,7 @@ static cptr do_trump_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -6055,7 +6056,7 @@ static cptr do_arcane_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -6369,7 +6370,7 @@ static cptr do_arcane_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -8288,7 +8289,7 @@ static cptr do_crusade_spell(int spell, int mode) if (cast) { - teleport_player(range, FALSE); + teleport_player(range, 0L); } } break; @@ -11057,7 +11058,11 @@ static cptr do_hissatsu_spell(int spell, int mode) /* Move the player */ if (!move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP)) break; } - + else + { + break; + } + /* -more- */ if (i < 2) msg_print(NULL); } @@ -11176,7 +11181,7 @@ static cptr do_hissatsu_spell(int spell, int mode) if (!tgt_pt(&x, &y)) return NULL; - if (!cave_player_teleportable_bold(y, x, FALSE, FALSE) || + if (!cave_player_teleportable_bold(y, x, 0L) || (distance(y, x, py, px) > MAX_SIGHT / 2) || !projectable(py, px, y, x)) { @@ -11198,7 +11203,7 @@ static cptr do_hissatsu_spell(int spell, int mode) break; } project(0, 0, y, x, HISSATSU_ISSEN, GF_ATTACK, PROJECT_BEAM | PROJECT_KILL, -1); - teleport_player_to(y, x, TRUE, FALSE); + teleport_player_to(y, x, 0L); } break; @@ -11381,14 +11386,1221 @@ static cptr do_hissatsu_spell(int spell, int mode) { #ifdef JP msg_print("Éð»ÎÆ»¤È¤Ï¡¢»à¤Ì¤³¤È¤È¸«¤Ä¤±¤¿¤ê¡£"); - take_hit(DAMAGE_FORCE, 9999, "ÀÚÊ¢", -1); #else msg_print("Meaning of Bushi-do is found in the death."); +#endif take_hit(DAMAGE_FORCE, 9999, "Seppuku", -1); + } + } + break; + } + + return ""; +} + + +/* Hex */ +static bool item_tester_hook_weapon_except_bow(object_type *o_ptr) +{ + switch (o_ptr->tval) + { + case TV_SWORD: + case TV_HAFTED: + case TV_POLEARM: + case TV_DIGGING: + { + return (TRUE); + } + } + + return (FALSE); +} + +static bool item_tester_hook_cursed(object_type *o_ptr) +{ + return (bool)(object_is_cursed(o_ptr)); +} + +static cptr do_hex_spell(int spell, int 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; + bool fail = (mode == SPELL_FAIL) ? TRUE : FALSE; + bool cont = (mode == SPELL_CONT) ? TRUE : FALSE; + bool stop = (mode == SPELL_STOP) ? TRUE : FALSE; + + bool add = TRUE; + + int plev = p_ptr->lev; + int power; + + switch (spell) + { + /*** 1st book (0-7) ***/ + case 0: +#ifdef JP + if (name) return "¼Ù¤Ê¤ë½ËÊ¡"; + if (desc) return "½ËÊ¡¤Ë¤è¤ê¹¶·âÀºÅÙ¤ÈËɸæÎϤ¬¾å¤¬¤ë¡£"; +#else + if (name) return "Evily blessing"; + if (desc) return "Attempts to increase +to_hit of a weapon and AC"; +#endif + if (cast) + { + if (!p_ptr->blessed) + { +#ifdef JP + msg_print("¹â·é¤Êµ¤Ê¬¤Ë¤Ê¤Ã¤¿¡ª"); +#else + msg_print("You feel righteous!"); +#endif + } + } + if (stop) + { + if (!p_ptr->blessed) + { +#ifdef JP + msg_print("¹â·é¤Êµ¤Ê¬¤¬¾Ã¤¨¼º¤»¤¿¡£"); +#else + msg_print("The prayer has expired."); +#endif + } + } + break; + + case 1: +#ifdef JP + if (name) return "·Ú½ý¤Î¼£Ìþ"; + if (desc) return "HP¤ä½ý¤ò¾¯¤·²óÉü¤µ¤»¤ë¡£"; +#else + if (name) return "Cure light wounds"; + if (desc) return "Heals cut and HP a little."; +#endif + if (info) return info_heal(1, 10, 0); + if (cast) + { +#ifdef JP + msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£"); +#else + msg_print("You feel better and better."); +#endif + } + if (cast || cont) + { + hp_player(damroll(1, 10)); + set_cut(p_ptr->cut - 10); + } + break; + + case 2: +#ifdef JP + if (name) return "°­Ëâ¤Î¥ª¡¼¥é"; + if (desc) return "±ê¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢²óÉü®ÅÙ¤¬Â®¤¯¤Ê¤ë¡£"; +#else + if (name) return "Demonic aura"; + if (desc) return "Gives fire aura and regeneration."; +#endif + if (cast) + { +#ifdef JP + msg_print("ÂΤ¬±ê¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£"); +#else + msg_print("You have enveloped by fiery aura!"); +#endif + } + if (stop) + { +#ifdef JP + msg_print("±ê¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_print("Fiery aura disappeared."); +#endif + } + break; + + case 3: +#ifdef JP + if (name) return "°­½­Ì¸"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÆǤΥÀ¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£"; +#else + if (name) return "Stinking mist"; + if (desc) return "Deals few damages of poison to all monsters in your sight."; +#endif + power = plev / 2 + 5; + if (info) return info_damage(1, power, 0); + if (cast || cont) + { + project_hack(GF_POIS, randint1(power)); + } + break; + + case 4: +#ifdef JP + if (name) return "ÏÓÎ϶¯²½"; + if (desc) return "½Ñ¼Ô¤ÎÏÓÎϤò¾å¾º¤µ¤»¤ë¡£"; +#else + if (name) return "Extra might"; + if (desc) return "Attempts to increase your strength."; +#endif + if (cast) + { +#ifdef JP + msg_print("²¿¤À¤«ÎϤ¬Í¯¤¤¤ÆÍè¤ë¡£"); +#else + msg_print("You feel you get stronger."); +#endif + } + break; + + case 5: +#ifdef JP + if (name) return "Éð´ï¼öÇû"; + if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëÉð´ï¤ò¼ö¤¦¡£"; +#else + if (name) return "Curse weapon"; + if (desc) return "Curses your weapon."; +#endif + if (cast) + { + int item; + char *q, *s; + char o_name[MAX_NLEN]; + object_type *o_ptr; + u32b f[TR_FLAG_SIZE]; + + item_tester_hook = item_tester_hook_weapon_except_bow; +#ifdef JP + q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©"; + s = "Éð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£"; +#else + q = "Which weapon do you curse?"; + s = "You wield no weapons."; +#endif + + if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE; + + o_ptr = &inventory[item]; + object_desc(o_name, o_ptr, OD_NAME_ONLY); + object_flags(o_ptr, f); + +#ifdef JP + if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE; +#else + if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE; +#endif + + if (!one_in_(3) && + (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED))) + { +#ifdef JP + msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name); +#else + msg_format("%s resists the effect.", o_name); +#endif + if (one_in_(3)) + { + if (o_ptr->to_d > 0) + { + o_ptr->to_d -= randint1(3) % 2; + if (o_ptr->to_d < 0) o_ptr->to_d = 0; + } + if (o_ptr->to_h > 0) + { + o_ptr->to_h -= randint1(3) % 2; + if (o_ptr->to_h < 0) o_ptr->to_h = 0; + } + if (o_ptr->to_a > 0) + { + o_ptr->to_a -= randint1(3) % 2; + if (o_ptr->to_a < 0) o_ptr->to_a = 0; + } +#ifdef JP + msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name); +#else + msg_format("Your %s was disenchanted!", o_name); +#endif + } + } + else + { + int power = 0; +#ifdef JP + msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name); +#else + msg_format("A terrible black aura blasts your %s!", o_name); +#endif + o_ptr->curse_flags |= (TRC_CURSED); + + if (object_is_artifact(o_ptr) || object_is_ego(o_ptr)) + { + + if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE); + if (one_in_(666)) + { + o_ptr->curse_flags |= (TRC_TY_CURSE); + if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE); + + add_flag(o_ptr->art_flags, TR_AGGRAVATE); + add_flag(o_ptr->art_flags, TR_VORPAL); + add_flag(o_ptr->art_flags, TR_VAMPIRIC); +#ifdef JP + msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª"); +#else + msg_print("Blood, Blood, Blood!"); +#endif + power = 2; + } + } + + o_ptr->curse_flags |= get_curse(power, o_ptr); + } + + p_ptr->update |= (PU_BONUS); + add = FALSE; + } + break; + + case 6: +#ifdef JP + if (name) return "¼Ù°­´¶ÃÎ"; + if (desc) return "¼þ°Ï¤Î¼Ù°­¤Ê¥â¥ó¥¹¥¿¡¼¤ò´¶ÃΤ¹¤ë¡£"; +#else + if (name) return "Evil detection"; + if (desc) return "Detects evil monsters."; +#endif + if (info) return info_range(MAX_SIGHT); + if (cast) + { +#ifdef JP + msg_print("¼Ù°­¤ÊÀ¸Êª¤Î¸ºß¤ò´¶¤¸¼è¤í¤¦¤È¤·¤¿¡£"); +#else + msg_print("You attend to the presence of evil creatures."); +#endif + } + break; + + case 7: +#ifdef JP + if (name) return "²æËý"; + if (desc) return "¿ô¥¿¡¼¥ó¹¶·â¤òÂѤ¨¤¿¸å¡¢¼õ¤±¤¿¥À¥á¡¼¥¸¤òÃϹö¤Î¶È²Ð¤È¤·¤Æ¼þ°Ï¤ËÊü½Ð¤¹¤ë¡£"; +#else + if (name) return "Patience"; + if (desc) return "Bursts hell fire strongly after patients any damage while few turns."; +#endif + power = MIN(200, (p_ptr->magic_num1[2] * 2)); + if (info) return info_damage(0, 0, power); + if (cast) + { + int a = 3 - (p_ptr->pspeed - 100) / 10; + int r = 3 + randint1(3) + MAX(0, MIN(3, a)); + + if (p_ptr->magic_num2[2] > 0) + { +#ifdef JP + msg_print("¤¹¤Ç¤Ë²æËý¤ò¤·¤Æ¤¤¤ë¡£"); +#else + msg_print("You are already patienting."); +#endif + return NULL; + } + + p_ptr->magic_num2[1] = 1; + p_ptr->magic_num2[2] = r; + p_ptr->magic_num1[2] = 0; +#ifdef JP + msg_print("¤¸¤Ã¤ÈÂѤ¨¤ë¤³¤È¤Ë¤·¤¿¡£"); +#else + msg_print("You decide to patient all damages."); +#endif + add = FALSE; + } + if (cont) + { + int rad = 2 + (power / 50); + + p_ptr->magic_num2[2]--; + + if ((p_ptr->magic_num2[2] <= 0) || (power >= 200)) + { +#ifdef JP + msg_print("²æËý¤¬²ò¤«¤ì¤¿¡ª"); +#else + msg_print("Time for end of patioence!"); +#endif + if (power) + { + project(0, rad, py, px, power, GF_HELL_FIRE, + (PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL), -1); + } + if (p_ptr->wizard) + { +#ifdef JP + msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power); +#else + msg_format("You return %d damages.", power); #endif + } + + /* Reset */ + p_ptr->magic_num2[1] = 0; + p_ptr->magic_num2[2] = 0; + p_ptr->magic_num1[2] = 0; } } break; + + /*** 2nd book (8-15) ***/ + case 8: +#ifdef JP + if (name) return "ɹ¤Î³»"; + if (desc) return "ɹ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢ËɸæÎϤ¬¾å¾º¤¹¤ë¡£"; +#else + if (name) return "Ice armor"; + if (desc) return "Gives fire aura and bonus to AC."; +#endif + if (cast) + { +#ifdef JP + msg_print("ÂΤ¬É¹¤Î³»¤Çʤ¤ï¤ì¤¿¡£"); +#else + msg_print("You have enveloped by ice armor!"); +#endif + } + if (stop) + { +#ifdef JP + msg_print("ɹ¤Î³»¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_print("Ice armor disappeared."); +#endif + } + break; + + case 9: +#ifdef JP + if (name) return "½Å½ý¤Î¼£Ìþ"; + if (desc) return "ÂÎÎϤä½ý¤ò¿¾¯²óÉü¤µ¤»¤ë¡£"; +#else + if (name) return "Cure serious wounds"; + if (desc) return "Heals cut and HP more."; +#endif + if (info) return info_heal(2, 10, 0); + if (cast) + { +#ifdef JP + msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£"); +#else + msg_print("You feel better and better."); +#endif + } + if (cast || cont) + { + hp_player(damroll(2, 10)); + set_cut((p_ptr->cut / 2) - 10); + } + break; + + case 10: +#ifdef JP + if (name) return "ÌôÉʵÛÆþ"; + if (desc) return "¼öʸ±Ó¾§¤òÃæ»ß¤¹¤ë¤³¤È¤Ê¤¯¡¢Ìô¤Î¸ú²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£"; +#else + if (name) return "Inhail potion"; + if (desc) return "Quaffs a potion without canceling of casting a spell."; +#endif + if (cast) + { + p_ptr->magic_num1[0] |= (1L << HEX_INHAIL); + do_cmd_quaff_potion(); + p_ptr->magic_num1[0] &= ~(1L << HEX_INHAIL); + add = FALSE; + } + break; + + case 11: +#ifdef JP + if (name) return "µÛ·ì̸"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÈù¼åÎ̤ÎÀ¸Ì¿Îϵۼý¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£Í¿¤¨¤¿¥À¥á¡¼¥¸¤Îʬ¡¢ÂÎÎϤ¬²óÉü¤¹¤ë¡£"; +#else + if (name) return "Vampiric mist"; + if (desc) return "Deals few dameges of drain life to all monsters in your sight."; +#endif + power = (plev / 2) + 5; + if (info) return info_damage(1, power, 0); + if (cast || cont) + { + project_hack(GF_OLD_DRAIN, randint1(power)); + } + break; + + case 12: +#ifdef JP + if (name) return "Ëâ·õ²½"; + if (desc) return "Éð´ï¤Î¹¶·âÎϤò¾å¤²¤ë¡£ÀÚ¤ìÌ£¤òÆÀ¡¢¼ö¤¤¤Ë±þ¤¸¤ÆÍ¿¤¨¤ë¥À¥á¡¼¥¸¤¬¾å¾º¤·¡¢Á±Îɤʥâ¥ó¥¹¥¿¡¼¤ËÂФ¹¤ë¥À¥á¡¼¥¸¤¬2Çܤˤʤ롣"; +#else + if (name) return "Swords to runeswords"; + if (desc) return "Gives vorpal ability to your weapon. Increases damages by your weapon acccording to curse of your weapon."; +#endif + if (cast) + { +#ifdef JP + msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬¹õ¤¯µ±¤¤¤¿¡£"); +#else + if (!empty_hands(FALSE)) + msg_print("Your weapons glow bright black."); + else + msg_print("Your weapon glows bright black."); +#endif + } + if (stop) + { +#ifdef JP + msg_print("Éð´ï¤Îµ±¤­¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_format("Brightness of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s"); +#endif + } + break; + + case 13: +#ifdef JP + if (name) return "º®Íð¤Î¼ê"; + if (desc) return "¹¶·â¤·¤¿ºÝ¥â¥ó¥¹¥¿¡¼¤òº®Í𤵤»¤ë¡£"; +#else + if (name) return "Touch of confusion"; + if (desc) return "Confuses a monster when you attack."; +#endif + if (cast) + { +#ifdef JP + msg_print("¤¢¤Ê¤¿¤Î¼ê¤¬ÀÖ¤¯µ±¤­»Ï¤á¤¿¡£"); +#else + msg_print("Your hands glow bright red."); +#endif + } + if (stop) + { +#ifdef JP + msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£"); +#else + msg_print("Brightness on your hands disappeard."); +#endif + } + break; + + case 14: +#ifdef JP + if (name) return "ÆùÂζ¯²½"; + if (desc) return "½Ñ¼Ô¤ÎÏÓÎÏ¡¢´ïÍѤµ¡¢Âѵ×ÎϤò¾å¾º¤µ¤»¤ë¡£¹¶·â²ó¿ô¤Î¾å¸Â¤ò 1 Áý²Ã¤µ¤»¤ë¡£"; +#else + if (name) return "Building up"; + if (desc) return "Attempts to increases your strength, dexterity and constitusion."; +#endif + if (cast) + { +#ifdef JP + msg_print("¿ÈÂΤ¬¶¯¤¯¤Ê¤Ã¤¿µ¤¤¬¤·¤¿¡£"); +#else + msg_print("You feel your body is developed more now."); +#endif + } + break; + + case 15: +#ifdef JP + if (name) return "È¿¥Æ¥ì¥Ý¡¼¥È·ë³¦"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤Î¥Æ¥ì¥Ý¡¼¥È¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£"; +#else + if (name) return "Anti teleport barrier"; + if (desc) return "Obstructs all teleportations by monsters in your sight."; +#endif + power = plev * 3 / 2; + if (info) return info_power(power); + if (cast) + { +#ifdef JP + msg_print("¥Æ¥ì¥Ý¡¼¥È¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£"); +#else + msg_print("You feel anyone can not teleport except you."); +#endif + } + break; + + /*** 3rd book (16-23) ***/ + case 16: +#ifdef JP + if (name) return "¾×·â¤Î¥¯¥í¡¼¥¯"; + if (desc) return "Åŵ¤¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Æ°¤­¤¬Â®¤¯¤Ê¤ë¡£"; +#else + if (name) return "Cloak of shock"; + if (desc) return "Gives lightning aura and a bonus to speed."; +#endif + if (cast) + { +#ifdef JP + msg_print("ÂΤ¬°ðºÊ¤Î¥ª¡¼¥é¤Çʤ¤ï¤ì¤¿¡£"); +#else + msg_print("You have enveloped by electrical aura!"); +#endif + } + if (stop) + { +#ifdef JP + msg_print("°ðºÊ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_print("Electrical aura disappeared."); +#endif + } + break; + + case 17: +#ifdef JP + if (name) return "Ã×Ì¿½ý¤Î¼£Ìþ"; + if (desc) return "ÂÎÎϤä½ý¤ò²óÉü¤µ¤»¤ë¡£"; +#else + if (name) return "Cure critical wounds"; + if (desc) return "Heals cut and HP greatry."; +#endif + if (info) return info_heal(4, 10, 0); + if (cast) + { +#ifdef JP + msg_print("µ¤Ê¬¤¬Îɤ¯¤Ê¤Ã¤Æ¤¯¤ë¡£"); +#else + msg_print("You feel better and better."); +#endif + } + if (cast || cont) + { + hp_player(damroll(4, 10)); + set_stun(0); + set_cut(0); + set_poisoned(0); + } + break; + + case 18: +#ifdef JP + if (name) return "¼öÎÏÉõÆþ"; + if (desc) return "ËâË¡¤ÎÆ»¶ñ¤ËËâÎϤòºÆ½¼Å¶¤¹¤ë¡£"; +#else + if (name) return "Recharging"; + if (desc) return "Recharges a magic device."; +#endif + power = plev * 2; + if (info) return info_power(power); + if (cast) + { + if (!recharge(power)) return NULL; + add = FALSE; + } + break; + + case 19: +#ifdef JP + if (name) return "»à¼ÔÉü³è"; + if (desc) return "»àÂΤòÁɤ餻¤Æ¥Ú¥Ã¥È¤Ë¤¹¤ë¡£"; +#else + if (name) return "Animate Dead"; + if (desc) return "Raises corpses and skeletons from dead."; +#endif + if (cast) + { +#ifdef JP + msg_print("»à¼Ô¤Ø¤Î¸Æ¤Ó¤«¤±¤ò»Ï¤á¤¿¡£"); +#else + msg_print("You start to call deads.!"); +#endif + } + if (cast || cont) + { + animate_dead(0, py, px); + } + break; + + case 20: +#ifdef JP + if (name) return "Ëɶñ¼öÇû"; + if (desc) return "ÁõÈ÷¤·¤Æ¤¤¤ëËɶñ¤Ë¼ö¤¤¤ò¤«¤±¤ë¡£"; +#else + if (name) return "Curse armor"; + if (desc) return "Curse a piece of armour that you wielding."; +#endif + if (cast) + { + int item; + char *q, *s; + char o_name[MAX_NLEN]; + object_type *o_ptr; + u32b f[TR_FLAG_SIZE]; + + item_tester_hook = object_is_armour; +#ifdef JP + q = "¤É¤ì¤ò¼ö¤¤¤Þ¤¹¤«¡©"; + s = "Ëɶñ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£"; +#else + q = "Which piece of armour do you curse?"; + s = "You wield no piece of armours."; +#endif + + if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE; + + o_ptr = &inventory[item]; + object_desc(o_name, o_ptr, OD_NAME_ONLY); + object_flags(o_ptr, f); + +#ifdef JP + if (!get_check(format("ËÜÅö¤Ë %s ¤ò¼ö¤¤¤Þ¤¹¤«¡©", o_name))) return FALSE; +#else + if (!get_check(format("Do you curse %s, really¡©", o_name))) return FALSE; +#endif + + if (!one_in_(3) && + (object_is_artifact(o_ptr) || have_flag(f, TR_BLESSED))) + { +#ifdef JP + msg_format("%s ¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡£", o_name); +#else + msg_format("%s resists the effect.", o_name); +#endif + if (one_in_(3)) + { + if (o_ptr->to_d > 0) + { + o_ptr->to_d -= randint1(3) % 2; + if (o_ptr->to_d < 0) o_ptr->to_d = 0; + } + if (o_ptr->to_h > 0) + { + o_ptr->to_h -= randint1(3) % 2; + if (o_ptr->to_h < 0) o_ptr->to_h = 0; + } + if (o_ptr->to_a > 0) + { + o_ptr->to_a -= randint1(3) % 2; + if (o_ptr->to_a < 0) o_ptr->to_a = 0; + } +#ifdef JP + msg_format("%s ¤ÏÎô²½¤·¤Æ¤·¤Þ¤Ã¤¿¡£", o_name); +#else + msg_format("Your %s was disenchanted!", o_name); +#endif + } + } + else + { + int power = 0; +#ifdef JP + msg_format("¶²ÉݤΰŹõ¥ª¡¼¥é¤¬¤¢¤Ê¤¿¤Î%s¤òÊñ¤ß¹þ¤ó¤À¡ª", o_name); +#else + msg_format("A terrible black aura blasts your %s!", o_name); +#endif + o_ptr->curse_flags |= (TRC_CURSED); + + if (object_is_artifact(o_ptr) || object_is_ego(o_ptr)) + { + + if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE); + if (one_in_(666)) + { + o_ptr->curse_flags |= (TRC_TY_CURSE); + if (one_in_(666)) o_ptr->curse_flags |= (TRC_PERMA_CURSE); + + add_flag(o_ptr->art_flags, TR_AGGRAVATE); + add_flag(o_ptr->art_flags, TR_RES_POIS); + add_flag(o_ptr->art_flags, TR_RES_DARK); + add_flag(o_ptr->art_flags, TR_RES_NETHER); +#ifdef JP + msg_print("·ì¤À¡ª·ì¤À¡ª·ì¤À¡ª"); +#else + msg_print("Blood, Blood, Blood!"); +#endif + power = 2; + } + } + + o_ptr->curse_flags |= get_curse(power, o_ptr); + } + + p_ptr->update |= (PU_BONUS); + add = FALSE; + } + break; + + case 21: +#ifdef JP + if (name) return "±Æ¤Î¥¯¥í¡¼¥¯"; + if (desc) return "±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤¤¡¢Å¨¤Ë±Æ¤Î¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¡£"; +#else + if (name) return "Cloak of shadow"; + if (desc) return "Gives aura of shadow."; +#endif + if (cast) + { + object_type *o_ptr = &inventory[INVEN_OUTER]; + + if (!o_ptr->k_idx) + { +#ifdef JP + msg_print("¥¯¥í¡¼¥¯¤ò¿È¤Ë¤Ä¤±¤Æ¤¤¤Ê¤¤¡ª"); +#else + msg_print("You don't ware any cloak."); +#endif + return NULL; + } + else if (!object_is_cursed(o_ptr)) + { +#ifdef JP + msg_print("¥¯¥í¡¼¥¯¤Ï¼ö¤ï¤ì¤Æ¤¤¤Ê¤¤¡ª"); +#else + msg_print("Your cloak is not cursed."); +#endif + return NULL; + } + else + { +#ifdef JP + msg_print("±Æ¤Î¥ª¡¼¥é¤ò¿È¤Ë¤Þ¤È¤Ã¤¿¡£"); +#else + msg_print("You have enveloped by shadow aura!"); +#endif + } + } + if (cont) + { + object_type *o_ptr = &inventory[INVEN_OUTER]; + + if ((!o_ptr->k_idx) || (!object_is_cursed(o_ptr))) + { + do_spell(REALM_HEX, spell, SPELL_STOP); + p_ptr->magic_num1[0] &= ~(1L << spell); + p_ptr->magic_num2[0]--; + if (!p_ptr->magic_num2[0]) set_action(ACTION_NONE); + } + } + if (stop) + { +#ifdef JP + msg_print("±Æ¤Î¥ª¡¼¥é¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_print("Shadow aura disappeared."); +#endif + } + break; + + case 22: +#ifdef JP + if (name) return "¶ìÄˤòËâÎϤË"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ËÀº¿À¥À¥á¡¼¥¸Í¿¤¨¡¢ËâÎϤòµÛ¤¤¼è¤ë¡£"; +#else + if (name) return "Pains to mana"; + if (desc) return "Deals psychic damages to all monsters in sight, and drains some mana."; +#endif + power = plev * 3 / 2; + if (info) return info_damage(1, power, 0); + if (cast || cont) + { + project_hack(GF_PSI_DRAIN, randint1(power)); + } + break; + + case 23: +#ifdef JP + if (name) return "ÌܤˤÏÌܤò"; + if (desc) return "ÂÇ·â¤äËâË¡¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤ò¡¢¹¶·â¸µ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤âÍ¿¤¨¤ë¡£"; +#else + if (name) return "Eye for an eye"; + if (desc) return "Returns same damage which you got to the monster which damaged you."; +#endif + if (cast) + { +#ifdef JP + msg_print("Éü½²¤·¤¿¤¤Íß˾¤Ë¤«¤é¤ì¤¿¡£"); +#else + msg_print("You wish strongly you want to revenge anything."); +#endif + } + break; + + /*** 4th book (24-31) ***/ + case 24: +#ifdef JP + if (name) return "È¿Áý¿£·ë³¦"; + if (desc) return "¤½¤Î³¬¤ÎÁý¿£¤¹¤ë¥â¥ó¥¹¥¿¡¼¤ÎÁý¿£¤òÁ˻ߤ¹¤ë¡£"; +#else + if (name) return "Anti multiply barrier"; + if (desc) return "Obstructs all multiplying by monsters in entire floor."; +#endif + if (cast) + { +#ifdef JP + msg_print("Áý¿£¤òÁ˻ߤ¹¤ë¼ö¤¤¤ò¤«¤±¤¿¡£"); +#else + msg_print("You feel anyone can not already multiply."); +#endif + } + break; + + case 25: +#ifdef JP + if (name) return "À¸Ì¿ÎÏÉü³è"; + if (desc) return "·Ð¸³Ãͤò½ù¡¹¤ËÉü³è¤·¡¢¸º¾¯¤·¤¿Ç½ÎÏÃͤò²óÉü¤µ¤»¤ë¡£"; +#else + if (name) return "Restore life"; + if (desc) return "Restores life energy and status."; +#endif + if (cast) + { +#ifdef JP + msg_print("À¸Ì¿ÎϤ¬Ìá¤ê»Ï¤á¤¿¡£"); +#else + msg_print("You feel your life energy starting to return."); +#endif + } + if (cast || cont) + { + bool flag = FALSE; + int d = (p_ptr->max_exp - p_ptr->exp); + int r = (p_ptr->exp / 20); + int i; + + if (d > 0) + { + if (d < r) + p_ptr->exp = p_ptr->max_exp; + else + p_ptr->exp += r; + + /* Check the experience */ + check_experience(); + + flag = TRUE; + } + for (i = A_STR; i < 6; i ++) + { + if (p_ptr->stat_cur[i] < p_ptr->stat_max[i]) + { + if (p_ptr->stat_cur[i] < 18) + p_ptr->stat_cur[i]++; + else + p_ptr->stat_cur[i] += 10; + + if (p_ptr->stat_cur[i] > p_ptr->stat_max[i]) + p_ptr->stat_cur[i] = p_ptr->stat_max[i]; + + /* Recalculate bonuses */ + p_ptr->update |= (PU_BONUS); + + flag = TRUE; + } + } + + if (!flag) + { +#ifdef JP + msg_format("%s¤Î¼öʸ¤Î±Ó¾§¤ò¤ä¤á¤¿¡£", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME)); +#else + msg_format("Finish casting '%^s'.", do_spell(REALM_HEX, HEX_RESTORE, SPELL_NAME)); +#endif + p_ptr->magic_num1[0] &= ~(1L << HEX_RESTORE); + if (cont) p_ptr->magic_num2[0]--; + if (p_ptr->magic_num2) p_ptr->action = ACTION_NONE; + + /* Redraw status */ + p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); + p_ptr->redraw |= (PR_EXTRA); + + return ""; + } + } + break; + + case 26: +#ifdef JP + if (name) return "¼öÎϵۼý"; + if (desc) return "¼ö¤ï¤ì¤¿Éð´ï¤Î¼ö¤¤¤òµÛ¼ý¤·¤ÆËâÎϤò²óÉü¤¹¤ë¡£"; +#else + if (name) return "Drain curse power"; + if (desc) return "Drains curse on your weapon and heals SP a little."; +#endif + if (cast) + { + int item; + char *s, *q; + u32b f[TR_FLAG_SIZE]; + object_type *o_ptr; + + item_tester_hook = item_tester_hook_cursed; +#ifdef JP + q = "¤É¤ÎÁõÈ÷Éʤ«¤éµÛ¼ý¤·¤Þ¤¹¤«¡©"; + s = "¼ö¤ï¤ì¤¿¥¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡£"; +#else + q = "Which cursed equipment do you drain mana from?"; + s = "You have no cursed equipment."; +#endif + + if (!get_item(&item, q, s, (USE_EQUIP))) return FALSE; + + o_ptr = &inventory[item]; + object_flags(o_ptr, f); + + p_ptr->csp += (p_ptr->lev / 5) + randint1(p_ptr->lev / 5); + if (have_flag(f, TR_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE)) p_ptr->csp += randint1(5); + if (p_ptr->csp > p_ptr->msp) p_ptr->csp = p_ptr->msp; + + if (o_ptr->curse_flags & TRC_PERMA_CURSE) + { + /* Nothing */ + } + else if (o_ptr->curse_flags & TRC_HEAVY_CURSE) + { + if (one_in_(7)) + { +#ifdef JP + msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£"); +#else + msg_print("Heavy curse vanished away."); +#endif + o_ptr->curse_flags = 0L; + } + } + else if ((o_ptr->curse_flags & (TRC_CURSED)) && one_in_(3)) + { +#ifdef JP + msg_print("¼ö¤¤¤òÁ´¤ÆµÛ¤¤¼è¤Ã¤¿¡£"); +#else + msg_print("Curse vanished away."); +#endif + o_ptr->curse_flags = 0L; + } + + add = FALSE; + } + break; + + case 27: +#ifdef JP + if (name) return "µÛ·ì¤Î¿Ï"; + if (desc) return "µÛ·ì°À­¤Ç¹¶·â¤¹¤ë¡£"; +#else + if (name) return "Swords to vampires"; + if (desc) return "Gives vampiric ability to your weapon."; +#endif + if (cast) + { +#ifdef JP + msg_print("¤¢¤Ê¤¿¤ÎÉð´ï¤¬·ì¤òÍߤ·¤Æ¤¤¤ë¡£"); +#else + if (!empty_hands(FALSE)) + msg_print("Your weapons want more blood now."); + else + msg_print("Your weapon wants more blood now."); +#endif + } + if (stop) + { +#ifdef JP + msg_print("Éð´ï¤Î³é˾¤¬¾Ã¤¨µî¤Ã¤¿¡£"); +#else + msg_format("Thirsty of weapon%s disappeared.", (empty_hands(FALSE)) ? "" : "s"); +#endif + } + break; + + case 28: +#ifdef JP + if (name) return "Û¯Û°¤Î¸ÀÍÕ"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤òÛ¯Û°¤È¤µ¤»¤ë¡£"; +#else + if (name) return "Word of stun"; + if (desc) return "Stuns all monsters in your sight."; +#endif + power = plev * 4; + if (info) return info_power(power); + if (cast || cont) + { + stun_monsters(power); + } + break; + + case 29: +#ifdef JP + if (name) return "±Æ°ÜÆ°"; + if (desc) return "¥â¥ó¥¹¥¿¡¼¤ÎÎ٤Υޥ¹¤Ë½Ö´Ö°ÜÆ°¤¹¤ë¡£"; +#else + if (name) return "Moving into shadow"; + if (desc) return "Teleports you close to a monster."; +#endif + if (cast) + { + int i, y, x, dir; + bool flag; + + for (i = 0; i < 3; i++) + { + if (!tgt_pt(&x, &y)) return FALSE; + + flag = FALSE; + + for (dir = 0; dir < 8; dir++) + { + int dy = y + ddy_ddd[dir]; + int dx = x + ddx_ddd[dir]; + if (dir == 5) continue; + if(cave[dy][dx].m_idx) flag = TRUE; + } + + if (!cave_empty_bold(y, x) || (cave[y][x].info & CAVE_ICKY) || + (distance(y, x, py, px) > plev + 2)) + { +#ifdef JP + msg_print("¤½¤³¤Ë¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¡£"); +#else + msg_print("Can not teleport to there."); +#endif + continue; + } + break; + } + + if (flag && randint0(plev * plev / 2)) + { + teleport_player_to(y, x, 0L); + } + else + { +#ifdef JP + msg_print("¤ª¤Ã¤È¡ª"); +#else + msg_print("Oops!"); +#endif + teleport_player(30, 0L); + } + + add = FALSE; + } + break; + + case 30: +#ifdef JP + if (name) return "È¿ËâË¡·ë³¦"; + if (desc) return "»ë³¦Æâ¤Î¥â¥ó¥¹¥¿¡¼¤ÎËâË¡¤òÁ˳²¤¹¤ë¥Ð¥ê¥¢¤òÄ¥¤ë¡£"; +#else + if (name) return "Anti magic barrier"; + if (desc) return "Obstructs all magic spell of monsters in your sight."; +#endif + power = plev * 3 / 2; + if (info) return info_power(power); + if (cast) + { +#ifdef JP + msg_print("ËâË¡¤òËɤ°¼ö¤¤¤ò¤«¤±¤¿¡£"); +#else + msg_print("You feel anyone can not cast spells except you."); +#endif + } + break; + + case 31: +#ifdef JP + if (name) return "Éü½²¤ÎÀë¹ð"; + if (desc) return "¿ô¥¿¡¼¥ó¸å¤Ë¤½¤ì¤Þ¤Ç¼õ¤±¤¿¥À¥á¡¼¥¸¤Ë±þ¤¸¤¿°ÒÎϤÎÃϹö¤Î¹å²Ð¤ÎÃƤòÊü¤Ä¡£"; +#else + if (name) return "Revenge sentence"; + if (desc) return "Fires a ball of hell fire to try revenging after few turns."; +#endif + power = p_ptr->magic_num1[2]; + if (info) return info_damage(0, 0, power); + if (cast) + { + int r; + int a = 3 - (p_ptr->pspeed - 100) / 10; + r = 1 + randint1(2) + MAX(0, MIN(3, a)); + + if (p_ptr->magic_num2[2] > 0) + { +#ifdef JP + msg_print("¤¹¤Ç¤ËÉü½²¤ÏÀë¹ðºÑ¤ß¤À¡£"); +#else + msg_print("You already pronounced your revenge."); +#endif + return NULL; + } + + p_ptr->magic_num2[1] = 2; + p_ptr->magic_num2[2] = r; +#ifdef JP + msg_format("¤¢¤Ê¤¿¤ÏÉü½²¤òÀë¹ð¤·¤¿¡£¤¢¤È %d ¥¿¡¼¥ó¡£", r); +#else + msg_format("You pronounce your revenge. %d turns left.", r); +#endif + add = FALSE; + } + if (cont) + { + p_ptr->magic_num2[2]--; + + if (p_ptr->magic_num2[2] <= 0) + { + int dir; + + if (power) + { + command_dir = 0; + + do + { +#ifdef JP + msg_print("Éü½²¤Î»þ¤À¡ª"); +#else + msg_print("Time to revenge!"); +#endif + } + while (!get_aim_dir(&dir)); + + fire_ball(GF_HELL_FIRE, dir, power, 1); + + if (p_ptr->wizard) + { +#ifdef JP + msg_format("%dÅÀ¤Î¥À¥á¡¼¥¸¤òÊÖ¤·¤¿¡£", power); +#else + msg_format("You return %d damages.", power); +#endif + } + } + else + { +#ifdef JP + msg_print("Éü½²¤¹¤ëµ¤¤¬¼º¤»¤¿¡£"); +#else + msg_print("You are not a mood to revenge."); +#endif + } + p_ptr->magic_num1[2] = 0; + } + } + break; + } + + /* start casting */ + if ((cast) && (add)) + { + /* add spell */ + p_ptr->magic_num1[0] |= 1L << (spell); + p_ptr->magic_num2[0]++; + + if (p_ptr->action != ACTION_SPELL) set_action(ACTION_SPELL); + } + + /* Redraw status */ + if (!info) + { + p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); + p_ptr->redraw |= (PR_EXTRA | PR_HP | PR_MANA); } return ""; @@ -11414,6 +12626,7 @@ cptr do_spell(int realm, int spell, int mode) case REALM_CRUSADE: return do_crusade_spell(spell, mode); case REALM_MUSIC: return do_music_spell(spell, mode); case REALM_HISSATSU: return do_hissatsu_spell(spell, mode); + case REALM_HEX: return do_hex_spell(spell, mode); } return NULL;