From 09a02097096e3226ff4de0afb9c2496e1c49c664 Mon Sep 17 00:00:00 2001 From: chelsea Date: Tue, 2 Dec 2025 21:34:54 -0600 Subject: [PATCH] Refine cabin layout and pathing --- worldgen-c/bin/worldgen | Bin 135896 -> 135936 bytes worldgen-c/src/worldgen.c | 50 ++++++++++++++++++++++++++++++++------ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/worldgen-c/bin/worldgen b/worldgen-c/bin/worldgen index f1c51a956acf88f03e5ea2308d336e467d620fe9..11f274d18c15a0c78d4f52c4940f987eb675a06f 100755 GIT binary patch delta 27409 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 delta 25995 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 diff --git a/worldgen-c/src/worldgen.c b/worldgen-c/src/worldgen.c index 67a3df2..527d9c7 100644 --- a/worldgen-c/src/worldgen.c +++ b/worldgen-c/src/worldgen.c @@ -1549,6 +1549,22 @@ static void build_cabin_roof(const cabin_blueprint *bp, int chunk_x, int chunk_z } } +static void carve_cabin_path(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *chunk, column_data columns[CHUNK_SIZE][CHUNK_SIZE], + int start_x, int start_z, int dir_x, int dir_z, int length, int width) { + if (dir_x == 0 && dir_z == 0) return; + int chunk_min_x = chunk_x * CHUNK_SIZE; + int chunk_max_x = chunk_min_x + CHUNK_SIZE - 1; + int chunk_min_z = chunk_z * CHUNK_SIZE; + int chunk_max_z = chunk_min_z + CHUNK_SIZE - 1; + int end_x = start_x + dir_x * length; + int end_z = start_z + dir_z * length; + if (end_x < chunk_min_x + 1) end_x = chunk_min_x + 1; + if (end_x > chunk_max_x - 1) end_x = chunk_max_x - 1; + if (end_z < chunk_min_z + 1) end_z = chunk_min_z + 1; + if (end_z > chunk_max_z - 1) end_z = chunk_max_z - 1; + carve_trail_span(ctx, chunk_x, chunk_z, chunk, columns, start_x, start_z, end_x, end_z, width); +} + static void place_wall_window(chunk_data *chunk, int chunk_origin_x, int chunk_origin_z, int wx, int wz, int window_y, uint16_t window_block, int height) { int lx = wx - chunk_origin_x; @@ -1601,6 +1617,8 @@ static void build_cabin_rect(worldgen_ctx *ctx, const cabin_blueprint *bp, const } } + int ladder_hole_x = INT_MIN; + int ladder_hole_z = INT_MIN; for (int story = 0; story < bp->stories; ++story) { int story_floor = base_floor_y + story * bp->wall_height; if (story_floor >= CHUNK_HEIGHT - 4) break; @@ -1709,14 +1727,16 @@ static void build_cabin_rect(worldgen_ctx *ctx, const cabin_blueprint *bp, const if (bp->has_ladder && story < bp->stories - 1) { int ladder_x = rect_center_x; - int ladder_z = z0 + 1; + int ladder_z = rect_center_z; uint16_t ladder_block = BLOCK_LADDER_S; - switch ((story + door_side) % 4) { - case 0: ladder_x = rect_center_x; ladder_z = z0 + 1; ladder_block = BLOCK_LADDER_S; break; - case 1: ladder_x = rect_center_x; ladder_z = z1 - 1; ladder_block = BLOCK_LADDER_N; break; - case 2: ladder_x = x0 + 1; ladder_z = rect_center_z; ladder_block = BLOCK_LADDER_E; break; - case 3: ladder_x = x1 - 1; ladder_z = rect_center_z; ladder_block = BLOCK_LADDER_W; break; + switch (door_side) { + case 0: ladder_z = z1 - 2; ladder_x = rect_center_x; ladder_block = BLOCK_LADDER_N; break; + case 1: ladder_z = z0 + 2; ladder_x = rect_center_x; ladder_block = BLOCK_LADDER_S; break; + case 2: ladder_x = x1 - 2; ladder_z = rect_center_z; ladder_block = BLOCK_LADDER_E; break; + case 3: ladder_x = x0 + 2; ladder_z = rect_center_z; ladder_block = BLOCK_LADDER_W; break; } + ladder_x = clamp_int(ladder_x, x0 + 1, x1 - 1); + ladder_z = clamp_int(ladder_z, z0 + 1, z1 - 1); int lx = ladder_x - chunk_origin_x; int lz = ladder_z - chunk_origin_z; if (lx >= 0 && lx < CHUNK_SIZE && lz >= 0 && lz < CHUNK_SIZE) { @@ -1727,6 +1747,8 @@ static void build_cabin_rect(worldgen_ctx *ctx, const cabin_blueprint *bp, const if (next_floor < CHUNK_HEIGHT) { set_block_with_height(chunk, lx, lz, next_floor, BLOCK_AIR); } + ladder_hole_x = ladder_x; + ladder_hole_z = ladder_z; } } } @@ -1734,6 +1756,17 @@ static void build_cabin_rect(worldgen_ctx *ctx, const cabin_blueprint *bp, const int roof_base = base_floor_y + bp->wall_height * bp->stories; build_cabin_roof(bp, chunk_x, chunk_z, chunk, rect_center_x, rect_center_z, rect->half_w, rect->half_l, roof_base, rng); + int attic_y = roof_base; + for (int wz = z0 + 1; wz <= z1 - 1; ++wz) { + for (int wx = x0 + 1; wx <= x1 - 1; ++wx) { + if (wx == ladder_hole_x && wz == ladder_hole_z) continue; + int lx = wx - chunk_origin_x; + int lz = wz - chunk_origin_z; + if (lx < 0 || lx >= CHUNK_SIZE || lz < 0 || lz >= CHUNK_SIZE) continue; + set_block_with_height(chunk, lx, lz, attic_y, bp->floor_block); + } + } + if (has_door) { int step_x = (door_side == 2) ? -1 : (door_side == 3) ? 1 : 0; int step_z = (door_side == 0) ? -1 : (door_side == 1) ? 1 : 0; @@ -1919,8 +1952,11 @@ static void connect_cabin_to_trail(worldgen_ctx *ctx, int chunk_x, int chunk_z, int step_z = (door_side == 0) ? -1 : (door_side == 1) ? 1 : 0; int start_x = door_x + step_x; int start_z = door_z + step_z; + int spur_len = 6; + if (path_width < 2) path_width = 2; + carve_cabin_path(ctx, chunk_x, chunk_z, chunk, columns, start_x, start_z, step_x, step_z, spur_len, path_width); int target_x = 0, target_z = 0; - if (!find_nearest_trail_block(columns, chunk, chunk_x, chunk_z, start_x, start_z, 24, &target_x, &target_z)) { + if (!find_nearest_trail_block(columns, chunk, chunk_x, chunk_z, start_x, start_z, 48, &target_x, &target_z)) { return; } carve_trail_span(ctx, chunk_x, chunk_z, chunk, columns, start_x, start_z, target_x, target_z, path_width > 0 ? path_width : 2);