#include "grid.h"
#include "trap.h"
+#include "floor.h"
+#include "dungeon.h"
#include "rooms.h"
* @brief タイプ1の部屋…通常可変長方形の部屋を生成する / Type 1 -- normal rectangular rooms
* @return なし
*/
-bool build_type1(void)
+bool build_type1(floor_type *floor_ptr)
{
POSITION y, x, y2, x2, yval, xval;
POSITION y1, x1, xsize, ysize;
}
/* Choose lite or dark */
- light = ((current_floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
+ light = ((floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
/* Get corner values */
{
for (x = x1 - 1; x <= x2 + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
/* Walls around the room */
for (y = y1 - 1; y <= y2 + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1 - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1 - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2 + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2 + 1];
place_outer_grid(g_ptr);
}
for (x = x1 - 1; x <= x2 + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1 - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1 - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2 + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2 + 1][x];
place_outer_grid(g_ptr);
}
{
for (y = y1; y <= y2; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1];
+ g_ptr = &floor_ptr->grid_array[y][x1];
g_ptr->feat = feat_door[DOOR_CURTAIN].closed;
g_ptr->info &= ~(CAVE_MASK);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2];
+ g_ptr = &floor_ptr->grid_array[y][x2];
g_ptr->feat = feat_door[DOOR_CURTAIN].closed;
g_ptr->info &= ~(CAVE_MASK);
}
for (x = x1; x <= x2; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1][x];
+ g_ptr = &floor_ptr->grid_array[y1][x];
g_ptr->feat = feat_door[DOOR_CURTAIN].closed;
g_ptr->info &= ~(CAVE_MASK);
- g_ptr = ¤t_floor_ptr->grid_array[y2][x];
+ g_ptr = &floor_ptr->grid_array[y2][x];
g_ptr->feat = feat_door[DOOR_CURTAIN].closed;
g_ptr->info &= ~(CAVE_MASK);
}
{
for (x = x1; x <= x2; x += 2)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
{
if ((y1 + 4 < y2) && (x1 + 4 < x2))
{
- g_ptr = ¤t_floor_ptr->grid_array[y1 + 1][x1 + 1];
+ g_ptr = &floor_ptr->grid_array[y1 + 1][x1 + 1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y1 + 1][x2 - 1];
+ g_ptr = &floor_ptr->grid_array[y1 + 1][x2 - 1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2 - 1][x1 + 1];
+ g_ptr = &floor_ptr->grid_array[y2 - 1][x1 + 1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2 - 1][x2 - 1];
+ g_ptr = &floor_ptr->grid_array[y2 - 1][x2 - 1];
place_inner_grid(g_ptr);
}
}
{
for (y = y1 + 2; y <= y2 - 2; y += 2)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1];
+ g_ptr = &floor_ptr->grid_array[y][x1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2];
+ g_ptr = &floor_ptr->grid_array[y][x2];
place_inner_grid(g_ptr);
}
for (x = x1 + 2; x <= x2 - 2; x += 2)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1][x];
+ g_ptr = &floor_ptr->grid_array[y1][x];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2][x];
+ g_ptr = &floor_ptr->grid_array[y2][x];
place_inner_grid(g_ptr);
}
}
for (x = x1; x <= x2; x++)
{
place_inner_bold(yval, x);
- if (curtain2) current_floor_ptr->grid_array[yval][x].feat = feat_door[DOOR_CURTAIN].closed;
+ if (curtain2) floor_ptr->grid_array[yval][x].feat = feat_door[DOOR_CURTAIN].closed;
}
/* Prevent edge of wall from being tunneled */
for (y = y1; y <= y2; y++)
{
place_inner_bold(y, xval);
- if (curtain2) current_floor_ptr->grid_array[y][xval].feat = feat_door[DOOR_CURTAIN].closed;
+ if (curtain2) floor_ptr->grid_array[y][xval].feat = feat_door[DOOR_CURTAIN].closed;
}
/* Prevent edge of wall from being tunneled */
}
place_random_door(yval, xval, TRUE);
- if (curtain2) current_floor_ptr->grid_array[yval][xval].feat = feat_door[DOOR_CURTAIN].closed;
+ if (curtain2) floor_ptr->grid_array[yval][xval].feat = feat_door[DOOR_CURTAIN].closed;
}
return TRUE;
* @brief タイプ2の部屋…二重長方形の部屋を生成する / Type 2 -- Overlapping rectangular rooms
* @return なし
*/
-bool build_type2(void)
+bool build_type2(floor_type *floor_ptr)
{
POSITION y, x, xval, yval;
POSITION y1a, x1a, y2a, x2a;
if (!find_space(&yval, &xval, 11, 25)) return FALSE;
/* Choose lite or dark */
- light = ((current_floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
+ light = ((floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
/* Determine extents of the first room */
y1a = yval - randint1(4);
{
for (x = x1a - 1; x <= x2a + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
{
for (x = x1b - 1; x <= x2b + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
/* Place the walls around room "a" */
for (y = y1a - 1; y <= y2a + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1a - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1a - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2a + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2a + 1];
place_outer_grid(g_ptr);
}
for (x = x1a - 1; x <= x2a + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1a - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1a - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2a + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2a + 1][x];
place_outer_grid(g_ptr);
}
/* Place the walls around room "b" */
for (y = y1b - 1; y <= y2b + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1b - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1b - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2b + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2b + 1];
place_outer_grid(g_ptr);
}
for (x = x1b - 1; x <= x2b + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1b - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1b - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2b + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2b + 1][x];
place_outer_grid(g_ptr);
}
{
for (x = x1a; x <= x2a; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
}
}
{
for (x = x1b; x <= x2b; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
}
}
* the code below will work (with "bounds checking") for 5x5, or even\n
* for unsymetric values like 4x3 or 5x3 or 3x4 or 3x5, or even larger.\n
*/
-bool build_type3(void)
+bool build_type3(floor_type *floor_ptr)
{
POSITION y, x, dy, dx, wy, wx;
POSITION y1a, x1a, y2a, x2a;
/* Choose lite or dark */
- light = ((current_floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
+ light = ((floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
/* For now, always 3x3 */
wx = wy = 1;
{
for (x = x1a - 1; x <= x2a + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
{
for (x = x1b - 1; x <= x2b + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
/* Place the walls around room "a" */
for (y = y1a - 1; y <= y2a + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1a - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1a - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2a + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2a + 1];
place_outer_grid(g_ptr);
}
for (x = x1a - 1; x <= x2a + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1a - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1a - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2a + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2a + 1][x];
place_outer_grid(g_ptr);
}
/* Place the walls around room "b" */
for (y = y1b - 1; y <= y2b + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1b - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1b - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2b + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2b + 1];
place_outer_grid(g_ptr);
}
for (x = x1b - 1; x <= x2b + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1b - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1b - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2b + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2b + 1][x];
place_outer_grid(g_ptr);
}
{
for (x = x1a; x <= x2a; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
}
}
{
for (x = x1b; x <= x2b; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
}
}
{
for (x = x1a; x <= x2a; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
/* Build the vault */
for (y = y1b; y <= y2b; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1a];
+ g_ptr = &floor_ptr->grid_array[y][x1a];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2a];
+ g_ptr = &floor_ptr->grid_array[y][x2a];
place_inner_grid(g_ptr);
}
for (x = x1a; x <= x2a; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1b][x];
+ g_ptr = &floor_ptr->grid_array[y1b][x];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2b][x];
+ g_ptr = &floor_ptr->grid_array[y2b][x];
place_inner_grid(g_ptr);
}
for (y = y1b; y <= y2b; y++)
{
if (y == yval) continue;
- g_ptr = ¤t_floor_ptr->grid_array[y][x1a - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1a - 1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2a + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2a + 1];
place_inner_grid(g_ptr);
}
for (x = x1a; x <= x2a; x++)
{
if (x == xval) continue;
- g_ptr = ¤t_floor_ptr->grid_array[y1b - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1b - 1][x];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2b + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2b + 1][x];
place_inner_grid(g_ptr);
}
/* Occasionally put a "plus" in the center */
else if (one_in_(3))
{
- g_ptr = ¤t_floor_ptr->grid_array[yval][xval];
+ g_ptr = &floor_ptr->grid_array[yval][xval];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y1b][xval];
+ g_ptr = &floor_ptr->grid_array[y1b][xval];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2b][xval];
+ g_ptr = &floor_ptr->grid_array[y2b][xval];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[yval][x1a];
+ g_ptr = &floor_ptr->grid_array[yval][x1a];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[yval][x2a];
+ g_ptr = &floor_ptr->grid_array[yval][x2a];
place_inner_grid(g_ptr);
}
/* Occasionally put a pillar in the center */
else if (one_in_(3))
{
- g_ptr = ¤t_floor_ptr->grid_array[yval][xval];
+ g_ptr = &floor_ptr->grid_array[yval][xval];
place_inner_grid(g_ptr);
}
* 4 - Inner room has a maze\n
* 5 - A set of four inner rooms\n
*/
-bool build_type4(void)
+bool build_type4(floor_type *floor_ptr)
{
POSITION y, x, y1, x1;
POSITION y2, x2, tmp, yval, xval;
if (!find_space(&yval, &xval, 11, 25)) return FALSE;
/* Choose lite or dark */
- light = ((current_floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
+ light = ((floor_ptr->dun_level <= randint1(25)) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS));
/* Large room */
y1 = yval - 4;
{
for (x = x1 - 1; x <= x2 + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_floor_grid(g_ptr);
g_ptr->info |= (CAVE_ROOM);
if (light) g_ptr->info |= (CAVE_GLOW);
/* Outer Walls */
for (y = y1 - 1; y <= y2 + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1 - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1 - 1];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2 + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2 + 1];
place_outer_grid(g_ptr);
}
for (x = x1 - 1; x <= x2 + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1 - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1 - 1][x];
place_outer_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2 + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2 + 1][x];
place_outer_grid(g_ptr);
}
/* The inner walls */
for (y = y1 - 1; y <= y2 + 1; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x1 - 1];
+ g_ptr = &floor_ptr->grid_array[y][x1 - 1];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y][x2 + 1];
+ g_ptr = &floor_ptr->grid_array[y][x2 + 1];
place_inner_grid(g_ptr);
}
for (x = x1 - 1; x <= x2 + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y1 - 1][x];
+ g_ptr = &floor_ptr->grid_array[y1 - 1][x];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[y2 + 1][x];
+ g_ptr = &floor_ptr->grid_array[y2 + 1][x];
place_inner_grid(g_ptr);
}
for (x = xval - 1; x <= xval + 1; x++)
{
if ((x == xval) && (y == yval)) continue;
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
{
for (x = xval - 1; x <= xval + 1; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
{
for (x = xval - 5 - tmp; x <= xval - 3 - tmp; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
for (x = xval + 3 + tmp; x <= xval + 5 + tmp; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
/* Long horizontal walls */
for (x = xval - 5; x <= xval + 5; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[yval - 1][x];
+ g_ptr = &floor_ptr->grid_array[yval - 1][x];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[yval + 1][x];
+ g_ptr = &floor_ptr->grid_array[yval + 1][x];
place_inner_grid(g_ptr);
}
/* Close off the left/right edges */
- g_ptr = ¤t_floor_ptr->grid_array[yval][xval - 5];
+ g_ptr = &floor_ptr->grid_array[yval][xval - 5];
place_inner_grid(g_ptr);
- g_ptr = ¤t_floor_ptr->grid_array[yval][xval + 5];
+ g_ptr = &floor_ptr->grid_array[yval][xval + 5];
place_inner_grid(g_ptr);
/* Secret doors (random top/bottom) */
{
if (0x1 & (x + y))
{
- g_ptr = ¤t_floor_ptr->grid_array[y][x];
+ g_ptr = &floor_ptr->grid_array[y][x];
place_inner_grid(g_ptr);
}
}
/* Inner "cross" */
for (y = y1; y <= y2; y++)
{
- g_ptr = ¤t_floor_ptr->grid_array[y][xval];
+ g_ptr = &floor_ptr->grid_array[y][xval];
place_inner_grid(g_ptr);
}
for (x = x1; x <= x2; x++)
{
- g_ptr = ¤t_floor_ptr->grid_array[yval][x];
+ g_ptr = &floor_ptr->grid_array[yval][x];
place_inner_grid(g_ptr);
}
*\n
* When done fill from the inside to find the walls,\n
*/
-bool build_type11(void)
+bool build_type11(floor_type *floor_ptr)
{
POSITION rad, x, y, x0, y0;
int light = FALSE;
/* Occasional light */
- if ((randint1(current_floor_ptr->dun_level) <= 15) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS)) light = TRUE;
+ if ((randint1(floor_ptr->dun_level) <= 15) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS)) light = TRUE;
rad = randint0(9);
*\n
* When done fill from the inside to find the walls,\n
*/
-bool build_type12(void)
+bool build_type12(floor_type *floor_ptr)
{
POSITION rad, x, y, x0, y0;
int light = FALSE;
h4 = randint1(32) - 16;
/* Occasional light */
- if ((randint1(current_floor_ptr->dun_level) <= 5) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS)) light = TRUE;
+ if ((randint1(floor_ptr->dun_level) <= 5) && !(d_info[p_ptr->dungeon_idx].flags1 & DF1_DARKNESS)) light = TRUE;
rad = randint1(9);
for (y = y0 - rad; y <= y0 + rad; y++)
{
/* clear room flag */
- current_floor_ptr->grid_array[y][x].info &= ~(CAVE_ROOM);
+ floor_ptr->grid_array[y][x].info &= ~(CAVE_ROOM);
if (dist2(y0, x0, y, x, h1, h2, h3, h4) <= rad - 1)
{
{
for (y = y0 - 2; y <= y0 + 2; y++)
{
- if (!is_floor_bold(y, x))
+ if (!is_floor_bold(floor_ptr, y, x))
{
/* Wall in the way */
emptyflag = FALSE;