0.1.3-experimental — 2026-05-03
Bug-fix pass on top of 0.1.2 driven by the GitHub issue tracker — Deepwood Shrine playthrough now reaches the boss-clear warp, and a class of x86-64 struct-alignment bugs that was silently breaking ~30 entity subclasses is fixed at the source.
Fixed (issue tracker)
- #2 Linux white-screen on launch. Asset loader fell back to
/proc/self/exeto locateassets/, but Kubuntu users running through a customld-linuxinterpreter saw the loader path instead of the binary's directory. Now also probes the current working directory, and the missing-asset message points at./asset_extractorinstead of "ROM fallback disabled". (port/port_asset_loader.cpp,src/common.c, commitdc31679e) - #3 Minish Village entrance vegetation missing. Gfx group 30 has destinations in EWRAM (
gMapDataTopSpecialat0x02002F00); the asset loader was writing those through the wrong resolver and the foliage tilemap stayed zeroed. Now routed throughPort_ResolveEwramPtrlike other heap-allocated game variables. (port/port_asset_loader.cpp, commit0f728182) - #6 Deepwood Shrine barrel doors render as flat colour bands + gust-jar barrel soft-lock. Two unrelated bugs in the same room. (a) HBlank-DMA wasn't honouring
DEST_FIXEDvsDEST_INCvsDEST_RELOADmodes, so the cylindrical barrel-stave affine warp showed as solid bands. (b) The middle-hatch fall-through was gated on a barrel-rotation angle window the port never reached (max 0xF0 < required 0x118 because the port stops simulating once you're aligned); PC build now bypasses the angle gate. (port/port_hdma.c,src/manager/rollingBarrelManager.c, commits107e7451,cd99dd4d) - #7 "Mysterious Shells" textbox showed 0 obtained. Number-variable substitution in textboxes wasn't being initialised on the port —
gUnk_08107BE0[1](the variable-slot pointer table) needed to point insidegTextRenderso the code that copies the rupee count into the message buffer would land in the right place. Also fixed aDecToHexBCD-encoder regression that relied on GBA Div SWI's r1 remainder side effect; replaced with plain divmod. (src/message.c,src/common.c, commit580ff28c) - #10 Drop shadows missing.
sShadowFrameTablewas never populated because the GBA original loads it via the IWRAM overlay copy (sub_080B197C..RAMFUNCS_END) that the PC port deliberately skips. Now loaded directly from ROM at first use, with IWRAM↔ROM offset translation for each region. Also fixed a draw-order bug where shadows rendered above their owning sprite. (port/port_draw.c, commits4a191f01,cd99dd4d) - #12 Boss reward chain (heart container + green warp) didn't spawn after defeating the Deepwood Shrine boss. Three layered fixes:
gUnk_additional_a_DeepwoodShrineBoss_Main(the post-defeat entity list) was a zeroed 64-byte stub inport_linked_stubs.cbecause the asset extractor doesn't index it. Now populated from ROM 0x0DF94C inPort_InitDataStubs. (commitcd99dd4d)- Root cause (the data fix alone wasn't enough): GenericEntity has a
void*-alignedscriptContextunion that pushescutsceneBeh/field_0x86to PC offset 0xB0/0xB2, but most entity subclass structs (WarpPointEntity,HeartContainerEntity,GentariCurtainEntity,bossDoorEntity,lockedDoorEntity, ~25 more) lay out aflagfield at GBA offset 0x84/0x86 without that void* trick, landing at PC 0xAE.RegisterRoomEntitywas writingspritePtrhalves viaGE_FIELDwhich always lands at 0xB0/0xB2, so subclass reads got junk — warps never armed and heart containers stayed in their hidden first-action state forever. Fix mirrors the writes to PC 0xAC/0xAE for all non-Enemy kinds, catching every affected subclass at once. (src/room.c, commitbfd80ec6)
- #14 Minish Village elder (Gentari) wouldn't open the curtain after the first dungeon. Same root cause as #12 —
GentariCurtainEntity::flagsat GBA 0x86 lands at PC 0xAE, was reading junk so the curtain animated as already-open or not at all. Universal struct-alignment fix from #12 covers it. (src/room.c, commitbfd80ec6)
Other fixes carried since 0.1.2
- Doorway crash on
HouseDoorExterior_Type3— guard against NULL script context when the spawner failed to resolve. (src/object/houseDoorExterior.c, commit6bc17ac2) - Map-hint cutscene black BG —
sub_0807C4F8now iterates native 24-byteMapDataDefinitionstructs from the asset loader;RestoreGameTaskforce-flushes the BG buffer→VRAM copy. (src/playerUtils.c,src/gameUtils.c, commits01948f13,86f1463a)
Known issues (still open)
- #4 Pulled mushroom (B1) renders as a flat tan rectangle while held. Sprite-frame extraction edge case —
gSpriteAnimations_PullableMushroomis one of ~900 animations the extractor flags asAnimation loop byte missing/Animation data has trailing bytes. Held state falls back to zeroed frame data. The unmounted mushroom renders correctly. Tracked under the broader extractor fix. - #5 Backflip / vault triggers off solid walls in Deepwood Shrine. Likely a
gMapTileTypeToActTilemismatch — a wall tile is being mapped to a vaultable act-tile (43, 44, 65, 66, 76-79). Needs world coordinates / tile type to pin down. - #8 Blue/red teleport-icon parallax sprite missing. PARALLAX_ROOM_VIEW spawns but its sprite frame may be in the same extraction-loss bucket as #4. Worth retesting with this release's struct-alignment fix.
- #11 Boss texture renders incorrectly during the fight. Likely also in the animation-extraction loss bucket; struct fix may help indirectly. Retest requested in 0.1.3.
- #13 Re-entering the boss room after defeat breaks textures. Per-room state (tilemap / palette / gfx group) may not be fully refreshed on re-entry. Needs a fresh repro on 0.1.3.
- #15 Fedora 43:
libfmt.so.12: cannot open shared objectwhen running the prebuiltasset_extractor. The xmake config setsheader_only = truefor fmt but the linker still pulls the host'slibfmt.so.12SONAME. Workaround: install fmt 12 from upstream, or build from source withpython3 build.py --usa. Build-side fix coming in 0.1.4. - Inside-the-rolling-barrel scene still renders as flat brown bands — the
BG2PAper-scanline DMA driving the cylindrical roll isn't honoured by VirtuaPPU even with the dest-mode fix above. Visible only inside the barrel; the room is otherwise playable. - Festival house facades, doorway sprite glitches, map-screen grey patches, cloud-shadow lines, Minish Woods fog, tall-grass shoes overlay — renderer-iteration deferred from 0.1.2.
- ~900 animation entries still skipped during extraction (
Animation loop byte missing/Animation data has trailing bytes). Affects boss frames, Vaati cutscene, MazaalHand, mushroom carry pose, possibly the teleport icons. - Mosaic effect on title fade and certain spell charges still kill-switched.