FTE Manifests(.fmf)

Написано: вторник, 11 апреля 2017 г. автор st1x51
0

Файлы манифеста - это небольшие файлы, которые описывают различные атрибуты игры, в первую очередь название и конфигурацию файловой системы для модов или автономных игр.Файлы манифеста полезны для автономных игр. Они также полезны для автообновления модов.
Файл манифеста может быть вызван с помощью FTE вручную,но лучше создать файл default.fmf ,который полностью переопределит процедуру определения игры. Также этот файл поддедрживается Андроид портом.
Каждая строка файла манифеста формирует единую команду. Новые строки обозначают новые команды. Комментарии - в стиле С ++ - // двойные косые черты. 

Пример:
FTEMANIFEST 1
GAME quake
NAME "In The Shadows"
PROTOCOLNAME ITShadows
DEFAULTEXEC ""
// UPDATEURL "http://example.com/mods/its.fmf"
BASEGAME id1
BASEGAME qw
BASEGAME * fte
GAMEDIR shadows


Команды:
FTEMANIFEST 1
Указывает фактическую версию файла манифеста и то, что на самом деле является файлом. Действителен только как первая строка. Номер версии включен для потенциального использования в будущем. Версия 1 является текущей версией.


GAME quake
Это определяет кодовое имя игры, на которой основан ваш мод.
Автономные игры должны выбирать свою собственную строку для использования здесь.

Известное название игры (а именно: quake, quake2, quake3, hexen2) может подразумевать другие настройки, если они не были указаны иначе.  Не рекомендуется пропускать эту строку, иначе по дефолту будет quake.

NAME "Example Quake Mod"
Это указывает, на какую игру должны ссылаться различные консольные выводы. Это должно быть официальное название вашего мода. 

PROTOCOLNAME "foo"
Так игра должна быть определена мастер-сервером. Уникальное значение здесь помогает предотвратить переключение серверов из других игр, а также препятствует тому, чтобы другие игры видели эту игру / мод. Короче говоря, только ваша игра или мод будет видна в списке серверов.

BASEGAME "id1"
Можно указать несколько строк basegame. Это основные подкаталоги, которые всегда должны загружаться, даже если команда gamedir была использована для загрузки другого мода.
В автономных играх обычно указывается только одно значение. 

 GAMEDIR "mymod"Д
ействует почти так же, как basegame, за исключением того, что она сбрасывается и заменяется, если используется команда gamedir.

DISABLEHOMEDIR 1
Если не равно нулю, игра / мод не будет пытаться использовать какой-либо каталог в домашней директории пользователя по умолчанию. Файлы не буду размазаны по вашей системе.

UPDATEURL "http://example.com/foo.fmf"
Эта команда дает URL, с которого нужно обновить файл манифеста.
Обновленный манифест должен содержать тот же URL-адрес для обновления, которое будет принято. Это заменяет только манифест, но поскольку файл манифеста указывает список пакетов, которые должны использоваться, новый набор пакетов может загружаться автоматически.

PACKAGE "id1/pak0.pak" 0x4f069cac "http://mirror1.example.com/qsw106_pak0.pak" "http://mirror2.example.com/qsw106_pak0.pak"
Пакеты,которые должно автоматически загрузиться.
1) параметр это куда сохранять
2) это crc,если указать -,то crc не будет учитываться,но это не рекомендуется,мало ли файл не докачается
3) ссылка на pak.


MINVER FTE 4778
MAXVER FTE 4778
Минимальная и максимальная версия используемого движка,мало кому нужны эти параметры.


Еще один пример манифеста. Файл default.fmf должен лежать рядом с исполняемым файлом движка.

FTEMANIFEST 1
game test
name "Test"
protocolname "test"
basegame test
disablehomedir 1 

 
 
 

Конвертирование моделей из Half-Life в Darkplaces(mdl to dpm)

Написано: среда, 17 июня 2015 г. автор st1x51
0

Начнем с того,что dpm - специальный формат моделей для движка Darkplaces,который в отличии от обычного mdl формата поддерживает костную анимацию. Благодаря этому модели не будут "плавать" при воспроизведении анимации.

Необходимый инструментарий:
1.Half-Life MDL Decompiler 1.2
Декомпилятор моделей Half Life в smd.
SMD бывает двух типов,модель(меш файл,body) и анимация(sequence).
2. DPM Wizard
Замечательная программа,написанная VorteX'ом для удобного компилирования dpm моделей.
3.Fimg
Простая программа для просмотра и конвертирования текстур,написанная FrikaC,собственно название наверное расшифровывается как Frika Img :)

Во-первых, качаем/делаем необходимую модель для Half Life. Я взял модель шприца.
a) Декомпилируем модель с помощью Half-Life MDL Decompiler:
1.Кидаем модель в папку Half-Life MDL Decompiler
2.Запускаем decompile_all, на выходе получаем папку w_syringe,внутри smd файлы,текстура в формате bmp и qc файл с информацией о модели.

b)Запускаем DPM Wizard и компилируем модель
1)Жмем Compile new model>Build dpm from half life1/2 smd
2)Теперь ищем наши smd файлы. Обратите внимание,что первым smd файлом должен быть меш,а потом должны идти анимации.Чтобы узнать как называется меш файл,заходим в qc файл нашей декомпилированной модели и видим такую строку:
//reference mesh(es)
$body "body" "syringe_low"

Следовательно,syringe_low.smd является мешем и должен быть первым в списке,далее должен идти idle.smd
3. Жмем next,в поле name можем указать имя нашей модели(w_syringe),в поле rotate обязательно пишем -90, в поле offset должны стоять 0 0 0
4.Жмем finish,модель готова и лежит в dpmwizard\build\models

Файлы,которые необходимы: сама модель w_syringe.dpm и w_syringe.dpm_0.skin
Если мы отроем skin файл,то увидим там такую строку
syringe,models/syringe
это значит,что в папке models,должна лежать текстура syringe
Важное примечание, skin файл должен лежать рядом с моделью.

Работа над конвертацией еще не окончена,нужно еще конвертировать,нашу текстуру в формат tga,для этого используем Fimg. Кидаем syringe.tga в папку models,все.

Важные примечания.
1.Для упрощения анимаций можно использовать фрейм группы(файл .framegroups)
Пример такого файла
1 20 30 1 // idle1 это будет self.frame = 0;
21 15 30 0 // jump
это будет self.frame = 1;

Первое значение это первый кадр,второе значение это количество кадров,которое нужно проиграть(то есть 1 кадр + 20),третье значение это скорость анимации(кадры в секунду),четвертое значение это флаг loop,если стоит 1,то анимация будет бесконечно повторяться.

Если для модели используются фреймгруппы,то задавать анимацию нужно с помощью self.frame, обратите внимание,что севенции начинаются с 0,то есть,чтобы проиграть 1 секвенцию,нужно написать self.frame = 0;
Проблема фреймгруп заключается в том,что нельзя управлять отдельным кадром и нельзя выставить определенное действие определенному кадру(либо я этого не знаю.если узнаю,то напишу).
Важное примечание, файл .framegroups должнен лежать рядом с моделью.

2.При конвертировании модели с большим количеством текстур,может возникнуть проблема со скин файлом,либо это косяк компилятора,либо dpmwizard.
Например у нас есть модель торса игрока,у которой есть куча текстур,скин файл после конвертации будет выглядеть так:
pants,models/pants
pants,models/shirt
pants,models/jacket
pants,models/head
pants,models/cap

Это неправильно,он должен выглядеть так:
pants,models/pants
shirt,models/shirt
jacket,models/jacket
head,models/head
cap,models/cap
Название текстуры,должно соответствовать названию в пути.

3.Путь для скин файла можно и нужно изменять.
Например.у нас есть скин файл со строкой
syringe,models/syringe
мы можем изменить его так
syringe,models/items/syringe
чтобы не было иерархии файлов текстур

4.Бывает такое,что у модели может быть два меш файла,решения данной проблемы два:
a)Соединить меши в редакторе моделей(например Milkshape)
b)Соединить,копируя все из промежутка между triangles и end одного smd файла в другой,чтобы у нас как-бы получился один меш файл. Читерский подход,но действенный.

QuakeC: Комментарии,имена и типы

Написано: суббота, 31 мая 2014 г. автор st1x51
0

Комментарии

  • // Однострочный комментарий
  • /* Блок комментарий,может быть больше одной строки */
Эти комментарии такие же как и в С++(И других С подобных языках)
// Однострочный комментарий

/*
Блок
комментарий
*/ 

Имена

Имена переменных,полей или функций имеют максимум 64 символа, они должны начинаться с A-Z,a-z, или с символа подчеркивания, и могут продолжаться с этими символами или с 0-9.
Имена переменных, функций и т.п. называются идентификаторами.

Определение новых типов

Начнем с плохой новости: определение новых типов невозможно. Это означает,что вы не сможете создать тип под названием ammo, полученный из float, который будет использован для хранения патронов.

Определение структур и объектов

Часто бывает удобно, в С (или C++), создавать новые структуры ( объекты, или записи) для хранения связанной информации в одном месте. Например, вы можете использовать единую структуру для хранения всех патронов игрока, а также текущее выбранное оружие, поскольку эта информация связана между собой.
Хоть entity и vector очевидно структуированные типы, невозможно создавать новые структуированные типы такого рода , в Quake-C. Однако тип entity может быть модифицирован чтобы удовлетворить ваши потребности.


Язык QuakeC

Написано: автор st1x51
0

QuakeC — интерпретируемый язык программирования, разработанный в 1996 году Джоном Кармаком (id Software) для написания части компьютерной игры Quake. Используя QuakeC, программист имеет возможность модифицировать игру: добавить оружие, изменить игровую логику и физику, написать сложный сценарий. Язык может использоваться для контроля за многими аспектами игры, такими как искусственный интеллект (противников), триггеры, изменения на карте. Программы на QuakeC компилируются в байт-код.

С чего начать?
Первый шаг - конечно же чистые исходники QuakeC 1.06 и хороший компилятор,например FTEQCC, рекомендую fteqccgui.
В fteqccgui можно редактировать код и там даже есть подсветка синтаксиса, но работать в нем бывает неудобно, поэтому лучше скачать бесплатный текстовый редактор Notepad++ и подсветку синтаксиса специально для QuakeC, вот.
Ставить так: Синтаксисы>Задать свой синтаксис>Импортирование.

Начало положено? Отлично!
Теперь кидаем fteqcc в папку с нашими исходниками, компилируем, если компиляция пройдет успешно, мы получим progs.dat.

Как компилятор знает, что ему компилировать, а что нет?
В папке с исходниками есть файл progs.src. Он служит для  объявления .qc файлов. Компилятор считывает все объявленные .qc по порядку и на выходе получается progs.dat
В начале файла есть defs.qc, в нем содержатся системные глобальные переменные, поля, функции,а также обычные глобальные переменные и т.п.



Тест SyntaxHighlighterQC

Написано: четверг, 24 апреля 2014 г. автор st1x51
0

void() mp3_random_player =
{
 local float r;
 r = floor(random() * 6);
 switch(r)
 {
  case 0:
   WriteByte (MSG_ALL, SVC_CDTRACK);
   WriteByte (MSG_ALL, 1);
   WriteByte (MSG_ALL, 0);
  break;
  case 1:
     WriteByte (MSG_ALL, SVC_CDTRACK);
     WriteByte (MSG_ALL, 2);
     WriteByte (MSG_ALL, 0);
  break;
  case 2:
     WriteByte (MSG_ALL, SVC_CDTRACK);
     WriteByte (MSG_ALL, 3);
     WriteByte (MSG_ALL, 0);  
  break;
  case 3:
     WriteByte (MSG_ALL, SVC_CDTRACK);
     WriteByte (MSG_ALL, 4);
     WriteByte (MSG_ALL, 0);  
  break;
  case 4:
     WriteByte (MSG_ALL, SVC_CDTRACK);
     WriteByte (MSG_ALL, 5);
     WriteByte (MSG_ALL, 0);
  break;
  case 5:
     WriteByte (MSG_ALL, SVC_CDTRACK);
     WriteByte (MSG_ALL, 6);
     WriteByte (MSG_ALL, 0);
  break;
 }
}
UPD: исходники тут