Skip to content

Expose owned field-effect artwork with scoped cache providers - #302

Closed
Roxas2712 wants to merge 2 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/native-field-effect-sheets
Closed

Roxas2712 wants to merge 2 commits into
UNDERdecoded:mainfrom
Roxas2712:codex/native-field-effect-sheets

Conversation

@Roxas2712

Copy link
Copy Markdown

Compatible field rendering needs access to the actual imported effect artwork without borrowing an actor renderer or releasing the engine's cached images. This adds an owned sheet service and the resource portion of the field-effect module: native catalogue lookup, explicit cache installation, detached metadata, full-frame quads and eight-pixel front crops.

Existing imported tall-grass, surf-blob, ripple, sparkle, FRLG-bird and independent emote-strip records keep their own dimensions and frame order. Missing records stay unavailable; independent bubbles are not guessed into a combined strip. Native generated-asset overrides remain authoritative. Explicit objects.lua/RGBA providers use their original payloads without writing conversion files. Their manifests have bounded execution and typed geometry/path validation; a declared authored manifest is not silently mixed with unrelated native art.

Resources have per-mod leases and bind to the game/dataset/save/mod-set/edition cohort. Failed entry, late validation rejection, asset invalidation, replacement and teardown retire owned allocations. Preparation failures are retryable and release partial uploads. A private allocation list prevents public sheet-table mutations from transferring ownership of borrowed images. Cached sheet requests avoid repeatedly copying a manifest. The service adds no gameplay or effect clock.

Integration uses #254/#260/#265/#276 and their existing prerequisites. The #276 follow-up explicitly retires optional field providers on the public loader, including its API-2 teardown path. Edition registration remains in #183/#186/#187. The tested API-2 stack is based on upstream ed5189c and includes the preceding published transition interface; it is not a full merge of every cartridge PR.

Validation:

  • 538 focused resource/cache checks across five GBA edition fixtures.
  • Actual SDK lifecycle: 9 checks on each API 2 and API 3; failed-entry and late-validation providers cannot shadow the surviving owner. Existing sprite lifecycle checks remain green.
  • Frozen composed integration: 350/350 engine suites, 3/3 SDK suites and B30.
  • Public integration: 79/90 engine suites versus 78/89 before this addition, with the same eleven baseline failures and no new failing suite.
  • Metal and OpenGL separately: 510 checks, 290 exact frame/crop comparisons and 400 readbacks per backend. Tests include asymmetric/transparent pixels, native overrides, independent ownership, public-table mutation and explicit RGBA providers. These use synthetic artwork, not a cartridge extraction or gameplay oracle.

This implements artwork resources only. Native effect start/wait/active commands, argument stores, ground/surf/fly/heal task observations, effect phase hooks, reflections, actor collection and remaining artwork are still required. No empty animation lists, simulated effects or placeholder clocks are supplied. Complete unchanged package initialization, original effect-task parity, full renderer/shader/gameplay and mod coexistence remain unaccepted. No cartridge payload, private mod source or player data is included; QA retains the 8 GiB reserve and uses isolated identities. See docs/native-field-effect-sheets.md.

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