kaintuck: boat hull-damage & repair system

kaintuck: boat hull-damage & repair system

#47 in Riparion/riparion-retro — merged 2026-06-13

Summary

Adds a persistent hull-damage stat to the kaintuck flatboat that river hazards accumulate and the player must manage.

Damage has four teeth:

  • Sinks her at 100 — game over (BoatWrecked).
  • Worse hazard outcomes — a battered hull adds to every river mishap's severity drift.
  • Cargo seepage — leaks cargo each leg above a threshold.
  • Lower salvage — discounts the Natchez lumber cash-out.

Two ways to repair:

  • Boatwright at Louisville/Memphis — mends her whole for a damage-scaled fee.
  • Self-repair at any landing — the Sequence minigame (length scaled to severity) at the cost of days lying up + a moored-hazard roll. Perfect → full, slip → proportional, bomb → worse (and can sink her).

Implementation

Built on the data-driven trail-kit seams:

  • New Effect::AdjustBoatDamage with a default-empty EffectTarget hook, so fort-nash (its own effect module) is unaffected.
  • A RepairParams scenario block (boatyards, costs, seepage/drift coeffs, self-repair tuning, moored-hazard table).
  • All hull mutations funnel through one Game::adjust_boat_damage chokepoint owning the clamp + wreck-at-100 rule.

Tests

  • 11 new unit tests (damage from hazards, wreck-at-100 via effect and bomb paths, seepage, port repair + gating, self-repair perfect/partial/bomb, length scaling, salvage haircut) + a damage invariant.
  • Golden trace re-blessed for the new river-outcome damage effects + per-leg seepage (a real behavior change).
  • kaintuck 61 / fort-nash 53 / trail-kit all pass.

Incorporates fixes from a self-review pass (payout/display match, single-chokepoint wreck rule, banter-while-docked, engine-owned sequence length, units-based seepage notice, effect ordering).

🤖 Generated with Claude Code

Last updated 2026-06-14