Декодируем Xom, Тип за типом... шаг за шагом... - Форум
W4Tweaks
Меню сайта
Последние файлы
Последние темы


Вход



Мини-чат
 
500

Статистика
Онлайн:

Сегодня заходили: firsacho, Joker, 4erveR, Unaited, popspop03, agent007, ivan210303mitenkov, Shipside


Друзья сайта

Если вы хотите увидеть в этом спиcке свой сайт загляните сюда

Наш баннер:



· Регистрация · Вход
[ Новые сообщения · Участники · Подписки · Поиск · RSS ]
Страница 1 из 151231415»
Форум » Worms 4 Mayhem » 4.3. Ваши идеи по моделированию » Декодируем Xom, Тип за типом... шаг за шагом... (Собираю группу психов не жалеющих свое время и мозги...)
Декодируем Xom, Тип за типом... шаг за шагом...
AlexBond
Дата: ПТ, 19.06.2009, 04:52:30 | Сообщение # 1
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Итак если найдется более 2-х желающих в декодировании формата xom, то я продолжу тему =)

P.S. Инфа про Xom Формат
http://w4-tweaking.bb-fr.com/tweakin....662.htm

http://www.hardline.ru/4/44/5030/

Прикрепления: 7594015.png(9Kb)


 
firsacho
Дата: ПТ, 19.06.2009, 06:15:55 | Сообщение # 2
firsacho
ICQ = 453-163-541
Группа: Админы
Сообщений: 3621
Репутация: 71
Статус: Online
продолжай, не знаю пойму ли я это, но в любом случае такая тема пополнит наш банк знаний




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

www.w4mod.tk - моя модификация для worms4

www.fir-st.narod.ru - моя домашняя творческая страничка

www.botarena.by.ru - мой сайт об игре robot arena 2 (битвы роботов)
 
egokarpo
Дата: ПТ, 19.06.2009, 07:40:00 | Сообщение # 3
egokarpo
Группа: Проверенные
Сообщений: 336
Репутация: 51
Статус: Offline
Продолжай! Ибо нам откроются новые горизонты!

 
SW_Krash
Дата: ПТ, 19.06.2009, 09:01:29 | Сообщение # 4
SW_Krash
BugagaXD
Группа: Проверенные
Сообщений: 818
Репутация: 28
Статус: Offline
эм... единственное что я знаю из кода ксм это то как там закодированы картинки и как их там найти... ну думал попробывать вытащить модель вручную... но руки так и не дошли=))

Всё что ни делается, делается в Китае(SW_Krash, 2009)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x)
OFFTOP SWEAT OFFTOP(фольклор)

 
Герыч
Дата: ПТ, 19.06.2009, 11:42:12 | Сообщение # 5
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
Да, вполне интересно, только не знаю, позволит мне моя лень что-то сделать)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Дата: ПТ, 19.06.2009, 13:32:33 | Сообщение # 6
DrHitman27
•Polarized•
Группа: Заблокированные
Сообщений: 2107
Репутация: 52
Статус: Offline
хоть узнаем как они устроены) мне мозгов не жалко

 
AlexBond
Дата: ПТ, 19.06.2009, 22:02:20 | Сообщение # 7
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Ладно начнем-с....

Шаг первый

Структура xom файла.

Небольшое вступление от k^2

Quote

Re: Maps

Sent at: Wed Nov 22, 2006 12:55 am
From: K^2
To: AlexBond
Да, если добавлять карты в список проблема таже что и с заменой. По сети это дело не пройдет. Есть несколько идей по поводу синхронизатора который позволит карты закачивать при соединении, но есть сложности. Надо либо создавать виртуальную дерикторию, или перехватывать запрос на открытие потока ввода/вывода файлов, или перехватывать интернет пакеты. В каждом методе свои проблемы.

Я примерно знаю как работают текстуры, и уже начал работу по добавке текстур в едитор. К сожалению, добавлять новые текстуры я не умею. Похоже что это возможно, но я так и не понял как.

Работая с .xom файлами надо держать в уме то что это очень глупый формат. Общая структура .xom файлов такова. Файл начинается с заголовка в 64 байта. Количество Типов (Type) контейнеров находится по смещению 24 (0x18), а количество Контейнеров (Container) по смещению 28 (0x1c). По смещению 32 (0x20) находится номер корневого контейнера, но по моему, он важен только для карт. Сразу за заголовком следует список типов контейнеров. Каждый элемент списка состоит из 64 байт. В каждом, по смещению 8 (0x08) находится количество контейнеров этого типа, а по 32 (0x20) название типа. После списка типов идет еще один или два сегмента по 16 байт. Их назначение мне неизвестно. Их количество задано байтом по смещению 7 (0x07) в заголовке.

Со следующей частью ты знаком. Это список строк. Сдесь собраны все строковые данные в файле, и отсюда они индексуются контейнерами, что и создет сложности с переименованием. По смещению 4 (0x04) наодится количество строк. По смещению 8 (0x08) полная длинна всех строк, включая нулевые байты. Начиная со смещения 12 (0x0c) идет список адресов строк, тоесть смещений относительно первого байта первой строки. Когда из контейнера индексуется строка, индекс является порядковым номером в списке адресов строк, а не номером самой строки. Сразу за этим списком идут сами строки, каждая терминирована нулевым байтом.

За списком строк следует список контейнеров. В них содержится вся информация в файле. Все контейнеры сгрупированы по типу и их порядок соответствует порядку типов в списке. Тоесть, если первому типу принадлежат 5 контейнеров, то первые пять будут этого типа, а начиная с 6го следующему типу. Бывают типы с нулем контейнеров. Зачем они нужны, не понятно.

Структуру каждого контейнера нужно знать. Они все разные, но контейнеры одного типа имеют одинаковую структуру. Есть несколько общих правил. Во первых, все контейнеры начинаются с последовательности их 7ми байт 'C', 'T', 'N', 'R', 0x00, 0x00, 0x00. Эту последовательность можно использовать для поиска контейнера, что часто необходимо, так как структура и длинна многих контейнеров может быть не известна. Следом за этими байтами идет еще один или два которые содержат индекс строки. Эта строка является идентификацией (ID) или названием этого контейнера. Название может повторятся, поэтому нельзя использовать этот номер как однозначную идентификацию. Интересная особеность байт индексующих строки в том что это может быть один байт или пара. Старший бит первого байта, когда выставлен в 1, говорит о том что следует еще один байт. Этот бит не учитывается при состовление числа. Таким образом, только числа превышающие 127 (0x8f) записываются двумя байтами.

Итак теперь нарисую схематичный вид файла:

Code
Файл Xom:
...шляпа...
MOIK | version | ? | Num Types | Num Counteiner | Base Counteiner
...описание типов...
TYPE | Num Counteiner | GUID type | Name Type    
... и так для всех типов ...
...заголовок таблицы строк...
GUID | SCHM |? | STRS | Num Strings | Offset Strings
...индексы строк...
offset1 | offset2 | ... | offsetN
...сами строки...
0 | строка | 0 | строка    
... контейнеры ...
CTNR | data code

В кратце звучит так: в фотраме xom идет количество типов, количество контейнеров, описание типов, потом таблица строк, потом сами данные, начинающиеся CNTR и заканчивающиеся началом следующего контейнера.

Шаг второй
Как же загружается этот формат

Программа считывает количество типов и контейнеров, считывает информацию о том какие типы в файле, и то сколько каждого. Затем она считывает таблицу строк. И тут наступает самое сложное, считываются контейнеры, в зависимости от его типа, т.е. размер и контейнера, и тем самым начало следующего определяется типом.

Когда все данные загружены в память, по ним строится дерево.

Ищется базовый контейнер, который и является корнем дерева, обычно это XDataBank. В этом контейнеры хранятся ссылки на остальные контейнеры. И таким образом строится дерево. (в этом есть большой плюс! Если создан один контейнер, и на него ссылаются куча других, то экономится размер файла, т.е. не нужно писать одинаковые данные. Этим объясняется маленький размер файлов на примере карт)

Итак, наша задача, расшифровать как можно больше типов, чтобы можно было построить дерево, если дерево построено верно, то мы сможем изменять файл, именно так я и поступал с Scripts.xom для W3D где все типы я раскодировал, а именно:
XContainer
LevelDetails
XResourceDetails
XUintResourceDetails
XContainerResourceDetails
XDataBank

Шаг третий
Декодирование типов.

Итак для начала приведу список типов к примеру из модели шляпы HatAfro:

Code
XNode(0)
XInteriorNode(1)
XGroup(2)
XCore(0)
XShape(1)
XShader(0)
XSimpleShader(1)
XAttribute(0)
XMaterial(1)
XImage(1)
XTextureSt age(0)
XTextureMap(0)
XOglTextureMap(1)
XGeometry(0)
XGeoSet(0)
XIndexedGeoSet(0)
XIndexedTriangleSet(1)
XVertexDataSet(0)
XCoordSet (0)
XNormalSet(0)
XColorSet(0)
XTexCoordSet(0)
XCoord3fSet(1)
XNormal3fSet(1)
XColor4ubSet(1)
XTexCoord2fSet(1)
XIndexArray(0)
XInd exSet(1)
XMatrix(0)
XTransform(1)
XCollisionGeometry(1)
XCollisionData(2)
XFortsExportedData(1)
XDetailObjectsData(1)
XGraphSet(0)
X Container(0)

Так мы видем слева в XomView. Где в скобках отмечается количество элементов.

На сегодня хватит, переваривайте....


 
Герыч
Дата: ПТ, 19.06.2009, 23:37:10 | Сообщение # 8
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
Code
Файл Xom:
...шляпа...
MOIK | version | ? | Num Types | Num Counteiner | Base Counteiner
...описание типов...
TYPE | Num Counteiner | GUID type | Name Type     
... и так для всех типов ...
...заголовок таблицы строк...
GUID | SCHM |? | STRS | Num Strings | Offset Strings
...индексы строк...
offset1 | offset2 | ... | offsetN
...сами строки...
0 | строка | 0 | строка     
... контейнеры ...
CTNR | data code

Можешь это поточнее, т.е. длины в байтах и по каждому слову, типа Offset Strings. Все данные, как я понял идут сплошняком?
Как я всё это дело понял:
MOIK | version | ? | Num Types | Num Counteiner | Base Counteiner
затем Num Types записей вида:
TYPE | Num Counteiner | GUID type | Name Type
затем заголовок таблицы строк:
GUID | SCHM |? | STRS | Num Strings | Offset Strings

а дальше непонятно про Offset Strings, и что значат индексы.
Что такое Base Counteiner? Строка/число?
Что есть Name Type? индекс строки/число?
Что есть GUID type?


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Дата: СБ, 20.06.2009, 04:54:27 | Сообщение # 9
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Quote (Герыч)
Можешь это поточнее, т.е. длины в байтах и по каждому слову, типа Offset Strings. Все данные, как я понял идут сплошняком?

Да все данные идут сплошняком... Что и усложняет декодирование.

Offset это длинна таблицы строк, т.е. то где строки кончаются и начинаются контейнеры.
В таблице индексов строк, стоят Offset в байтах, до начала нужной строки, длина строки определяется нулем, т.е. Pchar формат.

После строк идут данные, сплошняком...

Quote (Герыч)
Что такое Base Counteiner? Строка/число?

Корень дерева, это индекс из всех контейнеров. К примеру контейнеров было 8, и корень последний контейнер, то в байтах он будет 8-м
Quote (Герыч)
Что есть Name Type? индекс строки/число?

это Pchar строка, прямо в коде.
Quote (Герыч)
Что есть GUID type?

ID класса/типа, контейнера, не знаю зачем эта хрень нужна, видимо имени типа/класса не хватает.

Приведу пример для наглядности того же HatAfro.xom:

Code
000000  4D 4F 49 4B 00 00 00 02  00 00 00 00 00 00 00 00  MOIK............
000010  00 00 00 00 00 00 00 00  24 00 00 00 15 00 00 00  ........$.......
000020  15 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000040  54 59 50 45 00 00 00 00  00 00 00 00 00 00 00 00  TYPE............
000050  2B 8B 1E BF 5D 02 B2 4E  B9 37 05 57 5E 57 71 D3  +...]..N.7.W^Wq.
000060  58 4E 6F 64 65 00 00 00  00 00 00 00 00 00 00 00  XNode...........
000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000080  54 59 50 45 00 00 00 00  01 00 00 00 00 00 00 00  TYPE............
000090  A9 07 E3 8B 05 B7 53 47  9D 80 55 F0 1B 21 22 F8  ......SG..U..!".
0000a0  58 49 6E 74 65 72 69 6F  72 4E 6F 64 65 00 00 00  XInteriorNode...
0000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0000c0  54 59 50 45 00 00 00 00  02 00 00 00 00 00 00 00  TYPE............
0000d0  AE CD D0 DE B7 4D E2 42  84 A7 8B C0 56 73 0B A7  .....M.B....Vs..
0000e0  58 47 72 6F 75 70 00 00  00 00 00 00 00 00 00 00  XGroup..........
0000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000100  54 59 50 45 00 00 00 00  00 00 00 00 00 00 00 00  TYPE............
000110  84 94 2A 34 C8 87 47 4D  B5 A2 76 A7 12 67 E1 69  ..*4..GM..v..g.i
000120  58 43 6F 72 65 00 00 00  00 00 00 00 00 00 00 00  XCore...........
000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000140  54 59 50 45 03 00 00 00  01 00 00 00 00 00 00 00  TYPE............
000150  2E 01 9F F3 00 DE 1B 45  9B 10 CB 09 40 2F 24 B4  .......E....@/$.
000160  58 53 68 61 70 65 00 00  00 00 00 00 00 00 00 00  XShape..........
000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000180  54 59 50 45 00 00 00 00  00 00 00 00 00 00 00 00  TYPE............
000190  A0 C3 A4 58 4D 8C 94 4E  AE 28 97 5C C0 D2 46 E0  ...XM..N.(.\..F.
0001a0  58 53 68 61 64 65 72 00  00 00 00 00 00 00 00 00  XShader.........
0001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0001c0  54 59 50 45 00 00 00 00  01 00 00 00 00 00 00 00  TYPE............
0001d0  51 26 BE 21 90 49 C0 41  A5 28 E1 56 2E 8F 1F D0  Q&.!.I.A.(.V....
0001e0  58 53 69 6D 70 6C 65 53  68 61 64 65 72 00 00 00  XSimpleShader...
0001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000200  54 59 50 45 00 00 00 00  00 00 00 00 00 00 00 00  TYPE............
000210  5A D5 B8 8C B7 66 C6 4F  86 35 E7 4C 3C EC 02 9B  Z....f.O.5.L<...
000220  58 41 74 74 72 69 62 75  74 65 00 00 00 00 00 00  XAttribute......
000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000240  54 59 50 45 00 00 00 00  01 00 00 00 00 00 00 00  TYPE............
000250  EC 48 CC 38 AF 6C FD 41  B7 4E ED 5C 9E 61 0B AE  .H.8.l.A.N.\.a..
000260  58 4D 61 74 65 72 69 61  6C 00 00 00 00 00 00 00  XMaterial.......
000270  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
000280  54 59 50 45 00 00 00 00  01 00 00 00 00 00 00 00  TYPE............
000290  22 BF 3F 96 30 32 89 4C  A4 40 95 66 FE C7 DA A4  ".?.02.L.@.f....
0002a0  58 49 6D 61 67 65 00 00  00 00 00 00 00 00 00 00  XImage..........
0002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

Всего 36(0x24) типов из них 21(0x15) контейнеров, в которых 21(0x15) базовый.

Но что самое интересное, так это то что 21-ого контейнера нету!!! Их вообще всего 20 в типах... Но последний контейнер, подозрительно слишком длинный, и имеет таблицу индексов, я думаю что это должен быть контейнер XGraphSet, но в описании типов для него ноль контейнеров... и перед началом этого контейнера не ставится CTRN почему???????? я не знаю....


 
AlexBond
Дата: СБ, 20.06.2009, 05:21:52 | Сообщение # 10
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Я нашел закономерность!!!!!!!!
Пустые тыпы, это надклассы!!!!!

XNode(0) -> XInteriorNode(1)
XGroup(2)
XCore(0) -> XShape(1)
XShader(0)-> XSimpleShader(1)
XAttribute(0) -> XMaterial(1)
XImage(1)
XTextureStage(0) -> XTextureMap(0) -> XOglTextureMap(1)
XGeometry(0)-> XGeoSet(0) -> XIndexedGeoSet(0)-> XIndexedTriangleSet(1)
XVertexDataSet(0)
XCoordSet (0)
XNormalSet(0)
XColorSet(0)
XTexCoordSet(0)
XCoord3fSet(1)
XNormal3fSet(1)
XColor4ubSet(1)
XTexCoord2fSet(1)
XIndexArray(0) -> XIndexSet(1)
XMatrix(0) -> XTransform(1)
XCollisionGeometry(1)
XCollisionData(2)
XFortsExportedData(1)
XDetailObjectsData(1)
XGraphSet(0)
XContainer(0)

Уже что-то вырисовывается


 
AlexBond
Дата: СБ, 20.06.2009, 14:43:16 | Сообщение # 11
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Кое что еще расшифровывается:

XIndexedTriangleSet(1) :

Code
01  00  00  0E  00  00  00  00
D2  00  00  00  0A  0B  0C  0D
00  FF  FF  7F  7F  FF  FF  7F
7F  FF  FF  7F  7F  FF  FF  7F
FF  FF  FF  7 F  FF  FF  FF  7F
FF  01  00  00  00  

0x0E 0x0A 0x0B 0x0C 0x0D - прямые индексы на контейнеры
XIndexSet(1)
XCoord3fSet(1)
XNormal3fSet(1)
XColor4ubSet(1)
XTexCoord2fSet(1)

Похожая структура и в 3DS файлах.

Загадка что такое 0xD2 и

FF FF 7F 7F FF FF 7F
7F FF FF 7F 7F FF FF 7F
FF FF FF 7F FF FF FF 7F
FF

...

По поводу пустых контейнеров, то я думаю это надклассы , попробую их связать:

Code

XNode(0) -> XInteriorNode(1)
XGroup(2)
XCore(0) -> XShape(1)
XShader(0)-> XSimpleShader(1)
XAttribute(0) -> XMaterial(1)
XImage(1)
XTextureStage(0) -> XTextureMap(0) -> XOglTextureMap(1)

XGeometry(0)-> XGeoSet(0) -> XIndexedGeoSet(0)-> XIndexedTriangleSet(1)
XVertexDataSet(0) -> XCoordSet (0) -> XCoord3fSet(1)
XVertexDataSet(0) -> XNormalSet(0) -> XNormal3fSet(1)
XVertexDataSet(0) -> XColorSet(0) -> XColor4ubSet(1)
XVertexDataSet(0) -> XTexCoordSet(0) -> XTexCoord2fSet(1)

XIndexArray(0) -> XIndexSet(1)
XMatrix(0) -> XTransform(1)
XCollisionGeometry(1)
XCollisionData(2)
XFortsExportedData(1)
XDetailObjectsData(1)
XGraphSet(0) !!!!!!! тут оказывается не ноль а 1!!!!! что решает не стыковку о количестве
XContainer(0)


 
AlexBond
Дата: СБ, 20.06.2009, 18:53:02 | Сообщение # 12
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Я только что декодировал следующие типы:
XIndexSet
XCollisionGeometry

Они содержат массив треугольников, XCollisionGeometry - это поверхность активная в игре.

Итак. по тому что я сейчас имею, я могу добавить в XomView отображение данных в виде 3D модели, с натянутыми текстурами. и отобразить поверхность в которую заключена модель.

Но главная задача - это раскодировать XGraphSet, когда он будет декодирован, то в все дерево построится, и мы будем видеть xom файл как файл с ресурсами, в котором можно будет экспортировать и импортировать ресурсы!!!


 
AlexBond
Дата: СБ, 20.06.2009, 20:00:00 | Сообщение # 13
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Запишу сюда процесс работы:

XGraphSet HatAfro.xom

Code
000000  05 6A E6 DB E4 FA 86 6B  45 A7 3F F9 13 0E 12 DF  .j.....kE.?.....
000010  EB 01 07 ED C2 8F C5 8E  9E 05 45 9B AA 55 75 E9  ..........E..Uu.
000020  CD 6D C6 11 08 ED C2 8F  C5 8E 9E 05 45 9B AA 55  .m..........E..U
000030  75 E9 CD 6D C6 12 09 5F  30 94 DB 73 B3 FC 42 B1  u..m..._0..s..B.
000040  85 2E 01 B2 8F 82 12 14  0A E1 D7 EF 28 99 0C BF  ............(...
000050  43 A6 7D 15 FE 53 98 6A  3B 13 0B                 C.}..S.j;..

XGraphSet NinjaGun.xom
Code
00000  07 6A E6 DB E4 FA 86 6B  45 A7 3F F9 13 0E 12 DF  .j.....kE.?.....
00010  EB 06 08 5C E9 BD 39 22  E1 19 4F A2 66 D7 2A 21  ...\..9"..O.f.*!
00020  D7 3D 62 19 07 FF D7 10  3D 9A D3 65 4A B0 79 6E  .=b.....=..eJ.yn
00030  21 A6 98 D1 F8 18 07 EB  F5 8E 96 5B B0 B4 4C 85  !..........[..L.
00040  8D D1 00 60 0E C7 F3 13  0D 9E 84 C0 23 64 48 E9  ...`........#dH.
00050  4E BF 06 29 1E 26 59 89  B4 17 0E ED C2 8F C5 8E  N..).&Y.........
00060  9E 05 45 9B AA 55 75 E9  CD 6D C6 15 0F ED C2 8F  ..E..Uu..m......
00070  C5 8E 9E 05 45 9B AA 55  75 E9 CD 6D C6 16 10     ....E..Uu..m...

XGraphSet BaseballBat.xom
Code
000000  05 6A E6 DB E4 FA 86 6B  45 A7 3F F9 13 0E 12 DF  .j.....kE.?.....
000010  EB 01 07 ED C2 8F C5 8E  9E 05 45 9B AA 55 75 E9  ..........E..Uu.
000020  CD 6D C6 11 08 ED C2 8F  C5 8E 9E 05 45 9B AA 55  .m..........E..U
000030  75 E9 CD 6D C6 12 09 5F  30 94 DB 73 B3 FC 42 B1  u..m..._0..s..B.
000040  85 2E 01 B2 8F 82 12 14  0A E1 D7 EF 28 99 0C BF  ............(...
000050  43 A6 7D 15 FE 53 98 6A  3B 13 0B                 C.}..S.j;..

XGraphSet HatAlien.xom
Code
000000  05 6A E6 DB E4 FA 86 6B  45 A7 3F F9 13 0E 12 DF  .j.....kE.?.....
000010  EB 01 07 ED C2 8F C5 8E  9E 05 45 9B AA 55 75 E9  ..........E..Uu.
000020  CD 6D C6 11 08 ED C2 8F  C5 8E 9E 05 45 9B AA 55  .m..........E..U
000030  75 E9 CD 6D C6 12 09 5F  30 94 DB 73 B3 FC 42 B1  u..m..._0..s..B.
000040  85 2E 01 B2 8F 82 12 14  0A E1 D7 EF 28 99 0C BF  ............(...
000050  43 A6 7D 15 FE 53 98 6A  3B 13 0B                 C.}..S.j;..



 
AlexBond
Дата: СБ, 20.06.2009, 20:29:28 | Сообщение # 14
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Хммм я нашел закономерность!!!

Первый байт это указание на количество ресурсов,
каждый указатель длинной в 18 байт, где последнии 2 байта изменчивые.
Можно сделать вывод что первые 16 байт указывают на Тип ресурса, а последние два байта на его местоположение....

...

Последний байт указывает на строку!!!
в итоге имеем следующую структуру:
XGraphSet HatAfro.xom

0x05 - количество типов
1- {6A E6 DB E4 FA 86 6B 45 A7 3F F9 13 0E 12 DF EB} 01 07
2- {ED C2 8F C5 8E 9E 05 45 9B AA 55 75 E9 CD 6D C6} 11 08
3- {ED C2 8F C5 8E 9E 05 45 9B AA 55 75 E9 CD 6D C6} 12 09
4- {5F 30 94 DB 73 B3 FC 42 B1 85 2E 01 B2 8F 82 12} 14 0A
5- {E1 D7 EF 28 99 0C BF 43 A6 7D 15 FE 53 98 6A 3B} 13 0B

Из таблицы строк получаем:

07 - world
08 - Collision Data
09 - Phantom Collision Data
0A - Detail Objects
0B - Forts Exported Data

Из индексов получаем:
01 - XInteriorNode
11 - XCollisionData [0]
12 - XCollisionData [1]
14 - XDetailObjectsData
13 - XFortsExportedData

Как видно все верно!!!!!!! cool

Прикрепления: 9307582.png(49Kb)


 
DrHitman27
Дата: ВС, 21.06.2009, 05:46:52 | Сообщение # 15
DrHitman27
•Polarized•
Группа: Заблокированные
Сообщений: 2107
Репутация: 52
Статус: Offline
так ещё пару дней уроков промывания мозгов и появится нормальный комвертер моделей tongue

 
Форум » Worms 4 Mayhem » 4.3. Ваши идеи по моделированию » Декодируем Xom, Тип за типом... шаг за шагом... (Собираю группу психов не жалеющих свое время и мозги...)
Страница 1 из 151231415»
Поиск:

Copyright W4Tweaks™ 2008-2016 Хостинг от uCoz