- Steam Deck / AMD: the Depths are fixed. The ground, the cave walls and Link's lighting are back.
- Gyro aiming: no more drift, and it now works on the Steam Deck too, with your Steam Input layout untouched.
- Faster: the game's code runs faster (registers kept in host registers), better thread scheduling, faster loading, no pause when saving, fewer GPU stalls; roughly 10-15 % more fps in busy places.
- AMD: flickering fog fixed by shader translator fixes.
- Launcher: updates are checked at every start.
This is a big update: the game is rebuilt almost from the start, about 30-40 minutes. Update when you are ready to wait that long; saves stay. Accept it in the launcher (0.2.0's launcher checks once a day), or by hand: extract the new zip over your game folder (Steam Deck / Linux: replace UltraTears.AppImage; copied over from Windows, turn on Allow executing file as program in its Properties, Permissions tab, in Desktop Mode), start the launcher and click Update the game.
Known issues: busy places like Lookout Landing are still slower than the rest of the game; rare flickering circles near Link.
Downloads
| File
| For
|
UltraTears-0.3.0-windows-x86_64.zip (~150 MB)
| Windows; it can also build the game for a Steam Deck
|
UltraTears.AppImage (~210 MB)
| Linux and the Steam Deck
|
Follow the README to install.
Full list of changes
Steam Deck and AMD graphics
- The Depths draw properly on AMD (Steam Deck, Radeon on Linux, the Windows build under Proton): the ground and the cave walls were missing and Link was dark. The terrain's patch tables were bound as if they were a 64 KiB uniform buffer wherever the graphics driver's uniform and storage alignments are the same, which is the case on AMD and Mesa.
- Flickering fog on AMD: the shader translator now gives Maxwell's results where Vulkan leaves a result undefined (bit fields past bit 31, local variables read before they are written), and three more fixes: the vertex position is invariant across the passes that draw the same geometry, the depth compared against a 16-bit shadow map is rounded to 16 bits as on the Switch, and unwritten vertex outputs start at (0, 0, 0, 1).
- Gyro aiming on the Steam Deck: the Deck's own gyro is read from its controller while buttons and sticks keep coming through Steam Input, so your Steam layout stays as it is. Nothing to set up.
- Fewer GPU stalls: render passes no longer wait for all earlier GPU work, and image layouts change only when they must (in the Depths about 30 % fewer barriers a frame and nearly 90 % fewer layout changes). AMD drivers pay for these more than NVIDIA's.
Speed and smoothness
- The game's code runs faster: inside a function the Switch CPU's registers and flags now live in C local variables, so the compiler keeps them in host registers. Checked against the previous translation on 1000 game functions from the same random states: no difference.
- About 630 functions (459 of them in the SDK) were built without optimisation by mistake; they are optimised now.
- Thread scheduling: a higher-priority thread now takes a virtual core at system calls and indirect calls instead of waiting for the holder to sleep; Windows uses SRW locks and condition variables; short sleeps are exact; 848 busy-wait loops of the game give their core to a waiting thread after 50 microseconds.
- Loading: the game's zstd-compressed files decode with the system's libzstd, several times faster; saving writes to the disk on a thread of its own, so the game no longer stops for 95-135 ms on each save.
- Command recording: the uniform-buffer capture at each submission no longer compares every range with every pending GPU write; recording threads keep the memory pool they used last. In busy places such as Lookout Landing that is roughly 10-15 % more frames a second.
- Smaller things: memory barriers without a full fence where the game asks for a one-sided one, a clock without 128-bit divisions, fewer reallocations while recording, environment lookups cached on Linux too, the render pass kept when the game sets the same targets again.
Fixes
- Gyro aiming drift (aim creeping to one side and then the other with the controller still): the gyro's zero-rate bias is now measured from your own controller whenever it is still, in the first seconds, and taken off; the tilt correction uses the gravity your controller actually reads. Samples are timed by the sensor.
- After StartSixAxisSensor the gyro no longer hands out samples from before it.
- Equipment could stay locked for a moment after loading a save at real-time frame steps.
- Cube-map flags are set only on cube textures and arrays drawn to, not on every square texture array (on AMD this changed the ground textures' layout); depth sampled without a comparison reads one texel, as on the Switch.
Launcher
- Updates are checked at every start, in the background; with no answer from GitHub nothing is shown.
- Pre-releases are not offered as updates.
- An update with the same version number is still offered as an update.
- The game language's default reads "As in the system".
Known issues
- Busy places such as Lookout Landing are still slower than the rest of the game: the game's own work and the recording of the GPU's commands take about the same time each frame. This is what the next version works on.
- Rarely, white or red circles flicker at some distance from Link; not understood yet.
UltraTears is not affiliated with or endorsed by Nintendo. You need your own legally obtained copy of the game.