From f5afe3d69b7e0b36ef405126880141b72fafcb33 Mon Sep 17 00:00:00 2001 From: chelsea Date: Tue, 2 Dec 2025 19:56:27 -0600 Subject: [PATCH] Remove river carving and add flowers --- worldgen-c/bin/worldgen | Bin 102016 -> 106160 bytes worldgen-c/include/worldgen.h | 3 +- worldgen-c/src/main.c | 3 +- worldgen-c/src/worldgen.c | 198 ++++++++++++++++++++++------------ 4 files changed, 136 insertions(+), 68 deletions(-) diff --git a/worldgen-c/bin/worldgen b/worldgen-c/bin/worldgen index 850e7e997e03473c0f1d01272b1adfacc430cf63..0a3e066a511aebfdcb4422aa4fc5db427492170b 100755 GIT binary patch delta 36702 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 delta 30617 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

Bh1TzEz-&5THH@!d$_rnn_=w6NNb zrY8I~4cfA9tgu9A|41^+Yy8#JkX+C>YHO#0%TGE7T7_I^xm73}u;yL*`~JtThMjt| z%~!uXIj;>p{q*FD%4>1yD-J&id=MRY5*a}DJ;}h8F6WDBLWFZcnlP}n#;Wo!d6L(c zn7rj?n(%{YTLzyh5wM~ociF}I`k(K*6~LO1(!8Ench_BrxhwJfUH5vxqZ{wKBLUZ3 zxa+nejfTgv4rw{keUxvy>mG=q-h^~2(&WGHx>r+*b=Mz!^jHd$iC+i2mEn*3-uljN z_dWnJqj8xZyRoLOZg&pSTKsbkbx7CscDv)SG0p7nc4s5a9pHA?Agwh3j$OLu3AZ~J z>BxTppYlcw8mKuFCjUOt+F@{X5ZM3^G;=24NON=C?vZ$@qvZ@A5O3|@Dwx(;K|f0>faMcm(g>B^VbaFU*ft3 zXZsh0q2k>0&WSGyJ;V#=oy%Vori=9#oVQ;TdW*Riojo#rQb3=++%^J~ct;)`{xwh2G4DLwgh{{Uy`?cz&Y2^P366W5Joo=Ob_K;2b(p$OusI zoD=2zVxsVTumxonbaqo`=XLOHX+r*e&}IE4kGhZ-h??i550u;HBJ-y2Yd@yoz2;8 zx-d3a53~Gd2^{`V=j{m)Fr-NBJo_{EIKJv0KxKki(cFY>LdoWr< zf7C}E0V@LR#6ahgsY2Ih$Ld4G*_qTaR=*@&a7d^oHKc`paLd3H)QUf{i&sFCcm!`k zG6;v|0(Jqg|Eji0w!9Ls!lPTnSA+w>_%eXmSvy+@6ODp=MGW`Dcdb~8?^sdV*Ynvb z&!>nm1F=8P=czoOH1fcQa=I+fSEoFmB=VF`@%h%0Dwk%S3irkLd@L$c{qm3p|1(ui zd<2Tgi;q6B6yJDaDZc3>kBUfm+Vc%3&o`Sq-)QoDGRgA^rZ(y)Sv;Ru@|5EfO02#3 zViNHU^L!zRfG}cB3+LN!2$4aB3`x^-i1V+xLbqVg_m3VO;_Uhc@}AEd4H@Em7WsCb z&lh<9~*jI&3nEjv|xyH@SBAH zITz2N7q+~fE3^il()FsEHMm!AJ(>A-`aX{)K5;+(!%=z~_QSu8wi^UT_Bqgd4FH0xdl8~ouT z9PE$Qc!D>*!t+I{#qU(%xidNZqzbQ7;hC><_(8HG{GC(biSu}VJ6S7z59PY2f8E8l3pr2QH6WH4d%g5R^c8S|60W#!{9cZ#$&x>)b(q!O5m~L znJRp?3ik}Azg75B4}3LmKo%Az`g>P}d#usGTddij!kN{>-_VRv3Ch(1&v1EHg&*+{ zsCN7;Rx|oL=fU5^^OIG9uB&j*=a_U@u;?!s<*X~W^L!idq53r))dJ5zcmm4|{Uxbz z&wvTW5=DPQRJi90S|e3~o>SqT>1Cl>G5LK|apEaXKO8eY{mu46{Zx>9i38d}a{7Bq zC0N(Q^M^bt1zgaCX_E1U5BiJY#hMK&T;l^TXYfc(xjNP;Pk(z={B=*M--AnLV2$Rq zT2P`g@{Fw;D!l$FUU9UF9|FNhpj@AdI{@ylx#CvQ?j;Ya_!@kchW?72rxppFgX0;v zwMKct`PLGlTj~IoZ>RBmwbDbM47f(qO5^!Hr3XHm;kVZm&ERZ3@M+Glr9xXFpC`pU z`IIM>JXz*^4Jg`^;1G>Dt94Q{p29R8HJ)!~spD5ezIU{y1Dufu>uBjb1P1NsB&8L) zGWii+JWjQV-n=*&Sv{!rKGeflu`t$|R48<8BkDDtN!QbanGC@>w@`=_);ixV6rK(z zKE6_%VQAXxBqTLM&^k9s5GxXcE==s8@qB{J!#0)|51?ZF=lKFD(=Tv_vSMKz$C?T( zYFq9#PCi)WGMi&Lou?#WSkh4ytEdmxfXB!A18_YQI?|`$?N5s6`fb?kh?uk`Z&8RgPxy)nJ_VX^Tt>38a3I@Q7DEYi6(e9u*kNO zv$wppOjsc}do35bJ0~m`5<|0QzB238881$qJnf~aIa`XB3mpQtl&lh>MXaocRttTC z>Ts`%{_3^_y(H*HT)(8Xi$y@+Wj}|!(tr7Z!c}9#UUFHmX z58!BZne(LkoTC5^z5iKQFq1#hwsx+2PlyfxmvA{m% zm93xRe2cQLaN68goO>v%j?|(V&fvAkdTb-x`IJ{ypY42Wt?(o~h&@Q!s7U4zu8Gb_ fhB>1?5PCX`77Brais_local_basin) return; - if (data->height > ctx->sea_level + 8) return; - double warp_x = x + simplex_noise2(&ctx->noise, x * 0.004, z * 0.004) * 25.0; - double warp_z = z + simplex_noise2(&ctx->noise, (x + 12000) * 0.004, (z - 12000) * 0.004) * 25.0; - double river_noise = simplex_noise2(&ctx->noise, warp_x * 0.0005, warp_z * 0.0005); - double channel = 1.0 - fabs(river_noise); - if (channel < 0.985) return; - double strength = (channel - 0.985) / 0.015; - if (strength > 1.0) strength = 1.0; - if (strength < 0.0) strength = 0.0; - int surface = ctx->sea_level - 1; - if (surface < 2) surface = 2; - int depth = 2 + (int)(strength * 3.5); - int target_height = surface - depth; - if (target_height < 1) target_height = 1; - if (target_height >= data->height) return; - data->height = target_height; - data->has_water = 1; - data->water_surface = surface; - data->basin_rim = surface; - data->basin_depth = surface - target_height; - data->is_local_basin = 0; -} - // --------------------------------------------------------------------------- // Ore generation (coal seams) // --------------------------------------------------------------------------- @@ -1270,7 +1245,60 @@ static void generate_chunk_grass(worldgen_ctx *ctx, int chunk_x, int chunk_z, co } } -static void generate_chunk_trees(worldgen_ctx *ctx, int chunk_x, int chunk_z, block_list *out) { +static void generate_chunk_flowers(worldgen_ctx *ctx, int chunk_x, int chunk_z, column_data columns[CHUNK_SIZE][CHUNK_SIZE], chunk_data *out) { + for (int dx = 0; dx < CHUNK_SIZE; ++dx) { + for (int dz = 0; dz < CHUNK_SIZE; ++dz) { + column_data cd = columns[dx][dz]; + if (cd.height <= 0 || cd.height >= CHUNK_HEIGHT - 2) continue; + int world_x = chunk_x * CHUNK_SIZE + dx; + int world_z = chunk_z * CHUNK_SIZE + dz; + if (out->blocks[cd.height][dx][dz] != BLOCK_GRASS) continue; + if (out->blocks[cd.height + 1][dx][dz] != BLOCK_AIR) continue; + int slope = ground_slope(ctx, world_x, world_z); + if (slope > 3) continue; + double meadow = simplex_noise2(&ctx->noise, (world_x + 5400) * 0.012, (world_z - 5400) * 0.012) * 0.5 + 0.5; + double bloom = simplex_noise2(&ctx->noise, (world_x - 8100) * 0.0035, (world_z + 8100) * 0.0035) * 0.5 + 0.5; + double humidity = simplex_noise2(&ctx->noise, (world_x + 12000) * 0.0045, (world_z - 12000) * 0.0045) * 0.5 + 0.5; + double fertility = clamp01(meadow * 0.6 + humidity * 0.4); + double chance = 0.03 + fertility * 0.18 + bloom * 0.12; + if (cd.height < ctx->sea_level) chance *= 0.6; + double slope_penalty = clamp01((double)slope / 4.0); + chance *= (1.0 - slope_penalty * 0.7); + uint32_t h = hash_coords(world_x + 30000, world_z - 30000, (uint32_t)(ctx->world_seed ^ 0xA511E9B5u)); + double roll = (double)(h & 0xFFFF) / 65535.0; + if (roll > chance) continue; + out->blocks[cd.height + 1][dx][dz] = BLOCK_WILDFLOWER; + static const int offsets[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; + for (int i = 0; i < 4; ++i) { + int nx = dx + offsets[i][0]; + int nz = dz + offsets[i][1]; + if (nx < 0 || nx >= CHUNK_SIZE || nz < 0 || nz >= CHUNK_SIZE) continue; + column_data nd = columns[nx][nz]; + if (nd.height <= 0 || nd.height >= CHUNK_HEIGHT - 2) continue; + if (out->blocks[nd.height][nx][nz] != BLOCK_GRASS) continue; + if (out->blocks[nd.height + 1][nx][nz] != BLOCK_AIR) continue; + uint32_t nh = hash_coords(world_x + offsets[i][0] + 60000, world_z + offsets[i][1] - 60000, (uint32_t)(ctx->world_seed ^ 0xF00DBAAu)); + if ((nh & 0xFFFF) > 24000) continue; + out->blocks[nd.height + 1][nx][nz] = BLOCK_WILDFLOWER; + } + } + } +} + +static int column_has_trail_surface(chunk_data *chunk, int chunk_x, int chunk_z, int world_x, int world_z) { + int local_x = world_x - chunk_x * CHUNK_SIZE; + int local_z = world_z - chunk_z * CHUNK_SIZE; + if (local_x < 0 || local_x >= CHUNK_SIZE || local_z < 0 || local_z >= CHUNK_SIZE) return 0; + for (int y = CHUNK_HEIGHT - 2; y >= 1; --y) { + uint16_t block = chunk->blocks[y][local_x][local_z]; + if (block == BLOCK_AIR) continue; + if (block == BLOCK_WATER) return 0; + return block == BLOCK_GRAVEL; + } + return 0; +} + +static void generate_chunk_trees(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *chunk, block_list *out) { const int grid = 5; const int margin = 4; const int min_tree_alt = ctx->sea_level - 2; @@ -1345,6 +1373,10 @@ static void generate_chunk_trees(worldgen_ctx *ctx, int chunk_x, int chunk_z, bl if (surface == BLOCK_SNOW) { base_y = data.height; } + if (column_has_trail_surface(chunk, chunk_x, chunk_z, candidate_x, candidate_z)) { + block_list_free(&tmp); + continue; + } generate_tree(ctx, arch, candidate_x, base_y, candidate_z, &rng, &tmp); if (tmp.count == 0) { block_list_free(&tmp); @@ -1408,6 +1440,7 @@ static uint32_t trail_segment_hash(int ax, int az, int bx, int bz, uint32_t seed static int should_connect_trail_nodes(worldgen_ctx *ctx, int node_x0, int node_z0, int node_x1, int node_z1) { if (node_x0 == node_x1 && node_z0 == node_z1) return 0; + uint32_t seg_hash = trail_segment_hash(node_x0, node_z0, node_x1, node_z1, (uint32_t)ctx->world_seed ^ 0xB37D4A91u); double ax, az, bx, bz; trail_node_position(ctx, node_x0, node_z0, TRAIL_NODE_SPACING, &ax, &az); trail_node_position(ctx, node_x1, node_z1, TRAIL_NODE_SPACING, &bx, &bz); @@ -1447,20 +1480,28 @@ static int should_connect_trail_nodes(worldgen_ctx *ctx, int node_x0, int node_z } else { base += 0.05; } - if (dx == 0.0 || dz == 0.0) { - base += 0.05; - } - if (dx == dz && dx > 0.1) { - base += 0.03; + int axis_edge = (dx == 0.0 || dz == 0.0); + if (axis_edge) { + double corridor = simplex_noise2(&ctx->noise, (mid_x + 50000.0) * 0.0007, (mid_z - 50000.0) * 0.0007) * 0.5 + 0.5; + double penalty = 0.22 + corridor * 0.3; + base -= penalty; + if (grid_len <= 1.05) { + double axis_gate = 0.22 + corridor * 0.35; + double axis_rand = ((seg_hash >> 8) & 0xFFFF) / 65535.0; + if (axis_rand > axis_gate) { + return 0; + } + } + } else if (dx == dz && dx > 0.1) { + base += 0.07; } base += (alignment - 0.5) * 0.2; base += (ridge_bias - 0.5) * 0.15; double texture = simplex_noise2(&ctx->noise, mid_x * 0.0012, mid_z * 0.0012) * 0.5 + 0.5; base += (texture - 0.5) * 0.15; if (base < 0.02) base = 0.02; - if (base > 0.9) base = 0.9; - uint32_t h = trail_segment_hash(node_x0, node_z0, node_x1, node_z1, (uint32_t)ctx->world_seed ^ 0xB37D4A91u); - double r = (h + 1.0) / 4294967296.0; + if (base > 0.85) base = 0.85; + double r = (seg_hash + 1.0) / 4294967296.0; return r < base; } @@ -1670,18 +1711,46 @@ static void place_trail_column(chunk_data *out, column_data columns[CHUNK_SIZE][ columns[local_x][local_z].height = target_height; } +static void carve_trail_pad(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *out, column_data columns[CHUNK_SIZE][CHUNK_SIZE], int center_x, int center_z, int radius, int target_height) { + if (radius < 1) radius = 1; + (void)ctx; + int radius_sq = radius * radius; + for (int dz = -radius; dz <= radius; ++dz) { + for (int dx = -radius; dx <= radius; ++dx) { + if (dx * dx + dz * dz > radius_sq) continue; + int wx = center_x + dx; + int wz = center_z + dz; + place_trail_column(out, columns, chunk_x, chunk_z, wx, wz, target_height); + } + } +} + static void carve_trail_span(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *out, column_data columns[CHUNK_SIZE][CHUNK_SIZE], int x0, int z0, int x1, int z1, int width) { - int dx = abs(x1 - x0); - int sx = (x0 < x1) ? 1 : -1; - int dz = abs(z1 - z0); - int sz = (z0 < z1) ? 1 : -1; - int err = dx - dz; - int last_height = INT32_MIN; + double tx = (double)(x1 - x0); + double tz = (double)(z1 - z0); + double len = sqrt(tx * tx + tz * tz); const int max_step_up = 1; const int max_step_down = 1; const double carry_weight = 0.65; - while (1) { + if (len < 0.0001) { column_data data = get_column_data(ctx, x0, z0); + carve_trail_pad(ctx, chunk_x, chunk_z, out, columns, x0, z0, width - 1, data.height); + return; + } + int steps = (int)ceil(len / 0.5); + if (steps < 1) steps = 1; + double nx = -tz / len; + double nz = tx / len; + int last_height = INT32_MIN; + int start_height = INT32_MIN; + double half_width = (double)width / 2.0; + for (int i = 0; i <= steps; ++i) { + double t = (double)i / (double)steps; + double px = x0 + tx * t; + double pz = z0 + tz * t; + int wx = (int)llround(px); + int wz = (int)llround(pz); + column_data data = get_column_data(ctx, wx, wz); int target = data.height; if (last_height != INT32_MIN) { double blended = carry_weight * (double)last_height + (1.0 - carry_weight) * (double)target; @@ -1691,32 +1760,28 @@ static void carve_trail_span(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_ } else if (target < last_height - max_step_down) { target = last_height - max_step_down; } + } else { + start_height = target; } last_height = target; - double tx = x1 - x0; - double tz = z1 - z0; - double len = sqrt(tx * tx + tz * tz); - double nx = 0.0, nz = 0.0; - if (len > 0.0001) { - nx = -tz / len; - nz = tx / len; - } - for (int w = -width / 2; w <= width / 2; ++w) { - int wx = x0 + (int)llround(nx * w); - int wz = z0 + (int)llround(nz * w); - place_trail_column(out, columns, chunk_x, chunk_z, wx, wz, target); - } - if (x0 == x1 && z0 == z1) break; - int err2 = 2 * err; - if (err2 > -dz) { - err -= dz; - x0 += sx; - } - if (err2 < dx) { - err += dx; - z0 += sz; + for (double w = -half_width; w <= half_width + 0.01; w += 0.5) { + double ox = px + nx * w; + double oz = pz + nz * w; + int fx = (int)llround(ox); + int fz = (int)llround(oz); + place_trail_column(out, columns, chunk_x, chunk_z, fx, fz, target); } } + int pad_radius = width - 1; + int dx = x1 - x0; + int dz = z1 - z0; + int use_pads = (abs(dx) > 0 && abs(dz) > 0); + if (use_pads && start_height != INT32_MIN) { + carve_trail_pad(ctx, chunk_x, chunk_z, out, columns, x0, z0, pad_radius, start_height); + } + if (use_pads && last_height != INT32_MIN) { + carve_trail_pad(ctx, chunk_x, chunk_z, out, columns, x1, z1, pad_radius, last_height); + } } static void generate_chunk_trails(worldgen_ctx *ctx, int chunk_x, int chunk_z, column_data columns[CHUNK_SIZE][CHUNK_SIZE], chunk_data *out) { @@ -1822,11 +1887,12 @@ void worldgen_generate_chunk(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_ } generate_chunk_grass(ctx, chunk_x, chunk_z, columns, out); + generate_chunk_flowers(ctx, chunk_x, chunk_z, columns, out); // Tree overlay block_list trees; block_list_init(&trees); - generate_chunk_trees(ctx, chunk_x, chunk_z, &trees); + generate_chunk_trees(ctx, chunk_x, chunk_z, out, &trees); for (size_t i = 0; i < trees.count; ++i) { int lx = trees.items[i].x - chunk_x * CHUNK_SIZE; int lz = trees.items[i].z - chunk_z * CHUNK_SIZE;