X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells2.c;h=2d46fd58f52df2cac619ed7547c0014a1f317a55;hb=809f285c4a153afcad25d9462cd24f996ed54e6b;hp=894087c6d5c073098ec8b55bfe4ea0eaa7a4db81;hpb=00c6d24679113c3f334800c4e6be70670d781187;p=hengband%2Fhengband.git diff --git a/src/spells2.c b/src/spells2.c index 894087c6d..2d46fd58f 100644 --- a/src/spells2.c +++ b/src/spells2.c @@ -13,1807 +13,9 @@ #include "angband.h" #include "grid.h" - -/*! - * @brief èªå·±åæå¦ç(Nethackããã®ã¢ã¤ãã¢) / self-knowledge... idea from nethack. - * @return ãªã - * @details - *
- * Useful for determining powers and - * resistences of items. It saves the screen, clears it, then starts listing - * attributes, a screenful at a time. (There are a LOT of attributes to - * list. It will probably take 2 or 3 screens for a powerful character whose - * using several artifacts...) -CFT - * - * It is now a lot more efficient. -BEN- - * - * See also "identify_fully()". - * - * XXX XXX XXX Use the "show_file()" method, perhaps. - *- */ -void self_knowledge(void) -{ - int i = 0, j, k; - - int v_nr = 0; - char v_string [8] [128]; - char s_string [6] [128]; - - u32b flgs[TR_FLAG_SIZE]; - - object_type *o_ptr; - - char Dummy[80]; - char buf[2][80]; - - cptr info[220]; - - int plev = p_ptr->lev; - - int percent; - - for (j = 0; j < TR_FLAG_SIZE; j++) - flgs[j] = 0L; - - p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE); - - strcpy(Dummy, ""); - - percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) / - (2 * p_ptr->hitdie + - ((PY_MAX_LEVEL - 1+3) * (p_ptr->hitdie + 1)))); - - sprintf(Dummy, _("ç¾å¨ã®ä½åã©ã³ã¯ : %d/100", "Your current Life Rating is %d/100."), percent); - strcpy(buf[0], Dummy); - info[i++] = buf[0]; - info[i++] = ""; - - chg_virtue(V_KNOWLEDGE, 1); - chg_virtue(V_ENLIGHTEN, 1); - - /* Acquire item flags from equipment */ - for (k = INVEN_RARM; k < INVEN_TOTAL; k++) - { - u32b tflgs[TR_FLAG_SIZE]; - - o_ptr = &inventory[k]; - - /* Skip non-objects */ - if (!o_ptr->k_idx) continue; - - /* Extract the flags */ - object_flags(o_ptr, tflgs); - - /* Extract flags */ - for (j = 0; j < TR_FLAG_SIZE; j++) - flgs[j] |= tflgs[j]; - } - - info[i++] = _("è½åã®æ大å¤", "Limits of maximum stats"); - - for (v_nr = 0; v_nr < 6; v_nr++) - { - char stat_desc[80]; - - sprintf(stat_desc, "%s 18/%d", stat_names[v_nr], p_ptr->stat_max_max[v_nr]-18); - - strcpy(s_string[v_nr], stat_desc); - - info[i++] = s_string[v_nr]; - } - info[i++] = ""; - - sprintf(Dummy, _("ç¾å¨ã®å±æ§ : %s(%ld)", "Your alighnment : %s(%ld)"), your_alignment(), (long int)p_ptr->align); - strcpy(buf[1], Dummy); - info[i++] = buf[1]; - for (v_nr = 0; v_nr < 8; v_nr++) - { - char vir_name [20]; - char vir_desc[80]; - int tester = p_ptr->virtues[v_nr]; - - strcpy(vir_name, virtue[(p_ptr->vir_types[v_nr])-1]); - - sprintf(vir_desc, _("ãã£ã¨ã%sã®æ å ±ãªãã", "Oops. No info about %s."), vir_name); - if (tester < -100) - sprintf(vir_desc, _("[%s]ã®å¯¾æ¥µ (%d)", "You are the polar opposite of %s (%d)."), - vir_name, tester); - else if (tester < -80) - sprintf(vir_desc, _("[%s]ã®å¤§æµ (%d)", "You are an arch-enemy of %s (%d)."), - vir_name, tester); - else if (tester < -60) - sprintf(vir_desc, _("[%s]ã®å¼·æµ (%d)", "You are a bitter enemy of %s (%d)."), - vir_name, tester); - else if (tester < -40) - sprintf(vir_desc, _("[%s]ã®æµ (%d)", "You are an enemy of %s (%d)."), - vir_name, tester); - else if (tester < -20) - sprintf(vir_desc, _("[%s]ã®ç½ªè (%d)", "You have sinned against %s (%d)."), - vir_name, tester); - else if (tester < 0) - sprintf(vir_desc, _("[%s]ã®è¿·éè (%d)", "You have strayed from the path of %s (%d)."), - vir_name, tester); - else if (tester == 0) - sprintf(vir_desc, _("[%s]ã®ä¸ç«è (%d)", "You are neutral to %s (%d)."), - vir_name, tester); - else if (tester < 20) - sprintf(vir_desc, _("[%s]ã®å°å¾³è (%d)", "You are somewhat virtuous in %s (%d)."), - vir_name, tester); - else if (tester < 40) - sprintf(vir_desc, _("[%s]ã®ä¸å¾³è (%d)", "You are virtuous in %s (%d)."), - vir_name, tester); - else if (tester < 60) - sprintf(vir_desc, _("[%s]ã®é«å¾³è (%d)", "You are very virtuous in %s (%d)."), - vir_name, tester); - else if (tester < 80) - sprintf(vir_desc, _("[%s]ã®è¦è (%d)", "You are a champion of %s (%d)."), - vir_name, tester); - else if (tester < 100) - sprintf(vir_desc, _("[%s]ã®å大ãªè¦è (%d)", "You are a great champion of %s (%d)."), - vir_name, tester); - else - sprintf(vir_desc, _("[%s]ã®å ·ç¾è (%d)", "You are the living embodiment of %s (%d)."), - vir_name, tester); - - strcpy(v_string[v_nr], vir_desc); - - info[i++] = v_string[v_nr]; - } - info[i++] = ""; - - /* Racial powers... */ - if (p_ptr->mimic_form) - { - switch (p_ptr->mimic_form) - { - case MIMIC_DEMON: - case MIMIC_DEMON_LORD: - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®å°çãç«çã®ãã¬ã¹ãåããã¨ãã§ããã(%d MP)", - "You can nether breathe, dam. %d (cost %d)."), 3 * plev, 10+plev/3); - - info[i++] = Dummy; - break; - case MIMIC_VAMPIRE: - if (plev > 1) - { - sprintf(Dummy, _("ããªãã¯æµãã %d-%d HP ã®çå½åãå¸åã§ããã(%d MP)", - "You can steal life from a foe, dam. %d-%d (cost %d)."), - plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3)); - info[i++] = Dummy; - } - break; - } - } - else - { - switch (p_ptr->prace) - { - case RACE_NIBELUNG: - case RACE_DWARF: - if (plev > 4) - info[i++] = _("ããªãã¯ç½ ã¨ãã¢ã¨é段ãæç¥ã§ããã(5 MP)", "You can find traps, doors and stairs (cost 5)."); - break; - case RACE_HOBBIT: - if (plev > 14) - { - info[i++] = _("ããªãã¯é£æãçæã§ããã(10 MP)", "You can produce food (cost 10)."); - } - break; - case RACE_GNOME: - if (plev > 4) - { - sprintf(Dummy, _("ããªãã¯ç¯å² %d 以å ã«ãã¬ãã¼ãã§ããã(%d MP)", "You can teleport, range %d (cost %d)."), - (1 + plev), (5 + (plev / 5))); - info[i++] = Dummy; - } - break; - case RACE_HALF_ORC: - if (plev > 2) - info[i++] = _("ããªãã¯ææãé¤å»ã§ããã(5 MP)", "You can remove fear (cost 5)."); - break; - case RACE_HALF_TROLL: - if (plev > 9) - info[i++] = _("ããªãã¯çæ´åãããã¨ãã§ããã(12 MP) ", "You enter berserk fury (cost 12)."); - break; - case RACE_AMBERITE: - if (plev > 29) - info[i++] = _("ããªãã¯ã·ã£ãã¦ã·ãããããã¨ãã§ããã(50 MP)", "You can Shift Shadows (cost 50)."); - - if (plev > 39) - info[i++] = _("ããªãã¯ããã¿ã¼ã³ããå¿ã«æãã¦æ©ããã¨ãã§ããã(75 MP)", "You can mentally Walk the Pattern (cost 75)."); - - break; - case RACE_BARBARIAN: - if (plev > 7) - info[i++] = _("ããªãã¯çæ´åãããã¨ãã§ããã(10 MP) ", "You can enter berserk fury (cost 10)."); - - break; - case RACE_HALF_OGRE: - if (plev > 24) - info[i++] = _("ããªãã¯ççºã®ã«ã¼ã³ãä»æãããã¨ãã§ããã(35 MP)", "You can set an Explosive Rune (cost 35)."); - - break; - case RACE_HALF_GIANT: - if (plev > 19) - info[i++] = _("ããªãã¯ç³ã®å£ãå£ããã¨ãã§ããã(10 MP)", "You can break stone walls (cost 10)."); - break; - case RACE_HALF_TITAN: - if (plev > 34) - info[i++] = _("ããªãã¯ã¢ã³ã¹ã¿ã¼ãã¹ãã£ã³ãããã¨ãã§ããã(20 MP)", "You can probe monsters (cost 20)."); - break; - case RACE_CYCLOPS: - if (plev > 19) - { - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®å²©ç³ãæãããã¨ãã§ããã(15 MP)", - "You can throw a boulder, dam. %d (cost 15)."), 3 * plev); - info[i++] = Dummy; - } - break; - case RACE_YEEK: - if (plev > 14) - info[i++] = _("ããªãã¯ææãå¼ã³èµ·ããå«ã³å£°ãçºãããã¨ãã§ããã(15 MP)", "You can make a terrifying scream (cost 15)."); - break; - case RACE_KLACKON: - if (plev > 8) - { - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®é ¸ãå¹ãããããã¨ãã§ããã(9 MP)", "You can spit acid, dam. %d (cost 9)."), plev); - info[i++] = Dummy; - } - break; - case RACE_KOBOLD: - if (plev > 11) - { - sprintf(Dummy, - _("ããªã㯠%d ãã¡ã¼ã¸ã®æ¯ç¢ãæãããã¨ãã§ããã(8 MP)", "You can throw a dart of poison, dam. %d (cost 8)."), plev); - info[i++] = Dummy; - } - break; - case RACE_DARK_ELF: - if (plev > 1) - { - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã¸ãã¯ã»ããµã¤ã«ã®åªæã使ããã(2 MP)", "You can cast a Magic Missile, dam %d (cost 2)."), - (3 + ((plev-1) / 5))); - info[i++] = Dummy; - } - break; - case RACE_DRACONIAN: - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã¬ã¹ãåããã¨ãã§ããã(%d MP)", "You can breathe, dam. %d (cost %d)."), 2 * plev, plev); - info[i++] = Dummy; - break; - case RACE_MIND_FLAYER: - if (plev > 14) - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ç²¾ç¥æ»æããããã¨ãã§ããã(12 MP)", "You can mind blast your enemies, dam %d (cost 12)."), plev); - info[i++] = Dummy; - break; - case RACE_IMP: - if (plev > 29) - { - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã¡ã¤ã¢ã»ãã¼ã«ã®åªæã使ããã(15 MP)", "You can cast a Fire Ball, dam. %d (cost 15)."), plev); - info[i++] = Dummy; - } - else if (plev > 8) - { - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã¡ã¤ã¢ã»ãã«ãã®åªæã使ããã(15 MP)", "You can cast a Fire Bolt, dam. %d (cost 15)."), plev); - info[i++] = Dummy; - } - break; - case RACE_GOLEM: - if (plev > 19) - info[i++] = _("ããªã㯠d20+30 ã¿ã¼ã³ã®éèãç³ã«å¤åãããããã(15 MP)", "You can turn your skin to stone, dur d20+30 (cost 15)."); - break; - case RACE_ZOMBIE: - case RACE_SKELETON: - if (plev > 29) - info[i++] = _("ããªãã¯å¤±ã£ãçµé¨å¤ãå復ãããã¨ãã§ããã(30 MP)", "You can restore lost experience (cost 30)."); - break; - case RACE_VAMPIRE: - if (plev > 1) - { - sprintf(Dummy, _("ããªãã¯æµãã %d-%d HP ã®çå½åãå¸åã§ããã(%d MP)", "You can steal life from a foe, dam. %d-%d (cost %d)."), - plev + MAX(1, plev / 10), plev + plev * MAX(1, plev / 10), 1 + (plev / 3)); - info[i++] = Dummy; - } - break; - case RACE_SPECTRE: - if (plev > 3) - { - info[i++] = _("ããªãã¯æ³£ãå«ãã§æµãææããããã¨ãã§ããã(3 MP)", "You can wail to terrify your enemies (cost 3)."); - } - break; - case RACE_SPRITE: - if (plev > 11) - { - info[i++] = _("ããªãã¯æµãç ãããéæ³ã®ç²ãæãããã¨ãã§ããã(12 MP)", "You can throw magical dust which induces sleep (cost 12)."); - } - break; - case RACE_DEMON: - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®å°çãç«çã®ãã¬ã¹ãåããã¨ãã§ããã(%d MP)", - "You can breathe nether, dam. %d (cost %d)."), 3 * plev, 10+plev/3); - - info[i++] = Dummy; - break; - case RACE_KUTAR: - if (plev > 19) - info[i++] = _("ããªã㯠d20+30 ã¿ã¼ã³ã®é横ã«ä¼¸ã³ããã¨ãã§ããã(15 MP)", "You can expand horizontally, dur d20+30 (cost 15)."); - break; - case RACE_ANDROID: - if (plev < 10) - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ã¬ã¤ã¬ã³ãæã¤ãã¨ãã§ããã(7 MP)", "You can fire a ray gun with damage %d (cost 7)."), - (plev + 1) / 2); - else if (plev < 25) - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã©ã¹ã¿ã¼ãæã¤ãã¨ãã§ããã(13 MP)", "You can fire a blaster with damage %d (cost 13)."), plev); - else if (plev < 35) - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ããºã¼ã«ãæã¤ãã¨ãã§ããã(26 MP)", "You can fire a bazooka with damage %d (cost 26)."), plev * 2); - else if (plev < 45) - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã¼ã ãã£ãã³ãæã¤ãã¨ãã§ããã(40 MP)", - "You can fire a beam cannon with damage %d (cost 40)."), plev * 2); - else - sprintf(Dummy, _("ããªã㯠%d ãã¡ã¼ã¸ã®ãã±ãããæã¤ãã¨ãã§ããã(60 MP)", - "You can fire a rocket with damage %d (cost 60)."), plev * 5); - - info[i++] = Dummy; - break; - default: - break; - } - } - - switch(p_ptr->pclass) - { - case CLASS_WARRIOR: - if (plev > 39) - { - info[i++] = _("ããªãã¯ã©ã³ãã ãªæ¹åã«å¯¾ãã¦æ°åæ»æãããã¨ãã§ããã(75 MP)", - "You can attack some random directions at a time (cost 75)."); - } - break; - case CLASS_HIGH_MAGE: - if (p_ptr->realm1 == REALM_HEX) break; - case CLASS_MAGE: - case CLASS_SORCERER: - if (plev > 24) - { - info[i++] = _("ããªãã¯ã¢ã¤ãã ã®éåãå¸åãããã¨ãã§ããã(1 MP)", - "You can absorb charges from an item (cost 1)."); - } - break; - case CLASS_PRIEST: - if (is_good_realm(p_ptr->realm1)) - { - if (plev > 34) - { - info[i++] = _("ããªãã¯æ¦å¨ãç¥ç¦ãããã¨ãã§ããã(70 MP)", "You can bless a weapon (cost 70)."); - } - } - else - { - if (plev > 41) - { - info[i++] = _("ããªãã¯å¨ãã®ãã¹ã¦ã®ã¢ã³ã¹ã¿ã¼ãæ»æãããã¨ãã§ããã(40 MP)", "You can damages all monsters in sight (cost 40)."); - } - } - break; - case CLASS_ROGUE: - if (plev > 7) - { - info[i++] = _("ããªãã¯æ»æãã¦å³åº§ã«éãããã¨ãã§ããã(12 MP)", "You can hit a monster and teleport at a time (cost 12)."); - } - break; - case CLASS_RANGER: - if (plev > 14) - { - info[i++] = _("ããªãã¯æªç©ã調æ»ãããã¨ãã§ããã(20 MP)", "You can prove monsters (cost 20)."); - } - break; - case CLASS_PALADIN: - if (is_good_realm(p_ptr->realm1)) - { - if (plev > 29) - { - info[i++] = _("ããªãã¯èãªãæ§ãæ¾ã¤ãã¨ãã§ããã(30 MP)", "You can fires a holy spear (cost 30)."); - } - } - else - { - if (plev > 29) - { - info[i++] = _("ããªãã¯çå½åãæ¸å°ãããæ§ãæ¾ã¤ãã¨ãã§ããã(30 MP)", "You can fires a spear which drains vitality (cost 30)."); - } - } - break; - case CLASS_WARRIOR_MAGE: - if (plev > 24) - { - info[i++] = _("ããªãã¯ï¼¨ï¼°ãï¼ï¼°ã«å¤æãããã¨ãã§ããã(0 MP)", "You can convert HP to SP (cost 0)."); - info[i++] = _("ããªãã¯ï¼ï¼°ãHPã«å¤æãããã¨ãã§ããã(0 MP)", "You can convert SP to HP (cost 0)."); - } - break; - case CLASS_CHAOS_WARRIOR: - if (plev > 39) - { - info[i++] = _("ããªãã¯å¨å²ã«æªç©ãæããå ãçºçããããã¨ãã§ããã(50 MP)", - "You can radiate light which confuses nearby monsters (cost 50)."); - } - break; - case CLASS_MONK: - if (plev > 24) - { - info[i++] = _("ããªãã¯æ§ãããã¨ãã§ããã(0 MP)", "You can assume a posture of special form (cost 0)."); - } - if (plev > 29) - { - info[i++] = _("ããªãã¯é常ã®2åã®æ»æãè¡ããã¨ãã§ããã(30 MP)", "You can perform double attacks in a time (cost 30)."); - } - break; - case CLASS_MINDCRAFTER: - case CLASS_FORCETRAINER: - if (plev > 14) - { - info[i++] = _("ããªãã¯ç²¾ç¥ãéä¸ãã¦ï¼ï¼°ãå復ããããã¨ãã§ããã(0 MP)", "You can concentrate to regenerate your mana (cost 0)."); - } - break; - case CLASS_TOURIST: - info[i++] = _("ããªãã¯åçãæ®å½±ãããã¨ãã§ããã(0 MP)", "You can take a photograph (cost 0)."); - if (plev > 24) - { - info[i++] = _("ããªãã¯ã¢ã¤ãã ãå®å ¨ã«éå®ãããã¨ãã§ããã(20 MP)", "You can *identify* items (cost 20)."); - } - break; - case CLASS_IMITATOR: - if (plev > 29) - { - info[i++] = _("ããªãã¯æªç©ã®ç¹æ®æ»æããã¡ã¼ã¸2åã§ã¾ãããã¨ãã§ããã(100 MP)", - "You can imitate monster's special attacks with double damage (cost 100)."); - } - break; - case CLASS_BEASTMASTER: - info[i++] = _("ããªãã¯1ä½ã®çå½ã®ããã¢ã³ã¹ã¿ã¼ãæ¯é ãããã¨ãã§ããã(ã¬ãã«/4 MP)", "You can dominate a monster (cost level/4)."); - if (plev > 29) - { - info[i++] = _("ããªãã¯è¦çå ã®çå½ã®ããã¢ã³ã¹ã¿ã¼ãæ¯é ãããã¨ãã§ããã((ã¬ãã«+20)/2 MP)", - "You can dominate living monsters in sight (cost (level+20)/4)."); - } - break; - case CLASS_MAGIC_EATER: - info[i++] = _("ããªãã¯æ/éæ³æ£/ãããã®éåãèªåã®ãã®ã«ãããã¨ãã§ããã", "You can absorb a staff, wand or rod itself."); - break; - case CLASS_RED_MAGE: - if (plev > 47) - { - info[i++] = _("ããªãã¯1ã¿ã¼ã³ã«2åéæ³ãå±ãããã¨ãã§ããã(20 MP)", "You can cast two spells in one time (cost 20)."); - } - break; - case CLASS_SAMURAI: - { - info[i++] = _("ããªãã¯ç²¾ç¥ãéä¸ãã¦æ°åããæºãããã¨ãã§ããã", "You can concentrate to regenerate your mana."); - } - if (plev > 24) - { - info[i++] = _("ããªãã¯ç¹æ®ãªåã§æ§ãããã¨ãã§ããã", "You can assume a posture of special form."); - } - break; - case CLASS_BLUE_MAGE: - info[i++] = _("ããªãã¯ç¸æã«ä½¿ãããéæ³ãå¦ã¶ãã¨ãã§ããã", "You can study spells which your enemy casts on you."); - break; - case CLASS_CAVALRY: - if (plev > 9) - { - info[i++] = _("ããªãã¯ã¢ã³ã¹ã¿ã¼ã«ä¹ã£ã¦ç¡çç¢çãããã«ãããã¨ãã§ããã", "You can ride on a hostile monster forcibly to turn it into pet."); - } - break; - case CLASS_BERSERKER: - if (plev > 9) - { - info[i++] = _("ããªãã¯è¡ã¨ãã³ã¸ã§ã³ã®éãè¡ãæ¥ãããã¨ãã§ããã", "You can travel between town and the depths."); - } - break; - case CLASS_MIRROR_MASTER: - info[i++] = _("ããªãã¯é¡ãä½ãåºããã¨ãã§ããã(2 MP)", "You can create a Mirror (cost 2)."); - info[i++] = _("ããªãã¯é¡ãå²ããã¨ãã§ããã(0 MP)", "You can break distant Mirrors (cost 0)."); - break; - case CLASS_NINJA: - if (plev > 19) - { - info[i++] = _("ããªãã¯ç´ æ©ã移åãããã¨ãã§ããã", "You can walk extremery fast."); - } - break; - } - - if (p_ptr->muta1) - { - if (p_ptr->muta1 & MUT1_SPIT_ACID) - { - info[i++] = _("ããªãã¯é ¸ãå¹ãããããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X1)", "You can spit acid (dam lvl)."); - } - if (p_ptr->muta1 & MUT1_BR_FIRE) - { - info[i++] = _("ããªãã¯çã®ãã¬ã¹ãåããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X2)", "You can breathe fire (dam lvl * 2)."); - } - if (p_ptr->muta1 & MUT1_HYPN_GAZE) - { - info[i++] = _("ããªãã®ç¨ã¿ã¯å¬ç å¹æããã¤ã", "Your gaze is hypnotic."); - } - if (p_ptr->muta1 & MUT1_TELEKINES) - { - info[i++] = _("ããªãã¯å¿µååããã£ã¦ããã", "You are telekinetic."); - } - if (p_ptr->muta1 & MUT1_VTELEPORT) - { - info[i++] = _("ããªãã¯èªåã®ææã§ãã¬ãã¼ãã§ããã", "You can teleport at will."); - } - if (p_ptr->muta1 & MUT1_MIND_BLST) - { - info[i++] = _("ããªãã¯ç²¾ç¥æ»æãè¡ããã(ãã¡ã¼ã¸ 3ï½12d3)", "You can Mind Blast your enemies (3 to 12d3 dam)."); - } - if (p_ptr->muta1 & MUT1_RADIATION) - { - info[i++] = _("ããªãã¯èªåã®ææã§å¼·ãæ¾å°ç·ãçºçãããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X2)", "You can emit hard radiation at will (dam lvl * 2)."); - } - if (p_ptr->muta1 & MUT1_VAMPIRISM) - { - info[i++] = _("ããªãã¯å¸è¡é¬¼ã®ããã«æµããçå½åãå¸åãããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X2)", - "You can drain life from a foe like a vampire (dam lvl * 2)."); - } - if (p_ptr->muta1 & MUT1_SMELL_MET) - { - info[i++] = _("ããªãã¯è¿ãã«ããè²´éå±ãããåãããã¨ãã§ããã", "You can smell nearby precious metal."); - } - if (p_ptr->muta1 & MUT1_SMELL_MON) - { - info[i++] = _("ããªãã¯è¿ãã®ã¢ã³ã¹ã¿ã¼ã®åå¨ãããåãããã¨ãã§ããã", "You can smell nearby monsters."); - } - if (p_ptr->muta1 & MUT1_BLINK) - { - info[i++] = _("ããªãã¯çãè·é¢ããã¬ãã¼ãã§ããã", "You can teleport yourself short distances."); - } - if (p_ptr->muta1 & MUT1_EAT_ROCK) - { - info[i++] = _("ããªãã¯ç¡¬ã岩ãé£ã¹ããã¨ãã§ããã", "You can consume solid rock."); - } - if (p_ptr->muta1 & MUT1_SWAP_POS) - { - info[i++] = _("ããªãã¯ä»ã®è ã¨å ´æãå ¥ãæ¿ãããã¨ãã§ããã", "You can switch locations with another being."); - } - if (p_ptr->muta1 & MUT1_SHRIEK) - { - info[i++] = _("ããªãã¯èº«ã®æ¯ããã ã¤å«ã³å£°ãçºãããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X2)", "You can emit a horrible shriek (dam 2 * lvl)."); - } - if (p_ptr->muta1 & MUT1_ILLUMINE) - { - info[i++] = _("ããªãã¯æããå ãæ¾ã¤ãã¨ãã§ããã", "You can emit bright light."); - } - if (p_ptr->muta1 & MUT1_DET_CURSE) - { - info[i++] = _("ããªãã¯éªæªãªéæ³ã®å±éºãæãã¨ããã¨ãã§ããã", "You can feel the danger of evil magic."); - } - if (p_ptr->muta1 & MUT1_BERSERK) - { - info[i++] = _("ããªãã¯èªåã®ææã§çä¹±æ¦éç¶æ ã«ãªããã¨ãã§ããã", "You can drive yourself into a berserk frenzy."); - } - if (p_ptr->muta1 & MUT1_POLYMORPH) - { - info[i++] = _("ããªãã¯èªåã®æå¿ã§å¤åã§ããã", "You can polymorph yourself at will."); - } - if (p_ptr->muta1 & MUT1_MIDAS_TCH) - { - info[i++] = _("ããªãã¯é常ã¢ã¤ãã ãéã«å¤ãããã¨ãã§ããã", "You can turn ordinary items to gold."); - } - if (p_ptr->muta1 & MUT1_GROW_MOLD) - { - info[i++] = _("ããªãã¯å¨å²ã«ããã³ãçãããã¨ãã§ããã", "You can cause mold to grow near you."); - } - if (p_ptr->muta1 & MUT1_RESIST) - { - info[i++] = _("ããªãã¯å ç´ ã®æ»æã«å¯¾ãã¦èº«ã硬ããããã¨ãã§ããã", "You can harden yourself to the ravages of the elements."); - } - if (p_ptr->muta1 & MUT1_EARTHQUAKE) - { - info[i++] = _("ããªãã¯å¨å²ã®ãã³ã¸ã§ã³ãå´©å£ããããã¨ãã§ããã", "You can bring down the dungeon around your ears."); - } - if (p_ptr->muta1 & MUT1_EAT_MAGIC) - { - info[i++] = _("ããªãã¯éæ³ã®ã¨ãã«ã®ã¼ãèªåã®ç©ã¨ãã¦ä½¿ç¨ã§ããã", "You can consume magic energy for your own use."); - } - if (p_ptr->muta1 & MUT1_WEIGH_MAG) - { - info[i++] = _("ããªãã¯èªåã«å½±é¿ãä¸ããéæ³ã®åãæãããã¨ãã§ããã", "You can feel the strength of the magics affecting you."); - } - if (p_ptr->muta1 & MUT1_STERILITY) - { - info[i++] = _("ããªãã¯éå£ççæ®ä¸è½ãèµ·ãããã¨ãã§ããã", "You can cause mass impotence."); - } - if (p_ptr->muta1 & MUT1_PANIC_HIT) - { - info[i++] = _("ããªãã¯æ»æããå¾èº«ãå®ãããéãããã¨ãã§ããã", "You can run for your life after hitting something."); - } - if (p_ptr->muta1 & MUT1_DAZZLE) - { - info[i++] = _("ããªãã¯æ··ä¹±ã¨ç²ç®ãå¼ãèµ·ããæ¾å°è½ãçºçãããã¨ãã§ããã ", "You can emit confusing, blinding radiation."); - } - if (p_ptr->muta1 & MUT1_LASER_EYE) - { - info[i++] = _("ããªãã¯ç®ããã¬ã¼ã¶ã¼å ç·ãçºãããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X2)", "Your eyes can fire laser beams (dam 2 * lvl)."); - } - if (p_ptr->muta1 & MUT1_RECALL) - { - info[i++] = _("ããªãã¯è¡ã¨ãã³ã¸ã§ã³ã®éãè¡ãæ¥ãããã¨ãã§ããã", "You can travel between town and the depths."); - } - if (p_ptr->muta1 & MUT1_BANISH) - { - info[i++] = _("ããªãã¯éªæªãªã¢ã³ã¹ã¿ã¼ãå°çã«è½ã¨ããã¨ãã§ããã", "You can send evil creatures directly to Hell."); - } - if (p_ptr->muta1 & MUT1_COLD_TOUCH) - { - info[i++] = _("ããªãã¯æµã触ã£ã¦åããããã¨ãã§ããã(ãã¡ã¼ã¸ ã¬ãã«X3)", "You can freeze things with a touch (dam 3 * lvl)."); - } - if (p_ptr->muta1 & MUT1_LAUNCHER) - { - info[i++] = _("ããªãã¯ã¢ã¤ãã ãåå¼·ãæãããã¨ãã§ããã", "You can hurl objects with great force."); - } - } - - if (p_ptr->muta2) - { - if (p_ptr->muta2 & MUT2_BERS_RAGE) - { - info[i++] = _("ããªãã¯çæ¦å£«åã®çºä½ãèµ·ããã", "You are subject to berserker fits."); - } - if (p_ptr->muta2 & MUT2_COWARDICE) - { - info[i++] = _("ããªãã¯æã èç ã«ãªãã", "You are subject to cowardice."); - } - if (p_ptr->muta2 & MUT2_RTELEPORT) - { - info[i++] = _("ããªãã¯ã©ã³ãã ã«ãã¬ãã¼ãããã", "You are teleporting randomly."); - } - if (p_ptr->muta2 & MUT2_ALCOHOL) - { - info[i++] = _("ããªãã®ä½ã¯ã¢ã«ã³ã¼ã«ãåæ³ããã", "Your body produces alcohol."); - } - if (p_ptr->muta2 & MUT2_HALLU) - { - info[i++] = _("ããªãã¯å¹»è¦ãå¼ãèµ·ããç²¾ç¥é¯ä¹±ã«ä¾µããã¦ããã", "You have a hallucinatory insanity."); - } - if (p_ptr->muta2 & MUT2_FLATULENT) - { - info[i++] = _("ããªãã¯å¶å¾¡ã§ããªãå¼·çãªå±ãããã", "You are subject to uncontrollable flatulence."); - } - if (p_ptr->muta2 & MUT2_PROD_MANA) - { - info[i++] = _("ããªãã¯å¶å¾¡ä¸è½ãªéæ³ã®ã¨ãã«ã®ã¼ãçºãã¦ããã", "You are producing magical energy uncontrollably."); - } - if (p_ptr->muta2 & MUT2_ATT_DEMON) - { - info[i++] = _("ããªãã¯ãã¼ã¢ã³ãå¼ãã¤ããã", "You attract demons."); - } - if (p_ptr->muta2 & MUT2_SCOR_TAIL) - { - info[i++] = _("ããªãã¯ãµã½ãªã®å°»å°¾ãçãã¦ããã(æ¯ããã¡ã¼ã¸ 3d7)", "You have a scorpion tail (poison, 3d7)."); - } - if (p_ptr->muta2 & MUT2_HORNS) - { - info[i++] = _("ããªãã¯è§ãçãã¦ããã(ãã¡ã¼ã¸ 2d6)", "You have horns (dam. 2d6)."); - } - if (p_ptr->muta2 & MUT2_BEAK) - { - info[i++] = _("ããªãã¯ã¯ããã·ãçãã¦ããã(ãã¡ã¼ã¸ 2d4)", "You have a beak (dam. 2d4)."); - } - if (p_ptr->muta2 & MUT2_SPEED_FLUX) - { - info[i++] = _("ããªãã¯ã©ã³ãã ã«æ©ãåãããé ãåãããããã", "You move faster or slower randomly."); - } - if (p_ptr->muta2 & MUT2_BANISH_ALL) - { - info[i++] = _("ããªãã¯æã è¿ãã®ã¢ã³ã¹ã¿ã¼ãæ¶æ» ãããã", "You sometimes cause nearby creatures to vanish."); - } - if (p_ptr->muta2 & MUT2_EAT_LIGHT) - { - info[i++] = _("ããªãã¯æã å¨å²ã®å ãå¸åãã¦æ é¤ã«ããã", "You sometimes feed off of the light around you."); - } - if (p_ptr->muta2 & MUT2_TRUNK) - { - info[i++] = _("ããªãã¯è±¡ã®ãããªé¼»ãæã£ã¦ããã(ãã¡ã¼ã¸ 1d4)", "You have an elephantine trunk (dam 1d4)."); - } - if (p_ptr->muta2 & MUT2_ATT_ANIMAL) - { - info[i++] = _("ããªãã¯åç©ãå¼ãã¤ããã", "You attract animals."); - } - if (p_ptr->muta2 & MUT2_TENTACLES) - { - info[i++] = _("ããªãã¯éªæªãªè§¦æãæã£ã¦ããã(ãã¡ã¼ã¸ 2d5)", "You have evil looking tentacles (dam 2d5)."); - } - if (p_ptr->muta2 & MUT2_RAW_CHAOS) - { - info[i++] = _("ããªãã¯ãã°ãã°ç´ã«ãªã¹ã«å ã¾ããã", "You occasionally are surrounded with raw chaos."); - } - if (p_ptr->muta2 & MUT2_NORMALITY) - { - info[i++] = _("ããªãã¯å¤ç°ãã¦ããããå復ãã¦ãã¦ããã", "You may be mutated, but you're recovering."); - } - if (p_ptr->muta2 & MUT2_WRAITH) - { - info[i++] = _("ããªãã®èä½ã¯å¹½ä½åãããå®ä½åãããããã", "You fade in and out of physical reality."); - } - if (p_ptr->muta2 & MUT2_POLY_WOUND) - { - info[i++] = _("ããªãã®å¥åº·ã¯ã«ãªã¹ã®åã«å½±é¿ãåããã", "Your health is subject to chaotic forces."); - } - if (p_ptr->muta2 & MUT2_WASTING) - { - info[i++] = _("ããªãã¯è¡°å¼±ããæãããç æ°ã«ããã£ã¦ããã", "You have a horrible wasting disease."); - } - if (p_ptr->muta2 & MUT2_ATT_DRAGON) - { - info[i++] = _("ããªãã¯ãã©ã´ã³ãå¼ãã¤ããã", "You attract dragons."); - } - if (p_ptr->muta2 & MUT2_WEIRD_MIND) - { - info[i++] = _("ããªãã®ç²¾ç¥ã¯ã©ã³ãã ã«æ¡å¤§ããã縮å°ããããã¦ããã", "Your mind randomly expands and contracts."); - } - if (p_ptr->muta2 & MUT2_NAUSEA) - { - info[i++] = _("ããªãã®èã¯é常ã«è½ã¡çãããªãã", "You have a seriously upset stomach."); - } - if (p_ptr->muta2 & MUT2_CHAOS_GIFT) - { - info[i++] = _("ããªãã¯ã«ãªã¹ã®å®è·æªéããè¤ç¾ãããã¨ãã", "Chaos deities give you gifts."); - } - if (p_ptr->muta2 & MUT2_WALK_SHAD) - { - info[i++] = _("ããªãã¯ãã°ãã°ä»ã®ãå½±ãã«è¿·ãè¾¼ãã", "You occasionally stumble into other shadows."); - } - if (p_ptr->muta2 & MUT2_WARNING) - { - info[i++] = _("ããªãã¯æµã«é¢ããè¦åãæããã", "You receive warnings about your foes."); - } - if (p_ptr->muta2 & MUT2_INVULN) - { - info[i++] = _("ããªãã¯æã è² ãç¥ãããªæ°åã«ãªãã", "You occasionally feel invincible."); - } - if (p_ptr->muta2 & MUT2_SP_TO_HP) - { - info[i++] = _("ããªãã¯æã è¡ãçèã«ã©ã£ã¨æµããã", "Your blood sometimes rushes to your muscles."); - } - if (p_ptr->muta2 & MUT2_HP_TO_SP) - { - info[i++] = _("ããªãã¯æã é ã«è¡ãã©ã£ã¨æµããã", "Your blood sometimes rushes to your head."); - } - if (p_ptr->muta2 & MUT2_DISARM) - { - info[i++] = _("ããªãã¯ããã¤ã¾ã¥ãã¦ç©ãè½ã¨ãã", "You occasionally stumble and drop things."); - } - } - - if (p_ptr->muta3) - { - if (p_ptr->muta3 & MUT3_HYPER_STR) - { - info[i++] = _("ããªãã¯è¶ 人çã«å¼·ãã(è å+4)", "You are superhumanly strong (+4 STR)."); - } - if (p_ptr->muta3 & MUT3_PUNY) - { - info[i++] = _("ããªãã¯èå¼±ã ã(è å-4)", "You are puny (-4 STR)."); - } - if (p_ptr->muta3 & MUT3_HYPER_INT) - { - info[i++] = _("ããªãã®è³ã¯çä½ã³ã³ãã¥ã¼ã¿ã ã(ç¥è½ï¼è³¢ã+4)", "Your brain is a living computer (+4 INT/WIS)."); - } - if (p_ptr->muta3 & MUT3_MORONIC) - { - info[i++] = _("ããªãã¯ç²¾ç¥èå¼±ã ã(ç¥è½ï¼è³¢ã-4)", "You are moronic (-4 INT/WIS)."); - } - if (p_ptr->muta3 & MUT3_RESILIENT) - { - info[i++] = _("ããªãã¯é常ã«ã¿ãã ã(èä¹ +4)", "You are very resilient (+4 CON)."); - } - if (p_ptr->muta3 & MUT3_XTRA_FAT) - { - info[i++] = _("ããªãã¯æ¥µç«¯ã«å¤ªã£ã¦ããã(èä¹ +2,ã¹ãã¼ã-2)", "You are extremely fat (+2 CON, -2 speed)."); - } - if (p_ptr->muta3 & MUT3_ALBINO) - { - info[i++] = _("ããªãã¯ã¢ã«ããã ã(èä¹ -4)", "You are albino (-4 CON)."); - } - if (p_ptr->muta3 & MUT3_FLESH_ROT) - { - info[i++] = _("ããªãã®èä½ã¯è æãã¦ããã(èä¹ -2,é å-1)", "Your flesh is rotting (-2 CON, -1 CHR)."); - } - if (p_ptr->muta3 & MUT3_SILLY_VOI) - { - info[i++] = _("ããªãã®å£°ã¯éæããªãã¼ãã¼å£°ã ã(é å-4)", "Your voice is a silly squeak (-4 CHR)."); - } - if (p_ptr->muta3 & MUT3_BLANK_FAC) - { - info[i++] = _("ããªãã¯ã®ã£ãºãã¼ãã ã(é å-1)", "Your face is featureless (-1 CHR)."); - } - if (p_ptr->muta3 & MUT3_ILL_NORM) - { - info[i++] = _("ããªãã¯å¹»å½±ã«è¦ããã¦ããã", "Your appearance is masked with illusion."); - } - if (p_ptr->muta3 & MUT3_XTRA_EYES) - { - info[i++] = _("ããªãã¯ä½åã«äºã¤ã®ç®ãæã£ã¦ããã(æ¢ç´¢+15)", "You have an extra pair of eyes (+15 search)."); - } - if (p_ptr->muta3 & MUT3_MAGIC_RES) - { - info[i++] = _("ããªãã¯éæ³ã¸ã®èæ§ããã£ã¦ããã", "You are resistant to magic."); - } - if (p_ptr->muta3 & MUT3_XTRA_NOIS) - { - info[i++] = _("ããªãã¯å¤ãªé³ãçºãã¦ããã(é å¯-3)", "You make a lot of strange noise (-3 stealth)."); - } - if (p_ptr->muta3 & MUT3_INFRAVIS) - { - info[i++] = _("ããªãã¯ç´ æ´ããã赤å¤ç·è¦åãæã£ã¦ããã(+3)", "You have remarkable infravision (+3)."); - } - if (p_ptr->muta3 & MUT3_XTRA_LEGS) - { - info[i++] = _("ããªãã¯ä½åã«äºæ¬ã®è¶³ãçãã¦ããã(å é+3)", "You have an extra pair of legs (+3 speed)."); - } - if (p_ptr->muta3 & MUT3_SHORT_LEG) - { - info[i++] = _("ããªãã®è¶³ã¯çãçªèµ·ã ã(å é-3)", "Your legs are short stubs (-3 speed)."); - } - if (p_ptr->muta3 & MUT3_ELEC_TOUC) - { - info[i++] = _("ããªãã®è¡ç®¡ã«ã¯é»æµãæµãã¦ããã", "Electricity is running through your veins."); - } - if (p_ptr->muta3 & MUT3_FIRE_BODY) - { - info[i++] = _("ããªãã®ä½ã¯çã«ã¤ã¤ã¾ãã¦ããã", "Your body is enveloped in flames."); - } - if (p_ptr->muta3 & MUT3_WART_SKIN) - { - info[i++] = _("ããªãã®èã¯ã¤ãã«è¢«ããã¦ããã(é å-2, AC+5)", "Your skin is covered with warts (-2 CHR, +5 AC)."); - } - if (p_ptr->muta3 & MUT3_SCALES) - { - info[i++] = _("ããªãã®èã¯é±ã«ãªã£ã¦ããã(é å-1, AC+10)", "Your skin has turned into scales (-1 CHR, +10 AC)."); - } - if (p_ptr->muta3 & MUT3_IRON_SKIN) - { - info[i++] = _("ããªãã®èã¯éã§ã§ãã¦ããã(å¨ç¨-1, AC+25)", "Your skin is made of steel (-1 DEX, +25 AC)."); - } - if (p_ptr->muta3 & MUT3_WINGS) - { - info[i++] = _("ããªãã¯ç¾½ãæã£ã¦ããã", "You have wings."); - } - if (p_ptr->muta3 & MUT3_FEARLESS) - { - /* Unnecessary */ - } - if (p_ptr->muta3 & MUT3_REGEN) - { - /* Unnecessary */ - } - if (p_ptr->muta3 & MUT3_ESP) - { - /* Unnecessary */ - } - if (p_ptr->muta3 & MUT3_LIMBER) - { - info[i++] = _("ããªãã®ä½ã¯é常ã«ããªããã ã(å¨ç¨+3)", "Your body is very limber (+3 DEX)."); - } - if (p_ptr->muta3 & MUT3_ARTHRITIS) - { - info[i++] = _("ããªãã¯ãã¤ãé¢ç¯ã«çã¿ãæãã¦ããã(å¨ç¨-3)", "Your joints ache constantly (-3 DEX)."); - } - if (p_ptr->muta3 & MUT3_VULN_ELEM) - { - info[i++] = _("ããªãã¯å ç´ ã®æ»æã«å¼±ãã", "You are susceptible to damage from the elements."); - } - if (p_ptr->muta3 & MUT3_MOTION) - { - info[i++] = _("ããªãã®åä½ã¯æ£ç¢ºã§åå¼·ãã(é å¯+1)", "Your movements are precise and forceful (+1 STL)."); - } - if (p_ptr->muta3 & MUT3_GOOD_LUCK) - { - info[i++] = _("ããªãã¯ç½ããªã¼ã©ã«ã¤ã¤ã¾ãã¦ããã", "There is a white aura surrounding you."); - } - if (p_ptr->muta3 & MUT3_BAD_LUCK) - { - info[i++] = _("ããªãã¯é»ããªã¼ã©ã«ã¤ã¤ã¾ãã¦ããã", "There is a black aura surrounding you."); - } - } - - if (p_ptr->blind) - { - info[i++] = _("ããªãã¯ç®ãè¦ããªãã", "You cannot see."); - } - if (p_ptr->confused) - { - info[i++] = _("ããªãã¯æ··ä¹±ãã¦ããã", "You are confused."); - } - if (p_ptr->afraid) - { - info[i++] = _("ããªãã¯ææã«ä¾µããã¦ããã", "You are terrified."); - } - if (p_ptr->cut) - { - info[i++] = _("ããªãã¯åºè¡ãã¦ããã", "You are bleeding."); - } - if (p_ptr->stun) - { - info[i++] = _("ããªãã¯ããããã¨ãã¦ããã", "You are stunned."); - } - if (p_ptr->poisoned) - { - info[i++] = _("ããªãã¯æ¯ã«ä¾µããã¦ããã", "You are poisoned."); - } - if (p_ptr->image) - { - info[i++] = _("ããªãã¯å¹»è¦ãè¦ã¦ããã", "You are hallucinating."); - } - if (p_ptr->cursed & TRC_TY_CURSE) - { - info[i++] = _("ããªãã¯éªæªãªæ¨å¿µã«å ã¾ãã¦ããã", "You carry an ancient foul curse."); - } - if (p_ptr->cursed & TRC_AGGRAVATE) - { - info[i++] = _("ããªãã¯ã¢ã³ã¹ã¿ã¼ãæããã¦ããã", "You aggravate monsters."); - } - if (p_ptr->cursed & TRC_DRAIN_EXP) - { - info[i++] = _("ããªãã¯çµé¨å¤ãå¸ããã¦ããã", "You are drained."); - } - if (p_ptr->cursed & TRC_SLOW_REGEN) - { - info[i++] = _("ããªãã®å復åã¯é常ã«é ãã", "You regenerate slowly."); - } - if (p_ptr->cursed & TRC_ADD_L_CURSE) - { - info[i++] = _("ããªãã®å¼±ãåªãã¯å¢ããã","Your weak curses multiply."); /* æ«å®ç -- henkma */ - } - if (p_ptr->cursed & TRC_ADD_H_CURSE) - { - info[i++] = _("ããªãã®å¼·ãåªãã¯å¢ããã","Your heavy curses multiply."); /* æ«å®ç -- henkma */ - } - if (p_ptr->cursed & TRC_CALL_ANIMAL) - { - info[i++] = _("ããªãã¯åç©ã«çããã¦ããã", "You attract animals."); - } - if (p_ptr->cursed & TRC_CALL_DEMON) - { - info[i++] = _("ããªãã¯æªéã«çããã¦ããã", "You attract demons."); - } - if (p_ptr->cursed & TRC_CALL_DRAGON) - { - info[i++] = _("ããªãã¯ãã©ã´ã³ã«çããã¦ããã", "You attract dragons."); - } - if (p_ptr->cursed & TRC_COWARDICE) - { - info[i++] = _("ããªãã¯æã èç ã«ãªãã", "You are subject to cowardice."); - } - if (p_ptr->cursed & TRC_TELEPORT) - { - info[i++] = _("ããªãã®ä½ç½®ã¯ã²ãããã«ä¸å®å®ã ã", "Your position is very uncertain."); - } - if (p_ptr->cursed & TRC_LOW_MELEE) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æ»æãå¤ããããã", "Your weapon causes you to miss blows."); - } - if (p_ptr->cursed & TRC_LOW_AC) - { - info[i++] = _("ããªãã¯æ»æãåããããã", "You are subject to be hit."); - } - if (p_ptr->cursed & TRC_LOW_MAGIC) - { - info[i++] = _("ããªãã¯éæ³ã失æããããã", "You are subject to fail spellcasting."); - } - if (p_ptr->cursed & TRC_FAST_DIGEST) - { - info[i++] = _("ããªãã¯ãããè ¹ãã¸ãã", "You have a good appetite."); - } - if (p_ptr->cursed & TRC_DRAIN_HP) - { - info[i++] = _("ããªãã¯ä½åãå¸ããã¦ããã", "You are drained."); - } - if (p_ptr->cursed & TRC_DRAIN_MANA) - { - info[i++] = _("ããªãã¯éåãå¸ããã¦ããã", "You brain is drained."); - } - if (IS_BLESSED()) - { - info[i++] = _("ããªãã¯é«æ½ããæãã¦ããã", "You feel rightous."); - } - if (IS_HERO()) - { - info[i++] = _("ããªãã¯ãã¼ãã¼æ°åã ã", "You feel heroic."); - } - if (p_ptr->shero) - { - info[i++] = _("ããªãã¯æ¦éçã ã", "You are in a battle rage."); - } - if (p_ptr->protevil) - { - info[i++] = _("ããªãã¯éªæªãªãåå¨ããå®ããã¦ããã", "You are protected from evil."); - } - if (p_ptr->shield) - { - info[i++] = _("ããªãã¯ç¥ç§ã®ã·ã¼ã«ãã§å®ããã¦ããã", "You are protected by a mystic shield."); - } - if (IS_INVULN()) - { - info[i++] = _("ããªãã¯ç¾å¨å·ã¤ããªãã", "You are temporarily invulnerable."); - } - if (p_ptr->wraith_form) - { - info[i++] = _("ããªãã¯ä¸æçã«å¹½ä½åãã¦ããã", "You are temporarily incorporeal."); - } - if (p_ptr->special_attack & ATTACK_CONFUSE) - { - info[i++] = _("ããªãã®æã¯èµ¤ãè¼ãã¦ããã", "Your hands are glowing dull red."); - } - if (p_ptr->special_attack & ATTACK_FIRE) - { - info[i++] = _("ããªãã®æã¯ç«çã«è¦ããã¦ããã", "You can strike the enemy with flame."); - } - if (p_ptr->special_attack & ATTACK_COLD) - { - info[i++] = _("ããªãã®æã¯å·æ°ã«è¦ããã¦ããã", "You can strike the enemy with cold."); - } - if (p_ptr->special_attack & ATTACK_ACID) - { - info[i++] = _("ããªãã®æã¯é ¸ã«è¦ããã¦ããã", "You can strike the enemy with acid."); - } - if (p_ptr->special_attack & ATTACK_ELEC) - { - info[i++] = _("ããªãã®æã¯é»æã«è¦ããã¦ããã", "You can strike the enemy with electoric shock."); - } - if (p_ptr->special_attack & ATTACK_POIS) - { - info[i++] = _("ããªãã®æã¯æ¯ã«è¦ããã¦ããã", "You can strike the enemy with poison."); - } - switch (p_ptr->action) - { - case ACTION_SEARCH: - info[i++] = _("ããªãã¯ã²ãããã«æ³¨ææ·±ãå¨å²ãè¦æ¸¡ãã¦ããã", "You are looking around very carefully."); - break; - } - if (p_ptr->new_spells) - { - info[i++] = _("ããªãã¯åªæãç¥ããå¦ã¶ãã¨ãã§ããã", "You can learn some spells/prayers."); - } - if (p_ptr->word_recall) - { - info[i++] = _("ããªãã¯ããã«å¸°éããã ããã", "You will soon be recalled."); - } - if (p_ptr->alter_reality) - { - info[i++] = _("ããªãã¯ããã«ãã®ä¸çãé¢ããã ããã", "You will soon be altered."); - } - if (p_ptr->see_infra) - { - info[i++] = _("ããªãã®ç³ã¯èµ¤å¤ç·ã«ææã§ããã", "Your eyes are sensitive to infrared light."); - } - if (p_ptr->see_inv) - { - info[i++] = _("ããªãã¯éæãªã¢ã³ã¹ã¿ã¼ãè¦ããã¨ãã§ããã", "You can see invisible creatures."); - } - if (p_ptr->levitation) - { - info[i++] = _("ããªãã¯é£ã¶ãã¨ãã§ããã", "You can fly."); - } - if (p_ptr->free_act) - { - info[i++] = _("ããªãã¯éº»çºç¥ããã®å¹æãæã£ã¦ããã", "You have free action."); - } - if (p_ptr->regenerate) - { - info[i++] = _("ããªãã¯ç´ æ©ãä½åãå復ããã", "You regenerate quickly."); - } - if (p_ptr->slow_digest) - { - info[i++] = _("ããªãã¯é£æ¬²ãå°ãªãã", "Your appetite is small."); - } - if (p_ptr->telepathy) - { - info[i++] = _("ããªãã¯ãã¬ãã·ã¼è½åãæã£ã¦ããã", "You have ESP."); - } - if (p_ptr->esp_animal) - { - info[i++] = _("ããªãã¯èªç¶çã®çç©ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense natural creatures."); - } - if (p_ptr->esp_undead) - { - info[i++] = _("ããªãã¯ã¢ã³ãããã®åå¨ãæããè½åãæã£ã¦ããã", "You sense undead."); - } - if (p_ptr->esp_demon) - { - info[i++] = _("ããªãã¯æªéã®åå¨ãæããè½åãæã£ã¦ããã", "You sense demons."); - } - if (p_ptr->esp_orc) - { - info[i++] = _("ããªãã¯ãªã¼ã¯ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense orcs."); - } - if (p_ptr->esp_troll) - { - info[i++] = _("ããªãã¯ããã«ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense trolls."); - } - if (p_ptr->esp_giant) - { - info[i++] = _("ããªãã¯å·¨äººã®åå¨ãæããè½åãæã£ã¦ããã", "You sense giants."); - } - if (p_ptr->esp_dragon) - { - info[i++] = _("ããªãã¯ãã©ã´ã³ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense dragons."); - } - if (p_ptr->esp_human) - { - info[i++] = _("ããªãã¯äººéã®åå¨ãæããè½åãæã£ã¦ããã", "You sense humans."); - } - if (p_ptr->esp_evil) - { - info[i++] = _("ããªãã¯éªæªãªçãç©ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense evil creatures."); - } - if (p_ptr->esp_good) - { - info[i++] = _("ããªãã¯åè¯ãªçãç©ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense good creatures."); - } - if (p_ptr->esp_nonliving) - { - info[i++] = _("ããªãã¯æ´»åããç¡çç©ä½ã®åå¨ãæããè½åãæã£ã¦ããã", "You sense non-living creatures."); - } - if (p_ptr->esp_unique) - { - info[i++] = _("ããªãã¯ç¹å¥ãªå¼·æµã®åå¨ãæããè½åãæã£ã¦ããã", "You sense unique monsters."); - } - if (p_ptr->hold_exp) - { - info[i++] = _("ããªãã¯èªå·±ã®çµé¨å¤ããã£ããã¨ç¶æããã", "You have a firm hold on your experience."); - } - if (p_ptr->reflect) - { - info[i++] = _("ããªãã¯ç¢ã®åªæãåå°ããã", "You reflect bolt spells."); - } - if (p_ptr->sh_fire) - { - info[i++] = _("ããªãã¯çã®ãªã¼ã©ã«å ã¾ãã¦ããã", "You are surrounded with a fiery aura."); - } - if (p_ptr->sh_elec) - { - info[i++] = _("ããªãã¯é»æ°ã«å ã¾ãã¦ããã", "You are surrounded with electricity."); - } - if (p_ptr->sh_cold) - { - info[i++] = _("ããªãã¯å·æ°ã®ãªã¼ã©ã«å ã¾ãã¦ããã", "You are surrounded with an aura of coldness."); - } - if (p_ptr->tim_sh_holy) - { - info[i++] = _("ããªãã¯èãªããªã¼ã©ã«å ã¾ãã¦ããã", "You are surrounded with a holy aura."); - } - if (p_ptr->tim_sh_touki) - { - info[i++] = _("ããªãã¯éæ°ã®ãªã¼ã©ã«å ã¾ãã¦ããã", "You are surrounded with a energy aura."); - } - if (p_ptr->anti_magic) - { - info[i++] = _("ããªãã¯åéæ³ã·ã¼ã«ãã«å ã¾ãã¦ããã", "You are surrounded by an anti-magic shell."); - } - if (p_ptr->anti_tele) - { - info[i++] = _("ããªãã¯ãã¬ãã¼ãã§ããªãã", "You cannot teleport."); - } - if (p_ptr->lite) - { - info[i++] = _("ããªãã®èº«ä½ã¯å ã£ã¦ããã", "You are carrying a permanent light."); - } - if (p_ptr->warning) - { - info[i++] = _("ããªãã¯è¡åã®åã«å±éºãå¯ç¥ãããã¨ãã§ããã", "You will be warned before dangerous actions."); - } - if (p_ptr->dec_mana) - { - info[i++] = _("ããªãã¯å°ãªãæ¶è²»éåã§éæ³ãå±ãããã¨ãã§ããã", "You can cast spells with fewer mana points."); - } - if (p_ptr->easy_spell) - { - info[i++] = _("ããªãã¯ä½ã失æçã§éæ³ãå±ãããã¨ãã§ããã", "Fail rate of your magic is decreased."); - } - if (p_ptr->heavy_spell) - { - info[i++] = _("ããªãã¯é«ã失æçã§éæ³ãå±ããªããã°ãããªãã", "Fail rate of your magic is increased."); - } - if (p_ptr->mighty_throw) - { - info[i++] = _("ããªãã¯å¼·ãç©ãæããã", "You can throw objects powerfully."); - } - - if (p_ptr->immune_acid) - { - info[i++] = _("ããªãã¯é ¸ã«å¯¾ããå®å ¨ãªãå ç«ãæã£ã¦ããã", "You are completely immune to acid."); - } - else if (p_ptr->resist_acid && IS_OPPOSE_ACID()) - { - info[i++] = _("ããªãã¯é ¸ã¸ã®å¼·åãªèæ§ãæã£ã¦ããã", "You resist acid exceptionally well."); - } - else if (p_ptr->resist_acid || IS_OPPOSE_ACID()) - { - info[i++] = _("ããªãã¯é ¸ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to acid."); - } - - if (p_ptr->immune_elec) - { - info[i++] = _("ããªãã¯é»æã«å¯¾ããå®å ¨ãªãå ç«ãæã£ã¦ããã", "You are completely immune to lightning."); - } - else if (p_ptr->resist_elec && IS_OPPOSE_ELEC()) - { - info[i++] = _("ããªãã¯é»æã¸ã®å¼·åãªèæ§ãæã£ã¦ããã", "You resist lightning exceptionally well."); - } - else if (p_ptr->resist_elec || IS_OPPOSE_ELEC()) - { - info[i++] = _("ããªãã¯é»æã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to lightning."); - } - - if (prace_is_(RACE_ANDROID) && !p_ptr->immune_elec) - { - info[i++] = _("ããªãã¯é»æã«å¼±ãã", "You are susceptible to damage from lightning."); - } - - if (p_ptr->immune_fire) - { - info[i++] = _("ããªãã¯ç«ã«å¯¾ããå®å ¨ãªãå ç«ãæã£ã¦ããã", "You are completely immune to fire."); - } - else if (p_ptr->resist_fire && IS_OPPOSE_FIRE()) - { - info[i++] = _("ããªãã¯ç«ã¸ã®å¼·åãªèæ§ãæã£ã¦ããã", "You resist fire exceptionally well."); - } - else if (p_ptr->resist_fire || IS_OPPOSE_FIRE()) - { - info[i++] = _("ããªãã¯ç«ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to fire."); - } - - if (prace_is_(RACE_ENT) && !p_ptr->immune_fire) - { - info[i++] = _("ããªãã¯ç«ã«å¼±ãã", "You are susceptible to damage from fire."); - } - - if (p_ptr->immune_cold) - { - info[i++] = _("ããªãã¯å·æ°ã«å¯¾ããå®å ¨ãªãå ç«ãæã£ã¦ããã", "You are completely immune to cold."); - } - else if (p_ptr->resist_cold && IS_OPPOSE_COLD()) - { - info[i++] = _("ããªãã¯å·æ°ã¸ã®å¼·åãªèæ§ãæã£ã¦ããã", "You resist cold exceptionally well."); - } - else if (p_ptr->resist_cold || IS_OPPOSE_COLD()) - { - info[i++] = _("ããªãã¯å·æ°ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to cold."); - } - - if (p_ptr->resist_pois && IS_OPPOSE_POIS()) - { - info[i++] = _("ããªãã¯æ¯ã¸ã®å¼·åãªèæ§ãæã£ã¦ããã", "You resist poison exceptionally well."); - } - else if (p_ptr->resist_pois || IS_OPPOSE_POIS()) - { - info[i++] = _("ããªãã¯æ¯ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to poison."); - } - - if (p_ptr->resist_lite) - { - info[i++] = _("ããªãã¯éå ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to bright light."); - } - - if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) - { - info[i++] = _("ããªãã¯éå ã«å¼±ãã", "You are susceptible to damage from bright light."); - } - - if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form) - { - info[i++] = _("ããªãã¯æé»ã«å¯¾ããå®å ¨ãªãå ç«ãæã£ã¦ããã", "You are completely immune to darkness."); - } - - else if (p_ptr->resist_dark) - { - info[i++] = _("ããªãã¯æé»ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to darkness."); - } - if (p_ptr->resist_conf) - { - info[i++] = _("ããªãã¯æ··ä¹±ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to confusion."); - } - if (p_ptr->resist_sound) - { - info[i++] = _("ããªãã¯é³æ³¢ã®è¡æã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to sonic attacks."); - } - if (p_ptr->resist_disen) - { - info[i++] = _("ããªãã¯å£åã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to disenchantment."); - } - if (p_ptr->resist_chaos) - { - info[i++] = _("ããªãã¯ã«ãªã¹ã®åã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to chaos."); - } - if (p_ptr->resist_shard) - { - info[i++] = _("ããªãã¯ç ´çã®æ»æã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to blasts of shards."); - } - if (p_ptr->resist_nexus) - { - info[i++] = _("ããªãã¯å ææ··ä¹±ã®æ»æã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to nexus attacks."); - } - - if (prace_is_(RACE_SPECTRE)) - { - info[i++] = _("ããªãã¯å°çã®åãå¸åã§ããã", "You can drain nether forces."); - } - else if (p_ptr->resist_neth) - { - info[i++] = _("ããªãã¯å°çã®åã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to nether forces."); - } - if (p_ptr->resist_fear) - { - info[i++] = _("ããªãã¯å ¨ãææãæããªãã", "You are completely fearless."); - } - if (p_ptr->resist_blind) - { - info[i++] = _("ããªãã®ç®ã¯ç²ç®ã¸ã®èæ§ãæã£ã¦ããã", "Your eyes are resistant to blindness."); - } - if (p_ptr->resist_time) - { - info[i++] = _("ããªãã¯æéé転ã¸ã®èæ§ãæã£ã¦ããã", "You are resistant to time."); - } - - if (p_ptr->sustain_str) - { - info[i++] = _("ããªãã®è åã¯ç¶æããã¦ããã", "Your strength is sustained."); - } - if (p_ptr->sustain_int) - { - info[i++] = _("ããªãã®ç¥è½ã¯ç¶æããã¦ããã", "Your intelligence is sustained."); - } - if (p_ptr->sustain_wis) - { - info[i++] = _("ããªãã®è³¢ãã¯ç¶æããã¦ããã", "Your wisdom is sustained."); - } - if (p_ptr->sustain_con) - { - info[i++] = _("ããªãã®èä¹ åã¯ç¶æããã¦ããã", "Your constitution is sustained."); - } - if (p_ptr->sustain_dex) - { - info[i++] = _("ããªãã®å¨ç¨ãã¯ç¶æããã¦ããã", "Your dexterity is sustained."); - } - if (p_ptr->sustain_chr) - { - info[i++] = _("ããªãã®é åã¯ç¶æããã¦ããã", "Your charisma is sustained."); - } - - if (have_flag(flgs, TR_STR)) - { - info[i++] = _("ããªãã®è åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your strength is affected by your equipment."); - } - if (have_flag(flgs, TR_INT)) - { - info[i++] = _("ããªãã®ç¥è½ã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your intelligence is affected by your equipment."); - } - if (have_flag(flgs, TR_WIS)) - { - info[i++] = _("ããªãã®è³¢ãã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your wisdom is affected by your equipment."); - } - if (have_flag(flgs, TR_DEX)) - { - info[i++] = _("ããªãã®å¨ç¨ãã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your dexterity is affected by your equipment."); - } - if (have_flag(flgs, TR_CON)) - { - info[i++] = _("ããªãã®èä¹ åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your constitution is affected by your equipment."); - } - if (have_flag(flgs, TR_CHR)) - { - info[i++] = _("ããªãã®é åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your charisma is affected by your equipment."); - } - - if (have_flag(flgs, TR_STEALTH)) - { - info[i++] = _("ããªãã®é å¯è¡åè½åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your stealth is affected by your equipment."); - } - if (have_flag(flgs, TR_SEARCH)) - { - info[i++] = _("ããªãã®æ¢ç´¢è½åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your searching ability is affected by your equipment."); - } - if (have_flag(flgs, TR_INFRA)) - { - info[i++] = _("ããªãã®èµ¤å¤ç·è¦åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your infravision is affected by your equipment."); - } - if (have_flag(flgs, TR_TUNNEL)) - { - info[i++] = _("ããªãã®æ¡æè½åã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your digging ability is affected by your equipment."); - } - if (have_flag(flgs, TR_SPEED)) - { - info[i++] = _("ããªãã®ã¹ãã¼ãã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your speed is affected by your equipment."); - } - if (have_flag(flgs, TR_BLOWS)) - { - info[i++] = _("ããªãã®æ»æé度ã¯è£ åã«ãã£ã¦å½±é¿ãåãã¦ããã", "Your attack speed is affected by your equipment."); - } - - - /* Access the current weapon */ - o_ptr = &inventory[INVEN_RARM]; - - /* Analyze the weapon */ - if (o_ptr->k_idx) - { - /* Indicate Blessing */ - if (have_flag(flgs, TR_BLESSED)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ç¥ã®ç¥ç¦ãåãã¦ããã", "Your weapon has been blessed by the gods."); - } - - if (have_flag(flgs, TR_CHAOTIC)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãã°ã«ã¹ã®å¾´ã®å±æ§ããã¤ã", "Your weapon is branded with the Sign of Logrus."); - } - - /* Hack */ - if (have_flag(flgs, TR_IMPACT)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ææã§å°éãçºçãããã¨ãã§ããã", "The impact of your weapon can cause earthquakes."); - } - - if (have_flag(flgs, TR_VORPAL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯é常ã«éãã", "Your weapon is very sharp."); - } - - if (have_flag(flgs, TR_VAMPIRIC)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµããçå½åãå¸åããã", "Your weapon drains life from your foes."); - } - - /* Special "Attack Bonuses" */ - if (have_flag(flgs, TR_BRAND_ACID)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµã溶ããã", "Your weapon melts your foes."); - } - if (have_flag(flgs, TR_BRAND_ELEC)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµãæé»ãããã", "Your weapon shocks your foes."); - } - if (have_flag(flgs, TR_BRAND_FIRE)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµãçããã", "Your weapon burns your foes."); - } - if (have_flag(flgs, TR_BRAND_COLD)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµãåãããã", "Your weapon freezes your foes."); - } - if (have_flag(flgs, TR_BRAND_POIS)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æµãæ¯ã§ä¾µãã", "Your weapon poisons your foes."); - } - - /* Special "slay" flags */ - if (have_flag(flgs, TR_KILL_ANIMAL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯åç©ã®å¤©æµã§ããã", "Your weapon is a great bane of animals."); - } - else if (have_flag(flgs, TR_SLAY_ANIMAL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯åç©ã«å¯¾ãã¦å¼·ãåãçºæ®ããã", "Your weapon strikes at animals with extra force."); - } - if (have_flag(flgs, TR_KILL_EVIL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯éªæªãªãåå¨ã®å¤©æµã§ããã", "Your weapon is a great bane of evil."); - } - else if (have_flag(flgs, TR_SLAY_EVIL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯éªæªãªãåå¨ã«å¯¾ãã¦å¼·ãåãçºæ®ããã", "Your weapon strikes at evil with extra force."); - } - if (have_flag(flgs, TR_KILL_HUMAN)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯äººéã®å¤©æµã§ããã", "Your weapon is a great bane of humans."); - } - else if (have_flag(flgs, TR_SLAY_HUMAN)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯äººéã«å¯¾ãã¦ç¹ã«å¼·ãåãçºæ®ããã", "Your weapon is especially deadly against humans."); - } - if (have_flag(flgs, TR_KILL_UNDEAD)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ã¢ã³ãããã®å¤©æµã§ããã", "Your weapon is a great bane of undead."); - } - else if (have_flag(flgs, TR_SLAY_UNDEAD)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ã¢ã³ãããã«å¯¾ãã¦ç¥èãªãåãçºæ®ããã", "Your weapon strikes at undead with holy wrath."); - } - if (have_flag(flgs, TR_KILL_DEMON)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãã¼ã¢ã³ã®å¤©æµã§ããã", "Your weapon is a great bane of demons."); - } - else if (have_flag(flgs, TR_SLAY_DEMON)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãã¼ã¢ã³ã«å¯¾ãã¦ç¥èãªãåãçºæ®ããã", "Your weapon strikes at demons with holy wrath."); - } - if (have_flag(flgs, TR_KILL_ORC)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãªã¼ã¯ã®å¤©æµã§ããã", "Your weapon is a great bane of orcs."); - } - else if (have_flag(flgs, TR_SLAY_ORC)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãªã¼ã¯ã«å¯¾ãã¦ç¹ã«å¼·ãåãçºæ®ããã", "Your weapon is especially deadly against orcs."); - } - if (have_flag(flgs, TR_KILL_TROLL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ããã«ã®å¤©æµã§ããã", "Your weapon is a great bane of trolls."); - } - else if (have_flag(flgs, TR_SLAY_TROLL)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ããã«ã«å¯¾ãã¦ç¹ã«å¼·ãåãçºæ®ããã", "Your weapon is especially deadly against trolls."); - } - if (have_flag(flgs, TR_KILL_GIANT)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ã¸ã£ã¤ã¢ã³ãã®å¤©æµã§ããã", "Your weapon is a great bane of giants."); - } - else if (have_flag(flgs, TR_SLAY_GIANT)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ã¸ã£ã¤ã¢ã³ãã«å¯¾ãã¦ç¹ã«å¼·ãåãçºæ®ããã", "Your weapon is especially deadly against giants."); - } - /* Special "kill" flags */ - if (have_flag(flgs, TR_KILL_DRAGON)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãã©ã´ã³ã®å¤©æµã§ããã", "Your weapon is a great bane of dragons."); - } - else if (have_flag(flgs, TR_SLAY_DRAGON)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯ãã©ã´ã³ã«å¯¾ãã¦ç¹ã«å¼·ãåãçºæ®ããã", "Your weapon is especially deadly against dragons."); - } - - if (have_flag(flgs, TR_FORCE_WEAPON)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯MPã使ã£ã¦æ»æããã", "Your weapon causes greate damages using your MP."); - } - if (have_flag(flgs, TR_THROW)) - { - info[i++] = _("ããªãã®æ¦å¨ã¯æããããã", "Your weapon can be thrown well."); - } - } - - - /* Save the screen */ - screen_save(); - - /* Erase the screen */ - for (k = 1; k < 24; k++) prt("", k, 13); - - /* Label the information */ - prt(_(" ããªãã®ç¶æ :", " Your Attributes:"), 1, 15); - - /* We will print on top of the map (column 13) */ - for (k = 2, j = 0; j < i; j++) - { - /* Show the info */ - prt(info[j], k++, 15); - - /* Every 20 entries (lines 2 to 21), start over */ - if ((k == 22) && (j+1 < i)) - { - prt(_("-- ç¶ã --", "-- more --"), k, 15); - inkey(); - for (; k > 2; k--) prt("", k, 15); - } - } - - /* Pause */ - prt(_("[ä½ããã¼ãæ¼ãã¨ã²ã¼ã ã«æ»ãã¾ã]", "[Press any key to continue]"), k, 13); - inkey(); - - /* Restore the screen */ - screen_load(); -} - -/*! - * @brief éæ³å¹ææéã®ã¿ã¼ã³æ°ã«åºã¥ãã¦è¡¨ç¾IDãè¿ãã - * @param dur å¹æã¿ã¼ã³æ° - * @return å¹ææéã®è¡¨ç¾ID - */ -static int report_magics_aux(int dur) -{ - if (dur <= 5) - { - return 0; - } - else if (dur <= 10) - { - return 1; - } - else if (dur <= 20) - { - return 2; - } - else if (dur <= 50) - { - return 3; - } - else if (dur <= 100) - { - return 4; - } - else if (dur <= 200) - { - return 5; - } - else - { - return 6; - } -} - -static cptr report_magic_durations[] = -{ -#ifdef JP -"ããçãé", -"å°ãã®é", -"ãã°ããã®é", -"å¤å°é·ãé", -"é·ãé", -"é常ã«é·ãé", -"ä¿¡ãé£ãã»ã©é·ãé", -"ã¢ã³ã¹ã¿ã¼ãæ»æããã¾ã§" -#else - "for a short time", - "for a little while", - "for a while", - "for a long while", - "for a long time", - "for a very long time", - "for an incredibly long time", - "until you hit a monster" -#endif - -}; - -/*! - * @brief ç¾å¨ã®ä¸æçå¹æä¸è¦§ãè¿ã / Report all currently active magical effects. - * @return ãªã - */ -void report_magics(void) -{ - int i = 0, j, k; - char Dummy[80]; - cptr info[128]; - int info2[128]; - - - if (p_ptr->blind) - { - info2[i] = report_magics_aux(p_ptr->blind); - info[i++] = _("ããªãã¯ç®ãè¦ããªã", "You cannot see"); - } - if (p_ptr->confused) - { - info2[i] = report_magics_aux(p_ptr->confused); - info[i++] = _("ããªãã¯æ··ä¹±ãã¦ãã", "You are confused"); - } - if (p_ptr->afraid) - { - info2[i] = report_magics_aux(p_ptr->afraid); - info[i++] = _("ããªãã¯ææã«ä¾µããã¦ãã", "You are terrified"); - } - if (p_ptr->poisoned) - { - info2[i] = report_magics_aux(p_ptr->poisoned); - info[i++] = _("ããªãã¯æ¯ã«ä¾µããã¦ãã", "You are poisoned"); - } - if (p_ptr->image) - { - info2[i] = report_magics_aux(p_ptr->image); - info[i++] = _("ããªãã¯å¹»è¦ãè¦ã¦ãã", "You are hallucinating"); - } - if (p_ptr->blessed) - { - info2[i] = report_magics_aux(p_ptr->blessed); - info[i++] = _("ããªãã¯é«æ½ããæãã¦ãã", "You feel rightous"); - } - if (p_ptr->hero) - { - info2[i] = report_magics_aux(p_ptr->hero); - info[i++] = _("ããªãã¯ãã¼ãã¼æ°åã ", "You feel heroic"); - } - if (p_ptr->shero) - { - info2[i] = report_magics_aux(p_ptr->shero); - info[i++] = _("ããªãã¯æ¦éçã ", "You are in a battle rage"); - } - if (p_ptr->protevil) - { - info2[i] = report_magics_aux(p_ptr->protevil); - info[i++] = _("ããªãã¯éªæªãªãåå¨ããå®ããã¦ãã", "You are protected from evil"); - } - if (p_ptr->shield) - { - info2[i] = report_magics_aux(p_ptr->shield); - info[i++] = _("ããªãã¯ç¥ç§ã®ã·ã¼ã«ãã§å®ããã¦ãã", "You are protected by a mystic shield"); - } - if (p_ptr->invuln) - { - info2[i] = report_magics_aux(p_ptr->invuln); - info[i++] = _("ããªãã¯ç¡æµã ", "You are invulnerable"); - } - if (p_ptr->wraith_form) - { - info2[i] = report_magics_aux(p_ptr->wraith_form); - info[i++] = _("ããªãã¯å¹½ä½åãã¦ãã", "You are incorporeal"); - } - if (p_ptr->special_attack & ATTACK_CONFUSE) - { - info2[i] = 7; - info[i++] = _("ããªãã®æã¯èµ¤ãè¼ãã¦ãã", "Your hands are glowing dull red."); - } - if (p_ptr->word_recall) - { - info2[i] = report_magics_aux(p_ptr->word_recall); - info[i++] = _("ãã®å¾å¸°éã®è©ãçºåãã", "You are waiting to be recalled"); - } - if (p_ptr->alter_reality) - { - info2[i] = report_magics_aux(p_ptr->alter_reality); - info[i++] = _("ãã®å¾ç¾å®å¤å®¹ãçºåãã", "You waiting to be altered"); - } - if (p_ptr->oppose_acid) - { - info2[i] = report_magics_aux(p_ptr->oppose_acid); - info[i++] = _("ããªãã¯é ¸ã¸ã®èæ§ãæã£ã¦ãã", "You are resistant to acid"); - } - if (p_ptr->oppose_elec) - { - info2[i] = report_magics_aux(p_ptr->oppose_elec); - info[i++] = _("ããªãã¯é»æã¸ã®èæ§ãæã£ã¦ãã", "You are resistant to lightning"); - } - if (p_ptr->oppose_fire) - { - info2[i] = report_magics_aux(p_ptr->oppose_fire); - info[i++] = _("ããªãã¯ç«ã¸ã®èæ§ãæã£ã¦ãã", "You are resistant to fire"); - } - if (p_ptr->oppose_cold) - { - info2[i] = report_magics_aux(p_ptr->oppose_cold); - info[i++] = _("ããªãã¯å·æ°ã¸ã®èæ§ãæã£ã¦ãã", "You are resistant to cold"); - } - if (p_ptr->oppose_pois) - { - info2[i] = report_magics_aux(p_ptr->oppose_pois); - info[i++] = _("ããªãã¯æ¯ã¸ã®èæ§ãæã£ã¦ãã", "You are resistant to poison"); - } - - /* Save the screen */ - screen_save(); - - /* Erase the screen */ - for (k = 1; k < 24; k++) prt("", k, 13); - - /* Label the information */ - prt(_(" ç¾å¨ããã£ã¦ããéæ³ :", " Your Current Magic:"), 1, 15); +#include "trap.h" - /* We will print on top of the map (column 13) */ - for (k = 2, j = 0; j < i; j++) - { - /* Show the info */ - sprintf(Dummy, _("%-28s : æé - %s ", "%s %s."), info[j], - report_magic_durations[info2[j]]); - prt(Dummy, k++, 15); - - /* Every 20 entries (lines 2 to 21), start over */ - if ((k == 22) && (j + 1 < i)) - { - prt(_("-- ç¶ã --", "-- more --"), k, 15); - inkey(); - for (; k > 2; k--) prt("", k, 15); - } - } - - /* Pause */ - prt(_("[ä½ããã¼ãæ¼ãã¨ã²ã¼ã ã«æ»ãã¾ã]", "[Press any key to continue]"), k, 13); - inkey(); - - /* Restore the screen */ - screen_load(); -} - /*! * @brief ãã¬ã¤ã¤ã¼å¨è¾ºã®å°å½¢ãæç¥ãã * @param range å¹æç¯å² @@ -1821,7 +23,7 @@ void report_magics(void) * @param known å°å½¢ããå±éºãã©ã°ãå¤ããªãTRUE * @return å¹åããã£ãå ´åTRUEãè¿ã */ -static bool detect_feat_flag(int range, int flag, bool known) +static bool detect_feat_flag(POSITION range, int flag, bool known) { int x, y; bool detect = FALSE; @@ -1884,13 +86,13 @@ static bool detect_feat_flag(int range, int flag, bool known) * @param known æç¥å¤ç¯å²ãè¶ ããè¦åãã©ã°ãç«ã¦ãå ´åTRUEãè¿ã * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_traps(int range, bool known) +bool detect_traps(POSITION range, bool known) { bool detect = detect_feat_flag(range, FF_TRAP, known); if (known) p_ptr->dtrap = TRUE; - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE; /* Describe */ if (detect) @@ -1908,11 +110,11 @@ bool detect_traps(int range, bool known) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_doors(int range) +bool detect_doors(POSITION range) { bool detect = detect_feat_flag(range, FF_DOOR, TRUE); - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE; /* Describe */ if (detect) @@ -1930,11 +132,11 @@ bool detect_doors(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_stairs(int range) +bool detect_stairs(POSITION range) { bool detect = detect_feat_flag(range, FF_STAIRS, TRUE); - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 0) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 0) detect = FALSE; /* Describe */ if (detect) @@ -1952,11 +154,11 @@ bool detect_stairs(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_treasure(int range) +bool detect_treasure(POSITION range) { bool detect = detect_feat_flag(range, FF_HAS_GOLD, TRUE); - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE; /* Describe */ if (detect) @@ -1974,10 +176,10 @@ bool detect_treasure(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_objects_gold(int range) +bool detect_objects_gold(POSITION range) { int i, y, x; - int range2 = range; + POSITION range2 = range; bool detect = FALSE; @@ -2015,7 +217,7 @@ bool detect_objects_gold(int range) } } - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE; /* Describe */ if (detect) @@ -2038,10 +240,10 @@ bool detect_objects_gold(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_objects_normal(int range) +bool detect_objects_normal(POSITION range) { int i, y, x; - int range2 = range; + POSITION range2 = range; bool detect = FALSE; @@ -2079,7 +281,7 @@ bool detect_objects_normal(int range) } } - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 6) detect = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 6) detect = FALSE; /* Describe */ if (detect) @@ -2110,7 +312,7 @@ bool detect_objects_normal(int range) * It can probably be argued that this function is now too powerful. * */ -bool detect_objects_magic(int range) +bool detect_objects_magic(POSITION range) { int i, y, x, tv; @@ -2192,9 +394,10 @@ bool detect_objects_magic(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_normal(int range) +bool detect_monsters_normal(POSITION range) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; @@ -2233,7 +436,7 @@ bool detect_monsters_normal(int range) } } - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; /* Describe */ if (flag) @@ -2252,9 +455,10 @@ bool detect_monsters_normal(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_invis(int range) +bool detect_monsters_invis(POSITION range) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; @@ -2299,7 +503,7 @@ bool detect_monsters_invis(int range) } } - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; /* Describe */ if (flag) @@ -2317,9 +521,10 @@ bool detect_monsters_invis(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_evil(int range) +bool detect_monsters_evil(POSITION range) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; @@ -2386,10 +591,11 @@ bool detect_monsters_evil(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_nonliving(int range) +bool detect_monsters_nonliving(POSITION range) { - int i, y, x; - bool flag = FALSE; + MONSTER_IDX i; + POSITION y, x; + bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; @@ -2449,9 +655,10 @@ bool detect_monsters_nonliving(int range) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_mind(int range) +bool detect_monsters_mind(POSITION range) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; @@ -2514,9 +721,10 @@ bool detect_monsters_mind(int range) * @param Match 対å¿ã·ã³ãã«ã®æ··ãã£ãã¢ã³ã¹ã¿ã¼æåå(è¤æ°æå®å) * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_string(int range, cptr Match) +bool detect_monsters_string(POSITION range, cptr Match) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; @@ -2561,7 +769,7 @@ bool detect_monsters_string(int range, cptr Match) } } - if (music_singing(MUSIC_DETECT) && p_ptr->magic_num1[2] > 3) flag = FALSE; + if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; /* Describe */ if (flag) @@ -2580,9 +788,10 @@ bool detect_monsters_string(int range, cptr Match) * @param match_flag æç¥ãã©ã° * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_monsters_xxx(int range, u32b match_flag) +bool detect_monsters_xxx(POSITION range, u32b match_flag) { - int i, y, x; + MONSTER_IDX i; + POSITION y, x; bool flag = FALSE; cptr desc_monsters = _("å¤ãªã¢ã³ã¹ã¿ã¼", "weird monsters"); @@ -2662,7 +871,7 @@ bool detect_monsters_xxx(int range, u32b match_flag) * @param range å¹æç¯å² * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool detect_all(int range) +bool detect_all(POSITION range) { bool detect = FALSE; @@ -2697,7 +906,7 @@ bool detect_all(int range) * this is done in two passes. -- JDL * */ -bool project_hack(int typ, int dam) +bool project_hack(int typ, HIT_POINT dam) { int i, x, y; int flg = PROJECT_JUMP | PROJECT_KILL | PROJECT_HIDE; @@ -2799,7 +1008,7 @@ bool turn_undead(void) * @brief è¦çå ã®ã¢ã³ãããã»ã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel undead monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_undead(int dam) +bool dispel_undead(HIT_POINT dam) { bool tester = (project_hack(GF_DISP_UNDEAD, dam)); if (tester) @@ -2811,7 +1020,7 @@ bool dispel_undead(int dam) * @brief è¦çå ã®éªæªãªã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel evil monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_evil(int dam) +bool dispel_evil(HIT_POINT dam) { return (project_hack(GF_DISP_EVIL, dam)); } @@ -2820,7 +1029,7 @@ bool dispel_evil(int dam) * @brief è¦çå ã®åè¯ãªã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel good monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_good(int dam) +bool dispel_good(HIT_POINT dam) { return (project_hack(GF_DISP_GOOD, dam)); } @@ -2829,7 +1038,7 @@ bool dispel_good(int dam) * @brief è¦çå ã®ããããã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel all monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_monsters(int dam) +bool dispel_monsters(HIT_POINT dam) { return (project_hack(GF_DISP_ALL, dam)); } @@ -2838,7 +1047,7 @@ bool dispel_monsters(int dam) * @brief è¦çå ã®çå½ã®ããã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel 'living' monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_living(int dam) +bool dispel_living(HIT_POINT dam) { return (project_hack(GF_DISP_LIVING, dam)); } @@ -2847,7 +1056,7 @@ bool dispel_living(int dam) * @brief è¦çå ã®æªéç³»ã¢ã³ã¹ã¿ã¼ã«ãã¡ã¼ã¸ãä¸ããå¦ç / Dispel 'living' monsters * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool dispel_demons(int dam) +bool dispel_demons(HIT_POINT dam) { return (project_hack(GF_DISP_DEMON, dam)); } @@ -2866,9 +1075,9 @@ bool crusade(void) * @param who æãããåå ãèµ·ãããã¢ã³ã¹ã¿ã¼(0ãªãã°ãã¬ã¤ã¤ã¼) * @return ãªã */ -void aggravate_monsters(int who) +void aggravate_monsters(MONSTER_IDX who) { - int i; + MONSTER_IDX i; bool sleep = FALSE; bool speed = FALSE; @@ -2929,7 +1138,7 @@ void aggravate_monsters(int who) * @param spell_name æ¹æ®ºå¹æãèµ·ãããéæ³ã®åå * @return å¹åããã£ãå ´åTRUEãè¿ã */ -bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spell_name) +bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, cptr spell_name) { int msec = delay_factor * delay_factor * delay_factor; monster_type *m_ptr = &m_list[m_idx]; @@ -3030,7 +1239,7 @@ bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spe */ bool symbol_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; char typ; bool result = FALSE; @@ -3077,7 +1286,7 @@ bool symbol_genocide(int power, bool player_cast) */ bool mass_genocide(int power, bool player_cast) { - int i; + MONSTER_IDX i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3119,7 +1328,7 @@ bool mass_genocide(int power, bool player_cast) */ bool mass_genocide_undead(int power, bool player_cast) { - int i; + MONSTER_IDX i; bool result = FALSE; /* Prevent mass genocide in quest levels */ @@ -3162,9 +1371,9 @@ bool mass_genocide_undead(int power, bool player_cast) */ bool probing(void) { - int i, speed; - int cu, cv; - bool probe = FALSE; + int i, speed; + bool_hack cu, cv; + bool probe = FALSE; char buf[256]; cptr align; @@ -3212,6 +1421,7 @@ bool probing(void) speed = m_ptr->mspeed - 110; if (MON_FAST(m_ptr)) speed += 10; if (MON_SLOW(m_ptr)) speed -= 10; + if (ironman_nightmare) speed += 5; /* Get the monster's alignment */ #ifdef JP @@ -3233,11 +1443,9 @@ bool probing(void) #endif /* Describe the monster */ -#ifdef JP -sprintf(buf,"%s ... å±æ§:%s HP:%d/%d AC:%d é度:%s%d çµé¨:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed); -#else -sprintf(buf, "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:", m_name, align, m_ptr->hp, m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed); -#endif + sprintf(buf,_("%s ... å±æ§:%s HP:%d/%d AC:%d é度:%s%d çµé¨:", "%s ... align:%s HP:%d/%d AC:%d speed:%s%d exp:"), + m_name, align, (int)m_ptr->hp, (int)m_ptr->maxhp, r_ptr->ac, (speed > 0) ? "+" : "", speed); + if (r_ptr->next_r_idx) { strcat(buf, format("%d/%d ", m_ptr->exp, r_ptr->next_exp)); @@ -3626,7 +1834,7 @@ bool destroy_area(int y1, int x1, int r, bool in_generate) * This has allowed massive simplification of the "monster" code. * */ -bool earthquake_aux(int cy, int cx, int r, int m_idx) +bool earthquake_aux(int cy, int cx, int r, MONSTER_IDX m_idx) { int i, t, y, x, yy, xx, dy, dx; int damage = 0; @@ -3929,7 +2137,7 @@ bool earthquake_aux(int cy, int cx, int r, int m_idx) /* Hack -- Escape from the rock */ if (sn) { - int m_idx_aux = cave[yy][xx].m_idx; + IDX m_idx_aux = cave[yy][xx].m_idx; /* Update the old location */ cave[yy][xx].m_idx = 0; @@ -4101,7 +2309,7 @@ bool earthquake(int cy, int cx, int r) */ void discharge_minion(void) { - int i; + MONSTER_IDX i; bool okay = TRUE; for (i = 1; i < m_max; i++) @@ -4117,7 +2325,7 @@ void discharge_minion(void) } for (i = 1; i < m_max; i++) { - int dam; + HIT_POINT dam; monster_type *m_ptr = &m_list[i]; monster_race *r_ptr; @@ -4587,9 +2795,9 @@ void unlite_room(int y1, int x1) * @param rad å¹æåå¾ * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool lite_area(int dam, int rad) +bool lite_area(HIT_POINT dam, int rad) { - int flg = PROJECT_GRID | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_KILL; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) { @@ -4620,9 +2828,9 @@ bool lite_area(int dam, int rad) * @param rad å¹æåå¾ * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool unlite_area(int dam, int rad) +bool unlite_area(HIT_POINT dam, int rad) { - int flg = PROJECT_GRID | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_KILL; /* Hack -- Message */ if (!p_ptr->blind) @@ -4656,13 +2864,13 @@ bool unlite_area(int dam, int rad) * Affect grids, objects, and monsters * */ -bool fire_ball(int typ, int dir, int dam, int rad) +bool fire_ball(int typ, int dir, HIT_POINT dam, int rad) { int tx, ty; - int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; - if (typ == GF_CONTROL_LIVING) flg|= PROJECT_HIDE; + if (typ == GF_CHARM_LIVING) flg|= PROJECT_HIDE; /* Use the given direction */ tx = p_ptr->x + 99 * ddx[dir]; ty = p_ptr->y + 99 * ddy[dir]; @@ -4679,6 +2887,24 @@ bool fire_ball(int typ, int dir, int dam, int rad) return (project(0, rad, ty, tx, dam, typ, flg, -1)); } +/*! +* @brief ãã¬ã¹ç³»ã¹ãã«ã®çºå / Cast a breath spell +* @param typ å¹æå±æ§ +* @param dir æ¹å(5ãªãã°ã°ãã¼ãã«å¤æ° target_col/target_row ã®åº§æ¨ãç®æ¨ã«ãã) +* @param dam å¨å +* @param rad åå¾ +* @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã +* @details +*
+* Stop if we hit a monster, act as a "ball" +* Allow "target" mode to pass over monsters +* Affect grids, objects, and monsters +*+*/ +bool fire_breath(int typ, int dir, HIT_POINT dam, int rad) +{ + return fire_ball(typ, dir, dam, -rad); +} /*! @@ -4695,11 +2921,11 @@ bool fire_ball(int typ, int dir, int dam, int rad) * Affect grids, objects, and monsters * */ -bool fire_rocket(int typ, int dir, int dam, int rad) +bool fire_rocket(int typ, int dir, HIT_POINT dam, int rad) { int tx, ty; - int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; /* Use the given direction */ tx = p_ptr->x + 99 * ddx[dir]; @@ -4731,11 +2957,11 @@ bool fire_rocket(int typ, int dir, int dam, int rad) * Affect grids, objects, and monsters * */ -bool fire_ball_hide(int typ, int dir, int dam, int rad) +bool fire_ball_hide(int typ, int dir, HIT_POINT dam, int rad) { int tx, ty; - int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_HIDE; /* Use the given direction */ tx = p_ptr->x + 99 * ddx[dir]; @@ -4772,9 +2998,9 @@ bool fire_ball_hide(int typ, int dir, int dam, int rad) * Option to hurt the player. * */ -bool fire_meteor(int who, int typ, int y, int x, int dam, int rad) +bool fire_meteor(MONSTER_IDX who, EFFECT_ID typ, POSITION y, POSITION x, HIT_POINT dam, POSITION rad) { - int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; /* Analyze the "target" and the caster. */ return (project(who, rad, y, x, dam, typ, flg, -1)); @@ -4797,7 +3023,7 @@ bool fire_blast(int typ, int dir, int dd, int ds, int num, int dev) int ty, tx, y, x; int i; - int flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID; + BIT_FLAGS flg = PROJECT_FAST | PROJECT_THRU | PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE | PROJECT_GRID; /* Assume okay */ bool result = TRUE; @@ -4923,7 +3149,7 @@ bool teleport_swap(int dir) * @param flg ãã©ã° * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool project_hook(int typ, int dir, int dam, int flg) +bool project_hook(int typ, int dir, HIT_POINT dam, BIT_FLAGS flg) { int tx, ty; @@ -4958,9 +3184,9 @@ bool project_hook(int typ, int dir, int dam, int flg) * Affect monsters and grids (not objects). * */ -bool fire_bolt(int typ, int dir, int dam) +bool fire_bolt(int typ, int dir, HIT_POINT dam) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_GRID; if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE; return (project_hook(typ, dir, dam, flg)); } @@ -4978,9 +3204,9 @@ bool fire_bolt(int typ, int dir, int dam) * Affect monsters, grids and objects. * */ -bool fire_beam(int typ, int dir, int dam) +bool fire_beam(int typ, int dir, HIT_POINT dam) { - int flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM; return (project_hook(typ, dir, dam, flg)); } @@ -4998,7 +3224,7 @@ bool fire_beam(int typ, int dir, int dam) * Affect monsters, grids and objects. * */ -bool fire_bolt_or_beam(int prob, int typ, int dir, int dam) +bool fire_bolt_or_beam(int prob, int typ, int dir, HIT_POINT dam) { if (randint0(100) < prob) { @@ -5016,22 +3242,22 @@ bool fire_bolt_or_beam(int prob, int typ, int dir, int dam) * @param dam å¨å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool lite_line(int dir, int dam) +bool lite_line(int dir, HIT_POINT dam) { - int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_KILL; return (project_hook(GF_LITE_WEAK, dir, dam, flg)); } /*! - * @brief å¸è¡ãã«ãå¦ç + * @brief è¡°å¼±ãã«ãå¦ç * @param dir æ¹å(5ãªãã°ã°ãã¼ãã«å¤æ° target_col/target_row ã®åº§æ¨ãç®æ¨ã«ãã) * @param dam å¨å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool drain_life(int dir, int dam) +bool hypodynamic_bolt(int dir, HIT_POINT dam) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; - return (project_hook(GF_OLD_DRAIN, dir, dam, flg)); + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + return (project_hook(GF_HYPODYNAMIA, dir, dam, flg)); } /*! @@ -5040,9 +3266,9 @@ bool drain_life(int dir, int dam) * @param dam å¨å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool wall_to_mud(int dir, int dam) +bool wall_to_mud(int dir, HIT_POINT dam) { - int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; return (project_hook(GF_KILL_WALL, dir, dam, flg)); } @@ -5053,7 +3279,7 @@ bool wall_to_mud(int dir, int dam) */ bool wizard_lock(int dir) { - int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; return (project_hook(GF_JAM_DOOR, dir, 20 + randint1(30), flg)); } @@ -5064,7 +3290,7 @@ bool wizard_lock(int dir) */ bool destroy_door(int dir) { - int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM; return (project_hook(GF_KILL_DOOR, dir, 0, flg)); } @@ -5075,7 +3301,7 @@ bool destroy_door(int dir) */ bool disarm_trap(int dir) { - int flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_GRID | PROJECT_ITEM; return (project_hook(GF_KILL_TRAP, dir, 0, flg)); } @@ -5085,9 +3311,9 @@ bool disarm_trap(int dir) * @param dam å¨å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool heal_monster(int dir, int dam) +bool heal_monster(int dir, HIT_POINT dam) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_HEAL, dir, dam, flg)); } @@ -5099,7 +3325,7 @@ bool heal_monster(int dir, int dam) */ bool speed_monster(int dir, int power) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_SPEED, dir, power, flg)); } @@ -5111,7 +3337,7 @@ bool speed_monster(int dir, int power) */ bool slow_monster(int dir, int power) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_SLOW, dir, power, flg)); } @@ -5123,7 +3349,7 @@ bool slow_monster(int dir, int power) */ bool sleep_monster(int dir, int power) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_SLEEP, dir, power, flg)); } @@ -5157,7 +3383,7 @@ bool stasis_evil(int dir) */ bool confuse_monster(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_CONF, dir, plev, flg)); } @@ -5169,7 +3395,7 @@ bool confuse_monster(int dir, int plev) */ bool stun_monster(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_STUN, dir, plev, flg)); } @@ -5181,7 +3407,7 @@ bool stun_monster(int dir, int plev) */ bool poly_monster(int dir, int power) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; bool tester = (project_hook(GF_OLD_POLY, dir, power, flg)); if (tester) chg_virtue(V_CHANCE, 1); @@ -5195,7 +3421,7 @@ bool poly_monster(int dir, int power) */ bool clone_monster(int dir) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_OLD_CLONE, dir, 0, flg)); } @@ -5207,7 +3433,7 @@ bool clone_monster(int dir) */ bool fear_monster(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_TURN_ALL, dir, plev, flg)); } @@ -5219,7 +3445,7 @@ bool fear_monster(int dir, int plev) */ bool death_ray(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; return (project_hook(GF_DEATH_RAY, dir, plev * 200, flg)); } @@ -5231,7 +3457,7 @@ bool death_ray(int dir, int plev) */ bool teleport_monster(int dir, int distance) { - int flg = PROJECT_BEAM | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_BEAM | PROJECT_KILL; return (project_hook(GF_AWAY_ALL, dir, distance, flg)); } @@ -5241,7 +3467,7 @@ bool teleport_monster(int dir, int distance) */ bool door_creation(void) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_DOOR, flg, -1)); } @@ -5253,7 +3479,7 @@ bool door_creation(void) */ bool trap_creation(int y, int x) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; return (project(0, 1, y, x, 0, GF_MAKE_TRAP, flg, -1)); } @@ -5263,7 +3489,7 @@ bool trap_creation(int y, int x) */ bool tree_creation(void) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_TREE, flg, -1)); } @@ -5273,7 +3499,7 @@ bool tree_creation(void) */ bool glyph_creation(void) { - int flg = PROJECT_GRID | PROJECT_ITEM; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM; return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_MAKE_GLYPH, flg, -1)); } @@ -5283,7 +3509,7 @@ bool glyph_creation(void) */ bool wall_stone(void) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; bool dummy = (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_STONE_WALL, flg, -1)); @@ -5302,7 +3528,7 @@ bool wall_stone(void) */ bool destroy_doors_touch(void) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_KILL_DOOR, flg, -1)); } @@ -5312,7 +3538,7 @@ bool destroy_doors_touch(void) */ bool disarm_traps_touch(void) { - int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_HIDE; return (project(0, 1, p_ptr->y, p_ptr->x, 0, GF_KILL_TRAP, flg, -1)); } @@ -5322,7 +3548,7 @@ bool disarm_traps_touch(void) */ bool sleep_monsters_touch(void) { - int flg = PROJECT_KILL | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_KILL | PROJECT_HIDE; return (project(0, 1, p_ptr->y, p_ptr->x, p_ptr->lev, GF_OLD_SLEEP, flg, -1)); } @@ -5334,9 +3560,9 @@ bool sleep_monsters_touch(void) * @param x èµ·ç¹Xåº§æ¨ * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool animate_dead(int who, int y, int x) +bool animate_dead(MONSTER_IDX who, POSITION y, POSITION x) { - int flg = PROJECT_ITEM | PROJECT_HIDE; + BIT_FLAGS flg = PROJECT_ITEM | PROJECT_HIDE; return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1)); } @@ -5407,7 +3633,7 @@ bool activate_ty_curse(bool stop_ty, int *count) { int i = 0; - int flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP); + BIT_FLAGS flg = (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP); do { @@ -5423,7 +3649,7 @@ bool activate_ty_curse(bool stop_ty, int *count) case 30: case 31: if (!(*count)) { - int dam = damroll(10, 10); + HIT_POINT dam = damroll(10, 10); msg_print(_("ç´ç²ãªéåã®æ¬¡å ã¸ã®æãéããï¼", "A portal opens to a plane of raw mana!")); project(0, 8, p_ptr->y, p_ptr->x, dam, GF_MANA, flg, -1); take_hit(DAMAGE_NOESCAPE, dam, _("ç´ç²ãªéåã®è§£æ¾", "released pure mana"), -1); @@ -5517,12 +3743,12 @@ bool activate_ty_curse(bool stop_ty, int *count) * @param can_pet ãã¬ã¤ã¤ã¼ã®ãããã¨ãªãå¯è½æ§ããããªãã°TRUEã«ãã * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -int activate_hi_summon(int y, int x, bool can_pet) +int activate_hi_summon(POSITION y, POSITION x, bool can_pet) { int i; int count = 0; - int summon_lev; - u32b mode = PM_ALLOW_GROUP; + DEPTH summon_lev; + BIT_FLAGS mode = PM_ALLOW_GROUP; bool pet = FALSE; if (can_pet) @@ -5606,12 +3832,12 @@ int activate_hi_summon(int y, int x, bool can_pet) * @param x å¬åä½ç½®Xåº§æ¨ * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -int summon_cyber(int who, int y, int x) +int summon_cyber(MONSTER_IDX who, POSITION y, POSITION x) { int i; int max_cyber = (easy_band ? 1 : (dun_level / 50) + randint1(2)); int count = 0; - u32b mode = PM_ALLOW_GROUP; + BIT_FLAGS mode = PM_ALLOW_GROUP; /* Summoned by a monster */ if (who > 0) @@ -5637,7 +3863,7 @@ int summon_cyber(int who, int y, int x) void wall_breaker(void) { int i; - int y = 0, x = 0; + POSITION y = 0, x = 0; int attempts = 1000; if (randint1(80 + p_ptr->lev) < 70) @@ -5683,7 +3909,7 @@ void wall_breaker(void) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool confuse_monsters(int dam) +bool confuse_monsters(HIT_POINT dam) { return (project_hack(GF_OLD_CONF, dam)); } @@ -5694,7 +3920,7 @@ bool confuse_monsters(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool charm_monsters(int dam) +bool charm_monsters(HIT_POINT dam) { return (project_hack(GF_CHARM, dam)); } @@ -5705,7 +3931,7 @@ bool charm_monsters(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool charm_animals(int dam) +bool charm_animals(HIT_POINT dam) { return (project_hack(GF_CONTROL_ANIMAL, dam)); } @@ -5716,7 +3942,7 @@ bool charm_animals(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool stun_monsters(int dam) +bool stun_monsters(HIT_POINT dam) { return (project_hack(GF_STUN, dam)); } @@ -5727,7 +3953,7 @@ bool stun_monsters(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool stasis_monsters(int dam) +bool stasis_monsters(HIT_POINT dam) { return (project_hack(GF_STASIS, dam)); } @@ -5738,7 +3964,7 @@ bool stasis_monsters(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool mindblast_monsters(int dam) +bool mindblast_monsters(HIT_POINT dam) { return (project_hack(GF_PSI, dam)); } @@ -5760,7 +3986,7 @@ bool banish_monsters(int dist) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool turn_evil(int dam) +bool turn_evil(HIT_POINT dam) { return (project_hack(GF_TURN_EVIL, dam)); } @@ -5771,7 +3997,7 @@ bool turn_evil(int dam) * @param dam å¹å * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã */ -bool turn_monsters(int dam) +bool turn_monsters(HIT_POINT dam) { return (project_hack(GF_TURN_ALL, dam)); } @@ -5794,7 +4020,7 @@ bool deathray_monsters(void) */ bool charm_monster(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL; return (project_hook(GF_CHARM, dir, plev, flg)); } @@ -5806,7 +4032,7 @@ bool charm_monster(int dir, int plev) */ bool control_one_undead(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL; return (project_hook(GF_CONTROL_UNDEAD, dir, plev, flg)); } @@ -5818,7 +4044,7 @@ bool control_one_undead(int dir, int plev) */ bool control_one_demon(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL; return (project_hook(GF_CONTROL_DEMON, dir, plev, flg)); } @@ -5830,21 +4056,10 @@ bool control_one_demon(int dir, int plev) */ bool charm_animal(int dir, int plev) { - int flg = PROJECT_STOP | PROJECT_KILL; + BIT_FLAGS flg = PROJECT_STOP | PROJECT_KILL; return (project_hook(GF_CONTROL_ANIMAL, dir, plev, flg)); } -/*! - * @brief çç©æ¯é (1ä½) - * @param dir æ¹å(5ãªãã°ã°ãã¼ãã«å¤æ° target_col/target_row ã®åº§æ¨ãç®æ¨ã«ãã) - * @param plev ãã¯ã¼ - * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã - */ -bool charm_living(int dir, int plev) -{ - int flg = PROJECT_STOP | PROJECT_KILL; - return (project_hook(GF_CONTROL_LIVING, dir, plev, flg)); -} /*! * @brief å¤ãã身å¦ç @@ -5900,28 +4115,383 @@ bool kawarimi(bool success) /*! - * @brief å ¥èº«å¦ç / "Rush Attack" routine for Samurai or Ninja - * @param mdeath ç®æ¨ã¢ã³ã¹ã¿ã¼ãæ»äº¡ããããè¿ã - * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã / Return value is for checking "done" - */ -bool rush_attack(bool *mdeath) + * @brief å ¥èº«å¦ç / "Rush Attack" routine for Samurai or Ninja + * @param mdeath ç®æ¨ã¢ã³ã¹ã¿ã¼ãæ»äº¡ããããè¿ã + * @return ä½ç¨ãå®éã«ãã£ãå ´åTRUEãè¿ã / Return value is for checking "done" + */ +bool rush_attack(bool *mdeath) +{ + int dir; + int tx, ty; + int tm_idx = 0; + u16b path_g[32]; + int path_n, i; + bool tmp_mdeath = FALSE; + bool moved = FALSE; + + if (mdeath) *mdeath = FALSE; + + project_length = 5; + if (!get_aim_dir(&dir)) return FALSE; + + /* Use the given direction */ + tx = p_ptr->x + project_length * ddx[dir]; + ty = p_ptr->y + project_length * ddy[dir]; + + /* Hack -- Use an actual "target" */ + if ((dir == 5) && target_okay()) + { + tx = target_col; + ty = target_row; + } + + if (in_bounds(ty, tx)) tm_idx = cave[ty][tx].m_idx; + + path_n = project_path(path_g, project_length, p_ptr->y, p_ptr->x, ty, tx, PROJECT_STOP | PROJECT_KILL); + project_length = 0; + + /* No need to move */ + if (!path_n) return TRUE; + + /* Use ty and tx as to-move point */ + ty = p_ptr->y; + tx = p_ptr->x; + + /* Project along the path */ + for (i = 0; i < path_n; i++) + { + monster_type *m_ptr; + + int ny = GRID_Y(path_g[i]); + int nx = GRID_X(path_g[i]); + + if (cave_empty_bold(ny, nx) && player_can_enter(cave[ny][nx].feat, 0)) + { + ty = ny; + tx = nx; + + /* Go to next grid */ + continue; + } + + if (!cave[ny][nx].m_idx) + { + if (tm_idx) + { + msg_print(_("失æï¼", "Failed!")); + } + else + { + msg_print(_("ããã«ã¯å ¥èº«ã§ã¯å ¥ããªãã", "You can't move to that place.")); + } + + /* Exit loop */ + break; + } + + /* Move player before updating the monster */ + if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); + + /* Update the monster */ + update_mon(cave[ny][nx].m_idx, TRUE); + + /* Found a monster */ + m_ptr = &m_list[cave[ny][nx].m_idx]; + + if (tm_idx != cave[ny][nx].m_idx) + { +#ifdef JP + msg_format("%s%sãç«ã¡ãµããã£ã¦ããï¼", tm_idx ? "å¥ã®" : "", + m_ptr->ml ? "ã¢ã³ã¹ã¿ã¼" : "ä½ã"); +#else + msg_format("There is %s in the way!", m_ptr->ml ? (tm_idx ? "another monster" : "a monster") : "someone"); +#endif + } + else if (!player_bold(ty, tx)) + { + /* Hold the monster name */ + char m_name[80]; + + /* Get the monster name (BEFORE polymorphing) */ + monster_desc(m_name, m_ptr, 0); + msg_format(_("ç´ æ©ã%sã®æã«å ¥ãè¾¼ãã ï¼", "You quickly jump in and attack %s!"), m_name); + } + + if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); + moved = TRUE; + tmp_mdeath = py_attack(ny, nx, HISSATSU_NYUSIN); + + break; + } + + if (!moved && !player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); + + if (mdeath) *mdeath = tmp_mdeath; + return TRUE; +} + + +/*! + * @brief å ¨é¡ã®æ¶å» / Remove all mirrors in this floor + * @param explode ççºå¦çãä¼´ããªãã°TRUE + * @return ãªã + */ +void remove_all_mirrors(bool explode) +{ + int x, y; + + for (x = 0; x < cur_wid; x++) + { + for (y = 0; y < cur_hgt; y++) + { + if (is_mirror_grid(&cave[y][x])) + { + remove_mirror(y, x); + if (explode) + project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, + (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); + } + } + } +} + +/*! + * @brief ãä¸ã¤ã®æ輪ãã®å¹æå¦ç / + * Hack -- activate the ring of power + * @param dir çºåã®æ¹åID + * @return ãªã + */ +void ring_of_power(int dir) +{ + /* Pick a random effect */ + switch (randint1(10)) + { + case 1: + case 2: + { + /* Message */ + msg_print(_("ããªãã¯æªæ§ã®ãªã¼ã©ã«å ã¿è¾¼ã¾ããã", "You are surrounded by a malignant aura.")); + sound(SOUND_EVIL); + + /* Decrease all stats (permanently) */ + (void)dec_stat(A_STR, 50, TRUE); + (void)dec_stat(A_INT, 50, TRUE); + (void)dec_stat(A_WIS, 50, TRUE); + (void)dec_stat(A_DEX, 50, TRUE); + (void)dec_stat(A_CON, 50, TRUE); + (void)dec_stat(A_CHR, 50, TRUE); + + /* Lose some experience (permanently) */ + p_ptr->exp -= (p_ptr->exp / 4); + p_ptr->max_exp -= (p_ptr->exp / 4); + check_experience(); + + break; + } + + case 3: + { + /* Message */ + msg_print(_("ããªãã¯å¼·åãªãªã¼ã©ã«å ã¿è¾¼ã¾ããã", "You are surrounded by a powerful aura.")); + + /* Dispel monsters */ + dispel_monsters(1000); + + break; + } + + case 4: + case 5: + case 6: + { + /* Mana Ball */ + fire_ball(GF_MANA, dir, 600, 3); + + break; + } + + case 7: + case 8: + case 9: + case 10: + { + /* Mana Bolt */ + fire_bolt(GF_MANA, dir, 500); + + break; + } + } +} + +/*! +* @brief éå½ã®è¼ªã並ã³ã«ã«ãªã¹çãªå¹æã®çºå +* @param spell ã©ã³ãã ãªå¹æãé¸æããããã®åºæºID +* @return ãªã +*/ +void wild_magic(int spell) +{ + int counter = 0; + int type = SUMMON_MOLD + randint0(6); + + if (type < SUMMON_MOLD) type = SUMMON_MOLD; + else if (type > SUMMON_MIMIC) type = SUMMON_MIMIC; + + switch (randint1(spell) + randint1(8) + 1) + { + case 1: + case 2: + case 3: + teleport_player(10, TELEPORT_PASSIVE); + break; + case 4: + case 5: + case 6: + teleport_player(100, TELEPORT_PASSIVE); + break; + case 7: + case 8: + teleport_player(200, TELEPORT_PASSIVE); + break; + case 9: + case 10: + case 11: + unlite_area(10, 3); + break; + case 12: + case 13: + case 14: + lite_area(damroll(2, 3), 2); + break; + case 15: + destroy_doors_touch(); + break; + case 16: case 17: + wall_breaker(); + case 18: + sleep_monsters_touch(); + break; + case 19: + case 20: + trap_creation(p_ptr->y, p_ptr->x); + break; + case 21: + case 22: + door_creation(); + break; + case 23: + case 24: + case 25: + aggravate_monsters(0); + break; + case 26: + earthquake(p_ptr->y, p_ptr->x, 5); + break; + case 27: + case 28: + (void)gain_random_mutation(0); + break; + case 29: + case 30: + apply_disenchant(1); + break; + case 31: + lose_all_info(); + break; + case 32: + fire_ball(GF_CHAOS, 0, spell + 5, 1 + (spell / 10)); + break; + case 33: + wall_stone(); + break; + case 34: + case 35: + while (counter++ < 8) + { + (void)summon_specific(0, p_ptr->y, p_ptr->x, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET)); + } + break; + case 36: + case 37: + activate_hi_summon(p_ptr->y, p_ptr->x, FALSE); + break; + case 38: + (void)summon_cyber(-1, p_ptr->y, p_ptr->x); + break; + default: + { + int count = 0; + (void)activate_ty_curse(FALSE, &count); + break; + } + } + + return; +} + +/*! +* @brief ã«ãªã¹éæ³ãæµæ群ãã®å¦çã¨ãã¦ãã¬ã¤ã¤ã¼ãä¸å¿ã«éç³è½ä¸å¦çã10+1d10åç¹°ãè¿ãã +* / Drop 10+1d10 meteor ball at random places near the player +* @param dam ãã¡ã¼ã¸ +* @param rad å¹åã®åå¾ +* @return ãªã +*/ +void cast_meteor(HIT_POINT dam, int rad) +{ + int i; + int b = 10 + randint1(10); + + for (i = 0; i < b; i++) + { + POSITION y = 0, x = 0; + int count; + + for (count = 0; count <= 20; count++) + { + int dy, dx, d; + + x = p_ptr->x - 8 + randint0(17); + y = p_ptr->y - 8 + randint0(17); + + dx = (p_ptr->x > x) ? (p_ptr->x - x) : (x - p_ptr->x); + dy = (p_ptr->y > y) ? (p_ptr->y - y) : (y - p_ptr->y); + + /* Approximate distance */ + d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1)); + + if (d >= 9) continue; + + if (!in_bounds(y, x) || !projectable(p_ptr->y, p_ptr->x, y, x) + || !cave_have_flag_bold(y, x, FF_PROJECT)) continue; + + /* Valid position */ + break; + } + + if (count > 20) continue; + + project(0, rad, y, x, dam, GF_METEOR, PROJECT_KILL | PROJECT_JUMP | PROJECT_ITEM, -1); + } +} + + +/*! +* @brief ç ´éªéæ³ãç¥ã®æããã®å¦çã¨ãã¦ã¿ã¼ã²ãããæå®ããå¾å解ã®ãã¼ã«ãæ大20åçºçãããã +* @param dam ãã¡ã¼ã¸ +* @param rad å¹åã®åå¾ +* @return ã¿ã¼ã²ãããæå®ããå®è¡ãããªãã°TRUEãè¿ãã +*/ +bool cast_wrath_of_the_god(HIT_POINT dam, int rad) { - int dir; - int tx, ty; - int tm_idx = 0; - u16b path_g[32]; - int path_n, i; - bool tmp_mdeath = FALSE; - bool moved = FALSE; + int x, y, tx, ty; + int nx, ny; + int dir, i; + int b = 10 + randint1(10); - if (mdeath) *mdeath = FALSE; - - project_length = 5; if (!get_aim_dir(&dir)) return FALSE; /* Use the given direction */ - tx = p_ptr->x + project_length * ddx[dir]; - ty = p_ptr->y + project_length * ddy[dir]; + tx = p_ptr->x + 99 * ddx[dir]; + ty = p_ptr->y + 99 * ddy[dir]; /* Hack -- Use an actual "target" */ if ((dir == 5) && target_okay()) @@ -5930,112 +4500,509 @@ bool rush_attack(bool *mdeath) ty = target_row; } - if (in_bounds(ty, tx)) tm_idx = cave[ty][tx].m_idx; + x = p_ptr->x; + y = p_ptr->y; - path_n = project_path(path_g, project_length, p_ptr->y, p_ptr->x, ty, tx, PROJECT_STOP | PROJECT_KILL); - project_length = 0; + while (1) + { + /* Hack -- Stop at the target */ + if ((y == ty) && (x == tx)) break; - /* No need to move */ - if (!path_n) return TRUE; + ny = y; + nx = x; + mmove2(&ny, &nx, p_ptr->y, p_ptr->x, ty, tx); - /* Use ty and tx as to-move point */ - ty = p_ptr->y; - tx = p_ptr->x; + /* Stop at maximum range */ + if (MAX_RANGE <= distance(p_ptr->y, p_ptr->x, ny, nx)) break; - /* Project along the path */ - for (i = 0; i < path_n; i++) - { - monster_type *m_ptr; + /* Stopped by walls/doors */ + if (!cave_have_flag_bold(ny, nx, FF_PROJECT)) break; - int ny = GRID_Y(path_g[i]); - int nx = GRID_X(path_g[i]); + /* Stopped by monsters */ + if ((dir != 5) && cave[ny][nx].m_idx != 0) break; - if (cave_empty_bold(ny, nx) && player_can_enter(cave[ny][nx].feat, 0)) - { - ty = ny; - tx = nx; + /* Save the new location */ + x = nx; + y = ny; + } + tx = x; + ty = y; - /* Go to next grid */ - continue; - } + for (i = 0; i < b; i++) + { + int count = 20, d = 0; - if (!cave[ny][nx].m_idx) + while (count--) { - if (tm_idx) - { - msg_print(_("失æï¼", "Failed!")); - } - else - { - msg_print(_("ããã«ã¯å ¥èº«ã§ã¯å ¥ããªãã", "You can't move to that place.")); - } + int dx, dy; - /* Exit loop */ - break; + x = tx - 5 + randint0(11); + y = ty - 5 + randint0(11); + + dx = (tx > x) ? (tx - x) : (x - tx); + dy = (ty > y) ? (ty - y) : (y - ty); + + /* Approximate distance */ + d = (dy > dx) ? (dy + (dx >> 1)) : (dx + (dy >> 1)); + /* Within the radius */ + if (d < 5) break; } - /* Move player before updating the monster */ - if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); + if (count < 0) continue; - /* Update the monster */ - update_mon(cave[ny][nx].m_idx, TRUE); + /* Cannot penetrate perm walls */ + if (!in_bounds(y, x) || + cave_stop_disintegration(y, x) || + !in_disintegration_range(ty, tx, y, x)) + continue; - /* Found a monster */ - m_ptr = &m_list[cave[ny][nx].m_idx]; + project(0, rad, y, x, dam, GF_DISINTEGRATE, PROJECT_JUMP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL, -1); + } - if (tm_idx != cave[ny][nx].m_idx) + return TRUE; +} + +/*! +* @brief ãã¯ã³ãã¼ãã®ã©ã³ãã ãªå¹æã決å®ãã¦å¦çããã +* @param dir æ¹åID +* @return ãªã +* @details +* This spell should become more useful (more controlled) as the\n +* player gains experience levels. Thus, add 1/5 of the player's\n +* level to the die roll. This eliminates the worst effects later on,\n +* while keeping the results quite random. It also allows some potent\n +* effects only at high level. +*/ +void cast_wonder(int dir) +{ + int plev = p_ptr->lev; + int die = randint1(100) + plev / 5; + int vir = virtue_number(V_CHANCE); + + if (vir) + { + if (p_ptr->virtues[vir - 1] > 0) { -#ifdef JP - msg_format("%s%sãç«ã¡ãµããã£ã¦ããï¼", tm_idx ? "å¥ã®" : "", - m_ptr->ml ? "ã¢ã³ã¹ã¿ã¼" : "ä½ã"); -#else - msg_format("There is %s in the way!", m_ptr->ml ? (tm_idx ? "another monster" : "a monster") : "someone"); -#endif + while (randint1(400) < p_ptr->virtues[vir - 1]) die++; } - else if (!player_bold(ty, tx)) + else { - /* Hold the monster name */ - char m_name[80]; + while (randint1(400) < (0 - p_ptr->virtues[vir - 1])) die--; + } + } - /* Get the monster name (BEFORE polymorphing) */ - monster_desc(m_name, m_ptr, 0); - msg_format(_("ç´ æ©ã%sã®æã«å ¥ãè¾¼ãã ï¼", "You quickly jump in and attack %s!"), m_name); + if (die < 26) + chg_virtue(V_CHANCE, 1); + + if (die > 100) + { + msg_print(_("ããªãã¯åãã¿ãªããã®ãæããï¼", "You feel a surge of power!")); + } + + if (die < 8) clone_monster(dir); + else if (die < 14) speed_monster(dir, plev); + else if (die < 26) heal_monster(dir, damroll(4, 6)); + else if (die < 31) poly_monster(dir, plev); + else if (die < 36) + fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, + damroll(3 + ((plev - 1) / 5), 4)); + else if (die < 41) confuse_monster(dir, plev); + else if (die < 46) fire_ball(GF_POIS, dir, 20 + (plev / 2), 3); + else if (die < 51) (void)lite_line(dir, damroll(6, 8)); + else if (die < 56) + fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, + damroll(3 + ((plev - 5) / 4), 8)); + else if (die < 61) + fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, + damroll(5 + ((plev - 5) / 4), 8)); + else if (die < 66) + fire_bolt_or_beam(beam_chance(), GF_ACID, dir, + damroll(6 + ((plev - 5) / 4), 8)); + else if (die < 71) + fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, + damroll(8 + ((plev - 5) / 4), 8)); + else if (die < 76) hypodynamic_bolt(dir, 75); + else if (die < 81) fire_ball(GF_ELEC, dir, 30 + plev / 2, 2); + else if (die < 86) fire_ball(GF_ACID, dir, 40 + plev, 2); + else if (die < 91) fire_ball(GF_ICE, dir, 70 + plev, 3); + else if (die < 96) fire_ball(GF_FIRE, dir, 80 + plev, 3); + else if (die < 101) hypodynamic_bolt(dir, 100 + plev); + else if (die < 104) + { + earthquake(p_ptr->y, p_ptr->x, 12); + } + else if (die < 106) + { + (void)destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE); + } + else if (die < 108) + { + symbol_genocide(plev + 50, TRUE); + } + else if (die < 110) dispel_monsters(120); + else /* RARE */ + { + dispel_monsters(150); + slow_monsters(plev); + sleep_monsters(plev); + hp_player(300); + } +} + + +/*! +* @brief ãæªéå¬åãã®ã©ã³ãã ãªå¹æã決å®ãã¦å¦çããã +* @param dir æ¹åID +* @return ãªã +*/ +void cast_invoke_spirits(int dir) +{ + int plev = p_ptr->lev; + int die = randint1(100) + plev / 5; + int vir = virtue_number(V_CHANCE); + + if (vir) + { + if (p_ptr->virtues[vir - 1] > 0) + { + while (randint1(400) < p_ptr->virtues[vir - 1]) die++; + } + else + { + while (randint1(400) < (0 - p_ptr->virtues[vir - 1])) die--; } + } - if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); - moved = TRUE; - tmp_mdeath = py_attack(ny, nx, HISSATSU_NYUSIN); + msg_print(_("ããªãã¯æ»è ãã¡ã®åãæéãã...", "You call on the power of the dead...")); + if (die < 26) + chg_virtue(V_CHANCE, 1); - break; + if (die > 100) + { + msg_print(_("ããªãã¯ãã©ããã©ãããåã®ããããæããï¼", "You feel a surge of eldritch force!")); } - if (!moved && !player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); + if (die < 8) + { + msg_print(_("ãªãã¦ãã£ãï¼ããªãã®å¨ãã®å°é¢ããæ½ã¡ã人影ãç«ã¡ä¸ãã£ã¦ããï¼", + "Oh no! Mouldering forms rise from the earth around you!")); - if (mdeath) *mdeath = tmp_mdeath; - return TRUE; -} + (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + chg_virtue(V_UNLIFE, 1); + } + else if (die < 14) + { + msg_print(_("åç¶ãé£ãéªæªãªåå¨ãããªãã®å¿ãéãéãã¦è¡ã£ã...", "An unnamable evil brushes against your mind...")); + + set_afraid(p_ptr->afraid + randint1(4) + 4); + } + else if (die < 26) + { + msg_print(_("ããªãã®é ã«å¤§éã®å¹½éãã¡ã®é¨ã ãã声ãæ¼ãå¯ãã¦ãã...", + "Your head is invaded by a horde of gibbering spectral voices...")); + + set_confused(p_ptr->confused + randint1(4) + 4); + } + else if (die < 31) + { + poly_monster(dir, plev); + } + else if (die < 36) + { + fire_bolt_or_beam(beam_chance() - 10, GF_MISSILE, dir, + damroll(3 + ((plev - 1) / 5), 4)); + } + else if (die < 41) + { + confuse_monster(dir, plev); + } + else if (die < 46) + { + fire_ball(GF_POIS, dir, 20 + (plev / 2), 3); + } + else if (die < 51) + { + (void)lite_line(dir, damroll(6, 8)); + } + else if (die < 56) + { + fire_bolt_or_beam(beam_chance() - 10, GF_ELEC, dir, + damroll(3 + ((plev - 5) / 4), 8)); + } + else if (die < 61) + { + fire_bolt_or_beam(beam_chance() - 10, GF_COLD, dir, + damroll(5 + ((plev - 5) / 4), 8)); + } + else if (die < 66) + { + fire_bolt_or_beam(beam_chance(), GF_ACID, dir, + damroll(6 + ((plev - 5) / 4), 8)); + } + else if (die < 71) + { + fire_bolt_or_beam(beam_chance(), GF_FIRE, dir, + damroll(8 + ((plev - 5) / 4), 8)); + } + else if (die < 76) + { + hypodynamic_bolt(dir, 75); + } + else if (die < 81) + { + fire_ball(GF_ELEC, dir, 30 + plev / 2, 2); + } + else if (die < 86) + { + fire_ball(GF_ACID, dir, 40 + plev, 2); + } + else if (die < 91) + { + fire_ball(GF_ICE, dir, 70 + plev, 3); + } + else if (die < 96) + { + fire_ball(GF_FIRE, dir, 80 + plev, 3); + } + else if (die < 101) + { + hypodynamic_bolt(dir, 100 + plev); + } + else if (die < 104) + { + earthquake(p_ptr->y, p_ptr->x, 12); + } + else if (die < 106) + { + (void)destroy_area(p_ptr->y, p_ptr->x, 13 + randint0(5), FALSE); + } + else if (die < 108) + { + symbol_genocide(plev + 50, TRUE); + } + else if (die < 110) + { + dispel_monsters(120); + } + else + { /* RARE */ + dispel_monsters(150); + slow_monsters(plev); + sleep_monsters(plev); + hp_player(300); + } + if (die < 31) + { + msg_print(_("é°æ¬ãªå£°ãã¯ã¹ã¯ã¹ç¬ããããããããã¾ãã¯æã ã®ä»²éã«ãªãã ãããå¼±ãè ããã", + "Sepulchral voices chuckle. 'Soon you will join us, mortal.'")); + } +} /*! - * @brief å ¨é¡ã®æ¶å» / Remove all mirrors in this floor - * @param explode ççºå¦çãä¼´ããªãã°TRUE - * @return ãªã - */ -void remove_all_mirrors(bool explode) +* @brief ãã©ã³ãé åã®ãã·ã£ããã«ãã®å¹æãã©ã³ãã ã«æ±ºãã¦å¦çããã +* @return ãªã +*/ +void cast_shuffle(void) { - int x, y; + int plev = p_ptr->lev; + int dir; + int die; + int vir = virtue_number(V_CHANCE); + int i; - for (x = 0; x < cur_wid; x++) + /* Card sharks and high mages get a level bonus */ + if ((p_ptr->pclass == CLASS_ROGUE) || + (p_ptr->pclass == CLASS_HIGH_MAGE) || + (p_ptr->pclass == CLASS_SORCERER)) + die = (randint1(110)) + plev / 5; + else + die = randint1(120); + + + if (vir) { - for (y = 0; y < cur_hgt; y++) + if (p_ptr->virtues[vir - 1] > 0) { - if (is_mirror_grid(&cave[y][x])) - { - remove_mirror(y, x); - if (explode) - project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, - (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); - } + while (randint1(400) < p_ptr->virtues[vir - 1]) die++; + } + else + { + while (randint1(400) < (0 - p_ptr->virtues[vir - 1])) die--; + } + } + + msg_print(_("ããªãã¯ã«ã¼ããåã£ã¦ä¸æå¼ãã...", "You shuffle the deck and draw a card...")); + + if (die < 30) + chg_virtue(V_CHANCE, 1); + + if (die < 7) + { + msg_print(_("ãªãã¦ãã£ãï¼ãæ»ãã ï¼", "Oh no! It's Death!")); + + for (i = 0; i < randint1(3); i++) + activate_hi_summon(p_ptr->y, p_ptr->x, FALSE); + } + else if (die < 14) + { + msg_print(_("ãªãã¦ãã£ãï¼ãæªéãã ï¼", "Oh no! It's the Devil!")); + summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + } + else if (die < 18) + { + int count = 0; + msg_print(_("ãªãã¦ãã£ãï¼ãåãããç·ãã ï¼", "Oh no! It's the Hanged Man.")); + activate_ty_curse(FALSE, &count); + } + else if (die < 22) + { + msg_print(_("ãä¸èª¿åã®å£ãã ã", "It's the swords of discord.")); + aggravate_monsters(0); + } + else if (die < 26) + { + msg_print(_("ãæè ãã ã", "It's the Fool.")); + do_dec_stat(A_INT); + do_dec_stat(A_WIS); + } + else if (die < 30) + { + msg_print(_("å¥å¦ãªã¢ã³ã¹ã¿ã¼ã®çµµã ã", "It's the picture of a strange monster.")); + trump_summoning(1, FALSE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), (32 + randint1(6)), PM_ALLOW_GROUP | PM_ALLOW_UNIQUE); + } + else if (die < 33) + { + msg_print(_("ãæãã ã", "It's the Moon.")); + unlite_area(10, 3); + } + else if (die < 38) + { + msg_print(_("ãéå½ã®è¼ªãã ã", "It's the Wheel of Fortune.")); + wild_magic(randint0(32)); + } + else if (die < 40) + { + msg_print(_("ãã¬ãã¼ãã»ã«ã¼ãã ã", "It's a teleport trump card.")); + teleport_player(10, TELEPORT_PASSIVE); + } + else if (die < 42) + { + msg_print(_("ãæ£ç¾©ãã ã", "It's Justice.")); + set_blessed(p_ptr->lev, FALSE); + } + else if (die < 47) + { + msg_print(_("ãã¬ãã¼ãã»ã«ã¼ãã ã", "It's a teleport trump card.")); + teleport_player(100, TELEPORT_PASSIVE); + } + else if (die < 52) + { + msg_print(_("ãã¬ãã¼ãã»ã«ã¼ãã ã", "It's a teleport trump card.")); + teleport_player(200, TELEPORT_PASSIVE); + } + else if (die < 60) + { + msg_print(_("ãå¡ãã ã", "It's the Tower.")); + wall_breaker(); + } + else if (die < 72) + { + msg_print(_("ãç¯å¶ãã ã", "It's Temperance.")); + sleep_monsters_touch(); + } + else if (die < 80) + { + msg_print(_("ãå¡ãã ã", "It's the Tower.")); + + earthquake(p_ptr->y, p_ptr->x, 5); + } + else if (die < 82) + { + msg_print(_("å好çãªã¢ã³ã¹ã¿ã¼ã®çµµã ã", "It's the picture of a friendly monster.")); + trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_MOLD, 0L); + } + else if (die < 84) + { + msg_print(_("å好çãªã¢ã³ã¹ã¿ã¼ã®çµµã ã", "It's the picture of a friendly monster.")); + trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_BAT, 0L); + } + else if (die < 86) + { + msg_print(_("å好çãªã¢ã³ã¹ã¿ã¼ã®çµµã ã", "It's the picture of a friendly monster.")); + trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_VORTEX, 0L); + } + else if (die < 88) + { + msg_print(_("å好çãªã¢ã³ã¹ã¿ã¼ã®çµµã ã", "It's the picture of a friendly monster.")); + trump_summoning(1, TRUE, p_ptr->y, p_ptr->x, (dun_level * 3 / 2), SUMMON_COIN_MIMIC, 0L); + } + else if (die < 96) + { + msg_print(_("ãæ人ãã ã", "It's the Lovers.")); + + if (get_aim_dir(&dir)) + charm_monster(dir, MIN(p_ptr->lev, 20)); + } + else if (die < 101) + { + msg_print(_("ãé è ãã ã", "It's the Hermit.")); + wall_stone(); + } + else if (die < 111) + { + msg_print(_("ã審å¤ãã ã", "It's the Judgement.")); + do_cmd_rerate(FALSE); + lose_all_mutations(); + } + else if (die < 120) + { + msg_print(_("ã太é½ãã ã", "It's the Sun.")); + chg_virtue(V_KNOWLEDGE, 1); + chg_virtue(V_ENLIGHTEN, 1); + wiz_lite(FALSE); + } + else + { + msg_print(_("ãä¸çãã ã", "It's the World.")); + if (p_ptr->exp < PY_MAX_EXP) + { + s32b ee = (p_ptr->exp / 25) + 1; + if (ee > 5000) ee = 5000; + msg_print(_("æ´ã«çµé¨ãç©ãã ãããªæ°ãããã", "You feel more experienced.")); + gain_exp(ee); } } } + +bool_hack life_stream(bool_hack message, bool_hack virtue) +{ + if(virtue) + { + chg_virtue(V_VITALITY, 1); + chg_virtue(V_UNLIFE, -5); + } + if(message) + { + msg_print(_("ä½ä¸ã«çå½åãæºã¡ããµãã¦ããï¼", "You feel life flow through your body!")); + } + restore_level(); + (void)set_poisoned(0); + (void)set_blind(0); + (void)set_confused(0); + (void)set_image(0); + (void)set_stun(0); + (void)set_cut(0); + (void)do_res_stat(A_STR); + (void)do_res_stat(A_CON); + (void)do_res_stat(A_DEX); + (void)do_res_stat(A_WIS); + (void)do_res_stat(A_INT); + (void)do_res_stat(A_CHR); + (void)set_shero(0, TRUE); + update_stuff(); + hp_player(5000); + + return TRUE; +} +