Tobias Pfaff

Researcher. Game programmer. Stingray enthusiast.


Abiventure is a graphical point-and-click adventure game some friends and me designed for our high-school graduation (2000). It is set at our high school, were the protagonist has to solve a conspiracy around lost students, math teachers and obnoxious daemons. To be honest, there is probably not much reason to play this game if you didn’t graduate at TG Buehl in 2000, since you wouldn’t get what’s going on. Plus, since this game was rushed between our final exams, the animations never got beyond “awful” level. When I replayed it some time ago, I noticed the things we found to be incredibly funny back then are mostly just plain stupid. Oh yeah, and it’s in German of course… you’ve been warned. Well, it was fun to make anyway. Especially the part where we had to explain to passer-bys why we’re setting up a pentagram with candles in front of the school building at midnight.


(the sixth picture is a zmap)

Setting up Abiventure

Download the game here. (music files are not included for file size and copyright reasons) Unpack and run abiventure.exe.

Playing Abiventure

Abiventure plays like a typical point-and-click adventure. The command set corresponds to the classic LucasArts commands. You can skip the intro and cutscenes by ESC, dialoguelines by the dot key. F1 activates the menu, in which you can load and save games and set the text speed. There is also an option called “graphics correction” which should be set to GDI if you see a pink box around the character.

Source code

The game is written entirely in plain C++ without the use of an adventure game API. Graphic output is done by the DirectDraw2d SDK, with custom classes for sprite movement, font handling & text output. For sound, the Windows API is used. The code should be mostly easily readable and clean, and is partly commented.

Graphic display

The graphics consist of a background image, and a number of color-keyed layer objects, which are painted in front or back of the character, depending on z-position. To determine the z-position of the character, z-maps are used. A zmap encodes the z-depth of the image as greyscale value, and also defines which regions the character may move on. The character is scaled in size depending on the z-value. The fonts are read in as colorkeyed charactermatrix bitmaps.


Abiventure features a scripting language for dialogs (.dlg files). It features conditional jumps, answer selection, different modes for outputting text and sound, setting of game variables and so on.

Objects and command parsing

A simple WYSIWYG tool (roomedit) is used to define screen regions for objects, fit in the layer overlays, control character size etc. The results are written in a .rm (room) text file, which can be hand-edited afterwards to include look-at texts for the objects etc. These files are read in during the game, and define standard room behaviour. Complicated commands and game events are hard-coded (using some C++ files which implement callback functions).

Download the source code here.