Skip to content

Voyage: tab switching, exact solver rewrite, community strategies - #13

Open
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching
Open

Voyage: tab switching, exact solver rewrite, community strategies#13
greenbrad wants to merge 4 commits into
exApiTools:masterfrom
greenbrad:voyage-chart-tab-switching

Conversation

@greenbrad

@greenbrad greenbrad commented Aug 20, 2026

Copy link
Copy Markdown

Summary

This grew from a tab-switching fix into a larger voyage overhaul; commits are self-contained and reviewable in order.

Placement fixes

  • Automatic chart inventory tab switching during Place (both directions, at most one switch per run). Tab buttons resolve via the fixed child path [3.11.0] with a geometry-scan fallback; every click is verified (shiny-highlight before, chart visible after).
  • Rotation now compares the resulting orientation (the same formula the optimizer's match markers use) instead of the raw rotation counter, with a settle-wait and click cap — fixes intermittently unrotated or endlessly spinning pieces.

Solver

  • VoyagePlannerFast rewritten: interchangeable charts are grouped (with correct rotation translation back to concrete pieces), rotation locks honored, per-connection borders scored exactly via arm-count profiles, and reported scores come from the real scorer, so the UI always reconciles and lock bonuses no longer leak into displayed scores.
  • The slow MRV planner is removed: the fast solver was verified against it on 200 randomized puzzles (equivalence + structural grid validation, 0 failures) while being ~300x faster, which matters now that both chart tabs feed the pool.

Strategies (ported from one-more-map's solver; mod ids mapped to this game's raw names)

  • Seven curated strategies (Alc & Go with two layout variants, Anchorfield Fishing, Speedrun Strongboxes, Meatfish, Magic Ethereal, Divine Border Rares, Divine Strongboxes) with reward-weight overrides, position rules, border-resolved rules, and exact connector layouts — selectable via a dropdown in the optimizer window.
  • Keeper reservations: burn strategies hold back other strategies' fuel (rare-implicits are Divine fuel, Fracture charts are Meatfish fuel), with a protect toggle and held-back count.
  • A border- and inventory-aware suggestion line ranks strategies by rolled borders + piece readiness, with a one-click Use button and a "banking toward" hint.

UI

  • Chart-quality frames in the chart inventory (specialty/good/useful/junk, strategy-aware; keepers show violet) and a fix for labels drawing on hidden-tab charts whose rects overlap the visible tab.
  • "want:" labels on strategy target tiles with green/red fulfillment frames.
  • A strategy-objective column in the solutions list so the ranking stays legible.

Testing

  • Solver equivalence fuzzing vs the (now removed) exhaustive planner: 120 plain + 80 strategy puzzles, 0 failures, all fast-solver grids structurally validated. The fuzzing also caught and fixed a symmetry-breaking bug in the old planner along the way.
  • Tab switching, rotation, highlighting and strategy solves verified in-game.

🤖 Generated with Claude Code

Brad Green and others added 3 commits August 20, 2026 16:37
The chart inventory spans multiple tabs; AvailableCharts includes the
hidden tab's charts with overlapping rects, so placement previously
stalled on the hover check when a solution used charts from the
inactive tab.

- Resolve the tab buttons directly via the tab strip at child path
  [3.11.0] (verified against a live UI dump), with a geometry-based
  scan as fallback if a patch moves the strip.
- Verify every tab click: shiny-highlight before, target chart
  becoming visible after; failures abort cleanly and write
  voyage_ui_dump.txt for diagnostics.
- Order placement so charts on the active tab are placed first,
  switching tabs at most once per run.
- Add a Dump UI button to the optimizer window for future UI mapping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The rotation loop compared the game's rotation counter to the solver's
step count and read the chart component with no settle wait, so a
transiently-null read skipped rotation entirely, and symmetric pieces
could over-click or spin without terminating. Wait for the component,
compare the resulting orientation (Room.Path rotated by the counter,
matching the optimizer's match markers), and cap rotation clicks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dance UI

Solver:
- Rewrite VoyagePlannerFast: group interchangeable charts (with correct
  rotation translation back to concrete pieces), honor rotation locks,
  score per-connection borders exactly via arm-count profiles, and report
  scores from the real scorer (no more lock-bonus leakage).
- Remove the slow MRV planner and its time-limit/cancel UI: the fast
  solver is exact and was verified against the exhaustive planner on 200
  randomized puzzles (0 mismatches, all grids structurally validated)
  while being ~300x faster.

Strategies (ported from one-more-map's solver, mod ids mapped to this
game's raw names):
- Seven curated strategies with reward-weight overrides, position rules,
  border-resolved rules, and exact connector layouts; selectable via a
  dropdown (with per-strategy layout variants) in the optimizer window.
- Keeper reservations: burn strategies exclude other strategies' fuel
  (with a protect toggle and held-back count).
- Border- and inventory-aware strategy suggestion with readiness
  tracking and a banking hint.

UI:
- Chart-quality frames in the chart inventory (specialty/good/useful/
  junk, strategy-aware; keepers show violet), hidden-tab label fix.
- want: labels on target tiles with green/red fulfillment frames.
- Strategy objective column so ranking stays legible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@greenbrad greenbrad changed the title Voyage: automatic chart tab switching during placement Voyage: tab switching, exact solver rewrite, community strategies Aug 21, 2026
A negative objective is almost always layout deviation penalties; show
a Layout k/9 tiles-matched line (with a hint when the free pool lacks
the shapes) so the number explains itself.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant