X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells1.c;h=e1887b2d40c0bb5f063476e0ef301962b25b1452;hb=da9572426d72b3397b5ace71bb195b7837e8404f;hp=2265e776e07946ec80d66fc54c50d1329041a6fc;hpb=47d1d9cf01bf57fc7f471920476d607a1c05fb4b;p=hengband%2Fhengband.git diff --git a/src/spells1.c b/src/spells1.c index 2265e776e..e1887b2d4 100644 --- a/src/spells1.c +++ b/src/spells1.c @@ -375,7 +375,7 @@ sint project_path(u16b *gp, int range, int y1, int x1, int y2, int x2, int flg) else if (!(flg & (PROJECT_PATH))) { /* Always stop at non-initial wall grids */ - if ((n > 0) && !have_flag(f_flags_bold(y, x), FF_PROJECT)) break; + if ((n > 0) && !cave_have_flag_bold(y, x, FF_PROJECT)) break; } /* Sometimes stop at non-initial monsters/players */ @@ -464,7 +464,7 @@ sint project_path(u16b *gp, int range, int y1, int x1, int y2, int x2, int flg) else if (!(flg & (PROJECT_PATH))) { /* Always stop at non-initial wall grids */ - if ((n > 0) && !have_flag(f_flags_bold(y, x), FF_PROJECT)) break; + if ((n > 0) && !cave_have_flag_bold(y, x, FF_PROJECT)) break; } /* Sometimes stop at non-initial monsters/players */ @@ -535,7 +535,7 @@ sint project_path(u16b *gp, int range, int y1, int x1, int y2, int x2, int flg) else if (!(flg & (PROJECT_PATH))) { /* Always stop at non-initial wall grids */ - if ((n > 0) && !have_flag(f_flags_bold(y, x), FF_PROJECT)) break; + if ((n > 0) && !cave_have_flag_bold(y, x, FF_PROJECT)) break; } /* Sometimes stop at non-initial monsters/players */ @@ -671,13 +671,10 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) #else msg_format("A tree %s", message); #endif - cave_set_feat(y, x, (one_in_(3) ? FEAT_DEEP_GRASS : FEAT_GRASS)); + cave_set_feat(y, x, one_in_(3) ? feat_brake : feat_grass); /* Observe */ if (c_ptr->info & (CAVE_MARK)) obvious = TRUE; - - /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE); } } @@ -808,13 +805,6 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) obvious = TRUE; } - /* Visibility change */ - if (have_flag(f_ptr->flags, FF_DOOR)) - { - /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE); - } - /* Destroy the feature */ cave_alter_feat(y, x, FF_TUNNEL); } @@ -887,7 +877,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) cave_alter_feat(y, x, FF_HURT_ROCK); /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE); + p_ptr->update |= (PU_FLOW); } break; @@ -903,14 +893,11 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) if (player_bold(y, x)) break; /* Create a closed door */ - cave_set_feat(y, x, FEAT_DOOR_HEAD + 0x00); + cave_set_feat(y, x, feat_door[DOOR_DOOR].closed); /* Observe */ if (c_ptr->info & (CAVE_MARK)) obvious = TRUE; - /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE); - break; } @@ -933,13 +920,11 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) if (player_bold(y, x)) break; /* Create a closed door */ - cave_set_feat(y, x, FEAT_TREES); + cave_set_feat(y, x, feat_tree); /* Observe */ if (c_ptr->info & (CAVE_MARK)) obvious = TRUE; - /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE); break; } @@ -951,7 +936,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) /* Create a glyph */ c_ptr->info |= CAVE_OBJECT; - c_ptr->mimic = FEAT_GLYPH; + c_ptr->mimic = feat_glyph; /* Notice */ note_spot(y, x); @@ -971,10 +956,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) if (player_bold(y, x)) break; /* Place a wall */ - cave_set_feat(y, x, FEAT_WALL); - - /* Update some things */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE); + cave_set_feat(y, x, feat_granite); break; } @@ -982,52 +964,46 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) case GF_LAVA_FLOW: { + /* Ignore permanent grid */ + if (have_flag(f_ptr->flags, FF_PERMANENT)) break; + /* Shallow Lava */ if (dam == 1) { - /* Ignore permanent grid */ - if (cave_perma_bold(y, x)) break; - /* Ignore grid without enough space */ - if (!have_flag(f_flags_bold(y, x), FF_FLOOR)) break; + if (!have_flag(f_ptr->flags, FF_FLOOR)) break; /* Place a shallow lava */ - cave_set_feat(y, x, FEAT_SHAL_LAVA); + cave_set_feat(y, x, feat_shallow_lava); } /* Deep Lava */ else if (dam) { - /* Ignore permanent grid */ - if (cave_perma_bold(y, x)) break; - /* Place a deep lava */ - cave_set_feat(y, x, FEAT_DEEP_LAVA); + cave_set_feat(y, x, feat_deep_lava); } break; } case GF_WATER_FLOW: { + /* Ignore permanent grid */ + if (have_flag(f_ptr->flags, FF_PERMANENT)) break; + /* Shallow Water */ if (dam == 1) { - /* Ignore permanent grid */ - if (cave_perma_bold(y, x)) break; - /* Ignore grid without enough space */ - if (!have_flag(f_flags_bold(y, x), FF_FLOOR)) break; + if (!have_flag(f_ptr->flags, FF_FLOOR)) break; - /* Place a shallow lava */ - cave_set_feat(y, x, FEAT_SHAL_WATER); + /* Place a shallow water */ + cave_set_feat(y, x, feat_shallow_water); } /* Deep Water */ else if (dam) { - /* Ignore permanent grid */ - if (cave_perma_bold(y, x)) break; - - /* Place a deep lava */ - cave_set_feat(y, x, FEAT_DEEP_WATER); + /* Place a deep water */ + cave_set_feat(y, x, feat_deep_water); } break; } @@ -1037,20 +1013,30 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) case GF_LITE: { /* Turn on the light */ - if (!(d_info[dungeon_type].flags1 & DF1_DARKNESS)) c_ptr->info |= (CAVE_GLOW); + if (!(d_info[dungeon_type].flags1 & DF1_DARKNESS)) + { + c_ptr->info |= (CAVE_GLOW); - /* Notice */ - note_spot(y, x); + /* Notice */ + note_spot(y, x); - /* Redraw */ - lite_spot(y, x); + /* Redraw */ + lite_spot(y, x); - /* Observe */ - if (player_can_see_bold(y, x)) obvious = TRUE; + update_local_illumination(y, x); - /* Mega-Hack -- Update the monster in the affected grid */ - /* This allows "spear of light" (etc) to work "correctly" */ - if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE); + /* Observe */ + if (player_can_see_bold(y, x)) obvious = TRUE; + + /* Mega-Hack -- Update the monster in the affected grid */ + /* This allows "spear of light" (etc) to work "correctly" */ + if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE); + + if (p_ptr->special_defense & NINJA_S_STEALTH) + { + if (player_bold(y, x)) set_superstealth(FALSE); + } + } break; } @@ -1059,30 +1045,54 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) case GF_DARK_WEAK: case GF_DARK: { - if (!p_ptr->inside_battle) - { - /* Notice */ - if (player_can_see_bold(y, x)) obvious = TRUE; + bool do_dark = !p_ptr->inside_battle && !is_mirror_grid(c_ptr); + int j; - /* Turn off the light. */ - if (!is_mirror_grid(c_ptr)) + /* Turn off the light. */ + if (do_dark) + { + if (dun_level || !is_daytime()) { - c_ptr->info &= ~(CAVE_GLOW); - - /* Hack -- Forget "boring" grids */ - if (!have_flag(f_ptr->flags, FF_REMEMBER)) + for (j = 0; j < 9; j++) { - /* Forget */ - c_ptr->info &= ~(CAVE_MARK); + int by = y + ddy_ddd[j]; + int bx = x + ddx_ddd[j]; - /* Notice */ - note_spot(y, x); + if (in_bounds2(by, bx)) + { + cave_type *cc_ptr = &cave[by][bx]; + + if (have_flag(f_info[get_feat_mimic(cc_ptr)].flags, FF_GLOW)) + { + do_dark = FALSE; + break; + } + } } + + if (!do_dark) break; + } + + c_ptr->info &= ~(CAVE_GLOW); + + /* Hack -- Forget "boring" grids */ + if (!have_flag(f_ptr->flags, FF_REMEMBER)) + { + /* Forget */ + c_ptr->info &= ~(CAVE_MARK); + + /* Notice */ + note_spot(y, x); } /* Redraw */ lite_spot(y, x); + update_local_illumination(y, x); + + /* Notice */ + if (player_can_see_bold(y, x)) obvious = TRUE; + /* Mega-Hack -- Update the monster in the affected grid */ /* This allows "spear of light" (etc) to work "correctly" */ if (c_ptr->m_idx) update_mon(c_ptr->m_idx, FALSE); @@ -1091,6 +1101,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) /* All done */ break; } + case GF_SHARDS: case GF_ROCKET: { @@ -1101,11 +1112,33 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) #else msg_print("The mirror was crashed!"); #endif + sound(SOUND_GLASS); remove_mirror(y, x); project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); } + + if (have_flag(f_ptr->flags, FF_GLASS) && !have_flag(f_ptr->flags, FF_PERMANENT) && (dam >= 50)) + { + /* Message */ + if (known && (c_ptr->info & CAVE_MARK)) + { +#ifdef JP + msg_format("%s¤¬³ä¤ì¤¿¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); +#else + msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); +#endif + sound(SOUND_GLASS); + } + + /* Destroy the wall */ + cave_alter_feat(y, x, FF_HURT_ROCK); + + /* Update some things */ + p_ptr->update |= (PU_FLOW); + } break; } + case GF_SOUND: { if (is_mirror_grid(c_ptr) && p_ptr->lev < 40) @@ -1115,16 +1148,38 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) #else msg_print("The mirror was crashed!"); #endif + sound(SOUND_GLASS); remove_mirror(y, x); project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); } + + if (have_flag(f_ptr->flags, FF_GLASS) && !have_flag(f_ptr->flags, FF_PERMANENT) && (dam >= 200)) + { + /* Message */ + if (known && (c_ptr->info & CAVE_MARK)) + { +#ifdef JP + msg_format("%s¤¬³ä¤ì¤¿¡ª", f_name + f_info[get_feat_mimic(c_ptr)].name); +#else + msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); +#endif + sound(SOUND_GLASS); + } + + /* Destroy the wall */ + cave_alter_feat(y, x, FF_HURT_ROCK); + + /* Update some things */ + p_ptr->update |= (PU_FLOW); + } break; } case GF_DISINTEGRATE: { - /* Destroy mirror */ - if (is_mirror_grid(c_ptr)) remove_mirror(y, x); + /* Destroy mirror/glyph */ + if (is_mirror_grid(c_ptr) || is_glyph_grid(c_ptr) || is_explosive_rune_grid(c_ptr)) + remove_mirror(y, x); /* Permanent features don't get effect */ /* But not protect monsters and other objects */ @@ -1133,7 +1188,7 @@ static bool project_f(int who, int r, int y, int x, int dam, int typ) cave_alter_feat(y, x, FF_HURT_DISI); /* Update some things -- similar to GF_KILL_WALL */ - p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE); + p_ptr->update |= (PU_FLOW); } break; } @@ -1210,7 +1265,7 @@ static bool project_o(int who, int r, int y, int x, int dam, int typ) object_flags(o_ptr, flgs); /* Check for artifact */ - if ((artifact_p(o_ptr) || o_ptr->art_name)) is_art = TRUE; + if (object_is_artifact(o_ptr)) is_art = TRUE; /* Analyze the type */ switch (typ) @@ -1405,7 +1460,7 @@ note_kill = " case GF_HOLY_FIRE: case GF_HELL_FIRE: { - if (cursed_p(o_ptr)) + if (object_is_cursed(o_ptr)) { do_kill = TRUE; #ifdef JP @@ -1444,7 +1499,7 @@ note_kill = " object_known(o_ptr); /* Notice */ - if (known && o_ptr->marked) + if (known && (o_ptr->marked & OM_FOUND)) { #ifdef JP msg_print("¥«¥Á¥Ã¤È²»¤¬¤·¤¿¡ª"); @@ -1489,7 +1544,7 @@ note_kill = " #ifdef JP note_kill = "À¸¤­Ê֤ä¿¡£"; #else - note_kill = "rivived."; + note_kill = " revived."; #endif } else if (!note_kill) @@ -1513,7 +1568,7 @@ note_kill = " if (do_kill) { /* Effect "observed" */ - if (known && o_ptr->marked) + if (known && (o_ptr->marked & OM_FOUND)) { obvious = TRUE; object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); @@ -1523,7 +1578,7 @@ note_kill = " if (is_art || ignore) { /* Observe the resist */ - if (known && o_ptr->marked) + if (known && (o_ptr->marked & OM_FOUND)) { #ifdef JP msg_format("%s¤Ï±Æ¶Á¤ò¼õ¤±¤Ê¤¤¡ª", @@ -1540,7 +1595,7 @@ msg_format("%s else { /* Describe if needed */ - if (known && o_ptr->marked && note_kill) + if (known && (o_ptr->marked & OM_FOUND) && note_kill) { #ifdef JP msg_format("%s¤Ï%s", o_name, note_kill); @@ -1628,13 +1683,14 @@ msg_format("%s * We attempt to return "TRUE" if the player saw anything "useful" happen. */ /* "flg" was added. */ -static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) +static bool project_m(int who, int r, int y, int x, int dam, int typ, int flg, bool see_s_msg) { int tmp; cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; + monster_type *caster_ptr = (who > 0) ? &m_list[who] : NULL; monster_race *r_ptr = &r_info[m_ptr->r_idx]; @@ -1642,8 +1698,9 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) /* Is the monster "seen"? */ bool seen = m_ptr->ml; + bool seen_msg = is_seen(m_ptr); - bool slept = (bool)(m_ptr->csleep > 0); + bool slept = (bool)MON_CSLEEP(m_ptr); /* Were the effects "obvious" (if seen)? */ bool obvious = FALSE; @@ -1651,9 +1708,6 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) /* Can the player know about this effect? */ bool known = ((m_ptr->cdis <= MAX_SIGHT) || p_ptr->inside_battle); - /* Can the player see the source of this effect? */ - bool see_s = ((who <= 0) || m_list[who].ml); - /* Were the effects "irrelevant"? */ bool skipped = FALSE; @@ -1701,7 +1755,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) int ty = m_ptr->fy; int tx = m_ptr->fx; - int caster_lev = (who > 0) ? r_info[m_list[who].r_idx].level : p_ptr->lev * 2; + int caster_lev = (who > 0) ? r_info[caster_ptr->r_idx].level : (p_ptr->lev * 2); /* Nobody here */ if (!c_ptr->m_idx) return (FALSE); @@ -1746,7 +1800,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -1765,7 +1819,7 @@ static bool project_m(int who, int r, int y, int x, int dam, int typ , int flg) note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_ACID) @@ -1777,7 +1831,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ACID); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ACID); } break; } @@ -1795,7 +1849,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_ELEC) @@ -1807,7 +1861,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ELEC); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_ELEC); } break; } @@ -1825,7 +1879,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_FIRE) @@ -1837,7 +1891,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_FIRE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_FIRE); } else if (r_ptr->flags3 & (RF3_HURT_FIRE)) { @@ -1848,7 +1902,7 @@ note = " #endif dam *= 2; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_FIRE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_FIRE); } break; } @@ -1866,7 +1920,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_COLD) @@ -1878,7 +1932,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD); } else if (r_ptr->flags3 & (RF3_HURT_COLD)) { @@ -1889,7 +1943,7 @@ note = " #endif dam *= 2; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD); } break; } @@ -1907,7 +1961,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_POIS) @@ -1919,7 +1973,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS); } break; } @@ -1937,7 +1991,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_IM_POIS) @@ -1949,7 +2003,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_POIS); } else if (one_in_(3)) do_poly = TRUE; break; @@ -1968,7 +2022,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags3 & RF3_GOOD) @@ -1980,7 +2034,7 @@ note = " note = " is hit hard."; #endif - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); } break; } @@ -1998,7 +2052,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags3 & RF3_GOOD) @@ -2010,7 +2064,7 @@ note = " note = " is immune."; #endif - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= RF3_GOOD; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_GOOD; } else if (r_ptr->flags3 & RF3_EVIL) { @@ -2021,7 +2075,7 @@ note = " note = " is hit hard."; #endif - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= RF3_EVIL; } else { @@ -2049,7 +2103,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -2068,7 +2122,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_PLAS) @@ -2080,7 +2134,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_PLAS); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_PLAS); } break; } @@ -2098,7 +2152,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_NETH) @@ -2112,7 +2166,7 @@ note = " #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); } else { @@ -2124,7 +2178,7 @@ note = " dam *= 3; dam /= randint1(6) + 6; } - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NETH); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NETH); } else if (r_ptr->flags3 & RF3_EVIL) { @@ -2135,7 +2189,7 @@ note = " note = " resists somewhat."; #endif - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); } break; } @@ -2153,7 +2207,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_WATE) @@ -2178,7 +2232,7 @@ note = " dam *= 3; dam /= randint1(6) + 6; } - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WATE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WATE); } break; } @@ -2196,7 +2250,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_CHAO) @@ -2208,7 +2262,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_CHAO); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_CHAO); } else if ((r_ptr->flags3 & RF3_DEMON) && one_in_(3)) { @@ -2219,7 +2273,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON); } else { @@ -2242,7 +2296,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_SHAR) @@ -2254,7 +2308,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR); } break; } @@ -2272,7 +2326,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_SHAR) @@ -2284,7 +2338,7 @@ note = " #endif dam /= 2; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SHAR); } break; } @@ -2303,7 +2357,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_SOUN) @@ -2315,7 +2369,7 @@ note = " #endif dam *= 2; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SOUN); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_SOUN); } else do_stun = (10 + randint1(15) + r) / (r + 1); break; @@ -2334,7 +2388,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags3 & RF3_NO_CONF) @@ -2346,7 +2400,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } else do_conf = (10 + randint1(15) + r) / (r + 1); break; @@ -2365,7 +2419,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_DISE) @@ -2377,7 +2431,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DISE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DISE); } break; } @@ -2395,7 +2449,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_NEXU) @@ -2407,7 +2461,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NEXU); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_NEXU); } break; } @@ -2425,7 +2479,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_WALL) @@ -2437,7 +2491,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_WALL); } else do_stun = (randint1(15) + r) / (r + 1); break; @@ -2456,7 +2510,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_INER) @@ -2468,7 +2522,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_INER); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_INER); } else { @@ -2481,7 +2535,7 @@ note = " /* Normal monsters slow down */ else { - if (!m_ptr->slow) + if (set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 50)) { #ifdef JP note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; @@ -2489,9 +2543,6 @@ note = " note = " starts moving slower."; #endif } - m_ptr->slow = MIN(200, m_ptr->slow + 50); - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); } } break; @@ -2510,7 +2561,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_TIME) @@ -2522,7 +2573,7 @@ note = " #endif dam *= 3; dam /= randint1(6) + 6; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_TIME); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_TIME); } else do_time = (dam + 1) / 2; break; @@ -2543,14 +2594,14 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_TELE) { if (r_ptr->flags1 & (RF1_UNIQUE)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£"; #else @@ -2561,7 +2612,7 @@ note = " } else if (r_ptr->level > randint1(100)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª"; #else @@ -2586,7 +2637,7 @@ note = " dam *= 3; dam /= randint1(6) + 6; do_dist = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_GRAV); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_GRAV); } else { @@ -2600,17 +2651,14 @@ note = " /* Normal monsters slow down */ else { - if (!m_ptr->slow) + if (set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 50)) { #ifdef JP -note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; + note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; #else note = " starts moving slower."; #endif } - m_ptr->slow = MIN(200, m_ptr->slow + 50); - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); } /* 2. stun */ @@ -2650,7 +2698,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -2670,12 +2718,12 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags3 & RF3_HURT_ROCK) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK); #ifdef JP note = "¤ÎÈéÉ椬¤¿¤À¤ì¤¿¡ª"; note_dies = "¤Ï¾øȯ¤·¤¿¡ª"; @@ -2697,9 +2745,9 @@ note_dies = " if (!(los(m_ptr->fy, m_ptr->fx, py, px))) { #ifdef JP - if (seen) msg_format("%s¤Ï¤¢¤Ê¤¿¤¬¸«¤¨¤Ê¤¤¤Î¤Ç±Æ¶Á¤µ¤ì¤Ê¤¤¡ª", m_name); + if (seen_msg) msg_format("%s¤Ï¤¢¤Ê¤¿¤¬¸«¤¨¤Ê¤¤¤Î¤Ç±Æ¶Á¤µ¤ì¤Ê¤¤¡ª", m_name); #else - if (seen) msg_format("%^s can't see you, and isn't affected!", m_name); + if (seen_msg) msg_format("%^s can't see you, and isn't affected!", m_name); #endif skipped = TRUE; break; @@ -2713,7 +2761,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags2 & RF2_EMPTY_MIND) @@ -2724,7 +2772,7 @@ note_dies = " #else note = " is immune!"; #endif - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); } else if ((r_ptr->flags2 & (RF2_STUPID | RF2_WEIRD_MIND)) || @@ -2756,7 +2804,7 @@ note_dies = " #endif /* Saving throw */ - if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav) + if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -2770,7 +2818,7 @@ note_dies = " /* Injure +/- confusion */ monster_desc(killer, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE); take_hit(DAMAGE_ATTACK, dam, killer, -1); /* has already been /3 */ - if (one_in_(4)) + if (one_in_(4) && !CHECK_MULTISHADOW()) { switch (randint1(4)) { @@ -2850,7 +2898,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags2 & RF2_EMPTY_MIND) @@ -2892,29 +2940,31 @@ note_dies = " #endif /* Saving throw */ - if (randint0(100 + r_ptr->level/2) < p_ptr->skill_sav) + if ((randint0(100 + r_ptr->level / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤¢¤Ê¤¿¤Ï¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); #else msg_print("You resist the effects!"); #endif - } else { /* Injure + mana drain */ monster_desc(killer, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE); + if (!CHECK_MULTISHADOW()) + { #ifdef JP - msg_print("ĶǽÎϥѥ¤òµÛ¤¤¤È¤é¤ì¤¿¡ª"); + msg_print("ĶǽÎϥѥ¤òµÛ¤¤¤È¤é¤ì¤¿¡ª"); #else - msg_print("Your psychic energy is drained!"); + msg_print("Your psychic energy is drained!"); #endif - p_ptr->csp -= damroll(5, dam) / 2; - if (p_ptr->csp < 0) p_ptr->csp = 0; - p_ptr->redraw |= PR_MANA; - p_ptr->window |= (PW_SPELL); + p_ptr->csp -= damroll(5, dam) / 2; + if (p_ptr->csp < 0) p_ptr->csp = 0; + p_ptr->redraw |= PR_MANA; + p_ptr->window |= (PW_SPELL); + } take_hit(DAMAGE_ATTACK, dam, killer, -1); /* has already been /3 */ } dam = 0; @@ -2924,10 +2974,12 @@ note_dies = " { int b = damroll(5, dam) / 4; #ifdef JP - msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¶ìÄˤòĶǽÎϥѥ¤ËÊÑ´¹¤·¤¿¡ª", m_name); + cptr str = (p_ptr->pclass == CLASS_MINDCRAFTER) ? "ĶǽÎϥѥ" : "ËâÎÏ"; + msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¶ìÄˤò%s¤ËÊÑ´¹¤·¤¿¡ª", m_name, str); #else - msg_format("You convert %s%s pain into psychic energy!", - m_name, (seen ? "'s" : "s")); + cptr str = (p_ptr->pclass == CLASS_MINDCRAFTER) ? "psychic energy" : "mana"; + msg_format("You convert %s%s pain into %s!", + m_name, (seen ? "'s" : "s"), str); #endif b = MIN(p_ptr->msp, p_ptr->csp + b); @@ -2957,7 +3009,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (one_in_(4)) @@ -2994,7 +3046,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -3013,7 +3065,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -3033,7 +3085,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt a saving throw */ @@ -3044,7 +3096,7 @@ note_dies = " /* Memorize a flag */ if (r_ptr->flags3 & RF3_NO_CONF) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } /* Resist */ @@ -3162,7 +3214,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } do_stun = (randint1(15) + 1) / (r + 1); @@ -3175,7 +3227,7 @@ note = " #endif dam /= 9; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_IM_COLD); } else if (r_ptr->flags3 & (RF3_HURT_COLD)) { @@ -3186,7 +3238,7 @@ note = " #endif dam *= 2; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_COLD); } break; } @@ -3205,23 +3257,20 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (!monster_living(r_ptr)) { - if (seen) + if (is_original_ap_and_seen(m_ptr)) { - if (is_original_ap(m_ptr)) - { - if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON); - if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD); - if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING); - } + if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON); + if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD); + if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING); } #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is unaffected!"; #endif @@ -3247,23 +3296,20 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (!monster_living(r_ptr)) { - if (seen) + if (is_original_ap_and_seen(m_ptr)) { - if (is_original_ap(m_ptr)) - { - if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON); - if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD); - if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING); - } + if (r_ptr->flags3 & RF3_DEMON) r_ptr->r_flags3 |= (RF3_DEMON); + if (r_ptr->flags3 & RF3_UNDEAD) r_ptr->r_flags3 |= (RF3_UNDEAD); + if (r_ptr->flags3 & RF3_NONLIVING) r_ptr->r_flags3 |= (RF3_NONLIVING); } #ifdef JP -note = "¤Ë¤Ï´°Á´¤ÊÂÑÀ­¤¬¤¢¤ë¡£"; + note = "¤Ë¤Ï´°Á´¤ÊÂÑÀ­¤¬¤¢¤ë¡£"; #else note = " is immune."; #endif @@ -3302,7 +3348,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt to polymorph (see below) */ @@ -3335,7 +3381,7 @@ note = " { if (seen) obvious = TRUE; - if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2))) + if ((p_ptr->inside_arena) || is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2))) { #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£"; @@ -3373,56 +3419,60 @@ note = " if (seen) obvious = TRUE; /* Wake up */ - m_ptr->csleep = 0; - - if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE); + (void)set_monster_csleep(c_ptr->m_idx, 0); if (m_ptr->maxhp < m_ptr->max_maxhp) { #ifdef JP -msg_format("%^s¤Î¶¯¤µ¤¬Ìá¤Ã¤¿¡£", m_name); + if (seen_msg) msg_format("%^s¤Î¶¯¤µ¤¬Ìá¤Ã¤¿¡£", m_name); #else - msg_format("%^s recovers %s vitality.", m_name, m_poss); + if (seen_msg) msg_format("%^s recovers %s vitality.", m_name, m_poss); #endif m_ptr->maxhp = m_ptr->max_maxhp; } - if (!dam) break; + + if (!dam) + { + /* Redraw (later) if needed */ + if (p_ptr->health_who == c_ptr->m_idx) p_ptr->redraw |= (PR_HEALTH); + if (p_ptr->riding == c_ptr->m_idx) p_ptr->redraw |= (PR_UHEALTH); + break; + } + + /* Fall through */ } case GF_OLD_HEAL: { if (seen) obvious = TRUE; /* Wake up */ - m_ptr->csleep = 0; - - if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE); - - if (m_ptr->stunned) + (void)set_monster_csleep(c_ptr->m_idx, 0); + if (MON_STUNNED(m_ptr)) { #ifdef JP -msg_format("%^s¤ÏÛ¯Û°¾õÂÖ¤«¤éΩ¤Áľ¤Ã¤¿¡£", m_name); + if (seen_msg) msg_format("%^s¤ÏÛ¯Û°¾õÂÖ¤«¤éΩ¤Áľ¤Ã¤¿¡£", m_name); #else - msg_format("%^s is no longer stunned.", m_name); + if (seen_msg) msg_format("%^s is no longer stunned.", m_name); #endif - m_ptr->stunned = 0; + (void)set_monster_stunned(c_ptr->m_idx, 0); } - if (m_ptr->confused) + if (MON_CONFUSED(m_ptr)) { #ifdef JP -msg_format("%^s¤Ïº®Í𤫤éΩ¤Áľ¤Ã¤¿¡£", m_name); + if (seen_msg) msg_format("%^s¤Ïº®Í𤫤éΩ¤Áľ¤Ã¤¿¡£", m_name); #else - msg_format("%^s is no longer confused.", m_name); + if (seen_msg) msg_format("%^s is no longer confused.", m_name); #endif - m_ptr->confused = 0; + (void)set_monster_confused(c_ptr->m_idx, 0); } - if (m_ptr->monfear) + if (MON_MONFEAR(m_ptr)) { #ifdef JP -msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name); + if (seen_msg) msg_format("%^s¤Ïͦµ¤¤ò¼è¤êÌᤷ¤¿¡£", m_name); #else - msg_format("%^s recovers %s courage.", m_name, m_poss); + if (seen_msg) msg_format("%^s recovers %s courage.", m_name, m_poss); #endif - m_ptr->monfear = 0; + (void)set_monster_monfear(c_ptr->m_idx, 0); } /* Heal */ @@ -3431,29 +3481,32 @@ msg_format("%^s /* No overflow */ if (m_ptr->hp > m_ptr->maxhp) m_ptr->hp = m_ptr->maxhp; - chg_virtue(V_VITALITY, 1); - - if (r_ptr->flags1 & RF1_UNIQUE) - chg_virtue(V_INDIVIDUALISM, 1); - - if (is_friendly(m_ptr)) - chg_virtue(V_HONOUR, 1); - else if (!(r_ptr->flags3 & RF3_EVIL)) - { - if (r_ptr->flags3 & RF3_GOOD) - chg_virtue(V_COMPASSION, 2); - else - chg_virtue(V_COMPASSION, 1); + if (!who) + { + chg_virtue(V_VITALITY, 1); + + if (r_ptr->flags1 & RF1_UNIQUE) + chg_virtue(V_INDIVIDUALISM, 1); + + if (is_friendly(m_ptr)) + chg_virtue(V_HONOUR, 1); + else if (!(r_ptr->flags3 & RF3_EVIL)) + { + if (r_ptr->flags3 & RF3_GOOD) + chg_virtue(V_COMPASSION, 2); + else + chg_virtue(V_COMPASSION, 1); + } + + if (r_ptr->flags3 & RF3_ANIMAL) + chg_virtue(V_NATURE, 1); } if (m_ptr->r_idx == MON_LEPER) { heal_leper = TRUE; - chg_virtue(V_COMPASSION, 5); + if (!who) chg_virtue(V_COMPASSION, 5); } - - if (r_ptr->flags3 & RF3_ANIMAL) - chg_virtue(V_NATURE, 1); /* Redraw (later) if needed */ if (p_ptr->health_who == c_ptr->m_idx) p_ptr->redraw |= (PR_HEALTH); @@ -3461,12 +3514,11 @@ msg_format("%^s /* Message */ #ifdef JP -note = "¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£"; + note = "¤ÏÂÎÎϤò²óÉü¤·¤¿¤è¤¦¤À¡£"; #else note = " looks healthier."; #endif - /* No "real" damage */ dam = 0; break; @@ -3479,23 +3531,22 @@ note = " if (seen) obvious = TRUE; /* Speed up */ - if (!m_ptr->fast) + if (set_monster_fast(c_ptr->m_idx, MON_FAST(m_ptr) + 100)) { #ifdef JP -note = "¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£"; + note = "¤ÎÆ°¤­¤¬Â®¤¯¤Ê¤Ã¤¿¡£"; #else note = " starts moving faster."; #endif } - m_ptr->fast = MIN(200, m_ptr->fast + 100); - - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); - if (r_ptr->flags1 & RF1_UNIQUE) - chg_virtue(V_INDIVIDUALISM, 1); - if (is_friendly(m_ptr)) - chg_virtue(V_HONOUR, 1); + if (!who) + { + if (r_ptr->flags1 & RF1_UNIQUE) + chg_virtue(V_INDIVIDUALISM, 1); + if (is_friendly(m_ptr)) + chg_virtue(V_HONOUR, 1); + } /* No "real" damage */ dam = 0; @@ -3516,7 +3567,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Powerful monsters can resist */ @@ -3535,18 +3586,14 @@ note = " /* Normal monsters slow down */ else { - if (!m_ptr->slow) + if (set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 50)) { #ifdef JP -note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; + note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; #else note = " starts moving slower."; #endif } - m_ptr->slow = MIN(200, m_ptr->slow + 50); - - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); } /* No "real" damage */ @@ -3568,7 +3615,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt a saving throw */ @@ -3579,7 +3626,7 @@ note = " /* Memorize a flag */ if (r_ptr->flags3 & RF3_NO_SLEEP) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP); } /* No obvious effect */ @@ -3622,7 +3669,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt a saving throw */ @@ -3668,7 +3715,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt a saving throw */ @@ -3727,7 +3774,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -3743,7 +3790,7 @@ note = " /* Memorize a flag */ if (r_ptr->flags3 & RF3_NO_CONF) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } /* Resist */ @@ -3814,7 +3861,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -3889,7 +3936,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -3965,7 +4012,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -3982,7 +4029,7 @@ note = " /* Memorize a flag */ if (r_ptr->flags3 & (RF3_NO_CONF)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } /* Resist */ @@ -4061,7 +4108,7 @@ msg_format("%s note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -4127,7 +4174,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Get confused later */ @@ -4141,7 +4188,7 @@ note = " /* Memorize a flag */ if (r_ptr->flags3 & (RF3_NO_CONF)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } /* Resist */ @@ -4174,7 +4221,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } do_stun = damroll((caster_lev / 20) + 3 , (dam)) + 1; @@ -4220,14 +4267,11 @@ note = " /* Hurt by light */ if (r_ptr->flags3 & (RF3_HURT_LITE)) { - if (seen) - { - /* Obvious effect */ - obvious = TRUE; + /* Obvious effect */ + if (seen) obvious = TRUE; - /* Memorize the effects */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); - } + /* Memorize the effects */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); /* Special effect */ #ifdef JP @@ -4265,7 +4309,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_LITE) @@ -4277,11 +4321,11 @@ note_dies = " #endif dam *= 2; dam /= (randint1(6)+6); - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_LITE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_LITE); } else if (r_ptr->flags3 & (RF3_HURT_LITE)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); #ifdef JP note = "¤Ï¸÷¤Ë¿È¤ò¤¹¤¯¤á¤¿¡ª"; note_dies = "¤Ï¸÷¤ò¼õ¤±¤Æ¤·¤Ü¤ó¤Ç¤·¤Þ¤Ã¤¿¡ª"; @@ -4309,7 +4353,7 @@ note_dies = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flagsr & RFR_RES_DARK) @@ -4321,7 +4365,7 @@ note_dies = " #endif dam *= 2; dam /= (randint1(6)+6); - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DARK); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DARK); } break; } @@ -4338,14 +4382,11 @@ note_dies = " /* Hurt by rock remover */ if (r_ptr->flags3 & (RF3_HURT_ROCK)) { - if (seen) - { - /* Notice effect */ - obvious = TRUE; + /* Notice effect */ + if (seen) obvious = TRUE; - /* Memorize the effects */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK); - } + /* Memorize the effects */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_ROCK); /* Cute little message */ #ifdef JP @@ -4381,7 +4422,7 @@ note_dies = " { if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else @@ -4392,7 +4433,7 @@ note = " } else if (r_ptr->level > randint1(100)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª"; #else @@ -4405,11 +4446,8 @@ note = " if (!resists_tele) { - if (seen) - { - obvious = TRUE; - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); - } + if (seen) obvious = TRUE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); do_dist = dam; } } @@ -4439,7 +4477,7 @@ note = " { if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else @@ -4450,7 +4488,7 @@ note = " } else if (r_ptr->level > randint1(100)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª"; #else @@ -4463,11 +4501,8 @@ note = " if (!resists_tele) { - if (seen) - { - obvious = TRUE; - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); - } + if (seen) obvious = TRUE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); do_dist = dam; } } @@ -4493,9 +4528,9 @@ note = " { if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is unaffected!"; #endif @@ -4504,9 +4539,9 @@ note = " } else if (r_ptr->level > randint1(100)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; #ifdef JP -note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª"; + note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡ª"; #else note = " resists!"; #endif @@ -4541,14 +4576,11 @@ note = " /* Only affect undead */ if (r_ptr->flags3 & (RF3_UNDEAD)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); /* Apply some fear */ do_fear = damroll(3, (dam / 2)) + 1; @@ -4558,7 +4590,7 @@ note = " { /* No obvious effect */ #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is unaffected!"; #endif @@ -4592,14 +4624,11 @@ note = " /* Only affect evil */ if (r_ptr->flags3 & (RF3_EVIL)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); /* Apply some fear */ do_fear = damroll(3, (dam / 2)) + 1; @@ -4609,7 +4638,7 @@ note = " { /* No obvious effect */ #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is unaffected!"; #endif @@ -4680,24 +4709,20 @@ note = " /* Only affect undead */ if (r_ptr->flags3 & (RF3_UNDEAD)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_UNDEAD); /* Message */ #ifdef JP -note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; -note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; + note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; + note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; #else note = " shudders."; note_dies = " dissolves!"; #endif - } /* Others ignore */ @@ -4726,24 +4751,20 @@ note_dies = " /* Only affect evil */ if (r_ptr->flags3 & (RF3_EVIL)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_EVIL); /* Message */ #ifdef JP -note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; -note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; + note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; + note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; #else note = " shudders."; note_dies = " dissolves!"; #endif - } /* Others ignore */ @@ -4771,24 +4792,20 @@ note_dies = " /* Only affect good */ if (r_ptr->flags3 & (RF3_GOOD)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); /* Message */ #ifdef JP -note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; -note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; + note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; + note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; #else note = " shudders."; note_dies = " dissolves!"; #endif - } /* Others ignore */ @@ -4855,24 +4872,20 @@ note_dies = " /* Only affect demons */ if (r_ptr->flags3 & (RF3_DEMON)) { - if (seen) - { - /* Learn about type */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON); + /* Obvious */ + if (seen) obvious = TRUE; - /* Obvious */ - obvious = TRUE; - } + /* Learn about type */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_DEMON); /* Message */ #ifdef JP -note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; -note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; + note = "¤Ï¿È¿Ì¤¤¤·¤¿¡£"; + note_dies = "¤Ï¥É¥í¥É¥í¤ËÍϤ±¤¿¡ª"; #else note = " shudders."; note_dies = " dissolves!"; #endif - } /* Others ignore */ @@ -4926,7 +4939,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -4934,8 +4947,6 @@ note_dies = " { if (who > 0) { - monster_type *caster_ptr = &m_list[who]; - /* Heal the monster */ if (caster_ptr->hp < caster_ptr->maxhp) { @@ -4948,7 +4959,7 @@ note_dies = " if (p_ptr->riding == who) p_ptr->redraw |= (PR_UHEALTH); /* Special message */ - if (caster_ptr->ml) + if (see_s_msg) { /* Get the monster name */ monster_desc(killer, caster_ptr, 0); @@ -4975,9 +4986,9 @@ note_dies = " else { #ifdef JP - msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name); + if (see_s_msg) msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£", m_name); #else - msg_format("%s is unaffected.", m_name); + if (see_s_msg) msg_format("%s is unaffected.", m_name); #endif } dam = 0; @@ -5003,7 +5014,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5015,7 +5026,7 @@ note_dies = " /* Memorize a flag */ if (r_ptr->flags3 & (RF3_NO_CONF)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£"; @@ -5026,7 +5037,7 @@ note_dies = " } else if (r_ptr->flags2 & RF2_EMPTY_MIND) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); #ifdef JP note = "¤Ë¤Ï´°Á´¤ÊÂÑÀ­¤¬¤¢¤ë¡ª"; #else @@ -5036,7 +5047,7 @@ note_dies = " } else if (r_ptr->flags2 & RF2_WEIRD_MIND) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_WEIRD_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_WEIRD_MIND); #ifdef JP note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡£"; #else @@ -5079,7 +5090,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5091,7 +5102,7 @@ note_dies = " /* Memorize a flag */ if (r_ptr->flags3 & (RF3_NO_CONF)) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_CONF); } #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£"; @@ -5102,7 +5113,7 @@ note_dies = " } else if (r_ptr->flags2 & RF2_EMPTY_MIND) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); #ifdef JP note = "¤Ë¤Ï´°Á´¤ÊÂÑÀ­¤¬¤¢¤ë¡ª"; #else @@ -5112,7 +5123,7 @@ note_dies = " } else if (r_ptr->flags2 & RF2_WEIRD_MIND) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_WEIRD_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_WEIRD_MIND); #ifdef JP note = "¤Ë¤ÏÂÑÀ­¤¬¤¢¤ë¡£"; #else @@ -5140,9 +5151,7 @@ note_dies = " do_conf = randint0(8) + 8; do_stun = randint0(8) + 8; } - m_ptr->slow = MIN(200, m_ptr->slow + 10); - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); + (void)set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 10); } break; } @@ -5155,7 +5164,7 @@ note_dies = " #ifdef JP if (!who) msg_format("%s¤ò»Øº¹¤·¤Æ¼ö¤¤¤ò¤«¤±¤¿¡£", m_name); #else - if (!who) msg_format("You point at %s and curses.", m_name); + if (!who) msg_format("You point at %s and curse.", m_name); #endif if (r_ptr->flagsr & RFR_RES_ALL) @@ -5166,7 +5175,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5191,7 +5200,7 @@ note_dies = " #ifdef JP if (!who) msg_format("%s¤ò»Øº¹¤·¤Æ¶²¤í¤·¤²¤Ë¼ö¤¤¤ò¤«¤±¤¿¡£", m_name); #else - if (!who) msg_format("You point at %s and curses horribly.", m_name); + if (!who) msg_format("You point at %s and curse horribly.", m_name); #endif if (r_ptr->flagsr & RFR_RES_ALL) @@ -5202,7 +5211,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5238,7 +5247,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5274,12 +5283,12 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } /* Attempt a saving throw */ - if ((randint0(100 + (caster_lev / 2)) < (r_ptr->level + 35)) && ((who <= 0) || (m_list[who].r_idx != MON_KENSHIROU))) + if ((randint0(100 + (caster_lev / 2)) < (r_ptr->level + 35)) && ((who <= 0) || (caster_ptr->r_idx != MON_KENSHIROU))) { #ifdef JP note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£"; @@ -5304,7 +5313,7 @@ note_dies = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5347,7 +5356,7 @@ note_dies = " (r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flags7 & (RF7_NAZGUL)) || (r_ptr->flags7 & (RF7_UNIQUE2)) || (r_ptr->flags1 & RF1_QUESTOR) || m_ptr->parent_m_idx) { #ifdef JP -msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",m_name); + msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",m_name); #else msg_format("%^s is unaffected.", m_name); #endif @@ -5355,7 +5364,7 @@ msg_format("%s break; } - if (is_pet(m_ptr)) nokori_hp = m_ptr->maxhp*4L; + if (is_pet(m_ptr)) nokori_hp = m_ptr->maxhp * 4L; else if ((p_ptr->pclass == CLASS_BEASTMASTER) && monster_living(r_ptr)) nokori_hp = m_ptr->maxhp * 3 / 10; else @@ -5364,7 +5373,7 @@ msg_format("%s if (m_ptr->hp >= nokori_hp) { #ifdef JP -msg_format("¤â¤Ã¤È¼å¤é¤»¤Ê¤¤¤È¡£"); + msg_format("¤â¤Ã¤È¼å¤é¤»¤Ê¤¤¤È¡£"); #else msg_format("You need to weaken %s more.", m_name); #endif @@ -5374,24 +5383,21 @@ msg_format(" { if (m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(c_ptr->m_idx, FALSE, MON_CHAMELEON); #ifdef JP -msg_format("%s¤òÊᤨ¤¿¡ª",m_name); + msg_format("%s¤òÊᤨ¤¿¡ª",m_name); #else msg_format("You capture %^s!", m_name); #endif - cap_mon = m_list[c_ptr->m_idx].r_idx; - cap_mspeed = m_list[c_ptr->m_idx].mspeed; - cap_hp = m_list[c_ptr->m_idx].hp; - cap_maxhp = m_list[c_ptr->m_idx].max_maxhp; - if (m_list[c_ptr->m_idx].nickname) - cap_nickname = quark_add(quark_str(m_list[c_ptr->m_idx].nickname)); - else - cap_nickname = 0; + cap_mon = m_ptr->r_idx; + cap_mspeed = m_ptr->mspeed; + cap_hp = m_ptr->hp; + cap_maxhp = m_ptr->max_maxhp; + cap_nickname = m_ptr->nickname; /* Quark transfer */ if (c_ptr->m_idx == p_ptr->riding) { if (rakuba(-1, FALSE)) { #ifdef JP -msg_print("ÃÏÌ̤ËÍî¤È¤µ¤ì¤¿¡£"); + msg_print("ÃÏÌ̤ËÍî¤È¤µ¤ì¤¿¡£"); #else msg_format("You have fallen from %s.", m_name); #endif @@ -5437,25 +5443,25 @@ msg_format(" note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } if (r_ptr->flags2 & RF2_EMPTY_MIND) { #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is immune!"; #endif dam = 0; skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags2 |= (RF2_EMPTY_MIND); break; } - if (m_ptr->csleep) + if (MON_CSLEEP(m_ptr)) { #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is immune!"; #endif @@ -5476,7 +5482,7 @@ note = " (r_ptr->level > randint1((dam - 10) < 1 ? 1 : (dam - 10)) + 10)) { #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else note = " is unaffected!"; #endif @@ -5487,18 +5493,14 @@ note = " /* Normal monsters slow down */ else { - if (!m_ptr->slow) + if (set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 50)) { #ifdef JP -note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; + note = "¤ÎÆ°¤­¤¬ÃÙ¤¯¤Ê¤Ã¤¿¡£"; #else note = " starts moving slower."; #endif } - m_ptr->slow = MIN(200, m_ptr->slow + 50); - - if (c_ptr->m_idx == p_ptr->riding) - p_ptr->update |= (PU_BONUS); } } @@ -5534,7 +5536,7 @@ note = " /* Memorize a flag */ if (r_ptr->flags3 & RF3_NO_SLEEP) { - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_SLEEP); } /* No obvious effect */ @@ -5576,7 +5578,6 @@ note = " /* GENOCIDE */ case GF_GENOCIDE: { - bool angry = FALSE; if (seen) obvious = TRUE; if (r_ptr->flagsr & RFR_RES_ALL) @@ -5587,60 +5588,26 @@ note = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } - if (((r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_UNIQUE2)) || (c_ptr->m_idx == p_ptr->riding)) || p_ptr->inside_arena || p_ptr->inside_quest) - { - dam = 0; - angry = TRUE; - } - else - { - if ((r_ptr->level > randint0(dam)) || (m_ptr->mflag2 & MFLAG2_NOGENO)) - { - dam = 0; - angry = TRUE; - } - else - { - delete_monster_idx(c_ptr->m_idx); -#ifdef JP - msg_format("%s¤Ï¾ÃÌǤ·¤¿¡ª",m_name); -#else - msg_format("%^s disappered!",m_name); -#endif - #ifdef JP - take_hit(DAMAGE_GENO, randint1((r_ptr->level+1)/2), "¥â¥ó¥¹¥¿¡¼¾ÃÌǤμöʸ¤ò¾§¤¨¤¿ÈèÏ«", -1); + if (genocide_aux(c_ptr->m_idx, dam, !who, (r_ptr->level + 1) / 2, "¥â¥ó¥¹¥¿¡¼¾ÃÌÇ")) #else - take_hit(DAMAGE_GENO, randint1((r_ptr->level+1)/2), "the strain of casting Genocide One", -1); + if (genocide_aux(c_ptr->m_idx, dam, !who, (r_ptr->level + 1) / 2, "Genocide One")) #endif - dam = 0; - - chg_virtue(V_VITALITY, -1); - - skipped = TRUE; - - /* Redraw */ - p_ptr->redraw |= (PR_HP); - - /* Window stuff */ - p_ptr->window |= (PW_PLAYER); - return TRUE; - } - } - if (angry) { #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + if (seen_msg) msg_format("%s¤Ï¾ÃÌǤ·¤¿¡ª", m_name); #else - note = "is unaffected!"; + if (seen_msg) msg_format("%^s disappered!", m_name); #endif - get_angry = TRUE; - if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO; + chg_virtue(V_VITALITY, -1); + return TRUE; } + + skipped = TRUE; break; } @@ -5654,14 +5621,11 @@ note = " /* Hurt by light */ if (r_ptr->flags3 & (RF3_HURT_LITE)) { - if (seen) - { - /* Obvious effect */ - obvious = TRUE; + /* Obvious effect */ + if (seen) obvious = TRUE; - /* Memorize the effects */ - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); - } + /* Memorize the effects */ + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_HURT_LITE); /* Special effect */ #ifdef JP @@ -5671,7 +5635,6 @@ note = " note = " cringes from the light!"; note_dies = " shrivels away in the light!"; #endif - } /* Normally no damage */ @@ -5700,7 +5663,7 @@ note = " note = " is immune."; #endif dam = 0; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } break; @@ -5725,7 +5688,7 @@ note = " note = " starts moving faster."; #endif - m_ptr->fast = MIN(200, m_ptr->fast + 100); + (void)set_monster_fast(c_ptr->m_idx, MON_FAST(m_ptr) + 100); success = TRUE; } @@ -5742,16 +5705,16 @@ note = " else { #ifdef JP -note = "¤ò»ÙÇÛ¤·¤¿¡£"; + note = "¤ò»ÙÇÛ¤·¤¿¡£"; #else note = " is tamed!"; #endif set_pet(m_ptr); - m_ptr->fast = MIN(200, m_ptr->fast + 100); + (void)set_monster_fast(c_ptr->m_idx, MON_FAST(m_ptr) + 100); /* Learn about type */ - if (seen && is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_GOOD); success = TRUE; } } @@ -5762,10 +5725,7 @@ note = " { do_fear = randint1(90)+10; } - else if (seen) - { - if (is_original_ap(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_FEAR); - } + else if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flags3 |= (RF3_NO_FEAR); } /* No "real" damage */ @@ -5785,7 +5745,7 @@ note = " note = " is immune."; #endif skipped = TRUE; - if (seen && is_original_ap(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); break; } @@ -5855,181 +5815,177 @@ note = " /* Extract method of death */ note = note_dies; } - - /* Mega-Hack -- Handle "polymorph" -- monsters get a saving throw */ - else if (do_poly && (randint1(90) > r_ptr->level)) + else { - if (polymorph_monster(y, x)) + /* Sound and Impact resisters never stun */ + if (do_stun && + !(r_ptr->flagsr & (RFR_RES_SOUN | RFR_RES_WALL)) && + !(r_ptr->flags3 & RF3_NO_STUN)) { /* Obvious */ if (seen) obvious = TRUE; - /* Monster polymorphs */ + /* Get stunned */ + if (MON_STUNNED(m_ptr)) + { #ifdef JP - note = "¤¬ÊѿȤ·¤¿¡ª"; + note = "¤Ï¤Ò¤É¤¯¤â¤¦¤í¤¦¤È¤·¤¿¡£"; #else - note = " changes!"; + note = " is more dazed."; #endif + tmp = MON_STUNNED(m_ptr) + (do_stun / 2); + } + else + { +#ifdef JP + note = "¤Ï¤â¤¦¤í¤¦¤È¤·¤¿¡£"; +#else + note = " is dazed."; +#endif - /* Turn off the damage */ - dam = 0; + tmp = do_stun; + } - /* Hack -- Get new monster */ - m_ptr = &m_list[c_ptr->m_idx]; + /* Apply stun */ + (void)set_monster_stunned(c_ptr->m_idx, tmp); - /* Hack -- Get new race */ - r_ptr = &r_info[m_ptr->r_idx]; + /* Get angry */ + get_angry = TRUE; } - else + + /* Confusion and Chaos resisters (and sleepers) never confuse */ + if (do_conf && + !(r_ptr->flags3 & RF3_NO_CONF) && + !(r_ptr->flagsr & RFR_EFF_RES_CHAO_MASK)) { - /* No polymorph */ + /* Obvious */ + if (seen) obvious = TRUE; + + /* Already partially confused */ + if (MON_CONFUSED(m_ptr)) + { #ifdef JP -note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; + note = "¤Ï¤µ¤é¤Ëº®Í𤷤¿¤è¤¦¤À¡£"; #else - note = " is unaffected!"; + note = " looks more confused."; #endif - } - } - - /* Handle "teleport" */ - else if (do_dist) - { - /* Obvious */ - if (seen) obvious = TRUE; + tmp = MON_CONFUSED(m_ptr) + (do_conf / 2); + } - /* Message */ + /* Was not confused */ + else + { #ifdef JP - note = "¤¬¾Ã¤¨µî¤Ã¤¿¡ª"; + note = "¤Ïº®Í𤷤¿¤è¤¦¤À¡£"; #else - note = " disappears!"; + note = " looks confused."; #endif - chg_virtue(V_VALOUR, -1); + tmp = do_conf; + } - /* Teleport */ - teleport_away(c_ptr->m_idx, do_dist, (bool)(!who)); + /* Apply confusion */ + (void)set_monster_confused(c_ptr->m_idx, tmp); - /* Hack -- get new location */ - y = m_ptr->fy; - x = m_ptr->fx; + /* Get angry */ + get_angry = TRUE; + } - /* Hack -- get new grid */ - c_ptr = &cave[y][x]; - } + if (do_time) + { + /* Obvious */ + if (seen) obvious = TRUE; - /* Sound and Impact resisters never stun */ - else if (do_stun && - !(r_ptr->flagsr & (RFR_RES_SOUN | RFR_RES_WALL)) && - !(r_ptr->flags3 & RF3_NO_STUN)) - { - /* Obvious */ - if (seen) obvious = TRUE; + if (do_time >= m_ptr->maxhp) do_time = m_ptr->maxhp - 1; - /* Get stunned */ - if (m_ptr->stunned) - { + if (do_time) + { #ifdef JP - note = "¤Ï¤Ò¤É¤¯¤â¤¦¤í¤¦¤È¤·¤¿¡£"; + note = "¤Ï¼å¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£"; #else - note = " is more dazed."; + note = " seems weakened."; #endif - - tmp = m_ptr->stunned + (do_stun / 2); + m_ptr->maxhp -= do_time; + if ((m_ptr->hp - dam) > m_ptr->maxhp) dam = m_ptr->hp - m_ptr->maxhp; + } + get_angry = TRUE; } - else + + /* Mega-Hack -- Handle "polymorph" -- monsters get a saving throw */ + if (do_poly && (randint1(90) > r_ptr->level)) { + if (polymorph_monster(y, x)) + { + /* Obvious */ + if (seen) obvious = TRUE; + + /* Monster polymorphs */ #ifdef JP - note = "¤Ï¤â¤¦¤í¤¦¤È¤·¤¿¡£"; + note = "¤¬ÊѿȤ·¤¿¡ª"; #else - note = " is dazed."; + note = " changes!"; #endif - tmp = do_stun; - } - - /* Apply stun */ - m_ptr->stunned = (tmp < 200) ? tmp : 200; - - /* Get angry */ - get_angry = TRUE; - } - - /* Confusion and Chaos resisters (and sleepers) never confuse */ - else if (do_conf && - !(r_ptr->flags3 & RF3_NO_CONF) && - !(r_ptr->flagsr & RFR_EFF_RES_CHAO_MASK)) - { - /* Obvious */ - if (seen) obvious = TRUE; - - /* Already partially confused */ - if (m_ptr->confused) - { + /* Turn off the damage */ + dam = 0; + } + else + { + /* No polymorph */ #ifdef JP - note = "¤Ï¤µ¤é¤Ëº®Í𤷤¿¤è¤¦¤À¡£"; + note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª"; #else - note = " looks more confused."; + note = " is unaffected!"; #endif + } + + /* Hack -- Get new monster */ + m_ptr = &m_list[c_ptr->m_idx]; - tmp = m_ptr->confused + (do_conf / 2); + /* Hack -- Get new race */ + r_ptr = &r_info[m_ptr->r_idx]; } - /* Was not confused */ - else + /* Handle "teleport" */ + if (do_dist) { + /* Obvious */ + if (seen) obvious = TRUE; + + /* Message */ #ifdef JP - note = "¤Ïº®Í𤷤¿¤è¤¦¤À¡£"; + note = "¤¬¾Ã¤¨µî¤Ã¤¿¡ª"; #else - note = " looks confused."; + note = " disappears!"; #endif - tmp = do_conf; - } - - /* Apply confusion */ - m_ptr->confused = (tmp < 200) ? tmp : 200; - - /* Get angry */ - get_angry = TRUE; - } + if (!who) chg_virtue(V_VALOUR, -1); - else if (do_time) - { - /* Obvious */ - if (seen) obvious = TRUE; + /* Teleport */ + teleport_away(c_ptr->m_idx, do_dist, + (!who ? TELEPORT_DEC_VALOUR : 0L) | TELEPORT_PASSIVE); - if (do_time >= m_ptr->maxhp) do_time = m_ptr->maxhp - 1; + /* Hack -- get new location */ + y = m_ptr->fy; + x = m_ptr->fx; - if (do_time) - { -#ifdef JP - note = "¤Ï¼å¤¯¤Ê¤Ã¤¿¤è¤¦¤À¡£"; -#else - note = " seems weakened."; -#endif - m_ptr->maxhp -= do_time; - if ((m_ptr->hp - dam) > m_ptr->maxhp) dam = m_ptr->hp - m_ptr->maxhp; + /* Hack -- get new grid */ + c_ptr = &cave[y][x]; } - get_angry = TRUE; - } - - - /* Fear */ - if (do_fear) - { - /* Increase fear */ - tmp = m_ptr->monfear + do_fear; - /* Set fear */ - m_ptr->monfear = (tmp < 200) ? tmp : 200; + /* Fear */ + if (do_fear) + { + /* Set fear */ + (void)set_monster_monfear(c_ptr->m_idx, MON_MONFEAR(m_ptr) + do_fear); - /* Get angry */ - get_angry = TRUE; + /* Get angry */ + get_angry = TRUE; + } } - if (typ == GF_DRAIN_MANA) { /* Drain mana does nothing */ @@ -6043,9 +5999,7 @@ note = " if (p_ptr->riding == c_ptr->m_idx) p_ptr->redraw |= (PR_UHEALTH); /* Wake the monster up */ - m_ptr->csleep = 0; - - if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE); + (void)set_monster_csleep(c_ptr->m_idx, 0); /* Hurt the monster */ m_ptr->hp -= dam; @@ -6062,7 +6016,7 @@ note = " if (known && note) { monster_desc(m_name, m_ptr, MD_TRUE_NAME); - if (see_s) + if (see_s_msg) { msg_format("%^s%s", m_name, note); } @@ -6072,7 +6026,7 @@ note = " } } - monster_gain_exp(who, m_ptr->r_idx); + if (who > 0) monster_gain_exp(who, m_ptr->r_idx); /* Generate treasure, etc */ monster_death(c_ptr->m_idx, FALSE); @@ -6083,11 +6037,10 @@ note = " if (sad) { #ifdef JP -msg_print("¾¯¤·Èᤷ¤¤µ¤Ê¬¤¬¤·¤¿¡£"); + msg_print("¾¯¤·Èᤷ¤¤µ¤Ê¬¤¬¤·¤¿¡£"); #else msg_print("You feel sad for a moment."); #endif - } } @@ -6095,10 +6048,10 @@ msg_print(" else { /* Give detailed messages if visible or destroyed */ - if (note && seen) msg_format("%^s%s", m_name, note); + if (note && seen_msg) msg_format("%^s%s", m_name, note); /* Hack -- Pain message */ - else if (see_s) + else if (see_s_msg) { message_pain(c_ptr->m_idx, dam); } @@ -6108,18 +6061,26 @@ msg_print(" } /* Hack -- handle sleep */ - if (do_sleep) m_ptr->csleep = do_sleep; + if (do_sleep) (void)set_monster_csleep(c_ptr->m_idx, do_sleep); } } else if (heal_leper) { #ifdef JP -msg_print("ÉÔ·é¤ÊÉ¿ͤÏɵ¤¤¬¼£¤Ã¤¿¡ª"); + if (seen_msg) msg_print("ÉÔ·é¤ÊÉ¿ͤÏɵ¤¤¬¼£¤Ã¤¿¡ª"); #else - msg_print("The Mangy looking leper is healed!"); + if (seen_msg) msg_print("The Mangy looking leper is healed!"); #endif + if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) + { + char m2_name[80]; + + monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE); + do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_HEAL_LEPER, m2_name); + } + delete_monster_idx(c_ptr->m_idx); } @@ -6141,9 +6102,9 @@ msg_print(" if (do_sleep) anger_monster(m_ptr); /* Give detailed messages if visible or destroyed */ - if (note && seen) + if (note && seen_msg) #ifdef JP -msg_format("%s%s", m_name, note); + msg_format("%s%s", m_name, note); #else msg_format("%^s%s", m_name, note); #endif @@ -6160,22 +6121,21 @@ msg_format("%s%s", m_name, note); anger_monster(m_ptr); /* Take note */ - if ((fear || do_fear) && (m_ptr->ml)) + if ((fear || do_fear) && seen) { /* Sound */ sound(SOUND_FLEE); /* Message */ #ifdef JP -msg_format("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", m_name); + msg_format("%^s¤Ï¶²Éݤ·¤Æƨ¤²½Ð¤·¤¿¡ª", m_name); #else msg_format("%^s flees in terror!", m_name); #endif - } /* Hack -- handle sleep */ - if (do_sleep) m_ptr->csleep = do_sleep; + if (do_sleep) (void)set_monster_csleep(c_ptr->m_idx, do_sleep); } } @@ -6221,7 +6181,7 @@ msg_print(" msg_print("Space warps about you!"); #endif - if (m_ptr->r_idx) teleport_away(c_ptr->m_idx, damroll(10, 10), FALSE); + if (m_ptr->r_idx) teleport_away(c_ptr->m_idx, damroll(10, 10), TELEPORT_PASSIVE); if (one_in_(13)) count += activate_hi_summon(ty, tx, TRUE); if (!one_in_(6)) break; } @@ -6299,14 +6259,14 @@ msg_print(" /* XXX XXX XXX Verify this code */ /* Update the monster */ - update_mon(c_ptr->m_idx, FALSE); + if (m_ptr->r_idx) update_mon(c_ptr->m_idx, FALSE); /* Redraw the monster grid */ lite_spot(y, x); /* Update monster recall window */ - if (p_ptr->monster_race_idx == m_ptr->r_idx) + if ((p_ptr->monster_race_idx == m_ptr->r_idx) && (seen || !m_ptr->r_idx)) { /* Window stuff */ p_ptr->window |= (PW_MONSTER); @@ -6316,14 +6276,14 @@ msg_print(" { if (!who) { - if (!projectable(m_ptr->fy, m_ptr->fx, py, px) && !(flg & PROJECT_NO_HANGEKI)) + if (!(flg & PROJECT_NO_HANGEKI)) { set_target(m_ptr, monster_target_y, monster_target_x); } } - else if (is_pet(&m_list[who]) && !player_bold(m_ptr->target_y, m_ptr->target_x)) + else if ((who > 0) && is_pet(caster_ptr) && !player_bold(m_ptr->target_y, m_ptr->target_x)) { - set_target(m_ptr, m_list[who].fy, m_list[who].fx); + set_target(m_ptr, caster_ptr->fy, caster_ptr->fx); } } @@ -6417,8 +6377,7 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int if ((p_ptr->special_defense & NINJA_KAWARIMI) && dam && (randint0(55) < (p_ptr->lev*3/5+20)) && who && (who != p_ptr->riding)) { - kawarimi(TRUE); - return FALSE; + if (kawarimi(TRUE)) return FALSE; } /* Player cannot hurt himself */ @@ -6441,18 +6400,26 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int /* Choose 'new' target */ - do + if (who > 0) { - t_y = m_list[who].fy - 1 + randint1(3); - t_x = m_list[who].fx - 1 + randint1(3); - max_attempts--; - } - while (max_attempts && in_bounds2u(t_y, t_x) && !projectable(py, px, t_y, t_x)); + do + { + t_y = m_list[who].fy - 1 + randint1(3); + t_x = m_list[who].fx - 1 + randint1(3); + max_attempts--; + } + while (max_attempts && in_bounds2u(t_y, t_x) && !projectable(py, px, t_y, t_x)); - if (max_attempts < 1) + if (max_attempts < 1) + { + t_y = m_list[who].fy; + t_x = m_list[who].fx; + } + } + else { - t_y = m_list[who].fy; - t_x = m_list[who].fx; + t_y = py - 1 + randint1(3); + t_x = px - 1 + randint1(3); } project(0, 0, t_y, t_x, dam, typ, (PROJECT_STOP|PROJECT_KILL|PROJECT_REFLECTABLE), monspell); @@ -6486,13 +6453,37 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int /* Get the monster's real name (gotten before polymorph!) */ strcpy(killer, who_name); } - else if (who < 0) + else { + switch (who) + { + case PROJECT_WHO_UNCTRL_POWER: +#ifdef JP + strcpy(killer, "À©¸æ¤Ç¤­¤Ê¤¤ÎϤÎÈÅή"); +#else + strcpy(killer, "uncontrollable power storm"); +#endif + break; + + case PROJECT_WHO_GLASS_SHARDS: #ifdef JP - strcpy(killer, "æ«"); + strcpy(killer, "¥¬¥é¥¹¤ÎÇËÊÒ"); #else - strcpy(killer, "a trap"); + strcpy(killer, "shards of glass"); #endif + break; + + default: +#ifdef JP + strcpy(killer, "æ«"); +#else + strcpy(killer, "a trap"); +#endif + break; + } + + /* Paranoia */ + strcpy(m_name, killer); } /* Analyze the damage */ @@ -6502,7 +6493,7 @@ static bool project_p(int who, cptr who_name, int r, int y, int x, int dam, int case GF_ACID: { #ifdef JP -if (fuzzy) msg_print("»À¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("»À¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by acid!"); #endif @@ -6515,7 +6506,7 @@ if (fuzzy) msg_print(" case GF_FIRE: { #ifdef JP -if (fuzzy) msg_print("²Ð±ê¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²Ð±ê¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by fire!"); #endif @@ -6528,7 +6519,7 @@ if (fuzzy) msg_print(" case GF_COLD: { #ifdef JP -if (fuzzy) msg_print("Î䵤¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("Î䵤¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by cold!"); #endif @@ -6541,7 +6532,7 @@ if (fuzzy) msg_print(" case GF_ELEC: { #ifdef JP -if (fuzzy) msg_print("ÅÅ·â¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("ÅÅ·â¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by lightning!"); #endif @@ -6555,7 +6546,7 @@ if (fuzzy) msg_print(" { bool double_resist = IS_OPPOSE_POIS(); #ifdef JP -if (fuzzy) msg_print("ÆǤǹ¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("ÆǤǹ¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by poison!"); #endif @@ -6564,14 +6555,14 @@ if (fuzzy) msg_print(" if (double_resist) dam = (dam + 2) / 3; if ((!(double_resist || p_ptr->resist_pois)) && - one_in_(HURT_CHANCE)) + one_in_(HURT_CHANCE) && !CHECK_MULTISHADOW()) { do_dec_stat(A_CON); } get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - if (!(double_resist || p_ptr->resist_pois)) + if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW()) { set_poisoned(p_ptr->poisoned + randint0(dam) + 10); } @@ -6583,7 +6574,7 @@ if (fuzzy) msg_print(" { bool double_resist = IS_OPPOSE_POIS(); #ifdef JP -if (fuzzy) msg_print("Êü¼Íǽ¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("Êü¼Íǽ¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by radiation!"); #endif @@ -6591,14 +6582,14 @@ if (fuzzy) msg_print(" if (p_ptr->resist_pois) dam = (2 * dam + 2) / 5; if (double_resist) dam = (2 * dam + 2) / 5; get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - if (!(double_resist || p_ptr->resist_pois)) + if (!(double_resist || p_ptr->resist_pois) && !CHECK_MULTISHADOW()) { set_poisoned(p_ptr->poisoned + randint0(dam) + 10); if (one_in_(5)) /* 6 */ { #ifdef JP -msg_print("´ñ·ÁŪ¤ÊÊѿȤò¿ë¤²¤¿¡ª"); + msg_print("´ñ·ÁŪ¤ÊÊѿȤò¿ë¤²¤¿¡ª"); #else msg_print("You undergo a freakish metamorphosis!"); #endif @@ -6621,7 +6612,7 @@ msg_print(" case GF_MISSILE: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -6634,7 +6625,7 @@ if (fuzzy) msg_print(" case GF_HOLY_FIRE: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -6650,7 +6641,7 @@ if (fuzzy) msg_print(" case GF_HELL_FIRE: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -6665,7 +6656,7 @@ if (fuzzy) msg_print(" case GF_ARROW: { #ifdef JP -if (fuzzy) msg_print("²¿¤«±Ô¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«±Ô¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something sharp!"); #endif @@ -6687,14 +6678,14 @@ if (fuzzy) msg_print(" case GF_PLASMA: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤È¤Æ¤âÇ®¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤È¤Æ¤âÇ®¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something *HOT*!"); #endif get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - if (!p_ptr->resist_sound) + if (!p_ptr->resist_sound && !CHECK_MULTISHADOW()) { int k = (randint1((dam > 40) ? 35 : (dam * 3 / 4 + 5))); (void)set_stun(p_ptr->stun + k); @@ -6714,23 +6705,22 @@ if (fuzzy) msg_print(" case GF_NETHER: { #ifdef JP -if (fuzzy) msg_print("ÃϹö¤ÎÎϤǹ¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("ÃϹö¤ÎÎϤǹ¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by nether forces!"); #endif - if (p_ptr->resist_neth) { if (!prace_is_(RACE_SPECTRE)) dam *= 6; dam /= (randint1(4) + 7); } - else drain_exp(200 + (p_ptr->exp / 100), 200 + (p_ptr->exp / 1000), 75); + else if (!CHECK_MULTISHADOW()) drain_exp(200 + (p_ptr->exp / 100), 200 + (p_ptr->exp / 1000), 75); - if (prace_is_(RACE_SPECTRE)) + if (prace_is_(RACE_SPECTRE) && !CHECK_MULTISHADOW()) { #ifdef JP -msg_print("µ¤Ê¬¤¬¤è¤¯¤Ê¤Ã¤¿¡£"); + msg_print("µ¤Ê¬¤¬¤è¤¯¤Ê¤Ã¤¿¡£"); #else msg_print("You feel invigorated!"); #endif @@ -6750,23 +6740,26 @@ msg_print(" case GF_WATER: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¼¾¤Ã¤¿¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¼¾¤Ã¤¿¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something wet!"); #endif - if (!p_ptr->resist_sound) - { - set_stun(p_ptr->stun + randint1(40)); - } - if (!p_ptr->resist_conf) + if (!CHECK_MULTISHADOW()) { - set_confused(p_ptr->confused + randint1(5) + 5); - } + if (!p_ptr->resist_sound) + { + set_stun(p_ptr->stun + randint1(40)); + } + if (!p_ptr->resist_conf) + { + set_confused(p_ptr->confused + randint1(5) + 5); + } - if (one_in_(5)) - { - inven_damage(set_cold_destroy, 3); + if (one_in_(5)) + { + inven_damage(set_cold_destroy, 3); + } } get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); @@ -6777,7 +6770,7 @@ if (fuzzy) msg_print(" case GF_CHAOS: { #ifdef JP -if (fuzzy) msg_print("̵Ãá½ø¤ÎÇÈÆ°¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("̵Ãá½ø¤ÎÇÈÆ°¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by a wave of anarchy!"); #endif @@ -6786,33 +6779,39 @@ if (fuzzy) msg_print("̵ { dam *= 6; dam /= (randint1(4) + 7); } - if (!p_ptr->resist_conf) - { - (void)set_confused(p_ptr->confused + randint0(20) + 10); - } - if (!p_ptr->resist_chaos) + + if (!CHECK_MULTISHADOW()) { - (void)set_image(p_ptr->image + randint1(10)); - if (one_in_(3)) + if (!p_ptr->resist_conf) + { + (void)set_confused(p_ptr->confused + randint0(20) + 10); + } + if (!p_ptr->resist_chaos) { + (void)set_image(p_ptr->image + randint1(10)); + if (one_in_(3)) + { #ifdef JP -msg_print("¤¢¤Ê¤¿¤Î¿ÈÂΤϥ«¥ª¥¹¤ÎÎϤÇDZ¤¸¶Ê¤²¤é¤ì¤¿¡ª"); + msg_print("¤¢¤Ê¤¿¤Î¿ÈÂΤϥ«¥ª¥¹¤ÎÎϤÇDZ¤¸¶Ê¤²¤é¤ì¤¿¡ª"); #else - msg_print("Your body is twisted by chaos!"); + msg_print("Your body is twisted by chaos!"); #endif - (void)gain_random_mutation(0); + (void)gain_random_mutation(0); + } + } + if (!p_ptr->resist_neth && !p_ptr->resist_chaos) + { + drain_exp(5000 + (p_ptr->exp / 100), 500 + (p_ptr->exp / 1000), 75); + } + + if (!p_ptr->resist_chaos || one_in_(9)) + { + inven_damage(set_elec_destroy, 2); + inven_damage(set_fire_destroy, 2); } } - if (!p_ptr->resist_neth && !p_ptr->resist_chaos) - { - drain_exp(5000 + (p_ptr->exp / 100), 500 + (p_ptr->exp / 1000), 75); - } - if (!p_ptr->resist_chaos || one_in_(9)) - { - inven_damage(set_elec_destroy, 2); - inven_damage(set_fire_destroy, 2); - } + get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); break; } @@ -6821,7 +6820,7 @@ msg_print(" case GF_SHARDS: { #ifdef JP -if (fuzzy) msg_print("²¿¤«±Ô¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«±Ô¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something sharp!"); #endif @@ -6830,7 +6829,7 @@ if (fuzzy) msg_print(" { dam *= 6; dam /= (randint1(4) + 7); } - else + else if (!CHECK_MULTISHADOW()) { (void)set_cut(p_ptr->cut + dam); } @@ -6848,7 +6847,7 @@ if (fuzzy) msg_print(" case GF_SOUND: { #ifdef JP -if (fuzzy) msg_print("¹ì²»¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("¹ì²»¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by a loud noise!"); #endif @@ -6857,7 +6856,7 @@ if (fuzzy) msg_print(" { dam *= 5; dam /= (randint1(4) + 7); } - else + else if (!CHECK_MULTISHADOW()) { int k = (randint1((dam > 90) ? 35 : (dam / 3 + 5))); (void)set_stun(p_ptr->stun + k); @@ -6876,7 +6875,7 @@ if (fuzzy) msg_print(" case GF_CONFUSION: { #ifdef JP -if (fuzzy) msg_print("²¿¤«º®Í𤹤ë¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«º®Í𤹤ë¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something puzzling!"); #endif @@ -6885,7 +6884,7 @@ if (fuzzy) msg_print(" { dam *= 5; dam /= (randint1(4) + 7); } - if (!p_ptr->resist_conf) + else if (!CHECK_MULTISHADOW()) { (void)set_confused(p_ptr->confused + randint1(20) + 10); } @@ -6897,7 +6896,7 @@ if (fuzzy) msg_print(" case GF_DISENCHANT: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤µ¤¨¤Ê¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤µ¤¨¤Ê¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something static!"); #endif @@ -6906,7 +6905,7 @@ if (fuzzy) msg_print(" { dam *= 6; dam /= (randint1(4) + 7); } - else + else if (!CHECK_MULTISHADOW()) { (void)apply_disenchant(0); } @@ -6918,7 +6917,7 @@ if (fuzzy) msg_print(" case GF_NEXUS: { #ifdef JP -if (fuzzy) msg_print("²¿¤«´ñ̯¤Ê¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«´ñ̯¤Ê¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something strange!"); #endif @@ -6927,7 +6926,7 @@ if (fuzzy) msg_print(" { dam *= 6; dam /= (randint1(4) + 7); } - else + else if (!CHECK_MULTISHADOW()) { apply_nexus(m_ptr); } @@ -6939,12 +6938,12 @@ if (fuzzy) msg_print(" case GF_FORCE: { #ifdef JP -if (fuzzy) msg_print("±¿Æ°¥¨¥Í¥ë¥®¡¼¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("±¿Æ°¥¨¥Í¥ë¥®¡¼¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by kinetic force!"); #endif - if (!p_ptr->resist_sound) + if (!p_ptr->resist_sound && !CHECK_MULTISHADOW()) { (void)set_stun(p_ptr->stun + randint1(20)); } @@ -6957,25 +6956,26 @@ if (fuzzy) msg_print(" case GF_ROCKET: { #ifdef JP -if (fuzzy) msg_print("Çúȯ¤¬¤¢¤Ã¤¿¡ª"); + if (fuzzy) msg_print("Çúȯ¤¬¤¢¤Ã¤¿¡ª"); #else if (fuzzy) msg_print("There is an explosion!"); #endif - if (!p_ptr->resist_sound) + if (!p_ptr->resist_sound && !CHECK_MULTISHADOW()) { (void)set_stun(p_ptr->stun + randint1(20)); } + if (p_ptr->resist_shard) { dam /= 2; } - else + else if (!CHECK_MULTISHADOW()) { - (void)set_cut(p_ptr-> cut + ( dam / 2)); + (void)set_cut(p_ptr->cut + (dam / 2)); } - if ((!p_ptr->resist_shard) || one_in_(12)) + if (!p_ptr->resist_shard || one_in_(12)) { inven_damage(set_cold_destroy, 3); } @@ -6988,12 +6988,12 @@ if (fuzzy) msg_print(" case GF_INERTIA: { #ifdef JP -if (fuzzy) msg_print("²¿¤«ÃÙ¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«ÃÙ¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something slow!"); #endif - (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); + if (!CHECK_MULTISHADOW()) (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); break; } @@ -7002,7 +7002,7 @@ if (fuzzy) msg_print(" case GF_LITE: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -7011,16 +7011,17 @@ if (fuzzy) msg_print(" { dam *= 4; dam /= (randint1(4) + 7); } - else if (!blind && !p_ptr->resist_blind) + else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW()) { (void)set_blind(p_ptr->blind + randint1(5) + 2); } + if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE)) { #ifdef JP -msg_print("¸÷¤ÇÆùÂΤ¬¾Ç¤¬¤µ¤ì¤¿¡ª"); + if (!CHECK_MULTISHADOW()) msg_print("¸÷¤ÇÆùÂΤ¬¾Ç¤¬¤µ¤ì¤¿¡ª"); #else - msg_print("The light scorches your flesh!"); + if (!CHECK_MULTISHADOW()) msg_print("The light scorches your flesh!"); #endif dam *= 2; @@ -7029,14 +7030,15 @@ msg_print(" { dam = dam * 4 / 3; } + if (p_ptr->wraith_form) dam *= 2; get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - if (p_ptr->wraith_form) + if (p_ptr->wraith_form && !CHECK_MULTISHADOW()) { p_ptr->wraith_form = 0; #ifdef JP -msg_print("Á®¸÷¤Î¤¿¤áÈóʪ¼ÁŪ¤Ê±Æ¤Î¸ºß¤Ç¤¤¤é¤ì¤Ê¤¯¤Ê¤Ã¤¿¡£"); + msg_print("Á®¸÷¤Î¤¿¤áÈóʪ¼ÁŪ¤Ê±Æ¤Î¸ºß¤Ç¤¤¤é¤ì¤Ê¤¯¤Ê¤Ã¤¿¡£"); #else msg_print("The light forces you out of your incorporeal shadow form."); #endif @@ -7059,7 +7061,7 @@ msg_print(" case GF_DARK: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -7070,7 +7072,7 @@ if (fuzzy) msg_print(" if (prace_is_(RACE_VAMPIRE) || (p_ptr->mimic_form == MIMIC_VAMPIRE) || p_ptr->wraith_form) dam = 0; } - else if (!blind && !p_ptr->resist_blind) + else if (!blind && !p_ptr->resist_blind && !CHECK_MULTISHADOW()) { (void)set_blind(p_ptr->blind + randint1(5) + 2); } @@ -7082,7 +7084,7 @@ if (fuzzy) msg_print(" case GF_TIME: { #ifdef JP -if (fuzzy) msg_print("²áµî¤«¤é¤Î¾×·â¤Ë¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²áµî¤«¤é¤Î¾×·â¤Ë¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by a blast from the past!"); #endif @@ -7092,13 +7094,12 @@ if (fuzzy) msg_print(" dam *= 4; dam /= (randint1(4) + 7); #ifdef JP -msg_print("»þ´Ö¤¬Ä̤ê²á¤®¤Æ¤¤¤¯µ¤¤¬¤¹¤ë¡£"); + msg_print("»þ´Ö¤¬Ä̤ê²á¤®¤Æ¤¤¤¯µ¤¤¬¤¹¤ë¡£"); #else msg_print("You feel as if time is passing you by."); #endif - } - else + else if (!CHECK_MULTISHADOW()) { switch (randint1(10)) { @@ -7106,7 +7107,7 @@ msg_print(" { if (p_ptr->prace == RACE_ANDROID) break; #ifdef JP -msg_print("¿ÍÀ¸¤¬µÕÌá¤ê¤·¤¿µ¤¤¬¤¹¤ë¡£"); + msg_print("¿ÍÀ¸¤¬µÕÌá¤ê¤·¤¿µ¤¤¬¤¹¤ë¡£"); #else msg_print("You feel life has clocked back."); #endif @@ -7120,12 +7121,12 @@ msg_print(" switch (randint1(6)) { #ifdef JP -case 1: k = A_STR; act = "¶¯¤¯"; break; -case 2: k = A_INT; act = "ÁïÌÀ¤Ç"; break; -case 3: k = A_WIS; act = "¸­ÌÀ¤Ç"; break; -case 4: k = A_DEX; act = "´ïÍѤÇ"; break; -case 5: k = A_CON; act = "·ò¹¯¤Ç"; break; -case 6: k = A_CHR; act = "Èþ¤·¤¯"; break; + case 1: k = A_STR; act = "¶¯¤¯"; break; + case 2: k = A_INT; act = "ÁïÌÀ¤Ç"; break; + case 3: k = A_WIS; act = "¸­ÌÀ¤Ç"; break; + case 4: k = A_DEX; act = "´ïÍѤÇ"; break; + case 5: k = A_CON; act = "·ò¹¯¤Ç"; break; + case 6: k = A_CHR; act = "Èþ¤·¤¯"; break; #else case 1: k = A_STR; act = "strong"; break; case 2: k = A_INT; act = "bright"; break; @@ -7134,16 +7135,14 @@ case 6: k = A_CHR; act = " case 5: k = A_CON; act = "hale"; break; case 6: k = A_CHR; act = "beautiful"; break; #endif - } #ifdef JP -msg_format("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤É%s¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£", act); + msg_format("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤É%s¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£", act); #else msg_format("You're not as %s as you used to be...", act); #endif - p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 3) / 4; if (p_ptr->stat_cur[k] < 3) p_ptr->stat_cur[k] = 3; p_ptr->update |= (PU_BONUS); @@ -7153,12 +7152,11 @@ msg_format(" case 10: { #ifdef JP -msg_print("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤ÉÎ϶¯¤¯¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£"); + msg_print("¤¢¤Ê¤¿¤Ï°ÊÁ°¤Û¤ÉÎ϶¯¤¯¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿...¡£"); #else msg_print("You're not as powerful as you used to be..."); #endif - for (k = 0; k < 6; k++) { p_ptr->stat_cur[k] = (p_ptr->stat_cur[k] * 7) / 8; @@ -7178,27 +7176,30 @@ msg_print(" case GF_GRAVITY: { #ifdef JP -if (fuzzy) msg_print("²¿¤«½Å¤¤¤â¤Î¤Ç¤Ç¹¶·â¤µ¤ì¤¿¡ª"); -msg_print("¼þÊդνÅÎϤ¬¤æ¤¬¤ó¤À¡£"); + if (fuzzy) msg_print("²¿¤«½Å¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + msg_print("¼þÊդνÅÎϤ¬¤æ¤¬¤ó¤À¡£"); #else if (fuzzy) msg_print("You are hit by something heavy!"); msg_print("Gravity warps around you."); #endif - teleport_player(5); - if (!p_ptr->ffall) - (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); - if (!(p_ptr->resist_sound || p_ptr->ffall)) + if (!CHECK_MULTISHADOW()) { - int k = (randint1((dam > 90) ? 35 : (dam / 3 + 5))); - (void)set_stun(p_ptr->stun + k); + teleport_player(5, TELEPORT_PASSIVE); + if (!p_ptr->levitation) + (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); + if (!(p_ptr->resist_sound || p_ptr->levitation)) + { + int k = (randint1((dam > 90) ? 35 : (dam / 3 + 5))); + (void)set_stun(p_ptr->stun + k); + } } - if (p_ptr->ffall) + if (p_ptr->levitation) { dam = (dam * 2) / 3; } - if (!p_ptr->ffall || one_in_(13)) + if (!p_ptr->levitation || one_in_(13)) { inven_damage(set_cold_destroy, 2); } @@ -7211,7 +7212,7 @@ msg_print(" case GF_DISINTEGRATE: { #ifdef JP -if (fuzzy) msg_print("½ã¿è¤Ê¥¨¥Í¥ë¥®¡¼¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("½ã¿è¤Ê¥¨¥Í¥ë¥®¡¼¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by pure energy!"); #endif @@ -7223,7 +7224,7 @@ if (fuzzy) msg_print(" case GF_OLD_HEAL: { #ifdef JP -if (fuzzy) msg_print("²¿¤é¤«¤Î¹¶·â¤Ë¤è¤Ã¤Æµ¤Ê¬¤¬¤è¤¯¤Ê¤Ã¤¿¡£"); + if (fuzzy) msg_print("²¿¤é¤«¤Î¹¶·â¤Ë¤è¤Ã¤Æµ¤Ê¬¤¬¤è¤¯¤Ê¤Ã¤¿¡£"); #else if (fuzzy) msg_print("You are hit by something invigorating!"); #endif @@ -7236,7 +7237,7 @@ if (fuzzy) msg_print(" case GF_OLD_SPEED: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something!"); #endif @@ -7249,7 +7250,7 @@ if (fuzzy) msg_print(" case GF_OLD_SLOW: { #ifdef JP -if (fuzzy) msg_print("²¿¤«ÃÙ¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«ÃÙ¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something slow!"); #endif @@ -7262,7 +7263,7 @@ if (fuzzy) msg_print(" { if (p_ptr->free_act) break; #ifdef JP -if (fuzzy) msg_print("̲¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª"); + if (fuzzy) msg_print("̲¤Ã¤Æ¤·¤Þ¤Ã¤¿¡ª"); #else if (fuzzy) msg_print("You fall asleep!"); #endif @@ -7271,12 +7272,11 @@ if (fuzzy) msg_print("̲ if (ironman_nightmare) { #ifdef JP -msg_print("¶²¤í¤·¤¤¸÷·Ê¤¬Æ¬¤ËÉ⤫¤ó¤Ç¤­¤¿¡£"); + msg_print("¶²¤í¤·¤¤¸÷·Ê¤¬Æ¬¤ËÉ⤫¤ó¤Ç¤­¤¿¡£"); #else msg_print("A horrible vision enters your mind."); #endif - /* Pick a nightmare */ get_mon_num_prep(get_nightmare, NULL); @@ -7298,7 +7298,7 @@ msg_print(" case GF_SUPER_RAY: { #ifdef JP -if (fuzzy) msg_print("ËâË¡¤Î¥ª¡¼¥é¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("ËâË¡¤Î¥ª¡¼¥é¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by an aura of magic!"); #endif @@ -7311,7 +7311,7 @@ if (fuzzy) msg_print(" case GF_PSY_SPEAR: { #ifdef JP -if (fuzzy) msg_print("¥¨¥Í¥ë¥®¡¼¤Î²ô¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("¥¨¥Í¥ë¥®¡¼¤Î²ô¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by an energy!"); #endif @@ -7324,7 +7324,7 @@ if (fuzzy) msg_print(" case GF_METEOR: { #ifdef JP -if (fuzzy) msg_print("²¿¤«¤¬¶õ¤«¤é¤¢¤Ê¤¿¤ÎƬ¾å¤ËÍî¤Á¤Æ¤­¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«¤¬¶õ¤«¤é¤¢¤Ê¤¿¤ÎƬ¾å¤ËÍî¤Á¤Æ¤­¤¿¡ª"); #else if (fuzzy) msg_print("Something falls from the sky on you!"); #endif @@ -7343,24 +7343,27 @@ if (fuzzy) msg_print(" case GF_ICE: { #ifdef JP -if (fuzzy) msg_print("²¿¤«±Ô¤¯Î䤿¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«±Ô¤¯Î䤿¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something sharp and cold!"); #endif - cold_dam(dam, killer, monspell); - if (!p_ptr->resist_shard) - { - (void)set_cut(p_ptr->cut + damroll(5, 8)); - } - if (!p_ptr->resist_sound) + get_damage = cold_dam(dam, killer, monspell); + if (!CHECK_MULTISHADOW()) { - (void)set_stun(p_ptr->stun + randint1(15)); - } + if (!p_ptr->resist_shard) + { + (void)set_cut(p_ptr->cut + damroll(5, 8)); + } + if (!p_ptr->resist_sound) + { + (void)set_stun(p_ptr->stun + randint1(15)); + } - if ((!(p_ptr->resist_cold || IS_OPPOSE_COLD())) || one_in_(12)) - { - if (!p_ptr->immune_cold) inven_damage(set_cold_destroy, 3); + if ((!(p_ptr->resist_cold || IS_OPPOSE_COLD())) || one_in_(12)) + { + if (!p_ptr->immune_cold) inven_damage(set_cold_destroy, 3); + } } break; @@ -7370,7 +7373,7 @@ if (fuzzy) msg_print(" case GF_DEATH_RAY: { #ifdef JP -if (fuzzy) msg_print("²¿¤«Èó¾ï¤ËÎ䤿¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); + if (fuzzy) msg_print("²¿¤«Èó¾ï¤ËÎ䤿¤¤¤â¤Î¤Ç¹¶·â¤µ¤ì¤¿¡ª"); #else if (fuzzy) msg_print("You are hit by something extremely cold!"); #endif @@ -7412,7 +7415,15 @@ if (fuzzy) msg_print(" /* Drain mana */ case GF_DRAIN_MANA: { - if (p_ptr->csp) + if (CHECK_MULTISHADOW()) + { +#ifdef JP + msg_print("¹¶·â¤Ï¸¸±Æ¤ËÌ¿Ã椷¡¢¤¢¤Ê¤¿¤Ë¤ÏÆϤ«¤Ê¤«¤Ã¤¿¡£"); +#else + msg_print("The attack hits Shadow, you are unharmed!"); +#endif + } + else if (p_ptr->csp) { /* Basic message */ #ifdef JP @@ -7479,7 +7490,7 @@ if (fuzzy) msg_print(" /* Mind blast */ case GF_MIND_BLAST: { - if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav))) + if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7490,29 +7501,32 @@ if (fuzzy) msg_print(" } else { + if (!CHECK_MULTISHADOW()) + { #ifdef JP - msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£"); + msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£"); #else - msg_print("Your mind is blasted by psyonic energy."); + msg_print("Your mind is blasted by psyonic energy."); #endif - if (!p_ptr->resist_conf) - { - (void)set_confused(p_ptr->confused + randint0(4) + 4); - } + if (!p_ptr->resist_conf) + { + (void)set_confused(p_ptr->confused + randint0(4) + 4); + } - if (!p_ptr->resist_chaos && one_in_(3)) - { - (void)set_image(p_ptr->image + randint0(250) + 150); - } + if (!p_ptr->resist_chaos && one_in_(3)) + { + (void)set_image(p_ptr->image + randint0(250) + 150); + } - p_ptr->csp -= 50; - if (p_ptr->csp < 0) - { - p_ptr->csp = 0; - p_ptr->csp_frac = 0; + p_ptr->csp -= 50; + if (p_ptr->csp < 0) + { + p_ptr->csp = 0; + p_ptr->csp_frac = 0; + } + p_ptr->redraw |= PR_MANA; } - p_ptr->redraw |= PR_MANA; get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); } @@ -7522,7 +7536,7 @@ if (fuzzy) msg_print(" /* Brain smash */ case GF_BRAIN_SMASH: { - if (randint0(100 + rlev/2) < (MAX(5, p_ptr->skill_sav))) + if ((randint0(100 + rlev / 2) < MAX(5, p_ptr->skill_sav)) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7533,43 +7547,49 @@ if (fuzzy) msg_print(" } else { + if (!CHECK_MULTISHADOW()) + { #ifdef JP - msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£"); + msg_print("ÎîŪ¥¨¥Í¥ë¥®¡¼¤ÇÀº¿À¤¬¹¶·â¤µ¤ì¤¿¡£"); #else - msg_print("Your mind is blasted by psionic energy."); + msg_print("Your mind is blasted by psionic energy."); #endif - p_ptr->csp -= 100; - if (p_ptr->csp < 0) - { - p_ptr->csp = 0; - p_ptr->csp_frac = 0; + p_ptr->csp -= 100; + if (p_ptr->csp < 0) + { + p_ptr->csp = 0; + p_ptr->csp_frac = 0; + } + p_ptr->redraw |= PR_MANA; } - p_ptr->redraw |= PR_MANA; get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - if (!p_ptr->resist_blind) + if (!CHECK_MULTISHADOW()) { - (void)set_blind(p_ptr->blind + 8 + randint0(8)); - } - if (!p_ptr->resist_conf) - { - (void)set_confused(p_ptr->confused + randint0(4) + 4); - } - if (!p_ptr->free_act) - { - (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4); - } - (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); + if (!p_ptr->resist_blind) + { + (void)set_blind(p_ptr->blind + 8 + randint0(8)); + } + if (!p_ptr->resist_conf) + { + (void)set_confused(p_ptr->confused + randint0(4) + 4); + } + if (!p_ptr->free_act) + { + (void)set_paralyzed(p_ptr->paralyzed + randint0(4) + 4); + } + (void)set_slow(p_ptr->slow + randint0(4) + 4, FALSE); - while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav))) - (void)do_dec_stat(A_INT); - while (randint0(100 + rlev/2) > (MAX(5, p_ptr->skill_sav))) - (void)do_dec_stat(A_WIS); + while (randint0(100 + rlev / 2) > (MAX(5, p_ptr->skill_sav))) + (void)do_dec_stat(A_INT); + while (randint0(100 + rlev / 2) > (MAX(5, p_ptr->skill_sav))) + (void)do_dec_stat(A_WIS); - if (!p_ptr->resist_chaos) - { - (void)set_image(p_ptr->image + randint0(250) + 150); + if (!p_ptr->resist_chaos) + { + (void)set_image(p_ptr->image + randint0(250) + 150); + } } } break; @@ -7578,7 +7598,7 @@ if (fuzzy) msg_print(" /* cause 1 */ case GF_CAUSE_1: { - if (randint0(100 + rlev/2) < p_ptr->skill_sav) + if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7589,7 +7609,7 @@ if (fuzzy) msg_print(" } else { - curse_equipment(15, 0); + if (!CHECK_MULTISHADOW()) curse_equipment(15, 0); get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); } break; @@ -7598,7 +7618,7 @@ if (fuzzy) msg_print(" /* cause 2 */ case GF_CAUSE_2: { - if (randint0(100 + rlev/2) < p_ptr->skill_sav) + if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7609,7 +7629,7 @@ if (fuzzy) msg_print(" } else { - curse_equipment(25, MIN(rlev/2-15, 5)); + if (!CHECK_MULTISHADOW()) curse_equipment(25, MIN(rlev / 2 - 15, 5)); get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); } break; @@ -7618,7 +7638,7 @@ if (fuzzy) msg_print(" /* cause 3 */ case GF_CAUSE_3: { - if (randint0(100 + rlev/2) < p_ptr->skill_sav) + if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7629,7 +7649,7 @@ if (fuzzy) msg_print(" } else { - curse_equipment(33, MIN(rlev/2-15, 15)); + if (!CHECK_MULTISHADOW()) curse_equipment(33, MIN(rlev / 2 - 15, 15)); get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); } break; @@ -7638,7 +7658,7 @@ if (fuzzy) msg_print(" /* cause 4 */ case GF_CAUSE_4: { - if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU)) + if ((randint0(100 + rlev / 2) < p_ptr->skill_sav) && !(m_ptr->r_idx == MON_KENSHIROU) && !CHECK_MULTISHADOW()) { #ifdef JP msg_print("¤·¤«¤·È빦¤òÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7650,7 +7670,7 @@ if (fuzzy) msg_print(" else { get_damage = take_hit(DAMAGE_ATTACK, dam, killer, monspell); - (void)set_cut(p_ptr->cut + damroll(10, 10)); + if (!CHECK_MULTISHADOW()) (void)set_cut(p_ptr->cut + damroll(10, 10)); } break; } @@ -7658,7 +7678,7 @@ if (fuzzy) msg_print(" /* Hand of Doom */ case GF_HAND_DOOM: { - if (randint0(100 + rlev/2) < p_ptr->skill_sav) + if ((randint0(100 + rlev/2) < p_ptr->skill_sav) && !CHECK_MULTISHADOW()) { #ifdef JP msg_format("¤·¤«¤·¸úÎϤòÄ·¤ÍÊÖ¤·¤¿¡ª"); @@ -7669,16 +7689,19 @@ if (fuzzy) msg_print(" } else { + if (!CHECK_MULTISHADOW()) + { #ifdef JP - msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª"); + msg_print("¤¢¤Ê¤¿¤ÏÌ¿¤¬Çö¤Þ¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë´¶¤¸¤¿¡ª"); #else - msg_print("You feel your life fade away!"); + msg_print("You feel your life fade away!"); #endif + curse_equipment(40, 20); + } get_damage = take_hit(DAMAGE_ATTACK, dam, m_name, monspell); - curse_equipment(40, 20); - if (p_ptr->chp < 1) p_ptr->chp = 1; + if (p_ptr->chp < 1) p_ptr->chp = 1; /* Paranoia */ } break; } @@ -7693,7 +7716,11 @@ if (fuzzy) msg_print(" } } - if (p_ptr->tim_eyeeye && get_damage > 0 && !p_ptr->is_dead) + /* 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 && (who > 0)) { #ifdef JP msg_format("¹¶·â¤¬%s¼«¿È¤ò½ý¤Ä¤±¤¿¡ª", m_name); @@ -7706,7 +7733,7 @@ if (fuzzy) msg_print(" 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, -1); - set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE); + if (p_ptr->tim_eyeeye) set_tim_eyeeye(p_ptr->tim_eyeeye-5, TRUE); } if (p_ptr->riding && dam > 0) @@ -7721,8 +7748,7 @@ if (fuzzy) msg_print(" if ((p_ptr->special_defense & NINJA_KAWARIMI) && dam && who && (who != p_ptr->riding)) { - kawarimi(FALSE); - return obvious; + (void)kawarimi(FALSE); } /* Return "Anything seen?" */ @@ -7989,23 +8015,22 @@ bool in_disintegration_range(int y1, int x1, int y2, int x2) /* * breath shape */ -void breath_shape(u16b *path_g, int *pgrids, byte *gx, byte *gy, byte *gm, int *pgm_rad, int rad, int y1, int x1, int y2, int x2, int typ) +void breath_shape(u16b *path_g, int dist, int *pgrids, byte *gx, byte *gy, byte *gm, int *pgm_rad, int rad, int y1, int x1, int y2, int x2, int typ) { int by = y1; int bx = x1; - int tdis = distance(y1, x1, y2, x2); - int mdis = tdis + rad; int brad = 0; - int brev = rad * rad / tdis; + int brev = rad * rad / dist; int bdis = 0; int cdis; int path_n = 0; + int mdis = distance(y1, x1, y2, x2) + rad; while (bdis <= mdis) { int x, y; - if ((0 < tdis) && (path_n < tdis)) + if ((0 < dist) && (path_n < dist)) { int ny = GRID_Y(path_g[path_n]); int nx = GRID_X(path_g[path_n]); @@ -8066,7 +8091,7 @@ void breath_shape(u16b *path_g, int *pgrids, byte *gx, byte *gy, byte *gm, int * gm[bdis + 1] = *pgrids; /* Increase the size */ - brad = rad * (path_n + brev) / (tdis + brev); + brad = rad * (path_n + brev) / (dist + brev); /* Find the next ripple */ bdis++; @@ -8273,6 +8298,9 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons /* Attacker's name (prepared before polymorph)*/ char who_name[80]; + /* Can the player see the source of this effect? */ + bool see_s_msg = TRUE; + /* Initialize by null string */ who_name[0] = '\0'; @@ -8475,16 +8503,19 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons { y = GRID_Y(path_g[j]); x = GRID_X(path_g[j]); - if(project_m(0,0,y,x,dam,GF_SEEKER,flg))notice=TRUE; + if(project_m(0,0,y,x,dam,GF_SEEKER,flg,TRUE))notice=TRUE; if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; - /* Hack -- auto-recall */ - if (m_ptr->ml) monster_race_track(m_ptr->ap_r_idx); + if (m_ptr->ml) + { + /* Hack -- auto-recall */ + if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); - /* Hack - auto-track */ - if (m_ptr->ml) health_track(cave[project_m_y][project_m_x].m_idx); + /* Hack - auto-track */ + health_track(cave[project_m_y][project_m_x].m_idx); + } } } (void)project_f(0,0,y,x,dam,GF_SEEKER); @@ -8497,17 +8528,20 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons int x,y; y = GRID_Y(path_g[i]); x = GRID_X(path_g[i]); - if(project_m(0,0,y,x,dam,GF_SEEKER,flg)) + if(project_m(0,0,y,x,dam,GF_SEEKER,flg,TRUE)) notice=TRUE; if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; - - /* Hack -- auto-recall */ - if (m_ptr->ml) monster_race_track(m_ptr->ap_r_idx); - - /* Hack - auto-track */ - if (m_ptr->ml) health_track(cave[project_m_y][project_m_x].m_idx); + + if (m_ptr->ml) + { + /* Hack -- auto-recall */ + if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); + + /* Hack - auto-track */ + health_track(cave[project_m_y][project_m_x].m_idx); + } } } (void)project_f(0,0,y,x,dam,GF_SEEKER); @@ -8592,7 +8626,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons } } if(project_o(0,0,y,x,dam,GF_SUPER_RAY) )notice=TRUE; - if (!have_flag(f_flags_bold(y, x), FF_PROJECT)) + if (!cave_have_flag_bold(y, x, FF_PROJECT)) { if( second_step )continue; break; @@ -8627,16 +8661,19 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons int x,y; y = GRID_Y(path_g[i]); x = GRID_X(path_g[i]); - (void)project_m(0,0,y,x,dam,GF_SUPER_RAY,flg); + (void)project_m(0,0,y,x,dam,GF_SUPER_RAY,flg,TRUE); if(!who && (project_m_n==1) && !jump ){ if(cave[project_m_y][project_m_x].m_idx >0 ){ monster_type *m_ptr = &m_list[cave[project_m_y][project_m_x].m_idx]; - - /* Hack -- auto-recall */ - if (m_ptr->ml) monster_race_track(m_ptr->ap_r_idx); - - /* Hack - auto-track */ - if (m_ptr->ml) health_track(cave[project_m_y][project_m_x].m_idx); + + if (m_ptr->ml) + { + /* Hack -- auto-recall */ + if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); + + /* Hack - auto-track */ + health_track(cave[project_m_y][project_m_x].m_idx); + } } } (void)project_f(0,0,y,x,dam,GF_SUPER_RAY); @@ -8666,7 +8703,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons else { /* Hack -- Balls explode before reaching walls */ - if (!have_flag(f_flags_bold(ny, nx), FF_PROJECT) && (rad > 0)) break; + if (!cave_have_flag_bold(ny, nx, FF_PROJECT) && (rad > 0)) break; } /* Advance */ @@ -8734,14 +8771,16 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons } } + path_n = i; + /* Save the "blast epicenter" */ by = y; bx = x; - if (breath && (y1 == by) && (x1 == bx)) + if (breath && !path_n) { breath = FALSE; - gm_rad = 1; + gm_rad = rad; if (!old_hide) { flg &= ~(PROJECT_HIDE); @@ -8779,7 +8818,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons { flg &= ~(PROJECT_HIDE); - breath_shape(path_g, &grids, gx, gy, gm, &gm_rad, rad, y1, x1, by, bx, typ); + breath_shape(path_g, dist, &grids, gx, gy, gm, &gm_rad, rad, y1, x1, by, bx, typ); } else { @@ -8909,6 +8948,13 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons if (p_ptr->update) update_stuff(); + if (flg & PROJECT_KILL) + { + see_s_msg = (who > 0) ? is_seen(&m_list[who]) : + (!who ? TRUE : (player_can_see_bold(y1, x1) && projectable(py, px, y1, x1))); + } + + /* Check features */ if (flg & (PROJECT_GRID)) { @@ -9006,7 +9052,9 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons monster_type *m_ptr = &m_list[cave[y][x].m_idx]; monster_race *ref_ptr = &r_info[m_ptr->r_idx]; - if ((ref_ptr->flags2 & RF2_REFLECTING) && (flg & PROJECT_REFLECTABLE) && (!who || dist_hack > 1) && !one_in_(10)) + if ((flg & PROJECT_REFLECTABLE) && cave[y][x].m_idx && (ref_ptr->flags2 & RF2_REFLECTING) && + ((cave[y][x].m_idx != p_ptr->riding) || !(flg & PROJECT_PLAYER)) && + (!who || dist_hack > 1) && !one_in_(10)) { byte t_y, t_x; int max_attempts = 10; @@ -9026,7 +9074,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons t_x = x_saver; } - if (m_ptr->ml) + if (is_seen(m_ptr)) { #ifdef JP if ((m_ptr->r_idx == MON_KENSHIROU) || (m_ptr->r_idx == MON_RAOU)) @@ -9036,13 +9084,12 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons #else msg_print("The attack bounces!"); #endif - - if (is_original_ap(m_ptr)) ref_ptr->r_flags2 |= RF2_REFLECTING; } + if (is_original_ap_and_seen(m_ptr)) ref_ptr->r_flags2 |= RF2_REFLECTING; /* Reflected bolts randomly target either one */ - if (one_in_(2)) flg |= PROJECT_PLAYER; - else flg &= ~(PROJECT_PLAYER); + if (player_bold(y, x) || one_in_(2)) flg &= ~(PROJECT_PLAYER); + else flg |= PROJECT_PLAYER; /* The bolt is reflected */ project(cave[y][x].m_idx, 0, t_y, t_x, dam, typ, flg, monspell); @@ -9136,7 +9183,7 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons } /* Affect the monster in the grid */ - if (project_m(who, effective_dist, y, x, dam, typ,flg)) notice = TRUE; + if (project_m(who, effective_dist, y, x, dam, typ, flg, see_s_msg)) notice = TRUE; } @@ -9152,11 +9199,14 @@ bool project(int who, int rad, int y, int x, int dam, int typ, int flg, int mons { monster_type *m_ptr = &m_list[cave[y][x].m_idx]; - /* Hack -- auto-recall */ - if (m_ptr->ml) monster_race_track(m_ptr->ap_r_idx); + if (m_ptr->ml) + { + /* Hack -- auto-recall */ + if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx); - /* Hack - auto-track */ - if (m_ptr->ml) health_track(cave[y][x].m_idx); + /* Hack - auto-track */ + if (m_ptr->ml) health_track(cave[y][x].m_idx); + } } } } @@ -9402,7 +9452,7 @@ bool binding_field( int dam ) { if (player_has_los_bold(y, x) && projectable(py, px, y, x)) { (void)project_m(0,0,y,x,dam,GF_MANA, - (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP)); + (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP),TRUE); } } } @@ -9430,7 +9480,7 @@ void seal_of_mirror( int dam ) if( is_mirror_grid(&cave[y][x])) { if(project_m(0,0,y,x,dam,GF_GENOCIDE, - (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP))) + (PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP),TRUE)) { if( !cave[y][x].m_idx ) {