Введение
QuakeC — это компилируемый язык, разработанный в 1996 году Джоном Кармаком из id Software для программирования элементов видеоигры Quake. С помощью QuakeC программист может значительно расширить возможности Quake, добавляя оружие, изменяя игровую логику и физику, а также создавая сложные сценарии. Он позволяет управлять многими аспектами игры, такими как части искусственного интеллекта, триггеры или изменения уровней. Игровой движок Quake был единственным, использовавшим QuakeC. В последующих движках для настройки использовались игровые модули DLL, написанные на C и C++ начиная с id Tech 4.
QuakeC is a compiled language developed in 1996 by John Carmack of id Software to program parts of the video game Quake. Using QuakeC, a programmer is able to customize Quake to great extents by adding weapons, changing game logic and physics, and programming complex scenarios. It can be used to control many aspects of the game itself, such as parts of the AI, triggers, or changes in the level. The Quake engine was the only game engine to use QuakeC. Following engines used DLL game modules for customization written in C, and C++ from id Tech 4 on.
Обзор
Исходный код QuakeC для оригинальной игровой логики id Software Quake был опубликован в 1996 году и использовался как основа для модификаций, таких как «захват флага» и других. Исходный код QuakeC компилируется с помощью инструмента qcc в байт-код, который хранится в файле progs.dat. Программисты модификаций Quake могли затем публиковать свой байт-код, не раскрывая исходный код. Большинство модификаций Quake распространялись именно таким образом. QuakeC позволил движку Quake доминировать в жанре шутеров от первого лица. Благодаря идее Кармака о продлении жизни видеоигр за счет добавления неограниченной расширяемости (расширяемость уже играла важную роль в Doom), возникло огромное интернет-сообщество геймеров и программистов, и многие современные многопользовательские игры поддерживают расширения в той или иной форме. QuakeC считается интерпретируемым языком, поскольку во время работы Quake постоянно интерпретирует файл progs.dat.
Модифицированные компиляторы и языковые расширения
Декомпилятор и рекомпилятор были выпущены Армином Риго (называемые DEACC и REACC соответственно). Эти программы были созданы в процессе обратной инженерии и, вероятно, опубликованы до выпуска qcc. id Software выпустила исходный код qcc, своего компилятора QuakeC, вместе с оригинальным кодом QuakeC в 1996 году. Вскоре появились модифицированные версии, включая fastqcc Джонатана Роя и FrikQCC Райана "FrikaC" Смита. Они добавляли функциональность, оптимизации и повышали скорость компиляции. В 1999 году, когда id Software выпустила код движка Quake под лицензией GNU General Public License (GPL), была изучена работа интерпретатора байт-кода и выпущены новые компиляторы QuakeC, такие как qccx от J. P. Grossman и новая версия FrikQCC. Эти компиляторы использовали вновь обнаруженные возможности, сохраняя обратную совместимость, чтобы байт-код по-прежнему правильно интерпретировался оригинальными движками Quake. Новые возможности включали массивы, указатели, целые числа, циклы for и манипуляции со строками. С возможностью изменения исходного кода движка Quake, в QuakeC были добавлены новые встроенные функции, расширяющие его возможности. Функции, которых долго ждали программисты QuakeC, наконец-то стали реальностью: QuakeC теперь поддерживал функции обработки файлов и строк, увеличенные буферы строк, больше математических функций и многое другое. Однако программисты, воспользовавшиеся этими изменениями, потеряли обратную совместимость с оригинальным движком Quake. Xonotic, начиная с версии 0.7, использует компилятор gmqcc.
Клиентская сторона QuakeC
Некоторые улучшенные движки Quake (в частности, Darkplaces и FTEQW) поддерживают расширение стандартного QuakeC (теперь часто называемого QuakeC на стороне сервера), позволяющее создавать скрипты, работающие исключительно на стороне клиента, также известные как CSQC (client side QuakeC). Это особенно полезно для графических интерфейсов, HUD и любых визуально насыщенных эффектов, которые не требуют серверной симуляции и передачи по сети.