Welcome, guest. You can be a Login или register
Author
Topic title
st1x51
Offline
Ленюсь
152 posts
Karma 7
Во-первых, позвольте мне дать вам краткое объяснение того, что же такое 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 ();
};


Раздел [b] / * [/b]и [b]* /[/b], является комментарием. Комментарии игнорируются компилятором полностью, они нужны для того, чтобы сделать код более легким для чтения и понимания для людей, которые редактируют код. Строки, начинающиеся с[b] / /[/b] тоже комментарий. Как отмечено в комментарии,в начале говорится о том что, эта функция вызывается, когда клиент соединяется с сервером. Это идеальное место чтобы написать наш код "Сообщение дня", так как мы хотим, чтобы сообщение писалось игроку, когда он присоединяется к серверу. В конце функции, как раз перед окончательным[b]};[/b]; добавьте следующую строку:
centerprint(self, "Welcome To My Mod\n");
centerprint является функцией встроенной в движок и, используется для вывода сообщения в центре экрана игрока self является переменной, которая здесь указывает на игрока, который только что подключился к серверу, таким образом,движок знает, кому показать сообщение.(self на самом деле может относится к любому субъекту в игре) В функции стрельбы из оружия self будет относиться к игроку, который стрелял из оружия и т.д. Это очень полезная переменная для многих ситуаций, и вы будете использовать ее много раз. "Welcome To My Mod\ n", сообщение, которое мы хотим отобразить. \ n в этом сообщении-не будет показано на экране,так как это используется для того,чтобы сообщить движку,что это конец строки.

Вы, наверное, заметили, что большинство строк кода, кажется, заканчиваются точкой с запятой. Это говорит компилятору о том, что команда достигла конца, и он будет жаловаться/отказываться от компиляции, если [b];[/b] стоит не правильно.

Говоря о компиляторах, сохраните client.qc и запустите FTEQCC.EXE. Предположим,что все скомпилировалось. Запускаем мод, и смотрим наше "Сообщение дня"
Фигня всякая:
http://pspquake.blogspot.com/
http://st1x.nm.ru/
Текущий проект:
http://www.moddb.com/games/conscript