Add modular holdover fishing world
This commit is contained in:
parent
6a5923fdb8
commit
a91f2b9825
17 changed files with 1354 additions and 191 deletions
110
world/README-WORLD-GRAYBOX.md
Normal file
110
world/README-WORLD-GRAYBOX.md
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
# NETFISHING holdover world
|
||||
|
||||
`world/test_world.tscn` remains the active world. It composes the complete
|
||||
temporary map, lighting, paths, bounds, and six region scenes. The practical
|
||||
footprint is approximately 180 × 220 world units, including the coastal water
|
||||
and outer collision bounds.
|
||||
|
||||
## Composition
|
||||
|
||||
```text
|
||||
TestWorld
|
||||
├── Environment
|
||||
├── SeabedBoundary
|
||||
├── Regions
|
||||
│ ├── VillageRegion (0, 0, 15)
|
||||
│ ├── StarterPondRegion (-42, 0, 15)
|
||||
│ ├── RiverRegion (0, 0, -40)
|
||||
│ ├── LakeRegion (53, 0, -25)
|
||||
│ ├── MarshRegion (56, 0, 38)
|
||||
│ └── CoastalDockRegion (0, 0, -103)
|
||||
├── Connectors
|
||||
├── Safety
|
||||
└── WorldBounds
|
||||
```
|
||||
|
||||
Every region uses the same ownership groups:
|
||||
|
||||
- `Visuals`: replaceable graybox meshes and labels.
|
||||
- `StaticCollision`: simple gameplay collision paired with the visuals.
|
||||
- `FishingWater`: explicit `FishableWaterRegion` children.
|
||||
- `WaterRecovery`: explicit `PlayerWaterTrigger` children.
|
||||
- `SafeRespawns`: known-safe `SafeRespawnPoint` markers.
|
||||
- `Interactables`: region-owned services, currently used by the village.
|
||||
|
||||
`GrayboxRegion` only exposes those explicit child groups plus a stable region
|
||||
ID. `TestWorld` is the aggregation boundary; regions do not select fish,
|
||||
control recovery, own progression, register globally, or stream themselves.
|
||||
|
||||
## Safe editing
|
||||
|
||||
Move a whole region by moving its region root under `TestWorld/Regions`. This
|
||||
keeps visuals, collision, water, recovery triggers, safe points, and
|
||||
interactables synchronized. Moving only a visual mesh does not move collision
|
||||
or gameplay volumes, so update its paired collision intentionally when editing
|
||||
inside a region.
|
||||
|
||||
Safe designer targets:
|
||||
|
||||
- Entire region roots under `TestWorld/Regions`
|
||||
- Children of `Visuals`, together with paired `StaticCollision`
|
||||
- Safe-respawn marker transforms
|
||||
- Landmark and label transforms
|
||||
- Connector transforms and their complete StaticBody children
|
||||
|
||||
Structural land and route blocks extend from the common walkable elevation at
|
||||
`y=0` down to approximately `y=-6`. Adjacent blocks meet at deliberate shared
|
||||
edges instead of stacking collision surfaces. Decorative plaza/path color is
|
||||
non-colliding and sits just above the authoritative ground.
|
||||
|
||||
Gameplay-critical children that must stay aligned:
|
||||
|
||||
- A water plane, its `FishingWater` Area3D, and its `WaterRecovery` Area3D
|
||||
- A dock or bank mesh and its paired shape in `StaticCollision`
|
||||
- Safe points and the land/dock they target
|
||||
- The Fishing Shop visual root and `FishingShopInteraction`
|
||||
|
||||
Rename-sensitive paths:
|
||||
|
||||
- `TestWorld/Regions`
|
||||
- `VillageRegion/Interactables/FishingShopWorld/FishingShopInteraction`
|
||||
- `VillageRegion/Interactables/PelicanCoolerPerch`
|
||||
- Each region's `FishingWater`, `WaterRecovery`, and `SafeRespawns` roots,
|
||||
unless its exported NodePaths are updated at the same time
|
||||
|
||||
## Adding water and recovery
|
||||
|
||||
1. Add a `FishableWaterRegion` Area3D under the region's `FishingWater`.
|
||||
2. Give it collision layer 4, a clear location tag, and an explicit fish pool.
|
||||
3. Add a matching `PlayerWaterTrigger` under `WaterRecovery`.
|
||||
4. Give the trigger collision layer 8, mask 2, matching horizontal coverage,
|
||||
and the correct `surface_height`.
|
||||
5. Place two or more safe respawns on nearby broad walkable land.
|
||||
6. Validate casting, shoreline collision, recovery entry, and nearest-point
|
||||
selection from every side.
|
||||
|
||||
`TestWorld/Safety/BelowWorldFailsafe` is a temporary whole-map recovery net.
|
||||
It catches seam and below-world falls that escape normal regional water
|
||||
coverage. It supplements rather than replaces the five region-local triggers;
|
||||
the recovery controller still permits only one recovery sequence at a time.
|
||||
|
||||
## Services
|
||||
|
||||
The Fishing Shop is an instanced scene at the east side of the village plaza.
|
||||
Move the complete `FishingShopWorld` instance, not only its booth meshes.
|
||||
|
||||
The Pelican perch is decorative signage, not an interaction NPC. Its sign says
|
||||
“Sell to Pelicans from the Cooler”; the existing 0.25× Pelican sale remains
|
||||
available from the Cooler anywhere in the world. Moving or removing the
|
||||
decorative perch does not change that service.
|
||||
|
||||
## Temporary by design
|
||||
|
||||
All terrain, buildings, docks, reeds, landmarks, signage, palette, and lighting
|
||||
are primitive holdover presentation. A future artist or level designer can
|
||||
replace `Visuals` and paired static collision without changing fishing,
|
||||
recovery, shop, save, economy, or player progression code. Region IDs and
|
||||
gameplay volume ownership should remain stable while visuals are replaced.
|
||||
|
||||
Water surfaces sit near `y=0.2`; the shared graybox seabed is near `y=-6`.
|
||||
There is no structural walkable layer directly below the fishable surfaces.
|
||||
Loading…
Add table
Add a link
Reference in a new issue