Skip to content

Roadmap

Three waves. The ordering principle: make the code that already exists actually run before writing any more of it, and get localization in before there is content to retrofit.

flowchart LR
    W1[Wave 1<br/>Make the existing code real] --> W2[Wave 2<br/>Threat and mechanism]
    W2 --> W3[Wave 3<br/>World]

Wave 1 — make the existing code real

Roughly half the gameplay code is written and referenced from no scene or prefab. This wave is mostly wiring, plus the one architectural decision that gets more expensive every day it waits.

Water gauge fix

The tank, the fluid profile and the gauge all exist and none of them are in a scene, so the jet currently has infinite water and there is no HUD.

  • Author a default FluidProfile asset — none exists.
  • Put HoseTank on the player and assign it to HoseWaterJet, so Draw() starts cutting the jet.
  • Put FluidMeterUI on the HUD canvas, assign the tank and the player rigidbody, and confirm the slosh reads.
  • Wire HoseFluidVisuals so a profile swap retints the jet.
  • Tune the pressure economy against a real climb: capacity, drain, refill delay and restart threshold decide what traversal feels like more than anything else does.

See Hose system and Hose and water.

Internationalization

Land the localization architecture before there is dialogue to retrofit.

  • Add com.unity.localization and Addressables to the project.
  • Create String and Asset Tables for the nine core locales, Smart Strings off.
  • Build the Loc facade over ICU MessageFormat and the LocalizedTMP component.
  • Teach StoryFunctions.HandleTags and DialogueManager.ContinueStory to resolve #id: tags to keys.
  • Set up TMP fallback fonts per locale and the CSV export/import round trip.

NPC dialogue and the pump master

The whole Monologue framework is unwired, buggy in specific known ways, and missing its prefabs.

  • Fix the known bugs, starting with TriggerDialogue's 2D callbacks and the two Awake null checks that throw.
  • Author the Panel, OptionPrefab and GroupPanelPrefab prefabs.
  • Replace legacy Input.GetKeyDown polling with Input System actions and an action-map switch, so the boy stops walking mid-conversation.
  • Write the first real story: the Pump Master of Lowtown, granting the first tap, plus two or three townsfolk. See Story and animatic.
  • Confirm the dialogue → third-person camera coupling works end to end.

Hose IK polish

HoseArmAim and TrueFirstPersonBody are both written and both in no scene, which is why first person currently has the camera in the character's face and the arm ignoring the nozzle.

  • Wire HoseArmAim and TrueFirstPersonBody onto the player, with the elbow hint and hidden bones set up.
  • Wire FirstPersonBodyYaw, without which the body does not turn with the view.
  • Tune hand alignment on the nozzle grip and the reach/hold offset so the nozzle sits out of the centre of the view.
  • Check the weight blend across a mode change.

Camera zones

  • Wire PerspectiveShiftTransition with a TransitionSettings asset so mode changes are covered instead of blended.
  • Build the tutorial town as CameraZone volumes and verify the overlap counting.
  • Verify heading continuity in both directions and the free-look re-centre on exit.

See Camera system.

Wave 2 — threat and mechanism

With the loop's two halves actually running, this wave gives the trail something to do.

Beetles

The first enemy, written fresh — the framework's Mario enemies are not used.

  • Calm roaming, vision cone, and alert propagation between beetles.
  • Reaction turn and the wing display, with a duration long enough to be a warning.
  • Swoop attack, triggered by proximity or by being sprayed, knocking the player down the mountain via Player.Knockback rather than spending health.
  • Decide what spraying a beetle actually does, which is the open question that decides whether the encounter has a verb at all.

Full spec and state machine: Enemies — beetles.

Inlets, buttons and platforms

The other half of what the jet is for.

  • An IWaterTarget implementation for water inlets — nothing implements the interface yet.
  • Drive the framework's Mover / MoverButton from sustained pressure.
  • Momentary buttons with a grace period, so a long-reach hose solves "be in two places at once".
  • Taps and pumps as refill points, calling HoseTank.TopUp() and SetFluid().

See Hose and water.

Wave 3 — world

  • The intro animatic. 2D, under ninety seconds, handing off directly into the tutorial beach. Beats are drafted in Story and animatic; the antagonist question has to be answered before it can be boarded past the first act.
  • More zones. Terraces, then Mid-city, following the zones ladder. Each is a town with a pump master and a trail above it, escalating city density and water politics together.
  • Fluid variety. New FluidProfile assets granted by later pump masters, changing drain, recoil and impact rather than adding a weapon.

Cross-cutting, unscheduled

Not in a wave, but owed:

  • tools/compile-check.ps1 — the workflow depends on it and it does not exist.
  • Tests. There are none and no test assembly. Compilation is currently the entire automated gate.
  • The real character. The boy is a placeholder monkey from an asset pack.
  • Tag the player object, or accept GetComponentInParent<Player>() as the permanent detection idiom and document it as such. Right now it is an accident that every new component has to know about.