Skip to content

Things to test mobile GPU stacks


OpenGL (ES)

Dune Legacy: need original Dune game data. Relies on SDL2

the Doom engine: GZDoom; Castlevania 3D

SuperTux 2. SuperTuxKart


Modernized. Open source. Need original game data to play.




pak0 is the main gamedata. has a demo version (free) and a full version (non free)

pak1-7 includes add-ons. (also free?)

  • only pak0 (demo version) -- game can run

  • pak0 demo + pak[1-7]: game wont run (??)

  • full pak0 + pak[1-7]: game will run

timedemo: a built-in is called "four". the timedemo is included in pak6 and can be extracted. yet, it requires a map that does not exist in pak0 (demo). so can only run on pak0 (full)?


runs out of box on stock rpi4.

NB: already uses its GL2 renderer

Installation (Debian based aarch64)

Just directly do

sudo apt install innoextract game-data-packager
game-data-packager quake3 -i --gain-root-command sudo

The commands will grab the gamedata as well as install ioquake3

Installation Ref:

quak3's Debian package page

"PAK0.PK3 from the full version of Quake III Arena. This file is 457 MB (479,493,658 bytes) in size and can be found in the Quake3\baseq3 directory on the original game disc, or in the Quake 3 Arena\baseq3 directory in the Steam installation. PAK1.PK3 to PAK8.PK3 from the official Quake III Point Update 1.32, and also available from the Steam installation"

File data


Good video showing how it works

debian installation paths

actual data:


demo data:


game engine (ioquake3)


​ /usr/lib/ioquake3/ioquake3 # executable. failed to run this directly. complain no gamedata found

game-data-packager launcher

/usr/games/quake3. a symlink to a generic gdp launcher. read the config file


​ will launch ioquake3 with the following

/usr/lib/ioquake3 ioquake3 +set com_homepath .q3ademo +set com_basegame demoq3 +set sv_pure 0 +set vm_ui 0 +set vm_cgame 0 +set vm_game 0 +set fs_basepath /usr/lib/quake3/demo

q3 filesystem doc


com_homepath: the per-user setting. ~/.q3ademo -- includes recorded timedemos, etc.

​ crash log ~/.q3ademo/demoq3/crashlog.txt


"The "base path" is the path to the directory holding all the game directories and usually the executable. It defaults to ".", but can be overridden with a "+set fs_basepath c:\quake3" command line to allow code debugging in a different directory"

The "home path" is the path used for all write access. On win32 systems we have "base path" == "home path", but on *nix systems the base installation is usually readonly, and "home path" points to ~/.q3a or similar

The "base game" is the directory under the paths where data comes from by default, and can be either "baseq3" or "demoq3".

The "current game" may be the same as the base game, or it may be the name of another directory under the paths that should be searched for files before looking in the base game. This is the basis for addons.


in com_basegame (/usr/lib/quake3/demo)

must create a separate dir called "baseq3". put all pak* of the full gamedata (there is where timedemo "four" resides).

then launch the game WITHOUT "+set com_basegame". this falls back to the default game name "baseq3".

the game will output separate gamedata: ~/.q3ademo/baseq3

├── baseq3                                                                   
│   ├── botfiles -> ../../../../share/games/quake3-demo-data/demoq3/botfiles 
│   ├── -> ../../../ioquake3/baseq3/          
│   ├── gfx -> ../../../../share/games/quake3-demo-data/demoq3/gfx           
│   ├── pak0.pk3 -> /home/pi/q3-game-data/pak0.pk3                           
│   ├── pak1.pk3 -> /home/pi/q3-game-data/pak1.pk3                           
│   ├── pak2.pk3 -> /home/pi/q3-game-data/pak2.pk3                           
│   ├── pak3.pk3 -> /home/pi/q3-game-data/pak3.pk3                           
│   ├── pak4.pk3 -> /home/pi/q3-game-data/pak4.pk3                           
│   ├── pak5.pk3 -> /home/pi/q3-game-data/pak5.pk3                           
│   ├── pak6.pk3 -> /home/pi/q3-game-data/pak6.pk3                           
│   ├── pak7.pk3 -> /home/pi/q3-game-data/pak7.pk3                           
│   ├── pak8.pk3 -> /home/pi/q3-game-data/pak8.pk3                           
│   ├── -> ../../../ioquake3/baseq3/        
│   ├── scripts -> ../../../../share/games/quake3-demo-data/demoq3/scripts   
│   ├── -> ../../../ioquake3/baseq3/                
│   └── vm -> ../../../../share/games/quake3-demo-data/demoq3/vm             
└── demoq3  

Launch with

startx /usr/lib/ioquake3/ioquake3 "+set com_homepath .q3ademo +set sv_pure 0 +set vm_ui 0 +set vm_cgame 0 +set vm_game 0 +set fs_basepath /usr/lib/quake3/demo"

configuration file



forked from ioquake

has some nice customization/optimizations (and installation convenience) for Rpi.

Feb 2021: does not support Rpi4 yet. not fully compatible with v3d driver (why?)

build on Mali


record & replay demo

console (~)

/record [demoname]
/stoprecord # or exit


/demo [demoname]


/timedemo 1 # turn on timedemo mode
/demo [demo name]

Tools for parsing timedemo files


said to build & run on Rpi4.

A list:


Vulkan: NCNN

OpenCL: Arm Compute Library, Arm NN