Чем открыть файл pmd ets 2

Обновлено: 06.07.2024

Предлагаю. совместными усилиями добить и расдекодить основые файлы.

PMG - разобран на 85%
PMA - 99%
PMC - 75%
PMD - 75%

Собсно . Заноза при экспорте..файла..отсеивает блок анимаций. корячит тень.путает текстуры.
Ручками можно восстановить блок анимации. структуру я примерно разобрал, есть под гекс.
Структура Аним.файла.. файл PMA состоит:

struct PMA
LONG shapka;
DWORD UnknownValue;
DWORD UnknownValue;
LONG num_blocks;
LONG num_objects;
FLOAT amplitud;
LONG UnknownValue;
LONG UnknownValue;
LONG UnknownValue;
LONG Checksum_file;
LONG Type_anim;
DWORD NxL2;
BYTE one_byte_num_anim;
BYTE two_byte_num_anim;
>;
далее идут блоки по 56 байт.
в которых ..ротайтинги\шкалинги\координаты. центров обьектов.

пример. индикаторы.
например левая стрелка состоит из 2 обьектов ( 2 положения стрелки)
и 2 аним.фреймов
кол-во блоков.4 соотв 2х2.
4 блока
1 block - перемещение индикатора (ON)
2 block - перемещение индикатора (OFF)
3 block - исходное место индикатора (ON)
4 block - исходное место индикатора (OFF)
таким образом. просто напросто стрелки меняются местами.
нам достаточно изменить..в занозе расположение..в пма только координаты..

стрелка..состоит из 5 блоков..круг делится на 5 частей, спидометр\тахрометр, полустрелки\на 4 блока
нам нужно сдвинуть координаты центров. в занозе\\соотв и в гексе..сместить+ в 5 блоках поменять в пма файле.
--------если будем разбирать приведу конкретный пример.

пмс. опять же ручками дописываем 24 байта от оригинала
пмд. просто..забейте на всякие автоматы..теже именна файлов..
пример тому мой прицеп..с 17ю ткстурами. причем часть использует текстуры ГРУЗОВИКОВ. и никакой одной текстуры. также перекраска прицепа одновременно с траком.

3 дворник например модно добавить но у дворников 17 аним.фреймов.и 2 обьекта..соотв. 34 блока..

тут требуется елементарные знания хекса. будем разбирать вместе.

Lex[GOD]
по ПМД есть чё интересного?
у мну пока вот:
чёто новенького появилось.

а че это за файлы?

Lex[GOD]
да! вот он светлый ум! прочел первый раз и мозг задымился. со второго раза начал впитывать.
держи +
и вопрос. гекс это чего? где взять?

Теперь подробней про ПМГ.
В шапке содержится..кол-во обьектов\кол-во думмисов\кол-во иерархий..

самое интересное начинается с 284 оффсета.

144 байта - блок анимации + 56 байт копия блока из pma файла.
разберем на примере дворников
wips.pmg
ориг. файл= 6212 байта, после занозы 5362 файла. аним блок отсутсвует.

10676D50 - шапка
02000000 - колличество обьектов
01000000 - кол-во групп иерарх
03000000 - кол-воаним фреймов
00000000
A312073E - оффсеты
28871640 - оффсеты
05D32EC0 - оффсеты
2D36543F - оффсеты
5C000000 - начало стрингов
B4020000 - конец стрингов

соотв внутри и идет аним.блоки..

начиная с 284 байта..выделяем 144 байта

FFF290D0A - 29 тип обьекта.0D0A - разделитель встречается во всех 3блоках..

далее идут 56 байт из пма..блок 1..
далее следущиее 144 и следущий блок 2 из випс.пма.

ну и концовка 0000803F00290D0A далее EABBA702 - пошла геометрия..нам она не нужна.
т.е. один блок анимации 144+56.= 200 байт на один аним.фрейм.

----------------------------
структура блока 56 байт..в пма.
struct PMAblock
FLOAT Const1;
FLOAT Const0;
FLOAT Const0;
FLOAT Const0;
FLOAT UnknownValue;
FLOAT RoatX;
FLOAT RoatY;
FLOAT RoatZ;
FLOAT CoordX;
FLOAT CoordY;
FLOAT CoordZ;
FLOAT ScaleX;
FLOAT ScaleY;
FLOAT ScaleZ;
>;
hex Workshop

Отредактировано Lex[GOD] (2007-12-27 09:47:53)

Если бы еще кто разбирался. В ПМД, ПМГ и так все ясно, можно даже не парится. Вопрос только к ПМА, например в занозе переставил стрелки, руль, дворники, сохранил, изменил в хексе несколько строчек и чтоб все заработало, а так хрен кто разберет!

ну примерно так и есть. в пмг менять ..обязательно
ибо координаты смещений и центров осей. оттуда идут не спроста..
если просто подвинешь и вставишь обратно аним.блок, то стрелки и руль будут вращаться относительно старых центров

поэтому и в пмг и в пма меняем координаты. с ротациями намного намного сложнее..если вы хотите наклонить руль или стрелки..придется примерно высчитывать координаты и углы..и переписывать их..в пма.

ужас. надо бы добить ПМГ.

Ну что? Может расскажите как переделать анимацию под свой салон? =)

Bu11et_86, скорее всего никак. что то автор этой темы забросил "декодинг".

Декодинг я не забрасывал. просто никто не помогает. соотв некому это по большому счету не нужно.
индикаторы подвинуть просто.
а вот со стрелками лучше не начинать даже..если в хексе на уровне профи неможешь работать. кучу координат\вершин\ротаций\шкалинга. менять
для камаза и мерседеса O 345 2 салона с нуля я сделал..на этом все.

Lex[GOD] Тоесть, как я понял, в самопальных салонах используется анимация от салонов из игры? А руль то хоть как то возможно поменять? Ну например если поставить новый руль на координаты прежнего и припомощи хекс редактора добавить недостающие блоки анимации, обрезанные занозой.

в самопальных салонах идет стандартная анимация

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

Lex[GOD]А вообще иные варианты по редактированию анимации есть. может для макса плагин наваять. понимаю что звучит глупо, но чем черт не шутит.

по PMG - в ETS\ALH структура усложнилась..блоков стало 7.описание оффсетов..в шапке
на примере anim.pmg от volvo_fh16

оффсет 60 - чексумма офсета начала 1го блока(анимблок) 116
оффсет 64 - чексумма офсета конца 1го блока(=начало 2го блока) 6516
офф 68 - чексумма офсета начала 2го блока 6540
офф 72 - чексумма офсета конца 2го блока 6540
офф 76 - чексумма офсета начала 3го блока(=конец предыдущего) 7116
офф 80 - чексумма размера 3го блока 0
офф 84 - чексумма офсета начала 4го блока(=конец предыдущего) 7116
офф 88 - чексумма размера 4го блока 10120
офф 92 - чексумма офсета начала 5го блока(=конец предыдущего) 17236
офф 96 - чексумма размера 5го блока 119904
офф100 - чексумма офсета начала 6го блока(=конец предыдущего) 137140
офф104 - чексумма размера 6го блока 59952
офф108 - чексумма офсета начала 7го блока(=конец предыдущего) 197092
офф112 - чексумма размера 7го блока 17724

108+112 = размер всего файла = 214816

после блока1 стоит константа 24 байта 00F11BEEAAC1AD0206000000000000000000000000000000

нада резать 10 байт те лишние. обнулять 4х размерный блок и восстанавливать следующий вырезанный
тада мож заработает

блок4 сруктура - 6 подблоков по 96 байт. видны офсетные ссылки на след. блок(офсеты дробления след. блока)

------------------------
по поводу самой анимации..все запущено все работает, изменялись только PMA файлы - геометрия и anim.pmg даже не трогался..
таким образом можно изменять..координаты\размеры\вращение и.т.п. все Хексом естественно.
с геометрией самой пока туго..да и врятли что путного выйдет.

ОБНОВЛЕНИЕ ПО ТЕМЕ:

Разобрано:
PMA - 100% - Анимация
PMC- 100% - Тень и коллизия
PMD - 99% - Текстуры и Варианты
PMG - 90% (ETS-75%) -Геометрия и анимация

теперь подробней про 3 блок
в нем подряд идут 4байта (LONG) зависит от кол-во материалов..в них указывается..байт начала\каждой текстуры..поэтому у нас неполучалось добавлять свои..или редактировать сущ.(ну теперь думаю нкиаких автоматов нам не понадобитцаца CЛОМЛЕННО ОГРАНИЧЕНИЕ НА КОЛ_ВО ТЕКСТУР И ПУТИ К НИМ.

Lex[GOD]
ты чей pmd привёл в примере? потомучто у разных моделей оффсеты у всех разные

вопервых не PMC - а PMD - оффсеты у всех файлов одинаковые
начинатца блоки могут с разных байт..но в шапке все оффсеты прописываются. где какой байт начинаетсякончается\могу скинуть структурку под хекс

MirkOne и DANZ - ваши минусы..в моих постах..это просто неуважение к пользователю. а также ваше полное неумение и безразличие к ситуации.(кстати это запрещенно правилами)а. большего вы не заслуживаете.

Offset 40 - размер блока материалов
offset 12 - размер и кол-во тайла

Что в тобджах редактировать надо?

да ХЗ. берем ориг.тобж
пишем туда свое и меняем кол-во байт..на матблок..тогда текстуры можно тайлить..прально..и ничего плыть не будет.

делаем свои коллизии. и казусии:

один блок:(1 деталь(куб) состоит из 64 байт.
кол-во блоков указывается в шапке..+ доп параметры и начала блоков..опять же все в шапке.
структура 64 байт блока.

соотв.для создание своей коллизии достаточно в занозе настроить..все. и перенести в хекс. либо скопировать из созданного занозой пмс. файла в ориг. (т.к. в ориг помимо блоков прописываются количество и варианты (грузы, варианты и.т.п.)

ищутся программеры которые автоматизируют ессно процесс
перегона моделей..(аним.обьектов) в готовые пма файлики на выходе.
ессно ротации идут через кватернионы..поэтому желательно знать их ..тут вращение обьектов задается через кватернионы 4хмерная система. расчет через матрицы..идет.
сам я этим заниматься не буду так как времени нету. Если хотите чтобы была простая и удобная тулса для анимаций. подключаемся.(форматы файлов разобраны полностью)

Lexan
мне надо переписать пмд когда я в салон добавил пару обьектов естествено появились новые текстуры для них и теперь игра вылетает подскажи как переписать пмд?

Небольшое обновление по PMD

16й оффсет - имеется ввиду количество..доп.деталей отличных от base\tbase (например грузов..в трейлере)
20й и 24й оффсеты (имеется ввиду количество групп деталей ВКЛЮЧАЯ base\tbase)
КОНСТАНТА .(CEB971ED0A00)

НА САМОМ ДЕЛЕ это ГРУППЫ..в ЗАНОЗЕ, по умолчанию их 3.
это base, heel.up, heel.down., соотв при добавлении каких то групп(грузы, тюнинг грузовика) увеличивается и их количество.

БЛОК 1 (вариант1) - перечисляется количество скинов (покрасок) 1 покраска 8 байт например 00E7C373 15000000 (константа default) раскраски..если не более 1 скина.
БЛОК 1 (вариант2) - перечисляется количество вариантов деталей
============================================================================================
НАКОНЕЦ-то решена проблема с всеми надоевшим глюком..(не нахождение игрой в прицепах сделанных занозой варианта "empty" , "и "full")
на самом деле все оказалось до нельзя просто..заноза просто..игнорирует..данный параметр. заменяя его..параметров @дефалут@ - от грузовика

откроем любой файл..сделанный занозой (trailer.pmd)
Если в нем ..один скин..то нам нужно начало БЛОКА 1..варианта 1.
64 оффсет - 00E7C373 15000000 00E7C373 15000000 - так вот ..первая ЖИРНАЯ наша запись ето расшифровывается как skin - 1 , если же. добавим несколько покрасок допустим 3..то будет выкглядить так

00E7C373 15000000 1 скин
680D8808 00000000 2 скин
C815410D 00000000 3 скин
00E7C373 15000000 - далее. идет уже начало второго блока. (в грузовикам оно подефаулту) - в трейлерах место данной записи должна идти строчка

EMPTY - а именно A1497304 00000000 ( это все находиться путем сравнения 2 файлов..оригининала и после занозы)
FULL - 52EC1200 00000000
---строчка фулл применима для трейлеров с вариантами груза..(пустой, полный) - например BOAT, CAR, HORSE.

ПРИМЕР КОДА сравнения.

(также заноза изменили..размер мат.блока) но это не принципиально, и на работу не повлияет.

БРЕД КАКОЙТО ПОЛУЧИЛСЯ. = читайте тему по PMD отдельно..

ОБНОВЛЕНИЕ по PMC

Вкратце расскажу. блок 1 и блок 2..в точности как мы разобрали в PMD , сначала идут описание скинов, потом идет описание вариантов..поэтому все варианты..грузов и скинов..копируем также как и в пмд.
Далее начиная с 4000 идет один из кубиков коллизии размером 64 байта..(просто ищем 4000 выделяем 64 байта и вот вам блок, правим как хотим)(кооординаты, ротации, размеры) если там цилиндр то он начинается..с разных цифр.
ГЛАВНОЕ..файл всегда оканчивается FFFF FFFF - перед ним идут сплошные блоки по 64 байта.

Lexan снимаю шляпу за твое терпение разбираться с чужими (пусть и очень даже неплохими) байтовыми причудами.
Решил чуть-чуть тебе подсобить. Полмесяца уже таскаю флешку и все не когда написать (
Погонял я чуток PMD и PMC в основном на описаниях трейлеров и вот что у меня получилось. Интерес был в том чтобы определить какой параметр заголовка влияет на размер того или иного блока.
Для PMD.

struct structPMD
long ID;
long CntMaterials;
long CntVariants;
long CntParts;
long CntVariantsOfParts;
long CntBlock;
long CntBlock2;
long CntUnkn;
long SizeOfBlockMaterials;
long BeginVariant1;
long BeginVariant2;
long BeginBlock2;
long BeginBlock3;
long BeginSubBlock2;
long BeginBlock4;
long BeginBlockMaterials;
blob Variant1[8*CntVariants];
blob Variant2[8*CntVariantsOfParts];
blob Block2[6*CntUnkn];
blob Block3[CntVariantsOfParts*CntUnkn];
blob Block4[4*CntMaterials*CntVariants];
blob BlockMaterials[SizeOfBlockMaterials];
>;

Взял все твои названия, только уж, извини, отошел от русской латиницы (душа не переваривает). Твой Block3 я переименовал в Block4, тк между ним и Block2 нет промежутка небольшого, а располагается еще один блочок, который ты в заголовке определял
как смешение для КонецБлока2. Ребята из SCS далеко не плохие ребята и используют, в основном, нормальные понятия, как то указатель на начало блока, длина блока (если она не фиксирована). Поэтому, уж прости, КонецБлока2 - это не наш метод.
Меня интересовал, насколько помню, блок Variant1, там прописаны ключи (key), по которым выбирается скин (по твоему определению).
Для очень многих описаний грузов и используемых ими прицепов определены скины фиксированные, как то plain или plain2. Мне как дурню, понадобилось создать компанию (тот еще гемор по сравнению с предыдущими играми), которая использовала грузы под прицепы fuel_cistern и food_cistern, у которых при выборе груза именно в блоке Variant1 ищется по названию компании используемый скин, вариант с фиксированных скином не проходит.
Поэтому в этом блоке расположены ключи с названиями EuroGoodies, ITCC и прочие. Причем написаны ключи (названия компаний) в зашифрованном виде. С полтыка и даже с целого тыка так и не понял алгоритм кодирования. Инет не помог в поиске ответа, а тема интересная, тк SCS стала препадать именно на такой поход использования. В качестве примера: prefabs компаний с выбором скина по названию компании.
Если есть мысли по алгоритму кодировки Названий (ключей) из строковых значений (читабельных) в бинарный формат - плиз не остаться равнодушным.

Для PMC.
struct structPMC
long ID;
long CntMaterials;
long CntVariants;
long CntParts;
long Unknown;
long BeginBlock1;
long BeginFixBlock2;
long BeginBlock3;
long BeginBlock4;
long BeginBlok4_Repeat;
blob Block1[8*CntMaterials];
blob Block2[8*CntVariants];
blob Block3[4*CntMaterials*CntParts];
long BeginSubBlocks[CntVariants];
struct structPMC_2 SubBlock[CntVariants];
>;

Структура structPMC_2 SubBlock, это, та которая содержит 40 00 00 00. Не определяется (в смысле идентифицируется) значение 40 00. - это только размер указывает (80 байт), есть и те которые начинаются с 3С - 76 байт.

В общем виде я ее бы представил как
struct structX
long SizeData;
blob Data[SizeData-4];
>

struct structPMC_2
long XXX;
struct structX[]; // те массив структур с неопределенным количеством элементов
>;

считывается в structX значение SizeData и если оно не равно -1 (0xFFFFFFFF), что далее считываются данные Data размером (SizeData-4). Для Hex Editor мне не удалось формализовать это описание (может в принципе нельзя, а может и просто не догнал)
Что означает значение XXX - не знаю.

В частном случае для просмотра трейлеров я использовал:

struct structPMC_2
long XXX;
long SizeData1;
blob Data1[SizeData1-4];
long SizeData2;
blob Data2[SizeData2-4];
long EndMarker;
>;

Будут мысли. Делись. Удачи.

Меня интересовал, насколько помню, блок Variant1, там прописаны ключи (key), по которым выбирается скин (по твоему определению).
Для очень многих описаний грузов и используемых ими прицепов определены скины фиксированные, как то plain или plain2. Мне как дурню, понадобилось создать компанию (тот еще гемор по сравнению с предыдущими играми), которая использовала грузы под прицепы fuel_cistern и food_cistern, у которых при выборе груза именно в блоке Variant1 ищется по названию компании используемый скин, вариант с фиксированных скином не проходит.
Поэтому в этом блоке расположены ключи с названиями EuroGoodies, ITCC и прочие. Причем написаны ключи (названия компаний) в зашифрованном виде. С полтыка и даже с целого тыка так и не понял алгоритм кодирования. Инет не помог в поиске ответа, а тема интересная, тк SCS стала препадать именно на такой поход использования. В качестве примера: prefabs компаний с выбором скина по названию компании.
Если есть мысли по алгоритму кодировки Названий (ключей) из строковых значений (читабельных) в бинарный формат - плиз не остаться равнодушным.

Всеже мне кажеться там идут не названия компаний а названия самих скинов.(легко можно проверить), перевод текст в бинарники..увы сам интересуюсь.

Да про фиксированные скины. я писал в другой темке, + интересуют варианты груза, стандартные скины использует заноза для создания траков. впринципе выписать все варианты. грузов и скинов, можно..и какуюнибуть простенькую прожку замутить.Олег этим заниматся не хочет.
А транслитом, это для народа писалось.прост.

4000 - это помоему для описания кубов, для цилиндров и сфер, иные варианты, хотя размер одного блочка 64 байта всеравно.

КСТАТИ говоря hex workshop Мой старенький невидит BLOB, у тебя версия поновей быть может?.или другой какойто редактор.
------------------
Впринципе по пмс и пмд особой сложности нет как и с пма, все довольно просто, как ты заметил SCS каждый файл структуируют довольно удобно. Самый интерес это конечно файлы PMG, структура файла то известна, а вот внутренности каждого из 7 блоков. понять врятли удасться.

Читайте также: