Esta pagina se ve mejor con JavaScript habilitado

StarFox/LylatWars nativo en Linux

 ·  🎃 kr0m

En esta ocasión vamos a hacer uso de la decompilación del juego StarFox/LylatWars de N64 para instalar dicho juego, lo que nos permitirá disfrutar del título a 60FPS.


Instalación:

En principio hay una versión precompilada del binario para Linux, pero en mi caso fué necesario recompilar desde las fuentes ya que esta fué compilada contra versiones de librerías que no están presentes en mi sistema.

PaperStreet # ~> lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm

Al ejecutar el binario mostraba este error:

PaperStreet $ ~/Starship> ./starship.appimage
./starship.appimage: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by ./starship.appimage)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by ./starship.appimage)
./starship.appimage: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.31' not found (required by ./starship.appimage)
./starship.appimage: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by ./starship.appimage)
./starship.appimage: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libSDL2-2.0.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libSDL2-2.0.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libtinyxml2.so.10)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libXcursor.so.1)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libwayland-client.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libxkbcommon.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libdecor-0.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libcrypto.so.3)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libpulsecommon-16.1.so)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libdbus-1.so.3)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libsndfile.so.1)
./starship.appimage: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libsndfile.so.1)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libsystemd.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libapparmor.so.1)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libmp3lame.so.0)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libcap.so.2)
./starship.appimage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /tmp/.mount_starshyU51Ff/usr/bin/../lib/libgcrypt.so.20)

Instalamos las dependencias tal como indica la documentación :

apt-get install gcc g++ clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libboost-dev libopengl-dev libogg-dev libvorbis-dev

Clonamos el repositorio:

git clone https://github.com/HarbourMasters/starship.git
cd starship
git submodule update --init

Debemos tener en cuenta que solo se soportan ciertas versiones de ROM :

The SHA-1 hash for a US 1.0 ROM is D8B1088520F7C5F81433292A9258C1184AFA1457.
The SHA-1 hash for a US 1.1 ROM is 09F0D105F476B00EFA5303A3EBC42E60A7753B7A.

Comprobamos el hash:

sha1sum ~/Star\ Fox\ 64\ \(U\)\ \(V1.1\)\ \[\!].z64
09f0d105f476b00efa5303a3ebc42e60a7753b7a  /home/kr0m/Star Fox 64 (U) (V1.1) [!].z64

Copiamos la ROM con el nombre baserom.z64:

cp ~/Star\ Fox\ 64\ \(U\)\ \(V1.1\)\ \[\!\].z64 ./baserom.z64

Generamos el proyecto Ninja:

cmake -H. -Bbuild-cmake -GNinja

Generamos el fichero sf64.o2r:

cmake --build build-cmake --target ExtractAssets -j8

Generamos el fichero starship.o2r:

cmake --build build-cmake --target GeneratePortO2R -j8

Compilamos el proyecto:

time cmake --build build-cmake -j8
real	2m13.282s

Ejecutamos el binario, en la documentación indican ./build-cmake/mm/2s2h.elf, pero el path correcto es ./build-cmake/Starship:

./build-cmake/Starship

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, incluso los efectos de vibración.