*/
#include "angband.h"
+#include "util.h"
+
+#include "floor.h"
+#include "dungeon.h"
+#include "grid.h"
#include "object-curse.h"
+#include "quest.h"
+#include "realm-hex.h"
+#include "player-move.h"
+#include "player-status.h"
+#include "monster.h"
+#include "monster-spell.h"
+#include "spells.h"
+#include "world.h"
+#include "realm-song.h"
+#include "view-mainwindow.h"
+#include "player-race.h"
+#include "player-class.h"
/*!
*/
static void remove_bad_spells(MONSTER_IDX m_idx, u32b *f4p, u32b *f5p, u32b *f6p)
{
- monster_type *m_ptr = &m_list[m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
u32b f4 = (*f4p);
if (smart & (SM_RES_NETH))
{
- if (prace_is_(RACE_SPECTRE))
+ if (PRACE_IS_(RACE_SPECTRE))
{
f4 &= ~(RF4_BR_NETH);
f5 &= ~(RF5_BA_NETH);
if (smart & (SM_RES_DARK))
{
- if (prace_is_(RACE_VAMPIRE))
+ if (PRACE_IS_(RACE_VAMPIRE))
{
f4 &= ~(RF4_BR_DARK);
f5 &= ~(RF5_BA_DARK);
POSITION y = m_ptr->fy;
POSITION x = m_ptr->fx;
OBJECT_IDX this_o_idx, next_o_idx = 0;
- cave_type *c_ptr;
+ grid_type *g_ptr;
for (xx = x - 5; xx <= x + 5; xx++)
{
if (!los(y, x, yy, xx)) continue;
if (!projectable(y, x, yy, xx)) continue;
- c_ptr = &cave[yy][xx];
+ g_ptr = ¤t_floor_ptr->grid_array[yy][xx];
/* Scan the pile of objects */
- for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
+ for (this_o_idx = g_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx)
{
- object_type *o_ptr = &o_list[this_o_idx];
-
- /* Acquire next object */
+ object_type *o_ptr = ¤t_floor_ptr->o_list[this_o_idx];
next_o_idx = o_ptr->next_o_idx;
/* Known to be worthless? */
y = GRID_Y(grid_g[i]);
x = GRID_X(grid_g[i]);
- if ((cave[y][x].m_idx > 0) && !((y == y2) && (x == x2)))
+ if ((current_floor_ptr->grid_array[y][x].m_idx > 0) && !((y == y2) && (x == x2)))
{
- monster_type *m_ptr = &m_list[cave[y][x].m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[current_floor_ptr->grid_array[y][x].m_idx];
if (is_friend == is_pet(m_ptr))
{
return (FALSE);
*/
void breath(POSITION y, POSITION x, MONSTER_IDX m_idx, EFFECT_ID typ, int dam_hp, POSITION rad, bool breath, int monspell, int target_type)
{
- monster_type *m_ptr = &m_list[m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
bool learnable = spell_learnable(m_idx);
BIT_FLAGS flg = 0x00;
*/
bool dispel_check(MONSTER_IDX m_idx)
{
- monster_type *m_ptr = &m_list[m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
/* Invulnabilty (including the song) */
if ((p_ptr->special_attack & ATTACK_COLD) && !(r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)) return (TRUE);
if ((p_ptr->special_attack & ATTACK_POIS) && !(r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)) return (TRUE);
- /* Speed */
if (p_ptr->pspeed < 145)
{
if (IS_FAST()) return (TRUE);
/* Light speed */
if (p_ptr->lightspeed && (m_ptr->mspeed < 136)) return (TRUE);
- if (p_ptr->riding && (m_list[p_ptr->riding].mspeed < 135))
+ if (p_ptr->riding && (current_floor_ptr->m_list[p_ptr->riding].mspeed < 135))
{
- if (MON_FAST(&m_list[p_ptr->riding])) return (TRUE);
+ if (MON_FAST(¤t_floor_ptr->m_list[p_ptr->riding])) return (TRUE);
}
/* No need to cast dispel spell */
*/
static int choose_attack_spell(MONSTER_IDX m_idx, byte spells[], byte num)
{
- monster_type *m_ptr = &m_list[m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
byte escape[96], escape_num = 0;
/*** Try to pick an appropriate spell type ***/
/* world */
- if (world_num && (randint0(100) < 15) && !world_monster)
+ if (world_num && (randint0(100) < 15) && !current_world_ptr->timewalk_m_idx)
{
/* Choose haste spell */
return (world[randint0(world_num)]);
}
/* Player is close and we have attack spells, blink away */
- if ((distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx) < 4) && (attack_num || (r_ptr->a_ability_flags2 & RF6_TRAPS)) && (randint0(100) < 75) && !world_monster)
+ if ((distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx) < 4) && (attack_num || (r_ptr->a_ability_flags2 & RF6_TRAPS)) && (randint0(100) < 75) && !current_world_ptr->timewalk_m_idx)
{
/* Choose tactical spell */
if (tactic_num) return (tactic[randint0(tactic_num)]);
}
/* Try another tactical spell (sometimes) */
- if (tactic_num && (randint0(100) < 50) && !world_monster)
+ if (tactic_num && (randint0(100) < 50) && !current_world_ptr->timewalk_m_idx)
{
/* Choose tactic spell */
return (tactic[randint0(tactic_num)]);
{
int next_x = *xp + tonari_x[tonari][i];
int next_y = *yp + tonari_y[tonari][i];
- cave_type *c_ptr;
+ grid_type *g_ptr;
/* Access the next grid */
- c_ptr = &cave[next_y][next_x];
+ g_ptr = ¤t_floor_ptr->grid_array[next_y][next_x];
/* Skip this feature */
- if (!cave_have_flag_grid(c_ptr, f_flag)) continue;
+ if (!cave_have_flag_grid(g_ptr, f_flag)) continue;
if (path_check(m_ptr->fy, m_ptr->fx, next_y, next_x))
{
PERCENTAGE failrate;
byte spell[96], num = 0;
BIT_FLAGS f4, f5, f6;
- monster_type *m_ptr = &m_list[m_idx];
+ monster_type *m_ptr = ¤t_floor_ptr->m_list[m_idx];
monster_race *r_ptr = &r_info[m_ptr->r_idx];
GAME_TEXT m_name[MAX_NLEN];
#ifndef JP
/* Check "projectable" */
bool direct;
- bool in_no_magic_dungeon = (d_info[dungeon_type].flags1 & DF1_NO_MAGIC) && dun_level
+ bool in_no_magic_dungeon = (d_info[p_ptr->dungeon_idx].flags1 & DF1_NO_MAGIC) && current_floor_ptr->dun_level
&& (!p_ptr->inside_quest || is_fixed_quest_idx(p_ptr->inside_quest));
bool can_use_lite_area = FALSE;
if (los(m_ptr->fy, m_ptr->fx, y_br_lite, x_br_lite))
{
- feature_type *f_ptr = &f_info[cave[y_br_lite][x_br_lite].feat];
+ feature_type *f_ptr = &f_info[current_floor_ptr->grid_array[y_br_lite][x_br_lite].feat];
if (!have_flag(f_ptr->flags, FF_LOS))
{
/* Check path */
if (projectable(m_ptr->fy, m_ptr->fx, y, x))
{
- feature_type *f_ptr = &f_info[cave[y][x].feat];
+ feature_type *f_ptr = &f_info[current_floor_ptr->grid_array[y][x].feat];
if (!have_flag(f_ptr->flags, FF_PROJECT))
{
if (!(r_ptr->flags2 & RF2_STUPID))
{
- if (d_info[dungeon_type].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS);
+ if (d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS) f6 &= ~(RF6_DARKNESS);
else if ((p_ptr->pclass == CLASS_NINJA) && !can_use_lite_area) f6 &= ~(RF6_DARKNESS);
}
}
break;
default:
- return FALSE; /* Paranoia */
+ return FALSE;
}
/* Abort if no spell was chosen */
learn_spell(thrown_spell - 96);
}
- if (seen && maneable && !world_monster && (p_ptr->pclass == CLASS_IMITATOR))
+ if (seen && maneable && !current_world_ptr->timewalk_m_idx && (p_ptr->pclass == CLASS_IMITATOR))
{
if (thrown_spell != 167) /* Not RF6_SPECIAL */
{
p_ptr->mane_spell[p_ptr->mane_num] = thrown_spell - 96;
p_ptr->mane_dam[p_ptr->mane_num] = dam;
p_ptr->mane_num++;
- new_mane = TRUE;
+ p_ptr->new_mane = TRUE;
p_ptr->redraw |= (PR_IMITATION);
}