QuakeC для начинающих
Во-первых, позвольте мне дать вам краткое объяснение того, что же такое QC. QuakeC — интерпретируемый язык программирования, разработанный в 1996 году Джоном Кармаком (id Software) для написания части компьютерной игры Quake. Используя QuakeC, программист имеет возможность модифицировать игру: добавить оружие, изменить игровую логику и физику, написать сложный сценарий. Язык может использоваться для контроля за многими аспектами игры, такими как искусственный интеллект (противников), триггеры, изменения на карте.
QC записан в .qc файлах, которые компилируются QC компилятором в файл под названием progs.dat. Движок Quake читает код из progs.dat
QC код отвечает не за все в Quake. Часть кода обрабатывается движком. QC включает в себя: оружие, движения игроков,анимации,искусственный интеллект и т.д.
Первое, что вы должны сделать, это достать копию исходного кода QC . Последней версией, выпущенной Software ID была версия 1.06, но я рекомендую использовать исходники Джастина Тимьяна, которые являются очищенным вариантом версии оригинального исходного кода. Его можно скачать здесь: http://www.quaddicted.com/files/tools/Clean_v106qc.zip
Следующее, что вам нужно сделать, это создать новый каталог для нашего мода. Внутри вашей папки Quake нужно создать папку с вашим модом,например mymod. Далее вам нужно поместить QC код в эту папку. Распакуйте Clean_v106qc.zip ,или возьмите папку qc из архива и положите ее в папку с вашим модом(в нашем случае это mymod),должно получится такое: quake/mymod/qc
Теперь, когда QC файлы лежат в нужной папке, следующее, что нужно сделать,это найти компилятор. Это программа, предназначенная для компиляции текстовых. QC-файлов в файл progs.dat. QC компилятора от ID Software назывался QCC.EXE, но как и многие оригинальные инструменты Quake он был заменен более современным компилятором, улучшенной версии. Я рекомендую FTEQCC.(http://www.4shared.com/file/yHnxNE5M/fteqcc.html) или (http://www.quaddicted.com/files/tools/fteqccgui2770-win32.zip)
Распакуйте этот файл в quake/mymod/qc и запустите FTEQCC.EXE для компиляции кода. Появится командная строка DOS и покажет список qc файлов ,а затем остановится.Предположим,что ошибок у нас никаких нет и закроем DOS окно. В папке quake/mymod появится наш progs.dat . Вы можете запустить этот мод сейчас, но так как мы ничего не изменили,значит глупо запускать тот же квейк.
Итак, давайте вдаваться в код. Но для начала, что мы хотим сделать? Я думаю, что для этого урока я начну с очень простого. Давайте сделаем "Сообщение дня", сообщение, которое ненадолго появляется в центре экрана, когда игроки подключаются к серверу. Давайте сделаем это.
Открываем файл quake/mymod/qc/client.qc. Это QC файл отвечает за такие вещи как:спавн игроков, что делать когда игроки подключаются и отключаются и т.д. Это все относится к функциям клиента. QC файлы разбиваются на функции(functions), которые являются автономными участками кода. Простая функция выглядит следующим образом:
void() GotoNextMap = { if (cvar("samelevel")) // if samelevel is set, stay on same level changelevel (mapname); else changelevel (nextmap); };
Это довольно короткая функция. Я не буду перечислять все, что она делает сейчас, здесь показано что у функции есть имя (GotoNextMap). А тело функции раздела в фигурных скобках(это код, который запускается, когда эта функция вызывается)
Хорошо, теперь игнорируем эту функцию полностью, так как я просто показал как функция выглядит. Функция, которую мы ищем, называется ClientConnect и находится она на линии 1159. Выглядит это примерно так:
/* =========== ClientConnect вызывается,когда игрок подключается ============ */ void() ClientConnect = { bprint (self.netname); bprint (" entered the game\n"); // a client connecting during an intermission can cause problems if (intermission_running) ExitIntermission (); };
Раздел / * и * /, является комментарием. Комментарии игнорируются компилятором полностью, они нужны для того, чтобы сделать код более легким для чтения и понимания для людей, которые редактируют код. Строки, начинающиеся с / / тоже комментарий. Как отмечено в комментарии,в начале говорится о том что, эта функция вызывается, когда клиент соединяется с сервером. Это идеальное место чтобы написать наш код "Сообщение дня", так как мы хотим, чтобы сообщение писалось игроку, когда он присоединяется к серверу. В конце функции, как раз перед окончательным};; добавьте следующую строку:
centerprint(self, "Welcome To My Mod\n");
centerprint является функцией встроенной в движок и, используется для вывода сообщения в центре экрана игрока self является переменной, которая здесь указывает на игрока, который только что подключился к серверу, таким образом,движок знает, кому показать сообщение.(self на самом деле может относится к любому субъекту в игре) В функции стрельбы из оружия self будет относиться к игроку, который стрелял из оружия и т.д. Это очень полезная переменная для многих ситуаций, и вы будете использовать ее много раз. "Welcome To My Mod\ n", сообщение, которое мы хотим отобразить. \ n в этом сообщении-не будет показано на экране,так как это используется для того,чтобы сообщить движку,что это конец строки.
Вы, наверное, заметили, что большинство строк кода, кажется, заканчиваются точкой с запятой. Это говорит компилятору о том, что команда достигла конца, и он будет жаловаться/отказываться от компиляции, если ; стоит не правильно.
Говоря о компиляторах, сохраните client.qc и запустите FTEQCC.EXE. Предположим,что все скомпилировалось. Запускаем мод, и смотрим наше "Сообщение дня"