Compare commits
7 Commits
95bd106a3b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a06f34d99 | ||
|
|
e2436f6e24 | ||
|
|
afbf333622 | ||
|
|
acd5eaa52f | ||
|
|
84a0435312 | ||
|
|
46f1d24e9d | ||
|
|
aed76c3b1b |
19
README.md
19
README.md
@@ -74,11 +74,30 @@ Features
|
||||
- Redwoods are enabled automatically. The biome classifier marks high-rainfall,
|
||||
higher-relief areas as redwood forest, then places titan trees, dirt/mulch
|
||||
floor cover, tall grass, and occasional fallen logs.
|
||||
- General forests grow as broad, coherent oak, maple, birch, pine, spruce,
|
||||
walnut, and cypress stands with occasional companion species. Seeded
|
||||
clearings, sparse field trees, regenerating edges, mature interiors, variable
|
||||
tree height, and irregular crown spacing keep the distribution from resolving
|
||||
into a uniform grid.
|
||||
- Cabins are enabled automatically. With `--trails`, cabins only try to spawn on
|
||||
chunks crossed by the trail network so their spur paths can connect to roads.
|
||||
Without `--trails`, cabins can still spawn, but they are rarer and unconnected.
|
||||
- Cabin generation includes compact homesteads, longhouses, two-story houses,
|
||||
L-shaped cabins, cross-gabled lodges, mixed-height tower lodges, and rambling
|
||||
multi-wing cabins. Roof direction, wing height, material palette, windows,
|
||||
porches, chimneys, decay, and path width vary by design.
|
||||
- Seeded woodland-community regions raise the local cabin frequency and give
|
||||
their roads permission to bridge narrowly bounded water at exact sea level.
|
||||
Eligible crossings must have nearby dry banks on both sides; deep water,
|
||||
broad lakes, and open ocean remain impassable. Bridges use raised spruce
|
||||
decks, timber supports, and intermittent edge posts rather than gravel fill.
|
||||
- Trails are optional because they need a prepass over the target area. Use
|
||||
`--trails` when you want roads and better-connected cabins.
|
||||
- Long roads search a broad terrain corridor and prefer valley floors, gentle
|
||||
contour-following grades, low ridge crossings, and stable side slopes. Deep
|
||||
water remains impassable; shallow water is crossed only when the detour cost
|
||||
is greater, keeping fords and causeways short. Short cabin spurs use looser
|
||||
engineering constraints so they can still reach the main network.
|
||||
|
||||
Minecraft Version
|
||||
-----------------
|
||||
|
||||
Binary file not shown.
@@ -71,7 +71,9 @@
|
||||
BLOCK_CLAY = 58,
|
||||
BLOCK_SEAGRASS = 59,
|
||||
BLOCK_IRON_BARS_NS = 60,
|
||||
BLOCK_IRON_BARS_EW = 61
|
||||
BLOCK_IRON_BARS_EW = 61,
|
||||
BLOCK_SPRUCE_STAIRS_N = 62,
|
||||
BLOCK_SPRUCE_STAIRS_S = 63
|
||||
};
|
||||
|
||||
struct trail_segment;
|
||||
@@ -112,5 +114,7 @@ void worldgen_prepass(worldgen_ctx *ctx, int min_x, int max_x, int min_z, int ma
|
||||
void worldgen_free_trails(worldgen_ctx *ctx);
|
||||
int worldgen_debug_biome(worldgen_ctx *ctx, int x, int z);
|
||||
double worldgen_debug_redwood_mask(worldgen_ctx *ctx, int x, int z);
|
||||
double worldgen_debug_community_strength(worldgen_ctx *ctx, int x, int z);
|
||||
int worldgen_debug_bridge_site(worldgen_ctx *ctx, int x, int z, int dir_x, int dir_z);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -166,7 +166,9 @@ static const block_state BLOCK_STATE_TABLE[] = {
|
||||
[BLOCK_CLAY] = {"minecraft:clay", NULL, 0},
|
||||
[BLOCK_SEAGRASS] = {"minecraft:seagrass", NULL, 0},
|
||||
[BLOCK_IRON_BARS_NS] = {"minecraft:iron_bars", PROPS_IRON_BARS_NS, 5},
|
||||
[BLOCK_IRON_BARS_EW] = {"minecraft:iron_bars", PROPS_IRON_BARS_EW, 5}
|
||||
[BLOCK_IRON_BARS_EW] = {"minecraft:iron_bars", PROPS_IRON_BARS_EW, 5},
|
||||
[BLOCK_SPRUCE_STAIRS_N] = {"minecraft:spruce_stairs", PROPS_STAIRS_N, 4},
|
||||
[BLOCK_SPRUCE_STAIRS_S] = {"minecraft:spruce_stairs", PROPS_STAIRS_S, 4}
|
||||
};
|
||||
|
||||
static const block_state *get_block_state(uint16_t id) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,7 @@ static int is_cabin_block(uint16_t block) {
|
||||
block == BLOCK_OAK_LOG_X || block == BLOCK_OAK_LOG_Z ||
|
||||
block == BLOCK_SPRUCE_LOG_X || block == BLOCK_SPRUCE_LOG_Z ||
|
||||
block == BLOCK_GLASS_PANE || block == BLOCK_GLASS || block == BLOCK_SPRUCE_STAIRS_E || block == BLOCK_SPRUCE_STAIRS_W ||
|
||||
block == BLOCK_SPRUCE_STAIRS_N || block == BLOCK_SPRUCE_STAIRS_S ||
|
||||
block == BLOCK_LADDER_N || block == BLOCK_LADDER_S || block == BLOCK_LADDER_E || block == BLOCK_LADDER_W ||
|
||||
block == BLOCK_SPRUCE_DOOR_N_LOWER || block == BLOCK_SPRUCE_DOOR_N_UPPER ||
|
||||
block == BLOCK_SPRUCE_DOOR_S_LOWER || block == BLOCK_SPRUCE_DOOR_S_UPPER ||
|
||||
@@ -78,6 +79,8 @@ int main(int argc, char **argv) {
|
||||
long cabin_columns = 0;
|
||||
long gravel_columns = 0;
|
||||
long cabin_gravel_columns = 0;
|
||||
long bridge_deck_columns = 0;
|
||||
long eligible_bridge_columns = 0;
|
||||
long tall_log_columns = 0;
|
||||
long max_oak_log_run = 0;
|
||||
long biome_columns[4] = {0, 0, 0, 0};
|
||||
@@ -96,8 +99,11 @@ int main(int argc, char **argv) {
|
||||
if (biome >= 0 && biome < 4) ++biome_columns[biome];
|
||||
double redwood_mask = worldgen_debug_redwood_mask(&ctx, wx, wz);
|
||||
if (redwood_mask > max_redwood_mask) max_redwood_mask = redwood_mask;
|
||||
if (worldgen_debug_bridge_site(&ctx, wx, wz, 1, 0) ||
|
||||
worldgen_debug_bridge_site(&ctx, wx, wz, 0, 1)) ++eligible_bridge_columns;
|
||||
int has_cabin = 0;
|
||||
int has_gravel = 0;
|
||||
int has_bridge_deck = 0;
|
||||
int current_run = 0;
|
||||
int best_run = 0;
|
||||
for (int y = 1; y < CHUNK_HEIGHT; ++y) {
|
||||
@@ -109,6 +115,8 @@ int main(int argc, char **argv) {
|
||||
if (block == BLOCK_GRAVEL) {
|
||||
has_gravel = 1;
|
||||
}
|
||||
if (block == BLOCK_SPRUCE_PLANKS && y > 1 && chunk.blocks[y - 1][lx][lz] == BLOCK_WATER)
|
||||
has_bridge_deck = 1;
|
||||
if (block == BLOCK_OAK_LOG) {
|
||||
++current_run;
|
||||
if (current_run > best_run) best_run = current_run;
|
||||
@@ -120,6 +128,7 @@ int main(int argc, char **argv) {
|
||||
if (best_run >= 40) ++tall_log_columns;
|
||||
if (has_cabin) ++cabin_columns;
|
||||
if (has_gravel) ++gravel_columns;
|
||||
if (has_bridge_deck) ++bridge_deck_columns;
|
||||
if (has_cabin && has_gravel) {
|
||||
++cabin_gravel_columns;
|
||||
}
|
||||
@@ -133,6 +142,8 @@ int main(int argc, char **argv) {
|
||||
printf("cabin_columns=%ld\n", cabin_columns);
|
||||
printf("gravel_columns=%ld\n", gravel_columns);
|
||||
printf("cabin_gravel_columns=%ld\n", cabin_gravel_columns);
|
||||
printf("bridge_deck_columns=%ld\n", bridge_deck_columns);
|
||||
printf("eligible_bridge_columns=%ld\n", eligible_bridge_columns);
|
||||
printf("tall_oak_log_columns=%ld\n", tall_log_columns);
|
||||
printf("max_oak_log_run=%ld\n", max_oak_log_run);
|
||||
printf("biome_west_ky=%ld\n", biome_columns[0]);
|
||||
|
||||
Reference in New Issue
Block a user