X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmspells1.c;h=1ea98f1b4edf96fae813146e2c0fe01199d2f84a;hb=refs%2Ftags%2Fv2.1.3;hp=5d0c9e2cb0da6450d14aba1dc6858b805044f483;hpb=3e4319de33500689dee9dec2bd11dd62df554cc5;p=hengband%2Fhengband.git diff --git a/src/mspells1.c b/src/mspells1.c index 5d0c9e2cb..1ea98f1b4 100644 --- a/src/mspells1.c +++ b/src/mspells1.c @@ -432,7 +432,7 @@ bool raise_possible(monster_type *m_ptr) * no equally friendly monster is * between the attacker and target. */ -bool clean_shot(int y1, int x1, int y2, int x2, bool friend) +bool clean_shot(int y1, int x1, int y2, int x2, bool is_friend) { /* Must be the same as projectable() */ @@ -462,7 +462,7 @@ bool clean_shot(int y1, int x1, int y2, int x2, bool friend) if ((cave[y][x].m_idx > 0) && !((y == y2) && (x == x2))) { monster_type *m_ptr = &m_list[cave[y][x].m_idx]; - if (friend == is_pet(m_ptr)) + if (is_friend == is_pet(m_ptr)) { return (FALSE); } @@ -470,7 +470,7 @@ bool clean_shot(int y1, int x1, int y2, int x2, bool friend) /* Pets may not shoot through the character - TNB */ if (player_bold(y, x)) { - if (friend) return (FALSE); + if (is_friend) return (FALSE); } } @@ -484,7 +484,8 @@ bool clean_shot(int y1, int x1, int y2, int x2, bool friend) */ static void bolt(int m_idx, int typ, int dam_hp, int monspell, bool learnable) { - int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_PLAYER | PROJECT_REFLECTABLE; + int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_PLAYER; + if (typ != GF_ARROW) flg |= PROJECT_REFLECTABLE; /* Target the player with a bolt attack */ (void)project(m_idx, 0, py, px, dam_hp, typ, flg, (learnable ? monspell : -1)); @@ -834,7 +835,7 @@ static bool spell_dispel(byte spell) /* * Check should monster cast dispel spell. */ -static bool dispel_check(int m_idx) +bool dispel_check(int m_idx) { monster_type *m_ptr = &m_list[m_idx]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; @@ -924,7 +925,7 @@ static bool dispel_check(int m_idx) if (p_ptr->riding && (m_list[p_ptr->riding].mspeed < 135)) { - if (m_list[p_ptr->riding].fast) return (TRUE); + if (MON_FAST(&m_list[p_ptr->riding])) return (TRUE); } /* No need to cast dispel spell */ @@ -1049,7 +1050,7 @@ static int choose_attack_spell(int m_idx, byte spells[], byte num) } /* Hurt badly or afraid, attempt to flee */ - if (((m_ptr->hp < m_ptr->maxhp / 3) || m_ptr->monfear) && one_in_(2)) + if (((m_ptr->hp < m_ptr->maxhp / 3) || MON_MONFEAR(m_ptr)) && one_in_(2)) { /* Choose escape spell if possible */ if (escape_num) return (escape[randint0(escape_num)]); @@ -1137,7 +1138,7 @@ static int choose_attack_spell(int m_idx, byte spells[], byte num) } /* Cast globe of invulnerability if not already in effect */ - if (invul_num && !(m_ptr->invulner) && (randint0(100) < 50)) + if (invul_num && !m_ptr->mtimed[MTIMED_INVULNER] && (randint0(100) < 50)) { /* Choose Globe of Invulnerability */ return (invul[randint0(invul_num)]); @@ -1151,7 +1152,7 @@ static int choose_attack_spell(int m_idx, byte spells[], byte num) } /* Haste self if we aren't already somewhat hasted (rarely) */ - if (haste_num && (randint0(100) < 20) && !(m_ptr->fast)) + if (haste_num && (randint0(100) < 20) && !MON_FAST(m_ptr)) { /* Choose haste spell */ return (haste[randint0(haste_num)]); @@ -1192,6 +1193,48 @@ bool spell_is_inate(u16b spell) } +static bool adjacent_grid_check(monster_type *m_ptr, int *yp, int *xp, + int f_flag, bool (*path_check)(int, int, int, int)) +{ + int i; + int tonari; + static int tonari_y[4][8] = {{-1, -1, -1, 0, 0, 1, 1, 1}, + {-1, -1, -1, 0, 0, 1, 1, 1}, + { 1, 1, 1, 0, 0, -1, -1, -1}, + { 1, 1, 1, 0, 0, -1, -1, -1}}; + static int tonari_x[4][8] = {{-1, 0, 1, -1, 1, -1, 0, 1}, + { 1, 0, -1, 1, -1, 1, 0, -1}, + {-1, 0, 1, -1, 1, -1, 0, 1}, + { 1, 0, -1, 1, -1, 1, 0, -1}}; + + if (m_ptr->fy < py && m_ptr->fx < px) tonari = 0; + else if (m_ptr->fy < py) tonari = 1; + else if (m_ptr->fx < px) tonari = 2; + else tonari = 3; + + for (i = 0; i < 8; i++) + { + int next_x = *xp + tonari_x[tonari][i]; + int next_y = *yp + tonari_y[tonari][i]; + cave_type *c_ptr; + + /* Access the next grid */ + c_ptr = &cave[next_y][next_x]; + + /* Skip this feature */ + if (!cave_have_flag_grid(c_ptr, f_flag)) continue; + + if (path_check(m_ptr->fy, m_ptr->fx, next_y, next_x)) + { + *yp = next_y; + *xp = next_x; + return TRUE; + } + } + + return FALSE; +} + #define DO_SPELL_NONE 0 #define DO_SPELL_BR_LITE 1 #define DO_SPELL_BR_DISI 2 @@ -1268,11 +1311,16 @@ bool make_attack_spell(int m_idx) u32b mode = 0L; int s_num_6 = (easy_band ? 2 : 6); int s_num_4 = (easy_band ? 1 : 4); + int rad = 0; //For elemental spells /* Target location */ int x = px; int y = py; + /* Target location for lite breath */ + int x_br_lite = 0; + int y_br_lite = 0; + /* Summon count */ int count = 0; @@ -1291,8 +1339,12 @@ bool make_attack_spell(int m_idx) bool in_no_magic_dungeon = (d_info[dungeon_type].flags1 & DF1_NO_MAGIC) && dun_level && (!p_ptr->inside_quest || is_fixed_quest_idx(p_ptr->inside_quest)); + bool can_use_lite_area = FALSE; + + bool can_remember; + /* Cannot cast spells when confused */ - if (m_ptr->confused) + if (MON_CONFUSED(m_ptr)) { reset_target(m_ptr); return (FALSE); @@ -1319,6 +1371,33 @@ bool make_attack_spell(int m_idx) /* Check range */ if ((m_ptr->cdis > MAX_RANGE) && !m_ptr->target_y) return (FALSE); + /* Check path for lite breath */ + if (f4 & RF4_BR_LITE) + { + y_br_lite = y; + x_br_lite = x; + + if (los(m_ptr->fy, m_ptr->fx, y_br_lite, x_br_lite)) + { + feature_type *f_ptr = &f_info[cave[y_br_lite][x_br_lite].feat]; + + if (!have_flag(f_ptr->flags, FF_LOS)) + { + if (have_flag(f_ptr->flags, FF_PROJECT) && one_in_(2)) f4 &= ~(RF4_BR_LITE); + } + } + + /* Check path to next grid */ + else if (!adjacent_grid_check(m_ptr, &y_br_lite, &x_br_lite, FF_LOS, los)) f4 &= ~(RF4_BR_LITE); + + /* Don't breath lite to the wall if impossible */ + if (!(f4 & RF4_BR_LITE)) + { + y_br_lite = 0; + x_br_lite = 0; + } + } + /* Check path */ if (projectable(m_ptr->fy, m_ptr->fx, y, x)) { @@ -1347,8 +1426,7 @@ bool make_attack_spell(int m_idx) success = TRUE; } else if ((f4 & RF4_BR_LITE) && (m_ptr->cdis < MAX_RANGE/2) && - los(m_ptr->fy, m_ptr->fx, y, x) && - (one_in_(10) || (projectable(y, x, m_ptr->fy, m_ptr->fx) && one_in_(2)))) + los(m_ptr->fy, m_ptr->fx, y, x) && one_in_(5)) { do_spell = DO_SPELL_BR_LITE; success = TRUE; @@ -1357,53 +1435,14 @@ bool make_attack_spell(int m_idx) { int by = y, bx = x; get_project_point(m_ptr->fy, m_ptr->fx, &by, &bx, 0L); - if ((distance(by, bx, y, x) <= 3) && los(by, bx, y, x) && - (one_in_(10) || (projectable(y, x, m_ptr->fy, m_ptr->fx) && one_in_(2)))) + if ((distance(by, bx, y, x) <= 3) && los(by, bx, y, x) && one_in_(5)) { do_spell = DO_SPELL_BA_LITE; success = TRUE; } } - if (!success) - { - int i; - int tonari; - int tonari_y[4][8] = {{-1,-1,-1,0,0,1,1,1}, - {-1,-1,-1,0,0,1,1,1}, - {1,1,1,0,0,-1,-1,-1}, - {1,1,1,0,0,-1,-1,-1}}; - int tonari_x[4][8] = {{-1,0,1,-1,1,-1,0,1}, - {1,0,-1,1,-1,1,0,-1}, - {-1,0,1,-1,1,-1,0,1}, - {1,0,-1,1,-1,1,0,-1}}; - - if (m_ptr->fy < py && m_ptr->fx < px) tonari = 0; - else if (m_ptr->fy < py) tonari = 1; - else if (m_ptr->fx < px) tonari = 2; - else tonari = 3; - - for (i = 0; i < 8; i++) - { - int next_x = x + tonari_x[tonari][i]; - int next_y = y + tonari_y[tonari][i]; - cave_type *c_ptr; - - /* Access the next grid */ - c_ptr = &cave[next_y][next_x]; - - /* Skip door, rubble, wall, tree, mountain, etc. */ - if (!have_flag(f_flags_grid(c_ptr), FF_PROJECT)) continue; - - if (projectable(m_ptr->fy, m_ptr->fx, next_y, next_x)) - { - y = next_y; - x = next_x; - success = TRUE; - break; - } - } - } + if (!success) success = adjacent_grid_check(m_ptr, &y, &x, FF_PROJECT, projectable); if (!success) { @@ -1416,6 +1455,18 @@ bool make_attack_spell(int m_idx) f6 &= (RF6_INDIRECT_MASK); success = TRUE; } + + if (y_br_lite && x_br_lite && (m_ptr->cdis < MAX_RANGE/2) && one_in_(5)) + { + if (!success) + { + y = y_br_lite; + x = x_br_lite; + do_spell = DO_SPELL_BR_LITE; + success = TRUE; + } + else f4 |= (RF4_BR_LITE); + } } /* No spells */ @@ -1435,16 +1486,18 @@ bool make_attack_spell(int m_idx) f6 &= ~(RF6_NOMAGIC_MASK); } - if (!p_ptr->csp) + if (f6 & RF6_DARKNESS) { - f5 &= ~(RF5_DRAIN_MANA); - } + if ((p_ptr->pclass == CLASS_NINJA) && + !(r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) && + !(r_ptr->flags7 & RF7_DARK_MASK)) + can_use_lite_area = TRUE; - if ((p_ptr->pclass == CLASS_NINJA) && - ((r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || - (r_ptr->flags7 & RF7_DARK_MASK))) - { - f6 &= ~(RF6_DARKNESS); + if (!(r_ptr->flags2 & RF2_STUPID)) + { + if (d_info[dungeon_type].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS); + else if ((p_ptr->pclass == CLASS_NINJA) && !can_use_lite_area) f6 &= ~(RF6_DARKNESS); + } } if (in_no_magic_dungeon && !(r_ptr->flags2 & RF2_STUPID)) @@ -1493,6 +1546,8 @@ bool make_attack_spell(int m_idx) if (!(r_ptr->flags2 & RF2_STUPID)) { + if (!p_ptr->csp) f5 &= ~(RF5_DRAIN_MANA); + /* Check for a clean bolt shot */ if (((f4 & RF4_BOLT_MASK) || (f5 & RF5_BOLT_MASK) || @@ -1612,9 +1667,9 @@ bool make_attack_spell(int m_idx) /* Check for spell failure (inate attacks never fail) */ if (!spell_is_inate(thrown_spell) - && (in_no_magic_dungeon || (m_ptr->stunned && one_in_(2)) || (randint0(100) < failrate))) + && (in_no_magic_dungeon || (MON_STUNNED(m_ptr) && one_in_(2)) || (randint0(100) < failrate))) { - disturb(1, 0); + disturb(1, 1); /* Message */ #ifdef JP msg_format("%^s¤Ï¼öʸ¤ò¾§¤¨¤è¤¦¤È¤·¤¿¤¬¼ºÇÔ¤·¤¿¡£", m_name); @@ -1625,16 +1680,29 @@ bool make_attack_spell(int m_idx) return (TRUE); } + /* Hex: Anti Magic Barrier */ + if (!spell_is_inate(thrown_spell) && magic_barrier(m_idx)) + { +#ifdef JP + msg_format("È¿ËâË¡¥Ð¥ê¥¢¤¬%^s¤Î¼öʸ¤ò¤«¤­¾Ã¤·¤¿¡£", m_name); +#else + msg_format("Anti magic barrier cancels the spell which %^s casts."); +#endif + return (TRUE); + } + /* Projectable? */ direct = player_bold(y, x); + can_remember = is_original_ap_and_seen(m_ptr); + /* Cast the spell. */ switch (thrown_spell) { /* RF4_SHRIEK */ case 96+0: { - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤¬¤«¤ó¹â¤¤¶âÀÚ¤êÀ¼¤ò¤¢¤²¤¿¡£", m_name); #else @@ -1656,7 +1724,7 @@ msg_format("%^s case 96+2: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); else msg_format("%^s¤¬ËâÎϾõî¤Î¼öʸ¤òÇ°¤¸¤¿¡£", m_name); @@ -1664,96 +1732,8 @@ msg_format("%^s if (blind) msg_format("%^s mumbles powerfully.", m_name); else msg_format("%^s invokes a dispel magic.", m_name); #endif - set_fast(0, TRUE); - set_lightspeed(0, TRUE); - set_slow(0, TRUE); - set_shield(0, TRUE); - set_blessed(0, TRUE); - set_tsuyoshi(0, TRUE); - set_hero(0, TRUE); - set_shero(0, TRUE); - set_protevil(0, TRUE); - set_invuln(0, TRUE); - set_wraith_form(0, TRUE); - set_kabenuke(0, TRUE); - set_tim_res_nether(0, TRUE); - set_tim_res_time(0, TRUE); - /* by henkma */ - set_tim_reflect(0,TRUE); - set_multishadow(0,TRUE); - set_dustrobe(0,TRUE); - - set_tim_invis(0, TRUE); - set_tim_infra(0, TRUE); - set_tim_esp(0, TRUE); - set_tim_regen(0, TRUE); - set_tim_stealth(0, TRUE); - set_tim_ffall(0, TRUE); - set_tim_sh_touki(0, TRUE); - set_tim_sh_fire(0, TRUE); - set_tim_sh_holy(0, TRUE); - set_tim_eyeeye(0, TRUE); - set_magicdef(0, TRUE); - set_resist_magic(0, TRUE); - set_oppose_acid(0, TRUE); - set_oppose_elec(0, TRUE); - set_oppose_fire(0, TRUE); - set_oppose_cold(0, TRUE); - set_oppose_pois(0, TRUE); - set_ultimate_res(0, TRUE); - set_mimic(0, 0, TRUE); - set_ele_attack(0, 0); - set_ele_immune(0, 0); - /* Cancel glowing hands */ - if (p_ptr->special_attack & ATTACK_CONFUSE) - { - p_ptr->special_attack &= ~(ATTACK_CONFUSE); -#ifdef JP - msg_print("¼ê¤Îµ±¤­¤¬¤Ê¤¯¤Ê¤Ã¤¿¡£"); -#else - msg_print("Your hands stop glowing."); -#endif - - } - if ((p_ptr->pclass == CLASS_BARD) && (p_ptr->magic_num1[0])) - { - p_ptr->magic_num1[1] = p_ptr->magic_num1[0]; - p_ptr->magic_num1[0] = 0; -#ifdef JP - msg_print("²Î¤¬ÅÓÀڤ줿¡£"); -#else - msg_print("Your singing is interrupted."); -#endif - p_ptr->action = ACTION_NONE; - - /* Recalculate bonuses */ - p_ptr->update |= (PU_BONUS | PU_HP); - - /* Redraw map */ - p_ptr->redraw |= (PR_MAP | PR_STATUS | PR_STATE); - - /* Update monsters */ - p_ptr->update |= (PU_MONSTERS); - - /* Window stuff */ - p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); - - p_ptr->energy_need += ENERGY_NEED(); - } - if (p_ptr->riding) - { - monster_type *riding_ptr = &m_list[p_ptr->riding]; - if (riding_ptr->invulner) - { - riding_ptr->invulner = 0; - riding_ptr->energy_need += ENERGY_NEED(); - } - riding_ptr->fast = 0; - riding_ptr->slow = 0; - p_ptr->update |= PU_BONUS; - if (p_ptr->health_who == p_ptr->riding) p_ptr->redraw |= PR_HEALTH; - p_ptr->redraw |= (PR_UHEALTH); - } + dispel_player(); + if (p_ptr->riding) dispel_monster_status(p_ptr->riding); #ifdef JP if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)) @@ -1766,7 +1746,7 @@ msg_format("%^s /* RF4_ROCKET */ case 96+3: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¼Í¤Ã¤¿¡£", m_name); #else @@ -1790,7 +1770,7 @@ else msg_format("%^s case 96+4: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬´ñ̯¤Ê²»¤òȯ¤·¤¿¡£", m_name); #else @@ -1833,7 +1813,7 @@ else msg_format("%^s /* RF4_BR_ACID */ case 96+8: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1855,7 +1835,7 @@ else msg_format("%^s /* RF4_BR_ELEC */ case 96+9: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1877,7 +1857,7 @@ else msg_format("%^s /* RF4_BR_FIRE */ case 96+10: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1899,7 +1879,7 @@ else msg_format("%^s /* RF4_BR_COLD */ case 96+11: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1921,7 +1901,7 @@ else msg_format("%^s /* RF4_BR_POIS */ case 96+12: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1944,7 +1924,7 @@ else msg_format("%^s /* RF4_BR_NETH */ case 96+13: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1966,7 +1946,7 @@ else msg_format("%^s /* RF4_BR_LITE */ case 96+14: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -1980,7 +1960,7 @@ else msg_format("%^s #endif dam = ((m_ptr->hp / 6) > 400 ? 400 : (m_ptr->hp / 6)); - breath(y, x, m_idx, GF_LITE, dam,0, TRUE, MS_BR_LITE, learnable); + breath(y_br_lite, x_br_lite, m_idx, GF_LITE, dam,0, TRUE, MS_BR_LITE, learnable); update_smart_learn(m_idx, DRS_LITE); break; } @@ -1988,7 +1968,7 @@ else msg_format("%^s /* RF4_BR_DARK */ case 96+15: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2010,7 +1990,7 @@ else msg_format("%^s /* RF4_BR_CONF */ case 96+16: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2032,7 +2012,7 @@ else msg_format("%^s /* RF4_BR_SOUN */ case 96+17: { - disturb(1, 0); + disturb(1, 1); if (m_ptr->r_idx == MON_JAIAN) #ifdef JP msg_format("¡Ö¥Ü¥©¥¨¡Á¡Á¡Á¡Á¡Á¡Á¡×"); @@ -2060,7 +2040,7 @@ else msg_format("%^s /* RF4_BR_CHAO */ case 96+18: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2082,7 +2062,7 @@ else msg_format("%^s /* RF4_BR_DISE */ case 96+19: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2104,7 +2084,7 @@ else msg_format("%^s /* RF4_BR_NEXU */ case 96+20: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2126,7 +2106,7 @@ else msg_format("%^s /* RF4_BR_TIME */ case 96+21: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2147,7 +2127,7 @@ else msg_format("%^s /* RF4_BR_INER */ case 96+22: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2168,7 +2148,7 @@ else msg_format("%^s /* RF4_BR_GRAV */ case 96+23: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2189,7 +2169,7 @@ else msg_format("%^s /* RF4_BR_SHAR */ case 96+24: { - disturb(1, 0); + disturb(1, 1); if (m_ptr->r_idx == MON_BOTEI) #ifdef JP msg_format("¡Ö¥ÜÄë¥Ó¥ë¥«¥Ã¥¿¡¼¡ª¡ª¡ª¡×"); @@ -2217,7 +2197,7 @@ else msg_format("%^s /* RF4_BR_PLAS */ case 96+25: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2238,7 +2218,7 @@ else msg_format("%^s /* RF4_BR_WALL */ case 96+26: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2259,7 +2239,7 @@ else msg_format("%^s /* RF4_BR_MANA */ case 96+27: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2279,7 +2259,7 @@ else msg_format("%^s /* RF4_BA_NUKE */ case 96+28: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2301,7 +2281,7 @@ else msg_format("%^s /* RF4_BR_NUKE */ case 96+29: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2323,7 +2303,7 @@ else msg_format("%^s /* RF4_BA_CHAO */ case 96+30: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬¶²¤í¤·¤²¤Ë¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2345,7 +2325,7 @@ else msg_format("%^s /* RF4_BR_DISI */ case 96+31: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", m_name); #else @@ -2368,21 +2348,25 @@ else msg_format("%^s /* RF5_BA_ACID */ case 128+0: { - disturb(1, 0); + disturb(1, 1); #ifdef JP -if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); #else if (blind) msg_format("%^s mumbles.", m_name); -#endif - -#ifdef JP -else msg_format("%^s¤¬¥¢¥·¥Ã¥É¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); -#else else msg_format("%^s casts an acid ball.", m_name); #endif - - dam = (randint1(rlev * 3) + 15) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1); - breath(y, x, m_idx, GF_ACID, dam, 2, FALSE, MS_BALL_ACID, learnable); + if (r_ptr->flags2 & RF2_POWERFUL) + { + rad = 4; + dam = (rlev * 4) + 50 + damroll(10, 10); + } + else + { + rad = 2; + dam = (randint1(rlev * 3) + 15); + } + breath(y, x, m_idx, GF_ACID, dam, rad, FALSE, MS_BALL_ACID, learnable); update_smart_learn(m_idx, DRS_ACID); break; } @@ -2390,21 +2374,26 @@ else msg_format("%^s /* RF5_BA_ELEC */ case 128+1: { - disturb(1, 0); + int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 4 : 2; + disturb(1, 1); #ifdef JP -if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); #else if (blind) msg_format("%^s mumbles.", m_name); -#endif - -#ifdef JP -else msg_format("%^s¤¬¥µ¥ó¥À¡¼¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); -#else else msg_format("%^s casts a lightning ball.", m_name); #endif - - dam = (randint1(rlev * 3 / 2) + 8) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1); - breath(y, x, m_idx, GF_ELEC, dam, 2, FALSE, MS_BALL_ELEC, learnable); + if (r_ptr->flags2 & RF2_POWERFUL) + { + rad = 4; + dam = (rlev * 4) + 50 + damroll(10, 10); + } + else + { + rad = 2; + dam = (randint1(rlev * 3 / 2) + 8); + } + breath(y, x, m_idx, GF_ELEC, dam, rad, FALSE, MS_BALL_ELEC, learnable); update_smart_learn(m_idx, DRS_ELEC); break; } @@ -2412,7 +2401,8 @@ else msg_format("%^s /* RF5_BA_FIRE */ case 128+2: { - disturb(1, 0); + int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 4 : 2; + disturb(1, 1); if (m_ptr->r_idx == MON_ROLENTO) { @@ -2431,20 +2421,25 @@ else msg_format("%^s else { #ifdef JP -if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); #else if (blind) msg_format("%^s mumbles.", m_name); -#endif - -#ifdef JP -else msg_format("%^s¤¬¥Õ¥¡¥¤¥¢¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); -#else else msg_format("%^s casts a fire ball.", m_name); #endif } - dam = (randint1(rlev * 7 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1); - breath(y, x, m_idx, GF_FIRE, dam, 2, FALSE, MS_BALL_FIRE, learnable); + if (r_ptr->flags2 & RF2_POWERFUL) + { + rad = 4; + dam = (rlev * 4) + 50 + damroll(10, 10); + } + else + { + rad = 2; + dam = (randint1(rlev * 7 / 2) + 10); + } + breath(y, x, m_idx, GF_FIRE, dam, rad, FALSE, MS_BALL_FIRE, learnable); update_smart_learn(m_idx, DRS_FIRE); break; } @@ -2452,21 +2447,26 @@ else msg_format("%^s /* RF5_BA_COLD */ case 128+3: { - disturb(1, 0); + int rad = (r_ptr->flags2 & RF2_POWERFUL) ? 4 : 2; + disturb(1, 1); #ifdef JP -if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); #else if (blind) msg_format("%^s mumbles.", m_name); -#endif - -#ifdef JP -else msg_format("%^s¤¬¥¢¥¤¥¹¡¦¥Ü¡¼¥ë¤Î¼öʸ¤ò¾§¤¨¤¿¡£", m_name); -#else else msg_format("%^s casts a frost ball.", m_name); #endif - - dam = (randint1(rlev * 3 / 2) + 10) * ((r_ptr->flags2 & RF2_POWERFUL) ? 2 : 1); - breath(y, x, m_idx, GF_COLD, dam, 2, FALSE, MS_BALL_COLD, learnable); + if (r_ptr->flags2 & RF2_POWERFUL) + { + rad = 4; + dam = (rlev * 4) + 50 + damroll(10, 10); + } + else + { + rad = 2; + dam = (randint1(rlev * 3 / 2) + 10); + } + breath(y, x, m_idx, GF_COLD, dam, rad, FALSE, MS_BALL_COLD, learnable); update_smart_learn(m_idx, DRS_COLD); break; } @@ -2474,7 +2474,7 @@ else msg_format("%^s /* RF5_BA_POIS */ case 128+4: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2496,7 +2496,7 @@ else msg_format("%^s /* RF5_BA_NETH */ case 128+5: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2518,7 +2518,7 @@ else msg_format("%^s /* RF5_BA_WATE */ case 128+6: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2545,7 +2545,7 @@ msg_print(" /* RF5_BA_MANA */ case 128+7: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2566,7 +2566,7 @@ else msg_format("%^s /* RF5_BA_DARK */ case 128+8: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2589,7 +2589,7 @@ else msg_format("%^s case 128+9: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); dam = (randint1(rlev) / 2) + 1; breath(y, x, m_idx, GF_DRAIN_MANA, dam, 0, FALSE, MS_DRAIN_MANA, learnable); @@ -2601,7 +2601,7 @@ else msg_format("%^s case 128+10: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); if (!seen) { #ifdef JP @@ -2630,7 +2630,7 @@ msg_format("%^s case 128+11: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); if (!seen) { #ifdef JP @@ -2659,7 +2659,7 @@ msg_format("%^s case 128+12: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2681,7 +2681,7 @@ else msg_format("%^s case 128+13: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2703,7 +2703,7 @@ else msg_format("%^s case 128+14: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤òÂçÀ¼¤Ç¶«¤ó¤À¡£", m_name); #else @@ -2725,7 +2725,7 @@ else msg_format("%^s case 128+15: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬¡Ö¤ªÁ°¤Ï´û¤Ë»à¤ó¤Ç¤¤¤ë¡×¤È¶«¤ó¤À¡£", m_name); #else @@ -2747,7 +2747,7 @@ else msg_format("%^s case 128+16: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2771,7 +2771,7 @@ else msg_format("%^s case 128+17: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2795,7 +2795,7 @@ else msg_format("%^s case 128+18: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2819,7 +2819,7 @@ else msg_format("%^s case 128+19: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2842,7 +2842,7 @@ else msg_format("%^s /* RF5_BA_LITE */ case 128+20: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤òÎ϶¯¤¯¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2865,7 +2865,7 @@ else msg_format("%^s case 128+21: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2889,7 +2889,7 @@ else msg_format("%^s case 128+22: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2912,7 +2912,7 @@ else msg_format("%^s case 128+23: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2935,7 +2935,7 @@ else msg_format("%^s case 128+24: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2958,7 +2958,7 @@ else msg_format("%^s case 128+25: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -2982,7 +2982,7 @@ else msg_format("%^s case 128+26: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3005,7 +3005,7 @@ else msg_format("%^s case 128+27: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢¶²¤í¤·¤²¤Ê²»¤¬Ê¹¤³¤¨¤¿¡£", m_name); #else @@ -3049,7 +3049,7 @@ msg_print(" case 128+28: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3093,7 +3093,7 @@ msg_print(" case 128+29: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¯¤È¡¢Æ¬¤òǺ¤Þ¤¹²»¤¬¤·¤¿¡£", m_name); #else @@ -3137,7 +3137,7 @@ msg_print(" case 128+30: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤¬¤¢¤Ê¤¿¤Î¶ÚÎϤòµÛ¤¤¼è¤í¤¦¤È¤·¤¿¡ª", m_name); #else @@ -3175,7 +3175,7 @@ msg_print(" case 128+31: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3218,7 +3218,7 @@ msg_format(" /* RF6_HASTE */ case 160+0: { - disturb(1, 0); + disturb(1, 1); if (blind) { #ifdef JP @@ -3239,16 +3239,14 @@ msg_format("%^s } /* Allow quick speed increases to base+10 */ - if (!m_ptr->fast) + if (set_monster_fast(m_idx, MON_FAST(m_ptr) + 100)) { #ifdef JP -msg_format("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", m_name); + msg_format("%^s¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£", m_name); #else msg_format("%^s starts moving faster.", m_name); #endif } - m_ptr->fast = MIN(200, m_ptr->fast + 100); - if (p_ptr->riding == m_idx) p_ptr->update |= PU_BONUS; break; } @@ -3256,7 +3254,7 @@ msg_format("%^s case 160+1: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤¬<ÇËÌǤμê>¤òÊü¤Ã¤¿¡ª", m_name); #else @@ -3270,7 +3268,7 @@ msg_format("%^s /* RF6_HEAL */ case 160+2: { - disturb(1, 0); + disturb(1, 1); /* Message */ if (blind) @@ -3351,18 +3349,17 @@ msg_format("%^s if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); /* Cancel fear */ - if (m_ptr->monfear) + if (MON_MONFEAR(m_ptr)) { /* Cancel fear */ - m_ptr->monfear = 0; + (void)set_monster_monfear(m_idx, 0); /* Message */ #ifdef JP -msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name); + msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name); #else msg_format("%^s recovers %s courage.", m_name, m_poss); #endif - } break; } @@ -3370,7 +3367,7 @@ msg_format("%^s /* RF6_INVULNER */ case 160+3: { - disturb(1, 0); + disturb(1, 1); /* Message */ if (!seen) @@ -3392,81 +3389,55 @@ msg_format("%s } - if (!(m_ptr->invulner)) - m_ptr->invulner = randint1(4) + 4; - - if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH); - if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); + if (!MON_INVULNER(m_ptr)) (void)set_monster_invulner(m_idx, randint1(4) + 4, FALSE); break; } /* RF6_BLINK */ case 160+4: { - disturb(1, 0); + disturb(1, 1); + if (teleport_barrier(m_idx)) + { #ifdef JP -msg_format("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", m_name); + msg_format("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", m_name); #else - msg_format("%^s blinks away.", m_name); + msg_format("Magic barrier obstructs teleporting of %^s.", m_name); #endif - - teleport_away(m_idx, 10, FALSE); - p_ptr->update |= (PU_MONSTERS); + } + else + { +#ifdef JP + msg_format("%^s¤¬½Ö»þ¤Ë¾Ã¤¨¤¿¡£", m_name); +#else + msg_format("%^s blinks away.", m_name); +#endif + teleport_away(m_idx, 10, 0L); + p_ptr->update |= (PU_MONSTERS); + } break; } /* RF6_TPORT */ case 160+5: { - int i, oldfy, oldfx; - u32b flgs[TR_FLAG_SIZE]; - object_type *o_ptr; - - oldfy = m_ptr->fy; - oldfx = m_ptr->fx; - - disturb(1, 0); -#ifdef JP -msg_format("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", m_name); -#else - msg_format("%^s teleports away.", m_name); -#endif - - teleport_away(m_idx, MAX_SIGHT * 2 + 5, FALSE); - - if (los(py, px, oldfy, oldfx) && !world_monster) + disturb(1, 1); + if (teleport_barrier(m_idx)) { - for (i=INVEN_RARM;imuta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR)) - { #ifdef JP - if (get_check_strict("¤Ä¤¤¤Æ¤¤¤­¤Þ¤¹¤«¡©", CHECK_OKAY_CANCEL)) + msg_format("ËâË¡¤Î¥Ð¥ê¥¢¤¬%^s¤Î¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤷¤¿¡£", m_name); #else - if (get_check_strict("Do you follow it? ", CHECK_OKAY_CANCEL)) + msg_format("Magic barrier obstructs teleporting of %^s.", m_name); #endif - { - if (one_in_(3)) - { - teleport_player(200, TRUE); + } + else + { #ifdef JP - msg_print("¼ºÇÔ¡ª"); + msg_format("%^s¤¬¥Æ¥ì¥Ý¡¼¥È¤·¤¿¡£", m_name); #else - msg_print("Failed!"); + msg_format("%^s teleports away.", m_name); #endif - } - else teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE, FALSE); - p_ptr->energy_need += ENERGY_NEED(); - } - break; - } - } - } + teleport_away_followable(m_idx); } break; } @@ -3475,7 +3446,7 @@ msg_format("%^s case 160+6: { int who = 0; - disturb(1, 0); + disturb(1, 1); if(m_ptr->r_idx == MON_DIO) who = 1; else if(m_ptr->r_idx == MON_WONG) who = 3; dam = who; @@ -3488,7 +3459,7 @@ msg_format("%^s { int k; - disturb(1, 0); + disturb(1, 1); switch (m_ptr->r_idx) { case MON_OHMU: @@ -3583,7 +3554,7 @@ msg_format("%^s default: if (r_ptr->d_char == 'B') { - disturb(1, 0); + disturb(1, 1); if (one_in_(3) || !direct) { #ifdef JP @@ -3591,7 +3562,7 @@ msg_format("%^s #else msg_format("%^s suddenly go out of your sight!", m_name); #endif - teleport_away(m_idx, 10, FALSE); + teleport_away(m_idx, 10, TELEPORT_NONMAGICAL); p_ptr->update |= (PU_MONSTERS); } else @@ -3600,16 +3571,16 @@ msg_format("%^s bool fear; /* dummy */ #ifdef JP - msg_format("%^s¤¬¤¢¤Ê¤¿¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍ¤¿¡£", m_name); + msg_format("%^s¤¬¤¢¤Ê¤¿¤òÄϤó¤Ç¶õÃ椫¤éÅꤲÍî¤È¤·¤¿¡£", m_name); #else msg_format("%^s holds you, and drops from the sky.", m_name); #endif dam = damroll(4, 8); - teleport_player_to(m_ptr->fy, m_ptr->fx, FALSE, TRUE); + teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_NONMAGICAL | TELEPORT_PASSIVE); sound(SOUND_FALL); - if (p_ptr->ffall) + if (p_ptr->levitation) { #ifdef JP msg_print("¤¢¤Ê¤¿¤ÏÀŤ«¤ËÃåÃϤ·¤¿¡£"); @@ -3662,14 +3633,14 @@ msg_format("%^s case 160+8: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤¬¤¢¤Ê¤¿¤ò°ú¤­Ìᤷ¤¿¡£", m_name); #else msg_format("%^s commands you to return.", m_name); #endif - teleport_player_to(m_ptr->fy, m_ptr->fx, TRUE, TRUE); + teleport_player_to(m_ptr->fy, m_ptr->fx, TELEPORT_PASSIVE); learn_spell(MS_TELE_TO); break; } @@ -3678,7 +3649,7 @@ msg_format("%^s case 160+9: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤Ë¥Æ¥ì¥Ý¡¼¥È¤µ¤»¤é¤ì¤¿¡£", m_name); if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)) @@ -3688,7 +3659,7 @@ msg_format("%^s #endif learn_spell(MS_TELE_AWAY); - teleport_player(100, TRUE); + teleport_player_away(m_idx, 100); break; } @@ -3696,7 +3667,7 @@ msg_format("%^s case 160+10: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«´ñ̯¤Ê¸ÀÍÕ¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3740,7 +3711,7 @@ msg_print(" case 160+11: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3762,34 +3733,34 @@ else msg_format("%^s case 160+12: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP -if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); + if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else if (blind) msg_format("%^s mumbles.", m_name); #endif #ifdef JP -else if (p_ptr->pclass == CLASS_NINJA) msg_format("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", m_name); -else msg_format("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", m_name); + else if (can_use_lite_area) msg_format("%^s¤¬ÊÕ¤ê¤òÌÀ¤ë¤¯¾È¤é¤·¤¿¡£", m_name); + else msg_format("%^s¤¬°Å°Ç¤ÎÃæ¤Ç¼ê¤ò¿¶¤Ã¤¿¡£", m_name); #else - else if (p_ptr->pclass == CLASS_NINJA) - msg_format("%^s cast a spell to light up.", m_name); + else if (can_use_lite_area) msg_format("%^s cast a spell to light up.", m_name); else msg_format("%^s gestures in shadow.", m_name); #endif - learn_spell(MS_DARKNESS); - if (p_ptr->pclass == CLASS_NINJA) - (void)lite_area(0, 3); + if (can_use_lite_area) (void)lite_area(0, 3); else + { + learn_spell(MS_DARKNESS); (void)unlite_area(0, 3); + } break; } /* RF6_TRAPS */ case 160+13: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤Æ¼Ù°­¤ËÈù¾Ð¤ó¤À¡£", m_name); #else @@ -3811,7 +3782,7 @@ else msg_format("%^s case 160+14: { if (!direct) return (FALSE); - disturb(1, 0); + disturb(1, 1); #ifdef JP msg_format("%^s¤¬¤¢¤Ê¤¿¤Îµ­²±¤ò¾Ãµî¤·¤è¤¦¤È¤·¤Æ¤¤¤ë¡£", m_name); #else @@ -3844,7 +3815,7 @@ msg_print(" /* RF6_RAISE_DEAD */ case 160+15: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -3863,7 +3834,7 @@ else msg_format("%^s /* RF6_S_KIN */ case 160+16: { - disturb(1, 0); + disturb(1, 1); if (m_ptr->r_idx == MON_SERPENT || m_ptr->r_idx == MON_ZOMBI_SERPENT) { #ifdef JP @@ -3986,7 +3957,7 @@ else msg_format("%^s /* RF6_S_CYBER */ case 160+17: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4012,7 +3983,7 @@ if (blind && count) msg_print(" /* RF6_S_MONSTER */ case 160+18: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4041,7 +4012,7 @@ if (blind && count) msg_print(" /* RF6_S_MONSTERS */ case 160+19: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4070,7 +4041,7 @@ if (blind && count) msg_print("¿ /* RF6_S_ANT */ case 160+20: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4099,7 +4070,7 @@ if (blind && count) msg_print("¿ /* RF6_S_SPIDER */ case 160+21: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4128,7 +4099,7 @@ if (blind && count) msg_print("¿ /* RF6_S_HOUND */ case 160+22: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4157,7 +4128,7 @@ if (blind && count) msg_print("¿ /* RF6_S_HYDRA */ case 160+23: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4188,7 +4159,7 @@ if (blind && count) msg_print("¿ { int num = 1; - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4234,7 +4205,7 @@ if (blind) msg_print("¿ /* RF6_S_DEMON */ case 160+25: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4263,7 +4234,7 @@ if (blind && count) msg_print(" /* RF6_S_UNDEAD */ case 160+26: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4292,7 +4263,7 @@ if (blind && count) msg_print(" /* RF6_S_DRAGON */ case 160+27: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4321,7 +4292,7 @@ if (blind && count) msg_print(" /* RF6_S_HI_UNDEAD */ case 160+28: { - disturb(1, 0); + disturb(1, 1); if (((m_ptr->r_idx == MON_MORGOTH) || (m_ptr->r_idx == MON_SAURON) || (m_ptr->r_idx == MON_ANGMAR)) && ((r_info[MON_NAZGUL].cur_num+2) < r_info[MON_NAZGUL].max_num)) { @@ -4416,7 +4387,7 @@ msg_print(" /* RF6_S_HI_DRAGON */ case 160+29: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4448,7 +4419,7 @@ msg_print("¿ /* RF6_S_AMBERITES */ case 160+30: { - disturb(1, 0); + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4482,7 +4453,10 @@ msg_print(" /* RF6_S_UNIQUE */ case 160+31: { - disturb(1, 0); + bool uniques_are_summoned = FALSE; + int non_unique_type = SUMMON_HI_UNDEAD; + + disturb(1, 1); #ifdef JP if (blind) msg_format("%^s¤¬²¿¤«¤ò¤Ä¤Ö¤ä¤¤¤¿¡£", m_name); #else @@ -4499,28 +4473,26 @@ else msg_format("%^s { count += summon_specific(m_idx, y, x, rlev, SUMMON_UNIQUE, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); } - if (r_ptr->flags3 & RF3_GOOD) - { - for (k = count; k < s_num_4; k++) - { - count += summon_specific(m_idx, y, x, rlev, SUMMON_ANGEL, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); - } - } - else + + if (count) uniques_are_summoned = TRUE; + + if ((m_ptr->sub_align & (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) == (SUB_ALIGN_GOOD | SUB_ALIGN_EVIL)) + non_unique_type = 0; + else if (m_ptr->sub_align & SUB_ALIGN_GOOD) + non_unique_type = SUMMON_ANGEL; + + for (k = count; k < s_num_4; k++) { - for (k = count; k < s_num_4; k++) - { - count += summon_specific(m_idx, y, x, rlev, SUMMON_HI_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); - } + count += summon_specific(m_idx, y, x, rlev, non_unique_type, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE)); } + if (blind && count) { #ifdef JP -msg_print("¿¤¯¤ÎÎ϶¯¤¤¤â¤Î¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£"); + msg_format("¿¤¯¤Î%s¤¬´Ö¶á¤Ë¸½¤ì¤¿²»¤¬Ê¹¤³¤¨¤ë¡£", uniques_are_summoned ? "Î϶¯¤¤¤â¤Î" : "¤â¤Î"); #else - msg_print("You hear many powerful things appear nearby."); + msg_format("You hear many %s appear nearby.", uniques_are_summoned ? "powerful things" : "things"); #endif - } break; } @@ -4550,12 +4522,12 @@ msg_print("¿ p_ptr->mane_num++; new_mane = TRUE; - p_ptr->redraw |= (PR_MANE); + p_ptr->redraw |= (PR_IMITATION); } } /* Remember what the monster did to us */ - if (seen && is_original_ap(m_ptr)) + if (can_remember) { /* Inate spell */ if (thrown_spell < 32 * 4)