Skip to content

Releases: monscriser/UFC3MONS

UFC Undisputed 3: Recompiled — BETA 1.1

Choose a tag to compare

@monscriser monscriser released this 30 Oct 11:44
37bebc1

🥊 UFC Undisputed 3: Recompiled — BETA 1.1

Changes since BETA 1.0

🛠️ Fixes

Issue What was wrong Now
📺 Screen tearing The game always preferred a present mode without real sync, even with VSync on New VSync option in the Video tab: Mailbox (recommended), FIFO or Off. The default no longer tears
🐧 "Capturing Vulkan" overlay (Linux) If RenderDoc was installed on the system, the game loaded it by accident and its overlay appeared on screen RenderDoc is only used if you attached it on purpose

🎛️ New: VSync option

Under Video and language, choose how frames reach the screen:

Option Effect
Mailbox (recommended) No tearing, quick response. This is the default
FIFO Classic VSync: no tearing, slightly slower response
Off Quickest response, but the picture may tear

If your graphics card has no Mailbox mode, the game uses FIFO instead.

Tested in a fight on a desktop RTX 5060 Ti, with Mailbox and FIFO giving the same result:

Situation Mailbox FIFO
Normal 60 FPS, normal speed 60 FPS, normal speed
Slow PC simulated 44 FPS, normal speed 44 FPS, normal speed

The slow-motion fix from BETA 1.0 still works with both.

🚀 Performance: direct texture loading

Common textures (32-bit, single level) are now written straight into the GPU texture, skipping an extra copy. This technique comes from my Hydro Thunder Hurricane port.

  • Measured gain: about 0.25–0.35 ms of GPU time per frame (around 5%) on a desktop RTX 5060 Ti. It varies by scene.
  • The picture is unchanged: a proof mode compared every loaded texture with the original path, with 0 differences (19.3 billion texels on Windows, 6.5 billion on Linux).

⚠️ Not tested yet

  • Real AMD or Intel GPUs (ROG Ally, Steam Deck, Iris Xe)
  • The Original edition in a fight

If you still see tearing or the overlay, please send your log.

If the overlay still appears on Linux, check whether ENABLE_VULKAN_RENDERDOC_CAPTURE=1 is set on your system.

📥 Downloads

File Platform
UFC3MONS-BETA1.1-Windows.zip Windows 10/11 (Launcher-Config.exe, UFC3.exe, data)
UFC3MONS-BETA1.1-Linux-x86_64.AppImage Linux x86-64 (needs glibc 2.38+)

A .sha256 file is included for each download.

You need your own copy of UFC Undisputed 3 (Xbox 360). No game files are included.


📌 About the next update: the next release will take a while. I'll be waiting for more user reports and logs to analyze, and for the release of Reborn 1.2 before going back to larger optimizations and fixes. In the meantime, I'll keep working on small optimizations that have already been identified, but they will only ship at a future date that isn't set yet.

UFC Undisputed 3: Recompiled — BETA 1.0

Choose a tag to compare

@monscriser monscriser released this 29 Oct 23:11
37bebc1

🥊 UFC Undisputed 3: Recompiled — BETA 1.0

The experimental phase is over. This is the first beta.

This build was planned for October 31. It has already been verified and tested, so I decided to release it early. 🎉

Changes since R9.4-P14.5


⭐ Headline: no more slow motion below 60 FPS

UFC 3 moves the fight forward by a fixed step per frame (1/60 s). When a PC or handheld could only render 45 FPS, the whole fight ran at 75 % speed: punches, movement, the clock, everything.

The game already has a 30 FPS mode with a doubled step, which it uses for the pre-fight presentations. That is why those always looked smooth.

BETA 1.0 applies the same idea to the fight itself. Anywhere between 60 and 30 FPS, the step now follows the real frame time (31, 40, 45, 59…). The fight keeps its normal speed and only becomes less smooth.

Game speed when the frame rate drops (same fight, slow PC simulated)

                 FPS    Game speed
R9.4-P14.5      47.9    ████████████████░░░░   80 %   ← slow motion
BETA 1.0        43.9    ████████████████████  100 %   ← normal speed
BETA 1.0 @60    60.0    ████████████████████  100 %   (original values, nothing changes)
Frame rate R9.4-P14.5 BETA 1.0
60 FPS ✅ normal ✅ normal (untouched)
59 → 31 FPS 🐌 slow motion ✅ normal speed, less smooth
30 FPS 🐌 half speed ✅ normal (the game's own 30 FPS mode)
below 30 FPS 🐌 slow motion 🐌 still slows down
  • It is on by default, in every edition (Reborn and Original, Windows and Linux).
  • It works however you start the game: launcher, double click or Steam shortcut.
  • The Original edition uses the same timing values as Reborn, and the fix was tested on both.

🚀 New: lighter GPU work (direct resolve)

To copy what the game has drawn, the emulator used to dump the whole Xbox 360 video memory first. It now builds those copies straight from the rendered image. This technique comes from my Hydro Thunder Hurricane port.

GPU time for one fight frame (desktop GPU, lower is better)

                     total     work between draws
Before   8.87 ms  ██████████████████  ███████████ 5.65 ms
BETA 1.0 6.79 ms  ██████████████      ██████      3.12 ms
                  −23 % per frame     −45 % copying work
  • The picture is unchanged. A proof mode compared 8,309 copies word by word (7.8 billion words): 0 differences. A deliberately broken control was detected every time.
  • Handhelds and laptops (ROG Ally, Steam Deck, integrated GPUs) should gain more, because memory copies cost them much more than they cost a desktop GPU.

🧩 New: Mods tab

  • Add mod…: pick community files (.pac, .mpc…). The launcher works out which game file each one replaces.
  • Your game folder is never changed. The game reads a copy of the mod instead of the original file.
  • Untick a mod to switch it off. Remove brings the original file back.
  • Works with Reborn and with the Original edition extracted to a folder. It does not work when the game is read straight from an ISO.

⚡ New: optional "Pre-compile shaders" button

  • The package only ships the list of effects the game uses (237 shaders, 451 pipelines). Your own GPU driver compiles them, so nothing built for another machine is used.
  • No black window while it runs, and a progress bar shows "N of 451 shaders".
Shaders compiled in the middle of a fight (new player)

Without pre-compile   ████████████████████████  256  ← stutters
With pre-compile      ·                           0

🎨 New: texture filtering option

Under Video and language, choose the anisotropic filtering: As the game asks / Off / 2x / 4x (default) / 8x / 16x. Higher values keep the floor, the Octagon and the canvas sharp at an angle, and cost little on the GPU.


🛠️ Fixes

Area What was wrong Now
🎮 Steam / UFC3 shortcut Games started from Steam or a double click did not get the newest options (slow-motion fix, mods) The UFC3 front door is rebuilt with every release, and important fixes are on by default inside the game
💥 Closing the window (Windows) Crash when closing (3 of 3 runs) Fixed (0 of 5 runs)
📦 DLC install, long folder paths "Name too long" / "path not found" errors Installs; if a path is really too long, a clear message says how many characters are needed
🖥️ Laptops with two GPUs The game could pick the integrated GPU (19 FPS on an RTX 5060 laptop) The dedicated GPU is picked automatically (--vulkan_device=N still forces one)
📝 Crash report Crashes left no trace Writes a [ufc-crash] line and a small .dmp file next to the log
🏷️ Build name in the log Showed an old internal name Shows UFC3MONS-BETA1.0

🔭 Optimization plans (next betas)

A per-draw GPU trace of a fight showed that about half of each frame is emulation work between draws (copies, resolves, texture loads). That is exactly what the Hydro Thunder optimizations removed.

Where one fight frame's GPU time goes (BETA 1.0, desktop GPU)

Game drawing        ██████████████████████████  ~54 %
Emulation copies    ██████████████████████      ~46 %   ← target of the next betas
# Optimization (from the Hydro Thunder port) Status Expected effect
1 Direct resolve ✅ in BETA 1.0 −23 % GPU time per frame
2 Resolve writes straight into the texture 🔜 next skips reloading textures the GPU just made
3 Direct texture loading 🔜 next faster texture uploads
4 Skip copies before full-screen clears 🔍 checking only if UFC clears like Hydro does
5 Single-sample remap of MSAA clears 🔍 checking only if UFC clears like Hydro does
6 AppImage that runs on older Linux distributions 🔜 planned adds Ubuntu 22.04, Debian 12, Mint 21

Each one ships only with the same rules as BETA 1.0:

  • an exact proof that the image is identical;
  • a deliberately broken control that must be detected;
  • a before/after measurement in a real fight.

The goal is to keep fights at 60 FPS on handhelds at low power (ROG Ally at 20 W).


📥 Downloads

File Platform
UFC3MONS-BETA1.0-Windows.zip Windows 10/11 (Launcher-Config.exe, UFC3.exe, data)
UFC3MONS-BETA1.0-Linux-x86_64.AppImage Linux x86-64 (needs glibc 2.38+: Arch/CachyOS, Bazzite, Fedora 39+, Ubuntu 24.04+ and other recent distributions)

A .sha256 file is included for each download.

You need your own copy of UFC Undisputed 3 (Xbox 360). No game files are included.

UFC Undisputed 3: Recompiled — R9.4-P14.5

Choose a tag to compare

@monscriser monscriser released this 28 Oct 23:39
7b81e7a

UFC3MONS P14.5 — what changed since P7

Native PC/Linux port of UFC Undisputed 3 (Xbox 360), statically recompiled with the ReXGlue SDK.
This page sums up every build from P7 to P14.5: performance, fixes, new launcher and the new Cheats tab.

Headline: on the ROG Ally at 20 W, a Career fight now runs at a locked 60 FPS (it was 46–50 FPS in P14.4).


Highlights

⚡ Linux performance fix Write-watch page faults were ~5.6× cheaper after the fix; Career fights on the Ally at 20 W went from 46–50 to 60 FPS
🎙️ Bruce Buffer is back His ring announcements play again (XMA decoder fix)
🖥️ AMD FSR 1 Optional upscaling: draws at 720p, upscales to your resolution with ~half the GPU use
🧵 Two-thread GPU submission Command submission moved off the emulation thread
🎮 New launcher New layout, Portuguese / English / Spanish
🃏 Cheats tab Full training rewards in Auto mode, and double money from Career fights (both off by default)
🧠 Fighter entrance memory fix No more exploding geometry, floor glow or freeze during walkouts
👕 Reborn shirts All 342 Reborn fighter models now get a shirt

Performance

ROG Ally (Linux, Steam Game Mode, 20 W TDP) — Career fight

FPS during the fight (higher is better, target 60)

P14.4  |████████████████████████████████████████▏           46–50 FPS
P14.5  |██████████████████████████████████████████████████  60 FPS (locked)
       0         10        20        30        40        50        60

Same fight, same 20 W power limit, measured from the game's own logs:

Metric (Career fight, Ally @ 20 W) P14.4 P14.5 Change
Average FPS 46–50 60 +20–30%
Cost of one write-watch page fault ~330 µs ~59 µs 5.6× faster
Time spent in page faults ~280 ms per second 61 ms per second −78%
Game's command-building thread (RenderCmdManage) 461–530 ms/s 294 ms/s −40%
GPU clock (average) swinging 800–2000 MHz ~1790 MHz, stable —
Power (PPT) 20 W 20 W same
Cost of one page fault on Linux (lower is better)

P14.4  |██████████████████████████████████████████████████  ~330 µs
P14.5  |█████████                                           ~59 µs
PC     |██                                                  ~9 µs   (Windows, for reference)

What was wrong: the emulator protects the guest memory the game writes to, so it knows when to re-upload it to the GPU.
Every time the game writes to a protected page, a page fault happens, roughly 850–1050 per second in a fight.
On Linux, the fault handler checked the page protection by reading and parsing the whole /proc/self/maps file on every
fault
. With thousands of watched regions that file is huge. Windows answers the same question with a fast system call.
That is why the Ally was hurt while the PC wasn't.

The fix (ufc_fault_fast_path, on by default): the handler now runs the normal write-watch path first and only does
the slow check in the rare case where the page was not being watched (a race between threads). Under the emulator's
global lock the watch flag and the page protection always change together, so the result is the same as before.

How it was proven:

  • Unchanged-recipe check: rebuilding the runtime with the same recipe but without the change gives the P14.4 runtime
    back (byte for byte on Linux; on Windows only the 6 build-timestamp bytes differ).
  • PC A/B: cost per fault dropped from 12.05 to 9.4 µs, and the slow path was never needed.
  • Ally: two measurement builds first split the fault time into "waiting for the lock" (≈0) and "work inside the
    handler" (all of it). A third build with the fix gave the 60 FPS result above.

Two-thread GPU submission (P14.3)

Time per frame spent submitting work to the GPU (lower is better)

before |██████████████████████████████████████████████████  1.216 ms
after  |███▍                                                0.083 ms
  • The "GPU Commands" thread went from 175 to 126 ms of CPU per second.
  • With UFC_ASYNC_VERIFY=1, 26,686 submissions were checked with 0 differences.

AMD FSR 1 upscaling (P14.2)

GPU usage, same scene (lower is better)

1440p render (2x)   |██████████████████████████████████████  37.7%
720p + FSR 1        |████████████████████                    20%
  • FSR 1 is optional and off by default. Sharpness is the same as native rendering.
  • It is not used on 16:10 screens or when the image has black bars.

Constant-buffer cache (P7)

  • The backend keeps up to 32 constant-buffer descriptor sets per frame instead of just the last one.
  • The constant-binding stage got 4.3% cheaper (0.774 → 0.741 ms per frame). This is that stage only, not total FPS.
  • 66.9 million comparisons checked with 0 differences.
  • With P7, Career mode on the Ally was reported smooth in real play (user test, no benchmark numbers).

Memory and descriptor batching (P10)

  • Pages that share the same protection state are processed in batches.
  • Texture and sampler descriptor sets are reused exactly within a submission.

Fixes

Build Fix Proof
P13 Fighter entrance: exploding geometry, floor glow, cut-off crowd and a freeze. The game makes ~3,250 range-restricted physical allocations in about 1 s inside a 47 MB window; the window filled up and 29 allocations failed. A full window now falls back to free physical memory elsewhere (ufc_ranged_alloc_fallback). 0 failed allocations, defect gone (confirmed by hand)
P14.1 Bruce Buffer silent: the XMA audio decoder kept the leftover samples of each block and never released them at the end of short clips, so the announcer clip never finished. Fixed with ufc_xma_flush_carry. Off: the walkout scene hangs. On: 3 out of 3 runs reach the fight
P14.5 Launcher setting glitch: the game and the launcher were built against two versions of the settings header, so a newly added option could start with a random value. Both now share the same header. Windows and Linux write every option as off on first start
P13 Original edition gets the 1 ms timer fix that Reborn already had —

New launcher (P14)

  • New design with the header art. Tabs: Home, Video & language, Keyboard & controller, Saves & logs, Cheats.
  • Three interface languages: Português (Brasil), English, Español.
  • Game source: Reborn folder, Original (XEX or folder) or ISO (the ISO is read directly, nothing is extracted).
  • Install DLC from a folder. Add to Steam creates a shortcut with artwork.
  • The performance switches are no longer on screen: the validated optimizations are always on.
  • Write logs stays off by default.

Cheats tab (P14.4 – P14.5)

Both cheats are off by default and saved between sessions. They also work while the game is running: the launcher
writes cheats.ini, and the game reads it again each time it needs the value.

Full Training Rewards (Auto Mode)

Choosing AUTO in a Career training session gives the reward of the best Manual Training grade (4 stars).

Same save, same drill ("Heavy bag") Stars Speed Footwork Standing strikes
Off (original game) ★★☆☆ 51 → 54 56 → 58 56 → 58
On ★★★★ 51 → 56 56 → 59 56 → 59
  • The hook runs the game's own automatic-training routine, then raises only the grade.
  • The reward itself is applied by the game, exactly as in manual training.
  • The gains were saved and show up on the fighter screen.

Double Money (Creds earned from fights)

The Creds you earn from each Career fight count twice, capped at the game's own maximum.

Simulated Career fight Game's own result Shown and saved
Off 5,100 (win) 5,100
On 1,600 (loss) 3,200
  • Found with a hardware write breakpoint on the Creds field.
  • The function involved is only used for fight results, so shop purchases and other systems are untouched.

Reborn shirts (P11 – P12)

  • All 342 Reborn fighter models now get a shirt: 150 existing styles were kept and 192 missing ones were added.
  • Each model always gets the same shirt (114 variants), so it doesn't change between fights or restarts.
  • The game's original files are never modified: compatible copies are created on first start.

Timeline

P7    ── constant-buffer cache · Career reported smooth on the Ally
P8    ── investigation build (presentation timing)
P9    ── investigation build (Exhibition pacing) · cheat research started
P10   ── memory-protection batching · descriptor reuse · launcher cleanup
P11   ── shirts for all 342 Reborn models
P12   ── varied shirts (fixed per model)
P13   ── fighter entrance memory fix · 1 ms timer for Original
P14   ── new launcher (PT/EN/ES)
P14.1 ── Bruce Buffer fixed
P14.2 ── AMD FSR 1
P14.3 ── two-thread GPU submission
P14.4 ── Cheats tab: Full Training Rewards (Auto Mode)
P14.5 ── Linux page-fault fix (Ally 20 W: 60 FPS) · Double Money cheat

Downloads

File Platform
UFC3MONS-P14.5-Windows.zip Windows x64
UFC3MONS-P14.5-Linux-x86_64.AppImage Linux x86-64 (SteamOS, CachyOS, …)

The Windows zip contains only Launcher-Config.exe, UFC3.exe and data/. Each file has a matching .sha256.

Requirements: a Vulkan GPU, and a CPU with SSE4.2 (x86-64-v2). AVX2 is not required.
You need your own copy of the game (Reborn folder, Original XEX or ISO); no game files are included.

Known limitations

  • Some menu and transition moments still run at 30 FPS; these match in-game vid...
Read more

UFC Undisputed 3: Recompiled — R9.4-P7

Choose a tag to compare

@monscriser monscriser released this 24 Oct 22:24
7b81e7a

UFC Undisputed 3: Recompiled — R9.4-P7

Career Mode Improvements • Translation Updates • Performance Validation • Bug Fixes

R9.4-P7 is an experimental test build featuring improvements to Career Mode, updated translations, performance optimizations, and several bug fixes.

Performance improvements and fixes have undergone testing, with verified results. However, this build is still under development and may contain unresolved issues.

Important Notes

  • Career Mode: Improved performance and stability.
  • Translations: Additional corrections and improvements.
  • Performance & Bug Fixes: Tested and validated improvements.
  • Launcher: Still contains unnecessary and experimental options that will be cleaned up in future releases.

Next Release — October 31, 2026

Our goal of delivering a more polished and stable release on October 31, 2026 remains unchanged.

This date is still tentative, but development is actively moving forward.

Thank you for your continued support and feedback!

— UFC3MONS RECOMP Development

UFC UNDISPUTED 3 - UFC3MONS RECOMP | R9.4

Choose a tag to compare

@monscriser monscriser released this 22 Oct 20:38
7b81e7a

UFC Undisputed 3: Recompiled — R9.4-P1

Performance Improvements • Stability Updates • Known Issues • Next Release Roadmap

R9.4-P1 builds upon the improvements introduced throughout the R9 development cycle, including CPU and GPU optimizations, memory handling improvements, and graphical compatibility fixes.

Our development efforts are currently focused on improving Career Mode performance and addressing several known issues affecting the Original and Reborn editions.

The next update is currently targeted for October 31, 2026, with two important Reborn fixes already implemented in development and additional corrections underway.


Performance at a glance

Historical development testing demonstrated significant performance improvements between R8 and R9.

Fight FPS — Historical performance

Observed Fight FPS — higher is better

R8 ████████████████████ ~30 FPS
R8.3 ████████████████████████ 33–36 FPS
R8.4 ███████████████████████████ 36–41 FPS
R8.5 ████████████████████████████████████████ 57–60 FPS
R9 ████████████████████████████████████████ Up to stable 60 FPS

Bars are illustrative and based on the upper reported FPS values.

CPU usage improvements

CPU Core Equivalents — lower is better

R8 ████████████████████████████████████████ ~3.7
R8.3 █████████████████████████████████▌ ~3.1
R8.4 █████████████████████████████████▌ ~3.1
R8.5 ███████████████████████ ~2.1

R9 No separate CPU remeasurement recorded

Historical performance comparison

Version Fight FPS CPU Core Equivalents
R8 ~30 ~3.7
R8.3 33–36 ~3.1
R8.4 36–41 ~3.1
R8.5 57–60 ~2.1
R9 Up to stable 60 Not remeasured

These issues do not necessarily affect every device, game mode, or hardware configuration.

Performance and stability improvements will be prioritized before secondary interface corrections.


Next Release Roadmap — October 31, 2026

We are currently working toward publishing the next UFC3MONS RECOMP update by October 31, 2026.

Current development priorities

DEVELOPMENT PRIORITY
  1. PERFORMANCE
    Career Mode FPS, frame times, and stability

  2. GAMEPLAY INTERFACE
    Restore missing Career Mode fighter HUD

  3. REBORN COMPATIBILITY
    Arenas and referees — FIXED IN DEVELOPMENT
    PT-BR translation — FIXED IN DEVELOPMENT

  4. POST-FIGHT GRAPHICS
    Restore missing fighter shirt in Reborn

Expected improvements

The next build is intended to deliver:

  1. Improved Career Mode FPS and stability on affected systems.

  2. Restored original fighter HUD and stamina indicators.

  3. Corrected arena and referee visibility in Reborn Exhibition Mode.

  4. Corrected Brazilian Portuguese translation with Reborn.

  5. Corrected fighter-shirt rendering after Reborn Exhibition fights.

Release date: October 31, 2026 — Tentative

This is our target date, not a guaranteed release date.

Additional testing may be required, and unresolved fixes may be postponed if they cannot be completed and validated safely.

We prefer releasing stable, verified corrections rather than rushing incomplete changes.


Community Feedback & Bug Reports

Community testing is extremely valuable for improving UFC3MONS RECOMP.

If you encounter a bug, crash, graphical issue, or performance problem, please provide:

  • CPU and GPU model.

  • Operating system.

  • Graphics driver version.

  • Original or Reborn edition.

  • Affected game mode.

  • Steps required to reproduce the issue.

  • Screenshots or videos, when applicable.

  • Relevant game logs.

Detailed reports help us identify hardware-specific problems and prioritize fixes.


Final Notes

UFC3MONS RECOMP continues to evolve with a focus on three main objectives.

PERFORMANCE: Higher FPS, lower CPU overhead, and more stable frame times.

STABILITY: Fewer crashes, improved synchronization, and more reliable gameplay.

COMPATIBILITY: Better support for Original and Reborn editions, controllers, translations, and graphical features.

Our immediate priority is Career Mode performance. Two important Reborn corrections are already completed in development, and the remaining known issues continue to be investigated for the upcoming release.

Thank you to everyone supporting the project, testing new versions, and reporting problems.

— UFC3MONS RECOMP Development


UFC3MONS RECOMP is an unofficial community project and is not affiliated with or endorsed by the original game's developers or publishers. Reborn remains the work of its respective creators.

UFC UNDISPUTED 3 - UFC3MONS RECOMP | R9.3

Choose a tag to compare

@monscriser monscriser released this 22 Oct 10:33
7b81e7a

UFC3MONS R9.3 — what changed since R9

Windows and Linux, Reborn and Original. Three fixes on top of R9: two graphics bugs in the Original edition, plus lower CPU use. Every change has an on/off switch, and each one was checked with an A/B test: the same build with the fix switched off brings the old behavior back.

R9 ──► R9.1 ──────────────────► R9.2 ────────────────────► R9.3
       invisible opponent       black tattoo rectangle     timer thread
       fixed (runtime)          fixed (video plugin)       stops spinning (runtime)

1. Original: invisible opponent fixed (R9.1)

In Career mode, the second fighter's body was not drawn; only the shadow was visible.

Root cause: during the Career intro video, a GPU memory-export draw marks a ~24 MB block of memory as "written by the GPU" while that memory is still unallocated. Because the pages were free, the port never set up the write watch that tells the GPU when the CPU changes them. The game then loads the second fighter's mesh into that same memory. The CPU writes the model, but the GPU never sees it and keeps using zeroed index data, so the body comes out as degenerate triangles.

Fix: when the game allocates physical memory, the runtime now tells the GPU that its copy of that range is stale. The next GPU read uploads the CPU data, and write tracking works from then on. Switch: ufc_invalidate_on_physical_alloc (default true).

Opponent body in the Career training session
  without fix   ░░░░░░░░░░░░░░░░░░░░  invisible (shadow only)
  with fix      ████████████████████  visible
  fix off again ░░░░░░░░░░░░░░░░░░░░  invisible  (control)

2. Original: black rectangle on tattoos fixed (R9.2)

In the fighter editor, adding a tattoo painted a black rectangle over part of the torso.

Root cause: the editor builds the tattoo layer texture (2048×1024) in several tiles. One tile uses a window scissor that starts at y = −320. The 14-bit register stores it as 0x3EC0, and the port (like upstream Xenia) read it as +16064, far outside the screen. That copy was dropped as "Resolve region is empty", so that band of the texture stayed zeroed, which renders as opaque black.

Fix: window scissor values above 8192 (the hardware maximum) are now read as negative. Switch: ufc_signed_window_scissor (default true).

"Resolve region is empty" errors when the editor opens
  R9.1          ███  3
  R9.2          ·    0
  fix off again ███  3  (black rectangle back)

3. Lower CPU use: the timer thread no longer spins (R9.3)

Root cause: every 1 ms the runtime updates a clock the game reads (the Xbox kernel timestamp). Between updates, the timer thread did not sleep: its spin-wait kept yielding and only slept 1 ms on every 20th turn. On Linux the same thread also runs the game's own timers.

Fix: the thread now sleeps until the next timer is due. On Windows it uses a high-resolution waitable timer, elsewhere a precise condition-variable wait, and it wakes at once when a new timer is queued. Switch: ufc_timer_queue_sleep (default true).

Measured on Windows, Original Exhibition, CPU vs CPU, same fighters and arena, same build, only the switch changed:

Timer thread CPU (ms of CPU per second)
  before  ██████████████████████████████████████████  88
  after   ███▌                                         < 8

Whole game process CPU (ms of CPU per second; 1000 = one full core)
  before  ██████████████████████████████████████████  1137–1214
  after   ██████████████████████████████████▍         982   (≈ 13% less)

Fight frame rate
  before  ~59 FPS (dips to 58.4)
  after   ~59 FPS (dips to 58.9)

Packages

Build Windows Linux
R9.1 runtime updated runtime updated
R9.2 + video plugin updated + video plugin updated
R9.3 + runtime updated + runtime updated

Starting with R9.3, the Windows zip root holds only Launcher-Config.exe, UFC3.exe and data/.

How it was verified

  • Fix by fix: each fix was tested with its switch on and off in the same build, and the bug came back with the switch off.
  • Clean rebuilds: each fix was also rebuilt without its change. On Linux these builds came out byte-identical to the previous release; on Windows they differ only by the build timestamp and path separators in internal strings.
  • Other scenes checked after the fixes: a Career training session in the Original (both fighters visible, ~59 FPS) and an Exhibition fight in Reborn (60 FPS). No new errors in the logs.
  • Linux: each build ran a 120-second smoke test with software rendering in WSL, with no new errors.

Known limitations

  • Linux has not been played on real hardware (Steam Deck / ROG Ally / CachyOS) with these builds. The CPU saving was measured on Windows only.
  • Tattoos were tested with one chest tattoo. Other placements, multiple layers and saving the fighter still need player testing.
  • Still open: the created fighter's photo shows as a black box in Career mode, an intermittent menu crash (unregistered function 0x8258A308), and a possible crash when closing the game.
  • Console vsync stays on and shaders compile synchronously, as in R9.

UFC UNDISPUTED 3 - UFC3MONS RECOMP | R9

Choose a tag to compare

@monscriser monscriser released this 22 Oct 02:34

UFC UNDISPUTED 3 - UFC3MONS RECOMP | R9

Our first public release brings together improvements developed across several internal revisions, with the main focus on Reborn, the community-created mod featured in community YouTube videos.

Credit for Reborn belongs to its creators. UFC3MONS RECOMP provides the native Windows/Linux integration, compatibility fixes and performance improvements described below.

ROG Ally Z1 Extreme — Reborn Career Mode

Reborn Career Mode has been play-tested by the project maintainer on both Windows and Linux, running at 60 FPS, with stable gameplay and no gameplay bugs or texture errors observed during those sessions.

This build targets the game's current 60 FPS engine-timing limit. The objective is correct game speed and stable gameplay. Console vsync remains enabled: disabling it during development accelerated menus, the match clock and other game behavior.

These results describe the tested hardware and scenarios. They do not guarantee identical performance or compatibility across every career, fighter, driver or device.

Performance Progress

Although R9 is our first public release, its improvements were developed and evaluated through earlier internal builds.


Internal revision | Observed fight FPS | Approximate CPU usage | Main improvement -- | -- | -- | -- R8 | 30, with slow-motion gameplay | ~3.7 CPU core equivalents | Controller stability and corrected presentation baseline R8.1 | No separate range recorded | Not separately quantified | Reduced CPU spinning while waiting for GPU work R8.3 | 33–36 | ~3.1 CPU core equivalents | Faster register handling and grouped constant updates R8.4 | 36–41 | ~3.1 CPU core equivalents | Faster checks for already-valid shared-memory ranges R8.5, underlying R9 | 57–60 | ~2.1 CPU core equivalents | Second GPU submission thread and Linux audio-wait fix R9 — latest play-test | Stable 60 in tested Reborn Career sessions | Not re-measured | Consolidated build tested on Windows and Linux

The historical Linux fight results show approximately 90–100% higher FPS than the 30 FPS R8 baseline. Approximate CPU usage fell from 3.7 to 2.1 core equivalents, a reduction of about 43%.

These are observations from development sessions, not a controlled benchmark across identical runs. R8 is the earliest quantified baseline available for this comparison, rather than the project's very first prototype. The latest R9 Career Mode result is a separate maintainer report.

Fixes and Optimizations

Controller vibration crash fixed

Concurrent controller operations could refresh devices while another input call was active, corrupting memory and closing the game during a fight.

A shared lock now serializes the four relevant input operations: capabilities, state, vibration and keystrokes. An earlier Ally session recorded 124 contended input calls over approximately 20 minutes without a crash.

Corrected game-frame reporting

Repeated interface redraws could inflate FPS readings in MangoHud and Afterburner.

The overlay now presents alongside new frames delivered by the game. F6 toggles the game's FPS counter. External overlays running through Gamescope may still report compositor FPS instead of game FPS.

Reduced CPU spinning

The game's GPU-fence wait loop now uses a bounded pause/yield/sleep backoff instead of continuously spinning.

This reduces unnecessary CPU activity. It was not treated as a standalone FPS improvement.

Faster graphics command processing

Fast register handling and grouped floating-point constant updates reduce work on the graphics command-processing thread.

These optimizations were already present in the project plugin but disabled. They were enabled and evaluated during the R8.3 stage.

Faster shared-memory requests

Single-range requests can skip unnecessary merge/sort work when the requested memory pages are already valid.

Requests requiring updates still take the original path. This optimization adapts earlier HydroThunderPORT work to UFC's graphics workload.

Second GPU submission thread

GPU command submission moves to a second thread, reducing work on the translation thread.

Swap submission remains synchronous. The feature disables itself when conflicting resolve-readback or GPU-measurement modes are active.

This is GPU command submission, not asynchronous shader compilation.

Linux audio-thread busy loop fixed

The Linux runtime truncated short remaining waits to whole milliseconds, turning some waits into zero-duration sleeps.

Preserving nanosecond precision stopped the investigated audio thread from continuously consuming approximately one CPU core. Windows uses a different native wait path and did not have this particular issue.

Consolidated build with correct game timing

R9 combines the accepted improvements without the optional CPU profiling samplers used during investigation.

Console vsync remains enabled, and shaders remain synchronous. An internal vsync-off experiment was rejected because the higher counter came with incorrect game speed.

Launcher and Integration

The project includes:

  • Separate Windows/Linux and Original/Reborn configurations.

  • Setup paths for supported extracted content, XEX selections and ISO sources.

  • Game-directory registration, save backups and log access.

  • Recoverable cache cleanup.

  • Controller support, keyboard mapping and optional mouse-to-right-stick configuration.

  • Portuguese/English launcher interface and game-language selection.

  • Resolution and fullscreen settings.

  • Steam-shortcut export support.

  • Optional diagnostic reports.

These features are present in the integration sources; this does not mean every configuration has been exhaustively tested. FSR 1 and background shader compilation are not advertised as working features of this candidate.

Development Validation

The work behind R9 included:

  • Real gameplay: maintainer-tested Reborn Career Mode on ROG Ally Z1 Extreme, on Windows and Linux, at 60 FPS without observed gameplay bugs or texture errors.

  • Crash investigation: a Windows crash dump identified the controller-vibration/input race, followed by a logged Ally session exercising the serialized input path.

  • Incremental performance testing: Linux fight logs tracked FPS and approximate CPU usage through R8.3, R8.4 and R8.5.

  • Rebuild controls: unchanged Linux app, plugin and runtime rebuilds reproduced earlier reference binaries byte for byte. Windows controls differed in PE timestamps and, for the plugin, embedded source-path separators.

  • GPU submission verification: a recorded WSL command-stream hash test covered 1,422 submissions with zero differences. An Ally run recorded 3,859 submissions without failure. These checks do not prove identical pixels in every scene.

  • Audio-wait diagnostics: the investigated WSL wait path changed from approximately 1,000 ms of CPU time per second to 99.5% of the observed time sleeping.

  • Build and tool checks: native helper and tool compilation/execution, core-format checks, GPU inventory checks and plugin-symbol checks passed in the earlier parity suite. These checks alone did not validate gameplay.

  • Original graphics investigation: draw-submission comparisons, internal-scaling and occlusion-query experiments, and a preserved RenderDoc capture for continued analysis.

WSL diagnostic/software-GPU tests do not replace real handheld gameplay testing.

Known Issues and Future Work

  • Original-game builds still have graphics bugs in Career Mode, including an invisible-opponent issue under investigation.

  • The main focus of R9 has been Reborn. Original graphics fixes are planned for future builds; they are not resolved in this release.

  • Short FPS ...

Read more