On my never ending quest for as much gaming as possible on my little Raspberry Pi I was remembering a time where the laws of physics were mostly irrelevant and the frags were plentiful.


The original quake, no bloody 2, no bloody 3 and no bloody 4! Just pure fast paced carnage. So I pulled up the latest Quakeforge repository and decided to see where it would get me.

The long quest for Quake

The first problem I ran into was fairly minor but it seemed Rasbian defaulted at bison 2.5 and QF required 2.6 for some bloody reason. This was no big deal I just downloaded the source, compiled it and away it went. The process griped about a few more libraries along the way but they were all available from apt-get from that point on.

Once I had all the dependencies and ./configure ran its course I had a nice status menu of what it was building when I did the make.

The make process took a long time, walk away, go to the store, do something. This is a low powered single processor machine and it takes a while. Make sure you have everything configured the way you want as well as any changes makes it start it all over again.

So after growing a beard and starting a small garden in the back yard my first attempt at QF was compiled. Excited I typed nq-sdl to be presented with an error “libGL.so not found. QF defaults to the GL version it seems.

nq-sdl +set vid_render “sw”

Tada! we have Quake! the screen was a small window in the center of my console to correct this I had to revise my startup command

nq-sdl +set vid_render “sw +set vid_width “640” +set vid_height “480”

Now we have full screen Quake! Almost immediately though I noticed something was wrong. First the sound was popping. Eventually the client would become unbearably slow and fill the console with errors stating it was out of channels.

Secondly any time the player hits an item or is damaged the screen flickers for about a second. Very distracting, very annoying.

Sound problem

I reconfigured and disabled ALSA and OSS drivers with –disable-alsa and –disable-oss as I was trying for an SDL only build. This fixed the sound issue 100% No popping, no eventual slow down and channel problems.

Flickering problem

This issue took me a day or so of on and off investigating to isolate as I have never dealt with the Quake source directly before.

Eventually I came across a file called cl_view.c which had 2 functions as plain as day for handling damage and bonus collections with a palette change “flash”. What I did just to see if I had the right idea was block out the cshift variable changing with an #ifdef block and recompiled.

Sure enough no more flicker. Not sure why it’s broken on software rendering but I filed a ticket to the project and hopefully someone properly fixes it someday. For now it works for me time to move on!

Arcade controls

Come on, you knew that was coming… heh. Yes I got Quake working with my arcade controls. At first I tried handling it through the quake menu system under controls -> bindings but this wasn’t actually setting the functions I wanted to the buttons I wanted.

I eventually had to manually edit ~/.quakeforge/id1/config.cfg and set the bindings manually to match the keys my retrogame was sending to the actions I wanted. It was a bit tedious and manual BUT I got the results I wanted.

Retrogame changes

With the existing setup I had I could pull up the menu with the KEY_ESC vulcan nerve pinch that the code already had but to select items I needed a KEY_ENTER. What I did was added multiple key combinations to the code so I can send KEY_ESC, KEY_ENTER and a specific system halt combination. This allows me to navigate MAME, Super Mario war and now Quake with ease. I have uploaded all my retrogame changes to github you can view them here.

Not done yet

Now what about multiplayer? Don’t worry, I am going to do something special with qw-client-sdl in this regard. I’m sure there will be a post in the future about it.

Facebook Comments

4 comments so far

Add Your Comment
  1. If you have an interest in quake 3, I did a port of it to Windows PocketPC 2003 many years ago. The thing was converting the entire codebase from OpenGL (floating point) to OpenGL ES (fixed point). On a device like the PI, that code could be re-used to save you some time if you wanted to do the port someday.


    • Someone did a Q3 ioquake port for RPi already, I have it on the same machine but Original Quake has a special quirk to it that always keeps it my favourite plus it has a single player mode that is playable with an arcade stick. Q3A while fun and looks very pretty on my 40 inch TV with the Pi is very hard to compete against the AI even on easy…. heh but thanks for your interest!

  2. Hi,

    I follow your tuto but i have an error when I launch nq-sdl :

    Fatal Error: VID: Couldn’t load SDL: Unable to open a console terminal

    How to resolve this pb ? Thx !

    • that was with the +vid_render “sw” ?

      try +vid_render “sw32” you can also try it as default, even with GL it should open (but it will be slow) just to see if anything happens

You must be logged in to post a comment.