github santiquiroz/gears-of-war-2-pc-port v0.4.3

one hour ago

A new Android APK that survives leaving the game, a leaner game binary on every platform, and threads that sleep instead of polling on Linux and Android. Everything from 0.4.2 is included.

Android

  • Leaving the game and coming back no longer crashes it. Home, switching to another app or the screen turning off, then coming back: up to 0.3.18 the return crashed (in vkCreateAndroidSurfaceKHR, with a window Android had already freed). Now the game lets go of the old window when it leaves the screen and connects to the new one when it comes back (SDK patch 0085). The game keeps running while it is off screen (only the picture and the sound stop), so pause it before you leave.
  • The update dialog holds the game until you answer it, instead of letting it start behind the dialog, and the phone only offers releases that carry an APK (0.4.2 was for PC and Linux only).
  • Cooler CPU. The audio worker no longer wakes every millisecond to look for work: on a Galaxy S25 Ultra it went from about three quarters of a CPU core on 0.3.18 to under 1 %. The game's waits on several objects, the timer queue and the vblank thread now sleep until they are woken too (SDK patches 0078-0080).
  • Texture descriptor sets are reused when a draw binds the same textures as the set written before (SDK patch 0082; on by default on Android, where 53 % of them are kept in chapter 2).

The phone is still limited by its GPU and its heat: from a cool start chapter 2 runs at about 40 fps, and the frame rate follows the GPU clock as the phone warms up.

Every platform

  • The recompiled code keeps the Xbox 360 CPU's registers in host registers instead of memory (the code generator's *_as_local options, with a build step that puts back in memory the registers the game's code shares between functions). gow2.exe shrank from 90 to 72 MB and the Android game library from 158 to 118 MB. The main game thread runs about a third fewer instructions a frame: 31 % fewer on Linux and 33 % fewer on the S25 Ultra, with 20-22 % fewer CPU cycles. Our PC (RX 7800 XT) and the phone run chapter 2 at the same frame rate as before, since the GPU side sets it there; slower CPUs may gain more. All 29 chapters were travelled on Linux with no broken registers.

Linux and SteamOS (experimental)

  • A crash or a forced close (Steam's Exit Game, kill -9) no longer leaves the game's memory in RAM. Up to 0.4.2 each one left a xenia_memory_* file of several hundred MB in /dev/shm until a reboot (SDK patch 0084). With an older version, reboot, or run rm /dev/shm/xenia_memory_* while the game is not running.
  • The SDK and the game use the small code model (SDK patch 0081), and with lld the SDK's libraries call their own functions directly instead of through their PLT (SDK patch 0083).

The Linux build has still only been tested on a software Vulkan driver, not on a real Steam Deck or Legion Go; please open an issue with your logs/gow2_*.log if something goes wrong.

Install / update

Windows: download gow2-recomp-0.4.3-win64.zip and copy the contents of its gow2-recomp-0.4.3-win64 folder into your game folder. Your gow2.toml and saves are kept.

Linux and SteamOS: download gow2-recomp-0.4.3-linux-x86_64.tar.gz, extract it on the device itself and copy everything inside its folder into the game folder, next to default.xex. Steps for Steam Deck and Legion Go in the README and docs/LINUX.md.

Android: install gow2-recomp-0.4.3-android-arm64.apk over the old one; the game files and settings are kept. Do not uninstall the old app first: that deletes the game files copied into it.

Everyone in a co-op session should run the same release.

Tested

  • Windows: the host tests pass; chapter 2 runs at the same frame rate with and without the register change (runs alternated A B B A).
  • Linux (WSL2, software Vulkan): chapters 1-29 travelled with the register change; the packaged build starts from ./gow2.sh and a forced close leaves nothing in /dev/shm.
  • Android (Galaxy S25 Ultra): the APK installs over 0.3.18 and keeps the game files; Home and back six times, and the screen off and on twice, in one game session with the picture back each time; the Launch options screen and the update dialog both wait for an answer before the game starts; a measured run of chapter 2 against the same tree without the register change.

SHA-256 (zip): 298B12341FAC32FFFA1034D6718B00057A67C8E2A6A80437A515D5B14BD6EF34

SHA-256 (Linux): ae95127b9ecd15b82802df6537d7b147e78d333e29cc3e05a049718145d748a8

SHA-256 (APK): A55B3C74CEFA4FA3A8D5E476A16E3FB6CFCEC3EE0C88E7DF4C43539D553081B5

All three files were scanned with Microsoft Defender before upload. Windows 11 "Bad Image ... 0xc0e90002" is Smart App Control blocking the unsigned DLLs (see the README).

Don't miss a new gears-of-war-2-pc-port release

NewReleases is sending notifications on new releases.