No puedo jugar a UrbanTerror desde la TTY (abre el juego pero se cierra), asi que le pedi a Claude AI que me lo arregle.
¡Buena aclaración! En Arch el proceso es más limpio. Vamos:
sudo pacman -S git base-devel sdl2 mesa libgl \
libpulse alsa-lib libdrm libgbm \
curl speex opusfile
Verificá que SDL2 tenga KMSDRM (en Arch viene habilitado por defecto):
sdl2-config --version
# Confirmar backend KMSDRM:
find /usr/lib -name "libSDL2*" | xargs strings | grep -i kms
git clone https://github.com/ioquake/ioq3.git
cd ioq3
make \
USE_SDL=1 \
USE_OPENGL2=0 \
USE_CURL=1 \
USE_VOIP=1 \
ARCH=x86_64 \
-j$(nproc)
El binario queda en:
./build/release-linux-x86_64/ioquake3.x86_64
SDL_VIDEODRIVER=kmsdrm \
./build/release-linux-x86_64/ioquake3.x86_64 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/urbanterror/UrbanTerror43
# Tu usuario debe estar en el grupo 'video' y 'input'
sudo usermod -aG video,input $USER
# Verificar dispositivos DRM disponibles:
ls -la /dev/dri/
# Debería verse algo como:
# card0, card1, renderD128
Después de agregar al grupo, cerrar sesión y volver a entrar para que tome efecto.
Para no escribir todo cada vez:
cat > ~/launch-urt.sh << 'EOF'
#!/bin/bash
SDL_VIDEODRIVER=kmsdrm \
SDL_RENDER_DRIVER=opengles2 \
/home/esotericwarfare/ioq3/build/release-linux-x86_64/ioquake3.x86_64 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/urbanterror/UrbanTerror43 \
"$@"
EOF
chmod +x ~/launch-urt.sh
| Problema | Solución |
|---|---|
KMSDRM not available |
SDL2 del sistema no tiene el backend, reinstalar con sudo pacman -S sdl2 |
could not open display |
Normal en TTY, KMSDRM no necesita display |
signal 11 igual |
Probar SDL_VIDEODRIVER=offscreen para descartar el problema |
| Pantalla negra | Agregar +r_mode -2 +r_fullscreen 1 al comando |
| Sin sonido | Agregar SDL_AUDIODRIVER=alsa o =pulseaudio |
¿Querés que también vea cómo hacer que arranque automáticamente desde TTY1 al iniciar el sistema?
El repo cambió a CMake. Usá el nuevo sistema de build:
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_SDL2=ON \
-DUSE_OPENGL2=OFF \
-DUSE_CURL=ON \
-DUSE_VOIP=ON
cmake --build . -j$(nproc)
El binario quedará en algún lugar dentro de build/, buscalo con:
find . -name "ioquake3*" -type f
Pegame la salida del cmake si hay errores y lo resolvemos.
Compiló bien pero el binario se llama diferente con CMake. Buscalo así:
find ~/ioq3/build -type f -executable | grep -v ".so\|.qvm\|cmake\|Makefile"
Probablemente se llame ioquake3 o ioq3. Luego ejecutalo:
SDL_VIDEODRIVER=kmsdrm \
~/ioq3/build/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/urbanterror/UrbanTerror43
Pegame la salida del find y te digo exactamente dónde está.
Tenés razón, ignoró las flags. Pero primero probá igual, porque SDL2 en Arch ya viene compilado con KMSDRM por defecto:
SDL_VIDEODRIVER=kmsdrm \
~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/urbanterror/UrbanTerror43
Si falla, verificá que SDL2 tenga el backend:
strings /usr/lib/libSDL2.so | grep -i kms
Si muestra kmsdrm o KMSDRM entonces está disponible y debería funcionar.
Pegame el output del juego al intentar arrancar y lo resolvemos desde ahí.
Progreso! Los 10578 archivos pk3 se cargan correctamente. El problema ahora es que ioQuake3 exige los archivos de Quake 3 base (pak0.pk3 a pak8.pk3) en la carpeta baseq3, pero Urban Terror no los necesita realmente.
Tenés que engañarlo creando un baseq3 falso con un pak vacío:
mkdir -p /home/esotericwarfare/UrbanTerror43/baseq3
# Crear un pak0.pk3 vacío válido
cd /tmp
mkdir fakepak && cd fakepak
zip -r ../pak0.pk3 . 2>/dev/null || echo "" | zip > ../pak0.pk3
cp /tmp/pak0.pk3 /home/esotericwarfare/UrbanTerror43/baseq3/
Luego volvé a correr:
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/
Esto debería pasar el chequeo de baseq3 y llegar a inicializar el renderer. Pegame el output y vemos si ya abre el juego o hay otro error.
ioQuake3 verifica checksums de los pak. Pero pak1-pak8 son gratuitos y legales. Descargalos directamente:
cd /home/esotericwarfare/UrbanTerror43/baseq3
# Pak1-pak8 son oficialmente gratuitos
for i in 1 2 3 4 5 6 7 8; do
wget "https://ioquake3.org/get-quake-3/pak${i}.pk3" -O "pak${i}.pk3"
done
Si esa URL no funciona, están disponibles en el mirror oficial:
for i in 1 2 3 4 5 6 7 8; do
wget "https://github.com/nrempel/q3-server/raw/master/baseq3/pak${i}.pk3" -O "pak${i}.pk3"
done
Para pak0 necesitás comprarlo legalmente (es el único que tiene checksum verificado). Sin embargo, ioQ3 debería poder arrancar Urban Terror sin pak0 válido si omitís la verificación. Compilá ioQ3 con esa verificación desactivada:
cd ~/ioq3/build
# Editar el source para saltear el chequeo
grep -r "pak0" ~/ioq3/code --include="*.c" -l
Pegame qué archivos aparecen y lo parcheamos para que no exija pak0.
Perfecto, está en un solo archivo. Parchealo así:
grep -n "pak0\|checksum\|MISSING\|pak1.*pak8\|data files are missing" ~/ioq3/code/qcommon/files.c | head -30
Pegame las líneas que aparecen y lo parcheamos quirúrgicamente para que no exija los pak de Q3.
Ahora buscá específicamente la función que bloquea el arranque:
grep -n "pak1.*pak8\|pak0.*checksum\|data files are missing\|must be purchased\|re-copy pak0\|WARNING.*baseq3\|Com_Error.*baseq3\|FS_CheckPak0\|CheckPak" ~/ioq3/code/qcommon/files.c
Perfecto. Mirá las líneas de la función completa y luego la comentamos:
sed -n '3529,3760p' ~/ioq3/code/qcommon/files.c
Perfecto. El comentario en el código lo dice todo:
“If you’re building a game that doesn’t depend on the Q3 media pak0.pk3, you’ll want to remove this by defining
STANDALONEin q_shared.h”
Eso es exactamente lo que necesitás. Editá q_shared.h:
grep -n "STANDALONE" ~/ioq3/code/qcommon/q_shared.h | head -10
Probablemente esté comentado. Descomentalo o agregalo:
# Buscar la línea
grep -n "STANDALONE\|standalone" ~/ioq3/code/qcommon/q_shared.h
Si no existe, agregalo manualmente:
sed -i '1s/^/#define STANDALONE\n/' ~/ioq3/code/qcommon/q_shared.h
Luego recompilá:
cd ~/ioq3/build
cmake --build . -j$(nproc)
Y ejecutá de nuevo:
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/
Con STANDALONE definido, ioQ3 no va a exigir ningún pak de Quake 3 y arrancará directo con los archivos de Urban Terror.
Está comentado en la línea 29. Mirá cómo está exactamente:
sed -n '25,45p' ~/ioq3/code/qcommon/q_shared.h
Es un #ifdef, o sea que STANDALONE tiene que estar definido antes de ese bloque. Agregalo justo arriba de la línea 29:
sed -i '29s/^/#define STANDALONE\n/' ~/ioq3/code/qcommon/q_shared.h
Verificá que quedó bien:
sed -n '27,35p' ~/ioq3/code/qcommon/q_shared.h
Debe verse:
#define STANDALONE
#ifdef STANDALONE
#define PRODUCT_NAME "iofoo3"
...
Luego recompilá y probá:
cd ~/ioq3/build
cmake --build . -j$(nproc) && \
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/
Jajaja! El problema era que Falkon estaba usando el dispositivo DRM/EGLFS y no lo soltaba, entonces cuando ioQ3 intentaba abrirlo con KMSDRM ya estaba ocupado.
Cerraste Falkon y funcionó solo porque SDL2 sí tiene KMSDRM, solo estaba bloqueado.
Entonces el resumen final para arrancar Urban Terror desde TTY:
# Asegurarse de no tener nada usando DRM/EGLFS primero
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/
Guardalo como script:
cat > ~/urt.sh << 'EOF'
#!/bin/bash
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/ \
"$@"
EOF
chmod +x ~/urt.sh
El juego abre bien o hay algún problema gráfico/de controles?
Con la tecla ~ abrís la consola y te conectás con /connect IP:PORT googleá urbanterror servers.
GENIAL!! Lo logramos! Después de todo ese camino compilar ioQ3, parchear STANDALONE, el pak0 falso, sdl12-compat… funcionó!
Para los mapas que faltan, UrT los descarga automáticamente si configurás el directorio de descarga. Desde la consola del juego (~):
/cl_allowDownload 1
/cl_downloadURL ""
O agregalo al script de arranque para que siempre esté activo:
cat > ~/urt.sh << 'EOF'
#!/bin/bash
SDL_VIDEODRIVER=kmsdrm ~/ioq3/build/Release/ioquake3 \
+set fs_game q3ut4 \
+set fs_basepath /home/esotericwarfare/UrbanTerror43/ \
+set r_mode -2 \
+set r_customwidth 1920 \
+set r_customheight 1080 \
+set r_fullscreen 1 \
+set cl_allowDownload 1 \
"$@"
EOF
chmod +x ~/urt.sh
Los mapas se guardan automáticamente en:
~/.q3a/q3ut4/
Y la próxima vez que entres a ese servidor ya los tenés. Disfrutá el juego!