▲ 145 r/decomps

MZLabs has been banned and any drama-inducing discussion related to the SwitchRecomp project will result in Bans

Title. No need to go over it, but if you've seen the posts previously, you know why this is appearing. Please keep this subreddit a drama-free zone, and keep any discussions like such out of here.

- Graine25 and the other mods in this sub

reddit.com
u/Graine25 — 4 days ago

ReXGlue v0.10.0 offers x86/ARM Mac Support!

Hello everyone! For the last couple of months, the ReXGlue team has been hard at work updating our Software Development Kit to better support Development teams in making static recomps. Over the past few months, Tom and I have been working hard on the DarwinBooks, and finally accomplished working Mac support all the way to Ventura within our vendored translation layers.

ICYDK, ReXGlue is a Static Recompilation framework for the Xbox 360 that vendors translation layers built off the roots of Xenia, which can be swapped for real, native, and optimized implementations of different subsystems. The main goal is to allow users to take advantage of this framework and make dedicated workarounds and optimizations for specific titles, given they have spent a significant amount of time reversing their game.

Bringing the runtime up on macOS surfaced a handful of platform mismatches worth calling out on their own, beyond the headline Vulkan work:

- Bring up `ReXGPU-Xenos` on macOS by running the existing Vulkan backend through MoltenVK: valid SPIR-V for rectangle-list topology, face culling disabled on legacy AMD Metal, RGBA8 loaders for packed 16-bit textures MoltenVK can't sample directly, and a pinned Vulkan-Loader/MoltenVK build staged for macOS consumers instead of relying on whatever the system has.

- Mach-O symbol aliasing: `DEFINE_REX_FUNC` leaned on `__attribute__((alias(...)))` so hooks could override a guest function; Mach-O rejects that outright. Swapped in a weak, `musttail`-tail-called thunk for Apple targets so overriding still works without a real alias.

- Windowing goes through Cocoa Added a `CAMetalLayerSurface` obtained from SDL's Cocoa driver, since macOS has no Win32Hwnd or XcbWindow to present through — Vulkan needs a `CAMetalLayer` there instead.

All of our features like achievements, the ReX API, and every other developmental tools that we offer should be usable with this system added to our Support. We encourage developers to replace the rendering system (ReXGPU-Xenos) in their title when releasing a project with ReXGlue. Our rendering implementation with MoltenVk can work for a multitude of titles, but it will still be significantly lacking in performance since it is meant to be a testing/translation layer rather than a finished implementation that can qualify as a native PC Port.

Link to our repository - Install is as easy as `brew install cmake ninja vulkan volk` and Xcode from the App Store

The video that I have attached is a recomp attempt that I set as a testing layer for the game Raskulls (XBLA). The gameplay clearly shows, but it’s definitely possible for a development team, their own implementation of the system, and make it look proper. We definitely plan on releasing more titles that run properly on Apple hardware rather than just showing you guys development software, so stay tuned! I’ve been in MacUser all my life so I’m happy to continue working on the platform get you guys caught up.

Happy gaming
- Graine25

u/Graine25 — 2 months ago
▲ 28 r/decomps

/r/Decomps/ Subreddit Update: New flairs

Hello everyone. Over the past few weeks, we have seen tons of interest in both Recomps and Decomps. It's amazing to see everyone so interested in the platform, after the early beginnings many years ago, to now all these incredible frameworks making it easy to start a project within minutes. Of course with these changes, people who have interest in posting about them and gathering attention/support for their project at hand. Rather than spamming and deleting posts, the mod team of the subreddit have decided to update the flairs for everyone 🙂

First things first, with the amount of people interested in all console, we have decided to make tags for the big three console makers — PlayStation, Xbox, and Nintendo. Additionally, we noticed that there were templates like ReXGlue and ModernGekko being developed, so we have also added a Framework Development tag, specifically for those. We're really excited to see the progress on later generation architectures, so keep at it!

Most importantly, we have seen people release and discuss their projects early and claim that it is a native PC port, despite there being significant optimization needed to be made. Rather than us striking all these posts down, we have just decided to make three simple tags to distinguish the progress level of each:

  • Status: Infancy — if you just got started in making a project with ReXGlue or ModernGekko, and you feel that you want to showcase your work with the debug layers attached, this is the tag to use. Essentially, you're just showing your game working through a framework, and it's a proof of concept that you can eventually make a real PC port. If its a decomp, essentially you've only gotten a fraction of a percentage decompiled and you're still working at it.
  • Status: Beta-Testing — if your recomps has been developing for well over a month, and you want to showcase the modifications and changes you made to your project. Still not at the "Optimized" part of a Native Port, but definitely getting closer to out of that "WIP" mode. If its a decomp, essentially you've got a significant slice of the decomp done
  • Status: Optimized Production — you finally have finished your Native PC port or Matchmake Decomp, and it is ready for others to utilize or build on their machine. It should run flawlessly, away from any translation layers and should require little difficulty for an end user to use.

Please be careful when using any of these three tags. Do not use one incorrectly because you want more recognition — especially the Optimized Production tag. We're still here promoting these projects because we really love preserving old titles, but we don't want to guide people the wrong way. Some of the original tags that we were using before like the AI one is still there. We're not sure how detrimental it is to use an LLM, but we firmly believe that optimizations and understanding where your project stands is more important than trying to decide if an LLM made it.

For more clarifications on any of these tags, feel free to leave a comment down below, and I'll be happy to edit the post or answer your questions appropriately. Happy Recomping!.. Or Decomping?... Whatever we do here

https://preview.redd.it/k87t661olljh1.png?width=1072&format=png&auto=webp&s=290038535add9cd2f8bbf5073cb6671c172dfc3c

reddit.com
u/Graine25 — 2 months ago
▲ 82 r/recomps+1 crossposts

ReXGlue v0.9.0 update - Achievements, Plugins, and SDL3 Windowing

Over the past 2–3 months, the ReXGlue team has been hard at work making changes, fixes, and adding features into our toolkit.

ICYDK, ReXGlue is a Static Recompilation framework for the Xbox 360 that vendors translation layers built off the roots of Xenia, which can be swapped for real, native, and optimized implementations of different subsystems. The main goal is to allow users to take advantage of this framework and make dedicated workarounds for specific titles, given they have spent a significant amount of time reversing their game.

Our previous 0.8.0 update introduced a significant change: DLL recompiling. Much like regular .so and .dll files you see on modern computers, the Xbox 360 also had numerous titles containing dynamic libraries filled with PowerPC assembly. Without recompiling the DLL, developers would be unable to activate their title due to the main default.xex requiring access to those functions.

With this in mind, we also heavily refactored how we handle the Markdown parsing of our codegen mechanic, introducing our "manifest" system.

Manifests now declare a single [entrypoint] (recompiled and linked into the host EXE, as before) and any number of [[modules]] (additional guest binaries built as shared libraries .dll/.so that KernelState registers, loads, and unloads at runtime). Each module owns its own FunctionDispatcher.

The CLI is reworked around a project_manifest.toml manifest, with codegen replacing migrate and an upgrade workflow taking the place of the prior one-shot path.

These changes have helped inspire us into the next portion of our code generation and plugin vendoring in the SDK.

Achievements

  • Add a runtime achievement subsystem that tracks unlocks and reports state back to the game.
    • AchievementManager lives on Runtime and is reachable through KernelState.
    • The xam layer records unlocks and answers the game's queries for unlock state.
    • Ships with an embedded metadata asset registry and a metadata store struct for per-title data.
    • Toast notifications on unlock, plus a full achievements overlay available via an F7 toggle.
    • Icon cache backed by PNG decoding through stb_image.
    • Overlays are wired into ReXApp.
  • Add achievement overlays in the UI.
    • Toast notifications on unlock, plus a full achievements overlay available via an F7 toggle.
    • Icon cache backed by PNG decoding through stb_image.
    • Overlays are wired into ReXApp.
  • Add a convenience achievement hook API so titles and hooks can raise unlocks directly.
  • Enable developers to create custom achievements that can be appended to a title.
  • Add rexglue init achievements, an extractor that reads achievement data from a XEX and writes it to TOML.

Achievements are stored inside each title's Default.xex, including the icons and original text.

With how the system is wired up, Achievements are usable for any project that gets recompiled with the latest update out of the box. The possibilities are endless, from being able to customize your own achievements overlay/icons all the way to adding your own achievements!

Plugins (GPU)

  • Extract Xenos GPU emulation into rexgpu-xenos, a plugin the runtime loads at launch instead of linking directly.
  • Route kernel and app GPU access through the IGraphicsSystem interface so nothing downcasts to the Xenos implementation.

This is one of the more significant additions to ReXGlue, starting us off on the trajectory of allowing us to vendor our translation layers.

With the new GPU plugin, we can enable and disable our Xenia-based "Xenos Emulator", an incredible rendering implementation that allows us to get an LLE renderer that works for the majority of titles without needing to operate in the dark to see if your game works. To utilize it, activate your game with the flag --gpu_plugin=xenos, or add it to a TOML file related to your title's settings.

Additionally, with how the ReX API is formed, we've allowed developers to utilize some of the incredible Xenia decoders that we already know work for a majority of titles and reuse them in custom rendering implementations. Functions like Deswizzlers and Format Unpackers are already extremely functional and well optimized in the Xenos Emulator, and as long as we do not use the GPU plugin to activate the command processor, we steer away from needing the translation layer as a whole.

SDL3 Windowing

  • Replace the Win32 and GTK window backends with a single SDL3 backend. The old window_win.cpp, windowed_app_context_win.cpp, windowed_app_context_gtk.cpp, and the per-platform windowed_app_main_* entry points are gone.
  • Add window event hooks to ReXApp with a vetoable close, so an app can refuse or defer a window close request.
  • Add a detached overlay mode for apps that drive their own renderer. The presenter can draw the overlay without owning the swapchain.
  • Enable the UI dialog path on Linux builds.
  • Add a per-window cursor auto-hide delay.
  • Default to fullscreen at launch.

One of the most requested features among our recomp development group.

When making a rendering system of choice, you need a solid window to display content. For months, we had been using older backends to support the two big platforms, but now we have migrated both of them straight to SDL3. The detached modes were key, as we did not want to ruin our connection to ReXGPU, so this took a while to get down properly. We're rather happy with our results at the moment, and have other plans for more Unix content.

Misc Updates

  • CLI - Print per-binary title ID, media ID, version, and the PE file timestamp before each recompile.
  • CVars - Apply config file and command line values to CVars that register after runtime init, instead of dropping them.
  • Console - Add argument passing commands and an InvokeCommand dispatch path so a command can take parameters, not just toggle a flag.

There are also dozens of other build tweaks we have implemented, as well as codegen/core system fixes that are noteworthy.

We are grateful for every single contributor who's made this project possible, and are excited to continue going down this journey of making it more feasible to see our favorite 360 titles on PC!

Upcoming News

A rather speculative list, but just some ideas we have planned. Feedback welcome!

  • macOS Support - Already available in our development branch, but we have the ability to build on both x86 Intel and ARM64 Apple Silicon processors for the Darwin beast. Rendering fixes and other various documentation will need to be included before being finalized and merged into main.
  • Wayland Support - With some of the issues we've seen on SteamOS, we are already configuring our SDL overlay so that it will bundle and use Wayland by default, rather than opting in for XWayland or an X11 compatibility protocol. This should fix issues with stretching and the keyboard activating randomly.
  • Dedicated Website - We're looking into developing a website to host more of our content, as well as finding a way to promote the projects that we find the most intuitive and utilize the SDK in the best ways possible. We've been talking with quite a few dedicated developers, and they have some exciting projects on the horizon. Only a matter Of Time until these projects finish their Odyssey. Alright, I'll stop.

This post is something new that I am trying out, to see what the community thinks of templating software and releasing updates publicly.

We already know that there is a lot of confusion about how ReX works and what its main goals are. The truth is that our vision has been shifting left and right for quite a while, but now we've got some great research complete.

We're very excited to show you what we have in store. Do leave some feedback in the comments below!

  • Graine25
u/Graine25 — 2 months ago