From fd1a8ce47750554d590b2d059990beeb69197aec Mon Sep 17 00:00:00 2001 From: Nathan Slaven Date: Thu, 21 May 2026 22:31:53 +0000 Subject: [PATCH] Queue Ground Zero assets and biome resource plan --- AGRARIAN_DEVELOPMENT_ROADMAP.md | 23 ++++- Docs/Art/GroundZeroAssetAcquisitionQueue.md | 55 +++++++++++ .../BiomeAndNaturalResourceGenerationPlan.md | 97 +++++++++++++++++++ Scripts/verify_ground_zero_asset_queue.py | 62 ++++++++++++ 4 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 Docs/Art/GroundZeroAssetAcquisitionQueue.md create mode 100644 Docs/World/BiomeAndNaturalResourceGenerationPlan.md create mode 100644 Scripts/verify_ground_zero_asset_queue.py diff --git a/AGRARIAN_DEVELOPMENT_ROADMAP.md b/AGRARIAN_DEVELOPMENT_ROADMAP.md index ba84801..00ef4d1 100644 --- a/AGRARIAN_DEVELOPMENT_ROADMAP.md +++ b/AGRARIAN_DEVELOPMENT_ROADMAP.md @@ -163,7 +163,7 @@ Current reset baseline as of 2026-05-21: - [x] Generated Unreal folders remain ignored. - [x] Version 0.1 implementation track is complete through `0.1.S`. - [ ] Start the next milestone with only `0.2.0 Investor Visual Credibility Baseline`. -- [ ] After `0.2.0` is complete and verified, move to `0.2.A Land And Claiming`. +- [ ] After `0.2.0` is complete and verified, move to `0.2.A Tile Biome And Natural Resource Foundation`. - [ ] After `0.2.A` is complete and verified, choose the next milestone deliberately rather than letting the roadmap sprawl drive work out of order. Coding rule for the next phase: @@ -949,6 +949,7 @@ Required order: - [x] Replace or upgrade the terrain material first so Ground Zero no longer reads as flat tan placeholder ground. Rebuilt `M_AGR_GZ_Terrain_CoastalScrub` as a procedural coastal scrub material that blends dry soil, scrub green, and sandy path color families with broad and fine noise, documented the visual baseline, and extended the natural-environment verifier so flat constant-color terrain fails. - [x] Replace or upgrade grasses, shrubs, and trees with believable coastal-scrub vegetation assets, density, color variation, scale variation, and LOD/performance limits. Added native generated coastal oak, coyote brush, and dry grass clump mesh assets under `/Game/Agrarian/Environment/Vegetation`, switched the Ground Zero foliage patch off engine basic shapes, rebuilt foliage materials with per-instance color variation, preserved investor-facing density and scale variation, added explicit HISM cull/shadow performance limits, and extended verifiers so basic-shape vegetation or missing cull limits fail. - [x] Add the Asset acquisition and ingest pipeline before pulling more visuals: created approved staging folders, added `Docs/Art/AssetLicenses.md`, documented the pipeline in `Docs/Art/AgrarianAssetPipeline.md`, added `Scripts/verify_asset_pipeline_policy.py`, defaulted to Fab/free, Quixel, CC0/public-domain, team-created, or Nathan-supplied assets only, rejected random scraped internet assets, and prioritized trees, shrubs, grass, water, rocks, character bodies/outfits, and old abandoned equipment being reclaimed by nature. +- [x] Add the Ground Zero asset acquisition queue for the investor visual pass: documented free-only Fab candidates for shrubs, Mediterranean/coastal plants, grass, rocks/water-support props, and rural/reclaimed set dressing in `Docs/Art/GroundZeroAssetAcquisitionQueue.md`; added `Scripts/verify_ground_zero_asset_queue.py`; tied every candidate to the license register and staging workflow. - [ ] Replace or upgrade freshwater visuals with readable water surface, edge treatment, bank dressing, reflection/roughness tuning, and collectability cues. - [ ] Replace or upgrade character bodies and clothing so selected characters read as realistic near-future post-collapse frontier people rather than template mannequins or proxy stacks. - [ ] Replace or upgrade resource objects so wood, stone, fiber, edible plants, pickups, and gathered items look like world objects rather than debug primitives. @@ -957,9 +958,23 @@ Required order: - [ ] Replace or upgrade wildlife visuals so the first animal prototype reads as a living creature with appropriate silhouette, scale, material, and animation target. - [ ] Verify the non-ray-traced default still looks credible; ray tracing remains optional/cinematic only. - [ ] Capture fresh investor screenshots after the pass: startup/credits, character selection, first spawn, terrain, vegetation, water, campfire, shelter, pause/save flow, and one gameplay interaction. -- [ ] Do not start `0.2.A Land And Claiming` until this visual baseline is good enough to show without explaining that the world is still placeholder-heavy. +- [ ] Do not start `0.2.A Tile Biome And Natural Resource Foundation` until this visual baseline is good enough to show without explaining that the world is still placeholder-heavy. -## 0.2.A Land And Claiming +## 0.2.A Tile Biome And Natural Resource Foundation + +- [x] Document the automatic biome selection and natural resource lifecycle direction in `Docs/World/BiomeAndNaturalResourceGenerationPlan.md`. +- [ ] Define tile biome profile schema with weighted biome blends derived from real-world signals. +- [ ] Add Ground Zero biome profile metadata. +- [ ] Register biome asset sets for terrain, trees, shrubs, grasses, rocks, water, wildlife, and reclaimed human-made props. +- [ ] Connect biome weights to procedural asset selection and placement density. +- [ ] Add persistent removable natural resource records for trees and shrubs first. +- [ ] Ensure removed trees and shrubs stay removed across save/load and server restart. +- [ ] Add stump/deadwood/disturbed-ground aftermath states. +- [ ] Add slow natural reseeding/regrowth rules based on realistic in-game time. +- [ ] Extend persistent resource records to rocks, edible plants, fiber, puddles, lakes, and reclaimed props. +- [ ] Add verifier coverage for biome profile loading, asset-set lookup, removal persistence, and regrowth timing. + +## 0.2.B Land And Claiming - [ ] Design land claim philosophy. - [ ] Define claim size limits. @@ -972,7 +987,7 @@ Required order: - [ ] Add claim conflict rules. - [ ] Add abandoned claim decay rules. -## 0.2.B Farming +## 0.2.C Farming - [ ] Design soil model. - [ ] Add basic soil quality. diff --git a/Docs/Art/GroundZeroAssetAcquisitionQueue.md b/Docs/Art/GroundZeroAssetAcquisitionQueue.md new file mode 100644 index 0000000..b31d931 --- /dev/null +++ b/Docs/Art/GroundZeroAssetAcquisitionQueue.md @@ -0,0 +1,55 @@ +# Ground Zero Asset Acquisition Queue + +Purpose: make the first playable tile visually investor-ready using only +free/approved assets, while keeping every source traceable before import. + +Current rule: free-only. Do not download or import paid assets unless Nathan +explicitly approves a purchase in a later task. + +## Priority Look + +Ground Zero should feel like a believable coastal-scrub survival location after +a modern social collapse: dry soil, uneven grasses, hardy shrubs, believable +trees, readable water, natural rocks, practical frontier characters, and old +equipment being reclaimed by vegetation. + +## Free Fab Candidates + +| Priority | Asset | Source | Use | Cost | Status | Notes | +| --- | --- | --- | --- | --- | --- | --- | +| 1 | Free Shrubs Pack (Ultra Realistic Wind) | https://www.fab.com/listings/7ca465ab-fb9c-4d6b-bddb-82c20f604657 | Replace Ground Zero shrub proxies | Free | Candidate | Realistic shrub pack with 11 shrubs, opaque Nanite meshes, and Pivot Painter wind. Good near-term replacement for coyote-brush proxy silhouettes. | +| 2 | Mediterranean Vegetation: Plant Pack I | https://www.fab.com/listings/41b3889d-1a98-41e1-850e-c8b417840da0 | Coastal-scrub plants, agave-like accent plants, scanned ground detail | Free | Candidate | Free but currently flagged as not available in this region from unauthenticated browsing; check again through the Epic/Fab account before relying on it. | +| 3 | temperate Vegetation: optimized Grass Library | https://www.fab.com/listings/8b68642e-35f4-438e-82b4-799fc2228303 | Replace dry grass cards and add wind/detail | Free | Candidate | Free but currently flagged as not available in this region from unauthenticated browsing; verify through the account. | +| 4 | Soul: Cave | https://www.fab.com/listings/75f42402-40bb-4a1b-b557-18e2c9604273 | Rock, wet-edge, ruin, and water-support props/materials | Free | Candidate | Epic sample content with rock and water props/materials; useful for banks, stone resources, and visual dressing even if not coastal-specific. | +| 5 | Modular Rural House & Pine Forest Environment | https://www.fab.com/listings/a081748c-6a49-4ba4-9008-9b10fadf8f73 | Abandoned rural structures, props, roads, weeds, and potential reclaimed-equipment set dressing | Free | Candidate | Useful for post-collapse frontier settlement mood; pine assets may not fit Ground Zero coastal scrub but props/roads/house pieces may. | + +## Acquisition Steps + +1. Log into Fab/Epic only in an active browser or launcher session. +2. Confirm each listing still shows `Free`. +3. Add only free assets to the library/cart. +4. Download/export into `/home/nathan/AssetStaging/Agrarian/Incoming`. +5. Save a license/cost screenshot or text export into + `/home/nathan/AssetStaging/Agrarian/LicenseEvidence`. +6. Move only approved free assets to `/home/nathan/AssetStaging/Agrarian/Approved`. +7. Import into Unreal under: + - `/Game/Agrarian/Environment/Vegetation` + - `/Game/Agrarian/Environment/Water` + - `/Game/Agrarian/Environment/Rocks` + - `/Game/Agrarian/Props/Reclaimed` + - `/Game/Agrarian/Characters` +8. Add imported assets to `Docs/Art/AssetLicenses.md`. +9. Run: + - `Scripts/verify_asset_pipeline_policy.py` + - `Scripts/verify_asset_license_free_only.py` + - relevant visual/placeholder verifiers + +## Import Standards + +- Replace proxy assets only after imported meshes have collision, materials, + cull distances, and LOD/Nanite decisions. +- Do not rely on showcase maps. Extract only the specific assets needed for + Agrarian's map, biome, and resource systems. +- Any tree, shrub, rock, puddle, lake, resource node, or large prop placed in a + playable tile must eventually be represented by a persistent world-resource record + so player removal is durable. diff --git a/Docs/World/BiomeAndNaturalResourceGenerationPlan.md b/Docs/World/BiomeAndNaturalResourceGenerationPlan.md new file mode 100644 index 0000000..057be5c --- /dev/null +++ b/Docs/World/BiomeAndNaturalResourceGenerationPlan.md @@ -0,0 +1,97 @@ +# Biome And Natural Resource Generation Plan + +Agrarian needs Earth-aware tile generation, not hand-authored placeholder maps. +Every 1 km tile should derive its biome and natural resources from real-world +environmental signals, then place removable and persistent objects that behave +like real natural resources. + +## Biome Selection Inputs + +Each tile should eventually derive biome weights from: + +- latitude +- elevation +- slope and aspect +- rainfall +- seasonal temperature swing +- ocean proximity +- prevailing wind +- ocean currents +- rain-shadow effects +- soil type +- drainage +- river, lake, wetland, and coast proximity +- land-use history when available + +## Layered Generation + +1. Climate engine: produces temperature, rainfall, seasonality, and weather + pressure. +2. Biome generator: assigns weighted macro/regional/local biome blends. +3. Ecology layer: chooses plant communities, wildlife, disease pressure, soil + behavior, and water availability. +4. Resource layer: places trees, shrubs, grasses, rocks, water bodies, edible + plants, fuel, fiber, and old human-made objects. +5. Human layer: derives agriculture suitability, settlement pressure, trade + value, travel difficulty, and cultural/economic implications. + +## Biome Output Shape + +Avoid hard borders. A tile should produce weighted blends such as: + +- `70% coastal scrub` +- `20% riparian woodland` +- `10% seasonal marsh` + +Those weights drive asset selection, density, color variation, seasonality, and +resource availability. + +## Persistent Natural Resources + +Every removable world object should have durable state: + +- unique tile-local resource id +- resource type +- species or object profile +- transform +- growth stage +- health +- age +- quantity remaining +- removed/depleted timestamp +- player/planted/natural origin +- respawn or regrowth policy +- last simulation timestamp + +## Removal And Regrowth Rules + +- Trees, shrubs, rocks, puddles, lakes, ruins, shelters, and large props should + not silently pop back after removal. +- Player-removed trees and shrubs stay removed unless replanted or naturally + reseeded over realistic in-game time. +- Stumps, deadwood, brush piles, and disturbed ground should be valid aftermath + states rather than instant deletion. +- Water bodies are removable only through believable terrain/drainage changes, + drought, construction, or simulation systems. +- Edible plants, grasses, brush, and fiber resources can replenish, but only on + realistic seasonal timelines and only when biome, weather, grazing, and human + use allow it. +- Player-planted resources use explicit planting/cultivation rules rather than + random respawn. + +## First Implementation Slice + +1. Add tile biome profile data assets or JSON metadata for Ground Zero. +2. Register asset sets by biome weight: terrain, trees, shrubs, grasses, rocks, + water, wildlife, reclaimed props. +3. Convert placed foliage/resource proxies into persistent resource records. +4. Add removal state and save/load durability for trees and shrubs first. +5. Add slow regrowth/reseeding simulation for grasses/shrubs/trees. +6. Extend to water bodies, edible plants, rocks, and reclaimed objects. + +## Investor Relevance + +This system should make new tiles feel recognizable without hand-sculpting each +one. A Pacific coastal tile, a prairie tile, a boreal tile, and a river valley +tile should choose different assets, resource densities, travel difficulty, and +survival pressures automatically. diff --git a/Scripts/verify_ground_zero_asset_queue.py b/Scripts/verify_ground_zero_asset_queue.py new file mode 100644 index 0000000..d818e15 --- /dev/null +++ b/Scripts/verify_ground_zero_asset_queue.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +"""Verify the Ground Zero visual asset acquisition queue stays actionable.""" + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +QUEUE = ROOT / "Docs" / "Art" / "GroundZeroAssetAcquisitionQueue.md" +BIOME_PLAN = ROOT / "Docs" / "World" / "BiomeAndNaturalResourceGenerationPlan.md" +ROADMAP = ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md" + +REQUIRED_QUEUE = [ + "Free Shrubs Pack (Ultra Realistic Wind)", + "Mediterranean Vegetation: Plant Pack I", + "temperate Vegetation: optimized Grass Library", + "Soul: Cave", + "Modular Rural House & Pine Forest Environment", + "/home/nathan/AssetStaging/Agrarian/Incoming", + "verify_asset_license_free_only.py", + "persistent world-resource record", +] + +REQUIRED_BIOME_PLAN = [ + "weighted macro/regional/local biome blends", + "Persistent Natural Resources", + "removed/depleted timestamp", + "Player-removed trees and shrubs stay removed", + "realistic seasonal timelines", + "asset sets by biome weight", +] + +REQUIRED_ROADMAP = [ + "Ground Zero asset acquisition queue", + "Tile Biome And Natural Resource Foundation", + "persistent removable natural resource records", +] + + +def require_snippets(path: Path, snippets: list[str]) -> list[str]: + if not path.exists(): + return [f"missing file: {path.relative_to(ROOT)}"] + text = path.read_text(encoding="utf-8") + return [ + f"{path.relative_to(ROOT)} missing {snippet!r}" + for snippet in snippets + if snippet not in text + ] + + +def main() -> None: + failures: list[str] = [] + failures.extend(require_snippets(QUEUE, REQUIRED_QUEUE)) + failures.extend(require_snippets(BIOME_PLAN, REQUIRED_BIOME_PLAN)) + failures.extend(require_snippets(ROADMAP, REQUIRED_ROADMAP)) + + if failures: + raise SystemExit("\n".join(failures)) + + print("Ground Zero asset queue and biome/resource plan verification complete.") + + +if __name__ == "__main__": + main()