Предисловие
Перед использованием MODELDEF, давайте познакомимся с форматами pk3/pk7, они такие же как wad, только лучше.
- pk3 — это zip архив с переименованным форматом. Поддерживает папки, в отличии от wad, также весит меньше чем wad.
- pk7 — это 7z архив с переименованным форматом. Поддерживает папки, в отличии от wad, также весит меньше чем pk3.
Работать мы будем именно с pk3.
Подготавливаем рабочее место.
Скачайте архив с 3D моделью по ссылке: ссылка. И разархивируйте его в отдельную папку.
Создайте файл MODELDEF.txt и положите его в ту же папку, что и MD. Должно получится так.
По пути MD/Medkit мы видим 2 файла, файл модели в формате md3 и его текстура.
Как делать модели в формате md3, описывалось в уроке Экспортируем модели в формате md3, с помощью Blender.
Только сейчас заметил, что GZDoom поддерживает формат obj(начиная с 2018 года), а я уже написал целую статью
про танцы с бубномпро экспорт в формате md3. Чувствую себя идиотом. В любом случае, cписок поддерживаемых 3d форматов оставлю по ссылке.
Ладно, с подготовкой закончили, время писать код.
Разбираемся в коде MODELDEF.
Откройте MODELDEF.txt и напишите там следующие:
Model Medikit
{
Path "MD/MedKit"
Model 0 "Medikit.md3"
Skin 0 "Medikit.png"
Scale 0.9 0.9 1.1
FrameIndex MEDI A 0 0
}
Синтаксис у MODELDEF следующий:
Model название_актора
{
Path "путь_к_ресурсам_модели"
Model номер_кадра_модели "файл_модели"
Skin номер_кадра_модели "файл_текстуры"
Scale размер_x размер_y размер_z
FrameIndex первые_4_буквы_названия_спрайта название_кадра номер_кадра_модели номер_кадра
}
А теперь по порядку:
- Название актора — это имя актора(предмета, снаряда, игрока, в общем, всех 2D объектов в думе), актор можно создать в DECORATE или ZSCRIPT. Также есть предустановленные акторы, по ссылке.
- Путь к ресурсам модели — это путь относительно которого строятся остальные пути.
- номер кадра модели — тут все и так понятно
- Файл модели — название файла модели например «Medikit.md3«. И так как мы указали путь, то GZDoom будет искать файл модели по адресу Путь к ресурсам модели/Medikit.md3.
- Файл текстуры — название файла текстуры например «Medikit.png«. И так как мы указали путь, то GZDoom будет искать файл текстуры по адресу Путь к ресурсам модели/Medikit.png.
- размер_x размер_y размер_z — масштабирование модели по координатам x,y,z. 1.0 — обычный масштаб, 2.0 — увеличенный в 2 раза масштаб и т.д.
Перед продолжением, хотел бы разъяснить, как устроена анимация монстров в думе, и как это реализовано в Decorate. Потому что синтаксис FrameIndex.
FrameIndex первые_4_буквы_названия_спрайта название_кадра номер_кадра_модели номер_кадра
Крайне похож на синтаксис Decorate.
- Первые 4 буквы названия спрайта — синтаксис здесь как в Decorate, то-есть первые 4 буквы неизменны, а 5я задает кадр анимации (например POSS).
- Название кадра — та самая буква, задающая кадр анимации, например A для первого кадра, если хочешь второй кадр анимации то B. Разумеется в директории должны иметься изображения POSSA0 и POSSB0.
По поводу названия файлов
- Первые 4 буквы — задают название спрайта, они неизменны.
- 5я буква — задает кадр анимации
- 6я цифра — задает как будет выглядеть актор, в зависимости от поворота камеры, сейчас я не буду объяснять это подробно, только лишь скажу что цифра 0 обозначает поворот актора на игрока, то-есть с какой бы стороны ты не посмотрел на актор, изображение не изменится. Подобное поведение заметно у аптечек, убитых импов, патронов, оружия и т.д.
Пример: MEDIA0. Это изображение взятое из doom2.wad
Теперь, вновь, взглянем на код.
FrameIndex первые_4_буквы_названия_спрайта название_кадра номер_кадра_модели номер_кадра
Все кроме последнего номер_кадра, я объяснял.
- Номер кадра — это номер кадра нашей 3D анимации.
С кодом разобрались, теперь осталось запаковать все в pk3 и запустить.
Запаковываем все в pk3
Я буду запаковывать программой 7z, скачать её можно по ссылке. Чтобы запаковать выделите нужные файлы, нажмите ПКМ, в меню выберите «7-Zip -> Добавить к архиву…«
В появившемся окне, добавьте к названию архива расширение pk3.
И нажмите OK. Появится файл pk3, запустите его с помощью GZDoom.
В думе как раз завалялась аптечка на 29 уровне.