X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmelee1.c;h=163e3de09798e572d0fab85aa39391ccf116e4ef;hb=e70ba712cf4b753e7d3876f60980c87cfeec09e3;hp=23ca9ace07f41518aab8ca417c2c38445de62cff;hpb=bc0b36b162786b37212bb99575020e94ed9380ee;p=hengband%2Fhengband.git diff --git a/src/melee1.c b/src/melee1.c index 23ca9ace0..163e3de09 100644 --- a/src/melee1.c +++ b/src/melee1.c @@ -13,6 +13,9 @@ #include "angband.h" #include "cmd-pet.h" +#include "player-damage.h" +#include "monsterrace-hook.h" +#include "melee.h" @@ -21,37 +24,34 @@ * Determine if the player "hits" a monster (normal combat). * @param chance 基本命中値 * @param ac モンスターのAC - * @param vis 目標を視界に捕らえているならばTRUEを指定 + * @param visible 目標を視界に捕らえているならばTRUEを指定 * @return 命中と判定された場合TRUEを返す * @note Always miss 5%, always hit 5%, otherwise random. */ -bool test_hit_norm(int chance, ARMOUR_CLASS ac, int vis) +bool test_hit_norm(HIT_RELIABILITY chance, ARMOUR_CLASS ac, bool visible) { - int k; - - /* Percentile dice */ - k = randint0(100); - - /* Hack -- Instant miss or hit */ - if (k < 10) return (k < 5); - - if (p_ptr->pseikaku == SEIKAKU_NAMAKE) - if (one_in_(20)) return (FALSE); - - /* Wimpy attack never hits */ - if (chance <= 0) return (FALSE); + if (!visible) chance = (chance + 1) / 2; + return hit_chance(chance, ac) >= randint1(100); +} - /* Penalize invisible targets */ - if (!vis) chance = (chance + 1) / 2; +/*! + * @brief モンスターへの命中率の計算 + * @param to_h 命中値 + * @param ac 敵AC + * @return 命中確率 + */ +PERCENTAGE hit_chance(HIT_RELIABILITY reli, ARMOUR_CLASS ac) +{ + PERCENTAGE chance = 5, chance_left = 90; - /* Power must defeat armor */ - if (randint0(chance) < (ac * 3 / 4)) return (FALSE); + if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance_left = (chance_left * 19 + 9) / 20; + chance += (100 - ((ac * 75) / reli)) * chance_left / 100; - /* Assume hit */ - return (TRUE); + return chance; } + /*! * @brief プレイヤーからモンスターへの打撃クリティカル判定 / * Critical hits (by player) Factor in weapon weight, total plusses, player melee bonus @@ -182,8 +182,6 @@ static int check_hit(int power, DEPTH level, int stun) return (FALSE); } - - /*! モンスターの侮辱行為メッセージテーブル / Hack -- possible "insult" messages */ static cptr desc_insult[] = { @@ -213,7 +211,6 @@ static cptr desc_insult[] = }; - /*! マゴットのぼやきメッセージテーブル / Hack -- possible "insult" messages */ static cptr desc_moan[] = { @@ -231,7 +228,6 @@ static cptr desc_moan[] = }; - /*! * @brief 敵オーラによるプレイヤーのダメージ処理(補助) * @param m_ptr オーラを持つモンスターの構造体参照ポインタ @@ -244,13 +240,13 @@ static cptr desc_moan[] = * @return なし */ static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_offset, int r_flags_offset, u32b aura_flag, - int(*dam_func)(HIT_POINT dam, cptr kb_str, int monspell, bool aura), cptr message) + HIT_POINT(*dam_func)(HIT_POINT dam, cptr kb_str, int monspell, bool aura), cptr message) { monster_race *r_ptr = &r_info[m_ptr->r_idx]; if ((atoffset(u32b, r_ptr, flags_offset) & aura_flag) && !immune) { - char mon_name[80]; + GAME_TEXT mon_name[MAX_NLEN]; int aura_damage = damroll(1 + (r_ptr->level / 26), 1 + (r_ptr->level / 17)); /* Hack -- Get the "died from" name */ @@ -269,9 +265,6 @@ static void touch_zap_player_aux(monster_type *m_ptr, bool immune, int flags_off } } - - - /*! * @brief 敵オーラによるプレイヤーのダメージ処理(メイン) * @param m_ptr オーラを持つモンスターの構造体参照ポインタ @@ -302,7 +295,7 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath) int n_weight = 0; monster_type *m_ptr = &m_list[m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; int dice_num, dice_side; @@ -354,10 +347,8 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath) /* Extract monster name (or "it") */ monster_desc(m_name, m_ptr, 0); - /* Calculate the "attack quality" */ - bonus = p_ptr->to_h_m; - bonus += (p_ptr->lev * 6 / 5); + bonus = p_ptr->to_h_m + (p_ptr->lev * 6 / 5); chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ)); /* Test for hit */ @@ -415,7 +406,6 @@ static void natural_attack(s16b m_idx, int attack, bool *fear, bool *mdeath) else { sound(SOUND_MISS); - msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name); } } @@ -446,7 +436,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b /* Access the weapon */ object_type *o_ptr = &inventory[INVEN_RARM + hand]; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; bool success_hit = FALSE; bool backstab = FALSE; @@ -549,7 +539,6 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b chance = (p_ptr->skill_thn + (bonus * BTH_PLUS_ADJ)); if (mode == HISSATSU_IAI) chance += 60; if (p_ptr->special_defense & KATA_KOUKIJIN) chance += 150; - if (p_ptr->sutemi) chance = MAX(chance * 3 / 2, chance + 60); vir = virtue_number(V_VALOUR); @@ -649,7 +638,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b if ((have_flag(flgs, TR_VAMPIRIC)) || (chaos_effect == 1) || (mode == HISSATSU_DRAIN) || hex_spelling(HEX_VAMP_BLADE)) { /* Only drain "living" monsters */ - if (monster_living(r_ptr)) + if (monster_living(m_ptr->r_idx)) can_drain = TRUE; else can_drain = FALSE; @@ -880,13 +869,13 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b drain_result += p_ptr->to_d[hand]; if ((mode == HISSATSU_SUTEMI) || (mode == HISSATSU_3DAN)) k *= 2; - if ((mode == HISSATSU_SEKIRYUKA) && !monster_living(r_ptr)) k = 0; + if ((mode == HISSATSU_SEKIRYUKA) && !monster_living(m_ptr->r_idx)) k = 0; if ((mode == HISSATSU_SEKIRYUKA) && !p_ptr->cut) k /= 2; /* No negative damage */ if (k < 0) k = 0; - if ((mode == HISSATSU_ZANMA) && !(!monster_living(r_ptr) && (r_ptr->flags3 & RF3_EVIL))) + if ((mode == HISSATSU_ZANMA) && !(!monster_living(m_ptr->r_idx) && (r_ptr->flags3 & RF3_EVIL))) { k = 0; } @@ -1171,7 +1160,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b if (target_ptr->hold_o_idx) { object_type *q_ptr = &o_list[target_ptr->hold_o_idx]; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; object_desc(o_name, q_ptr, OD_NAME_ONLY); q_ptr->held_m_idx = 0; @@ -1192,7 +1181,7 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b if ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE) && one_in_(3)) { - u32b flgs_aux[TR_FLAG_SIZE]; + BIT_FLAGS flgs_aux[TR_FLAG_SIZE]; sound(SOUND_HIT); @@ -1284,12 +1273,11 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b if (k < 0) k = 0; take_hit(DAMAGE_FORCE, k, _("死の大鎌", "Death scythe"), -1); - redraw_stuff(); + handle_stuff(); } else { sound(SOUND_MISS); - msg_format(_("ミス! %sにかわされた。", "You miss %s."), m_name); } } @@ -1317,7 +1305,6 @@ static void py_attack_aux(POSITION y, POSITION x, bool *fear, bool *mdeath, s16b } } - /*! * @brief プレイヤーの打撃処理メインルーチン * @param y 攻撃目標のY座標 @@ -1336,10 +1323,9 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode) cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; - /* Disturb the player */ - disturb(0, 1); + disturb(FALSE, TRUE); p_ptr->energy_use = 100; @@ -1513,7 +1499,6 @@ bool py_attack(POSITION y, POSITION x, BIT_FLAGS mode) return mdeath; } - /*! * @brief モンスターからプレイヤーへの打撃処理 / Attack the player via physical attacks. * @param m_idx 打撃を行うモンスターのID @@ -1534,9 +1519,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) object_type *o_ptr; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; char ddesc[80]; @@ -1545,7 +1530,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) bool explode = FALSE; bool do_silly_attack = (one_in_(2) && p_ptr->image); HIT_POINT get_damage = 0; - int abbreviate = 0; + int abbreviate = 0; // 2回目以降の省略表現フラグ /* Not allowed to attack */ if (r_ptr->flags1 & (RF1_NEVER_BLOW)) return (FALSE); @@ -1626,7 +1611,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (!effect || check_hit(power, rlev, MON_STUNNED(m_ptr))) { /* Always disturbing */ - disturb(1, 1); + disturb(TRUE, TRUE); /* Hack -- Apply "protection from evil" */ @@ -1639,11 +1624,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL; #ifdef JP - if (abbreviate) - msg_format("撃退した。"); - else - msg_format("%^sは撃退された。", m_name); - abbreviate = 1;/*2回目以降は省略 */ + if (abbreviate) msg_format("撃退した。"); + else msg_format("%^sは撃退された。", m_name); + abbreviate = 1; /*2回目以降は省略 */ #else msg_format("%^s is repelled.", m_name); #endif @@ -1909,15 +1892,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) else { if (one_in_(3)) -#ifdef JP - act = "は♪僕らは楽しい家族♪と歌っている。"; - else - act = "は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。"; -#else - act = "sings 'We are a happy family.'"; + act = _("は♪僕らは楽しい家族♪と歌っている。", "sings 'We are a happy family.'"); else - act = "sings 'I love you, you love me.'"; -#endif + act = _("は♪アイ ラブ ユー、ユー ラブ ミー♪と歌っている。", "sings 'I love you, you love me.'"); } sound(SOUND_SHOW); @@ -1936,11 +1913,11 @@ bool make_attack_normal(MONSTER_IDX m_idx) } #ifdef JP if (abbreviate == 0) - msg_format("%^sに%s", m_name, act); + msg_format("%^sに%s", m_name, act); else if (abbreviate == 1) - msg_format("%s", act); + msg_format("%s", act); else /* if (abbreviate == -1) */ - msg_format("%^s%s", m_name, act); + msg_format("%^s%s", m_name, act); abbreviate = 1;/*2回目以降は省略 */ #else msg_format("%^s %s%s", m_name, act, do_silly_attack ? " you." : ""); @@ -1957,23 +1934,18 @@ bool make_attack_normal(MONSTER_IDX m_idx) * Skip the effect when exploding, since the explosion * already causes the effect. */ - if (explode) - damage = 0; + if(explode) damage = 0; /* Apply appropriate damage */ switch (effect) { case 0: { - /* Hack -- Assume obvious */ obvious = TRUE; - - /* Hack -- No damage */ damage = 0; - break; } - case RBE_SUPERHURT: + case RBE_SUPERHURT: /* AC軽減あり / Player armor reduces total damage */ { if (((randint1(rlev*2+300) > (ac+200)) || one_in_(13)) && !CHECK_MULTISHADOW()) { @@ -1981,22 +1953,15 @@ bool make_attack_normal(MONSTER_IDX m_idx) msg_print(_("痛恨の一撃!", "It was a critical hit!")); tmp_damage = MAX(damage, tmp_damage*2); - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, tmp_damage, ddesc, -1); break; } } - case RBE_HURT: + case RBE_HURT: /* AC軽減あり / Player armor reduces total damage */ { - /* Obvious */ obvious = TRUE; - - /* Hack -- Player armor reduces total damage */ damage -= (damage * ((ac < 150) ? ac : 150) / 250); - - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - break; } @@ -2013,7 +1978,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) } } - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Learn about the player */ @@ -2033,12 +1997,11 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (apply_disenchant(0)) { /* Hack -- Update AC */ - update_stuff(); + update_creature(p_ptr); obvious = TRUE; } } - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Learn about the player */ @@ -2049,7 +2012,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_UN_POWER: { - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2081,7 +2043,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) msg_print(_("ザックからエネルギーが吸い取られた!", "Energy drains from your pack!")); - /* Obvious */ obvious = TRUE; /* Heal the monster */ @@ -2095,9 +2056,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) o_ptr->pval = 0; /* Combine / Reorder the pack */ - p_ptr->notice |= (PN_COMBINE | PN_REORDER); - - /* Window stuff */ + p_ptr->update |= (PU_COMBINE | PU_REORDER); p_ptr->window |= (PW_INVEN); break; @@ -2109,7 +2068,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_EAT_GOLD: { - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Confused monsters cannot steal successfully. -LM-*/ @@ -2117,7 +2075,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - /* Obvious */ obvious = TRUE; /* Saving throw (unless paralyzed) based on dex and level */ @@ -2160,7 +2117,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) /* Redraw gold */ p_ptr->redraw |= (PR_GOLD); - /* Window stuff */ p_ptr->window |= (PW_PLAYER); /* Blink away */ @@ -2172,7 +2128,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_EAT_ITEM: { - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Confused monsters cannot steal successfully. -LM-*/ @@ -2190,17 +2145,14 @@ bool make_attack_normal(MONSTER_IDX m_idx) /* Occasional "blink" anyway */ blinked = TRUE; - - /* Obvious */ obvious = TRUE; - break; } /* Find an item */ for (k = 0; k < 10; k++) { - s16b o_idx; + OBJECT_IDX o_idx; /* Pick an item */ i = (INVENTORY_IDX)randint0(INVEN_PACK); @@ -2214,17 +2166,12 @@ bool make_attack_normal(MONSTER_IDX m_idx) /* Skip artifacts */ if (object_is_artifact(o_ptr)) continue; - /* Get a description */ object_desc(o_name, o_ptr, OD_OMIT_PREFIX); #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)); + msg_format("%sour %s (%c) was stolen!", ((o_ptr->number > 1) ? "One of y" : "Y"), o_name, index_to_label(i)); #endif chg_virtue(V_SACRIFICE, 1); @@ -2274,7 +2221,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) inven_item_increase(i, -1); inven_item_optimize(i); - /* Obvious */ obvious = TRUE; /* Blink away */ @@ -2288,7 +2234,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_EAT_FOOD: { - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2299,7 +2244,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) /* Pick an item from the pack */ i = (INVENTORY_IDX)randint0(INVEN_PACK); - /* Get the item */ o_ptr = &inventory[i]; /* Skip non-objects */ @@ -2308,25 +2252,18 @@ bool make_attack_normal(MONSTER_IDX m_idx) /* Skip non-food objects */ if ((o_ptr->tval != TV_FOOD) && !((o_ptr->tval == TV_CORPSE) && (o_ptr->sval))) continue; - /* Get a description */ object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); #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)); + msg_format("%sour %s (%c) was eaten!", ((o_ptr->number > 1) ? "One of y" : "Y"), o_name, index_to_label(i)); #endif - /* Steal the items */ inven_item_increase(i, -1); inven_item_optimize(i); - /* Obvious */ obvious = TRUE; break; @@ -2339,8 +2276,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) { /* Access the lite */ o_ptr = &inventory[INVEN_LITE]; - - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2352,14 +2287,12 @@ bool make_attack_normal(MONSTER_IDX m_idx) o_ptr->xtra4 -= (s16b)(250 + randint1(250)); if (o_ptr->xtra4 < 1) o_ptr->xtra4 = 1; - /* Notice */ if (!p_ptr->blind) { msg_print(_("明かりが暗くなってしまった。", "Your light dims.")); obvious = TRUE; } - /* Window stuff */ p_ptr->window |= (PW_EQUIP); } @@ -2369,79 +2302,47 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_ACID: { if (explode) break; - /* Obvious */ obvious = TRUE; - msg_print(_("酸を浴びせられた!", "You are covered in acid!")); - - /* Special damage */ get_damage += acid_dam(damage, ddesc, -1, FALSE); - - /* Hack -- Update AC */ - update_stuff(); - - /* Learn about the player */ + update_creature(p_ptr); update_smart_learn(m_idx, DRS_ACID); - break; } case RBE_ELEC: { if (explode) break; - /* Obvious */ obvious = TRUE; - msg_print(_("電撃を浴びせられた!", "You are struck by electricity!")); - - /* Special damage */ get_damage += elec_dam(damage, ddesc, -1, FALSE); - - /* Learn about the player */ update_smart_learn(m_idx, DRS_ELEC); - break; } case RBE_FIRE: { if (explode) break; - /* Obvious */ obvious = TRUE; - msg_print(_("全身が炎に包まれた!", "You are enveloped in flames!")); - - /* Special damage */ get_damage += fire_dam(damage, ddesc, -1, FALSE); - - /* Learn about the player */ update_smart_learn(m_idx, DRS_FIRE); - break; } case RBE_COLD: { if (explode) break; - /* Obvious */ obvious = TRUE; - msg_print(_("全身が冷気で覆われた!", "You are covered with frost!")); - - /* Special damage */ get_damage += cold_dam(damage, ddesc, -1, FALSE); - - /* Learn about the player */ update_smart_learn(m_idx, DRS_COLD); - break; } case RBE_BLIND: { - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); - if (p_ptr->is_dead) break; /* Increase "blind" */ @@ -2467,7 +2368,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_CONFUSE: { if (explode) break; - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead) break; @@ -2489,7 +2389,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_TERRIFY: { - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead) break; @@ -2525,7 +2424,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_PARALYZE: { - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead) break; @@ -2564,12 +2462,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_STR: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_STR)) obvious = TRUE; break; @@ -2577,12 +2472,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_INT: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_INT)) obvious = TRUE; break; @@ -2590,12 +2482,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_WIS: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_WIS)) obvious = TRUE; break; @@ -2603,12 +2492,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_DEX: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_DEX)) obvious = TRUE; break; @@ -2616,12 +2502,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_CON: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_CON)) obvious = TRUE; break; @@ -2629,12 +2512,9 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_CHR: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; - - /* Damage (stat) */ if (do_dec_stat(A_CHR)) obvious = TRUE; break; @@ -2642,7 +2522,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_LOSE_ALL: { - /* Damage (physical) */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2660,13 +2539,11 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_SHATTER: { - /* Obvious */ obvious = TRUE; /* Hack -- Reduce damage based on the player armor class */ damage -= (damage * ((ac < 150) ? ac : 150) / 250); - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); /* Radius 8 earthquake centered at the monster */ @@ -2682,10 +2559,8 @@ bool make_attack_normal(MONSTER_IDX m_idx) { 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 (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2698,10 +2573,8 @@ bool make_attack_normal(MONSTER_IDX m_idx) { 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 (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2714,10 +2587,8 @@ bool make_attack_normal(MONSTER_IDX m_idx) { 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 (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2730,10 +2601,8 @@ bool make_attack_normal(MONSTER_IDX m_idx) { 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 (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2744,7 +2613,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) case RBE_DISEASE: { - /* Take some damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2822,7 +2690,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) { msg_print(_("あなたは以前ほど力強くなくなってしまった...。", "You're not as powerful as you used to be...")); - for (k = 0; k < 6; k++) + for (k = 0; k < A_MAX; k++) { p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8; if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3; @@ -2841,10 +2709,8 @@ bool make_attack_normal(MONSTER_IDX m_idx) 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 (p_ptr->is_dead || CHECK_MULTISHADOW()) break; @@ -2898,7 +2764,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) } case RBE_DR_MANA: { - /* Obvious */ obvious = TRUE; if (CHECK_MULTISHADOW()) @@ -2909,7 +2774,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) { do_cut = 0; - /* Take damage */ p_ptr->csp -= damage; if (p_ptr->csp < 0) { @@ -2927,7 +2791,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) } case RBE_INERTIA: { - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead) break; @@ -2949,7 +2812,6 @@ bool make_attack_normal(MONSTER_IDX m_idx) } case RBE_STUN: { - /* Take damage */ get_damage += take_hit(DAMAGE_ATTACK, damage, ddesc, -1); if (p_ptr->is_dead) break; @@ -3335,7 +3197,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (m_ptr->ml) { /* Disturbing */ - disturb(1, 1); + disturb(TRUE, TRUE); #ifdef JP if (abbreviate) @@ -3371,7 +3233,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) if (p_ptr->riding && damage) { - char m_steed_name[80]; + char m_steed_name[MAX_NLEN]; monster_desc(m_steed_name, &m_list[p_ptr->riding], 0); if (rakuba((damage > 200) ? 200 : damage, FALSE)) { @@ -3394,7 +3256,7 @@ bool make_attack_normal(MONSTER_IDX m_idx) #ifdef JP msg_format("攻撃が%s自身を傷つけた!", m_name); #else - char m_name_self[80]; + GAME_TEXT m_name_self[80]; /* hisself */ monster_desc(m_name_self, m_ptr, MD_PRON_VISIBLE | MD_POSSESSIVE | MD_OBJECTIVE); @@ -3407,15 +3269,13 @@ bool make_attack_normal(MONSTER_IDX m_idx) if ((p_ptr->counter || (p_ptr->special_defense & KATA_MUSOU)) && alive && !p_ptr->is_dead && m_ptr->ml && (p_ptr->csp > 7)) { - char m_target_name[80]; + char m_target_name[MAX_NLEN]; monster_desc(m_target_name, m_ptr, 0); p_ptr->csp -= 7; 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); }