games/kaintuck: single-screen market for buy/sell cargo

games/kaintuck: single-screen market for buy/sell cargo

#39 in Riparion/riparion-retro — merged 2026-06-12

Why

The kaintuck buy/sell cargo flow was a three-screen drill-down that bounced the player back to the hub after every transaction, with buying and selling split into separate modes. Trading several goods meant repeatedly: enter trade mode → pick a good (separate list screen) → enter a quantity (separate number-pad screen) → confirm → dumped at the landing → start over. "Too much clicking back and forth."

What

Collapse the three screens into one touch-first, actionable market table. Tap a good's row to reveal an inline quantity entry plus All/Buy/Sell; transact in place, stay on the table, and trade as many goods as you like before one Done returns to the hub.

  • Mode::Trade { buying: bool }{ can_buy, can_sell } so the single screen serves all three trading spots: Pittsburgh boatyard (buy only), river towns (buy + sell), Natchez (sell only).
  • ui/screens/trade.rs rewritten as the market table: column headers (CARGO/BUY/SELL/ABRD), tappable rows, inline qty with live cost, disabled states for can't-afford / nothing-aboard, sticky Done.
  • Call-site updates in town.rs (two SELL/BUY buttons → one TRADE ⇄), pittsburgh.rs, natchez.rs, app.rs.
  • Engine buy/sell/pricing unchanged — golden trace stays stable.
  • Regenerated assets/tailwind.css for new width utilities; patch bump to 0.1.13.

Verification

  • cargo test -p kaintuck — 43 pass, golden_trace_is_stable green.
  • Browser-driven (playwright): Pittsburgh BUY CARGO hides Sell and updates hold 0→4 with correct Buy $8; Done returns to LOAD THE BOAT. Injected town save → THE MARKET shows both price columns + Buy and Sell; selling drops a good's hold 4→0.

🤖 Generated with Claude Code

Last updated 2026-06-13