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