229
Zelda 64: Recompiled (Majora's Mask) adds modding support, texture pack support, optimizations and more
(www.gamingonlinux.com)
Welcome to the largest gaming community on Lemmy! Discussion for all kinds of games. Video games, tabletop games, card games etc.
Submissions have to be related to games
No bigotry or harassment, be civil
No excessive self-promotion
Stay on-topic; no memes, funny videos, giveaways, reposts, or low-effort posts
Mark Spoilers and NSFW
No linking to piracy
More information about the community rules can be found here and here.
Is this similar to the Ship of Harkinian recompiles, just as a different project?
Not really. The Ship of Harkinian ports are based on decompilations, which is where you reverse engineer some equivalent source code using the final binary as a reference point. Then, you can port that source code to anything else you can build for, like a PC, phone, Wii U or Dreamcast.
Recompilation, which is what this project is, is closer to (and some have gone as far as to say that it is) emulation. It's taking the final binary and then, without actually working backward to get source code, translating the raw instructions directly into code that compiles for a different platform.
It's kind of difficult to get across the difference without being familiar with what both are doing behind the scenes, because the result is obviously similar. Both require human intervention, but decompilation is the more labor-intensive approach, while recompilation is somewhat more automated.
The advantage of former is that you end up with a relatively human-readable codebase to work with, while the latter doesn't bring you any closer to understanding how the game works internally. Both ultimately allow for porting the game to new platforms. Decompilation will almost certainly result in a more optimized final game, because it avoids the overhead of "emulating" the original architecture. However, for the same reason, recompilation can be generalized to other games that originally ran on the same hardware.
So similar to how WINE works then? This is taking the MM binary and building a wrapper around it that translates it's system calls into something generic?
That's closer but rather than being a wrapper, it takes the original architecture's instructions (MIPS in the case of N64) and generates a C/C++ function which implements that instruction. Then you call those functions in the same sequence as the original compiled machine code ran instructions.
That's a relatively inefficient way to make a port, because you're basically reimplementing the original CPU in software, hence why some have described it as emulation. At the same time though, most recompiled games are like 15-20 years old, so a bit of overhead on a modern PC isn't going to hurt you too much.
But anyway, unlike WINE, the original binary is not used any more after recompilation. Instead, you have a native binary for the target platform, the translation having occurred at the time of recompilation (when you built the port binary).
OK, now I understand! And I get why they say the code isn't human readable, haha. Thanks for taking time to explain!