Во-первых, позвольте мне дать вам краткое объяснение того, что же такое QC.
QuakeC — интерпретируемый язык программирования, разработанный в 1996 году Джоном Кармаком (id Software) для написания части компьютерной игры Quake. Используя QuakeC, программист имеет возможность модифицировать игру: добавить оружие, изменить игровую логику и физику, написать сложный сценарий. Язык может использоваться для контроля за многими аспектами игры, такими как искусственный интеллект (противников), триггеры, изменения на карте.
QC записан в .qc файлах, которые компилируются QC компилятором в файл под названием
progs.dat. Progs.dat читается движком Quake , и он принимает код игры оттуда.
QC код отвечает не на все в Quake. Часть кода обрабатывается движком Quake Engine. QC включает в себя: оружие, движения игроков и анимации, все элементов кода и т.д.
Первое, что вы должны сделать, это достать копию исходного кода QC . Последней версией, выпущенной Software ID была версия
1.06, но я рекомендую использовать QC исходник Джастина Тимьяна, который является очищенным вариантом версии оригинального исходного кода. Его можно скачать здесь:
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
called when a player connects to a server
============
*/
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\ П", сообщение, которое мы хотим отобразить.
\ П в этом сообщении-не будет показано на экране,так как это используется для того,чтобы сообщить движку,что это конец строки.
Вы, наверное, заметили, что большинство строк кода, кажется, заканчиваются точкой с запятой. Это говорит компилятору о том, что команда достигла конца, и он будет жаловаться/отказываться от компиляции, если
; стоит не правильно.
Говоря о компиляторах, сохраните
client.qc и запустите
FTEQCC.EXE. Предположим,что все скомпилировалось. Запускаем мод, и смотрим наше "Сообщение дня"