Quake 1 and Modern Linux

I used to be a huge Quake 1 fan. My brother and I used to play Quake 1 deathmatch into the wee hours of the night. Especially DM6, I can never get enough of that level. My brother called me the other day and told me he was going to be in town and that we should play some Quake 1 DM6 for old times sake. Sure I say, not thinking anything about it.

I dig around and dust off my old Quake 1 CD and install it on my Windows 2000 box and double click glquake.exe and it works flawlessly. For a game that was released four years before Windows 2000 even came out it worked pretty well. The next step is to get it running on my Linux box.

Herein lies the challenge. First off I had to try and find the old Quake binaries for Linux. I did eventually find them on ID's site but they didn't work. All the documentation referenced libsvga which Fedora Core 3 (or any modern distro) doesn't include anymore. There is an old X11 version that would load but it would only run in half the window. I later found out this was due to the fact that Quake 1 was never designed to be run in more than 16 bit color. So had I been running 16bit (or less) it would have filled the whole window.

So immediately I'm thinking, I'm not going to be able to get this to work. Windows is going to be the only way to play this game! All the linux documentation I can find references ancient RedHat 5.1, which is just not going to work. Ultimately I did find a newer updated Quake engine. The content (maps, skins, textures, etc) I had, but I had no engine on which to make them run. The new engine I found is called FuhQuake and it runs on Windows and Linux quiet well. ID Software released the Quake 1 engine source code under the GPL so these guys hacked it to run on modern operating systems.

"Score! I'm in business now," I think to myself. After some fiddling I did finally get it to work. The basics are that you need to uncompress FuhQuake into it's own directory and then copy the content in to that directory. The Quake 1 content is stored in the id1/ directory as two files: pak0.pak and pak1.pak. My first problem was getting the case right, on Linux for everything to work it all needs to be lowercase. Otherwise you'll get cryptic "can't load xxxx" errors.

Now I'm ready to launch the engine. I type ./fuhquake.x11 and BAM denied. It's immediately complaining about a missing libpng.so library, even though libpng is installed. There is an option for -nolibpng which works but it's not ideal. I did finally figure out that you need to install libpng-devel and libjpeg-devel. At this points it's launching flawlessly. After I installed the latest NVidia drivers even the OpenGL version was launching perfectly. "I'm ready to start fragging in no time," I think again.

However I have no sound at this point. This probably took me the longest amount of time to fix. Basically FuhQuake and old Linux Quake use old OSS soundcard access. Quake expects to have exclusive access to the soundcard. Any modern distro (running Kernel 2.6.x) comes with ALSA and doesn't allow this. Hence the error /dev/dsp: broken pipe I was getting. After some serious digging I came up with this forum post (2). Basically you have to tell ALSA that certain executables are allowed exclusive access to the sound card.

After I got sound working I now have a 100% Linux, OpenGL, with Sound version of Quake 1 running on modern hardware, on a modern operating system. It even has some updated graphics! It only took about two days, but I got it working :)
Leave A Reply - 4 Replies
jay 2005-06-25 07:10am - jasond@redata.com.au - Logged IP:

thank you kindly!

wayne sch 2005-08-12 10:33pm - No Email - Logged IP:

was it possible to get an svga version working in a modern linux? (eg: no x windows?)

Surak 2005-09-18 07:54am - No Email - Logged IP:

You could post the solution here. Both sites are offline.

nonono 2008-06-13 09:46pm - 3@mail.com - Logged IP:

to enable svgalib in modern linux the kernel has to be tweaked a bit. the gentoo howtos explain it in detail. while most modern linux distros assume framebuffer svgalib stuff is a thing "of the past". as the focus moves more towards usability and friendliness to the person who wants "it" to just work. watch the great linux operating system turn into a beos like point and click thing unless all the junk is torn off layer by layer and rebuilt from scratch. or use gentoo; tweak the kernel properly and there is no reason svgalib quake should not run. or for that matter seejpeg or mpegplay(from the original berkely mpeg distribution)

All content licensed under the Creative Commons License