[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Я только что декодировал следующие типы:
XIndexSet
XCollisionGeometry

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

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

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


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Запишу сюда процесс работы:

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
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Хммм я нашел закономерность!!!

Первый байт это указание на количество ресурсов,
каждый указатель длинной в 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 (48.7 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
У меня вопрос, ты текстуру сам натягивал, или там уже были координаты?

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Смотрим и обсуждаем увиденное



в W3D почемуто структура немного иная, и вместо вместо 4-х координат, используется 3. Хотя я так и не понял нахрена 4-я....
Прикрепления: 9287136.png (30.6 Kb) · 7961161.png (88.6 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Короче даю поюзать XomView v.1.7 Alpha версию Тем кому не терпится, заодно узнаю в чем недостатки.

Чтобы увидеть 3D модель нужно Выделить XCollisionGeometry.
Пока что он умеет лишь это. Ну и корректно сохраняет bin код, в отличие от предыдущего.

Но даже с этими возможностями я полазил по ресурсам W3D W4 WF.

Прикольно =)

Прикрепления: XomView_v1_7.rar (232.2 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Так небольшой прогресс, одна ветвь построилось:
world -> XNode -> XInteriorNode

Code

01  00  00  01  17  00  00  00
00  4D  71  15  41  00  4C  83
3C  85  CE  5B  41  01  00  00
00  0F  

На лицо явные координаты, но почему их 4-ре? :
0x17 видимо контейнер и по-моему XSkin (Хотя в других ссылка на XGroup)
00 00 00 00 - 0.0
4D 71 15 41 - 9.34016132354736
00 4C 83 3C - 0.0160274505615234
85 CE 5B 41 - 13.7379198074341
0xF - graveEye.xom

Получается вид:
world -> XNode -> XInteriorNode ["graveEye.xom" <0.0; 9.31; 0.02; 13.7>] -> XSkin

Quote (hitman27)
похоже ты уже смог получить кусочек анимации

Нет анимация там подругому устроина:
там имеется для этого контейнеры:
Code
XMatrix(0)
XTransform(0)
XJointTransform(5)
XSkin(1)
XSkinShape(1)
XBone(5)
XAnimClipLibrary(1)
XExpandedAnimInfo(1)

До них мы еще не скоро добиремся...

Пока попробую построить дерево из HatAfro.xom:

Code

XGraphSet ("world")       
       |
"XNode"       
       |       
XInteriorNode ["HatAfro.xom" <0.0; 0.0; 0.0; -1.0>]
       |
XGroup ["afrohair"  <0.0; 0.0; 0.0; -1.0>]
       |
       +--->"XMatrix" -> XTransform
       |
XGroup ["polySurfaceShape1"  <0.0; 0.0; 0.0; -1.0>]       
       |
"XCore"
       |
XShape ["polySurfaceShape1_afro_shader"  <0.0; 0.0; 0.0; -1.0>]
       |
       +-------->"XShader"
       |                    |
       |          XSimpleShader ["afro_shader"]
       |                    |
       |                    +---> "XTextureStage"    
       |                    |                    |
       |                    |           "XTextureMap"    
       |                    |                     |
       |                    |          XOglTextureMap      
       |                    |                    |
       |                     |                XImage ("maya:file2/-1")
       |                    |
       |                    +---> "XAttribute" -> XMaterial
       |      
       +---> "XGeometry"
                  |
              "XGeoSet"
                  |
          "XIndexedGeoSet"
                  |
           XIndex edTriangleSet
                  |       
                  +--->"XIndexArray" -> XIndexSet
                  +---> "XVertexDataSet" -> "XCoordSet" -> XCoord3fSet
                  +---> "XVertexDataSet" -> "XNormalSet" -> XNormal3fSet
                  +---> "XVertexDataSet" -> "XColorSet" -> XColor4ubSet
                  +---> "XVertexDataSet" -> "XTexCoordSet" -> XTexCoord2fSet

Вторая ветвь:

Code

XGraphSet ("Collision Data")
      |
XCollisionData
      |
XCollisionGeometry [<3D Model> "afro_shader"]

Третья Ветвь:

Code

XGraphSet ("Phantom Collision Data")
      |
XCollisionData      

Четвертая ветвь:

Code

XGraphSet ("Detail Objects")
      |
XDetailObjectsData

Пятая ветвь:

Code

XGraphSet ("Forts Exported Data")
      |
XFortsExportedData

Вроде бы все! cool Все строки и контейнеры использовались!!!


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (hitman27)
янимация 100% нет в модели у моделей в вормс(оружие шапки и тд) нет анимации она есть только у червя

Вспомни Гробики, у них анимация есть, и скрыта она в xom а не в самой игре.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Герыч)
Числа тоже можно хранить по-разному, к примеру со знаком и без знака, т.е. для 1 байта можно соответсвенно получить число в пределах -127..128 или 0..255

Самое прикольное что в XOM имеются индексы, которые хранятся в своем формате, немного тупом, и непонятном:

К примеру возьмем десятичное число 72.

Code
72 - десятичный вид
0x48 - Hex вид
0x48 - Xom вид

А теперь число 163.
Code
163 - десятичный вид
0xA3 - Hex вид
0x1A3 - xom вид

Далее число 375.
Code
375- десятичный вид
0x177 - Hex вид
0x2F7 - xom вид

Т.е. чтобы преобразовать число в hex нужно воспользоваться формулой:

Code
if byte0>127 then byte0 = byte0+128*(byte1-1)

Кстати Герыч, я наталкнулся на проблему, если число выходит за предел и второй байт больше 127, то используется третий байт... Не мог бы ты написать универсальную формулу для этого формата?

Вообще странный формат, но тем не менее он экономический.
Для чисел в пределах от 0..127 используется 1 байт
от 128..16383 используется 2 байта
от 16384..?? используется 3 байта

Блин как же работает этот формат?
8-й бит первого байта свидетельствует о наличии второго байта
8-й бит второго байта свидетельствует о наличии третьего байта и т.д.
Вот так это будет на Cи:

Code

if ((byte0 >> 7)==0) val = byte0
else if ((byte0 >> 7)==1) val = (byte1 << 7)+(byte0 & 0x7F)

А как обработать третий байт?

Герыч дай формулу!!!!!


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (zoom)
почему тема про иснезновение карты пропала которую я начал?

Эта? http://w4tweaks.ucoz.ru/forum/41-329-1


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote
if ((byte3 >> 7)==0) val = (byte3 << 21)+(byte2 << 14)+((byte1 & 0x7F)<<7)+(byte0 & 0x7F);

Ну незнаю, помоему byte2 тоже надо маской покрывать
val = (byte3 << 21)+((byte2 & 0x7F) << 14)+((byte1 & 0x7F)<<7)+(byte0 & 0x7F);

Правильно будет так:

Code

if ((byte0 >> 7)==0) val = byte0;
else
      if ((byte1 >> 7)==0) val = (byte1 << 7)+(byte0 & 0x7F);
      else
         if ((byte2 >> 7)==0) val = (byte2 << 14)+((byte1 & 0x7F)<<7)+(byte0 & 0x7F);
         else
           if ((byte3 >> 7)==0) val = (byte3 << 21)+((byte2 & 0x7F)<< 14)+((byte1 & 0x7F)<<7)+(byte0 & 0x7F);
           else
             val = (byte4 << 28)+((byte3 & 0x7F)<< 21)+((byte2 & 0x7F)<< 14)+((byte1 & 0x7F)<<7)+(byte0 & 0x7F);

Как думаешь если оптимизировать вот так, ошибки не будет?

Code

n=1;
val = (byte & 0x7F);
while ((byte >> 7)==1) do{
   *(byte++);
   val =((byte & 0x7F)<<7*n++)+val;
}


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
РАБОТАЕТ!!!!

Code

         function TestByte128(var _p:pointer):integer;
         var
            val,n:integer;
         begin
            n:=1;
            val:=byte(_p^) and $7f;
            while ((byte(_p^)shr 7)=1) do
                  begin
                  inc(Longword(_p));
                  val:= ((byte(_p^) and $7F)shl (7*n))+val;
                  inc(n);
                  end;
            inc(Longword(_p));
            Result:=val;
          end;

Наконец-то универсальная функция =)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Герыч)
вроде ничё сложного не было

Скажи это тем кто читает эту тему wacko и нихрена не понимает wacko


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Кое-какие идеи для будущего Xom View'ера:

1. Создать табличное представление некоторых типов данных.
Вектора, списки, координаты и т.п.

2. Создать дерево-классовое представление структуры файла.
Тут будет проблема, потому что не для всех xom файлов будет возможность построения полного дерева...

3. Создать экспорт 3DS, TGA, XLS форматов

4. Самое сложное... Создать Импорт 3DS, TGA, XLS форматов...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Переводи, если надо, но учти скрины тоже придется переделывать, под русский язык. А вообще че вы все придрались к этому русскому? по моему английский лучше подходит для софта, я помню когда у меня был руссифицированый 3DSMAX я ничего не мог понять, т.к. большинство туториалов написаны на английском, да и вообще английский командный язык, одно слово, коротко и ясно, а в русском надо два или три...

Кто бы вики перевел, была бы польза, а то так и стоит в англо-русском варианте

http://w3d.wiki-site.com/index.p....D0%B5_1


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
В каждом типе своя структура данных. Индексы хранятся в xom-байтовом-целом , как и большинство переменных обозначающих ссылку на строку или ссылку на контейнер.
В большинстве контейнеров используется float переменные 4 байта, они как бы условные ориентиры на начало и конец контейнера.

Проблема в том, что я не знаю размер контейнера, который не заканчивается CNTR, и таких контейнеров встречается много, нужно всех их раскодировать, для начала, чтобы получить полный список контейнеров. Ну а уже потом я буду строить по этому списку дерево. Со временем дерево будет строиться для большего количества типов.

У меня вопросы:

Какие ресурсы вы хотите просматривать, изменять?

Все типы я, не смогу декодировать, это долго и сложно... Их около 200, да и нужно ли?

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


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
XInteriorNode декодирован полностью!!!!

Он имеет массив ссылок на контейнеры, называние файла, и какие-то 4 координаты...

XInteriorNode - это своего рода папка, где лежат Xom файлы...

А это значит!!!!!!!!!! Что их можно из этих папок достать!!!!!!



Прикрепления: 0381685.png (39.8 Kb) · 2365965.png (14.6 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Наконец-то у меня инет заработал!!!!
Итак, за время без связи, у меня большой прогресс, но без форума я не смог продолжить дело, т.к. только тут я вырисовывал дерево, которое мне нужно.


Проблема сейчас - это выстроить дерево, чтобы нужные текстуры связать с нужными моделями. Как только я решу эту проблему выпущу официальный релиз XomView.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Как вам такое отображение?


Цитата mambaczarna ()
Only I did not know how to construct the animation.


I too not know this, while...

Цитата mambaczarna ()
I do something wrong?

XImage it very hard structure, it have Mipmap Textures for OpenGL. For replace textures you need special software.

Блин за что я взялся... запаришся вот так для каждого типа дерево строить...
Прикрепления: 3874759.png (44.9 Kb)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8


Итак, текстуры и модели с объектов я уже умею отображать. Проблема в том что координаты смещены, нужно еще учитывать Матрицу Перемещения.



Как видно детали узи не на их местах.
Прикрепления: 2436390.png (109.2 Kb) · 4282207.png (118.6 Kb)


 
Поиск: