clear_cave(floor_ptr);
+ /* Mega-Hack -- no player yet */
+ p_ptr->x = p_ptr->y = 0;
+
+
/* Fill the arrays of floors and walls in the good proportions */
set_floor_and_wall(0);
for (x = 0; x < MAX_WID; x++)
{
/* Create "solid" perma-wall */
- place_solid_perm_bold(y, x);
+ place_solid_perm_bold(floor_ptr, y, x);
}
}
p_ptr->x = floor_ptr->width / 2;
/* Give one square */
- place_floor_bold(p_ptr->y, p_ptr->x);
+ place_floor_bold(floor_ptr, p_ptr->y, p_ptr->x);
wipe_generate_random_floor_flags(floor_ptr);
}
* @brief フロア移動時のペット保存処理 / Preserve_pets
* @return なし
*/
-static void preserve_pet(void)
+static void preserve_pet(player_type *master_ptr)
{
int num;
MONSTER_IDX i;
party_mon[num].r_idx = 0;
}
- if (p_ptr->riding)
+ if (master_ptr->riding)
{
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[p_ptr->riding];
+ monster_type *m_ptr = &master_ptr->current_floor_ptr->m_list[master_ptr->riding];
/* Pet of other pet don't follow. */
if (m_ptr->parent_m_idx)
{
- p_ptr->riding = 0;
- p_ptr->pet_extra_flags &= ~(PF_RYOUTE);
- p_ptr->riding_ryoute = p_ptr->old_riding_ryoute = FALSE;
+ master_ptr->riding = 0;
+ master_ptr->pet_extra_flags &= ~(PF_RYOUTE);
+ master_ptr->riding_ryoute = master_ptr->old_riding_ryoute = FALSE;
}
else
{
(void)COPY(&party_mon[0], m_ptr, monster_type);
/* Delete from this floor */
- delete_monster_idx(p_ptr->riding);
+ delete_monster_idx(master_ptr->riding);
}
}
* If player is in wild mode, no pets are preserved
* except a monster whom player riding
*/
- if (!p_ptr->wild_mode && !p_ptr->inside_arena && !p_ptr->phase_out)
+ if (!master_ptr->wild_mode && !master_ptr->current_floor_ptr->inside_arena && !master_ptr->phase_out)
{
- for (i = p_ptr->current_floor_ptr->m_max - 1, num = 1; (i >= 1 && num < MAX_PARTY_MON); i--)
+ for (i = master_ptr->current_floor_ptr->m_max - 1, num = 1; (i >= 1 && num < MAX_PARTY_MON); i--)
{
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[i];
+ monster_type *m_ptr = &master_ptr->current_floor_ptr->m_list[i];
if (!monster_is_valid(m_ptr)) continue;
if (!is_pet(m_ptr)) continue;
- if (i == p_ptr->riding) continue;
+ if (i == master_ptr->riding) continue;
if (reinit_wilderness)
{
}
else
{
- POSITION dis = distance(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx);
+ POSITION dis = distance(master_ptr->y, master_ptr->x, m_ptr->fy, m_ptr->fx);
/* Confused (etc.) monsters don't follow. */
if (MON_CONFUSED(m_ptr) || MON_STUNNED(m_ptr) || MON_CSLEEP(m_ptr)) continue;
* when you or the pet can see the other.
*/
if (m_ptr->nickname &&
- ((player_has_los_bold(p_ptr, m_ptr->fy, m_ptr->fx) && projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) ||
- (los(m_ptr->fy, m_ptr->fx, p_ptr->y, p_ptr->x) && projectable(m_ptr->fy, m_ptr->fx, p_ptr->y, p_ptr->x))))
+ ((player_has_los_bold(master_ptr, m_ptr->fy, m_ptr->fx) && projectable(master_ptr->current_floor_ptr, master_ptr->y, master_ptr->x, m_ptr->fy, m_ptr->fx)) ||
+ (los(master_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, master_ptr->y, master_ptr->x) && projectable(master_ptr->current_floor_ptr, m_ptr->fy, m_ptr->fx, master_ptr->y, master_ptr->x))))
{
if (dis > 3) continue;
}
}
}
- (void)COPY(&party_mon[num], &p_ptr->current_floor_ptr->m_list[i], monster_type);
+ (void)COPY(&party_mon[num], &master_ptr->current_floor_ptr->m_list[i], monster_type);
num++;
if (record_named_pet)
{
- for (i = p_ptr->current_floor_ptr->m_max - 1; i >=1; i--)
+ for (i = master_ptr->current_floor_ptr->m_max - 1; i >=1; i--)
{
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[i];
+ monster_type *m_ptr = &master_ptr->current_floor_ptr->m_list[i];
GAME_TEXT m_name[MAX_NLEN];
if (!monster_is_valid(m_ptr)) continue;
if (!is_pet(m_ptr)) continue;
if (!m_ptr->nickname) continue;
- if (p_ptr->riding == i) continue;
+ if (master_ptr->riding == i) continue;
monster_desc(m_name, m_ptr, MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
- exe_write_diary(p_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_MOVED, m_name);
+ exe_write_diary(master_ptr, NIKKI_NAMED_PET, RECORD_NAMED_PET_MOVED, m_name);
}
}
/* Pet of other pet may disappear. */
- for (i = p_ptr->current_floor_ptr->m_max - 1; i >=1; i--)
+ for (i = master_ptr->current_floor_ptr->m_max - 1; i >=1; i--)
{
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[i];
+ monster_type *m_ptr = &master_ptr->current_floor_ptr->m_list[i];
/* Are there its parent? */
- if (m_ptr->parent_m_idx && !p_ptr->current_floor_ptr->m_list[m_ptr->parent_m_idx].r_idx)
+ if (m_ptr->parent_m_idx && !master_ptr->current_floor_ptr->m_list[m_ptr->parent_m_idx].r_idx)
{
/* Its parent have gone, it also goes away. */
m_ptr->fy = cy;
m_ptr->fx = cx;
+ m_ptr->current_floor_ptr = master_ptr->current_floor_ptr;
m_ptr->ml = TRUE;
m_ptr->mtimed[MTIMED_CSLEEP] = 0;
m_ptr->hold_o_idx = 0;
/* Must repair monsters */
repair_monsters = TRUE;
}
- update_monster(m_idx, TRUE);
+ update_monster(master_ptr, m_idx, TRUE);
lite_spot(cy, cx);
/* Pre-calculated in precalc_cur_num_of_pet() */
* while new floor creation since dungeons may be re-created by\n
* auto-scum option.\n
*/
-static void update_unique_artifact(s16b cur_floor_id)
+static void update_unique_artifact(floor_type *floor_ptr, s16b cur_floor_id)
{
int i;
/* Maintain unique monsters */
- for (i = 1; i < p_ptr->current_floor_ptr->m_max; i++)
+ for (i = 1; i < floor_ptr->m_max; i++)
{
monster_race *r_ptr;
- monster_type *m_ptr = &p_ptr->current_floor_ptr->m_list[i];
+ monster_type *m_ptr = &floor_ptr->m_list[i];
if (!monster_is_valid(m_ptr)) continue;
}
/* Maintain artifatcs */
- for (i = 1; i < p_ptr->current_floor_ptr->o_max; i++)
+ for (i = 1; i < floor_ptr->o_max; i++)
{
- object_type *o_ptr = &p_ptr->current_floor_ptr->o_list[i];
+ object_type *o_ptr = &floor_ptr->o_list[i];
if (!OBJECT_IS_VALID(o_ptr)) continue;
FLOOR_IDX tmp_floor_idx = 0;
/* Preserve pets and prepare to take these to next floor */
- preserve_pet();
+ preserve_pet(creature_ptr);
/* Remove all mirrors without explosion */
- remove_all_mirrors(FALSE);
+ remove_all_mirrors(creature_ptr, FALSE);
if (creature_ptr->special_defense & NINJA_S_STEALTH) set_superstealth(creature_ptr, FALSE);
sf_ptr->last_visit = current_world_ptr->game_turn;
forget_lite(p_ptr->current_floor_ptr);
- forget_view();
+ forget_view(p_ptr->current_floor_ptr);
clear_mon_lite(p_ptr->current_floor_ptr);
/* Save current floor */
* @return なし
* @details
* If the floor is an old saved floor, it will be\n
- * restored from the temporal file. If the floor is new one, new p_ptr->current_floor_ptr->grid_array\n
+ * restored from the temporal file. If the floor is new one, new floor\n
* will be generated.\n
*/
void change_floor(player_type *creature_ptr)
place_pet(creature_ptr);
/* Reset travel target place */
- forget_travel_flow();
+ forget_travel_flow(creature_ptr->current_floor_ptr);
/* Hack -- maintain unique and artifacts */
- update_unique_artifact(new_floor_id);
+ update_unique_artifact(creature_ptr->current_floor_ptr, new_floor_id);
/* Now the player is in new floor */
creature_ptr->floor_id = new_floor_id;