Skip to content
notquiteogPublic

About

Optional native-compatible battle presentation for Gen1Recomp across Gen 1, 2 and 3

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

55 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Portable API3 compatibility

Requires official Gen1Recomp0.3.96 or later. Public options and registered native Gen3 settings screens, canonical encounter IDs and lifecycle ownership were audited across all eleven editions. See contracts, native verification and limits.

Party inventory redesign

Party cards now use cyan outlines, teal selection, a separate HP well and native Pokémon art. Gen 3 uses a two-column roster with matching directional navigation, crisp pixel lettering and safe-area scaling in portrait or landscape. Gen 1/2 share the new styling while retaining their roster layout. Native special workflows remain intact. See verification and scope.

0.4.3 — Safe-area command layouts

Standalone battle commands and move lists respect the public engine safe area, including viewport offsets. Frozen snapshot 6a83ecd captures the pending work at 2026-10-20 11:21:54 UTC. All 15 unit suites pass. Actual official engine 0.3.91 runs cover Yellow landscape, Crystal portrait and Emerald landscape: Fight/moves/cancel, attack/command return, and native OFF/ON. All 16 captures were inspected. Insets are a simulated mobile backend; no physical phone verification is claimed. Partner mods remain optional.

Modern Pokemon UI

Optional battle presentation for Gen1Recomp 0.3.51 and later, across Gen 1, 2 and 3. No other mod is required. Install this folder as mods/MODERN_POKEMON_UI. Use MODERN UI → MODERN BATTLE UI in the generation's own settings menu. Turning it off delegates to the native battle UI without altering saved battles.

Standalone, the mod adds palette-safe black/white Gen1/2 status frames and applies a silver Gen3 healthbox palette while retaining engine text, HP animations, status conditions, input and commands. Commands and move lists render at window resolution with native navigation, move PP/type details, and safe native fallbacks for special prompts. With Battle Art's optional public stage adapter, it enables compact BW2-inspired overhead health rails and a compact dark command console with Fight/Pokémon/Bag/Run actions. Custom roster/summary cards share pale text on charcoal; native text delegates keep white content wells and dark ink. Doubles can also opt into its own compatible renderer. Battle Art and doubles continue working without this mod. No gameplay, encounter, party or network rules are changed.

The mod also modernizes party, summary and PC/storage presentation, with shared chrome for other native menus. Dedicated bag/shop, Pokédex and trainer-card redesigns remain incomplete. Gen 1 WIDE keeps its original status HUDs. The full online battle transition/animation matrix remains unverified. Standalone commands and move lists are supported. Native move-reordering prompts remain native.

Battle cards and window-resolution commands can use the public engine safe area for notches and home indicators. Official0.3.91 desktop inset simulations passed all eleven editions in landscape and portrait, including staged cards and representative staging-OFF native commands; these are not physical phone tests.

Custom GB party/summary/storage and GBA summary screens also fit that usable area and retain native UI when it is too small. Small text preserves glyph coverage while native text delegates retain their original palette contract. See menu verification and device limits.

Optional public interface

mod.find('MODERN_POKEMON_UI').exports advertises apiVersion = 1, enabled() and battleTheme. Optional battleTheme.viewport(w,h) returns the usable x,y,width,height from the public engine SafeArea API, with full-window fallback. Consumers must check availability/version and fall back to the engine when absent, disabled or incompatible. New optional combatCardSize(ally) and combatCard(x,y,w,h,anchor,selected,data) methods supply a semantic compact layout; data carries native name, level, gender, status, HP/max HP, caught and EXP values. Optional hudColor="COLOR"|"INVERTED" selects dark/light floating header ink with a contrasting shadow; rail styling and semantic HP colors remain unchanged. Returning false retains the consumer’s original renderer. Optional commandMetrics(detail) supplies compact grid dimensions; absent providers retain the consumer’s original layout and native inputs. battleTheme.statusCard accepts an optional final {paper={r,g,b,a}} style for per-card palettes without changing the shared theme. No consumer should require this mod to run its own gameplay or world renderer.

luajit tests/native_frames_test.lua checks native fallbacks, frame adapters in all three generations, stage ownership and safe uninstallation. Rendered QA is recorded separately from these mocked adapter tests.

Rendered QA (official engine 0.3.51): Yellow, Crystal, LeafGreen and Emerald, standalone and with Battle Art and the partner mods. Native settings toggles OFF/ON reach the actual renderer. Captures were inspected. This covers wild single battles at command selection, not every attack or online/double battle.

Release 0.1.0

First public battle-presentation release. Fixes GB palette remapping, keeps the player frame within the native HUD bounds, follows Gen1 HUD shake and safely disarms retained wrappers on unload. Battle Art 1.31.1 consumes this mod's theme through the optional public API; neither package requires the other.

0.2.0 verification

Actual v0.3.51 runtime: Yellow, Crystal, Emerald standalone Fight → moves → cancel → attack → command return, plus OFF/ON; LeafGreen standalone OFF/ON. Emerald staged trainer doubles rendered all four actors/cards; staged singles and Crystal integration were also inspected. Shared text fits whole numeric labels and nicknames instead of truncating levels/HP. Icons and selection outlines keep command choices readable without relying on colour alone.

Unit checks: luajit tests/native_commands_test.lua, luajit tests/native_frames_test.lua, luajit tests/theme_test.lua. Runtime evidence: /home/admin/Projects/.scratch/modern-finish-20261005/results/. This does not certify every online or special battle sequence.

Post-release transition QA uses tools/qa/battle-transitions.lua with isolated profiles. Emerald standalone/staged and LeafGreen standalone trainer doubles pass native Party/Bag navigation and cancellation, target changes and cancellation, second-battler selection, a complete turn and return. Crystal companion doubles also passed target cancellation without PP loss and damage to either chosen foe at 2560×1440. Online transport testing remains separate from this UI evidence.

Gen1 WIDE command/move presentation is supported (QA_WIDE=1 with tools/qa/gb-battle.lua); it retains native wide healthboxes and grid navigation. The existing local ENet Gen1 doubles fixture also passed 12 complete turns with Modern UI loaded, state hashes and save-party integrity intact. That fixture starts at command selection, so it does not certify the lobby/intro path.

Latest runtime recheck

Official 0.3.52: Emerald native trainer doubles, standalone and staged, passed party/bag cancellation, target selection/cancellation, partner commands and a complete turn/return. Yellow WIDE and Crystal standalone passed ON/OFF, move selection/cancel and attack/return. Updated rendered captures were inspected. The doubles driver excludes connected physical controllers so automated input and camera checks remain deterministic. These checks do not certify every special battle or online lobby transition.

tools/qa/battle-endings.lua additionally exercises real Gen3 knockout and run transitions. Emerald staged 0.3.52 retains scenery through the closing fade, removes command controls during messages, and returns to the overworld cleanly.

Two-client room verification (0.3.52)

tools/qa/room-battle-gb.lua and room-battle-gen3.lua exercise separate host/guest processes, actual room presence/chat, invitation acceptance through the room UI, native handshake/intro, commands, targeting, damage/faints, forced reserves, outcomes and connected overworld return. No intro bypass.

Game Singles Doubles
Yellow Passed Passed
Crystal Passed Passed
Emerald Passed Passed
LeafGreen Passed Passed

All runs used private QA saves and local ENet transport; captures were inspected. This supersedes the older command-phase-only online fixture limitation for the listed paths. Internet latency/disconnects, all special moves and every regional variant remain separate coverage. Standalone Gen1 doubles retains the companion's native target menu and reduced partner sprites; projected artwork requires the optional scene renderer.

The real Crystal tests exposed duplicate empty backplates and partially dimmed cards. Modern UI now respects companion ownership; the companion takes the optional Modern theme directly and composites after native letterboxing with space for both ally cards and commands. Staged targeting/cancel/damage was rechecked at 2560×1440 after that change.

Special native-screen checks (0.3.52)

Emerald room singles additionally passed the native online item restriction and voluntary reserve switch, followed by completed battle and connected return (QA_OPTIONS=1 with room-battle-gen3.lua). Other generations have verified forced reserves; voluntary switch/item rules remain separate coverage.

LeafGreen Teachy TV battle, type-matchup and catching lessons passed their native assertions, including scripted switches, ball selection, player party/bag restoration and return to the lesson list. Modern commands now leave scripted POKé DUDE/tutorial screens native. Yellow's old-man bag and Mimic move-copy chooser were visually checked. A separate trainer SHIFT probe with companion trainer doubles disabled passed the native YES/NO and replacement-party screens; no modern controls covered either menu.

Emerald staged capture → caught Dex → nickname entry → overworld passed with clean native naming and no retained battle UI. tools/qa/capture-naming.lua uses the real BattleBridge entry, which owns field/fade restoration; calling the low-level Battle.start alone does not model an overworld encounter's return. These checks cover the listed paths, not every tutorial cancellation or evolution.

LeafGreen native Safari passed bait, rock, ball consumption and exit. The render check found a companion HUD replacing the Safari counter with a fake Pokémon card; its special-battle fallback was corrected and the rerun shows the native SAFARI BALLS counter. Native stone evolution also passed bag/party navigation, unsupported-target messaging, Nidorina/Pikachu evolution and inventory updates, then restored the party list. Scene/menu captures were inspected.

Crystal's native Cyndaquil → Quilava evolution also passed the engine timing, cry/music ordering, animated-picture and party-update assertions. Evolution frames were inspected with no battle cards or command UI leaking into the scene.

Interface modernization (unreleased)

MODERN MENU PANELS is independent of MODERN BATTLE UI. It replaces shared frame chrome while retaining native text, input, scrolling and content bounds. GB panels remain palette-safe black/white; Gen3 uses dark charcoal/emerald trim with a white content well. Turning the option off immediately delegates to the original frame functions; disabling/unloading the mod restores them.

Surface Current implementation Remaining work
Battle commands/cards Implemented and separately verified above Broader online edge cases
Pause, dialogue, confirmation panels Shared frame treatment Screen-specific layout refinements
Party roster Gen1/2 list cards and Gen3 slot cards; native icons/status/input Native-layout edge cases
Bag/shop/settings/PC submenus Shared frames where native frame helpers are used Dedicated layouts and full screen audit
Summary Semantic pages in all three generations; native portraits, fields and move controllers Special third-party page providers
PC/storage Gen1/2 semantic lists; Gen3 workspace cards with native grid and wallpaper Native action-popup styling refinements
Pokédex, trainer card Original artwork/content Dedicated modernization
Overworld HUD and optional region/quest interfaces Opt-in panel API Per-provider integration and visual audit

This is shared chrome coverage, not a completed redesign of every screen. No screen's gameplay controller is replaced.

Optional integrations may find MODERN_POKEMON_UI and use exports.interface (apiVersion 1). enabled() reports panel opt-in; drawPanel(x,y,width,height,kind) accepts local pixel coordinates and returns true when painted. Otherwise draw the generation-native frame. kind can be menu, dialogue, or a provider-specific label such as quest; content stays with its owner. The API preserves graphics state and becomes inert on unload. Neither side requires the other. Native shared-frame callers need no adapter.

Runtime 0.3.52: Yellow, Crystal, Emerald and LeafGreen pause/dialogue ON/OFF frames were rendered and inspected using tools/qa/interface-panels.lua in private profiles. Native text/control bounds were retained. Shared-panel unit tests verify generation palettes, dialogue bounds, optional API, graphics-state restoration and retained-wrapper unload behavior. Other menu layouts in the matrix above remain unverified by this slice.

Gen3 party cards (unreleased): Emerald/LeafGreen six-member rosters were inspected with healthy, fainted, poisoned and low-HP members. Native icons, nicknames, levels, HP numerals/animation and action menus remain unchanged. ON/OFF, directional selection, action menu, Summary and return/cancel passed in-engine. The dedicated renderer uses existing native slot bounds and localized Cancel/Confirm text. Ruby/Sapphire's separate native delegate now receives matching card textures and background while retaining its own animated icons, HP ticks, status markers and native navigation. Gen1/2 item selection, medicine animations, TM/HM and evolution-stone eligibility now use list cards while the native controllers retain all item use and teaching behavior.

Gen1/2 party rosters (unreleased) now use matching roomier list cards and action menus. Native controllers still own selection, summary entry/return, reordering and cancellation. Yellow/Crystal ON/OFF, six-member rosters, fainted/low-HP rows, action menus, summary return and real reordering passed with inspected renders. Native icon art and Gen1 level-visibility settings are retained.

Companion-owned grid navigation, native swap-animation frames, unusually large rosters/menus and windows below the supported size delegate to native UI. These are explicit remaining coverage, not silently claimed modern screens.

Gen1/2 item-flow verification (Gen1Recomp 0.3.75): Red and Crystal native selection, ON/OFF, teaching eligibility and animated healing passed with inspected screenshots. Crystal three-line result messages and Red stone eligibility also passed. The QA driver is tools/qa/gb-items.lua; it uses isolated QA identities and verifies rendering does not mutate party HP. Gen1/2 summaries now use semantic status/moves/trainer cards with native portraits, Crystal animation and native move swapping. Crystal PC lists, action menus, insertion markers and messages use live native state. Engine 0.3.75 Red/Crystal page navigation and return, Crystal move swapping and an actual deposit transaction passed. Native modal confirmations still use their native controller/frame surface. Egg previews hide their underlying stats. The reproducible driver is tools/qa/gb-details.lua; unit coverage checks UTF-8, egg privacy, messages, option OFF and unloading. Gen3 summaries use semantic info, skills, battle/contest moves and learning pages; egg privacy and native move controllers remain authoritative. Storage uses modern workspace cards with the original grid, wallpapers, hover effects and transactions.

Gen1 PC menus and box lists now use native items/levels with live box occupancy and bounded scrolling for the twelve-box chooser. Native confirmations remain untouched. Actual Red deposit/return and Ruby/Sapphire party ON/OFF, selection, Summary/return and cancel passed on 0.3.75 with inspected screenshots. The Ruby/Sapphire QA fixture bypasses only option-menu construction because those isolated caches lack the native options string table; native party input stays authoritative. This does not claim a new options-screen verification.

Current-engine regression: official 0.3.76 repeated Red/Crystal semantic summary + PC deposit/return and Ruby native-delegate party ON/OFF, selection/Summary/return/cancel; all passed with inspected renders.

Gen3 detail verification (official Gen1Recomp 0.3.76): Emerald, LeafGreen and Ruby passed summary ON/OFF, page navigation, native move swapping, move-learning callbacks, egg privacy and return. Native HM refusal/cancellation is tested separately. Storage passed ON/OFF and real withdrawal/return in all three families. Drivers: tools/qa/gba-summary.lua, gba-summary-hm.lua, gba-storage.lua. The Ruby test used a fresh 0.3.76 import. A narrow compatibility adapter loads the engine's own PC bar image by its manifest path when native code double-prefixes that path; the original screen-bar animation remains unchanged.

About

Optional native-compatible battle presentation for Gen1Recomp across Gen 1, 2 and 3

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages