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