* appear above their minimum depth. Tiny levels will not have space\n
* for all the rooms you ask for.\n
*/
+
+#if 1
+
static room_info_type room_info_normal[ROOM_T_MAX] =
{
/* Depth */
/* 0 10 20 30 40 50 60 70 80 90 100 min limit */
-
{{999,900,800,700,600,500,400,300,200,100, 0}, 0}, /*NORMAL */
{{ 1, 10, 20, 30, 40, 50, 60, 70, 80, 90,100}, 1}, /*OVERLAP */
{{ 1, 10, 20, 30, 40, 50, 60, 70, 80, 90,100}, 3}, /*CROSS */
{{ 0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 8}, 20}, /*TRAP */
{{ 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2}, 40}, /*GLASS */
{{ 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3}, 1}, /*ARCADE */
- {{ 20, 40, 60, 80,100,100,100,100,100,100,100}, 1}, /*FIX */
+ {{ 20, 40, 60, 80,100,100,100,100,100,100,100}, 1}, /*FIX */
};
+#endif
+
+#if 0
+static room_info_type room_info_normal[ROOM_T_MAX] =
+{
+/*デバッグ用配列*/
+{ {999, 900, 800, 700, 600, 500, 400, 300, 200, 100, 0}, 0}, /*NORMAL */
+{ { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 0}, 1 }, /*OVERLAP */
+{ { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 0}, 3 }, /*CROSS */
+{ { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 0}, 3 }, /*INNER_F */
+{ { 0, 1, 1, 1, 2, 3, 5, 6, 8, 10, 0}, 10 }, /*NEST */
+{ { 0, 1, 1, 2, 3, 4, 6, 8, 10, 13, 0}, 10 }, /*PIT */
+{ { 0, 1, 1, 1, 2, 2, 3, 5, 6, 8, 0}, 10 }, /*LESSER_V */
+{ { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 0}, 20 }, /*GREATER_V*/
+{ { 0,100,200,300,400,500,600,700,800,900, 0}, 10 }, /*FRACAVE */
+{ { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0}, 10 }, /*RANDOM_V */
+{ { 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 0}, 3 }, /*OVAL */
+{ { 1, 6, 12, 18, 24, 30, 36, 42, 48, 54, 0}, 10 }, /*CRYPT */
+{ { 0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 0}, 20 }, /*TRAP_PIT */
+{ { 0, 0, 1, 1, 1, 2, 3, 4, 5, 6, 0}, 20 }, /*TRAP */
+{ { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0}, 40 }, /*GLASS */
+{ { 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 0}, 1 }, /*ARCADE */
+{ { 20, 40, 60, 80,100,100,100,100,100,100,100}, 1 }, /*FIX */
+};
+
+#endif
+
+
/*! 部屋の生成処理順 / Build rooms in descending order of difficulty. */
static byte room_build_order[ROOM_T_MAX] = {
int count;
POSITION x, y;
bool old_is_floor, new_is_floor;
-
-
- /* Initialize */
count = 0;
old_is_floor = get_is_floor(x1 - 1, y1);
* @param block_x 範囲の左端
* @return なし
*/
-static bool find_space_aux(int blocks_high, int blocks_wide, int block_y, int block_x)
+static bool find_space_aux(POSITION blocks_high, POSITION blocks_wide, POSITION block_y, POSITION block_x)
{
- int by1, bx1, by2, bx2, by, bx;
+ POSITION by1, bx1, by2, bx2, by, bx;
/* Itty-bitty rooms must shift about within their rectangle */
if (blocks_wide < 3)
}
/* Extract blocks */
- by1 = block_y + 0;
- bx1 = block_x + 0;
+ by1 = block_y;
+ bx1 = block_x;
by2 = block_y + blocks_high;
bx2 = block_x + blocks_wide;
bool find_space(POSITION *y, POSITION *x, POSITION height, POSITION width)
{
int candidates, pick;
- int by, bx, by1, bx1, by2, bx2;
- int block_y = 0, block_x = 0;
-
+ POSITION by, bx, by1, bx1, by2, bx2;
+ POSITION block_y = 0, block_x = 0;
/* Find out how many blocks we need. */
- int blocks_high = 1 + ((height - 1) / BLOCK_HGT);
- int blocks_wide = 1 + ((width - 1) / BLOCK_WID);
+ POSITION blocks_high = 1 + ((height - 1) / BLOCK_HGT);
+ POSITION blocks_wide = 1 + ((width - 1) / BLOCK_WID);
/* There are no way to allocate such huge space */
if (dun->row_rooms < blocks_high) return FALSE;
}
/* Extract blocks */
- by1 = block_y + 0;
- bx1 = block_x + 0;
+ by1 = block_y;
+ bx1 = block_x;
by2 = block_y + blocks_high;
bx2 = block_x + blocks_wide;
}
}
-
/*
* Hack- See if room will cut off a cavern.
*
*/
check_room_boundary(*x - width / 2 - 1, *y - height / 2 - 1, *x + (width - 1) / 2 + 1, *y + (height - 1) / 2 + 1);
-
/* Success. */
return TRUE;
}
-
-
/*
* Structure to hold all "fill" data
*/
struct fill_data_type
{
/* area size */
- int xmin;
- int ymin;
- int xmax;
- int ymax;
+ POSITION xmin;
+ POSITION ymin;
+ POSITION xmax;
+ POSITION ymax;
/* cutoffs */
int c1;
int c3;
/* features to fill with */
- int feat1;
- int feat2;
- int feat3;
+ FEAT_IDX feat1;
+ FEAT_IDX feat2;
+ FEAT_IDX feat3;
int info1;
int info2;
/* Store routine for the fractal cave generator */
/* this routine probably should be an inline function or a macro. */
-static void store_height(POSITION x, POSITION y, int val)
+static void store_height(POSITION x, POSITION y, FEAT_IDX val)
{
/* if on boundary set val > cutoff so walls are not as square */
if (((x == fill_data.xmin) || (y == fill_data.ymin) ||
- (x == fill_data.xmax) || (y == fill_data.ymax)) &&
- (val <= fill_data.c1)) val = fill_data.c1 + 1;
+ (x == fill_data.xmax) || (y == fill_data.ymax)) &&
+ (val <= fill_data.c1)) val = fill_data.c1 + 1;
/* store the value in height-map format */
- cave[y][x].feat = (s16b)val;
+ cave[y][x].feat = val;
return;
}
* this gives 8 binary places of fractional part + 8 places of normal part
*/
- u16b xstep, xhstep, ystep, yhstep;
- u16b xstep2, xhstep2, ystep2, yhstep2;
- u16b i, j, ii, jj, diagsize, xxsize, yysize;
+ POSITION xstep, xhstep, ystep, yhstep;
+ POSITION xstep2, xhstep2, ystep2, yhstep2;
+ POSITION i, j, ii, jj, diagsize, xxsize, yysize;
/* Cache for speed */
- u16b xm, xp, ym, yp;
+ POSITION xm, xp, ym, yp;
/* redefine size so can change the value if out of range */
xsize = xsiz;
}
-static bool hack_isnt_wall(POSITION y, POSITION x, int c1, int c2, int c3, int feat1, int feat2, int feat3, int info1, int info2, int info3)
+static bool hack_isnt_wall(POSITION y, POSITION x, int c1, int c2, int c3, FEAT_IDX feat1, FEAT_IDX feat2, FEAT_IDX feat3, BIT_FLAGS info1, BIT_FLAGS info2, BIT_FLAGS info3)
{
/*
* function used to convert from height-map back to the
/* 25% of the time use the other tile : it looks better this way */
if (randint1(100) < 75)
{
- cave[y][x].feat = (s16b)feat1;
+ cave[y][x].feat = feat1;
cave[y][x].info &= ~(CAVE_MASK);
cave[y][x].info |= info1;
return TRUE;
}
else
{
- cave[y][x].feat = (s16b)feat2;
+ cave[y][x].feat = feat2;
cave[y][x].info &= ~(CAVE_MASK);
cave[y][x].info |= info2;
return TRUE;
/* 25% of the time use the other tile : it looks better this way */
if (randint1(100) < 75)
{
- cave[y][x].feat = (s16b)feat2;
+ cave[y][x].feat = feat2;
cave[y][x].info &= ~(CAVE_MASK);
cave[y][x].info |= info2;
return TRUE;
}
else
{
- cave[y][x].feat = (s16b)feat1;
+ cave[y][x].feat = feat1;
cave[y][x].info &= ~(CAVE_MASK);
cave[y][x].info |= info1;
return TRUE;
}
else if (cave[y][x].feat <= c3)
{
- cave[y][x].feat = (s16b)feat3;
+ cave[y][x].feat = feat3;
cave[y][x].info &= ~(CAVE_MASK);
cave[y][x].info |= info3;
return TRUE;
static void cave_fill(POSITION y, POSITION x)
{
int i, j, d;
- int ty, tx;
+ POSITION ty, tx;
int flow_tail = 1;
int flow_head = 0;
temp_y[0] = y;
temp_x[0] = x;
-
/* Now process the queue */
while (flow_head != flow_tail)
{
}
/*
- * XXX XXX XXX There is a slight problem when tunnels pierce the caves:
+ * There is a slight problem when tunnels pierce the caves:
* Extra doors appear inside the system. (Its not very noticeable though.)
* This can be removed by "filling" from the outside in. This allows a separation
* from _outer_ with _inner_. (Internal walls are _outer_ instead.)
*/
void build_cavern(void)
{
- int grd, roug, cutoff, xsize, ysize, x0, y0;
+ int grd, roug, cutoff;
+ POSITION xsize, ysize, x0, y0;
bool done, light;
light = done = FALSE;
/* Check if rectangle has no width */
if ((x1 == x2) || (y1 == y2)) return;
- /* initialize */
if (x1 > x2)
{
/* Swap boundaries if in wrong order */
* is the randint0(3) below; it governs the relative density of
* twists and turns in the labyrinth: smaller number, more twists.
*/
-void r_visit(int y1, int x1, int y2, int x2, int node, int dir, int *visited)
+void r_visit(POSITION y1, POSITION x1, POSITION y2, POSITION x2, int node, DIRECTION dir, int *visited)
{
int i, j, m, n, temp, x, y, adj[4];
* Hacked distance formula - gives the 'wrong' answer.
* Used to build crypts
*/
-int dist2(int x1, int y1, int x2, int y2, int h1, int h2, int h3, int h4)
+POSITION dist2(POSITION x1, POSITION y1, POSITION x2, POSITION y2, POSITION h1, POSITION h2, POSITION h3, POSITION h4)
{
- int dx, dy;
+ POSITION dx, dy;
dx = abs(x2 - x1);
dy = abs(y2 - y1);
/* Create a new floor room with optional light */
-void generate_room_floor(int y1, int x1, int y2, int x2, int light)
+void generate_room_floor(POSITION y1, POSITION x1, POSITION y2, POSITION x2, int light)
{
- int y, x;
+ POSITION y, x;
cave_type *c_ptr;
}
}
-void generate_fill_perm_bold(int y1, int x1, int y2, int x2)
+void generate_fill_perm_bold(POSITION y1, POSITION x1, POSITION y2, POSITION x2)
{
- int y, x;
+ POSITION y, x;
for (y = y1; y <= y2; y++)
{
* @note that we restrict the number of "crowded" rooms to reduce the chance of overflowing the monster list during level creation.
* @return 部屋の精製に成功した場合 TRUE を返す。
*/
-static bool room_build(int typ)
+static bool room_build(EFFECT_ID typ)
{
/* Build a room */
switch (typ)