# QuakeC

QuakeC ist eine 1996 von John Carmack von id Software entwickelte Skriptsprache. Sie wurde entwickelt, um Teile des Computerspiels Quake zu schreiben und findet innerhalb der Quake-Serie sowie Spielen auf Basis der Quake-Engine Verwendung. Ein Programmierer kann mit QuakeC Quake individualisieren, zum Beispiel durch das Hinzufügen von Waffen, Ändern der Spiellogik und -physik oder der Beschreibung neuer Szenarien. Es kann genutzt werden, um viele Aspekte des Spiels wie Teile der künstlichen Intelligenz, Auslösung von Ereignissen oder Aufbau der Spielkarten zu verändern.

## Übersicht

Der QuakeC-Quellcode für die originale Quake-Spiellogik von id Software wurde 1996 veröffentlicht und wurde als Basis für Mods genutzt. QuakeC-Quellcode wird mit einem Programm namens qcc in Bytecode kompiliert und in einer Datei mit Namen progs.dat gespeichert. Der Programmierer eines Quake-Mods kann dann seine modifizierte progs.dat veröffentlichen, ohne den Quellcode veröffentlichen zu müssen. Die meisten Quake-Mods wurden auf diese Weise veröffentlicht.
QuakeC erhöhte die Erweiterbarkeit von Quake und ermöglichte Mod-Entwicklern eine größere Flexibilität als dies bei den vorherigen Titeln von id Software wie Doom und Wolfenstein 3D möglich war. Dadurch erlangte Quake eine große Modding-Gemeinschaft.

## Einschränkungen

Die Syntax von QuakeC basiert – wie der Name bereits vermuten lässt – auf derer der Programmiersprache C, ist allerdings vergleichsweise stark limitiert. QuakeC erlaubt zum Beispiel nicht die Definition neuer Datentypen durch Strukturen oder Objekte. Außerdem leidet QuakeC unter der Einschränkung, dass viele built-in-Funktionen (Funktionen, die einen Prototyp in QuakeC haben, aber in der in C geschriebenen Game-Engine definiert werden), die Text zurückgeben, diesen in einem temporären Puffer speichern, der nur eine Zeichenkette speichern kann. Im Klartext heißt das, dass ein Konstrukt wie
    EineFunktion( ftos(Zahl1), ftos(Zahl2) );
nicht funktioniert, da der zweite Aufruf der ftos-Funktion (welche eine Gleitkommazahl in einen String umwandelt) die Zeichenkette, die vom ersten Aufruf gespeichert wird, überschreibt, bevor EineFunktion diese verarbeiten kann.
Die Mängelliste lässt sich mit dem kompletten Fehlen von Funktionen, die das Bearbeiten von Zeichenketten oder Zugriff auf das Dateisystem zulassen, fortführen, welche das Originalspiel einfach nicht benötigte. Auch wenn andere Programmierer die Funktionen hätten brauchen können, wurden Dinge wie Dateimanipulation nicht eingebaut, um Sicherheitsprobleme beim Herunterladen von fremden progs.dat-Dateien zu vermeiden.
Die Spiellogik der meisten Computerspiele ist in purem C(++) geschrieben und wird in die ausführbare Datei des Spiels kompiliert, was schneller ist als eine Skriptlösung. Dies macht es jedoch schwieriger für die Spieler die Spiele zu modden (eine Mod zu erstellen).

## Modifizierte Compiler und Syntax

Wie es bei id Software Brauch ist, wurde der Quellcode von qcc, des QuakeC-Compilers, zusammen mit dem QuakeC-Quellcode 1996 veröffentlicht. Schnell erschienen modifizierte Versionen wie Jonathan Roys fastqcc und Ryan Smiths FrikQCC. Sie fügten Funktionalität, Optimierungen und Verbesserungen der Geschwindigkeit des Compilers hinzu.
Im Jahre 1999, als id Software den Quellcode der Game-Engine von Quake unter der GPL veröffentlichte, untersuchte die Mod-Gemeinde die Funktionsweise der virtuellen Maschine der Engine und veröffentlichte neue QuakeC-Compiler wie J.P. Grossmans qccx und eine neue Version von FrikQCC. Diese Compiler machten Gebrauch von neuen Fähigkeiten in einer rückwärts-kompatiblen Weise, sodass die virtuelle Maschine der unveränderten Engine die kompilierten Skripte nach wie vor interpretieren konnte. Neue Fähigkeiten waren unter anderem die Unterstützung für Arrays, Zeigern, Integer-Variablen, for-Schleifen und Zeichenketten-Manipulation.
Mit der Veröffentlichung des Quellcodes der Engine konnten neue Funktionen eingebaut werden, die Mod-Entwickler lange vermisst hatten. Dazu gehörten die bereits erwähnten Funktionen für Zeichenketten-Manipulation, Zugriff auf das Dateisystem, vergrößerte Zeichenketten-Buffer, mehr Mathematik-Funktionen und so weiter. Allerdings verloren Programmierer, die die neuen Fähigkeiten nutzten, die Kompatibilität zu der unveränderten Quake-Engine.