#define MFLAG_SHOW 0x40 /* Monster is recently memorized */
#define MFLAG_MARK 0x80 /* Monster is currently memorized */
-#define MFLAG_KAGE 0x01 /* Monster is kage */
-#define MFLAG_NOPET 0x02 /* Cannot make monster pet */
-#define MFLAG_NOGENO 0x04 /* Cannot genocide */
-#define MFLAG_CHAMELEON 0x08 /* Monster is chameleon */
-#define MFLAG_NOFLOW 0x10 /* Monster is in no_flow_by_smell mode */
+#define MFLAG2_KAGE 0x01 /* Monster is kage */
+#define MFLAG2_NOPET 0x02 /* Cannot make monster pet */
+#define MFLAG2_NOGENO 0x04 /* Cannot genocide */
+#define MFLAG2_CHAMELEON 0x08 /* Monster is chameleon */
+#define MFLAG2_NOFLOW 0x10 /* Monster is in no_flow_by_smell mode */
/*
if (m_ptr->r_idx < 0)
{
m_ptr->r_idx = (0-m_ptr->r_idx);
- m_ptr->mflag2 |= MFLAG_KAGE;
+ m_ptr->mflag2 |= MFLAG2_KAGE;
}
}
else
if (z_older_than(11, 0, 12))
{
- if (m_ptr->mflag2 & MFLAG_KAGE)
+ if (m_ptr->mflag2 & MFLAG2_KAGE)
m_ptr->ap_r_idx = MON_KAGE;
}
if (!cave_floor_grid(c_ptr)) continue;
/* Check for "availability" (if monsters can flow) */
- if (!(m_ptr->mflag2 & MFLAG_NOFLOW))
+ if (!(m_ptr->mflag2 & MFLAG2_NOFLOW))
{
/* Ignore grids very far from the player */
if (c_ptr->dist == 0) continue;
bool done = FALSE;
bool will_run = mon_will_run(m_idx);
cave_type *c_ptr;
- bool no_flow = ((m_ptr->mflag2 & MFLAG_NOFLOW) && (cave[m_ptr->fy][m_ptr->fx].cost > 2));
+ bool no_flow = ((m_ptr->mflag2 & MFLAG2_NOFLOW) && (cave[m_ptr->fy][m_ptr->fx].cost > 2));
bool can_pass_wall;
/* Flow towards the player */
}
}
- if ((m_ptr->mflag2 & MFLAG_CHAMELEON) && one_in_(13) && !m_ptr->csleep)
+ if ((m_ptr->mflag2 & MFLAG2_CHAMELEON) && one_in_(13) && !m_ptr->csleep)
{
choose_new_monster(m_idx, FALSE, 0);
r_ptr = &r_info[m_ptr->r_idx];
* Try to flow by smell.
*/
if (p_ptr->no_flowed && i > 2 && m_ptr->target_y)
- m_ptr->mflag2 &= ~MFLAG_NOFLOW;
+ m_ptr->mflag2 &= ~MFLAG2_NOFLOW;
/* If we haven't done anything, try casting a spell again */
if (!do_turn && !do_move && !m_ptr->monfear && !(p_ptr->riding == m_idx) && aware)
/* Flow by smell is allowed */
if (!p_ptr->no_flowed)
{
- m_ptr->mflag2 &= ~MFLAG_NOFLOW;
+ m_ptr->mflag2 &= ~MFLAG2_NOFLOW;
}
/* Assume no move */
#if 0 /* (cave[py][px].when == cave[fy][fx].when) is always FALSE... */
/* Hack -- Monsters can "smell" the player from far away */
/* Note that most monsters have "aaf" of "20" or so */
- else if (!(m_ptr->mflag2 & MFLAG_NOFLOW) &&
+ else if (!(m_ptr->mflag2 & MFLAG2_NOFLOW) &&
(cave_floor_bold(py, px) || (cave[py][px].feat == FEAT_TREES)) &&
(cave[py][px].when == cave[fy][fx].when) &&
(cave[fy][fx].dist < MONSTER_FLOW_DEPTH) &&
/* Give up flow_by_smell when it might useless */
if (p_ptr->no_flowed && one_in_(3))
- m_ptr->mflag2 |= MFLAG_NOFLOW;
+ m_ptr->mflag2 |= MFLAG2_NOFLOW;
/* Hack -- notice death or departure */
if (!p_ptr->playing || p_ptr->is_dead) break;
if (m_idx == p_ptr->riding) new_exp = (new_exp + 1) / 2;
if (!dun_level) new_exp /= 5;
m_ptr->exp += new_exp;
- if (m_ptr->mflag2 & MFLAG_CHAMELEON) return;
+ if (m_ptr->mflag2 & MFLAG2_CHAMELEON) return;
if (m_ptr->exp >= r_ptr->next_exp)
{
((m_ptr->sub_align & SUB_ALIGN_GOOD) &&
(n_ptr->sub_align & SUB_ALIGN_EVIL)))
{
- if (!(m_ptr->mflag2 & MFLAG_CHAMELEON) || !(n_ptr->mflag2 & MFLAG_CHAMELEON)) return TRUE;
+ if (!(m_ptr->mflag2 & MFLAG2_CHAMELEON) || !(n_ptr->mflag2 & MFLAG2_CHAMELEON)) return TRUE;
}
}
monster_race *r_ptr = &r_info[m_ptr->r_idx];
/* Extract real race */
- if (m_ptr->mflag2 & MFLAG_CHAMELEON)
+ if (m_ptr->mflag2 & MFLAG2_CHAMELEON)
{
if (r_ptr->flags1 & RF1_UNIQUE)
return &r_info[MON_CHAMELEON_K];
if ((r_ptr->flags1 & RF1_UNIQUE) && !(p_ptr->image && !(mode & 0x200)))
{
/* Start with the name (thus nominative and objective) */
- if ((m_ptr->mflag2 & MFLAG_CHAMELEON) && !(mode & 0x100))
+ if ((m_ptr->mflag2 & MFLAG2_CHAMELEON) && !(mode & 0x100))
{
#ifdef JP
char *t;
#endif
}
- if ((mode & 0x200) && (m_ptr->mflag2 & MFLAG_CHAMELEON))
+ if ((mode & 0x200) && (m_ptr->mflag2 & MFLAG2_CHAMELEON))
{
if (r_ptr->flags1 & RF1_UNIQUE)
{
{
choose_new_monster(c_ptr->m_idx, TRUE, 0);
r_ptr = &r_info[m_ptr->r_idx];
- m_ptr->mflag2 |= MFLAG_CHAMELEON;
+ m_ptr->mflag2 |= MFLAG2_CHAMELEON;
rating++;
/* Hack - Set sub_align to neutral when the Chameleon Lord is generated as "GUARDIAN" */
else if (is_kage)
{
m_ptr->ap_r_idx = MON_KAGE;
- m_ptr->mflag2 |= MFLAG_KAGE;
+ m_ptr->mflag2 |= MFLAG2_KAGE;
}
- if (mode & PM_NO_PET) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (mode & PM_NO_PET) m_ptr->mflag2 |= MFLAG2_NOPET;
/* Not visible */
m_ptr->ml = FALSE;
m_idx = cave[y][x].m_idx;
- if (m_list[m_idx].mflag2 & MFLAG_CHAMELEON) r_ptr = &r_info[m_list[m_idx].r_idx];
+ if (m_list[m_idx].mflag2 & MFLAG2_CHAMELEON) r_ptr = &r_info[m_list[m_idx].r_idx];
summon_kin_type = r_ptr->d_char;
for (attempts = randint1(10) + 5; attempts; attempts--)
if (!mon_scatter(&y, &x, m_ptr->fy, m_ptr->fx, 1))
return FALSE;
- if (m_ptr->mflag2 & MFLAG_NOPET) mode |= PM_NO_PET;
+ if (m_ptr->mflag2 & MFLAG2_NOPET) mode |= PM_NO_PET;
/* Create a new monster (awake, no groups) */
if (!place_monster_aux(m_idx, y, x, m_ptr->r_idx, (mode | PM_NO_KAGE)))
if (clone)
{
m_list[hack_m_idx_ii].smart |= SM_CLONED;
- m_list[hack_m_idx_ii].mflag2 |= MFLAG_NOPET;
+ m_list[hack_m_idx_ii].mflag2 |= MFLAG2_NOPET;
}
return TRUE;
!(r_ptr->flags1 & RF1_UNIQUE) &&
!p_ptr->inside_arena && !p_ptr->inside_quest &&
(r_ptr->level < randint1(p_ptr->lev+50)) &&
- !(m_ptr->mflag2 & MFLAG_NOGENO))
+ !(m_ptr->mflag2 & MFLAG2_NOGENO))
{
/* Delete the monster, rather than killing it. */
delete_monster_idx(c_ptr->m_idx);
msg_print("Your invocation is ineffectual!");
#endif
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
}
break;
/* Attempt a saving throw */
if ((r_ptr->flags1 & RF1_QUESTOR) ||
(r_ptr->flags3 & RF3_NO_CONF) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(r_ptr->level > randint1((dam - 10) < 1 ? 1 : (dam - 10)) + 5))
{
/* Memorize a flag */
obvious = FALSE;
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else if (p_ptr->cursed & TRC_AGGRAVATE)
{
note = " hates you too much!";
#endif
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
/* Attempt a saving throw */
if ((r_ptr->flags1 & RF1_QUESTOR) ||
(!(r_ptr->flags3 & RF3_UNDEAD)) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(r_ptr->level > randint1((dam - 10) < 1 ? 1 : (dam - 10)) + 10))
{
/* No obvious effect */
#endif
obvious = FALSE;
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else if (p_ptr->cursed & TRC_AGGRAVATE)
{
note = " hates you too much!";
#endif
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
/* Attempt a saving throw */
if ((r_ptr->flags1 & RF1_QUESTOR) ||
(!(r_ptr->flags3 & RF3_DEMON)) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(r_ptr->level > randint1((dam - 10) < 1 ? 1 : (dam - 10)) + 10))
{
/* No obvious effect */
#endif
obvious = FALSE;
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else if (p_ptr->cursed & TRC_AGGRAVATE)
{
note = " hates you too much!";
#endif
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
/* Attempt a saving throw */
if ((r_ptr->flags1 & (RF1_QUESTOR)) ||
(!(r_ptr->flags3 & (RF3_ANIMAL))) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(r_ptr->flags3 & (RF3_NO_CONF)) ||
(r_ptr->level > randint1((dam - 10) < 1 ? 1 : (dam - 10)) + 10))
{
#endif
obvious = FALSE;
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else if (p_ptr->cursed & TRC_AGGRAVATE)
{
note = " hates you too much!";
#endif
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
/* Attempt a saving throw */
if ((r_ptr->flags1 & (RF1_QUESTOR)) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(r_ptr->flags3 & (RF3_DEMON | RF3_UNDEAD | RF3_NONLIVING)) ||
((r_ptr->level+10) > randint1(dam)))
{
#endif
obvious = FALSE;
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else if (p_ptr->cursed & TRC_AGGRAVATE)
{
note = " hates you too much!";
#endif
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
}
else if (m_ptr->hp < randint0(nokori_hp))
{
- if (m_ptr->mflag2 & MFLAG_CHAMELEON) choose_new_monster(c_ptr->m_idx, FALSE, MON_CHAMELEON);
+ if (m_ptr->mflag2 & MFLAG2_CHAMELEON) choose_new_monster(c_ptr->m_idx, FALSE, MON_CHAMELEON);
#ifdef JP
msg_format("%s¤òÊᤨ¤¿¡ª",m_name);
#else
}
else
{
- if ((r_ptr->level > randint0(dam)) || (m_ptr->mflag2 & MFLAG_NOGENO))
+ if ((r_ptr->level > randint0(dam)) || (m_ptr->mflag2 & MFLAG2_NOGENO))
{
dam = 0;
angry = TRUE;
note = "is unaffected!";
#endif
get_angry = TRUE;
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
break;
}
/* Attempt a saving throw */
else if ((r_ptr->flags1 & (RF1_QUESTOR)) ||
(r_ptr->flags1 & (RF1_UNIQUE)) ||
- (m_ptr->mflag2 & MFLAG_NOPET) ||
+ (m_ptr->mflag2 & MFLAG2_NOPET) ||
(p_ptr->cursed & TRC_AGGRAVATE) ||
((r_ptr->level+10) > randint1(dam)))
{
/* Resist */
- if (one_in_(4)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (one_in_(4)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
else
{
m_ptr->csleep = 0;
sleep = TRUE;
}
- if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG_NOPET;
+ if (!is_pet(m_ptr)) m_ptr->mflag2 |= MFLAG2_NOPET;
}
/* Speed up monsters in line of sight */
else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
else if (player_cast && (r_ptr->level > randint0(power))) angry = TRUE;
- else if (player_cast && (m_ptr->mflag2 & MFLAG_NOGENO)) angry = TRUE;
+ else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) angry = TRUE;
/* Delete the monster */
else delete_monster_idx(i);
}
set_hostile(m_ptr);
}
- if (one_in_(13)) m_ptr->mflag2 |= MFLAG_NOGENO;
+ if (one_in_(13)) m_ptr->mflag2 |= MFLAG2_NOGENO;
}
if (player_cast)
if (m_ptr->ap_r_idx != m_ptr->r_idx)
{
- if (m_ptr->mflag2 & MFLAG_KAGE)
- m_ptr->mflag2 &= ~(MFLAG_KAGE);
+ if (m_ptr->mflag2 & MFLAG2_KAGE)
+ m_ptr->mflag2 &= ~(MFLAG2_KAGE);
m_ptr->ap_r_idx = m_ptr->r_idx;
lite_spot(m_ptr->fy, m_ptr->fx);
if (p_ptr->inside_arena || p_ptr->inside_battle) return (FALSE);
- if ((p_ptr->riding == c_ptr->m_idx) || (m_ptr->mflag2 & MFLAG_KAGE)) return (FALSE);
+ if ((p_ptr->riding == c_ptr->m_idx) || (m_ptr->mflag2 & MFLAG2_KAGE)) return (FALSE);
/* Memorize the monster before polymorphing */
back_m = *m_ptr;
/* Get the monsters attitude */
if (is_friendly(m_ptr)) mode |= PM_FORCE_FRIENDLY;
if (is_pet(m_ptr)) mode |= PM_FORCE_PET;
- if (m_ptr->mflag2 & MFLAG_NOPET) mode |= PM_NO_PET;
+ if (m_ptr->mflag2 & MFLAG2_NOPET) mode |= PM_NO_PET;
/* "Kill" the "old" monster */
delete_monster_idx(c_ptr->m_idx);
}
}
- if (m_ptr->mflag2 & MFLAG_CHAMELEON)
+ if (m_ptr->mflag2 & MFLAG2_CHAMELEON)
{
choose_new_monster(m_idx, TRUE, MON_CHAMELEON);
r_ptr = &r_info[m_ptr->r_idx];
if (r_ptr->r_sights < MAX_SHORT) r_ptr->r_sights++;
}
- if (m_ptr->mflag2 & MFLAG_CHAMELEON)
+ if (m_ptr->mflag2 & MFLAG2_CHAMELEON)
{
/* You might have unmasked Chameleon first time */
r_ptr = real_r_ptr(m_ptr);
if (m_ptr->ml || (r_ptr->flags1 & RF1_UNIQUE))
{
/* Count kills this life */
- if ((m_ptr->mflag2 & MFLAG_KAGE) && (r_info[MON_KAGE].r_pkills < MAX_SHORT)) r_info[MON_KAGE].r_pkills++;
+ if ((m_ptr->mflag2 & MFLAG2_KAGE) && (r_info[MON_KAGE].r_pkills < MAX_SHORT)) r_info[MON_KAGE].r_pkills++;
else if (r_ptr->r_pkills < MAX_SHORT) r_ptr->r_pkills++;
/* Count kills in all lives */
- if ((m_ptr->mflag2 & MFLAG_KAGE) && (r_info[MON_KAGE].r_tkills < MAX_SHORT)) r_info[MON_KAGE].r_tkills++;
+ if ((m_ptr->mflag2 & MFLAG2_KAGE) && (r_info[MON_KAGE].r_tkills < MAX_SHORT)) r_info[MON_KAGE].r_tkills++;
else if (r_ptr->r_tkills < MAX_SHORT) r_ptr->r_tkills++;
/* Hack -- Auto-recall */
{
for (i = 0; i < MAX_KUBI; i++)
{
- if ((kubi_r_idx[i] == m_ptr->r_idx) && !(m_ptr->mflag2 & MFLAG_CHAMELEON))
+ if ((kubi_r_idx[i] == m_ptr->r_idx) && !(m_ptr->mflag2 & MFLAG2_CHAMELEON))
{
#ifdef JP
msg_format("%s¤Î¼ó¤Ë¤Ï¾Þ¶â¤¬¤«¤«¤Ã¤Æ¤¤¤ë¡£", m_name);
}
/* Display monster's level --- idea borrowed from ToME */
- if (ap_r_ptr->r_tkills && !(m_ptr->mflag2 & MFLAG_KAGE))
+ if (ap_r_ptr->r_tkills && !(m_ptr->mflag2 & MFLAG2_KAGE))
{
#ifdef JP
return format("¥ì¥Ù¥ë%d, %s%s%s", ap_r_ptr->level, desc, attitude, clone);
M_INT_SUB(exp_adv_h, exp_adv_l, p_ptr->exp, p_ptr->exp_frac);
if ((p_ptr->lev>=PY_MAX_LEVEL) || (p_ptr->prace == RACE_ANDROID))
sprintf(buf,"**");
- else if (!ap_r_ptr->r_tkills || (m_ptr->mflag2 & MFLAG_KAGE))
+ else if (!ap_r_ptr->r_tkills || (m_ptr->mflag2 & MFLAG2_KAGE))
sprintf(buf,"??");
else if (M_INT_GREATER(exp_mon_h, exp_mon_l, exp_adv_h, exp_adv_l))
sprintf(buf,"001");