En esta ocasión vamos a hacer uso de la decompilación del juego MarioKart64 para instalar dicho juego, lo que nos permitirá disfrutar del título a 60FPS.
Índice:
Instalación:
En principio hay una
versión precompilada del binario
para Linux, así que tan solo debemos asegurarnos de tener la única
ROM
soportada
.
Nos bajamos el
binario
desde el GitHub
del proyecto y lo descomprimimos:
unzip Spaghettify-Alfredo-Alfa-1-Linux-Old.zip
Comprobamos el hash SHA1
de la ROM
:
sha1sum ~/Mario\ Kart\ 64\ \(USA\).z64
579c48e211ae952530ffc8738709f078d5dd215e /home/kr0m/Mario Kart 64 (USA).z64
Efectivamente es una de las versiones soportadas, movemos la ROM
al directorio donde hemos descomprimido el binario:
mv ~/Mario\ Kart\ 64\ \(USA\).z64 ./
Ejecutamos el binario:
./spaghetti.appimage
Cuando nos pregunte si generar el O2R
, respondemos que si y seleccionamos la ROM
:
![]() |
![]() |
![]() |
En esta captura se puede ver el juego, por supuesto se puede jugar a pantalla completa.
Por cierto el mando de Xbox
funciona de maravilla.
Compilación:
Si el binario precompilado dá problemas en principio podemos compilar nosotros mismos el software. Pero en mi caso ha sido imposible, parece estar bugeado sobreescribiendo métodos entre distintos ficheros del proyecto:
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.
Hay otra opción que es
utilizar Docker
, pero compila contra las versiones de las librerías de la imagen de Docker
así que a mí no me sirvió de nada:
/build-cmake/Spaghettify
./build-cmake/Spaghettify: error while loading shared libraries: libspdlog.so.1: cannot open shared object file: No such file or directory