Languages Used | C++, C#, MIPS assembly |
Back in the late 90's Rare (then Rareware) was working on their final N64 title 'Dinosaur Planet'.
It was incredibly ambitious, and in my opinion a very unique title, especially in the N64 era. It featured a semi-open world, interesting story, multiple playable characters, fully voiced dialogue, facial animations, realtime shadows, highly optimized animation engine and more. Quite a feat of development for the time!
Ultimately it was retro-fitted into a StarFox game (StarFox Adventures) and moved to the GameCube. This process made the game lose many of its features and story elements that made it so unique.
Years later, some files of the original were found on a demo version of StarFox. Even later, a fully playable build of the game was leaked.
With the leaked build of the game, I wrote a few different tools for viewing contents of the game and modifying them:
One of the first things I did was reverse engineering the object and environment model and animation formats. I had already done some of this work with the previously leaked files from StarFox, so this was quite easy. Using my proprietary framework Warlock Engine, I made an online mapviewer. You can try it for yourself here! (Requires Chrome, Edge or Firefox with WebGL 2 - Safari works but unstable)
The mapviewer has some tricks up its sleave as well. Dinosaur Planet environment models are split up in 640x640 unit-sized chunks, and each of those chunks has separated meshes based on their texture.
At load time, the mapviewer bakes all meshes into a few much larger meshes with their texture ID baked as a vertex attribute. This is then passed to the shader, which can render multiple meshes with different textures in a single drawcall, severely reducing draw time in an Emscripten/WebGL context (as they are very expensive to translate from native C++ to JavaScript WebGL calls). This allows the entire map to be rendered without any culling even on lower end machines.
I've also built a sequence viewer using the sequence editor module from Warlock Engine. It implements most of the core functionality of Dinosaur Planet's sequence system including its animation system, dialogue, sound effects, custom keyframe interpolation and event system.
Dinosaur Planet employs a relocatable code module system (DLLs), that enables the game to swap code sections in-and-out of memory at runtime. Once the game build was leaked, I wrote a custom loader plugin for Ghidra (a reverse engineering tool) that can handle these DLLs:
https://github.com/HugoPeters/N64LoaderWV-DinoPlanet
After this, I wrote a tool that can un-pack and re-pack assets and file tables from Dinosaur Planet, and finally "compile" a new ROM from the unpacked files (written on a minimal runtime of Warlock Engine):
https://github.com/HugoPeters/dinofst
Finally, I reverse engineered and reimplemented the DLL system to a point where I could compile my own code into MIPS supported by the N64, and then reformat the resulting ELF file to a Dinosaur Planet supported DLL file. The process of this can be found here:
https://github.com/HugoPeters/dinofst/blob/master/Source/DLLCompiler.cpp
Then the fun could begin! I wrote an in-game debug menu for the game with a variety of functionality, such as "noclip" for the player, warp to any area, and a free cam to move the camera around.
You can find the code for this here:
MusyX was middleware for the GameCube by Factor5, used to create and playback music and sound effects in a Midi-sort-of-way. It was used in Star Fox Adventures, and the data consisted of a pack of a few proprietary files and the individual song files, also proprietary.
The kiosk disc contained quite a few unused sound files, so I took it upon myself to find the original GameCube SDK, the original MusyX SDK, and write an executable for GameCube that could play-back these files.
MusyX Player can switch between different sound 'packs' from both the kiosk and retail disc, and contains every single song file on both discs.
Quite a few never-before-heard songs were found this way, and it also allows you to endlessly enjoy the wonderful OST of Star Fox Adventures / Dinosaur Planet, as every song loops and plays the same way as in the game!
You can find a download for the ROM here (play it using https://dolphin-emu.org/):
https://mega.nz/#!KhNw2JCS!xlPJ6G2awN0FlOWGmXooF9Hbo8TnYgEIU3tecLBv9kg
This was a converter I wrote that modifies the proprietary texture header to a more common GameCube format and then converts it to PNG.
It revealed quite a lot of beta textures, mainly HUD related:
(The last image was using wrong starting addresses for the texture data, notable by the small corruption in each texture)