Soup Raiders Goes Native: Porting the demo from Unity | Elias Farhan
A port is not simply “the same game in another engine” or “just an emulator”. It is a long series of decisions about what to do with the original content (art, code and audio) to create a new version with its own set of constraints. In this blog post, I will look at three different approaches to porting, then show what I exported from my old Unity demo and how. The next blog post will cover how I imported those assets into my own game engine.
Porting games
You might have heard terms such as remaster, remake or even recompilation. Their meanings can be confusing, and there are nearly as many approaches to porting as there are game ports. Here are three concrete examples and how I personally classify them.
Demon’s Souls PS5 (2020)
For the release of the PS5, Bluepoint Games, with Japan Studio, remade FromSoftware’s PS3 game Demon’s Souls. There is a very good /noclip documentary1 on the subject, featuring interviews with the team behind the game. In a Digital Foundry interview2, the developers at Bluepoint described the port as using two engines. Based on their explanation, I understand the architecture roughly as follows:
This allows the PS5 game to look radically different while its combat feels extraordinarily close to that of the PS3 game. Visually, an enormous amount was rebuilt. On the technical side, Marco Thrush, Bluepoint’s president and an engineer, described starting by compiling the codebase one error at a time, then running the game and fixing one crash at a time. The team did not simply recompile the old code: they also introduced modernised character creation, a photo mode, the mirrored Fractured World, quality-of-life adjustments, much faster loading, updated controls and other changes. Given the amount of work involved, I would classify Demon’s Souls on PS5 as a remake .
Metal Wolf Chaos XD
Metal Wolf Chaos is a hilarious game by FromSoftware, released for the original Xbox only in Japan in December 2004. The player takes the role of the president of the United States, piloting a mech. You can watch a speedrun from SGDQ 20143, with commentary explaining the gameplay. Funnily enough, Devolver unexpectedly offered to work with FromSoftware to rerelease the game:
Count us in to help Metal Wolf Chaos get out to more gamers if From Software wants some help. #FreeMetalWolf pic.twitter.com/867qay70j8<br>— Devolver Digital (@devolverdigital) January 27, 2016
And it actually worked!4 A General Arcade team consisting of five software engineers, two QA engineers, a producer, an artist and two 3D modellers spent sixteen months on the project, according to its project page5. They used a modified version of Sony’s PhyreEngine, C++ and FMOD, with Direct3D 11 on Xbox One and GNM on PlayStation 4.
Because General Arcade describes the project as a modernisation of the original game—upgrading its presentation, controls and platform support rather than rebuilding it as a new game—I would classify Metal Wolf Chaos XD as a remaster , not a remake .
Dusklight
I got a GameCube at the end of its life (you can call me a patient gamer), and one of my favourite games on it—and in general—is The Legend of Zelda: Twilight Princess. Fast-forward a few years and I discovered that the community had created a native version of the game. It was released under the name Dusk in May 2026 and is now called Dusklight6.
For Dusklight to exist, another project first had to decompile the original Twilight Princess. This project is ZeldaRET/tp7. Its goal is not merely to write code that behaves similarly, but to produce C/C++ code that compiles to the same machine instructions as the original executable.
To reverse-engineer the PowerPC executable, they used decomp-toolkit (or dtk)8. This tool analyses the original GameCube/Wii executable, discovers functions, splits the binary into relocatable objects and generates linker information, symbols and splits. This provides the pieces of the “puzzle” that contributors need to recreate the game. For each piece—a compiled .o file—they recreate the C/C++ equivalent, then compile it using the Metrowerks CodeWarrior compilers and linkers used by Nintendo at the time. They compare the newly generated PowerPC .o with the original using objdiff9, then repeat the process until the two match.
ZeldaRET is not itself a PC port, but Dusklight builds upon its work. Dusklight uses Aurora10, a source-level GameCube and Wii compatibility layer, to link the game-derived code, including Nintendo’s JSystem code. This greatly simplifies the recompilation work because the developers do not need to refactor every call to the original GameCube APIs. Aurora uses SDL3 for its application layer and input, while its GX graphics compatibility layer is built on WebGPU. I also use SDL3 in the Soup Raiders native port. In the end, the architecture of Dusklight looks like this:
Because it turns matching decompiled source code into a native...