Repository navigation
Releases: monscriser/UFC3MONS
Release list
UFC Undisputed 3: Recompiled — BETA 1.1
🥊 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=1is 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
🥊 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
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...
UFC Undisputed 3: Recompiled — R9.4-P7
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
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 betterR8 ████████████████████████████████████████ ~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
PERFORMANCE
Career Mode FPS, frame times, and stabilityGAMEPLAY INTERFACE
Restore missing Career Mode fighter HUDREBORN COMPATIBILITY
Arenas and referees — FIXED IN DEVELOPMENT
PT-BR translation — FIXED IN DEVELOPMENT
POST-FIGHT GRAPHICS
Restore missing fighter shirt in Reborn
Expected improvements
The next build is intended to deliver:
Improved Career Mode FPS and stability on affected systems.
Restored original fighter HUD and stamina indicators.
Corrected arena and referee visibility in Reborn Exhibition Mode.
Corrected Brazilian Portuguese translation with Reborn.
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
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
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.
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 ...