OSDN Git Service

[Refactor] #38997 forget_travel_flow() に floor_type * 引数を追加. / Add floor_type * argum...
[hengband/hengband.git] / src / floor-save.c
index ad93517..d6e89fe 100644 (file)
@@ -351,6 +351,10 @@ static void build_dead_end(floor_type *floor_ptr)
 
        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);
 
@@ -364,7 +368,7 @@ static void build_dead_end(floor_type *floor_ptr)
                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);
                }
        }
 
@@ -373,7 +377,7 @@ static void build_dead_end(floor_type *floor_ptr)
        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);
 }
@@ -387,7 +391,7 @@ static monster_type party_mon[MAX_PARTY_MON]; /*!< フロア移動に保存す
  * @brief フロア移動時のペット保存処理 / Preserve_pets
  * @return なし
  */
-static void preserve_pet(void)
+static void preserve_pet(player_type *master_ptr)
 {
        int num;
        MONSTER_IDX i;
@@ -397,16 +401,16 @@ static void preserve_pet(void)
                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
                {
@@ -414,7 +418,7 @@ static void preserve_pet(void)
                        (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);
                }
        }
 
@@ -422,15 +426,15 @@ static void preserve_pet(void)
         * 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)
                        {
@@ -438,7 +442,7 @@ static void preserve_pet(void)
                        }
                        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;
@@ -451,8 +455,8 @@ static void preserve_pet(void)
                                 * 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;
                                }
@@ -462,7 +466,7 @@ static void preserve_pet(void)
                                }
                        }
 
-                       (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++;
 
@@ -473,29 +477,29 @@ static void preserve_pet(void)
 
        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. */
 
@@ -594,6 +598,7 @@ static void place_pet(player_type *master_ptr)
 
                        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;
@@ -607,7 +612,7 @@ static void place_pet(player_type *master_ptr)
                                /* 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() */
@@ -650,15 +655,15 @@ static void place_pet(player_type *master_ptr)
  * 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;
 
@@ -674,9 +679,9 @@ static void update_unique_artifact(s16b cur_floor_id)
        }
 
        /* 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;
 
@@ -871,10 +876,10 @@ void leave_floor(player_type *creature_ptr)
        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);
 
@@ -1070,7 +1075,7 @@ void leave_floor(player_type *creature_ptr)
                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 */
@@ -1091,7 +1096,7 @@ void leave_floor(player_type *creature_ptr)
  * @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)
@@ -1380,10 +1385,10 @@ 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;