Skip to content

Releases: GNSB/UFC-3-PS4-PORT-LINUX-WINDOWS

UFC 3 native port 0.1.6

Choose a tag to compare

@GNSB GNSB released this 17 Oct 17:03

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.

Smoother fights with fewer GPU readbacks, a Windows launcher that fits small screens, and
./ufc3.sh --play on Linux. How to play online: HOW-TO-PLAY-ONLINE.md.

Performance

  • Exact write ranges (PR #13 by @SinLeeke). When the game writes into memory next to
    GPU-written data, the port now knows the exact bytes the write touches instead of guessing with a
    16-byte margin, so writes that only sit beside GPU data no longer force a GPU readback.
    • On by default: the exact range of the game's memcpy/memmove/memset.
    • Opt-in with BB_WRITE_WINDOW=2: guest stores are decoded too. On a GTX 1650 at 1080p,
      fights went from 51.5 FPS with alternating 8/30 ms frames to 60–64 FPS, and readbacks dropped
      from about 25/s to about 4/s. On Linux: BB_WRITE_WINDOW=2 ./ufc3.sh. On Windows: set the
      environment variable before starting SacredFire.exe.
    • Details: WINDOWS-EXACT-WRITE-WINDOWS.md.
  • New BB_GUEST_FPS_LIMIT (off by default), also from PR #13. It is a frame limit applied on
    the game's own thread, so it adds no input latency, unlike BB_FPS_LIMIT, which holds finished
    frames.

Launchers

  • Windows: on screens shorter than the launcher (768p laptops, or 1080p at 125 % scaling and
    above), the window now fits the screen and scrolls, so Play, Stop and the log can be reached
    (#14). On screens where it already fit, nothing changes.
  • Linux: ./ufc3.sh --play starts the game directly with the settings saved in the launcher
    (game folder, name, language, video and online mode), without opening the window and without
    needing GTK, like SacredFire.exe --play on Windows (#12). BB_GAME_DIR overrides the saved
    folder, and ./ufc3.sh --play /path/to/CUSA06534 still works.

Known issues

  • At 150 % scaling on a 1366-pixel-wide screen, the Windows launcher is about 20 px wider than
    the screen.
  • With BB_WRITE_WINDOW=2, some frames over 33 ms remain in some fights when the game reads
    GPU-written data.
  • Keep the log folder on a local disk for the best FPS.

Credits

  • @SinLeeke: exact write windows and the guest frame limit (PR #13), with measurements on a
    GTX 1650.
  • @SercanDmr: the --play request for Linux (#12) and the readback report (#15).
  • @waghrudraksh: reported the Windows launcher cut off on a laptop screen (#14).
  • As always: @luscamovi (AMD patches, PS4 Pro mode) and the mancelli shadPS4 fork, whose
    work this port still builds on.

UFC 3 native port 0.1.5

Choose a tag to compare

@GNSB GNSB released this 17 Oct 01:41

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.

Write windows are back on Windows, blood and sweat are back, two new launchers, and online
rematches work. How to play online: HOW-TO-PLAY-ONLINE.md.

Performance

  • Write windows on by default on Windows again (and single-stepped writes on Windows and
    Linux). UFC-48 made them coherent, which fixes the 0.1.4 heap corruption that forced them off.
    On an RTX 3060 laptop a Career fight goes from about 30 to 60–70 FPS.
  • Logs written to a network drive with frame statistics on no longer stall the GPU thread
    (readbacks.csv is flushed once a second instead of on every readback).

Graphics

  • Blood and sweat on hits are back (missing since 0.1.3; BB_PREUPLOAD=1 again), with the
    created fighter's skin still correct.

Crash and freeze fixes

  • Fixed a GPU hang (device lost) when changing hair/head repeatedly in the Career fighter editor.
  • Possible fix for AMD freezes and closes (late EOS labels were being dropped). AMD users:
    please report
    whether this helps.
  • Validated on Windows: second fight and career contract without a crash.

Launchers

  • Windows: new UFC 3 dark/gold look (your dump's own artwork in the banner), a log folder
    setting, and Offline / Join server / Host server for online play.
  • Linux: new GTK launcher with the same Offline / Join / Host modes
    (python3 launcher/ufc3_launcher.py, or ./ufc3.sh with no arguments).

Online

Experimental

  • 2K (2560x1440) and 4K (3840x2160) internal resolution in the launcher's resolution list.
    In game, choose VIDEO → RESOLUTION → Favor Resolution (the option only appears in these
    modes). Validated on Linux only.

Known issues

  • Fights on Windows still run below Linux.
  • Keep the log folder on a local disk for the best FPS.
  • "Clear shader cache" recompiles every shader on each start: leave it off.

UFC 3 native port 0.1.4

Choose a tag to compare

@GNSB GNSB released this 16 Oct 00:17

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.

Hotfix release on top of 0.1.3. It turns write windows off by default on Windows and
preserves the portrait captures the game re-reads at a different size. Nothing else
changes; see the 0.1.3 notes for the rest of the feature set.

Fixes

  • Windows crash after creating a career fighter, signing the contract or loading the
    second fight.
    Write windows corrupted the game's heap on Windows: the guest heap's
    free list ended up damaged and the game crashed, usually while the second fight loaded
    or the career contract was signed. We collected five cases (RX 9070, RTX 4090, RTX 3060
    and RX 7800 XT twice), and they happened even with BB_WRITE_STEP=0. The Windows
    launcher now defaults to BB_WRITE_WINDOW=0; with it off, the RX 7800 XT user who
    reported the crash has not crashed again. The cost is lower in-fight FPS on Windows.
    Set BB_WRITE_WINDOW=1 before starting the launcher (for example from a .bat) to
    re-enable write windows, at the risk of those crashes; a BB_WRITE_WINDOW value
    already in the environment always wins over the launcher default. Linux has no such
    reports and keeps write windows on (run.sh still sets BB_WRITE_WINDOW=1).

  • Career portraits and post-fight screen. Your fighter now appears on the post-fight
    menu, the portrait shows up in the career pause menu, and Saved Careers cards no longer
    show static over the flag. Cause: the game draws the portrait into a larger render
    target (for example 1024x2048) and then reads it back at the portrait's size
    (864x1360, 652x1080, 600x1080, 1000x1200, 360x260, 252x400…) in the same memory. The
    texture cache discarded that content and reloaded old memory instead. It now preserves
    it with a copy that stays on the GPU; the first single-mip read and the small sizes are
    covered too. BB_T4_PRESERVE_ALIAS=0 disables the preservation.
    Details: UFC-13-FIX-ALIAS.md and
    UFC-13-QUINTA-PASADA.md.

Known issues

  • Write windows on Windows: the heap corruption is now avoided by keeping them off by
    default, so this is a performance limitation rather than a crash. The underlying cause
    remains under investigation; re-enabling with BB_WRITE_WINDOW=1 brings the crash risk
    back. Linux keeps them on.
  • Long hairstyles: some leave a slightly lighter line at the base of the neck.
  • Portuguese (Portugal), BB_LANGUAGE=7: the game has no text for this language,
    even though the launcher lists it. Select Portuguese (Brazil), BB_LANGUAGE=17.
  • No online play yet; this release does not change the online implementation.

Credits

  • Thanks to everyone who sent Windows logs, including the RX 7800 XT user whose report
    confirmed that BB_WRITE_WINDOW=0 stops the crashes.
  • For the 0.1.3 credits — @luscamovi, mancelli's shadPS4 fork,
    the upstream shadPS4 authors, HeuZ and pvict — see the 0.1.3 notes.

Downloads

  • Windows: UFC3Native-ufc3-v0.1.4-windows-x86_64.zip — extract (not inside a
    OneDrive folder), run UFC3.exe, pick the CUSA06534 folder, press Play.
  • Linux: UFC3Native-ufc3-v0.1.4-linux-x86_64.tar.gz — glibc 2.38+ and python3;
    ./ufc3.sh /path/to/PS4/CUSA06534.

Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).

UFC 3 native port 0.1.3

Choose a tag to compare

@GNSB GNSB released this 15 Oct 23:29

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.

The user tested these changes on Linux with an RTX 4070 and Windows with an
RTX 3060 Laptop
. The AMD fixes also come from @luscamovi's RX 9070 testing;
individual AMD cases and the separate Windows write-window reports are identified below.
These are reported gameplay results, not new gameplay tests performed while preparing this
release. Technical provenance is recorded in gpu/VENDOR.txt,
the backport report, the career crash report
and the performance handoff, section 17.

Fixes

  • Career is saved. Previously, starting a career could display "Your career data will
    not be saved due to an error" or "An error has occurred while saving". The game mounted
    CAREERSAVE0 for reading and writing without explicitly asking to create it, so a new
    career failed with NOT_FOUND. src/runtime_savedata.c now creates a missing save for
    that read-write mount, logs every failing save call, and implements sceSaveDataLoadIcon:
    it returns the save's icon, falls back to /app0/sce_sys/icon0.png, then to a built-in
    1x1 PNG if neither exists. src/runtime_file.c also creates temp0/createplayer and
    temp0/images/{career,match}, which the game expects to open without creating first.
    These are automatic fixes with no launcher toggle or BB_* switch. Local commits:
    2fb02a3, 327737c, dcde0dd (plus 11906cd for the failure-log buffer size).
    Career saving was tested on Linux RTX 4070 and Windows RTX 3060 Laptop; @luscamovi
    supplied the career-save patches from the AMD RX 9070 work. Saving successfully does
    not yet verify the career pause-menu portrait; see Known issues.

  • Career no longer crashes on entry. A pre-existing runtime import had the wrong
    signature: sceKernelConvertLocaltimeToUtc took four arguments instead of five.
    When the game's mktime passed tm_isdst=-1 as the second argument, the runtime
    treated it as an output pointer and wrote to 0xffffffff, causing a host SIGSEGV
    on Linux. src/runtime_kernel.c now accepts the missing integer argument so that
    all three output pointers occupy the correct positions (5ba1246). This is an
    automatic ABI correction, not a GPU workaround and not a regression introduced by
    the shader backports. Career entry was tested on Linux RTX 4070 and Windows RTX
    3060 Laptop; the address-level diagnosis is documented in the career crash report.

  • Hair has coverage instead of square cards. Previously, hairstyles appeared as
    flat, hard-edged rectangles because the renderer ignored DB_ALPHA_TO_MASK.
    The fragment shader now converts alpha into a hardware-style 2x2 dither pattern,
    including on MSAA targets, and applies to every draw that sets the register: hair
    and beards in Create Fighter and in fights alike (06d0b6b). A dark torso seen
    during development came from the created fighter's broken skin under the hair
    layer, which the skin fix below resolves. This adapts mancelli's 69ab1996 in the
    shader exporter, Vulkan pipeline/cache and runtime info; local refinements select
    the plain shader first and the dither variant only for draws that actually need it.
    The fix is on by default. BB_ALPHA_TO_MASK=0 disables it; =coverage uses Vulkan
    alpha-to-coverage on multisampled targets; =colourmap limits it to draws sampling
    the runtime 8_8_8_8 sRGB hair colour map (Create Fighter only).
    Diagnostic controls BB_ALPHA_TO_MASK_SKIP=<ps-hash>,... exclude pixel shaders,
    and BB_ALPHA_TO_MASK_DRAWS=<index-count>,... select draws (negative entries exclude
    them). Hair, beards and torso were checked on Linux RTX 4070 in Create Fighter
    (repeated hairstyle changes) and in career fights.

  • Created-fighter skin survives repeated editing. Changing hairstyles or skin
    tones several times used to leave black or garbled patches. The game compresses
    these textures on the GPU: the texture cache now tiles an uncompressed storage
    image into the memory/buffer-cache path before uploading its block-compressed
    view, and writes back overlapping storage images before creating that view.
    Compatible skin texture views requesting more mip levels or layers now expand
    the cached image instead of discarding it. This is the partial backport of
    mancelli's 01b32f45 in video_core/texture_cache (local 5875804, parts 1, 2 and 4).
    SHADPS4_BC_MODE=3 is the default; =0 restores the older compressed-view/copy and
    storage-alias behaviour for comparison. The compatible-view expansion remains
    automatic. There is no launcher checkbox. The fork's CPU-write fault flush and
    dispatch-level StorageImageSync were not imported. Skin editing was tested on
    Linux RTX 4070 and Windows RTX 3060 Laptop; keep pre-upload and write step off
    as described under Defaults changed.

  • Shadows use the right depth representation and release their temporary copies.
    Emulating guest Z16+S8 with a host 24/32-bit depth format previously made the
    constant depth bias too small, causing shadow acne or flicker. vk_rasterizer.cpp
    now scales it according to the actual host format: x256 for the emulated formats,
    x1 for real D16. This adapts mancelli's c08218db (local 25998f2) and respects
    BB_Z16S8_AS_D16=1, the launcher/run.sh default; =0 requests the other depth/stencil
    path. The bias correction itself is automatic. A shader reading 32-bit depth as
    R32_UINT now receives a colour copy containing the original float bits, rather
    than an invalid depth-as-colour view. Copies are keyed by image identity and freed
    with their source image, ending unbounded growth; replaced per-layer source views
    are also destroyed, fixing a smaller view leak. Those parts of mancelli's
    72251298 are local aa4bd2b, with no separate toggle. Shadows were checked on
    Linux RTX 4070 and Windows RTX 3060 Laptop; AMD's layer-view corrections are below.

  • Colour metadata no longer leaves untouched MSAA layers undefined. Pending fast
    clears are now applied when FMASK is decompressed. Previously, an MSAA image the
    GPU had never drawn to could escape clearing, allowing stale skin or dot-grid
    data to appear when layers such as tattoos were resolved. vk_rasterizer.cpp
    now clears those images too. Sources: upstream 14ada48a / PR #5283 by Claudio
    Godoi (local 631f49f) and the MSAA portion of mancelli's 789551b0 (local
    58b2425). These fixes run automatically; the fork's SHADPS4_FMASK_DECOMPRESS
    switch was not imported. Create Fighter was tested on Linux RTX 4070 and Windows
    RTX 3060 Laptop; the stale-fighter/dot-grid failure mechanism is documented in
    the backport report rather than a claim that every such artifact was reproduced
    on each card.

  • Shader recompilation follows GCN more closely. Incorrect floating-point and
    execution semantics could corrupt shading, propagate NaNs into black areas, or
    select the wrong per-instance data. These backports in shader_recompiler and
    Vulkan blending are automatic, with no launcher or per-fix BB_* toggle:

    • GCN NaN handling for legacy instructions, unordered comparisons, DX10_CLAMP
      and med3: TheTurtle's c4952908 / #5257. mancelli's 5dedb48f also preserves
      the full 256-register count instead of truncating it to zero.
    • NaN-aware 32/64-bit min/max: mancelli's 02d3b06d, using NMin/NMax so the
      non-NaN operand survives as on GCN. The report identifies Intel Arc as a motivating
      case; no new Intel test is claimed here.
    • Correct clamp/legacy handling for V_RCP, V_RSQ and V_LOG: DanielSvoboda's
      1c2b8f97 / #5346, preventing incorrect exceptional results in shader maths.
    • Preserve the active-lane EXEC scope after an empty branch: artemkaVG's
      c34ca21f / #5220, so later instructions execute for the correct lanes.
    • Unbiased instance IDs for every use, and step rates with a base instance:
      TheTurtle's 7721a1ef / #5260 and Chris Chreece's 10393d2c / #5274.
    • Correct ZERO/ONE blend factors with MIN/MAX blend operations:
      kiwakiwaa's c5dd8b8b / #5197, preserving the intended layer composition.
      The resulting build was gameplay-tested on Linux RTX 4070 and Windows RTX 3060
      Laptop; these are correctness fixes, not individually isolated before/after
      visual claims on every GPU. The first launch rebuilds the shader cache because
      the generated shaders, metadata and pipeline keys changed. Expect compilation
      work again on that launch.
  • AMD RDNA floor and depth/stencil fixes. @luscamovi's RX 9070 showed grain and
    black blocks on the octagon floor even after the earlier per-layer shadow fix.
    Three driver-sensitive paths are corrected:

    • Subgroup memory fences around LDS stores preserve GCN's expected ordering.
      The floor's parallel scan had effectively restarted every 16 lanes because
      the AMD compiler reordered shared-memory accesses (82b8396, SPIR-V shared
      memory emitter). Enabled by default; BB_LDS_ORDER=0 disables it for comparison.
      Clear the shader cache when changing this setting.
    • BC5 images that the driver rejects with storage usage/block-texel views are
      retried without those unsupported flags, rather than created with undefined
      contents (45fd5b0, texture-cache image.cpp). Automatic, no toggle.
    • Each depth-to-colour layer conversion uses its own 2D depth view instead of
      passing a 2D-array view to a texture2D shader (54e5471). With
      BB_Z16S8_AS_D16=1, host images and pipelines consistently use D16, including
      on AMD drivers advertising partial D16S8 support (338222e, vk_instance.cpp).
      =0 disables that D16 override; the 2D-view correction remains automatic.
      These cases were diagnosed and tested on AMD...
Read more

UFC 3 native port 0.1.2

Choose a tag to compare

@GNSB GNSB released this 14 Oct 19:53

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows and Linux.
No game files are included: you need your own dump of the game and its 1.14 update.

Fixed

  • Octagon floor noise and gray blocks. The spot-light shadow map is a 6-layer depth array
    that the game reads layer by layer as raw 16-bit values to build its shadow min/max map; only
    the first layer was converted, so five of the six lights produced garbage shadows on the
    canvas. Every layer is converted now.

Downloads

  • Windows: UFC3Native-ufc3-v0.1.2-windows-x86_64.zip — extract (not inside a OneDrive
    folder), run UFC3.exe, pick the CUSA06534 folder, press Play.
  • Linux: UFC3Native-ufc3-v0.1.2-linux-x86_64.tar.gz — glibc 2.38+ and python3;
    ./ufc3.sh /path/to/PS4/CUSA06534.

Known issues

  • Untested on AMD GPUs. No online play yet (EA's servers closed in February 2025).

Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).

UFC 3 native port 0.1.1

Choose a tag to compare

@GNSB GNSB released this 14 Oct 19:33

Native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) — now with a Linux build.
No game files are included: you need your own dump of the game and its 1.14 update.

Downloads

  • Windows: UFC3Native-ufc3-v0.1.1-windows-x86_64.zip — extract (not inside a OneDrive
    folder), run UFC3.exe, pick the CUSA06534 folder, press Play.
  • Linux: UFC3Native-ufc3-v0.1.1-linux-x86_64.tar.gz — glibc 2.38+ (Ubuntu 24.04+,
    Debian 13+, Fedora 39+, Arch, SteamOS) and python3; SDL3 and the other libraries are
    bundled. tar xf ... && cd UFC3Native && ./ufc3.sh /path/to/PS4/CUSA06534. Settings in
    ~/.local/share/UFC3Native/ufc3.conf, controls in bbport.ini there (see README-Linux.md).
  • .sha256 files: checksums.

Changes since 0.1.0

  • Intro videos skipped by default: the EA logo and the 2.5-minute first-start video play a
    short black clip instead (launcher: "Skip the intro videos"; Linux: BB_SKIP_MOVIES=0 in
    ufc3.conf to watch them).
  • Linux release archive (portable build: bundled SDL3/libstdc++, relative library paths).
  • Windows launcher: when a program in bin\ cannot start (e.g. error 0xC0000022, access
    denied — usually an antivirus, a OneDrive-synced folder or a blocked zip), the log explains
    it instead of a system error box.
  • No build-machine paths in the binaries' log messages.

Known issues

  • Noise / gray blocks on the octagon floor. Untested on AMD GPUs. No online play (EA's servers
    closed in February 2025).

Problems: attach the newest log (%LOCALAPPDATA%\UFC3Native\logs on Windows,
~/.local/share/UFC3Native/logs on Linux).

UFC 3 native port 0.1.0

Choose a tag to compare

@GNSB GNSB released this 14 Oct 19:16

First release of the native EA SPORTS UFC 3 port (PS4 CUSA06534, update 1.14) for Windows.
Linux: build from source (bash build.sh && bash run.sh, see the README).

No game files are included — you need your own dump of the game and its 1.14 update.

Download

UFC3Native-ufc3-v0.1.0-windows-x86_64.zip — extract, run UFC3.exe, pick the CUSA06534
folder (the -patch folder next to it is merged automatically), press Play.
The .sha256 file has the archive's checksum.

What's in it

  • Playable: menus, fights, sound, controller, saves, local 2-player.
  • Performance (RTX 4070 / Ryzen 5 5600, Linux): menus 240 FPS (the game's cap), fights
    137–196 FPS uncapped. On an RTX 3060 Laptop (Windows) menus run at 240 FPS; fights were
    66–83 FPS before this release's write-window change and still need to be measured with it.
  • Launcher (God of War III port style): game and display resolution (1080p / 1440p / 4K with
    AMD FSR 1.0 + RCAS), FPS limit up to unlimited, present mode, fullscreen, player name, and a
    Controls editor for keyboard and gamepad.
  • Separate update folders merged automatically (hard links).

Known issues

  • Noise / gray blocks on the octagon floor.
  • The first-run tutorial videos cannot be skipped.
  • Untested on AMD GPUs.
  • Online play is not available (EA's servers closed in February 2025). For two players at a
    distance: local 2-player with Steam Remote Play Together or Parsec.

Problems: attach the newest log from %LOCALAPPDATA%\UFC3Native\logs.