Mission Statement


The goal of the OpenDemo project is a game demo format like DEM (Quake), QWD (QuakeWorld), or DM2 (Quake2), but which is totally open and better designed for machinima purposes. The first supported games are Jedi Knight II: Jedi Outcast, Quake III Arena, Return to Castle Wolfenstein, Soldier of Fortune II: Double Helix, and Star Trek Voyager: Elite Force.

The full file format description and all the source code of the necessary game modifications and additional tools will be openly available.


Many games have a built-in demo recording feature. These demo formats are never described officially. There exists only (if at all) unofficial material (http://www.planetquake.com/demospecs) written by me. The existing demo formats are only variants of the network data flowing between the server and the clients. So any existing demo format description leads directly to the network protocol. Many cheaters misuse this information to write proxy-bots.

To stop this process, I decided not to publish any information regarding the Quake III Arena demo format DM3. There are also legal reasons. I'm not the only hacker and I know, that many talented hacker out there were already able to write their own DM3 format description and network protocol description but I hope it took a bit longer without my actual participation.

To make sure, that the machinima community can continue to evolve after Quake2 (the DM2 specs are widely known and used) I decided to write my own demo format: OpenDemo for Quake III Arena. In the mean-time it was ported over to other Q3A based games: Return to Castle Wolfenstein, Soldier of Fortune II: Double Helix, Jedi Knight II: Jedi Outcast, and Star Trek Voyager: Elite Force.

How it works

I am not very creative but I found the Quake II Relay project by Conor Davis and simply copied his idea over to Quake III Arena.

Quake III Arena and derived games are an excellent frame-work for modification and they also allow to read and write files during the game on the server and the client. So it is easy to write a server modification (Record part), which writes during the game the current state (coordinates and attributes of all entities) of the game server into a file. This file can be manipulated outside the game with any program and can be read in by another (Replay part) modification of the game. A client can connect to such a replay server and instead of playing the game, the client get the recorded data from the file. This information can even be stored locally on the client in a standard game specific file (DM3, DM_48, DM_66, or DM_67).