lokigames:quake1

Quake: The Offering

On October 5th 1998, id Software published (for Windows & DOS) “Quake: The Offering”, a compilation that included Quake and its two official mission packs: Scourge of Armagon and Dissolution of Eternity.

Macmillan Digital Publishing released a Linux version in early 1999, which used the glxQuake port.

This was the first official commercial release of Quake for Linux.

On the CD you will find 2 sets (one for libc5 based systems, the other one for glibc2/libc6 systems) of 5 versions of Quake for Linux:

  • SVGALib Quake (squake) – Software rendering, runs on the Linux text console.
  • GLQuake (glquake, glquake.glx and glquake.3dfxgl) – hardware rendering that runs using hardware 3D acceleration.
  • X11 Quake (quake.x11) – Software rendering in a window under X11.

SVGALib is long dead. This was a library that allowed programs to change video mode and display full-screen graphics, without the use of a windowing system.

The binaries “glquake” & “glquake.3dfxgl” both requires GLIDE/3DFX support, to run the game fullscreen with 3D acceleration, also without the use of a windowing system. You are certainly not using an old 3dfx accelerator on your x86_64 computer.

This leave us “glquake.glx” and “quake.x11”, both using standard X11.

This port is antique, it predates SDL and does everything by himself to handle sound & keyboard/mouse.

The real pain point is how it uses the original sound system for Linux, OSS. You would think that it's not a big dead, because you already use osspd, a userspace daemon that emulate the OSS devices (/dev/dsp, /dev/adsp and /dev/mixer) and that would normally save the day.

But unfortunately, the game use mmap() on /dev/dsp, and this is not supported by osspd. So we need to use the use the ALSA provided OSS emulation in the kernel:

# systemctl stop osspd
# modprobe snd-pcm-oss
# echo 'quake.x11 0 0 direct' > /proc/asound/card0/pcm0p/oss
# echo 'glquake.glx 0 0 direct' > /proc/asound/card0/pcm0p/oss

X11 Quake should now start:

./quake.x11 -mem 24 -width 1024 -height 768

To run GLQuake, you need to create a symlink “libMesaGL.so.2” that point to your i386 GL library.

ln -s /usr/lib/i386-linux-gnu/libGL.so.1 ./libMesaGL.so.2

If you try to run GLQuake now, it will crash, and the last line on the console will be:

Error: memory overwrite in Sys_Printf

The game wants to store a list of OpenGL extensions available in your graphic driver. What's happening is that the buffer with the extensions is too large for the ??? bytes allocated by the game. To prevent your graphics driver to expose an outrageously long list of OpenGL extensions, we will export one of those env variable to pretend we lives in the past:

export MESA_EXTENSION_MAX_YEAR=1999     # Mesa
export __GL_ExtensionStringVersion=4400 # Nvidia

You are all set now, let's play GLQuake:

LD_LIBRARY_PATH=$(pwd) ./glquake.glx -mem 24 -width 1280 -height 720
  • lokigames/quake1.txt
  • Dernière modification : 2025/11/12 13:29
  • de twolife