0.1.4-experimental — 2026-05-03
Hyrule Town + South Hyrule field playthrough fixes, driven by a live GDB-under-the-game session against the issue tracker. Three crashes and one stuck-state bug closed; CI build stability improvements; matheo upstream merged.
Fixed (issue tracker)
- #16 Hyrule Town kinstone-bag crash chain. Five layered bugs all on the kinstone-fusion path that compound after picking up the bag: (1)
gUnk_08001A7CandgUnk_08001DCCare packed 4-byte GBA-pointer tables but were declared asT*[]soarr[idx]read 8 bytes on x86-64 → garbage pointer → SIGSEGV the moment a kinstone fuser scripted up; (2)(u8*)(fuserProgress + (u32)fuserData)truncated a 64-bit pointer incommon.c::GetFusionToOffer; (3)TextDispEnquiry's post-A_BUTTON modulo divided by zero on x86 (ARM silently returns garbage) after MemClear zeroedgMessageChoices.choiceCount; (4)kinstoneMenu.c::sub_080A4418wrote toDMA3->sourceAddress(raw GBA hardware register address 0x040000D4, unmapped on PC); (5)KinstoneMenu_080A4468dereferencedgPossibleInteraction.currentObjectwithout checking it pointed insidecandidates[]. Fixed each + addedPort_PackedRomEntry()helper for the ~5 packed-pointer-table call sites. (commitb825b5fd) - #19 South Hyrule field loading-zone crash. Two bugs on the spear moblin: (a)
gUnk_080CC944was the same packed-pointer-table pattern as #16, handing out garbage Hitbox pointers on x86-64; (b)definition->ptr.hitboxlives in read-only mmap'd ROM (gRomData), but the spear moblin's action routines writehitbox->offset_x/y/width/heightevery frame. Allocate a mutableHitbox3Dcopy at init (AllocMutableHitbox()wouldzFreethe const ROM pointer, so do it manually). (commitc749c609) - #20 Peahat (and other gust-jar-killable enemies) corpse never despawns.
GetNextFunction()returned 5 (OnGrabbed) for any entity withgustJarState & 4set, before thehealth == 0check. When a peahat is killed by gust jar,Peahat_OnGrabbed_Subaction5setshealth=0butgj=0x04stays set until ENT_COLLIDE toggles, which doesn't happen in that subaction's else branch. Result: dead-while-grabbed enemies loop in OnGrabbed forever — corpse stays, no death animation. PC port now prefers thehealth==0dispatch so dead-while-grabbed enemies flow into GenericDeath → DEATH_FX → DeleteThisEntity. (commitc708678a)
Build / CI
- Linux runner pinned to
ubuntu-22.04(glibc 2.35) so the prebuilt tarball runs on Nobara 43, Fedora 43, Kubuntu 25.10, and any other distro that lags behind the Arch host's glibc 2.43. Addresses #2's class plus #17. (commits91b5c9fd,a5f546da) - Pre-generated USA
map_offsets.h+gfx_offsets.hcommitted under a.gitignoreexception so CI can build without needing a private ROM repository. Dropspython build.pyfrom the workflow in favour of directxmake build tmc_pc+xmake build asset_extractor, which don't need a ROM at compile time. (commitfb36e928) - Merged matheo/master twice today: ubuntu fmt12 build fix (#15 root cause); update-check infrastructure (
port/port_update_check.{c,h}); Minish Woods Ezlo fight + lilypad rail data fallbacks; bootstrap-based asset management (port/port_asset_bootstrap.cpp); affineSet cleanup. (commitsb5cf8067,d37edeb3)
Implicit fixes confirmed
- #23 Broken map (grey tiles) — works locally on the post-merge branch; one of the struct-alignment / BG-flush fixes resolved it. Awaiting Proton/Bazzite retest on this tarball.
Known issues (still open)
- #4 Pulled mushroom, #5 backflip at walls, #8 blue/red teleport icons, #9 Steam Deck packages, #11 boss asset rendering (deferred to next sprite-extraction pass).
- #21 Link's house glitched doors — likely same class as the door-priority issue carried from 0.1.2.
- #22 BGM doesn't mute on item-get — audio priority/ducking, same area as the festival-house BGM-reset fix in 0.1.2 but with a different interaction.
- #24 Tall-grass shoes overlay — known carry-forward.
- Inside-the-rolling-barrel scene, festival house facades, Minish Woods fog, mosaic effect — renderer-iteration deferred from 0.1.2.