A work-in-progress non-matching decompilation of Rainbow Studios' Rhythm Racing Engine (1.0), as implemented in the PC version of Cars: Mater-National Championship.
This repository does not contain any game assets or assembly whatsoever. An existing copy of the game is required. You can purchase the game on Steam here.
We currently use vcpkg in manifest mode for dependency management, and depend on the following libraries:
- zlib
- dxsdk-d3dx
Additionally, we need to manually link against two other libraries: BASS and Bink.
The correct version of BASS can easily be found on Un4Seen's website. After downloading the bass23.zip archive, simply copy bass23.zip/c/bass.lib to the dependencies folder.
Since Bink is proprietary middleware, you'll need to provide .lib and .dll files yourself; binkw32.dll can be found in the root of the original game's install folder, but the .lib must be generated from the .dll via DUMPBIN and LIB.
We currently use Visual Studio 2022 as our build system, as it plays nicely with vcpkg. However, since it is not cross-platform, we may switch to a different build system later down the line...
We are extremely lax with contribution requirements, as we are NOT trying to match the original game's assembly. That being said, we do use special tags for each function definition to help track our progress:
// OFFSET: 0xDEADBEEF, STATUS: WIP
void* ExampleClass::ExampleFunction(const char* name) {
return nullptr;
}The name of each tag must be followed by a semicolon, a space, and then its corresponding value. Each tag/value pair is delimited with a comma and a space.
As of now, we have two different tags: OFFSET and STATUS. OFFSET refers to the address of the function in the original executable, while STATUS refers to the implementation status of the function.
OFFSET can be either an absolute address in the original executable in hexadecimal, OR INLINE. INLINE denotes that the function is either actually inlined or that the implementation is shared by multiple functions; for example, a function that does nothing and returns 0.
STATUS can be one of three values:
TODO- Denotes that the implementation is either empty or particularly 'hacky'.WIP- Denotes that the implementation is a work-in-progress or contains minor 'hacks'.COMPLETE- Denotes that the implementation is functionally complete and should behave nearly identically to the original.
Intentional inaccuracies for the sake of compatibility or debugging are permitted, as long as there is adequate documentation within the code that explains the discrepancy.