Skip to content

Releases: Darkaxt/DualScreenDex

DualDex 1.1.0-rc.9

DualDex 1.1.0-rc.9 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 22:06

DualDex 1.1.0-rc.9

RC9 corrects Atlas location identity and makes the local-map switch available for structurally decoded maps that do not have wild encounters.

Atlas and local maps

  • Complete, structurally valid Gen III gMapGroups catalogs are retained instead of reducing them to encounter-bearing maps. Sparse hacks keep the existing encounter-keyed fail-closed fallback.
  • Modern Emerald v3.5 now reconstructs 557/557 local maps. Its live map 0x0009 resolves as Littleroot Town with an exact 320×320 ROM-derived raster.
  • Gen III local rendering supports all 16 hardware-addressable BG palette banks. This covers tiles that use dynamically loaded upper palette slots without weakening tileset or raster validation.
  • Atlas no longer substitutes the first revealed marker when the live location is unavailable, eliminating the appearance that the player occupies two places.
  • The Local/Atlas shortcut appears whenever the current decoded map has a local asset. Area Pokédex remains disabled for locations without encounters.

Presentation

  • Atlas header actions now place Area Pokédex before Settings, matching the Pokédex view.
  • The welcome screen now says Choose a Pokémon game to begin. and removes implementation-oriented storage commentary.

Upgrade behavior

  • Catalog schema revision advances from 14 to 15. RC8-derived catalogs rebuild once; settings, discovery knowledge, and SaveRAM snapshots remain intact.

Real-ROM verification

  • Official Ruby, Sapphire, Emerald, FireRed, LeafGreen, and Modern Emerald v3.5 retained exact Atlas and complete local-map catalogs: 394/394/518/425/425/557 maps.
  • Modern Emerald v3.5 retained its exact Atlas raster and resolves live base 0x0009 as Littleroot Town with the frozen local-map raster hash.
  • The 557-map catalog survived SQLite write/reopen and the Littleroot local PNG was served byte-for-byte by the production loopback API.
  • Sparse Gen III map-group and Atlas resolver controls remained green.

DualDex 1.1.0-rc.8

DualDex 1.1.0-rc.8 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 20:49

DualDex 1.1.0-rc.8

RC8 preserves the RC7 interface and fixes an upgrade-only catalog-cache defect found on a real Modern Emerald installation.

Catalog rebuild

  • Catalog parser cache revision advances from 13 to 14.
  • Revision-13 SQLite catalogs are rebuilt once instead of being accepted after newer Atlas and local-map parsing was integrated.
  • Settings, discovery knowledge, and persisted SaveRAM snapshots are preserved; only the derived ROM catalog is regenerated.
  • The first RC8 load is therefore expected to show the full module progress sequence. Later launches can reopen the rebuilt catalog quickly.

Real-ROM verification

  • The retained RC7 catalog was observed through the live loopback API with 428 species and 231 encounter areas but zero world maps, despite advertising the map capability.
  • A fresh parse of Modern Emerald v3.5 reconstructed the exact normalized Atlas raster.
  • The rebuilt catalog survived SQLite persistence/reopen and served the expected map PNG through the loopback API.

RC8 includes the RC7 loading-progress and Atlas presentation changes unchanged.

DualDex 1.1.0-rc.7

DualDex 1.1.0-rc.7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 20:24

DualDex 1.1.0-rc.7

RC7 preserves every RC4 parser and runtime feature while polishing the startup and Atlas presentation.

Loading progress

  • Startup hides the ROM and RetroArch setup actions while bootstrap or catalog loading is active.
  • The progress label follows the real active module: ROM identity, core catalog, sprites and entries, evolutions and areas, extended data, or saved catalog.
  • Determinate progress uses the existing completed/total unit counts. Bootstrap remains honestly indeterminate until those counts exist.
  • Recovery actions return when loading stops without a catalog.

Atlas polish

  • Removed the diagnostic-looking world-map and ROM-family title from the Atlas header.
  • Selected location context stays on the left as CURRENT or MAP POINT.
  • Settings and Area Pokédex use the same right-header action pattern as the Pokédex view.
  • A fixed warm-brown map border travels with the raster so its edge remains visually stable while panning.
  • The local-map shortcut remains the bottom-left A/L control and appears only when the live area has a parsed local-map asset.

No ROM identity, parser, catalog, SQLite, map reconstruction, fog, gesture, WRAM, or SaveRAM contract changed.

DualDex 1.1.0-rc.4-hotfix.2

Pre-release

Choose a tag to compare

DualDex 1.1.0-rc.4-hotfix.2

This hotfix preserves every RC4 feature and fixes the remaining Android heap crash during a cold ROM catalog parse.

Fixed

  • THUMB ability analysis no longer materializes a complete post-dominator set for every decoded instruction.
  • Control-flow joins now use a linear-memory immediate-dominator calculation over the reversed control-flow graph.
  • Incomplete graphs and paths that cannot reach a decoded exit remain fail-closed, withholding only the unproven mechanic.
  • Warm launches continue reopening the materialized SQLite catalog without repeating the ROM-wide cold parse.

Root cause

The retained Android crash occurred on dualdex-parser at the 256 MiB heap limit inside BattleRoleProvenance.immediatePostDominator. A 4,096-instruction proof could allocate millions of boxed graph-set entries even after background ROM indexing had been bounded in hotfix 1.

No ROM identity rules, catalog tables, map reconstruction, WRAM behavior, or game-facing controls were changed.

DualDex 1.1.0-rc.4-hotfix.1

Pre-release

Choose a tag to compare

DualDex 1.1.0-rc.4-hotfix.1

This hotfix preserves every RC4 feature and fixes an Android heap crash observed while a ROM catalog and the automatic shared-storage ROM index were loading concurrently.

Fixed

  • ROM-library indexing now streams CRC32 and SHA-256 while retaining only the cartridge header and a 64 KiB buffer.
  • Direct GB, GBC, and GBA files preserve their exact identity and platform classification.
  • Single-ROM ZIP sources preserve their archive-entry identity and multiple-ROM archives still fail closed.
  • The fix removes whole-ROM allocations from the background storage-index thread; catalog parsing and local-map construction remain unchanged.

Evidence

  • The retained Android crash was an exact OutOfMemoryError on dualdex-storage-index at the 256 MiB heap limit.
  • The streaming path reproduces official Emerald SHA-256 a9dec84dfe7f62ab2220bafaef7479da0929d066ece16a6885f6226db19085af and CRC32 1F1C08FB from the complete 16 MiB ROM.
  • The signed hotfix is installed and revalidated on the affected AYN Thor through ADB after publication.

No ROM parser rules, catalog tables, map reconstruction, WRAM behavior, or game-facing controls were changed.

DualDex 1.1.0-rc.4

DualDex 1.1.0-rc.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 19:09

DualDex 1.1.0-rc.4

RC4 completes the fourth staged part of DualDex 1.1: presentation and navigation for the normalized read-only player state, plus convergence of the local world-map work.

Trainer Card

  • Adds a live Trainer Card with name, public ID, money, play time, Pokédex totals, card stars, and eight stable badge positions.
  • Uses ROM-derived portraits and badges when independently available; missing assets fall back per element without hiding valid text or progress.
  • Withholds the entire shortcut when no safe Trainer record exists.

Party

  • Adds six stable Party slots with nickname, species, level, HP, status, types, nature, ability, experience progress, stats, and four move/PP rows.
  • Reuses existing Pokédex, move, and ability details, returning to the same selected Party slot afterward.
  • Keeps the player's owned Party visible in Organic, Discovered, and Hidden knowledge modes. Opponent moves remain observation-gated.
  • Suppresses unresolved IDs and unsupported fields instead of exposing raw numeric placeholders.

Compact, capability-driven switching

  • Trainer, Party, Map, and Settings share the existing Pokédex header; RC4 adds no extra toolbar or navigation row.
  • Trainer, Party, and Map actions appear only when the current catalog/session publishes usable data.
  • Back navigation returns to the exact prior screen, while Map continues into the existing Area Pokédex flow.

Local world maps

  • Includes the committed local-map work converged from master: normalized maps, persistent discovered-area fog, exact multi-area navigation, Pokémon area insets, and fail-closed optional map resolution.
  • Preserves the compact map rail, semantic icons, one-pointer pan, midpoint-anchored two-pointer pinch, and fully black outer fog edges.

Deliberate boundary of RC4

  • Display selection and recovery remain Stage 5.
  • Bag and battle-UI snapshots remain internal for later presentation work.
  • Emulator memory access remains read-only. RC4 adds no input injection, memory writes, cheats, or game commands.

Device installation and validation remain manual.

DualDex 1.1.0-rc.3

DualDex 1.1.0-rc.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 18:29

DualDex 1.1.0-rc.3

RC3 completes the third staged part of the DualDex 1.1 player-state foundation.

One coherent read-only live snapshot

  • Reads the ROM-resolved SaveBlock pointer globals first, then requests only the validated SaveBlock, Party, lifecycle, target, encounter-kind, and battle windows for that sample.
  • Re-reads pointers for every sample, so a relocated SaveBlock is replaced rather than reused. An invalid SaveBlock2 pointer withholds Trainer and Bag while leaving independently valid location and Party data available.
  • Publishes independent Trainer, location, Party, Bag, battle-presence, and battle-UI results. A validated party count of zero authoritatively clears the live party.
  • Keeps opponent moves behind the existing observation gate; the new snapshot does not expose raw enemy move slots.

Deterministic live-over-SaveRAM authority

  • Valid live Trainer and Party state supersedes stale SaveRAM state.
  • Missing or invalid live Trainer data retains a valid saved Trainer.
  • A validated empty live party clears Team consistently in both normalized state and Pokédex filtering.
  • Disconnect restores the SaveRAM fallback, while changing ROM identity drops all live state from the previous title.

Deliberate boundary of RC3

  • Trainer Card and detailed Party presentation pages are Stage 4. RC3 publishes their normalized internal state but does not add the screens yet.
  • Bag and battle-UI results remain internal for later presentation work.
  • Display selection/recovery is unchanged and remains a later 1.1 stage.
  • All emulator memory access remains read-only. RC3 adds no input injection, memory writes, cheats, or game commands.

Device installation and validation remain manual.

DualDex 1.1.0-rc.2

DualDex 1.1.0-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 17:35

DualDex 1.1.0-rc.2

This second 1.1 candidate adds the ROM-derived runtime and artwork layer needed by the future Trainer Card and detailed Party screens. It preserves the complete DualDex 1.0 baseline and the Stage 1 normalized decoding contract from RC1.

Stage 2: official Emerald runtime descriptors and Trainer artwork

  • Resolves the official Emerald SaveBlock1 and SaveBlock2 pointer globals from compiled ROM consumers and publishes a typed Trainer Card and Bag ABI, including name, gender, Trainer ID, play time, money, badge flags, encryption key, and five bag pockets.
  • Publishes typed live Party and battle-menu addresses for official Emerald and preserves the separately verified Modern Emerald layout. These are immutable catalog descriptors; RC2 still performs no emulator-memory writes and sends no game commands.
  • Decodes the official Emerald Brendan and May 64×64 Trainer portraits plus all eight 16×16 Hoenn badge images from ROM-owned sprite, palette, and loader roles.
  • Persists the normalized Trainer assets in schema 12 and serves only catalog-owned assets through the loopback API with immutable caching and fail-closed missing/traversal handling.
  • Keeps the runtime descriptor and artwork sections independently optional. A missing or ambiguous optional role leaves the base Pokédex usable instead of inventing a fallback.

Deliberate boundary of RC2

  • Trainer Card, detailed Party, and Bag presentation pages are later 1.1 stages. RC2 supplies their verified descriptors and artwork but does not claim those screens yet.
  • Live player snapshots, post-battle refresh, and secondary-display selection/recovery remain deferred.
  • Trainer Card stars remain unavailable until each condition is mapped from source-backed game state.

Existing compatibility retained

  • The stable baseline remains 50/50 selected first-corpus ROMs, 50/50 complete evolution catalogs, 26/50 complete normalized world-map catalogs, and source-backed official Generation III ability behavior.
  • Unsupported or ambiguous optional data continues to fail closed while the normal Pokédex remains available.

DualDex 1.1.0-rc.11

DualDex 1.1.0-rc.11 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 23:38

DualDex 1.1.0-rc.11

RC11 repairs two user-visible RC10 regressions without changing the parser or catalog compatibility baseline.

Live game clock

  • Live clock windows are now read and published even when a validated Generation III runtime layout does not expose dynamic SaveBlock pointers.
  • The fix is exercised against the same pointerless layout shape used by Modern Emerald: a source-derived IWRAM clock window produces the validated in-game HH:MM value without using Android wall time.
  • Pointer-driven unified live snapshots and checksum-validated party reads retain their existing behavior.

Pokédex header

  • The root Pokédex title now keeps its compact left inset when Trainer, Party, Map, and Settings actions are present.
  • Non-root headers continue reserving the normal back-button column.

Verification boundary

  • Read-only ADB evidence on RC10 confirmed that Modern Emerald exposed valid clock bytes while the app state remained null, and that the generic action-header CSS won the cascade over the root rule.
  • Focused coordinator, unified live-state, Pokédex production UI, and CSS regression suites cover the repairs.
  • The signed APK is built and signed only by the protected GitHub release workflow. It is not installed or launched on a device by this release task; device acceptance remains with the user.

DualDex 1.1.0-rc.10

DualDex 1.1.0-rc.10 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 23:15

DualDex 1.1.0-rc.10

RC10 makes Atlas navigation and loading clearer and introduces a validated live in-game clock path.

Live game clock

  • The upper toolbar displays a zero-padded HH:MM value when the parser and live-memory reader can validate the running game's clock layout.
  • Modern Emerald v3.5 is source- and ROM-proven through compiled clock consumers; production does not select it by ROM name, SHA, symbols, or a fixed runtime address.
  • Missing, ambiguous, unavailable, or invalid clock values stay hidden. DualDex never substitutes Android wall time or trainer play time.
  • Official Gen I–III clock coverage will be audited after RC10. Local-map rendering remains daytime-only in this candidate; the live clock is the prerequisite for a later day/night presentation stage.

Atlas and Pokédex navigation

  • The Atlas Pokédex button is always a global Pokédex shortcut. It returns to the last-used Pokédex filter instead of requiring encounter data or opening an Area-filter side path.
  • Revealed Atlas locations use compact cyan squares. The live local-player position remains a distinct circular marker.
  • The live game clock is geometrically centered in the upper toolbar while the Pokédex title remains left-aligned.

Loading presentation

  • Idle guidance is hidden while module-aware loading progress is active, leaving the current module label and progress bar as the loading state.

Upgrade behavior

  • Catalog schema revision advances from 15 to 16. RC9-derived catalogs rebuild once; settings, discovery knowledge, and SaveRAM snapshots remain intact.

Verification boundary

  • Parser, live-memory, companion-state, API, web navigation, loading, marker, and production web-build checks are part of the RC10 gate.
  • The signed APK is built and signed only by the protected GitHub release workflow. It is not installed or launched on a device by this release task; device acceptance remains with the user.