Skip to content

Add portable battle-party grid navigation and shared native contracts - #154

Closed
Roxas2712 wants to merge 29 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/portable-party-grid-navigation
Closed

Roxas2712 wants to merge 29 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/portable-party-grid-navigation

Conversation

@Roxas2712

@Roxas2712 Roxas2712 commented Oct 23, 2026 •

Copy link
Copy Markdown

Custom party UIs currently need to patch private input controllers to select grid navigation. This adds ui.party.grid_navigation at the native GB/Gold-family and GBA battle-party controllers, with the original opaque menu handle in API 1/2 and API 3.

Only literal true opts in. GB uses the shared row-major two-column policy with column wrapping and missing-cell handling; GBA chooses spatial neighbors from imported icon positions, with rendered-panel fallback for older caches and native Cancel behavior. Field menus, submenus, healing, scripted no-input screens and swap/HP-transfer selection keep their existing input ownership. Native confirm/cancel handlers remain in control, including GBA combined direction+A/B input.

This changes navigation only. It does not add GBA double-layout artwork, replace menu art, or bypass battle switching rules. DS party screens retain their existing controller and report this hook unsupported until their native seam is implemented.

Stack

Depends on #153 and the earlier portability series. Feature-only comparison. Earlier changes appear in the main-based diff until their prerequisites merge.

Validation

  • 4,849/4,849 native checks across every GB/GBA host version and four SDK modes. Includes native defaults, original handles, literal-true semantics, wrapper failures/removal, API-3 next caching, input ownership, scoped battle parties, empty parties, imported/fallback geometry and confirm/cancel routing.
  • One unchanged consumer runs through both real SDKs and native party controllers for Red, Yellow, Gold, FireRed and Emerald. One to six members, every occupied position/direction, plus GBA Cancel. Clean Gen1 reference: 79ea62f45fb2ea8f65d081a109431e4eb1bbdb36.
  • Four SDK modes on both the feature commit and combined fork runtime: 80 workers / 3,744 paired navigation observations.
  • Feature quick run: 106/116 engine suites; exactly the same ten baseline failing suites and failure lines as Add portable battle move-grid navigation and native controller contracts #153. SDK 3/3, B30 pass.
  • Combined runtime 1d1f202b28dabdc8d89361be7103e35c1d214de1: 161/161 engine suites, SDK 3/3, B30 pass.
  • Additional native LÖVE 11.5 tests with existing isolated imported caches pass for Red, Gold, FireRed and Emerald: create native Pokémon/battle, open the real battle-party screen, navigate through the public predicate, open/cancel the native submenu and cancel the party screen. Screenshots inspected for Gold and FireRed. These are bounded menu/startup checks, not full playthrough or pixel-parity claims.
  • Workflow passes actionlint; checker, example, fixtures and contract documentation included.

Hosted CI: all 15 PR workflows currently report action_required and await maintainer approval. The new party-grid run has zero executed jobs. Results above are local validation.

# Conflicts:
#	src/mods/Loader.lua
# Conflicts:
#	docs/modding.md
#	src/mods/Loader.lua
#	src/world/WorldAPI.lua
@Roxas2712 Roxas2712 closed this Nov 4, 2026
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