💾 Archived View for andoniserra.me › crashlogs › stardew-pbp.gmi captured on 2024-06-16 at 12:20:00. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Hablando con Ekaitz, me comentó que había estado viendo a Fanta jugar al Stardew Valley y que le había molado mucho. Es un juego al que le he metido bastantes (demasiadas?) horas y al que de vez en cuando vuelvo para ver que hay de nuevo. Y me ha vuelto a entrar el gusanillo.
Ya no tengo un ordenador con X86, ahora es ARM y de momento somos minoría, asi que hay pocos juegos que tengamos disponibles para nuestra plataforma. PEEEEERO si que encontré un tutorial de hace unos dos años explicando com hacer funcionar Stardew Valley y otros juegos hechos con FNA en ARM[1], así que voy a dejar aquí el crashlog que voy a ir escribiendo según voy avanzando y probando si rula bien.
He ejecutado la versión de GOG de Stardew Valley, la nativa de GNU/Linux sin hacer nada de esto y me va muy lentilla y sin sonido, así que a ver si con todo ello funciona bien.
Vuelvo a recalcar que esto es para Manjaro en ARM, en el post[1] lo podéis encontrar para Debian, que puede ser útil para Raspberrys o placas similares.
Vamos a necesitar las siguientes cosas:
sudo pacman -Syu git mercurial mono cmake sdl2 sdl2_net sdl2_mixer sdl2_ttf libtheora libvorbis vulkan-headers
Primero vamos a crear una carpeta donde dejaremos todas las librerías que vayamos compilando:
mkdir ~/monolibs
GL4ES es una librería que nos permitirá ejecutar software programado para openGL1 y 2 en hardware GLES. Nos bajamos el repo:
mkcd dev #chupitruqui de hoy, crea y entra al directorio
git clone https://github.com/ptitSeb/gl4es.git
Hacemos cosas de magia negra con cmake y compilamos
cmake -DODROID=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo .
make -j2
Esto nos generará el archivo libGL.so.1 que copiaremos a la carpeta de las librerias
cp lib/libGL.so.1 ~/monolibs
El autor comenta en el post que puede que tengamos ya instalado SDL2 (puede no, lo hemos instalado en las dependencias), aunque seguramente esté compilado para que soporte solo GLES y no OpenGL que es lo que usan estos juegos, así que supongo que se ha forkeado SDL2 y lo habrá configurado para compilarlo también con OpenGL.
volvemos al directorio dev, bajamos y cmakeamos SDL2
cd ~/dev
git clone https://github.com/ptitSeb/SDL2.git
cd SDL2
mkcd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
Una vez hecho esto nos saldrá un churro de logs, poco mas arriba de donde nos haya dejado, debería aparecer una linea como la siguiente
--VIDEO_OPENGL (Wanted: ON): ON
Y ahora una cosilla que he tenido que cambiar para compilarlo. No tengo instalado wayland, por lo que me cascaba hacia el final de la compilación y no me generaba la librería. Para que pase, porque no sé si la estoy liando o no, he comentado unas pocas lineas en el archivo include/SDL_config.h
nano include/SDL_config.h
La linea 327 la he dejado así
/* #define SDL_VIDEO_DRIVER_WAYLAND 1 */
De la 336 a 340 he hecho comentario en bloque
/* #define SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH 1
#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC "libwayland-client.so.0"
#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL "libwayland-egl.so.1"
#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR "libwayland-cursor.so.0"
#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON "libxkbcommon.so.0" */
Y ahora... a compilar
make -j2
Esto nos va a generar 2 links y un archivo. Los links libSDL2-2.0.so y libSDL2-2.0.so.0 van a libSDL2-2.0.so.0.9.0, el cual vamos a copiar a la carpeta de librerías, según el post del autor, con otro nombre
cp libSDL2-2.0.so.0.9.0 ~/monolibs/libSDL2-2.0.so.0
Estos shaders sirven para convertir los shaders escritos para DirectX en shaders de GLSL para OpenGL.
Esta parte tiene mas complicación que las demás, solo porque he tenido que buscarme un poquillo la vida para poder compilar los shaders. Además necesitaremos una dependencia extra que no sale en el post original, aunque ya la hemos instalado antes, vulkan-headers.
Vamos a la carpeta y clonamos el repo.
cd ~/dev
hg clone http://hg.icculus.org/icculus/mojoshader
cd mojoshader
Tendremos que editar un archivo porque falla para arquitecturas arm64[2]
nano misc/lemon.c
Tenemos que editar la linea 3469 a dia de hoy, su contenido es
int hash; /* For hashing the name of a type */
Tendremos que añadirle un 'unsigned' al inicio, quedando esta linea así
unsigned int hash;
Ahora creamos una carpeta build, usaremos cmake, después compilaremos y copiaremos la libreria a ~/monolibs
mkcd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=ON -DDEPTH_CLIPPING=ON -DFLIP_VIEWPORT=ON ..
make -j2
cp libmojoshader.so ~/monolibs
Parece ser que stardew Valley busca alguna librería que no encuentra, pero la tenemos instalada en el sistema y lo unico que necesitamos será generar un link, así que hacemos lo siguiente, recordad que esto es para manjaro en un pinebook pro, puede que si usais otro sistema operativo o placa se encuentre en otra ruta.
ln -s /usr/lib/libopenal.so libsoft_oal.so
De momento lo he hecho funcionar con estas 3 librerías compiladas y el link a la de OpenAL, así que de momento me vale, vendría bien mejorarle algo el rendimiento, así que iré actualizando el crashlog según vaya enredando más con ello.
Ahora mismo tenemos una carpeta ~/dev con cosas y otra en ~/monolibs con otras tantas.
Para los juegos me he creado una carpeta en ~/Games y dentro de ella voy a meter la carpeta monolibs, para que todos los que tiren de FNA pillen esas librerías, asi que:
mkcd ~/Games
mv ~/monolibs .
En la carpeta ~/Games copiamos la carpeta del Stardew Valley que tendremos de Steam o de GOG, recordad que tiene que ser la versión de GNU/Linux, si te aventuras a usar la de windows avisa si funciona.
La carpeta ~/dev si no la usabas de antes puedes cargartela, si la usabas supongo que ya sabes que te puedes saltar este paso :)
rm -rf ~/dev
Para ejecutar el juego tenemos que meter un churro de comando, lo mejor va a ser crearnos un script para no liarla, mas adelante mejoraré esto, porque no me mola nada.
En la carpeta ~/Games/StardewValley creamos un archivo launch.sh
nano launch.sh
Pegamos el siguiente churro en el archivo, tened en cuenta que solo es una línea:
LC_ALL=”C” LIBGL_ES=2 LIBGL_GL=21 LIBGL_DEFAULTWRAP=2 LIBGL_FBOFORCETEX=1 LD_LIBRARY_PATH=~/Games/monolibs mono StardewValley.exe
Guardamos, salimos y le damos permisos de ejecución:
chmod +x launch.sh
Y ahora comprobaremos si todo ha ido bien lanzando el archivo:
./launch.sh
Disfrutad! :)
He eliminado los archivos mscorlib.dll, todos los System.* y los msc.*, no parece que sean necesarios
[1] Playing Modern FNA Games on the ODROID Platform
---