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,
|
- Redwoods are enabled automatically. The biome classifier marks high-rainfall,
|
||||||
higher-relief areas as redwood forest, then places titan trees, dirt/mulch
|
higher-relief areas as redwood forest, then places titan trees, dirt/mulch
|
||||||
floor cover, tall grass, and occasional fallen logs.
|
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
|
- 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.
|
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.
|
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 are optional because they need a prepass over the target area. Use
|
||||||
`--trails` when you want roads and better-connected cabins.
|
`--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
|
Minecraft Version
|
||||||
-----------------
|
-----------------
|
||||||
|
|||||||
Binary file not shown.
@@ -71,7 +71,9 @@
|
|||||||
BLOCK_CLAY = 58,
|
BLOCK_CLAY = 58,
|
||||||
BLOCK_SEAGRASS = 59,
|
BLOCK_SEAGRASS = 59,
|
||||||
BLOCK_IRON_BARS_NS = 60,
|
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;
|
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);
|
void worldgen_free_trails(worldgen_ctx *ctx);
|
||||||
int worldgen_debug_biome(worldgen_ctx *ctx, int x, int z);
|
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_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
|
#endif
|
||||||
|
|||||||
@@ -166,7 +166,9 @@ static const block_state BLOCK_STATE_TABLE[] = {
|
|||||||
[BLOCK_CLAY] = {"minecraft:clay", NULL, 0},
|
[BLOCK_CLAY] = {"minecraft:clay", NULL, 0},
|
||||||
[BLOCK_SEAGRASS] = {"minecraft:seagrass", NULL, 0},
|
[BLOCK_SEAGRASS] = {"minecraft:seagrass", NULL, 0},
|
||||||
[BLOCK_IRON_BARS_NS] = {"minecraft:iron_bars", PROPS_IRON_BARS_NS, 5},
|
[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) {
|
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_OAK_LOG_X || block == BLOCK_OAK_LOG_Z ||
|
||||||
block == BLOCK_SPRUCE_LOG_X || block == BLOCK_SPRUCE_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_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_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_N_LOWER || block == BLOCK_SPRUCE_DOOR_N_UPPER ||
|
||||||
block == BLOCK_SPRUCE_DOOR_S_LOWER || block == BLOCK_SPRUCE_DOOR_S_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 cabin_columns = 0;
|
||||||
long gravel_columns = 0;
|
long gravel_columns = 0;
|
||||||
long cabin_gravel_columns = 0;
|
long cabin_gravel_columns = 0;
|
||||||
|
long bridge_deck_columns = 0;
|
||||||
|
long eligible_bridge_columns = 0;
|
||||||
long tall_log_columns = 0;
|
long tall_log_columns = 0;
|
||||||
long max_oak_log_run = 0;
|
long max_oak_log_run = 0;
|
||||||
long biome_columns[4] = {0, 0, 0, 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];
|
if (biome >= 0 && biome < 4) ++biome_columns[biome];
|
||||||
double redwood_mask = worldgen_debug_redwood_mask(&ctx, wx, wz);
|
double redwood_mask = worldgen_debug_redwood_mask(&ctx, wx, wz);
|
||||||
if (redwood_mask > max_redwood_mask) max_redwood_mask = redwood_mask;
|
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_cabin = 0;
|
||||||
int has_gravel = 0;
|
int has_gravel = 0;
|
||||||
|
int has_bridge_deck = 0;
|
||||||
int current_run = 0;
|
int current_run = 0;
|
||||||
int best_run = 0;
|
int best_run = 0;
|
||||||
for (int y = 1; y < CHUNK_HEIGHT; ++y) {
|
for (int y = 1; y < CHUNK_HEIGHT; ++y) {
|
||||||
@@ -109,6 +115,8 @@ int main(int argc, char **argv) {
|
|||||||
if (block == BLOCK_GRAVEL) {
|
if (block == BLOCK_GRAVEL) {
|
||||||
has_gravel = 1;
|
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) {
|
if (block == BLOCK_OAK_LOG) {
|
||||||
++current_run;
|
++current_run;
|
||||||
if (current_run > best_run) best_run = 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 (best_run >= 40) ++tall_log_columns;
|
||||||
if (has_cabin) ++cabin_columns;
|
if (has_cabin) ++cabin_columns;
|
||||||
if (has_gravel) ++gravel_columns;
|
if (has_gravel) ++gravel_columns;
|
||||||
|
if (has_bridge_deck) ++bridge_deck_columns;
|
||||||
if (has_cabin && has_gravel) {
|
if (has_cabin && has_gravel) {
|
||||||
++cabin_gravel_columns;
|
++cabin_gravel_columns;
|
||||||
}
|
}
|
||||||
@@ -133,6 +142,8 @@ int main(int argc, char **argv) {
|
|||||||
printf("cabin_columns=%ld\n", cabin_columns);
|
printf("cabin_columns=%ld\n", cabin_columns);
|
||||||
printf("gravel_columns=%ld\n", gravel_columns);
|
printf("gravel_columns=%ld\n", gravel_columns);
|
||||||
printf("cabin_gravel_columns=%ld\n", cabin_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("tall_oak_log_columns=%ld\n", tall_log_columns);
|
||||||
printf("max_oak_log_run=%ld\n", max_oak_log_run);
|
printf("max_oak_log_run=%ld\n", max_oak_log_run);
|
||||||
printf("biome_west_ky=%ld\n", biome_columns[0]);
|
printf("biome_west_ky=%ld\n", biome_columns[0]);
|
||||||
|
|||||||
Reference in New Issue
Block a user