* アリーナ及びモンスター格闘場のモンスターは使用しないようにした.
* クエスト内, 鉄人モードのプレイヤー対象といった状況では反テレポート
がなくともテレポートレベルは無効であるので, SMARTなモンスターはその
条件を読み取りテレポートレベルを使わないものとした.
#define IS_TIM_ESP() (p_ptr->tim_esp || music_singing(MUSIC_MIND))
#define IS_TIM_STEALTH() (p_ptr->tim_stealth || music_singing(MUSIC_STEALTH))
+/* Is "teleport level" ineffective to this target? */
+#define TELE_LEVEL_IS_INEFF(TARGET) \
+ (p_ptr->inside_arena || p_ptr->inside_battle || \
+ (p_ptr->inside_quest && !random_quest_number(dun_level)) || \
+ (((TARGET) <= 0) && (quest_number(dun_level) || (dun_level >= d_info[dungeon_type].maxdepth)) && \
+ (dun_level >= 1) && ironman_downward))
+
/*
* World Score -- internet resource value
*/
f6 &= (RF6_NOMAGIC_MASK);
}
- /* Hack -- allow "desperate" spells */
- if ((r_ptr->flags2 & (RF2_SMART)) &&
- (m_ptr->hp < m_ptr->maxhp / 10) &&
- (randint0(100) < 50))
+ if (r_ptr->flags2 & RF2_SMART)
{
- /* Require intelligent spells */
- f4 &= (RF4_INT_MASK);
- f5 &= (RF5_INT_MASK);
- f6 &= (RF6_INT_MASK);
+ /* Hack -- allow "desperate" spells */
+ if ((m_ptr->hp < m_ptr->maxhp / 10) &&
+ (randint0(100) < 50))
+ {
+ /* Require intelligent spells */
+ f4 &= (RF4_INT_MASK);
+ f5 &= (RF5_INT_MASK);
+ f6 &= (RF6_INT_MASK);
+ }
- /* No spells left */
- if (!f4 && !f5 && !f6) return (FALSE);
+ /* Hack -- decline "teleport level" in some case */
+ if ((f6 & RF6_TELE_LEVEL) && TELE_LEVEL_IS_INEFF(0))
+ {
+ f6 &= ~(RF6_TELE_LEVEL);
+ }
}
+ /* No spells left */
+ if (!f4 && !f5 && !f6) return (FALSE);
+
/* Remove the "ineffective" spells */
remove_bad_spells(m_idx, &f4, &f5, &f6);
{
f4 &= ~(RF4_SUMMON_MASK);
f5 &= ~(RF5_SUMMON_MASK);
- f6 &= ~(RF6_SUMMON_MASK);
+ f6 &= ~(RF6_SUMMON_MASK | RF6_TELE_LEVEL);
}
/* No spells left */
if (!f4 && !f5 && !f6) return (FALSE);
- /* Check for a clean bolt shot */
- if (((f4 & RF4_BOLT_MASK) ||
- (f5 & RF5_BOLT_MASK) ||
- (f6 & RF6_BOLT_MASK)) &&
- !(r_ptr->flags2 & RF2_STUPID) &&
- !clean_shot(m_ptr->fy, m_ptr->fx, py, px, FALSE))
+ if (!(r_ptr->flags2 & RF2_STUPID))
{
- /* Remove spells that will only hurt friends */
- f4 &= ~(RF4_BOLT_MASK);
- f5 &= ~(RF5_BOLT_MASK);
- f6 &= ~(RF6_BOLT_MASK);
- }
+ /* Check for a clean bolt shot */
+ if (((f4 & RF4_BOLT_MASK) ||
+ (f5 & RF5_BOLT_MASK) ||
+ (f6 & RF6_BOLT_MASK)) &&
+ !clean_shot(m_ptr->fy, m_ptr->fx, py, px, FALSE))
+ {
+ /* Remove spells that will only hurt friends */
+ f4 &= ~(RF4_BOLT_MASK);
+ f5 &= ~(RF5_BOLT_MASK);
+ f6 &= ~(RF6_BOLT_MASK);
+ }
- /* Check for a possible summon */
- if (((f4 & RF4_SUMMON_MASK) ||
- (f5 & RF5_SUMMON_MASK) ||
- (f6 & RF6_SUMMON_MASK)) &&
- !(r_ptr->flags2 & RF2_STUPID) &&
- !(summon_possible(y, x)))
- {
- /* Remove summoning spells */
- f4 &= ~(RF4_SUMMON_MASK);
- f5 &= ~(RF5_SUMMON_MASK);
- f6 &= ~(RF6_SUMMON_MASK);
- }
+ /* Check for a possible summon */
+ if (((f4 & RF4_SUMMON_MASK) ||
+ (f5 & RF5_SUMMON_MASK) ||
+ (f6 & RF6_SUMMON_MASK)) &&
+ !(summon_possible(y, x)))
+ {
+ /* Remove summoning spells */
+ f4 &= ~(RF4_SUMMON_MASK);
+ f5 &= ~(RF5_SUMMON_MASK);
+ f6 &= ~(RF6_SUMMON_MASK);
+ }
- /* No spells left */
- if (!f4 && !f5 && !f6) return (FALSE);
+ /* No spells left */
+ if (!f4 && !f5 && !f6) return (FALSE);
+ }
/* Extract the "inate" spells */
for (k = 0; k < 32; k++)
{
f4 &= ~(RF4_SUMMON_MASK);
f5 &= ~(RF5_SUMMON_MASK);
- f6 &= ~(RF6_SUMMON_MASK);
+ f6 &= ~(RF6_SUMMON_MASK | RF6_TELE_LEVEL);
}
if (p_ptr->inside_battle && !one_in_(3))
/* Remove some spells if necessary */
- /* Check for a clean bolt shot */
- if (((f4 & RF4_BOLT_MASK) ||
- (f5 & RF5_BOLT_MASK) ||
- (f6 & RF6_BOLT_MASK)) &&
- !(r_ptr->flags2 & RF2_STUPID) &&
- !clean_shot(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, pet))
+ if (!(r_ptr->flags2 & RF2_STUPID))
{
- f4 &= ~(RF4_BOLT_MASK);
- f5 &= ~(RF5_BOLT_MASK);
- f6 &= ~(RF6_BOLT_MASK);
- }
+ /* Check for a clean bolt shot */
+ if (((f4 & RF4_BOLT_MASK) ||
+ (f5 & RF5_BOLT_MASK) ||
+ (f6 & RF6_BOLT_MASK)) &&
+ !clean_shot(m_ptr->fy, m_ptr->fx, t_ptr->fy, t_ptr->fx, pet))
+ {
+ f4 &= ~(RF4_BOLT_MASK);
+ f5 &= ~(RF5_BOLT_MASK);
+ f6 &= ~(RF6_BOLT_MASK);
+ }
- /* Check for a possible summon */
- if (((f4 & RF4_SUMMON_MASK) ||
- (f5 & RF5_SUMMON_MASK) ||
- (f6 & RF6_SUMMON_MASK)) &&
- !(r_ptr->flags2 & RF2_STUPID) &&
- !(summon_possible(t_ptr->fy, t_ptr->fx)))
- {
- /* Remove summoning spells */
- f4 &= ~(RF4_SUMMON_MASK);
- f5 &= ~(RF5_SUMMON_MASK);
- f6 &= ~(RF6_SUMMON_MASK);
+ /* Check for a possible summon */
+ if (((f4 & RF4_SUMMON_MASK) ||
+ (f5 & RF5_SUMMON_MASK) ||
+ (f6 & RF6_SUMMON_MASK)) &&
+ !(summon_possible(t_ptr->fy, t_ptr->fx)))
+ {
+ /* Remove summoning spells */
+ f4 &= ~(RF4_SUMMON_MASK);
+ f5 &= ~(RF5_SUMMON_MASK);
+ f6 &= ~(RF6_SUMMON_MASK);
+ }
}
- /* Hack -- allow "desperate" spells */
- if ((r_ptr->flags2 & RF2_SMART) &&
- (m_ptr->hp < m_ptr->maxhp / 10) &&
- (randint0(100) < 50))
+ if (r_ptr->flags2 & RF2_SMART)
{
- /* Require intelligent spells */
- f4 &= (RF4_INT_MASK);
- f5 &= (RF5_INT_MASK);
- f6 &= (RF6_INT_MASK);
+ /* Hack -- allow "desperate" spells */
+ if ((m_ptr->hp < m_ptr->maxhp / 10) &&
+ (randint0(100) < 50))
+ {
+ /* Require intelligent spells */
+ f4 &= (RF4_INT_MASK);
+ f5 &= (RF5_INT_MASK);
+ f6 &= (RF6_INT_MASK);
+ }
+
+ /* Hack -- decline "teleport level" in some case */
+ if ((f6 & RF6_TELE_LEVEL) && TELE_LEVEL_IS_INEFF((t_idx == p_ptr->riding) ? 0 : t_idx))
+ {
+ f6 &= ~(RF6_TELE_LEVEL);
+ }
}
/* No spells left */
see_m = m_ptr->ml;
}
- /* No effect in arena or quest */
- if (p_ptr->inside_arena || p_ptr->inside_battle || (p_ptr->inside_quest && !random_quest_number(dun_level)) ||
- ((quest_number(dun_level) || (dun_level >= d_info[dungeon_type].maxdepth)) && (dun_level > 1) && ironman_downward && (m_idx <= 0)))
+ /* No effect in some case */
+ if (TELE_LEVEL_IS_INEFF(m_idx))
{
#ifdef JP
if (see_m) msg_print("¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£");