Lost Heaven modding
Advertisement
Lost Heaven modding
Анимации

Анимации для 4ds моделей, движение рук и ног людей, летающие птицы, вращающиеся колеса парохода, открывающиеся двери и капоты машин

Расположены в папке Mafia\anims

Создание анимаций[]

  • Импортировать в 3ds Max 4ds модель
  • Анимировать ее средствами 3ds Max (здесь нужны ссылки на туториалы)
  • Созданную анимацию перевести в понятный Мафии формат утилитой 5ds converter

Содержимое файлов[]

  • Список в виде имя_файла - произвольное_текстовое_описание гуглится по запросу "Энциклопедия анимаций"+Восинед. Пример.
  • Есть инструмент для просмотра анимаций в выбранной миссии или rep файле. Желающих им воспользоваться пока не нашлось

Формат файла[]

Описание структуры файла для 010 Editor'a.

Вариант1[]

Источник.

signature - uint
file version - ushort 
??? - uint 
??? - uint 
address to end of file - uint 
objects count - ushort 
timer max - ushort 
string object address - uint 
some parameter - uint 
--- 
group type - uint: flags: 8421: 1 - pos, 2 - pos, 4 - rot, 8 - scale, sort: rot,scale,pos 
--- number of groups by type above 
anim groups count - ushort 
timer - ushort 
0 end timer, only for even anim groups count - ushort 
W, only for rotation - float 
X - float 
Y - float 
Z - float 
--- 
object name - string\0

Вариант2[]

Источник.

Документация 5ds 
\\GOLOD55 06.02.06 
Общий блок: 
1. 354453001400 флаг файла 
2. 0010ADF7D624C101 8 байт из 4дс 
3. 50020000 сумма от "начала считывания" до конца файла(L). Все три пункта занимают 18 байт. 
4. 0400 "начало считывания" оно же кол-во объектов в анимке(S) 
5. 2003 общее время анимки(S) в усл. единицах(покадрово): 25 ед=1сек. [у нас 2003=800dec=32сек(800/25)] 
6. подблоки(содержат доступы к именам и блокам объектов). длины 8 байт(2*L). Кол-во их равно кол-ву объектов. 
 а) 34020000 сумма от "начала считывания" до имени объекта1. 24000000 сумма от "начала считывания" до блока объекта1.
    Объем всего общего блока таким образом = 24000000(hex) +18(dec)=54 байта от начала файла, и далее уже пойдут блоки объектов. 
 б) 3A020000 сумма от "начала считывания" до имени объекта2. 98000000 сумма от "начала считывания" до блока объекта2. 
 с) 43020000 сумма от "начала считывания" до имени объекта3. 2C010000 сумма от "начала считывания" до блока объекта3. 
 д) 47020000 сумма от "начала считывания" до имени объекта4. E8010000 сумма от "начала считывания" до блока объекта4. 
блоки объектов на примере объекта1(Box01 оно же башня крана) 
1. 04000000 - флаг движений(см.коммент.)(L) 
2. 0600 - кол-во секторов в движении объекта1(S). Каждый тип движения разбивается на нужное кол-во кусков, и каждому назначается временной промежуток(время 

движения к данной точке). 
3. 00006400C8002C01F40158020000 времена кусков(S). Их кол-во = кол-ву кусков движений. Причем если число четное, то к нему прибавляется еще одно время 

(задержка перед повтором анимки?(обычно = 0000)). [т.е. типа(куски\кол-во времен): 2\3; 3\3; 4\5; 5\5: 6\7; 7\7...] 
4. сектора. 6 штук. в данном случае это ротации. т.е. объем всех секторов объекта1=6*(4*4(F))=96 байт. Иначе это либо коорд, либо шкалинги, а они по 12 байт

(3*4(F)). имена объектов Ну соотв. у нас 4 имени. Писать через нуль-байт, заканчивая файл им же. Регистры букв имеют значение(необходимо полное совпадение 

имени). 
=================Комменты:========================= 
1. Флаги типов движений: 
 02000000 - координатное 
 04000000 - ротационное 
 08000000 - шкалинговое также объект может иметь в своем блоке либо все типы движений, либо иметь их в разных сочетаниях. В таком случае их флаги 

складываются. 
 Примеры: 
  коорд+рот = 2+4=6(06000000) 
  коорд+шкал = 2+8=10(0A000000) 
  рот+шкал = 4+8=12(0C000000) 
  коорд+рот+шкал = 2+4+8=14(0E000000) 
Порядок записи разных типов движений в одном блоке - от меньшего к большему(коорд-рот-шкал, т.е. в наших примерах именно в таком порядке). EDIT: не совсем 

так. Например если у объекта коорд- и ротдвижения, то сначала пишется подблок с ротациями(!) Другие сочетания не проверялись, но вероятно, если есть 

ротдвижение, то оно пишется всегда первым подблоком. Смешанные движения объекта в общем случае независимы, поскольку каждый подблок имеет своё разбитие на 

куски. 
2. Времена секторов. 
 На нашем примере: 
   ко времени 0000 объект должен быть в секторе1(т.е.принять ротацию из сектора1), 
   ко времени 6400(100dec) - принять ротацию из сектора2, 
   ко времени C800(200dec) - ротацию3(а она совпадает с рот2, т.е. получается "пауза" в движении башни( в 100(dec)) и т.д. 
Время посл. сектора вообще обычно равняется общему времени анимки(2003 у нас), но в данном случае оно = 5802(600dec). 
Просто к этому времени башня уже выполнила возврат.ротацию и не нуждается в дальнейшем движении до конца всей анимации;
и, как видно, мафа в начало ее не возвращает поскольку данное время не равняется общему. 
Таким образом можно\нужно\ задавать скорость движения. Оно соотв. = длина пробега/время отпущенное на это богом. 
С ротациями несколько хитрее. Максимальный угол вокруг одной оси(на примере Y далее) за одно движение не может превышать 270град,
поскольку как минимум одна ротация (в смысле осьX\Z на нашем примере; ее знак) должна указывать направление вращения, и при превышении 270град оно теряется; 

в результате вращение идет по формуле nn=360-mm(nn-угол в игре; mm - задаваемый угол в анимке). Почему 270? Потому как макс критич. изменение каждой ротации 

= 180град, а расположены они под 90град друг к другу как известно(т.е. при 180град теряется направление задаваемое X(но для анимки это еще некритично), а еще 

при доп. 90град - задаваемое по Z(тогда писец поскоку и синус и косинус угла оба меняют знаки). В общем, имеет смысл разбить 360град на две части(три точки в 

анимке). 
При таком разбитии макс.скорость вращения в мафе = 12.5 оборотов\сек. 
Можно разбить 0\270\180\90, тогда бует 5 точек/3оборота, скор.= 18.75 оборотов\сек 
3. Mise16krajina\ MISE04-KRAJINA\scene.5ds 
1. 354453000400 флаг файла 
2. 00426391EA76C001 8 байт \из 4дс\ 
3. 19000000 время анимки? 
4. B4CE693F 0.9133 ? 
5. 00000000 0 ?

И по несуществующей ныне ссылке http://www.mafiapub.com/forum/index.php?showtopic=144 раньше можно было почитать.

Advertisement