Skip to content

v1.10

Choose a tag to compare

@Nycolazs Nycolazs released this 16 Oct 10:32
· 24 commits to main since this release

Important

This APK is signed with a different key than v1.7–v1.9, so Android won't install it over them ("app not installed" / "package conflicts"). To update:

  1. In the old version, ≡ → Saves → Export saves to export your save and save states to a folder (or copy Android/data/org.wwhdrecomp.app/files/save and states with a file manager).
  2. Uninstall the old version, install this one and point it to the game again (or copy the old files folder back into Android/data/org.wwhdrecomp.app/files).
  3. When it starts without a save, the app offers to restore one: pick the exported folder (or ≡ → Saves → Import saves). Settings start from the defaults.

What's new in v1.10

  • Much smoother when going from one area to another. Entering an area translated hundreds of shaders again for 2-4 frames (100-230 ms stutters), even in an area visited minutes before, and each time the result was the same. The shader key took in register state the translation never reads: the previous shader's leftover vertex semantics (binding a vertex shader didn't clear the table as the GPU's SQ_VTX_SEMANTIC_CLEAR does), unused export IDs and pixel inputs, and the blend / write-mask bits of the colour targets. On a Galaxy S20 FE, eight area changes twice over:
    • 15,737 → 4,962 shaders in total, and none translated when coming back to an area (~1,500 per area before);
    • worst frame on entering an area 226 → ~120 ms, coming back ≤ 77 ms;
    • less memory (every variant was a shader object of its own).
      The SwitchWakerHD port found the same independently (its #37).
  • No more black or flashing 3D picture. A few pixels whose colour came out as NaN were spread by the bloom and blur passes over the whole screen: the 3D picture went black for some frames while the HUD stayed. The Wii U's GPU gives 0 for 0 × infinity; here a constant operand was multiplied the IEEE way, giving NaN (seen in a night storm at sea, where the lightning's light sits at the camera: 10% of the frames black). Every pixel colour is kept finite now (NaN → 0, ±infinity → ±65000, three instructions per pixel).
  • The game pauses when you lock the phone or switch to another app. Before, it kept playing unseen (enemies and timers going on), drawing for no window and mixing sound nobody heard: a whole CPU core busy with the screen off. Now it waits exactly where it is: CPU in the background 100% → 4%, much less battery drain and heat, and it continues where you left it without glitches.
  • Save states no longer close the game a few seconds after saving. Saving held the whole state (~235 MB) in memory until a background thread had written it, and loading read the whole file into memory, so Android's low memory killer ended the game on 6 GB phones (and a state could seem impossible to load). Now the state is written as it is compressed and the file is read in place: ~45 MB extra instead of ~235 MB. Saving holds the game for about a second.
  • Hybrid layout: the GamePad comes up for the Wind Waker's songs (#14), as it does for the pause menu. Thanks jaimepa17 for the detailed report.
  • Rotation: the app changes Android's rotation settings only where the system ignores the game's landscape, so a lock screen or another app that turns the screen no longer fights with the game. If your ROM turns on "fixed to user rotation" (the game then shows in a portrait strip without the permission), adb shell wm fixed-to-user-rotation default turns it off.

After updating, the first start compiles the shaders again once (the translations changed). The game code is prepared again once on the device (a few minutes).

Tested on a Galaxy S20 FE (Snapdragon 865, Adreno 650, Qualcomm driver v502): Outset, Link's house, Windfall, Dragon Roost Cavern and Forest Haven twice over, a forced night thunderstorm with heavy rain at sea, screen locks and app switches mid-game, save states saved and loaded (also one made by v1.9 in another session) and the Wind Waker's song screen in the hybrid layout.