How much everyone enjoyed the improvements from November? Since we had such a huge boost in compatibility, optimizations and general stability, December couldn't possibly be better, right? NOPE.xbe! Rendering changes improved the compatibility AND the performance for so many games that I almost didn't sleep trying to cover every single progress made, so I hope you all enjoy reading about the changes and be sure to check the improved games section (as it's even bigger than the last month)
Kernel: Define and init IdexChannelObject (PR# 1799)
Fixes MechAssault hang (a known regression from the last month), which was caused by an invalid List object.
Fix when titles attempt to find the XBEH header in memory (PR #1800)
Microsoft provide an API for loading/unloading executable sections at runtime. Cool, no problems, we support that. But for some reason Valve decided not to use those functions for Half-Life 2, and instead, parse the xbe header in memory and do it manually. Problem is: Windows is awkward. We need to allocate the executable memory for the Xbe at the same fixed base address as the xbox, which is a region that you can't VirtualAlloc on Windows, because it's "reserved". So how do we do it? We compile our exe with the same base address, and have "empty" data at the start that we replace with the executable. However, WINAPI dies if you overwrite the MZ header. So Half Life 2 was seeing the MZ signature instead of the XBEH signature, and dying. tldr: this change in the code moved Half-Life 2 from the menus for the first time to in-game!
Trampoline optimization (PR #1812)
This moves construction of lookup strings outside call-locations towards a central LookupTrampolines() function, reducing the overhead of calling a trampoline down to a minimum. While this doesn't impact the framerate in a measurable way, this can easily add up to other optimizations to improve the performance even further.
Port to HLSL (High Level Shader Language) vertex shaders (PR #1801)
This PR replaces the old vertex shader conversion code, that generated vertex shader assembly, with code that generates and compiles HLSL vertex shaders. This significantly increases accuracy of the emulated vertex shader program behavior, with improved rendering as a result. For some users, this might result in slower emulation, depending the speed of shader compilation. Once compiled, the HLSL vertex shaders seem to be somewhat better optimized, resulting in slightly better frame rates. This PR made me stay up for dozens of hours testing... and I'm happy about each second because so many games improved that this month became even better (compatibility wise) than November.
HLSL fixes (PR #1805)
This commit should have been a part of the HLSL port PR, but didn't make it because the problem we saw was eluding us. Re-reading various sources on HLSL, the problem we had (over-saturated ground color in XDK Fog sample) turned out to be caused by us not-saturating the COLOR-semantic outputs (oD0, oD1, oB0 and oB1). Applying saturation to those outputs, fixed the problem!
Implement BeginVisibilityTest, EndVisibilityTest and GetVisibilityTestResult (PR: #1809)
This implementation fix the VisibilityTest XDK sample, and also slightly improves the LensFlare sample. Very likely won't affect much else in the way of games or other samples.
Fix a crash when converting certain, large vertex shaders (PR: #1813)
This allows DOA3 to play again after it was broken by the HLSL work. The cause of the crash was a Stack Overflow when compiling the shader, caused by allocating a large object on the stack. This commit allocates the XboxVertexShaderDecoder on the heap instead, which thanks to the unique_ptr smart pointer, automatically gets freed when it goes out of scope.
Notable Game Improvements
Backyard Wrestling 2 [IN-GAME]
Reaching in-game for the first time, this unusual wrestling game can be probably finished right now. Known issues are hangs while trying to create a custom character and screen flickering before reaching in-game.
Mortal Kombat Deception [IN-GAME]
This game was already in-game for some time now, but for the first time the character models are visible (still with some geometry issues, but much better than before).
Rayman Arena [PLAYABLE]
Great progress here, jumping from in-game with only the characters visible to fully playable with almost no visual issues. Performance is also very good.
With a huge boost on the performance, Robocop can now run at fullspeed most of the time. Bad news? Character models (including the enemies…) are invisible.
Soldier Of Fortune II - Double Helix [IN-GAME]
Rendering improvements made this game finish-able with great performance, but we still have some serious geometry issues on the characters models.
Progressed from in-game to fully playable. What was preventing it from being playable was the random hangs while going to or coming back from events, but it’s much more stable and you can enjoy it properly even at (much) higher resolutions.
Ghost Recon Island Thunder [PLAYABLE]
Fully playable? Oh yeah… and I’m probably late to the party while saying this, as RadWolfie did it before me ;)
Hot Wheels Stunt Track Challenge [IN-GAME]
For the first time ever, we can’t finally see the menus in this game. With this visual issue fixed, you can already finish the game, but as you’ll hang every single time you finish an event (right after the auto-saves), you need to restart the emulator over and over to finish it, so we’ll list it as in-game only for now.
Destroy all Humans 2 [IN-GAME]
In-game for the first time and IT’S BEAUTIFUL… but you can’t play for more than some few minutes (the game will hag for many seconds randomly, until it’s stuck for good).
Reservoir Dogs [IN-GAME]
While already in-game in the past, for the first time you can progress further than some specific part of the tutorials (needs some extra testing to confirm how much you can progress for now). Just a reminder: menus aren’t visible for now, this didn’t changed.
Kakuto Chojin [IN-GAME]
First time in-game? Nope, but it’s the first time we can reach in-game while rendering so much. In-game it’s too slow to playable and even before reaching in-game it’s very unstable.
Tom And Jerry - War Of The Whiskers [IN-GAME]
Rendering improved a lot for this game, and performance is also very good most of the time. Main issues preventing it from being playable are the constant hangs and crashes in-game.
Freedom Fighters [IN-GAME]
Another great improvement in rendering, before recent changes the only thing we could see in this game was part of the character model (without anything else visible). Now we can see pretty much everything depending on the camera angle (screenshot above is from a good angle, things can get much worse).
SX Superstar [IN-GAME]
No more T-Pose! Almost everything is now rendered properly, only the performance is preventing it from being fully playable.
Scooby Doo - Unmasked [IN-GAME]
First time in-game, rendering almost everything correctly. Main issue now is instability (talking to some characters will make the game hang, some special events can cause the same).
Outlaw Golf [IN-GAME]
Already in-game in the past, but for the first time we can see the characters. While being rendered almost correctly, some parts of the models “explode” at some camera angles, preventing you from being able to play the game properly.
Outlaw Golf 2 [IN-GAME]
Very similar to the first game, but render less on the menus and almost properly in-game.
UFC Tapout 2 [IN-GAME]
Rendering improved a lot for this title, only issue preventing it from being playable now is the performance.
Menus are visible for the first time and in-game rendering improved as well (last month was just a black screen with a single 3D model “visible”)
MotoGP 2 [IN-GAME]
Very similar to the first game, menus being rendered for the first time and good part of the in-game geometry is now visible (swap between rendering modes with the “F11” shortcut to see more details while running this game).
Destroy All Humans [IN-GAME]
While very similar to the behavior of Destroy All Humans 2 (random hangs for some seconds in-game), it’s more stable and will not hang forever after some minutes. Weird issue being: after you start the game, instead of playing the regular tutorial, the game will put you directly into the control of your ship.
Baldurs Gate Dark Alliance 2 [IN-GAME]
For the first time rendering “something” (almost invisible, you need to press “F11” to alternate to wireframe and see some of the geometry in-game).
FIFA 2004 [IN-GAME]
Many visual issues were fixed here, so the game is looking better than ever (but it’s still not playable).
Silent Scope Complete [IN-GAME]
This is a collection of 3 games of the Silent Scope franchise and in the past the geometry was a mess… until recent changes made the first two games fully playable. 3rd game still have a rendering issue with the scope preventing the entire collection from being playable.
Crash N Burn [IN-GAME]
The list of improvements in this game is quite nice: HUD rendering for the first time, menus rendered for the first time, many effects in-game being visible now, performance improved and the random hang while booting the game was fixed. Only issue left? Game can hang on the loading screen (even with this issue you can probably finish the game, as you can save your progress between races).
F1 2001 [IN-GAME]
Another game where the menus are visible for the first time. Now you can check and change your settings and in-game you can see pretty much every 3D model and effect. Performance also improved a bit, but it’s still to slow to consider it playable.
Kung Fu Chaos [IN-GAME]
Not the first time in-game, but it’s the first time you know you’re in-game because of something other than the sound. Some of the text before starting a new game is now visible and the life bars can be seen during the levels.
Without Warning [IN-GAME]
Most of the in-game geometry is now visible (characters are still invisible), and performance improved. In-game screen flickers a lot.
Wreckless - The Yakuza Missions [INTRO-MENUS]
You can now browse the options and change your settings, but the game will crash before reaching in-game for now.
Harry Potter and the Goblet of Fire [IN-GAME]
For the first time in-game and rendering some of the characters models. In-game scenarios are almost invisible and the screen will blink nonstop.
Once again, I’m very proud to announce that we’ve reached 59 playable games! Such amazing improvement wouldn’t be possible without all the effort and many hours of dedication from our developers. I would like to also thank the users that reported issues this month (without your help we wouldn’t be able to catch many of the regressions fixed recently) and the patreons that support us in this wild road that is the Xbox emulation.
Want to take a closer look at the compatibility list? Check download link at the end of this report.