OSDN Git Service

[Refactor] #38997 is_known_trap() とis_hidden_door()にplayer_type * 引数を追加 / Added playe...
[hengband/hengband.git] / src / rooms-special.c
index e16626b..ede0618 100644 (file)
@@ -1,18 +1,23 @@
 #include "angband.h"
+#include "util.h"
+
 #include "grid.h"
-#include "generate.h"
+#include "floor-generate.h"
 #include "rooms.h"
 #include "monster.h"
 #include "monsterrace-hook.h"
 #include "objectkind-hook.h"
 #include "feature.h"
+#include "floor.h"
+#include "dungeon.h"
 
 
 /*!
 * @brief タイプ15の部屋…ガラス部屋の生成 / Type 15 -- glass rooms
+* @param player_ptr プレーヤーへの参照ポインタ
 * @return なし
 */
-bool build_type15(void)
+bool build_type15(player_type *player_ptr)
 {
        POSITION y, x, y2, x2, yval, xval;
        POSITION y1, x1, xsize, ysize;
@@ -25,10 +30,11 @@ bool build_type15(void)
        ysize = rand_range(9, 13);
 
        /* Find and reserve some space in the dungeon.  Get center of room. */
-       if (!find_space(&yval, &xval, ysize + 2, xsize + 2)) return FALSE;
+       floor_type *floor_ptr = player_ptr->current_floor_ptr;
+       if (!find_space(player_ptr, &yval, &xval, ysize + 2, xsize + 2)) return FALSE;
 
        /* Choose lite or dark */
-       light = ((dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
+       light = ((floor_ptr->dun_level <= randint1(25)) && !(d_info[floor_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
 
        /* Get corner values */
        y1 = yval - ysize / 2;
@@ -41,8 +47,8 @@ bool build_type15(void)
        {
                for (x = x1 - 1; x <= x2 + 1; x++)
                {
-                       g_ptr = &grid_array[y][x];
-                       place_floor_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[y][x];
+                       place_grid(player_ptr, g_ptr, floor);
                        g_ptr->feat = feat_glass_floor;
                        g_ptr->info |= (CAVE_ROOM);
                        if (light) g_ptr->info |= (CAVE_GLOW);
@@ -52,20 +58,21 @@ bool build_type15(void)
        /* Walls around the room */
        for (y = y1 - 1; y <= y2 + 1; y++)
        {
-               g_ptr = &grid_array[y][x1 - 1];
-               place_outer_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y][x1 - 1];
+               place_grid(player_ptr, g_ptr, outer);
                g_ptr->feat = feat_glass_wall;
-               g_ptr = &grid_array[y][x2 + 1];
-               place_outer_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y][x2 + 1];
+               place_grid(player_ptr, g_ptr, outer);
                g_ptr->feat = feat_glass_wall;
        }
+
        for (x = x1 - 1; x <= x2 + 1; x++)
        {
-               g_ptr = &grid_array[y1 - 1][x];
-               place_outer_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y1 - 1][x];
+               place_grid(player_ptr, g_ptr, outer);
                g_ptr->feat = feat_glass_wall;
-               g_ptr = &grid_array[y2 + 1][x];
-               place_outer_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y2 + 1][x];
+               place_grid(player_ptr, g_ptr, outer);
                g_ptr->feat = feat_glass_wall;
        }
 
@@ -74,22 +81,22 @@ bool build_type15(void)
        case 1: /* 4 lite breathers + potion */
        {
                DIRECTION dir1, dir2;
-               get_mon_num_prep(vault_aux_lite, NULL);
+               get_mon_num_prep(player_ptr, vault_aux_lite, NULL);
 
                /* Place fixed lite berathers */
                for (dir1 = 4; dir1 < 8; dir1++)
                {
-                       MONRACE_IDX r_idx = get_mon_num(dun_level);
+                       MONRACE_IDX r_idx = get_mon_num(player_ptr, floor_ptr->dun_level);
 
                        y = yval + 2 * ddy_ddd[dir1];
                        x = xval + 2 * ddx_ddd[dir1];
-                       if (r_idx) place_monster_aux(0, y, x, r_idx, PM_ALLOW_SLEEP);
+                       if (r_idx) place_monster_aux(player_ptr, 0, y, x, r_idx, PM_ALLOW_SLEEP);
 
                        /* Walls around the breather */
                        for (dir2 = 0; dir2 < 8; dir2++)
                        {
-                               g_ptr = &grid_array[y + ddy_ddd[dir2]][x + ddx_ddd[dir2]];
-                               place_inner_grid(g_ptr);
+                               g_ptr = &floor_ptr->grid_array[y + ddy_ddd[dir2]][x + ddx_ddd[dir2]];
+                               place_grid(player_ptr, g_ptr, inner);
                                g_ptr->feat = feat_glass_wall;
                        }
                }
@@ -99,24 +106,24 @@ bool build_type15(void)
                {
                        y = yval + 2 * ddy_ddd[dir1];
                        x = xval + 2 * ddx_ddd[dir1];
-                       g_ptr = &grid_array[y][x];
-                       place_inner_perm_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[y][x];
+                       place_grid(player_ptr, g_ptr, inner_perm);
                        g_ptr->feat = feat_permanent_glass_wall;
-                       grid_array[yval + ddy_ddd[dir1]][xval + ddx_ddd[dir1]].info |= (CAVE_ICKY);
+                       floor_ptr->grid_array[yval + ddy_ddd[dir1]][xval + ddx_ddd[dir1]].info |= (CAVE_ICKY);
                }
 
                /* Glass door */
                dir1 = randint0(4);
                y = yval + 2 * ddy_ddd[dir1];
                x = xval + 2 * ddx_ddd[dir1];
-               place_secret_door(y, x, DOOR_GLASS_DOOR);
-               g_ptr = &grid_array[y][x];
-               if (is_closed_door(g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
+               place_secret_door(player_ptr, y, x, DOOR_GLASS_DOOR);
+               g_ptr = &floor_ptr->grid_array[y][x];
+               if (is_closed_door(player_ptr, g_ptr->feat)) g_ptr->mimic = feat_glass_wall;
 
                /* Place a potion */
                get_obj_num_hook = kind_is_potion;
-               place_object(yval, xval, AM_NO_FIXED_ART);
-               grid_array[yval][xval].info |= (CAVE_ICKY);
+               place_object(player_ptr, yval, xval, AM_NO_FIXED_ART);
+               floor_ptr->grid_array[yval][xval].info |= (CAVE_ICKY);
        }
        break;
 
@@ -126,49 +133,50 @@ bool build_type15(void)
                DIRECTION dir1;
 
                /* Pillars */
-               g_ptr = &grid_array[y1 + 1][x1 + 1];
-               place_inner_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y1 + 1][x1 + 1];
+               place_grid(player_ptr, g_ptr, inner);
                g_ptr->feat = feat_glass_wall;
 
-               g_ptr = &grid_array[y1 + 1][x2 - 1];
-               place_inner_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y1 + 1][x2 - 1];
+               place_grid(player_ptr, g_ptr, inner);
                g_ptr->feat = feat_glass_wall;
 
-               g_ptr = &grid_array[y2 - 1][x1 + 1];
-               place_inner_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y2 - 1][x1 + 1];
+               place_grid(player_ptr, g_ptr, inner);
                g_ptr->feat = feat_glass_wall;
 
-               g_ptr = &grid_array[y2 - 1][x2 - 1];
-               place_inner_grid(g_ptr);
+               g_ptr = &floor_ptr->grid_array[y2 - 1][x2 - 1];
+               place_grid(player_ptr, g_ptr, inner);
                g_ptr->feat = feat_glass_wall;
-               get_mon_num_prep(vault_aux_lite, NULL);
+               get_mon_num_prep(player_ptr, vault_aux_lite, NULL);
 
-               r_idx = get_mon_num(dun_level);
-               if (r_idx) place_monster_aux(0, yval, xval, r_idx, 0L);
+               r_idx = get_mon_num(player_ptr, floor_ptr->dun_level);
+               if (r_idx) place_monster_aux(player_ptr, 0, yval, xval, r_idx, 0L);
 
                /* Walls around the breather */
                for (dir1 = 0; dir1 < 8; dir1++)
                {
-                       g_ptr = &grid_array[yval + ddy_ddd[dir1]][xval + ddx_ddd[dir1]];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[yval + ddy_ddd[dir1]][xval + ddx_ddd[dir1]];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
                }
 
                /* Curtains around the breather */
                for (y = yval - 1; y <= yval + 1; y++)
                {
-                       place_closed_door(y, xval - 2, DOOR_CURTAIN);
-                       place_closed_door(y, xval + 2, DOOR_CURTAIN);
+                       place_secret_door(player_ptr, y, xval - 2, DOOR_CURTAIN);
+                       place_secret_door(player_ptr, y, xval + 2, DOOR_CURTAIN);
                }
+
                for (x = xval - 1; x <= xval + 1; x++)
                {
-                       place_closed_door(yval - 2, x, DOOR_CURTAIN);
-                       place_closed_door(yval + 2, x, DOOR_CURTAIN);
+                       place_secret_door(player_ptr, yval - 2, x, DOOR_CURTAIN);
+                       place_secret_door(player_ptr, yval + 2, x, DOOR_CURTAIN);
                }
 
                /* Place an object */
-               place_object(yval, xval, AM_NO_FIXED_ART);
-               grid_array[yval][xval].info |= (CAVE_ICKY);
+               place_object(player_ptr, yval, xval, AM_NO_FIXED_ART);
+               floor_ptr->grid_array[yval][xval].info |= (CAVE_ICKY);
        }
        break;
 
@@ -179,59 +187,62 @@ bool build_type15(void)
                /* Walls around the potion */
                for (y = yval - 2; y <= yval + 2; y++)
                {
-                       g_ptr = &grid_array[y][xval - 3];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[y][xval - 3];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
-                       g_ptr = &grid_array[y][xval + 3];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[y][xval + 3];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
                }
+
                for (x = xval - 2; x <= xval + 2; x++)
                {
-                       g_ptr = &grid_array[yval - 3][x];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[yval - 3][x];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
-                       g_ptr = &grid_array[yval + 3][x];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[yval + 3][x];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
                }
+
                for (dir1 = 4; dir1 < 8; dir1++)
                {
-                       g_ptr = &grid_array[yval + 2 * ddy_ddd[dir1]][xval + 2 * ddx_ddd[dir1]];
-                       place_inner_grid(g_ptr);
+                       g_ptr = &floor_ptr->grid_array[yval + 2 * ddy_ddd[dir1]][xval + 2 * ddx_ddd[dir1]];
+                       place_grid(player_ptr, g_ptr, inner);
                        g_ptr->feat = feat_glass_wall;
                }
-               get_mon_num_prep(vault_aux_shards, NULL);
+
+               get_mon_num_prep(player_ptr, vault_aux_shards, NULL);
 
                /* Place shard berathers */
                for (dir1 = 4; dir1 < 8; dir1++)
                {
-                       MONRACE_IDX r_idx = get_mon_num(dun_level);
+                       MONRACE_IDX r_idx = get_mon_num(player_ptr, floor_ptr->dun_level);
 
                        y = yval + ddy_ddd[dir1];
                        x = xval + ddx_ddd[dir1];
-                       if (r_idx) place_monster_aux(0, y, x, r_idx, 0L);
+                       if (r_idx) place_monster_aux(player_ptr, 0, y, x, r_idx, 0L);
                }
 
                /* Place two potions */
                if (one_in_(2))
                {
                        get_obj_num_hook = kind_is_potion;
-                       place_object(yval, xval - 1, AM_NO_FIXED_ART);
+                       place_object(player_ptr, yval, xval - 1, AM_NO_FIXED_ART);
                        get_obj_num_hook = kind_is_potion;
-                       place_object(yval, xval + 1, AM_NO_FIXED_ART);
+                       place_object(player_ptr, yval, xval + 1, AM_NO_FIXED_ART);
                }
                else
                {
                        get_obj_num_hook = kind_is_potion;
-                       place_object(yval - 1, xval, AM_NO_FIXED_ART);
+                       place_object(player_ptr, yval - 1, xval, AM_NO_FIXED_ART);
                        get_obj_num_hook = kind_is_potion;
-                       place_object(yval + 1, xval, AM_NO_FIXED_ART);
+                       place_object(player_ptr, yval + 1, xval, AM_NO_FIXED_ART);
                }
 
                for (y = yval - 2; y <= yval + 2; y++)
                        for (x = xval - 2; x <= xval + 2; x++)
-                               grid_array[y][x].info |= (CAVE_ICKY);
+                               floor_ptr->grid_array[y][x].info |= (CAVE_ICKY);
 
        }
        break;