X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmelee1.c;h=973f6e11022228b0d3eac8a00f07b11608187b37;hb=fe2167184011ea1c12d1eef56135bbe5053776b1;hp=1fe8f6667d8f462d8c131bb183ee6d874765ec9f;hpb=82f4d03234d31562205cd3d4c0e36b939cc5f1e7;p=hengband%2Fhengband.git diff --git a/src/melee1.c b/src/melee1.c index 1fe8f6667..973f6e110 100644 --- a/src/melee1.c +++ b/src/melee1.c @@ -1,20 +1,26 @@ -/* File: melee1.c */ - -/* Purpose: Monster attacks */ - -/* - * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke - * - * This software may be copied and distributed for educational, research, and - * not for profit purposes provided that this copyright and statement are - * included in all such copies. +/*! + * @file melee1.c + * @brief モンスターの打撃処理 / Monster attacks + * @date 2014/01/17 + * @author + * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n + * This software may be copied and distributed for educational, research,\n + * and not for profit purposes provided that this copyright and statement\n + * are included in all such copies. Other copyrights may also apply.\n + * 2014 Deskull rearranged comment for Doxygen.\n + * @details */ #include "angband.h" -/* - * Critical blow. All hits that do 95% of total possible damage, +/*! + * @brief モンスター打撃のクリティカルランクを返す / + * Critical blow. All hits that do 95% of total possible damage, + * @param dice モンスター打撃のダイス数 + * @param sides モンスター打撃の最大ダイス目 + * @param dam プレイヤーに与えたダメージ + * @details * and which also do at least 20 damage, or, sometimes, N damage. * This is used only to determine "cuts" and "stuns". */ @@ -30,7 +36,7 @@ static int monster_critical(int dice, int sides, int dam) if ((dam < 20) && (randint0(100) >= dam)) return (0); /* Perfect damage */ - if (dam == total && dam >= 40) max++; + if ((dam >= total) && (dam >= 40)) max++; /* Super-charge */ if (dam >= 20) @@ -47,12 +53,14 @@ static int monster_critical(int dice, int sides, int dam) return (1 + max); } - - - - -/* +/*! + * @brief モンスター打撃の命中を判定する / * Determine if a monster attack against the player succeeds. + * @param power 打撃属性毎の基本命中値 + * @param level モンスターのレベル + * @param stun モンスターの朦朧値 + * @return TRUEならば命中判定 + * @details * Always miss 5% of the time, Always hit 5% of the time. * Otherwise, match monster power against player armor. */ @@ -84,22 +92,20 @@ static int check_hit(int power, int level, int stun) -/* - * Hack -- possible "insult" messages - */ +/*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */ static cptr desc_insult[] = { #ifdef JP - "¤¬¤¢¤Ê¤¿¤òÉî¿«¤·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ÎÊì¤òÉî¿«¤·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ò·ÚÊΤ·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ò¿«¤á¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ò±ø¤·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤Î²ó¤ê¤ÇÍ٤ä¿¡ª", - "¤¬àÐêø¤Ê¿È¤Ö¤ê¤ò¤·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ò¤Ü¤ó¤ä¤ê¤È¸«¤¿¡ª¡ª¡ª", - "¤¬¤¢¤Ê¤¿¤ò¥Ñ¥é¥µ¥¤¥È¸Æ¤Ð¤ï¤ê¤·¤¿¡ª", - "¤¬¤¢¤Ê¤¿¤ò¥µ¥¤¥Ü¡¼¥°°·¤¤¤·¤¿¡ª" + "があなたを侮辱した!", + "があなたの母を侮辱した!", + "があなたを軽蔑した!", + "があなたを辱めた!", + "があなたを汚した!", + "があなたの回りで踊った!", + "が猥褻な身ぶりをした!", + "があなたをぼんやりと見た!!!", + "があなたをパラサイト呼ばわりした!", + "があなたをサイボーグ扱いした!" #else "insults you!", "insults your mother!", @@ -116,17 +122,14 @@ static cptr desc_insult[] = }; - -/* - * Hack -- possible "insult" messages - */ +/*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */ static cptr desc_moan[] = { #ifdef JP - "¤Ï²¿¤«¤òÈᤷ¤ó¤Ç¤¤¤ë¤è¤¦¤À¡£", - "¤¬Èà¤Î»ô¤¤¸¤¤ò¸«¤Ê¤«¤Ã¤¿¤«¤È¿Ò¤Í¤Æ¤¤¤ë¡£", - "¤¬ÆìÄ¥¤ê¤«¤é½Ð¤Æ¹Ô¤±¤È¸À¤Ã¤Æ¤¤¤ë¡£", - "¤Ï¥­¥Î¥³¤¬¤É¤¦¤È¤«Ò줤¤Æ¤¤¤ë¡£" + "は何かを悲しんでいるようだ。", + "が彼の飼い犬を見なかったかと尋ねている。", + "が縄張りから出て行けと言っている。", + "はキノコがどうとか呟いている。" #else "seems sad about something.", "asks if you have seen his dogs.", @@ -137,8 +140,10 @@ static cptr desc_moan[] = }; -/* - * Attack the player via physical attacks. +/*! + * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks. + * @param m_idx 打撃を行うモンスターのID + * @return 実際に攻撃処理を行った場合TRUEを返す */ bool make_attack_normal(int m_idx) { @@ -155,8 +160,6 @@ bool make_attack_normal(int m_idx) object_type *o_ptr; - object_kind *k_ptr; - char o_name[MAX_NLEN]; char m_name[80]; @@ -166,10 +169,9 @@ bool make_attack_normal(int m_idx) bool blinked; bool touched = FALSE, fear = FALSE, alive = TRUE; bool explode = FALSE; - bool resist_drain = FALSE; bool do_silly_attack = (one_in_(2) && p_ptr->image); - int syouryaku = 0; int get_damage = 0; + int abbreviate = 0; /* Not allowed to attack */ if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE); @@ -179,9 +181,6 @@ bool make_attack_normal(int m_idx) /* ...nor if friendly */ if (!is_hostile(m_ptr)) return FALSE; - /* Total armor */ - ac = p_ptr->ac + p_ptr->to_a; - /* Extract the effective monster level */ rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1); @@ -190,22 +189,17 @@ bool make_attack_normal(int m_idx) monster_desc(m_name, m_ptr, 0); /* Get the "died from" information (i.e. "a kobold") */ - monster_desc(ddesc, m_ptr, 0x288); + monster_desc(ddesc, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE); if (p_ptr->special_defense & KATA_IAI) { -#ifdef JP - msg_print("Áê¼ê¤¬½±¤¤¤«¤«¤ëÁ°¤ËÁÇÁ᤯Éð´ï¤ò¿¶¤ë¤Ã¤¿¡£"); -#else - msg_format("You took sen, draw and cut in one motion before %s move.", m_name); -#endif + msg_format(_("相手が襲いかかる前に素早く武器を振るった。", "You took sen, draw and cut in one motion before %s move."), m_name); if (py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_IAI)) return TRUE; } if ((p_ptr->special_defense & NINJA_KAWARIMI) && (randint0(55) < (p_ptr->lev*3/5+20))) { - kawarimi(TRUE); - return TRUE; + if (kawarimi(TRUE)) return TRUE; } /* Assume no blink */ @@ -214,7 +208,6 @@ bool make_attack_normal(int m_idx) /* Scan through all four blows */ for (ap_cnt = 0; ap_cnt < 4; ap_cnt++) { - bool visible = FALSE; bool obvious = FALSE; int power = 0; @@ -241,61 +234,25 @@ bool make_attack_normal(int m_idx) } /* Stop if player is dead or gone */ - if (!alive || death) break; - if (distance(py, px, m_ptr->fy, m_ptr->fx) > 1) break; + if (!p_ptr->playing || p_ptr->is_dead) break; + if (distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx) > 1) break; /* Handle "leaving" */ if (p_ptr->leaving) break; if (method == RBM_SHOOT) continue; - /* Extract visibility (before blink) */ - if (m_ptr->ml) visible = TRUE; - /* Extract the attack "power" */ - switch (effect) - { - case RBE_HURT: power = 60; break; - case RBE_POISON: power = 5; break; - case RBE_UN_BONUS: power = 20; break; - case RBE_UN_POWER: power = 15; break; - case RBE_EAT_GOLD: power = 5; break; - case RBE_EAT_ITEM: power = 5; break; - case RBE_EAT_FOOD: power = 5; break; - case RBE_EAT_LITE: power = 5; break; - case RBE_ACID: power = 0; break; - case RBE_ELEC: power = 10; break; - case RBE_FIRE: power = 10; break; - case RBE_COLD: power = 10; break; - case RBE_BLIND: power = 2; break; - case RBE_CONFUSE: power = 10; break; - case RBE_TERRIFY: power = 10; break; - case RBE_PARALYZE: power = 2; break; - case RBE_LOSE_STR: power = 0; break; - case RBE_LOSE_DEX: power = 0; break; - case RBE_LOSE_CON: power = 0; break; - case RBE_LOSE_INT: power = 0; break; - case RBE_LOSE_WIS: power = 0; break; - case RBE_LOSE_CHR: power = 0; break; - case RBE_LOSE_ALL: power = 2; break; - case RBE_SHATTER: power = 60; break; - case RBE_EXP_10: power = 5; break; - case RBE_EXP_20: power = 5; break; - case RBE_EXP_40: power = 5; break; - case RBE_EXP_80: power = 5; break; - case RBE_DISEASE: power = 5; break; - case RBE_TIME: power = 5; break; - case RBE_EXP_VAMP: power = 5; break; - case RBE_DR_MANA: power = 5; break; - case RBE_SUPERHURT: power = 60; break; - } + power = mbe_info[effect].power; + /* Total armor */ + ac = p_ptr->ac + p_ptr->to_a; /* Monster hits player */ - if (!effect || check_hit(power, rlev, m_ptr->stunned)) + if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr))) { /* Always disturbing */ - disturb(1, 0); + disturb(1, 1); /* Hack -- Apply "protection from evil" */ @@ -305,18 +262,15 @@ bool make_attack_normal(int m_idx) ((randint0(100) + p_ptr->lev) > 50)) { /* Remember the Evil-ness */ - if (m_ptr->ml) - { - r_ptr->r_flags3 |= RF3_EVIL; - } + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL; /* Message */ #ifdef JP - if (syouryaku) - msg_format("·âÂष¤¿¡£"); + if (abbreviate) + msg_format("撃退した。"); else - msg_format("%^s¤Ï·âÂव¤ì¤¿¡£", m_name); - syouryaku = 1;/*£²²óÌܰʹߤϾÊά */ + msg_format("%^sは撃退された。", m_name); + abbreviate = 1;/*2回目以降は省略 */ #else msg_format("%^s is repelled.", m_name); #endif @@ -335,12 +289,7 @@ bool make_attack_normal(int m_idx) { case RBM_HIT: { -#ifdef JP - act = "²¥¤é¤ì¤¿¡£"; -#else - act = "hits you."; -#endif - + act = _("殴られた。", "hits you."); do_cut = do_stun = 1; touched = TRUE; sound(SOUND_HIT); @@ -349,12 +298,7 @@ bool make_attack_normal(int m_idx) case RBM_TOUCH: { -#ifdef JP - act = "¿¨¤é¤ì¤¿¡£"; -#else - act = "touches you."; -#endif - + act = _("触られた。", "touches you."); touched = TRUE; sound(SOUND_TOUCH); break; @@ -362,12 +306,7 @@ bool make_attack_normal(int m_idx) case RBM_PUNCH: { -#ifdef JP - act = "¥Ñ¥ó¥Á¤µ¤ì¤¿¡£"; -#else - act = "punches you."; -#endif - + act = _("パンチされた。", "punches you."); touched = TRUE; do_stun = 1; sound(SOUND_HIT); @@ -376,12 +315,7 @@ bool make_attack_normal(int m_idx) case RBM_KICK: { -#ifdef JP - act = "½³¤é¤ì¤¿¡£"; -#else - act = "kicks you."; -#endif - + act = _("蹴られた。", "kicks you."); touched = TRUE; do_stun = 1; sound(SOUND_HIT); @@ -390,12 +324,7 @@ bool make_attack_normal(int m_idx) case RBM_CLAW: { -#ifdef JP - act = "¤Ò¤Ã¤«¤«¤ì¤¿¡£"; -#else - act = "claws you."; -#endif - + act = _("ひっかかれた。", "claws you."); touched = TRUE; do_cut = 1; sound(SOUND_CLAW); @@ -404,12 +333,7 @@ bool make_attack_normal(int m_idx) case RBM_BITE: { -#ifdef JP - act = "³ú¤Þ¤ì¤¿¡£"; -#else - act = "bites you."; -#endif - + act = _("噛まれた。", "bites you."); do_cut = 1; touched = TRUE; sound(SOUND_BITE); @@ -418,12 +342,7 @@ bool make_attack_normal(int m_idx) case RBM_STING: { -#ifdef JP - act = "»É¤µ¤ì¤¿¡£"; -#else - act = "stings you."; -#endif - + act = _("刺された。", "stings you."); touched = TRUE; sound(SOUND_STING); break; @@ -431,12 +350,7 @@ bool make_attack_normal(int m_idx) case RBM_SLASH: { -#ifdef JP - act = "»Â¤é¤ì¤¿¡£"; -#else - act = "slashes you."; -#endif - + act = _("斬られた。", "slashes you."); touched = TRUE; do_cut = 1; sound(SOUND_CLAW); @@ -445,12 +359,7 @@ bool make_attack_normal(int m_idx) case RBM_BUTT: { -#ifdef JP - act = "³Ñ¤ÇÆͤ«¤ì¤¿¡£"; -#else - act = "butts you."; -#endif - + act = _("角で突かれた。", "butts you."); do_stun = 1; touched = TRUE; sound(SOUND_HIT); @@ -459,12 +368,7 @@ bool make_attack_normal(int m_idx) case RBM_CRUSH: { -#ifdef JP - act = "ÂÎÅö¤¿¤ê¤µ¤ì¤¿¡£"; -#else - act = "crushes you."; -#endif - + act = _("体当たりされた。", "crushes you."); do_stun = 1; touched = TRUE; sound(SOUND_CRUSH); @@ -473,12 +377,7 @@ bool make_attack_normal(int m_idx) case RBM_ENGULF: { -#ifdef JP - act = "°û¤ß¹þ¤Þ¤ì¤¿¡£"; -#else - act = "engulfs you."; -#endif - + act = _("飲み込まれた。", "engulfs you."); touched = TRUE; sound(SOUND_CRUSH); break; @@ -486,13 +385,8 @@ bool make_attack_normal(int m_idx) case RBM_CHARGE: { -#ifdef JP - syouryaku = -1; - act = "¤ÏÀÁµá½ñ¤ò¤è¤³¤·¤¿¡£"; -#else - act = "charges you."; -#endif - + abbreviate = -1; + act = _("は請求書をよこした。", "charges you."); touched = TRUE; sound(SOUND_BUY); /* Note! This is "charges", not "charges at". */ break; @@ -500,13 +394,8 @@ bool make_attack_normal(int m_idx) case RBM_CRAWL: { -#ifdef JP - syouryaku = -1; - act = "¤¬ÂΤξå¤òÇ礤²ó¤Ã¤¿¡£"; -#else - act = "crawls on you."; -#endif - + abbreviate = -1; + act = _("が体の上を這い回った。", "crawls on you."); touched = TRUE; sound(SOUND_SLIME); break; @@ -514,103 +403,65 @@ bool make_attack_normal(int m_idx) case RBM_DROOL: { -#ifdef JP - act = "¤è¤À¤ì¤ò¤¿¤é¤µ¤ì¤¿¡£"; -#else - act = "drools on you."; -#endif - + act = _("よだれをたらされた。", "drools on you."); sound(SOUND_SLIME); break; } case RBM_SPIT: { -#ifdef JP - act = "ÂäòÅǤ«¤ì¤¿¡£"; -#else - act = "spits on you."; -#endif - + act = _("唾を吐かれた。", "spits on you."); sound(SOUND_SLIME); break; } case RBM_EXPLODE: { - syouryaku = -1; -#ifdef JP - act = "¤ÏÇúȯ¤·¤¿¡£"; -#else - act = "explodes."; -#endif - + abbreviate = -1; + act = _("は爆発した。", "explodes."); explode = TRUE; break; } case RBM_GAZE: { -#ifdef JP - act = "¤Ë¤é¤Þ¤ì¤¿¡£"; -#else - act = "gazes at you."; -#endif - + act = _("にらまれた。", "gazes at you."); break; } case RBM_WAIL: { -#ifdef JP - act = "µã¤­¶«¤Ð¤ì¤¿¡£"; -#else - act = "wails at you."; -#endif - + act = _("泣き叫ばれた。", "wails at you."); sound(SOUND_WAIL); break; } case RBM_SPORE: { -#ifdef JP - act = "˦»Ò¤òÈô¤Ð¤µ¤ì¤¿¡£"; -#else - act = "releases spores at you."; -#endif - + act = _("胞子を飛ばされた。", "releases spores at you."); sound(SOUND_SLIME); break; } case RBM_XXX4: { - syouryaku = -1; -#ifdef JP - act = "¤¬ XXX4 ¤òȯ¼Í¤·¤¿¡£"; -#else - act = "projects XXX4's at you."; -#endif - + abbreviate = -1; + act = _("が XXX4 を発射した。", "projects XXX4's at you."); break; } case RBM_BEG: { -#ifdef JP - act = "¶â¤ò¤»¤¬¤Þ¤ì¤¿¡£"; -#else - act = "begs you for money."; -#endif - + act = _("金をせがまれた。", "begs you for money."); sound(SOUND_MOAN); break; } case RBM_INSULT: { - syouryaku = -1; +#ifdef JP + abbreviate = -1; +#endif act = desc_insult[randint0(m_ptr->r_idx == MON_DEBBY ? 10 : 8)]; sound(SOUND_MOAN); break; @@ -618,7 +469,9 @@ bool make_attack_normal(int m_idx) case RBM_MOAN: { - syouryaku = -1; +#ifdef JP + abbreviate = -1; +#endif act = desc_moan[randint0(4)]; sound(SOUND_MOAN); break; @@ -626,7 +479,9 @@ bool make_attack_normal(int m_idx) case RBM_SHOW: { - syouryaku = -1; +#ifdef JP + abbreviate = -1; +#endif if (m_ptr->r_idx == MON_JAIAN) { #ifdef JP @@ -635,43 +490,43 @@ bool make_attack_normal(int m_idx) case 1: case 6: case 11: - act = "¡Ö¢ö¤ª¡Á¤ì¤Ï¥¸¥ã¥¤¥¢¥ó¡Á¡Á¥¬¡Á¥­¤À¤¤¤·¤ç¤¦¡Á¡×"; + act = "「♪お~れはジャイアン~~ガ~キだいしょう~」"; break; case 2: - act = "¡Ö¢ö¤Æ¡Á¤ó¤«¤à¡Á¤Æ¤­¤Î¤ª¡Á¤È¤³¤À¤¼¡Á¡Á¡×"; + act = "「♪て~んかむ~てきのお~とこだぜ~~」"; break; case 3: - act = "¡Ö¢ö¤Î¡Á¤ÓÂÀ¥¹¥ÍÉפϥᤸ¤ã¤Ê¤¤¤è¡Á¡Á¡×"; + act = "「♪の~び太スネ夫はメじゃないよ~~」"; break; case 4: - act = "¡Ö¢ö¤±¡Á¤ó¤«¥¹¥Ý¡Á¥Ä¡Á¤É¤ó¤È¤³¤¤¡Á¡×"; + act = "「♪け~んかスポ~ツ~どんとこい~」"; break; case 5: - act = "¡Ö¢ö¤¦¤¿¡Á¤â¡Á¡Á¤¦¡Á¤Þ¤¤¤¼¡Á¤Þ¤«¤·¤È¤±¡Á¡×"; + act = "「♪うた~も~~う~まいぜ~まかしとけ~」"; break; case 7: - act = "¡Ö¢ö¤Þ¡Á¤Á¤¤¤Á¤Ð¡Á¤ó¤Î¤Ë¡Á¤ó¤­¤â¤Î¡Á¡Á¡×"; + act = "「♪ま~ちいちば~んのに~んきもの~~」"; break; case 8: - act = "¡Ö¢ö¤Ù¤ó¤­¤ç¤¦¤·¤å¤¯¤À¤¤¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×"; + act = "「♪べんきょうしゅくだいメじゃないよ~~」"; break; case 9: - act = "¡Ö¢ö¤­¤Ï¤ä¤µ¤·¡Á¤¯¤Æ¡Á¤Á¡Á¤«¤é¤â¤Á¡Á¡×"; + act = "「♪きはやさし~くて~ち~からもち~」"; break; case 10: - act = "¡Ö¢ö¤«¤ª¡Á¤â¡Á¡Á¥¹¥¿¥¤¥ë¤â¡Á¥Ð¥Ä¥°¥ó¤µ¡Á¡×"; + act = "「♪かお~も~~スタイルも~バツグンさ~」"; break; case 12: - act = "¡Ö¢ö¤¬¤Ã¤³¤¦¤¤¡Á¤Á¤Î¡Á¤¢¡Á¤Ð¤ì¤ó¤Ü¤¦¡Á¡Á¡×"; + act = "「♪がっこうい~ちの~あ~ばれんぼう~~」"; break; case 13: - act = "¡Ö¢ö¥É¡Á¥é¤â¥É¥é¥ß¤â¥á¤¸¤ã¤Ê¤¤¤è¡Á¡Á¡×"; + act = "「♪ド~ラもドラミもメじゃないよ~~」"; break; case 14: - act = "¡Ö¢ö¤è¤¸¤²¤ó¤Ý¤±¤Ã¤È¡Á¤Ê¡Á¤¯¤¿¤Ã¤Æ¡Á¡×"; + act = "「♪よじげんぽけっと~な~くたって~」"; break; case 15: - act = "¡Ö¢ö¤¢¤·¡Á¤Î¡Á¡Á¤Ê¤¬¤µ¡Á¤Ï¡Á¤Þ¤±¤Ê¤¤¤¼¡Á¡×"; + act = "「♪あし~の~~ながさ~は~まけないぜ~」"; break; } #else @@ -682,9 +537,9 @@ bool make_attack_normal(int m_idx) { if (one_in_(3)) #ifdef JP - act = "¤Ï¢öËͤé¤Ï³Ú¤·¤¤²È²¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£"; + act = "は♪僕らは楽しい家族♪と歌っている。"; else - act = "¤Ï¢ö¥¢¥¤ ¥é¥Ö ¥æ¡¼¡¢¥æ¡¼ ¥é¥Ö ¥ß¡¼¢ö¤È²Î¤Ã¤Æ¤¤¤ë¡£"; + act = "は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。"; #else act = "sings 'We are a happy family.'"; else @@ -702,19 +557,21 @@ bool make_attack_normal(int m_idx) { if (do_silly_attack) { - syouryaku = -1; +#ifdef JP + abbreviate = -1; +#endif act = silly_attacks[randint0(MAX_SILLY_ATTACK)]; } #ifdef JP - if(syouryaku==0) - msg_format("%^s¤Ë%s", m_name, act); - else if(syouryaku==1) + if (abbreviate == 0) + msg_format("%^sに%s", m_name, act); + else if (abbreviate == 1) msg_format("%s", act); - else /*if(syouryaku==-1)*/ + else /* if (abbreviate == -1) */ msg_format("%^s%s", m_name, act); - syouryaku = 1;/*£²²óÌܰʹߤϾÊά */ + abbreviate = 1;/*2回目以降は省略 */ #else - msg_format("%^s %s", m_name, act); + msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : ""); #endif } @@ -746,15 +603,10 @@ bool make_attack_normal(int m_idx) case RBE_SUPERHURT: { - int ac = p_ptr->ac+p_ptr->to_a; - if ((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) { - int tmp_damage = damage-(damage*((ac < 150) ? ac : 150)/250); -#ifdef JP - msg_print("Ä˺¨¤Î°ì·â¡ª"); -#else - msg_print("It was a critical hit!"); -#endif - + if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW()) + { + int tmp_damage = damage - (damage * ((ac < 150) ? ac : 150) / 250); + msg_print(_("痛恨の一撃!", "It was a critical hit!")); tmp_damage = MAX(damage, tmp_damage*2); /* Take damage */ @@ -781,7 +633,7 @@ bool make_attack_normal(int m_idx) if (explode) break; /* Take "poison" effect */ - if (!(p_ptr->resist_pois || p_ptr->oppose_pois)) + if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()) && !CHECK_MULTISHADOW()) { if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5)) { @@ -803,10 +655,15 @@ bool make_attack_normal(int m_idx) if (explode) break; /* Allow complete resist */ - if (!p_ptr->resist_disen) + if (!p_ptr->resist_disen && !CHECK_MULTISHADOW()) { /* Apply disenchantment */ - if (apply_disenchant(0)) obvious = TRUE; + if (apply_disenchant(0)) + { + /* Hack -- Update AC */ + update_stuff(); + obvious = TRUE; + } } /* Take some damage */ @@ -823,7 +680,7 @@ bool make_attack_normal(int m_idx) /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Find an item */ for (k = 0; k < 10; k++) @@ -851,12 +708,7 @@ bool make_attack_normal(int m_idx) heal = MIN(heal, m_ptr->maxhp - m_ptr->hp); /* Message */ -#ifdef JP - msg_print("¥¶¥Ã¥¯¤«¤é¥¨¥Í¥ë¥®¡¼¤¬µÛ¤¤¼è¤é¤ì¤¿¡ª"); -#else - msg_print("Energy drains from your pack!"); -#endif - + msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!")); /* Obvious */ obvious = TRUE; @@ -891,9 +743,9 @@ bool make_attack_normal(int m_idx) get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Confused monsters cannot steal successfully. -LM-*/ - if (m_ptr->confused) break; + if (MON_CONFUSED(m_ptr)) break; - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Obvious */ obvious = TRUE; @@ -901,15 +753,10 @@ bool make_attack_normal(int m_idx) /* Saving throw (unless paralyzed) based on dex and level */ if (!p_ptr->paralyzed && (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] + - p_ptr->lev))) + p_ptr->lev))) { /* Saving throw message */ -#ifdef JP - msg_print("¤·¤«¤·ÁÇÁ᤯ºâÉÛ¤ò¼é¤Ã¤¿¡ª"); -#else - msg_print("You quickly protect your money pouch!"); -#endif - + msg_print(_("しかし素早く財布を守った!", "You quickly protect your money pouch!")); /* Occasional blink anyway */ if (randint0(3)) blinked = TRUE; @@ -925,34 +772,18 @@ bool make_attack_normal(int m_idx) p_ptr->au -= gold; if (gold <= 0) { -#ifdef JP - msg_print("¤·¤«¤·²¿¤âÅð¤Þ¤ì¤Ê¤«¤Ã¤¿¡£"); -#else - msg_print("Nothing was stolen."); -#endif - + msg_print(_("しかし何も盗まれなかった。", "Nothing was stolen.")); } else if (p_ptr->au) { -#ifdef JP - msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£"); - msg_format("$%ld ¤Î¤ª¶â¤¬Åð¤Þ¤ì¤¿¡ª", (long)gold); -#else - msg_print("Your purse feels lighter."); - msg_format("%ld coins were stolen!", (long)gold); -#endif + msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter.")); + msg_format(_("$%ld のお金が盗まれた!", "%ld coins were stolen!"), (long)gold); chg_virtue(V_SACRIFICE, 1); } else { -#ifdef JP - msg_print("ºâÉÛ¤¬·Ú¤¯¤Ê¤Ã¤¿µ¤¤¬¤¹¤ë¡£"); - msg_print("¤ª¶â¤¬Á´ÉôÅð¤Þ¤ì¤¿¡ª"); -#else - msg_print("Your purse feels lighter."); - msg_print("All of your coins were stolen!"); -#endif - + msg_print(_("財布が軽くなった気がする。", "Your purse feels lighter.")); + msg_print(_("お金が全部盗まれた!", "All of your coins were stolen!")); chg_virtue(V_SACRIFICE, 2); } @@ -975,22 +806,17 @@ bool make_attack_normal(int m_idx) get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Confused monsters cannot steal successfully. -LM-*/ - if (m_ptr->confused) break; + if (MON_CONFUSED(m_ptr)) break; - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Saving throw (unless paralyzed) based on dex and level */ if (!p_ptr->paralyzed && (randint0(100) < (adj_dex_safe[p_ptr->stat_ind[A_DEX]] + - p_ptr->lev))) + p_ptr->lev))) { /* Saving throw message */ -#ifdef JP - msg_print("¤·¤«¤·¤¢¤ï¤Æ¤Æ¥¶¥Ã¥¯¤ò¼è¤êÊÖ¤·¤¿¡ª"); -#else - msg_print("You grab hold of your backpack!"); -#endif - + msg_print(_("しかしあわててザックを取り返した!", "You grab hold of your backpack!")); /* Occasional "blink" anyway */ blinked = TRUE; @@ -1017,20 +843,20 @@ bool make_attack_normal(int m_idx) if (!o_ptr->k_idx) continue; /* Skip artifacts */ - if (artifact_p(o_ptr) || o_ptr->art_name) continue; + if (object_is_artifact(o_ptr)) continue; /* Get a description */ - object_desc(o_name, o_ptr, FALSE, 3); + object_desc(o_name, o_ptr, OD_OMIT_PREFIX); /* Message */ #ifdef JP - msg_format("%s(%c)¤ò%sÅð¤Þ¤ì¤¿¡ª", - o_name, index_to_label(i), - ((o_ptr->number > 1) ? "°ì¤Ä" : "")); + msg_format("%s(%c)を%s盗まれた!", + o_name, index_to_label(i), + ((o_ptr->number > 1) ? "一つ" : "")); #else msg_format("%sour %s (%c) was stolen!", - ((o_ptr->number > 1) ? "One of y" : "Y"), - o_name, index_to_label(i)); + ((o_ptr->number > 1) ? "One of y" : "Y"), + o_name, index_to_label(i)); #endif chg_virtue(V_SACRIFICE, 1); @@ -1038,41 +864,40 @@ bool make_attack_normal(int m_idx) /* Make an object */ o_idx = o_pop(); - + /* Success */ if (o_idx) { object_type *j_ptr; - + /* Get new object */ j_ptr = &o_list[o_idx]; - + /* Copy object */ object_copy(j_ptr, o_ptr); - + /* Modify number */ j_ptr->number = 1; - + /* Hack -- If a rod or wand, allocate total * maximum timeouts or charges between those * stolen and those missed. -LM- */ if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND)) { - k_ptr = &k_info[o_ptr->k_idx]; j_ptr->pval = o_ptr->pval / o_ptr->number; o_ptr->pval -= j_ptr->pval; } - + /* Forget mark */ - j_ptr->marked = FALSE; - + j_ptr->marked = OM_TOUCHED; + /* Memorize monster */ j_ptr->held_m_idx = m_idx; - + /* Build stack */ j_ptr->next_o_idx = m_ptr->hold_o_idx; - + /* Build stack */ m_ptr->hold_o_idx = o_idx; } @@ -1099,7 +924,7 @@ bool make_attack_normal(int m_idx) /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Steal some food */ for (k = 0; k < 10; k++) @@ -1117,17 +942,17 @@ bool make_attack_normal(int m_idx) if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue; /* Get a description */ - object_desc(o_name, o_ptr, FALSE, 0); + object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); /* Message */ #ifdef JP - msg_format("%s(%c)¤ò%s¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª", - o_name, index_to_label(i), - ((o_ptr->number > 1) ? "°ì¤Ä" : "")); + msg_format("%s(%c)を%s食べられてしまった!", + o_name, index_to_label(i), + ((o_ptr->number > 1) ? "一つ" : "")); #else msg_format("%sour %s (%c) was eaten!", - ((o_ptr->number > 1) ? "One of y" : "Y"), - o_name, index_to_label(i)); + ((o_ptr->number > 1) ? "One of y" : "Y"), + o_name, index_to_label(i)); #endif @@ -1153,24 +978,19 @@ bool make_attack_normal(int m_idx) /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Drain fuel */ - if ((o_ptr->xtra4 > 0) && (!artifact_p(o_ptr))) + if ((o_ptr->xtra4 > 0) && (!object_is_fixed_artifact(o_ptr))) { /* Reduce fuel */ - o_ptr->xtra4 -= (250 + randint1(250)); + o_ptr->xtra4 -= (s16b)(250 + randint1(250)); if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1; /* Notice */ if (!p_ptr->blind) { -#ifdef JP - msg_print("ÌÀ¤«¤ê¤¬°Å¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¡£"); -#else - msg_print("Your light dims."); -#endif - + msg_print(_("明かりが暗くなってしまった。", "Your light dims.")); obvious = TRUE; } @@ -1188,15 +1008,13 @@ bool make_attack_normal(int m_idx) obvious = TRUE; /* Message */ -#ifdef JP - msg_print("»À¤òÍá¤Ó¤»¤é¤ì¤¿¡ª"); -#else - msg_print("You are covered in acid!"); -#endif - + msg_print(_("酸を浴びせられた!", "You are covered in acid!")); /* Special damage */ - acid_dam(damage, ddesc, -1); + get_damage += acid_dam(damage, ddesc, -1, FALSE); + + /* Hack -- Update AC */ + update_stuff(); /* Learn about the player */ update_smart_learn(m_idx, DRS_ACID); @@ -1211,15 +1029,10 @@ bool make_attack_normal(int m_idx) obvious = TRUE; /* Message */ -#ifdef JP - msg_print("ÅÅ·â¤òÍá¤Ó¤»¤é¤ì¤¿¡ª"); -#else - msg_print("You are struck by electricity!"); -#endif - + msg_print(_("電撃を浴びせられた!", "You are struck by electricity!")); /* Special damage */ - elec_dam(damage, ddesc, -1); + get_damage += elec_dam(damage, ddesc, -1, FALSE); /* Learn about the player */ update_smart_learn(m_idx, DRS_ELEC); @@ -1234,15 +1047,10 @@ bool make_attack_normal(int m_idx) obvious = TRUE; /* Message */ -#ifdef JP - msg_print("Á´¿È¤¬±ê¤ËÊñ¤Þ¤ì¤¿¡ª"); -#else - msg_print("You are enveloped in flames!"); -#endif - + msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!")); /* Special damage */ - fire_dam(damage, ddesc, -1); + get_damage += fire_dam(damage, ddesc, -1, FALSE); /* Learn about the player */ update_smart_learn(m_idx, DRS_FIRE); @@ -1257,15 +1065,10 @@ bool make_attack_normal(int m_idx) obvious = TRUE; /* Message */ -#ifdef JP - msg_print("Á´¿È¤¬Î䵤¤Çʤ¤ï¤ì¤¿¡ª"); -#else - msg_print("You are covered with frost!"); -#endif - + msg_print(_("全身が冷気で覆われた!", "You are covered with frost!")); /* Special damage */ - cold_dam(damage, ddesc, -1); + get_damage += cold_dam(damage, ddesc, -1, FALSE); /* Learn about the player */ update_smart_learn(m_idx, DRS_COLD); @@ -1278,15 +1081,15 @@ bool make_attack_normal(int m_idx) /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead) break; /* Increase "blind" */ - if (!p_ptr->resist_blind) + if (!p_ptr->resist_blind && !CHECK_MULTISHADOW()) { if (set_blind(p_ptr->blind + 10 + randint1(rlev))) { #ifdef JP - if(m_ptr->r_idx == MON_DIO) msg_print("¤É¤¦¤À¥Ã¡ª¤³¤Î·ì¤ÎÌÜÄÙ¤·¤Ï¥Ã¡ª"); + if (m_ptr->r_idx == MON_DIO) msg_print("どうだッ!この血の目潰しはッ!"); #else /* nanka */ #endif @@ -1306,10 +1109,10 @@ bool make_attack_normal(int m_idx) /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead) break; /* Increase "confused" */ - if (!p_ptr->resist_conf) + if (!p_ptr->resist_conf && !CHECK_MULTISHADOW()) { if (set_confused(p_ptr->confused + 3 + randint1(rlev))) { @@ -1328,27 +1131,21 @@ bool make_attack_normal(int m_idx) /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead) break; /* Increase "afraid" */ - if (p_ptr->resist_fear) + if (CHECK_MULTISHADOW()) { -#ifdef JP - msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª"); -#else - msg_print("You stand your ground!"); -#endif - + /* Do nothing */ + } + else if (p_ptr->resist_fear) + { + msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!")); obvious = TRUE; } else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav) { -#ifdef JP - msg_print("¤·¤«¤·¶²Éݤ˿¯¤µ¤ì¤Ê¤«¤Ã¤¿¡ª"); -#else - msg_print("You stand your ground!"); -#endif - + msg_print(_("しかし恐怖に侵されなかった!", "You stand your ground!")); obvious = TRUE; } else @@ -1370,27 +1167,21 @@ bool make_attack_normal(int m_idx) /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead) break; /* Increase "paralyzed" */ - if (p_ptr->free_act) + if (CHECK_MULTISHADOW()) { -#ifdef JP - msg_print("¤·¤«¤·¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"); -#else - msg_print("You are unaffected!"); -#endif - + /* Do nothing */ + } + else if (p_ptr->free_act) + { + msg_print(_("しかし効果がなかった!", "You are unaffected!")); obvious = TRUE; } else if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav) { -#ifdef JP - msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); -#else - msg_print("You resist the effects!"); -#endif - + msg_print(_("しかし効力を跳ね返した!", "You resist the effects!")); obvious = TRUE; } else @@ -1415,7 +1206,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_STR)) obvious = TRUE; @@ -1428,7 +1219,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_INT)) obvious = TRUE; @@ -1441,7 +1232,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_WIS)) obvious = TRUE; @@ -1454,7 +1245,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_DEX)) obvious = TRUE; @@ -1467,7 +1258,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_CON)) obvious = TRUE; @@ -1480,7 +1271,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stat) */ if (do_dec_stat(A_CHR)) obvious = TRUE; @@ -1493,7 +1284,7 @@ bool make_attack_normal(int m_idx) /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Damage (stats) */ if (do_dec_stat(A_STR)) obvious = TRUE; @@ -1520,7 +1311,7 @@ bool make_attack_normal(int m_idx) /* Radius 8 earthquake centered at the monster */ if (damage > 23 || explode) { - earthquake(m_ptr->fy, m_ptr->fx, 8); + earthquake_aux(m_ptr->fy, m_ptr->fx, 8, m_idx); } break; @@ -1528,197 +1319,65 @@ bool make_attack_normal(int m_idx) case RBE_EXP_10: { + s32b d = damroll(10, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; + /* Obvious */ obvious = TRUE; /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - if (p_ptr->prace == RACE_ANDROID) - { - } - else if (p_ptr->hold_life && (randint0(100) < 95)) - { -#ifdef JP - msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª"); -#else - msg_print("You keep hold of your life force!"); -#endif - - } - else - { - s32b d = damroll(10, 6) + (p_ptr->exp/100) * MON_DRAIN_LIFE; - if (p_ptr->hold_life) - { -#ifdef JP - msg_print("À¸Ì¿ÎϤò¾¯¤·µÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life slipping away!"); -#endif - - lose_exp(d/10); - } - else - { -#ifdef JP - msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life draining away!"); -#endif - - lose_exp(d); - } - } + (void)drain_exp(d, d / 10, 95); break; } case RBE_EXP_20: { + s32b d = damroll(20, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; + /* Obvious */ obvious = TRUE; /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; - - if (p_ptr->prace == RACE_ANDROID) - { - } - else if (p_ptr->hold_life && (randint0(100) < 90)) - { -#ifdef JP - msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª"); -#else - msg_print("You keep hold of your life force!"); -#endif - - } - else - { - s32b d = damroll(20, 6) + (p_ptr->exp/100) * MON_DRAIN_LIFE; - if (p_ptr->hold_life) - { -#ifdef JP - msg_print("À¸Ì¿ÎϤò¾¯¤·µÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life slipping away!"); -#endif - - lose_exp(d/10); - } - else - { -#ifdef JP - msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life draining away!"); -#endif + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - lose_exp(d); - } - } + (void)drain_exp(d, d / 10, 90); break; } case RBE_EXP_40: { + s32b d = damroll(40, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; + /* Obvious */ obvious = TRUE; /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; - - if (p_ptr->prace == RACE_ANDROID) - { - } - else if (p_ptr->hold_life && (randint0(100) < 75)) - { -#ifdef JP - msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª"); -#else - msg_print("You keep hold of your life force!"); -#endif - - } - else - { - s32b d = damroll(40, 6) + (p_ptr->exp/100) * MON_DRAIN_LIFE; - if (p_ptr->hold_life) - { -#ifdef JP - msg_print("À¸Ì¿ÎϤò¾¯¤·µÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life slipping away!"); -#endif - - lose_exp(d/10); - } - else - { -#ifdef JP - msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life draining away!"); -#endif + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - lose_exp(d); - } - } + (void)drain_exp(d, d / 10, 75); break; } case RBE_EXP_80: { + s32b d = damroll(80, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; + /* Obvious */ obvious = TRUE; /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; - - if (p_ptr->prace == RACE_ANDROID) - { - } - else if (p_ptr->hold_life && (randint0(100) < 50)) - { -#ifdef JP - msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª"); -#else - msg_print("You keep hold of your life force!"); -#endif - - } - else - { - s32b d = damroll(80, 6) + (p_ptr->exp/100) * MON_DRAIN_LIFE; - if (p_ptr->hold_life) - { -#ifdef JP - msg_print("À¸Ì¿ÎϤò¾¯¤·µÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life slipping away!"); -#endif - - lose_exp(d/10); - } - else - { -#ifdef JP - msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life draining away!"); -#endif + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - lose_exp(d); - } - } + (void)drain_exp(d, d / 10, 50); break; } @@ -1727,10 +1386,10 @@ bool make_attack_normal(int m_idx) /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; /* Take "poison" effect */ - if (!(p_ptr->resist_pois || p_ptr->oppose_pois)) + if (!(p_ptr->resist_pois || IS_OPPOSE_POIS())) { if (set_poisoned(p_ptr->poisoned + randint1(rlev) + 5)) { @@ -1745,12 +1404,7 @@ bool make_attack_normal(int m_idx) bool perm = one_in_(10); if (dec_stat(A_CON, randint1(10), perm)) { -#ifdef JP - msg_print("ɤ¬¤¢¤Ê¤¿¤ò¿ª¤ó¤Ç¤¤¤ëµ¤¤¬¤¹¤ë¡£"); -#else - msg_print("You feel strange sickness."); -#endif - + msg_print(_("病があなたを蝕んでいる気がする。", "You feel strange sickness.")); obvious = TRUE; } } @@ -1760,19 +1414,14 @@ bool make_attack_normal(int m_idx) case RBE_TIME: { if (explode) break; - if (!p_ptr->resist_time) + if (!p_ptr->resist_time && !CHECK_MULTISHADOW()) { switch (randint1(10)) { case 1: case 2: case 3: case 4: case 5: { if (p_ptr->prace == RACE_ANDROID) break; -#ifdef JP - msg_print("¿ÍÀ¸¤¬µÕÌá¤ê¤·¤¿µ¤¤¬¤¹¤ë¡£"); -#else - msg_print("You feel life has clocked back."); -#endif - + msg_print(_("人生が逆戻りした気がする。", "You feel life has clocked back.")); lose_exp(100 + (p_ptr->exp / 100) * MON_DRAIN_LIFE); break; } @@ -1784,12 +1433,12 @@ bool make_attack_normal(int m_idx) switch (stat) { #ifdef JP - case A_STR: act = "¶¯¤¯"; break; - case A_INT: act = "ÁïÌÀ¤Ç"; break; - case A_WIS: act = "¸­ÌÀ¤Ç"; break; - case A_DEX: act = "´ïÍѤÇ"; break; - case A_CON: act = "·ò¹¯¤Ç"; break; - case A_CHR: act = "Èþ¤·¤¯"; break; + case A_STR: act = "強く"; break; + case A_INT: act = "聡明で"; break; + case A_WIS: act = "賢明で"; break; + case A_DEX: act = "器用で"; break; + case A_CON: act = "健康で"; break; + case A_CHR: act = "美しく"; break; #else case A_STR: act = "strong"; break; case A_INT: act = "bright"; break; @@ -1801,13 +1450,7 @@ bool make_attack_normal(int m_idx) } -#ifdef JP - msg_format("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤É%s¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£", act); -#else - msg_format("You're not as %s as you used to be...", act); -#endif - - + msg_format(_("あなたは以前ほど%sなくなってしまった...。", "You're not as %s as you used to be..."), act); p_ptr->stat_cur[stat] = (p_ptr->stat_cur[stat] * 3) / 4; if (p_ptr->stat_cur[stat] < 3) p_ptr->stat_cur[stat] = 3; p_ptr->update |= (PU_BONUS); @@ -1816,12 +1459,7 @@ bool make_attack_normal(int m_idx) case 10: { -#ifdef JP - msg_print("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤ÉÎ϶¯¤¯¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£"); -#else - msg_print("You're not as powerful as you used to be..."); -#endif - + msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be...")); for (k = 0; k < 6; k++) { @@ -1837,64 +1475,44 @@ bool make_attack_normal(int m_idx) break; } - case RBE_EXP_VAMP: + case RBE_DR_LIFE: { + s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; + bool resist_drain; + /* Obvious */ obvious = TRUE; /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (death) break; + if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - if (p_ptr->prace == RACE_ANDROID) - { - } - else if (p_ptr->hold_life && (randint0(100) < 50)) - { -#ifdef JP -msg_print("¤·¤«¤·¼«¸Ê¤ÎÀ¸Ì¿ÎϤò¼é¤ê¤­¤Ã¤¿¡ª"); -#else - msg_print("You keep hold of your life force!"); -#endif + resist_drain = !drain_exp(d, d / 10, 50); - resist_drain = TRUE; + /* Heal the attacker? */ + if (p_ptr->mimic_form) + { + if (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING) + resist_drain = TRUE; } else { - s32b d = damroll(60, 6) + (p_ptr->exp / 100) * MON_DRAIN_LIFE; - if (p_ptr->hold_life) + switch (p_ptr->prace) { -#ifdef JP -msg_print("À¸Ì¿ÎϤ¬¾¯¤·ÂΤ«¤éÈ´¤±Íî¤Á¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life slipping away!"); -#endif - - lose_exp(d / 10); - } - else - { -#ifdef JP -msg_print("À¸Ì¿ÎϤ¬ÂΤ«¤éµÛ¤¤¼è¤é¤ì¤¿µ¤¤¬¤¹¤ë¡ª"); -#else - msg_print("You feel your life draining away!"); -#endif - - lose_exp(d); + case RACE_ZOMBIE: + case RACE_VAMPIRE: + case RACE_SPECTRE: + case RACE_SKELETON: + case RACE_DEMON: + case RACE_GOLEM: + case RACE_ANDROID: + resist_drain = TRUE; + break; } } - /* Heal the attacker? */ - if ((!(p_ptr->prace == RACE_ZOMBIE || - p_ptr->prace == RACE_VAMPIRE || - p_ptr->prace == RACE_SPECTRE || - p_ptr->prace == RACE_SKELETON || - p_ptr->prace == RACE_DEMON || - p_ptr->prace == RACE_GOLEM || - p_ptr->prace == RACE_ANDROID) || - !(mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING)) && - (damage > 5) && !(resist_drain)) + if ((damage > 5) && !resist_drain) { bool did_heal = FALSE; @@ -1909,14 +1527,9 @@ msg_print(" if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); /* Special message */ - if ((m_ptr->ml) && (did_heal)) + if (m_ptr->ml && did_heal) { -#ifdef JP -msg_format("%s¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£", m_name); -#else - msg_format("%^s appears healthier.", m_name); -#endif - + msg_format(_("%sは体力を回復したようだ。", "%^s appears healthier."), m_name); } } @@ -1924,24 +1537,74 @@ msg_format("%s } case RBE_DR_MANA: { - bool did_heal = FALSE; - /* Obvious */ obvious = TRUE; - do_cut = 0; + if (CHECK_MULTISHADOW()) + { + msg_print(_("攻撃は幻影に命中し、あなたには届かなかった。", "The attack hits Shadow, you are unharmed!")); + } + else + { + do_cut = 0; + + /* Take damage */ + p_ptr->csp -= damage; + if (p_ptr->csp < 0) + { + p_ptr->csp = 0; + p_ptr->csp_frac = 0; + } + + p_ptr->redraw |= (PR_MANA); + } + + /* Learn about the player */ + update_smart_learn(m_idx, DRS_MANA); + break; + } + case RBE_INERTIA: + { /* Take damage */ - p_ptr->csp -= damage; - if (p_ptr->csp < 0) + get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); + + if (p_ptr->is_dead) break; + + /* Decrease speed */ + if (CHECK_MULTISHADOW()) { - p_ptr->csp = 0; - p_ptr->csp_frac = 0; + /* Do nothing */ + } + else + { + if (set_slow((p_ptr->slow + 4 + randint0(rlev / 10)), FALSE)) + { + obvious = TRUE; + } } - if (m_ptr->hp < m_ptr->maxhp) did_heal = TRUE; + break; + } + case RBE_STUN: + { + /* Take damage */ + get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); + + if (p_ptr->is_dead) break; - p_ptr->redraw |= (PR_MANA); + /* Decrease speed */ + if (p_ptr->resist_sound || CHECK_MULTISHADOW()) + { + /* Do nothing */ + } + else + { + if (set_stun(p_ptr->stun + 10 + randint1(r_ptr->level / 4))) + { + obvious = TRUE; + } + } break; } @@ -1966,7 +1629,7 @@ msg_format("%s /* Handle cut */ if (do_cut) { - int k = 0; + int cut_plus = 0; /* Critical hit (zero if non-critical) */ tmp = monster_critical(d_dice, d_side, damage); @@ -1974,24 +1637,24 @@ msg_format("%s /* Roll for damage */ switch (tmp) { - case 0: k = 0; break; - case 1: k = randint1(5); break; - case 2: k = randint1(5) + 5; break; - case 3: k = randint1(20) + 20; break; - case 4: k = randint1(50) + 50; break; - case 5: k = randint1(100) + 100; break; - case 6: k = 300; break; - default: k = 500; break; + case 0: cut_plus = 0; break; + case 1: cut_plus = randint1(5); break; + case 2: cut_plus = randint1(5) + 5; break; + case 3: cut_plus = randint1(20) + 20; break; + case 4: cut_plus = randint1(50) + 50; break; + case 5: cut_plus = randint1(100) + 100; break; + case 6: cut_plus = 300; break; + default: cut_plus = 500; break; } /* Apply the cut */ - if (k) (void)set_cut(p_ptr->cut + k); + if (cut_plus) (void)set_cut(p_ptr->cut + cut_plus); } /* Handle stun */ if (do_stun) { - int k = 0; + int stun_plus = 0; /* Critical hit (zero if non-critical) */ tmp = monster_critical(d_dice, d_side, damage); @@ -1999,18 +1662,18 @@ msg_format("%s /* Roll for damage */ switch (tmp) { - case 0: k = 0; break; - case 1: k = randint1(5); break; - case 2: k = randint1(5) + 10; break; - case 3: k = randint1(10) + 20; break; - case 4: k = randint1(15) + 30; break; - case 5: k = randint1(20) + 40; break; - case 6: k = 80; break; - default: k = 150; break; + case 0: stun_plus = 0; break; + case 1: stun_plus = randint1(5); break; + case 2: stun_plus = randint1(5) + 10; break; + case 3: stun_plus = randint1(10) + 20; break; + case 4: stun_plus = randint1(15) + 30; break; + case 5: stun_plus = randint1(20) + 40; break; + case 6: stun_plus = 80; break; + default: stun_plus = 150; break; } /* Apply the stun */ - if (k) (void)set_stun(p_ptr->stun + k); + if (stun_plus) (void)set_stun(p_ptr->stun + stun_plus); } if (explode) @@ -2026,9 +1689,9 @@ msg_format("%s if (touched) { - if (p_ptr->sh_fire && alive && !death) + if (p_ptr->sh_fire && alive && !p_ptr->is_dead) { - if (!(r_ptr->flags3 & RF3_IM_FIRE)) + if (!(r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) { int dam = damroll(2, 6); @@ -2036,9 +1699,9 @@ msg_format("%s dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤ÏÆÍÁ³Ç®¤¯¤Ê¤Ã¤¿¡ª", m_name); + msg_format("%^sは突然熱くなった!", m_name); if (mon_take_hit(m_idx, dam, &fear, - "¤Ï³¥¤Î»³¤Ë¤Ê¤Ã¤¿¡£")) + "は灰の山になった。")) #else msg_format("%^s is suddenly very hot!", m_name); @@ -2053,14 +1716,14 @@ msg_format("%s } else { - if (m_ptr->ml) - r_ptr->r_flags3 |= RF3_IM_FIRE; + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK); } } - if (p_ptr->sh_elec && alive && !death) + if (p_ptr->sh_elec && alive && !p_ptr->is_dead) { - if (!(r_ptr->flags3 & RF3_IM_ELEC)) + if (!(r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)) { int dam = damroll(2, 6); @@ -2068,9 +1731,9 @@ msg_format("%s dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤ÏÅÅ·â¤ò¤¯¤é¤Ã¤¿¡ª", m_name); + msg_format("%^sは電撃をくらった!", m_name); if (mon_take_hit(m_idx, dam, &fear, - "¤Ïdz¤¨³Ì¤Î»³¤Ë¤Ê¤Ã¤¿¡£")) + "は燃え殻の山になった。")) #else msg_format("%^s gets zapped!", m_name); @@ -2085,14 +1748,14 @@ msg_format("%s } else { - if (m_ptr->ml) - r_ptr->r_flags3 |= RF3_IM_ELEC; + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK); } } - if (p_ptr->sh_cold && alive && !death) + if (p_ptr->sh_cold && alive && !p_ptr->is_dead) { - if (!(r_ptr->flags3 & RF3_IM_COLD)) + if (!(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)) { int dam = damroll(2, 6); @@ -2100,9 +1763,9 @@ msg_format("%s dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤ÏÎ䵤¤ò¤¯¤é¤Ã¤¿¡ª", m_name); + msg_format("%^sは冷気をくらった!", m_name); if (mon_take_hit(m_idx, dam, &fear, - "¤ÏÅà¤ê¤Ä¤¤¤¿¡£")) + "は凍りついた。")) #else msg_format("%^s is very cold!", m_name); @@ -2117,15 +1780,15 @@ msg_format("%s } else { - if (m_ptr->ml) - r_ptr->r_flags3 |= RF3_IM_COLD; + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK); } } /* by henkma */ - if (p_ptr->dustrobe && alive && !death) + if (p_ptr->dustrobe && alive && !p_ptr->is_dead) { - if (!(r_ptr->flags4 & RF4_BR_SHAR)) + if (!(r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK)) { int dam = damroll(2, 6); @@ -2133,41 +1796,83 @@ msg_format("%s dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤Ï¶À¤ÎÇËÊÒ¤ò¤¯¤é¤Ã¤¿¡ª", m_name); + msg_format("%^sは鏡の破片をくらった!", m_name); if (mon_take_hit(m_idx, dam, &fear, - "¤Ï¥º¥¿¥º¥¿¤Ë¤Ê¤Ã¤¿¡£")) + "はズタズタになった。")) #else msg_format("%^s gets zapped!", m_name); if (mon_take_hit(m_idx, dam, &fear, " had torn to pieces.")) #endif - { blinked = FALSE; alive = FALSE; } } - if( cave[py][px].feat == FEAT_MIRROR ){ - teleport_player(10); + else + { + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_RES_SHAR_MASK); + } + + if (is_mirror_grid(&cave[p_ptr->y][p_ptr->x])) + { + teleport_player(10, 0L); } } - if (p_ptr->tim_sh_holy && alive && !death) + if (p_ptr->tim_sh_holy && alive && !p_ptr->is_dead) { if (r_ptr->flags3 & RF3_EVIL) { + if (!(r_ptr->flagsr & RFR_RES_ALL)) + { + int dam = damroll(2, 6); + + /* Modify the damage */ + dam = mon_damage_mod(m_ptr, dam, FALSE); + +#ifdef JP + msg_format("%^sは聖なるオーラで傷ついた!", m_name); + if (mon_take_hit(m_idx, dam, &fear, + "は倒れた。")) +#else + msg_format("%^s is injured by holy power!", m_name); + + if (mon_take_hit(m_idx, dam, &fear, + " is destroyed.")) +#endif + { + blinked = FALSE; + alive = FALSE; + } + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flags3 |= RF3_EVIL; + } + else + { + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= RFR_RES_ALL; + } + } + } + + if (p_ptr->tim_sh_touki && alive && !p_ptr->is_dead) + { + if (!(r_ptr->flagsr & RFR_RES_ALL)) + { int dam = damroll(2, 6); /* Modify the damage */ dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤ÏÀ»¤Ê¤ë¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name); + msg_format("%^sが鋭い闘気のオーラで傷ついた!", m_name); if (mon_take_hit(m_idx, dam, &fear, - "¤ÏÅݤ줿¡£")) + "は倒れた。")) #else - msg_format("%^s is injured by holy power!", m_name); + msg_format("%^s is injured by the Force", m_name); if (mon_take_hit(m_idx, dam, &fear, " is destroyed.")) @@ -2177,32 +1882,70 @@ msg_format("%s blinked = FALSE; alive = FALSE; } - if (m_ptr->ml) - r_ptr->r_flags3 |= RF3_EVIL; + } + else + { + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= RFR_RES_ALL; } } - if (p_ptr->tim_sh_touki && alive && !death) + if (hex_spelling(HEX_SHADOW_CLOAK) && alive && !p_ptr->is_dead) { - int dam = damroll(2, 6); + int dam = 1; + object_type *o_armed_ptr = &inventory[INVEN_RARM]; + + if (!(r_ptr->flagsr & RFR_RES_ALL || r_ptr->flagsr & RFR_RES_DARK)) + { + if (o_armed_ptr->k_idx) + { + int basedam = ((o_armed_ptr->dd + p_ptr->to_dd[0]) * (o_armed_ptr->ds + p_ptr->to_ds[0] + 1)); + dam = basedam / 2 + o_armed_ptr->to_d + p_ptr->to_d[0]; + } - /* Modify the damage */ - dam = mon_damage_mod(m_ptr, dam, FALSE); + /* Cursed armor makes damages doubled */ + o_armed_ptr = &inventory[INVEN_BODY]; + if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr)) dam *= 2; + + /* Modify the damage */ + dam = mon_damage_mod(m_ptr, dam, FALSE); #ifdef JP - msg_format("%^s¤¬±Ô¤¤Æ®µ¤¤Î¥ª¡¼¥é¤Ç½ý¤Ä¤¤¤¿¡ª", m_name); - if (mon_take_hit(m_idx, dam, &fear, - "¤ÏÅݤ줿¡£")) + msg_format("影のオーラが%^sに反撃した!", m_name); + if (mon_take_hit(m_idx, dam, &fear, "は倒れた。")) #else - msg_format("%^s is injured by the Force", m_name); + msg_format("Enveloped shadows attack %^s.", m_name); - if (mon_take_hit(m_idx, dam, &fear, - " is destroyed.")) + if (mon_take_hit(m_idx, dam, &fear, " is destroyed.")) #endif - + { + blinked = FALSE; + alive = FALSE; + } + else /* monster does not dead */ + { + int j; + int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; + int typ[4][2] = { + { INVEN_HEAD, GF_OLD_CONF }, + { INVEN_LARM, GF_OLD_SLEEP }, + { INVEN_HANDS, GF_TURN_ALL }, + { INVEN_FEET, GF_OLD_SLOW } + }; + + /* Some cursed armours gives an extra effect */ + for (j = 0; j < 4; j++) + { + o_armed_ptr = &inventory[typ[j][0]]; + if ((o_armed_ptr->k_idx) && object_is_cursed(o_armed_ptr) && object_is_armour(o_armed_ptr)) + project(0, 0, m_ptr->fy, m_ptr->fx, (p_ptr->lev * 2), typ[j][1], flg, -1); + } + } + } + else { - blinked = FALSE; - alive = FALSE; + if (is_original_ap_and_seen(m_ptr)) + r_ptr->r_flagsr |= (RFR_RES_ALL | RFR_RES_DARK); } } } @@ -2231,15 +1974,15 @@ msg_format("%s if (m_ptr->ml) { /* Disturbing */ - disturb(1, 0); + disturb(1, 1); /* Message */ #ifdef JP - if (syouryaku) - msg_format("%s¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : ""); + if (abbreviate) + msg_format("%sかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : ""); else - msg_format("%s%^s¤Î¹¶·â¤ò¤«¤ï¤·¤¿¡£", (p_ptr->special_attack & ATTACK_SUIKEN) ? "´ñ̯¤ÊÆ°¤­¤Ç" : "", m_name); - syouryaku = 1;/*£²²óÌܰʹߤϾÊά */ + msg_format("%s%^sの攻撃をかわした。", (p_ptr->special_attack & ATTACK_SUIKEN) ? "奇妙な動きで" : "", m_name); + abbreviate = 1;/*2回目以降は省略 */ #else msg_format("%^s misses you.", m_name); #endif @@ -2253,7 +1996,7 @@ msg_format("%s /* Analyze "visible" monsters only */ - if (visible && !do_silly_attack) + if (is_original_ap_and_seen(m_ptr) && !do_silly_attack) { /* Count "obvious" attacks (and ones that cause damage) */ if (obvious || damage || (r_ptr->r_blows[ap_cnt] > 10)) @@ -2268,84 +2011,79 @@ msg_format("%s if (p_ptr->riding && damage) { - char m_name[80]; - monster_desc(m_name, &m_list[p_ptr->riding], 0); + char m_steed_name[80]; + monster_desc(m_steed_name, &m_list[p_ptr->riding], 0); if (rakuba((damage > 200) ? 200 : damage, FALSE)) { -#ifdef JP -msg_format("%^s¤«¤éÍî¤Á¤Æ¤·¤Þ¤Ã¤¿¡ª", m_name); -#else - msg_format("You have fallen from %s.", m_name); -#endif + msg_format(_("%^sから落ちてしまった!", "You have fallen from %s."), m_steed_name); } } + if (p_ptr->special_defense & NINJA_KAWARIMI) { - kawarimi(FALSE); - return TRUE; + if (kawarimi(FALSE)) return TRUE; } } - if (p_ptr->tim_eyeeye && get_damage > 0 && !death) + /* Hex - revenge damage stored */ + revenge_store(get_damage); + + if ((p_ptr->tim_eyeeye || hex_spelling(HEX_EYE_FOR_EYE)) + && get_damage > 0 && !p_ptr->is_dead) { #ifdef JP - msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name); + msg_format("攻撃が%s自身を傷つけた!", m_name); #else char m_name_self[80]; - + /* hisself */ - monster_desc(m_name_self, m_ptr, 0x23); + monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE); msg_format("The attack of %s has wounded %s!", m_name, m_name_self); #endif - project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL | PROJECT_NO_REF, -1); - set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE); + project(0, 0, m_ptr->fy, m_ptr->fx, get_damage, GF_MISSILE, PROJECT_KILL, -1); + if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE); } - - if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !death && m_ptr->ml && (p_ptr->csp > 7)) + if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7)) { - char m_name[80]; + char m_target_name[80]; monster_desc(m_name, m_ptr, 0); p_ptr->csp -= 7; -#ifdef JP - msg_format("%^s¤ËÈ¿·â¤·¤¿¡ª", m_name); -#else - msg_format("Your counterattack to %s!", m_name); -#endif + msg_format(_("%^sに反撃した!", "Your counterattack to %s!"), m_target_name); py_attack(m_ptr->fy, m_ptr->fx, HISSATSU_COUNTER); fear = FALSE; + + /* Redraw mana */ + p_ptr->redraw |= (PR_MANA); } /* Blink away */ - if (blinked && alive && !death) + if (blinked && alive && !p_ptr->is_dead) { -#ifdef JP - msg_print("Å¥ËÀ¤Ï¾Ð¤Ã¤Æƨ¤²¤¿¡ª"); -#else - msg_print("The thief flees laughing!"); -#endif - - teleport_away(m_idx, MAX_SIGHT * 2 + 5, FALSE); + if (teleport_barrier(m_idx)) + { + msg_print(_("泥棒は笑って逃げ...ようとしたがバリアに防がれた。", "The thief flees laughing...? But magic barrier obstructs it.")); + } + else + { + msg_print(_("泥棒は笑って逃げた!", "The thief flees laughing!")); + teleport_away(m_idx, MAX_SIGHT * 2 + 5, 0L); + } } /* Always notice cause of death */ - if (death && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena) + if (p_ptr->is_dead && (r_ptr->r_deaths < MAX_SHORT) && !p_ptr->inside_arena) { r_ptr->r_deaths++; } - if (m_ptr->ml && fear && alive && !death) + if (m_ptr->ml && fear && alive && !p_ptr->is_dead) { sound(SOUND_FLEE); -#ifdef JP - msg_format("%^s¤Ï¶²ÉݤÇƨ¤²½Ð¤·¤¿¡ª", m_name); -#else - msg_format("%^s flees in terror!", m_name); -#endif - + msg_format(_("%^sは恐怖で逃げ出した!", "%^s flees in terror!"), m_name); } if (p_ptr->special_defense & KATA_IAI)