Releases: jackpoison-prog/RingOut
Release list
Ring Out 1.6.1
Widescreen now uses the game's own 16:9 mode. The Widescreen option used Dolphin's widescreen hack, which widens the 3D camera but leaves the game's 2D screens laid out for 4:3 — on character select the fighters came out thin and misplaced against stretched menus. It now switches the game's own widescreen mode on instead, and sets the display to 16:9 to match. Works on the US, Japanese and European releases and on SC2 Plus. If you play in widescreen, turn the option on again after updating (Escape → VIDEO → Widescreen, or Alt+W).
Fixes:
- Windows: fullscreen no longer leaves a white border round the picture.
- Windows: Alt+W toggles widescreen, as it already did on Linux.
- The build stamp in the bottom-left corner no longer sits over the game. It shows for a few seconds at launch and whenever the pause menu is open.
Netplay compatibility is keyed on the release version, so both players need 1.6.1.
Downloads: Linux desktop, Steam Deck, and Windows (installer or zip). No package contains game data — you supply your own disc and it is recompiled on your machine.
Ring Out 1.6
Windows is a supported platform. The runtime, the recompiler and the module all build for it, and the installer carries a toolchain so you can build your own module from your own disc with nothing else installed. Netplay works between Windows and Linux, verified on two machines over 400 frames with identical state on both ends.
New in the pause menu (Escape):
- SHOTS — a gallery of your screenshots (F9)
- STATES — every save slot with a preview picture
- REPLAYS — record a match and play it back; recordings are portable between machines
The overlay is restyled to sit beside the game's own panels.
Fixes worth naming:
- The GPL source offer in the Steam Deck package pointed at a repository nobody can reach. Every release through 1.5.2 shipped that. It resolves now.
- A controller profile could name a device that does not exist, which binds to nothing at all and reports no error. An affected profile is repaired on launch.
- Netplay compatibility is keyed on the release version rather than on where the binary was built, so two machines on 1.6 can play each other whoever compiled them. Both players need 1.6.
Downloads: Linux desktop, Steam Deck, and Windows (installer or zip). No package contains game data — you supply your own disc and it is recompiled on your machine.
v1.5.2 -- the CONTROLS tab can be used from a pad
A hotfix for two bugs that both needed the runtime rebuilt, so they ship
together. Nothing else changed.
The CONTROLS tab could not be used from a controller (#9)
Reported against 1.5.1. Trying to bind a button backed out of the bind instead
of taking it, every time. There were two separate causes stacked on top of
each other:
-
The menu acted on the press it was capturing. The overlay is driven by
the pad -- B backs out, A confirms, the D-pad navigates -- and it kept doing
that while a rebind was listening. Backing out cancels a pending bind by
design, so pressing B to bind it cancelled its own bind. -
A row could never be bound to the button that activated it. The detector
samples every input's value when it starts and ignores anything already
held. You activate a row by pressing A, so A was still down at that instant
and stayed invisible for the full three seconds. That was never
pad-specific: it was always whichever button confirms the row. Activating a
row now only arms the bind, and the detector starts once you let go.
Both confirmed by hand on a controller.
A stray file in game/files/ refused every netplay session
A directory-backed game folder no longer folds the synthesised filesystem table
or the disc layout table into its sync hash, so an unrelated file sitting in
game/files/ stops making every session fail to start. Modified game archives
and mismatched regions are still refused -- that check is separate and
unchanged.
Also
A version bump now actually reaches the binary. The build read VERSION at
configure time only, so bumping it rebuilt everything with the previous number
still compiled in.
Downloads
RingOut-1.5.2-linux-x86_64.zip-- desktop Linux. Run./setup.sh <your disc image>, which recompiles the game on your machine.RingOut-1.5.2-steamdeck-x86_64.zip-- Steam Deck.
You need your own disc image of the game. That is what makes this legal to
share: the recompiled code is built from your copy.
Ring Out 1.5.1
Mostly a correctness release: three things that were telling you something
untrue, and one disc that turns out to work.
This download contains no game data and no game code. You supply a disc image
you already own; setup extracts it and recompiles it on your machine.
The version you see is the version you have
Every release since 1.0 has told you it was 1.0. The title bar and the in-game
menu header each carried their own hard-coded version string, and neither was
ever updated — so 1.5 says Ver 1.0 in the one place you would go to check.
CREDITS.txt said it too.
There is now one version number for the whole project, the build reads it, and
the packaging scripts refuse to build a package whose runtime disagrees with the
zip's name. This could not have been noticed from the outside, which is exactly
why it lasted five releases.
Netplay tells you why it refused
"Not every player has this game" was the only thing the host said, and you could
see it while holding exactly the right disc. The check is derived from your game
folder, so a single stray file in game/files/ — a leftover backup, an
unpacked mod, anything — is enough to make two identical installs disagree.
The host now names which player failed and how (different dump, different region, and so on) and points at the folder to look in.
Fedora, Bazzite and other image-based systems
The setup preflight now reads your /etc/os-release and names the package
command your system actually uses, instead of offering two examples and letting
you work out which applies. On Bazzite the answer is neither — it is
rpm-ostree, and it needs a reboot before the packages exist. (#6)
Community "Plus" discs work
A modded disc (ID GRSEPS) recompiles and plays with no special handling and no
extra flags, on both desktop and Steam Deck. This needed no code change — it has
worked since 1.5 and nobody knew.
Three of its code blocks rewrite themselves while running, fail the integrity
check and fall back to the interpreter, which is its whole measured cost: a few
per cent of CPU, and under two points of speed on a Deck. Netplay works between
two Plus copies. It keeps its own save file, so a stock save and a Plus save
cannot see each other.
Setup also stopped sending Plus owners off to train a profile they were already
being given.
Everything new since 1.2.1
If the last version you saw was the first public one, here is what has landed.
All three regions play
US, Japanese and European discs all recompile and play. Nothing is keyed to a
disc ID any more — the one address that used to be a US constant (the OS idle
loop, without which a build runs at roughly half speed while looking perfectly
correct) is found in your disc by matching the loop's shape rather than its
address.
If you have the European disc, you may have the best of it. PAL runs at
50 fps because that is what 50 Hz content is — and it holds 50. There is
simply less to do per second, so it is the steadiest framerate of the three.
Steam Deck
The Deck has its own package, and ./setup.sh --deck on a desktop builds a
module that will actually run on its Zen 2 chip. Plays in both Desktop and Game
Mode, and it runs very well on the current SteamOS beta (3.9.0).
Train the compiler on your own machine — ./setup.sh --pgo
The profiles that ship can only be read by clang 22 or newer, so on most
distributions you were silently getting a slower module. --pgo fixes that on
any clang: it builds an instrumented module, plays 6000 frames of an arcade
match on its own, and rebuilds using what it learned.
| unprofiled | profiled | ||
|---|---|---|---|
| desktop (Zen 3) | 176.95 Gcyc | 158.66 | −10.3% |
| Steam Deck (Zen 2) | 233.99 Gcyc | 201.07 | −14.1% |
About 11 minutes on a desktop, 26 on a Deck, once.
A second controller just works
Plug in a second pad and player 2 is ready — port 2 attached, mapped and
calibrated, with no configuration. Player 2 gets the stick calibration too,
which matters more than it sounds: bound by hand, a pad's diagonals never reach
full deflection, and no screen in the game lets you fix it.
Mods
Texture packs drop into userdata/Load/Textures/GRS/ and just load; packs
authored for another release of the game usually work. Character skins are
written into the game's own archive, so your copy stops matching the disc —
netplay turns itself off while one is installed, and the MODS tab tells you that
before you install rather than after. Both work on the Steam Deck.
Netplay
A direct connection — LAN, VPN or a forwarded port — with a lobby, live ping and
per-player status. A peer holding a different disc, a differently built module or
modified game data is refused at connect and told which, rather than timing out
with no explanation.
…and many bug fixes
Frozen first fights on new installs, launchers that refused to start a module
they had just built correctly, modules that could not be found on older systems.
Several of these came in as issues here and were fixed within days of being
reported.
Downloads
| file | for |
|---|---|
RingOut-1.5.1-linux-x86_64.zip |
Linux desktop. Run setup.sh; it extracts your disc and recompiles the module locally (~6 min). |
RingOut-1.5.1-steamdeck-x86_64.zip |
Steam Deck / SteamOS. Build the module on a desktop with ./setup.sh --deck and copy game/ and bin/g<ID>_recomp.so across. |
Found something? Tell me
Bugs, glitches, or features you would like to see — open an issue and say so.
Nearly everything fixed in the last few releases was found by someone hitting it
and telling me about it, usually with a log attached. That is genuinely the
fastest way this gets better.
Ring Out 1.5
The first fight no longer hangs
If a fresh install ever gave you a black screen with the music still playing —
the first time you started an Arcade or VS fight, no input, nothing to do but
kill it — that was a bug, not your hardware, and it is fixed.
The emulator wrote a stale graphics-FIFO read pointer into a buffer the game had
just swapped, leaving the GPU pointing into memory the game had abandoned.
Nothing could be drawn after that, so the game waited forever for a frame that
would never arrive.
It only happened while shaders were compiling for the first time, which is why
it hit new installs almost exclusively — and why it went unnoticed here for
months, since every test machine has warm shader caches. 1.4 has this bug too,
so if it froze on you at the VS screen, that is why.
Mods
Two kinds, and the MODS tab is honest about the difference.
Texture packs drop into userdata/Load/Textures/GRS/ and just load. Packs
authored for another SoulCalibur II release usually work — the game is matched
on the first three characters of the disc ID. Nothing about the emulated machine
changes, so netplay and determinism are untouched.
Character skins are written into the game's own archive, so your copy stops
matching the disc: netplay turns itself off while one is installed, and the tab
tells you that before you install rather than after. Skins apply at the next
launch, because the archive is open the whole time you are playing.
Both work on the Steam Deck.
A second controller just works
Plug in a second pad and player 2 is ready — port 2 attached, mapped, and
calibrated, with no configuration. (#5)
Player 2 gets the stick calibration too, which matters more than it sounds:
bound by hand, a pad's diagonals never reach full deflection, and no screen in
the game lets you fix it. Movement and guard, in a fighting game.
Two pads on a Steam Deck: if one does nothing, turn Steam Input off for the
shortcut. Steam can replace your physical pads with virtual ones the profile does
not recognise. The launcher log now records which devices the emulator can see
and how much of each pad actually bound, so this is a line to read rather than a
thing to guess.
The launcher finds its module on older systems
If your glibc is older than 2.36, the launcher starts the game through the copy
it ships with — and on that path it looked for the recompiled module in the
wrong directory and gave up, with the module sitting in bin/ the whole time.
Fixed, and a module that genuinely cannot be found now names the directories
that were searched. (#4)
Ring Out 1.4
The launcher now starts
If you tried 1.3 and got "no native module was supplied" after a setup that
looked like it worked — that was a bug, not your system, and it's fixed. The
launcher was comparing your glibc against a number that was never the real
requirement, so on most current distributions it refused to run a module it had
just built correctly. (#4)
Get the last 10–14%: ./setup.sh --pgo
The profiles that ship can only be read by clang 22 or newer. On SteamOS
(clang 20), Ubuntu 24.04 (18) and Debian 12 (14) they're refused, and you
silently get a slower module.
--pgo fixes that on any clang: it builds an instrumented module, plays 6000
frames of an arcade match on its own, and rebuilds using what it learned.
Measured over the same fixed frames, 8 runs per arm:
| unprofiled | profiled | ||
|---|---|---|---|
| desktop (Zen 3) | 176.95 Gcyc | 158.66 | −10.3% |
| Steam Deck (Zen 2) | 233.99 Gcyc | 201.07 | −14.1% |
A profile you train yourself came out ahead of the one that ships, because it
matches your compiler exactly. Costs about 11 minutes on a desktop, 26 on a
Deck, once. Play the game once first — the training run needs your save to
get past the memory-card screen, and setup will tell you if it didn't.
Setup tells you what it's doing
A preflight now lists what's present and what isn't — compiler, cmake, ninja,
disc, free space, and whether your clang can actually read the shipped profile —
then asks before spending twenty minutes. At the end it says plainly whether
your module is profiled, and if not, why and what it costs.
A Steam Deck can build its own module
BUILD-ON-THE-DECK.md ships in the Deck package. Install a toolchain and
SteamOS compiles its own module, needing no bundled libraries at all — and it's
the way to get the full PGO win there. Tested end to end on SteamOS 3.8.25:
34 minutes start to finish.
Also
- Per-region PGO profiles for all three discs
- Cross-region netplay refused at connect with a reason, instead of stalling
- Cheat lists for PAL and JP
.rvzand.gczdiscs read directly- Two new reference pages:
docs/measuring.mdand
docs/profile-guided-optimisation.md
Which download? linux-x86_64 compiles on your machine (needs clang or gcc,
cmake, ninja). steamdeck-x86_64 is prebuilt — no toolchain needed, though you
can now build on the Deck if you want to.
You supply your own disc image. No game data or game code is distributed here.
Ring Out 1.3
Three regions, and a Steam Deck module you can actually build.
The Japanese and European discs work
GRSJAF and GRSPAF now recompile and play, alongside the US GRSEAF:
| disc | instructions | unknown opcodes | speed |
|---|---|---|---|
GRSEAF US |
535,368 | 0 | 60 fps |
GRSJAF Japan |
527,592 | 0 | 60 fps |
GRSPAF Europe |
543,008 | 0 | 50 fps — full speed for 50 Hz content |
Nothing is keyed to a disc ID any more. The one address that used to be a US
constant — the OS idle spin loop the core's idle-skip needs, and without which a
build runs at roughly half speed while looking perfectly correct — is now found
in your own disc's executable by matching the loop's shape rather than its
address. It resolves to the hand-found 0x80185DEC on the US disc, 0x8017F35C
on the Japanese one and 0x8018D544 on the European one, the last of which no
human had ever looked at.
Two caveats if your disc is not the US one. The 23 shipped cheat codes are US
addresses and do not carry over, so the cheat list will be empty. And the
profile-guided build is trained on US code, which a JP or PAL module can barely
use — measured at −3.8% instructions, against roughly −11.9% for a US player.
Both build and play correctly regardless.
Steam Deck: ./setup.sh --deck
The Deck package ships no module and sends you to the desktop package to build
one, so that build has to produce something that runs on someone else's CPU.
Two properties of your machine decided whether it would, and both failed
silently at the end of a long recompile:
-march— a normal build targets the machine it runs on. The Deck is Zen
2; a module built on a Zen 4/5 or recent Intel desktop carries AVX-512 or
AVX-VNNI, and the Deck takes SIGILL. An instant crash, no message, possibly
mid-match.- glibc — a floor above ~2.37 fails at
dlopenon SteamOS.
./setup.sh --deck /path/to/disc.iso builds -march=x86-64-v3 and checks both,
then tells you which one you have and what to do about it. The glibc half it can
only diagnose — the fix there is to build on Debian 12 or Ubuntu 22.04.
The --deck module is not a different module: from the same sources it contains
no instruction above v3, keeps its glibc floor at 2.4, and produces identical
frame hashes over 24,000 frames of gameplay.
Also
- The Deck package's README shipped inside 1.2.1 calling itself "Ver 1.1". The
version is now stamped at package time rather than maintained by hand. dolphin-toolcan be built from the vendored tree (-DMODERNGEKKO_ENABLE_DOLPHIN_CLI_TOOL=ON),
which is how an.rvzdisc image becomes something the extractor can read.
Verified by unpacking this exact zip and running ./setup.sh --deck on a PAL
disc, start to finish, then confirming the module it produced loads and hashes
frames.
Ring Out 1.2.1
The first public release. The project's development history is preserved in this repository; earlier tags (v1.0–v1.2) are present but were internal-only and have no published packages.
A small patch release on top of v1.2: one measured optimisation and one packaging correctness fix.
This download contains no game data and no game code. You supply a disc image you already own; setup extracts it and recompiles it on your machine.
Downloads
| file | for |
|---|---|
RingOut-1.2.1-linux-x86_64.zip |
Linux desktop. Run setup.sh; it extracts your disc and recompiles the module locally (~6 min). |
RingOut-1.2.1-steamdeck-x86_64.zip |
Steam Deck / SteamOS. Ships prebuilt binaries — SteamOS mounts /usr read-only and has no C headers, so nothing can be built on the device. Build the module on a desktop and copy game/ and bin/g<ID>_recomp.so across. |
Changes
- A static-initialisation guard removed from the dispatch loop — −0.45% instructions. A function-local static costs a thread-safe init guard check on every pass, and this one sat in the inner dispatch loop: 6.1% of the loop's own samples, for a debug flag that is false in every normal run. Measured by instruction count over a fixed frame window, arms interleaved; within-arm spread 0.06%.
- The cheat list now ships with nothing enabled. v1.2 shipped five codes marked enabled —
Infinite Time, bothInfinite Healths andP2 Play As Inferno— because they were on in the tree the release was assembled from. Latent, since noDolphin.iniships and cheats default off, but the first player to enable cheats would have got unendable matches against a forced Inferno. All 23 codes are still listed and selectable from the CHEATS tab; none are pre-enabled.
Also in this tag
v1.2's tag predated the packaging fix above (its asset was rebuilt and replaced after the fact). This is the first release whose tag reproduces its contents exactly.
Verification
Both packages were unpacked and checked; the desktop package additionally had setup.sh run against a real disc, and the module it built was launched — 900 frames, no ABI mismatch, gather-pipe fast path active, and no cheats enabled.