It's not an asset problem: your assetfix.log shows the Cave of Flames-era
repairs all working, so re-extracting wouldn't have helped.
The Lake Hylia crash is an out-of-bounds read in the NPC sprite-loading code.
An NPC type index runs 43 slots past the end of a 21-entry table and lands in
the font colour buffer next to it, so the game ends up dereferencing pixel data
as a pointer. On the original GBA that read is harmless garbage; on the Switch
it's a hard fault, which is why it happens every single time in the same spot.
Fix is straightforward (bounds-check the index) and will be in the next build.
The other log you sent is a separate one in Julietta's house from an older
build, and the hang_report is a third thing — a freeze inside the renderer in
the Minish Woods. I'll look at both.
Update even if none of the achievement bugs affect you. This one fixes a way
your save file could be destroyed.
SAVES
The game commits a save eight bytes at a time — about 160 writes for one file —
and until now it rewrote the entire save file after every single one of them,
starting each rewrite by emptying it. For a fraction of a second, ~160 times per
save, tmc.sav was either empty or half-written. Close the game in one of those
moments (exiting homebrew from the HOME menu is enough) and the file was left
too short. Next boot the game read it, found a broken header, and did what a
game does with a broken save: it formatted it. All three files, gone.
Saves are now written to a temp file and swapped into place, so the real file is
only ever replaced by a complete one, and a save that isn't a whole image is
refused instead of formatted over. A backup of what you started the session with
is kept beside it as tmc.sav.bak.
If this already happened to you, check SETTINGS -> LOAD AUTOSAVE before starting
over. The autosave ring is written safely and was never affected.
LAKE HYLIA CRASH
Fixed. An NPC asked a 21-entry sprite table for entry 64, read 43 slots past the
end into the font colour buffer behind it, and handed the sprite loader eight
bytes of that as a memory address. On real GBA hardware that lands on a ROM word
— wrong sprite, no crash. Thanks to digdat0 for the logs that pinned it.
ACHIEVEMENTS
Three fixes:
- Offline achievements never actually worked. v1.3.0 cached the login and the
session start but not the achievement set itself, because the list of
cacheable steps was written for the old RetroAchievements flow where the set
arrived in a request called "patch". rcheevos 12 fetches it through
"achievementsets" and never sends "patch" at all.
- Unlocks earned offline were saved to your SD card correctly and then never
sent. The only thing that drained that queue was a reconnect within the same
session, so an unlock earned offline in a run that then closed was never
looked at again. It now drains on every boot.
- Unlocked achievements kept their grey badge. RA publishes each badge twice,
colour and greyed, under the same id, and the game filed both under the same
name. Whichever arrived first won for good.
IMPORTANT: connect to the internet once after updating. The achievement set has
never been written to your SD card, so the first boot with a network is what
saves it. Offline boots after that will show your achievements.
STILL OPEN
The crash digdat0 hit with the Tingle sibling in Hyrule Field is not fixed. It's
a different bug from the Lake Hylia one and the report couldn't be resolved to a
function: every address in a crash log is where the code happened to be mapped
that run, and the load base only existed in Atmosphere's own crash report.
So this build makes the crash log resolve itself — it now prints an anchor
address that gives the load base — and drops a breadcrumb when a Kinstone fusion
starts, naming the fuser and the candidate slot.
digdat0: if you update and reproduce it, that new log alone will tell me the
exact function. That's the one I need.
@alexgg1014 Really appreciate your effort! No rush on any of this!
I tested both, the transition from Lon Lon Ranch to the right screen crashed the first time, second attempt gave a white screen, the third attempt loaded the next section and I could see the page, but it froze and then crashed.
Tingle sibling in Hyrule Field still crashes.
I'm also seeing the in-game updater give error "Update manifest rejected" which stopped working in 1.3.2.
Crash logs attached, let me know if I missed anything. Also adding atmosphere logs if thaat helps.
1.3.3 fixed a way your save could be destroyed. The fix was right, and it was also unusably slow — which I didn't catch because I never measured it.
The game writes a save eight bytes at a time: about 160 of those for one file, several hundred when it sets up a new game. 1.3.3 made every single one of them rewrite the whole file and swap it into place — create a temp file, write 8 KB, close, delete the real one, rename. Four SD card operations per eight bytes.
For a new game that's this:
Code:
1024 blocks (new game)
operations during the writes : 0
operations after one commit : 3 <- v1.3.5
what v1.3.3 did : ~4096 <- minutes of freeze
And if you gave up and closed the game, you were left with just a tmc.sav.tmp — because the delete had already happened and the rename never did.
Writes are now gathered up and committed once per frame. Same protection: the real file is still only ever replaced by a complete one. Three operations instead of four thousand.
If it happened to you, your save is not gone. A complete tmc.sav.tmp is now recognised and restored on the next launch.
I also added a test that compiles the save code on a PC and asserts the number of filesystem operations, not just that the result is correct. That's the check that would have caught this before it shipped.
Also in this build
These were in 1.3.4, which the updater never actually offered anyone.
The Lon Lon Ranch transition crash. A Darknut's sword slash could be updated for one moment after its owner was gone during a room change, and it looked up the owner's data before the check that handles exactly that. On a GBA that read lands harmlessly in the BIOS; the Switch faults.
"Update manifest rejected".@digdat0 was right that it broke in 1.3.2. The file the game downloads to check for updates keeps three changelog lines, and on a fourth it threw the whole file away instead of ignoring the extra. 1.3.2 was the first release to ship four. Already fixed for everyone without updating — 1.3.5 just makes it impossible to repeat.
Crash reports resolve themselves. They now carry the address needed to turn a crash into a function name, and record which script command was running.
Still open
The Tingle sibling crash in Hyrule Field. It happens inside a script command handler, and those leave no trace on the call stack — so a report could only say "somewhere in the script engine", out of a hundred-plus commands. 1.3.5 names it.
@digdat0 — if you reproduce it on this build, that log is the one I need.
It’s about that time of year again where I check in with the community to see if we can get the front page aligned with what people are interested in knowing and what...
WiiCompiled is a new project that lets PC gamers play Mario Kart Wii natively on PC without emulation. Using static recompliation to convert the code into native PC...
Images for the rumoured Zelda-themed limited edition Switch 2 for The Legend of Zelda's 40th Anniversary have started to leak online.
The leak shows only the...
After being announced last year, the fan-made remake Gamma Emerald has finally gotten its first early access release. A complete rebuild of fan-favourite Pokemon...
The long awaited Grand Theft Auto VI Extended Look gameplay trailer has finally dropped on YouTube. As you all know, it had dropped 6 hours earlier on Netflix, and...
Though we knew all the way back in May that this was coming, the exact numbers remained a mystery for prospective Nintendo gamers in the UK. If you happen to have...
Thanks to the recent decomplication efforts; The Minish Cap 3DS brings the Game Boy Advance classic Zelda title to your 3DS.
The port takes full advantage of the 3DS...
In the wake of Sony's shift to a digital-only ecosystem within the next year, Xbox have today announced a surprising scheme. Aiming to offer physical buyers the same...
After being announced last week, the first of two broadcasts is set to go live later today with a stark focus on The Legend of Zelda and its 40th anniversary...
GBAtemp is and always has been an independent community. Since 2002 our staff have voluntarily kept the site running, added new forums, features, provided constant...
It’s about that time of year again where I check in with the community to see if we can get the front page aligned with what people are interested in knowing and what...
After being announced last week, the first of two broadcasts is set to go live later today with a stark focus on The Legend of Zelda and its 40th anniversary...
Though we knew all the way back in May that this was coming, the exact numbers remained a mystery for prospective Nintendo gamers in the UK. If you happen to have...
In the wake of Sony's shift to a digital-only ecosystem within the next year, Xbox have today announced a surprising scheme. Aiming to offer physical buyers the same...
Images for the rumoured Zelda-themed limited edition Switch 2 for The Legend of Zelda's 40th Anniversary have started to leak online.
The leak shows only the...
The long awaited Grand Theft Auto VI Extended Look gameplay trailer has finally dropped on YouTube. As you all know, it had dropped 6 hours earlier on Netflix, and...
It is with a heavy heart that I announce the departure of our beloved Chary from the position of Chief Editor. Chary took over early 2021 and has done a wonderful job...
The second of a two-part special, a more traditional Nintendo Direct is set to air today. Unlike the Zelda Direct the contents of this one is still relatively up in...
After being announced last year, the fan-made remake Gamma Emerald has finally gotten its first early access release. A complete rebuild of fan-favourite Pokemon...
Thanks to the recent decomplication efforts; The Minish Cap 3DS brings the Game Boy Advance classic Zelda title to your 3DS.
The port takes full advantage of the 3DS...