Конвертирование моделей из 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: исходники тут

PAK Explorer

Написано: понедельник, 31 марта 2014 г. автор st1x51
0

 Программа для распаковки и изменения .pak файла