This time we’re going to use the decompilation of the MarioKart64 game to install it, which will let us enjoy the title at 60FPS.
Index:
Installation:
There is a
precompiled binary release
for Linux, so we just need to make sure we have the only
ROM
supported
.
Download the
binary
from the project’s GitHub
and unzip it:
unzip Spaghettify-Alfredo-Alfa-1-Linux-Old.zip
Check the SHA1
hash of the ROM
:
sha1sum ~/Mario\ Kart\ 64\ \(USA\).z64
579c48e211ae952530ffc8738709f078d5dd215e /home/kr0m/Mario Kart 64 (USA).z64
It is indeed one of the supported versions, so move the ROM
to the directory where we extracted the binary:
mv ~/Mario\ Kart\ 64\ \(USA\).z64 ./
Run the binary:
./spaghetti.appimage
When asked whether to generate the O2R
, answer yes and select the ROM
:
![]() |
![]() |
![]() |
This screenshot shows the game running — of course, you can play in fullscreen mode.
By the way, the Xbox
controller works flawlessly.
Compilation:
If the precompiled binary causes issues, we can build it ourselves . However, in my case it was impossible, as it appears to be bugged by overwriting methods across different files in the project:
In file included from /home/kr0m/SpaghettiKart/src/port/ui/Menu.h:5:
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:155:26: error: declaration of ‘UIWidgets::CheckboxOptions& UIWidgets::CheckboxOptions::ComponentAlignment(UIWidgets::ComponentAlignment)’ changes meaning of ‘ComponentAlignment’ [-fpermissive]
155 | CheckboxOptions& ComponentAlignment(ComponentAlignment alignment_) {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:102:10: note: ‘ComponentAlignment’ declared here as ‘enum UIWidgets::ComponentAlignment’
102 | enum ComponentAlignment {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:159:26: error: declaration of ‘UIWidgets::CheckboxOptions& UIWidgets::CheckboxOptions::LabelPosition(UIWidgets::LabelPosition)’ changes meaning of ‘LabelPosition’ [-fpermissive]
159 | CheckboxOptions& LabelPosition(LabelPosition labelPosition_) {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:94:10: note: ‘LabelPosition’ declared here as ‘enum UIWidgets::LabelPosition’
94 | enum LabelPosition {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:189:26: error: declaration of ‘UIWidgets::ComboboxOptions& UIWidgets::ComboboxOptions::ComponentAlignment(UIWidgets::ComponentAlignment)’ changes meaning of ‘ComponentAlignment’ [-fpermissive]
189 | ComboboxOptions& ComponentAlignment(ComponentAlignment alignment_) {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:102:10: note: ‘ComponentAlignment’ declared here as ‘enum UIWidgets::ComponentAlignment’
102 | enum ComponentAlignment {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:193:26: error: declaration of ‘UIWidgets::ComboboxOptions& UIWidgets::ComboboxOptions::LabelPosition(UIWidgets::LabelPosition)’ changes meaning of ‘LabelPosition’ [-fpermissive]
193 | ComboboxOptions& LabelPosition(LabelPosition labelPosition_) {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:94:10: note: ‘LabelPosition’ declared here as ‘enum UIWidgets::LabelPosition’
94 | enum LabelPosition {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:243:27: error: declaration of ‘UIWidgets::IntSliderOptions& UIWidgets::IntSliderOptions::ComponentAlignment(UIWidgets::ComponentAlignment)’ changes meaning of ‘ComponentAlignment’ [-fpermissive]
243 | IntSliderOptions& ComponentAlignment(ComponentAlignment alignment_) {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:102:10: note: ‘ComponentAlignment’ declared here as ‘enum UIWidgets::ComponentAlignment’
102 | enum ComponentAlignment {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:247:27: error: declaration of ‘UIWidgets::IntSliderOptions& UIWidgets::IntSliderOptions::LabelPosition(UIWidgets::LabelPosition)’ changes meaning of ‘LabelPosition’ [-fpermissive]
247 | IntSliderOptions& LabelPosition(LabelPosition labelPosition_) {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:94:10: note: ‘LabelPosition’ declared here as ‘enum UIWidgets::LabelPosition’
94 | enum LabelPosition {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:298:29: error: declaration of ‘UIWidgets::FloatSliderOptions& UIWidgets::FloatSliderOptions::ComponentAlignment(UIWidgets::ComponentAlignment)’ changes meaning of ‘ComponentAlignment’ [-fpermissive]
298 | FloatSliderOptions& ComponentAlignment(ComponentAlignment alignment_) {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:102:10: note: ‘ComponentAlignment’ declared here as ‘enum UIWidgets::ComponentAlignment’
102 | enum ComponentAlignment {
| ^~~~~~~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:302:29: error: declaration of ‘UIWidgets::FloatSliderOptions& UIWidgets::FloatSliderOptions::LabelPosition(UIWidgets::LabelPosition)’ changes meaning of ‘LabelPosition’ [-fpermissive]
302 | FloatSliderOptions& LabelPosition(LabelPosition labelPosition_) {
| ^~~~~~~~~~~~~
/home/kr0m/SpaghettiKart/src/port/ui/UIWidgets.h:94:10: note: ‘LabelPosition’ declared here as ‘enum UIWidgets::LabelPosition’
94 | enum LabelPosition {
| ^~~~~~~~~~~~~
In file included from /home/kr0m/SpaghettiKart/src/engine/courses/Course.h:5:
/home/kr0m/SpaghettiKart/src/engine/CoreMath.h:134:24: warning: ‘nodiscard’ attribute applied to ‘void IRotator::Set(uint16_t, uint16_t, uint16_t)’ with void return type [-Wattributes]
134 | [[nodiscard]] void Set(uint16_t p, uint16_t y, uint16_t r) {
| ^~~
ninja: build stopped: subcommand failed.
...
ninja: build stopped: subcommand failed.
Another option is to
use Docker
, but it compiles against the library versions inside the Docker
image, so it didn’t work for me:
/build-cmake/Spaghettify
./build-cmake/Spaghettify: error while loading shared libraries: libspdlog.so.1: cannot open shared object file: No such file or directory