github 999sian/tmc v0.1.2-experimental
TMC PC port v0.1.2-experimental

latest releases: v0.8.3, v0.8.2, v0.8.1...
pre-release2 months ago

0.1.2-experimental — 2026-05-02

Bug-fix pass over a USA playthrough from prologue through Hyrule Field, plus a hard-found extraction bug that was silently dropping whole asset subtrees from release tarballs.

Fixed

  • Doors in Hyrule town & overworld no longer make the game crash on entry. HouseDoorExterior_Type3 (the fully-scripted door variant) called ExecuteScript(super, this->context) even when the spawner failed to set context (port script resolution can return NULL where the GBA original always resolved). Reproduced entering HyruleField/LonLonRanch. Skip the script invocation under PC_PORT instead of segfaulting. (src/object/houseDoorExterior.c)
  • BG no longer goes black after a map-hint cutscene. After the Mountain Minish elder shows the world map and the dialog continues, the room behind it was rendering pure black instead of returning to the room art. Two issues in Subtask_FadeOut → RestoreGameTask → sub_0801AE44: (a) sub_0807C4F8 couldn't iterate native 24-byte MapDataDefinition structs from the asset loader (only handled ROM-packed 12-byte entries), so gMapDataBottomSpecial stayed zeroed; (b) even when the BG buffer got refilled correctly, no one raised gScreen.bg.updated so the buffer→VRAM copy never fired and VRAM kept the stale map tilemap. (src/playerUtils.c, src/gameUtils.c)
  • Lily pads in Minish Forest move again. data_080D5360/ was missing from extracted assets, so the lily-pad rail data couldn't be loaded and the pads sat still. See "Asset extraction" below for the underlying fix.
  • Festival house BGM stops resetting on every room transition. Port_M4A_Backend_StartSongById was unconditionally restarting the same song each time SoundReq fired with the room's queued BGM. Now skipped when the same BGM (songId 1..99) is already playing on the same player. SFX still re-trigger correctly. (port/port_m4a_backend.cpp)
  • Hyrule Field / Castle Garden plays the correct prologue BGM. USA region was using BGM_FESTIVAL_APPROACH for the first prologue scenes; matched the EU mapping (BGM_BEANSTALK) on the port so the music matches. (src/roomInit.c)
  • Stray location-name textbox no longer appears during Zelda's intro call. EnterRoomTextboxManager was outliving an unrelated message and reasserting itself. Restored the GBA-original kill condition (gMessage.state & MESSAGE_ACTIVE) so the textbox dies when another message starts. (src/manager/enterRoomTextboxManager.c)
  • Magic-stump exit animation grows from small → big (PC-port deviation from the canonical giant→normal animation, requested by user). Player entity's unk_80 / unk_84 now start at 0x80 and increment to 0x100, matching the OOT-style growing-Link feel. (src/player.c)

Asset extraction

  • data_*/ subtrees no longer drop from release tarballs. Two pipeline gaps caused fresh extractions to silently miss whole directories (most user-visibly data_080D5360/, where lily-pad rails and door data live):
    • extract_area_tables skipped property indices 4..7 unconditionally — they're usually room callbacks but some rooms put data pointers there. Now follows the offset when it matches an indexed asset entry, and a final sweep extracts every EmbeddedAssetIndex entry the specialized passes missed (~7300 additional files). (tools/src/assets_extractor/assets_extractor.hpp)
    • CopyRuntimePassthroughAssets had a fixed directory whitelist that excluded all data_<addr>/ subtrees. Now lists them explicitly so they survive the assets_src/ → assets/ runtime build. (port/port_asset_pipeline.cpp)
  • asset_processor now creates assets/ before scanning JSON configs, so a fresh checkout doesn't crash in extract mode. (tools/src/asset_processor/main.cpp)

Known issues (still open)

  • Inside-the-rolling-barrel scene (Deepwood Shrine) renders as flat brown bands instead of the textured barrel-stave + window view. Per-scanline HBlank-DMA on REG_ADDR_BG2PA (the affine matrix that creates the cylindrical roll) isn't being applied by VirtuaPPU. The same root cause likely affects light-ray/parallax effects (vaatiAppearingManager, steamOverlayManager, lightRayManager, pauseMenuScreen6) and the iris/circle window effects (common.c ×4). Visible: cosmetic; the room is otherwise playable.
  • Festival house facades, doorway sprite glitches, map-screen grey patches, cloud-shadow line artifacts, Minish Woods fog, tall-grass shoes overlay — all renderer-iteration heavy and deferred until they can be debugged with eyes-on-screen.
  • asset_extractor warnings about "Animation loop byte missing" / "Animation data has trailing bytes" still affect ~900 animations (Gyorg, Vaati cutscene, MazaalHand, etc.). Not used in the title or early gameplay; surfaces during specific cutscenes. Same root cause as 0.1.1.
  • Mosaic effect on title fade and certain spell charges is disabled (kill-switched). Patch needs re-porting against current ViruaPPU mode1.c. Same as 0.1.1.

Don't miss a new tmc release

NewReleases is sending notifications on new releases.