110 lines
4.6 KiB
Markdown
110 lines
4.6 KiB
Markdown
# 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.
|