From f93ebff0b91e5eb70871256d7fd7d5af57b0e3f1 Mon Sep 17 00:00:00 2001 From: chelsea Date: Sat, 2 May 2026 20:59:38 -0500 Subject: [PATCH] Refine wall base and ladder access --- worldgen-c/bin/worldgen | Bin 157144 -> 161240 bytes worldgen-c/src/worldgen.c | 97 ++++++++++++++++++++++++++------------ 2 files changed, 66 insertions(+), 31 deletions(-) diff --git a/worldgen-c/bin/worldgen b/worldgen-c/bin/worldgen index 9c38f64f952fdc286c209201e3818f0c2433231e..0dcba92a460f408ecc98703a1693ae3a54e1cacf 100755 GIT binary patch delta 44830 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 YZIn8T-3Og70(5&wh#0KW(h?T+fBbK8@&Et; delta 43540 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 z zte9ns3dHx%v&Cv){d~j+Hsd6g)4+;HZIK^`k#+q-Tg*il@2RlGc8R~U#T8&P(1&4U zU?mg;)`yXRbU$ee4+imdYmfjiTx*Ntz>0OY$ie8N5$7w`0-M((A)xy?TgZK3^=u2d zZLRr5$OpPN+aj14f`FH8(SlJ;6%#R_0!oDfaGxi0dY%>gO>ng-?pszc4R9ANoA?5Z=cpVvwFGxPc>R~`lD0%1r7*&rajbnKYl89^%AaaIYxi0*UqIJfj!gMXS5<=3X?m)5V}I4xvuT z%ZodR`nPK)+cIqHEbfyopvcY#*%2nCmH!kHj zvnh+(9_M4(G=u)Rj0?O#?+Sj=i*TL8d`7yrtme|*^dJp+ieKwZWt8&=j_(8a=^8GR zc;so`(}$)ePKG`!Q2j2hpU@zPopXZFe zbdUV$v=xhLShvX*xv_k>KXu`iedrecD2H-sZarVlp|Lc5E05|&{b}zTT-A>XX!SOJ zs~@zW%K&GRMZ{DlwpM@d@mb6zguop0oo5}OY4;au?BKjs1-O8)e5Ug-m$ zaDor}klPbqaK->yPrJUx5v=gf`8Qt}0ROi0JS-1#XI|pXz?jLF;2-kn{+JHQg2xS{ z`(k2K1iv(pisI`r8kOkmzAeH;)L)NCj4ORJc)P z;XOCu8%NwYeDEf`bz>fV&hQ%x^52AS8Fqd6q*&#y*AE)~nR6LF7{zDm@Qsd~2P{iP zheb7lbOOJL|4Aq)+q7*ZHw8Dn>+$4O9enKYWZ)o{DH15{8 zPhrS10S?_bz%~CPKjMGvNBoTfCv>>49PDRVr!*1K_^n2*p>^)RZfPs-H3~-y{6UBN zx$;Z_T(98I*DqS$FV)W!@UNv`w7g%cpQ#|fmVVLlex`mQQ(vOxx#CotPSDs+V^j;d z)&Qc*>nFzl{}yHn=qC!era*Ls|7r0bwXAfVGmpj|8chp(Nn5>sn$L~$AEezYbvWZ* z80Ah?y$A(Uc*baqg#szOU!p&SdlXZ-D~?wcQ!ZdlN%*a8^N&d!3Nu6|9mF&pQ>IRM5V} zA%~SvRr|0|qYf-9I9Ej>A1Tb<+U5P=Qeq0W}+KK%}jO>jDb>hCSfqxnrn zknX+>zfJR|yEnW%Y)zJg>Fy2xk>;K58EdeXAGf?tXb;mr`}w;m)Q#s(p!;vvGcts5 zuHL9ME-T%tF63hqP#+5$Xd->%8tc;&tz=XuvQjM52!?9DtL9C^s?dC{=9_ma`FF)P zF~FV_HM_!iA)>hQxgUmwL!a`?_xxLC;# zwP^)s=m;Ji!J`E&(|o|KBDgibPV?cY@UI#0IyO zi^sxyg#eGA2I-#5ylNVah7mbDjYh@5{&3oKS_k(l(_uXWOb?+pSe*9|y`K^OUOhE4 z#X2MxPOL6g04Au+5i-7v4iaW<8RfJHk^fjuuTkR#&I?Le4eNuH7|Yvc(!h2V3m$%C zR{4TObIKRYTR5xXtC^^5Nq1VqCrp|+ytw~>0v{ipO@q>k#*~zojvO<(c-Xk{<>N+; znlN(W^Ko7IYbica8%J(R{JkI@~*tNMDc zT6o>6V}<+i&c|r*t@;^O4B@lVS*m1(@8P^9NWv_V_!aF|Nz^WZ9PQ=y^UftSG(m^x i#RIxwp6y;r-CcgpTS`Nb=}N$@)0K!pE?&Nny8Z{2UnY(K diff --git a/worldgen-c/src/worldgen.c b/worldgen-c/src/worldgen.c index de5f26f..40ffb93 100644 --- a/worldgen-c/src/worldgen.c +++ b/worldgen-c/src/worldgen.c @@ -3570,7 +3570,7 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk const int tower_height = 28; const int tower_spacing = 32; const int tower_half_width = 4; - const int gate_spacing = 64; + const int ladder_spacing = 96; for (int dx = 0; dx < CHUNK_SIZE; ++dx) { for (int dz = 0; dz < CHUNK_SIZE; ++dz) { int world_x = chunk_x * CHUNK_SIZE + dx; @@ -3605,17 +3605,18 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk if (phase < 0) phase += tower_spacing; int tower_offset = phase; if (tower_offset > tower_spacing / 2) tower_offset = tower_spacing - tower_offset; - int gate_phase = along % gate_spacing; - if (gate_phase < 0) gate_phase += gate_spacing; - int gate_offset = gate_phase - gate_spacing / 2; - if (gate_offset < 0) gate_offset = -gate_offset; + int ladder_phase = along % ladder_spacing; + if (ladder_phase < 0) ladder_phase += ladder_spacing; + int ladder_offset = ladder_phase - ladder_spacing / 2; + 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; - int in_gateway = !near_corner && gate_offset <= 2 && - side_dist >= tower_outer && side_dist <= tower_inner; + 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; @@ -3642,49 +3643,83 @@ static void generate_chunk_border_wall(worldgen_ctx *ctx, int chunk_x, int chunk continue; } - int height = in_tower ? tower_height : wall_height; - int top = visible_base + height; - if (top >= CHUNK_HEIGHT) top = CHUNK_HEIGHT - 1; - uint16_t stair_block = BLOCK_STONE_BRICK_STAIRS_E; - if (side == 1) stair_block = BLOCK_STONE_BRICK_STAIRS_W; - if (side == 2) stair_block = BLOCK_STONE_BRICK_STAIRS_S; - if (side == 3) stair_block = BLOCK_STONE_BRICK_STAIRS_N; - int stair_rel = -1000; - if (in_tower && tower_offset == 2 && side_dist >= tower_outer + 1 && side_dist <= tower_inner - 1) { - stair_rel = 2 + (side_dist - (tower_outer + 1)); + int center_x = world_x; + int center_z = world_z; + 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; } + int smoothed_base = 0; + int weight_sum = 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) { + int sx = center_x; + int sz = center_z; + if (side < 2) { + sz += sample_offsets[i]; + } else { + sx += sample_offsets[i]; + } + if (sx < ctx->wall_min_x) sx = ctx->wall_min_x; + if (sx > ctx->wall_max_x) sx = ctx->wall_max_x; + if (sz < ctx->wall_min_z) sz = ctx->wall_min_z; + if (sz > ctx->wall_max_z) sz = ctx->wall_max_z; + 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; + 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 (smoothed_base < 1) smoothed_base = 1; + if (smoothed_base > CHUNK_HEIGHT - 2) smoothed_base = CHUNK_HEIGHT - 2; + + int height = in_tower ? tower_height : wall_height; + int top = smoothed_base + height; + if (top >= CHUNK_HEIGHT) top = CHUNK_HEIGHT - 1; + uint16_t ladder_block = BLOCK_LADDER_E; + if (side == 1) ladder_block = BLOCK_LADDER_W; + if (side == 2) ladder_block = BLOCK_LADDER_S; + if (side == 3) ladder_block = BLOCK_LADDER_N; for (int y = data.height + 1; y < CHUNK_HEIGHT; ++y) { out->blocks[y][dx][dz] = BLOCK_AIR; } out->heightmap[dx][dz] = (uint16_t)data.height; - int start = data.height - 3; + int start = data.height - 4; + if (smoothed_base - 4 < start) start = smoothed_base - 4; if (start < 1) start = 1; for (int y = start; y <= top; ++y) { - int rel_y = y - visible_base; + int rel_y = y - smoothed_base; uint16_t block = BLOCK_SMOOTH_STONE; int in_center_corridor = side_dist >= wall_center - 1 && side_dist <= wall_center + 1 && - rel_y >= 2 && rel_y <= 4 && !in_gateway; - if (in_gateway && rel_y >= 1 && rel_y <= 5) { - continue; - } - if (stair_rel >= 0 && rel_y == stair_rel) { - set_block_with_height(out, dx, dz, y, stair_block); - continue; - } - if (stair_rel >= 0 && rel_y > stair_rel && rel_y <= stair_rel + 3) { - continue; - } + rel_y >= 2 && rel_y <= 4; if (in_center_corridor) { continue; } + if (rel_y < 0) { + block = (rel_y == -1 || rel_y == -4) ? BLOCK_STONE_BRICKS : BLOCK_STONE; + } if (rel_y <= 2 || rel_y % 6 == 0 || rel_y == height - 1) { block = BLOCK_STONE_BRICKS; } 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) { + 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; + } if (in_tower && side_dist == tower_outer && rel_y >= 9 && rel_y <= 17 && (tower_offset == 0 || (rel_y == 13 && tower_offset <= 3))) { block = BLOCK_BLACKSTONE;