From d0f3c9a0484f8e65b1c7b3f157daed0ddc4e0e2d Mon Sep 17 00:00:00 2001 From: chelsea Date: Sat, 2 May 2026 21:54:12 -0500 Subject: [PATCH] Address border wall issue reports --- worldgen-c/bin/worldgen | Bin 161240 -> 161240 bytes worldgen-c/src/worldgen.c | 64 +++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/worldgen-c/bin/worldgen b/worldgen-c/bin/worldgen index 0dcba92a460f408ecc98703a1693ae3a54e1cacf..881e7f36729f6f9f5ff4277f6e9ff4a698478e14 100755 GIT binary patch delta 20236 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 V>@&j6y*x%8HBb4c&j>e#{x=*@qTv7l delta 19865 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 16); } +static int floor_div_int(int value, int divisor) { + int q = value / divisor; + int r = value % divisor; + if (r != 0 && ((r < 0) != (divisor < 0))) q--; + return q; +} + static double land_value(worldgen_ctx *ctx, int x, int z) { column_data col = get_column_data(ctx, x, z); double value = 0.0; @@ -3611,14 +3618,8 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk if (ladder_offset < 0) ladder_offset = -ladder_offset; int near_corner = (dist_min_x < tower_depth || dist_max_x < tower_depth) && (dist_min_z < tower_depth || dist_max_z < tower_depth); - int ladder_module = !near_corner && ladder_offset <= 1; - int ladder_face = !near_corner && ladder_offset == 0 && side_dist == wall_end + 1; - int ladder_trim = ladder_module && side_dist == wall_end + 1 && ladder_offset == 1; int in_tower = side_dist >= tower_outer && side_dist <= tower_inner && (tower_offset <= tower_half_width || near_corner); - int in_wall = (side_dist >= wall_start && side_dist <= wall_end) || in_tower || ladder_face || ladder_trim; - int in_exterior_apron = side_dist < wall_start && !in_wall; - if (!in_wall && !in_exterior_apron) continue; column_data data = get_column_data(ctx, world_x, world_z); int visible_base = data.height; @@ -3627,6 +3628,14 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk } if (visible_base >= CHUNK_HEIGHT - 1) continue; + int dry_ladder_site = !(data.has_water && data.height < data.water_surface); + int ladder_module = !near_corner && dry_ladder_site && ladder_offset <= 1; + int ladder_face = ladder_module && ladder_offset == 0 && side_dist == wall_end + 1; + int ladder_trim = ladder_module && side_dist == wall_end + 1 && ladder_offset == 1; + int in_wall = (side_dist >= wall_start && side_dist <= wall_end) || in_tower || ladder_face || ladder_trim; + int in_exterior_apron = side_dist < wall_start && !in_wall; + if (!in_wall && !in_exterior_apron) continue; + if (in_exterior_apron) { for (int y = data.height + 1; y < CHUNK_HEIGHT; ++y) { out->blocks[y][dx][dz] = BLOCK_AIR; @@ -3645,14 +3654,28 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk int center_x = world_x; int center_z = world_z; + int base_along = (floor_div_int(along, tower_spacing) * tower_spacing) + tower_spacing / 2; switch (side) { - case 0: center_x = ctx->wall_min_x + wall_center; break; - case 1: center_x = ctx->wall_max_x - wall_center; break; - case 2: center_z = ctx->wall_min_z + wall_center; break; - case 3: center_z = ctx->wall_max_z - wall_center; break; + case 0: + center_x = ctx->wall_min_x + wall_center; + center_z = base_along; + break; + case 1: + center_x = ctx->wall_max_x - wall_center; + center_z = base_along; + break; + case 2: + center_x = base_along; + center_z = ctx->wall_min_z + wall_center; + break; + case 3: + center_x = base_along; + center_z = ctx->wall_max_z - wall_center; + break; } int smoothed_base = 0; int weight_sum = 0; + int highest_sample_base = 0; const int sample_offsets[5] = {-32, -16, 0, 16, 32}; const int sample_weights[5] = {1, 2, 4, 2, 1}; for (int i = 0; i < 5; ++i) { @@ -3670,14 +3693,13 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk column_data sample = get_column_data(ctx, sx, sz); int sample_base = sample.height; if (sample.has_water && sample.water_surface > sample_base) sample_base = sample.water_surface; + if (i == 0 || sample_base > highest_sample_base) highest_sample_base = sample_base; smoothed_base += sample_base * sample_weights[i]; weight_sum += sample_weights[i]; } smoothed_base /= weight_sum; - if (visible_base > smoothed_base + 8) { - smoothed_base += (visible_base - smoothed_base - 8 + 3) / 4; - } else if (visible_base < smoothed_base - 16) { - smoothed_base -= (smoothed_base - visible_base - 16 + 4) / 5; + if (highest_sample_base > smoothed_base + 8) { + smoothed_base += (highest_sample_base - smoothed_base - 8 + 1) / 2; } if (smoothed_base < 1) smoothed_base = 1; if (smoothed_base > CHUNK_HEIGHT - 2) smoothed_base = CHUNK_HEIGHT - 2; @@ -3715,7 +3737,10 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk if (side_dist >= wall_center - 1 && side_dist <= wall_center + 1 && rel_y == height) { block = BLOCK_STONE_BRICKS; } - if (ladder_face && rel_y >= 2 && rel_y <= height - 1) { + if (ladder_face && rel_y >= 2 && rel_y <= height) { + if (rel_y == height) { + continue; + } block = ladder_block; } else if (ladder_trim && rel_y >= 2 && rel_y <= height - 1 && rel_y % 3 != 1) { block = (rel_y % 6 == 0) ? BLOCK_BLACKSTONE : BLOCK_STONE_BRICKS; @@ -3730,9 +3755,12 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk } set_block_with_height(out, dx, dz, y, block); } - if (top + 1 < CHUNK_HEIGHT && (side_dist == wall_start || side_dist == wall_end || in_tower) && - phase % 4 < 2) { - set_block_with_height(out, dx, dz, top + 1, BLOCK_STONE_BRICKS); + if (top + 1 < CHUNK_HEIGHT) { + if (!in_tower && (side_dist == wall_start || side_dist == wall_end)) { + set_block_with_height(out, dx, dz, top + 1, BLOCK_IRON_BARS); + } else if (in_tower && phase % 4 < 2) { + set_block_with_height(out, dx, dz, top + 1, BLOCK_STONE_BRICKS); + } } } }