Skip to content

v0.9.5 - you've got mali

Latest

Choose a tag to compare

@GreenNaugahyde GreenNaugahyde released this 19 Oct 16:48

Version 0.9.5 of the Android port of ZeldaWWHDRecomp: The Legend of Zelda: The Wind Waker HD (Wii U, USA, Europe and Japan) as a native Android app.

The app contains no game files. You need your own dump of the game: the disc image (.wux or .wud) with its disc key and the Wii U common key, or a Cemu archive (.wua) made from it. On the first start the app extracts the game and prepares the game code for your device (once; a few minutes on a fast phone, longer on slower ones).

What's new

This release is mostly about speed, above all on Mali GPUs and slower phones.

On a Helio G85 / Mali-G52 MC2, 0.75× rendering resolution is now playable, at close to 30 fps. Before this release that GPU managed about 20 fps even at 0.5×.

Helio G85 / Mali-G52 MC2 0.9.4 0.9.5
0.5× about 20 fps 30 fps
0.75× under 20 fps close to 30 fps
1× about 19 fps about 24 fps
  • GPU work, especially for Mali:
    • Textures now wait only for the shader stage that reads them. Before, every render pass waited for the previous one to finish completely, which tile-based GPUs like Mali hate. At 0.5× on the Mali-G52: 19.7 → 28.5 fps from this alone.
    • Clears are done as part of the next render pass, and draws without a depth buffer no longer split render passes.
    • Mipmap chains of rendered pictures (blur, bloom, depth of field) are built in place and only as far as they are actually read.
    • The exact float multiply the Wii U GPU needs (0 × anything = 0) is only used where a value can actually be infinite, found by a new shader analysis: GPU time at 1× on the Mali-G52 47 → 40 ms.
    • Shadows on GPUs without depth clamping (Mali-G52): palm crowns and rocks no longer make shadows come and go with the camera (issue #45).
  • CPU work: the recompiled game code is faster (cheaper function entries, memory accesses and float compares; the hottest functions are grouped together for the CPU's caches), the render thread does about a third less work, and unchanged vertex and index data is kept across frames instead of converted again. On a Helio G85: the game thread needs about 16% less CPU time per frame, the render thread about 33% less. The one-time preparation of the game code is faster too.
  • New graphics options:
    • Dynamic resolution: lowers the rendering resolution while the GPU can't keep up (the game would slow down otherwise), down to a limit you choose (0.75× to 0.4×), and raises it back when there is room. The performance overlay shows the current value.
    • Display resolution (Auto by default): on high-resolution screens the picture is only drawn as large as it needs to be, and the display hardware enlarges it. Helio G99 / Mali-G57 at 2560×1600, 1×: 26 → 29 fps. Full brings back the old behaviour.
    • Upscaling: Sharp keeps edges crisp at lower rendering resolutions; Bilinear is the classic look.
  • Much less shader stutter: many shader variants differ only in settings the shader never reads; they now share one translation instead of each being translated on its own. This also fixes the crash with very large shader caches after long play (issue #48).
  • The GamePad is the only controller: every controller and the on-screen controls act as the Wii U GamePad (with gyro aiming and rumble); the "Controls act as" setting is gone.
    • On a single screen, + shows the GamePad screen (items, map, bottles) and pauses the game; + again goes back.
    • With a controller a highlight in the game's own cursor style moves over the GamePad screen: A taps, Y / X / R put the highlighted item on that button, B goes back. The sea chart's squares, Tingle's Chart and the dungeon map work too.
    • The on-screen − button is gone (it only swapped the TV and GamePad pictures, which + does now); the menu button moved to the top left, + sits in the middle at the bottom.
    • The title screen's controller question is answered by itself (from the original project, ZeldaWWHDRecomp#189). A touch on the title screen presses A, and the file select has a Back button.
    • Save states made with the Pro Controller load with the GamePad.
  • Frame generation on Mali GPUs: now 32-bit shaders (16-bit ones drew garbage on the Mali-G52). It can still make Mali GPUs hang, so switching it on there asks first. If the game crashes with frame generation on, the crash dialog offers Start without frame generation, and a GPU that stops responding for 10 seconds now ends in a crash log instead of a frozen game.

Install

  1. Requirements: Android 11 or newer, 64-bit ARM, Vulkan 1.1, about 2 GB of free storage.
  2. Download tloz_tww_hd_recomp-0.9.5.apk and install it. It updates 0.9.4 in place and keeps your saves and settings. The game code is prepared once more after the update (about 6 minutes on a Snapdragon 7+ Gen 3, 18 minutes on a Helio G85).
  3. New install: put your disc image and both keys, or your .wua file, in one folder. Start the app, choose Extract from your disc image or .wua… and select that folder (or the files themselves).

Frame generation needs the usual Lossless.dll from your own copy of Lossless Scaling. Buy it, don't pirate it like Gonzo would.

Everything else is in the README.

Checksum

SHA-256 of tloz_tww_hd_recomp-0.9.5.apk:
0d71d88b1a7c24880ede21bd7d2c347290f04c06dbda6706b4ad45d8b2cd68fe


An unofficial fan project, not affiliated with or endorsed by Nintendo or the developer of Lossless Scaling. It contains no game code, assets or keys and no part of Lossless Scaling.