2026-07-27 03:30:03 -04:00
|
|
|
# World authoring
|
|
|
|
|
|
2026-08-08 14:23:27 -04:00
|
|
|
The active test world uses the canonical starter island through
|
2026-07-27 03:30:03 -04:00
|
|
|
`world/regions/starter_island_region.tscn`.
|
|
|
|
|
|
|
|
|
|
## Active composition
|
|
|
|
|
|
|
|
|
|
`world/test_world.tscn` owns the gameplay-wide environment, sun, world bounds,
|
|
|
|
|
and below-world failsafe. `StarterIslandRegion` owns the placed island content:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
StarterIslandRegion
|
|
|
|
|
├── Terrain
|
|
|
|
|
│ ├── Visual
|
|
|
|
|
│ └── Collision
|
|
|
|
|
├── WaterBodies
|
|
|
|
|
│ ├── Pond
|
|
|
|
|
│ │ ├── VisualWater
|
|
|
|
|
│ │ ├── FishingRegion
|
|
|
|
|
│ │ └── RecoveryRegion
|
|
|
|
|
│ └── Ocean
|
|
|
|
|
│ ├── VisualWater
|
|
|
|
|
│ ├── FishingRegions
|
|
|
|
|
│ └── RecoveryRegions
|
|
|
|
|
├── PlayerSpawn
|
|
|
|
|
├── SafeRespawns
|
|
|
|
|
└── Interactables
|
|
|
|
|
├── FishingShopWorld
|
|
|
|
|
└── PelicanCoolerPerch
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Move the meaningful feature root rather than one of its implementation
|
|
|
|
|
children. Child transforms are local offsets owned by that feature.
|
|
|
|
|
|
|
|
|
|
## Water bodies
|
|
|
|
|
|
2026-07-31 16:05:44 -04:00
|
|
|
Every fishable region must author its `water_type` explicitly. The starter pond
|
|
|
|
|
is `FRESH_WATER`; the starter coast is `SALT_WATER`. Fish species use the same
|
|
|
|
|
central type definition through an allowed-water-type bitmask, so pool contents
|
|
|
|
|
and authoritative selection are both validated against the region. Do not infer
|
|
|
|
|
habitat from node names, pool filenames, coordinates, or water height.
|
|
|
|
|
|
2026-07-27 03:30:03 -04:00
|
|
|
Select `WaterBodies/Pond` to move or resize the pond. Its transform is the
|
|
|
|
|
authoritative surface position. The `surface_size`, fishing padding, recovery
|
|
|
|
|
padding, and recovery depth properties update the visible water and gameplay
|
|
|
|
|
coverage together. Fishing and recovery derive the surface height from the
|
|
|
|
|
owned surface transform.
|
|
|
|
|
|
|
|
|
|
Select `WaterBodies/Ocean` to move the surrounding water as one feature. Its
|
|
|
|
|
visual, fishing lobes, and recovery lobes use local transforms beneath the
|
|
|
|
|
ocean root. The existing multi-lobe footprint remains intentionally explicit;
|
|
|
|
|
changing that footprint still requires editing its owned lobe children.
|
|
|
|
|
|
|
|
|
|
## Placed features
|
|
|
|
|
|
|
|
|
|
- `PlayerSpawn` is the authoritative initial player transform. Its rotation
|
|
|
|
|
controls initial facing.
|
|
|
|
|
- Each marker under `SafeRespawns` is an authoritative recovery destination.
|
|
|
|
|
Recovery preserves the player's current facing; marker rotation is
|
|
|
|
|
intentionally not applied.
|
|
|
|
|
- `Interactables/FishingShopWorld` owns the shop visual, collision,
|
|
|
|
|
interaction area, prompt, and entrance marker.
|
|
|
|
|
- `Interactables/PelicanCoolerPerch` owns the complete Pelican landmark visual.
|
|
|
|
|
Pelican selling remains a Cooler action and has no world interaction area.
|
|
|
|
|
- `Terrain` owns both the imported visual and generated terrain collision.
|
|
|
|
|
- `BelowWorldFailsafe/Coverage` exposes the below-world recovery coverage as a
|
|
|
|
|
saved collision shape in `world/test_world.tscn`.
|
|
|
|
|
|
|
|
|
|
The active `Environment`, `Sun`, and external starter-island grass material
|
|
|
|
|
remain directly editable through the Inspector. Their tuning is not recreated
|
|
|
|
|
by runtime scripts.
|
|
|
|
|
|
|
|
|
|
## Reusable world props
|
|
|
|
|
|
|
|
|
|
Use a single placed `WorldProp` root for trees, rocks, buildings, benches,
|
|
|
|
|
signs, vegetation, and similar landmarks:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
WorldProp
|
|
|
|
|
├── Visual
|
|
|
|
|
└── Collision
|
|
|
|
|
└── CollisionShape3D
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Add optional interaction areas, labels, and markers beneath the same root.
|
|
|
|
|
Instance imported GLB visuals beneath `Visual`; keep gameplay collision
|
|
|
|
|
Godot-owned beneath `Collision`. Place and duplicate the complete prop scene,
|
|
|
|
|
not its visual child.
|
|
|
|
|
|
|
|
|
|
Author reusable assets at scale `(1, 1, 1)`. Uniform root scaling is acceptable
|
|
|
|
|
for provisional props when visual and collision scale together. Avoid
|
|
|
|
|
non-uniform root scaling because it can deform collision and imported geometry
|
|
|
|
|
unpredictably. Make mutable per-instance shapes, meshes, and materials local to
|
|
|
|
|
the scene so editing one prop does not change unrelated instances.
|
2026-07-31 16:05:44 -04:00
|
|
|
|
|
|
|
|
## Shoreline tide ribbons
|
|
|
|
|
|
|
|
|
|
Each map that uses generated tide ribbons owns a `ShorelineRibbonBaker` node and
|
|
|
|
|
one `ShorelineRibbonConfig` resource per water body. Each fishable water body
|
|
|
|
|
declares the shared `WaterType` value used by fishing, Logbook classification,
|
|
|
|
|
and shoreline presentation. A configuration designates
|
|
|
|
|
only the static terrain `CollisionShape3D` or `MeshInstance3D` to intersect, the
|
|
|
|
|
water height, explicit generation bounds, water-facing reference, optional
|
|
|
|
|
smoothing overrides, and the generated `.tres` output path. Props, docks,
|
|
|
|
|
players, bobbers, and gameplay areas are not scanned unless a map author
|
|
|
|
|
explicitly selects one as the terrain source. The baker reports every configured
|
|
|
|
|
body but intentionally generates ribbons only for `SALT_WATER`; freshwater uses
|
|
|
|
|
the shared depth-tinted shader without tide marks or an advancing wash.
|
|
|
|
|
|
|
|
|
|
To rebuild in the editor, select the map's `ShorelineRibbonBaker` node and press
|
|
|
|
|
**Rebuild Shoreline Ribbons** in the Inspector. The equivalent validation/CI
|
|
|
|
|
command for the starter map is:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
godot --headless --path . --script scripts/bake_shoreline_ribbons.gd
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Set the baker's `debug_path_stage` to Raw, Simplified, or Smoothed before an
|
|
|
|
|
editor rebuild to compare the extraction stages. Keep it Off in the finished
|
|
|
|
|
scene; the temporary editor-only line preview is never saved as gameplay data.
|
|
|
|
|
|
|
|
|
|
Rebuild a saltwater ribbon only when its terrain at the waterline, configured
|
|
|
|
|
water height, or generation bounds change. Freshwater terrain changes do not
|
|
|
|
|
require a ribbon rebuild because freshwater bodies have no ribbon. Adding or
|
|
|
|
|
moving unrelated props, fishing areas, recovery volumes, or other gameplay
|
|
|
|
|
nodes does not require a rebuild. Normal gameplay loads the committed generated
|
|
|
|
|
saltwater meshes and never runs the extraction step.
|