Результаты поиска
|
|
Сообщений: 1042
|
Опубликовано: 20.06.2009, 18:53:02
Я только что декодировал следующие типы: XIndexSet XCollisionGeometry Они содержат массив треугольников, XCollisionGeometry - это поверхность активная в игре. Итак. по тому что я сейчас имею, я могу добавить в XomView отображение данных в виде 3D модели, с натянутыми текстурами. и отобразить поверхность в которую заключена модель. Но главная задача - это раскодировать XGraphSet, когда он будет декодирован, то в все дерево построится, и мы будем видеть xom файл как файл с ресурсами, в котором можно будет экспортировать и импортировать ресурсы!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.06.2009, 20:00:00
Запишу сюда процесс работы: 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;..
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.06.2009, 20:29:28
Хммм я нашел закономерность!!! Первый байт это указание на количество ресурсов, каждый указатель длинной в 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 Как видно все верно!!!!!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 21.06.2009, 17:52:14
У меня вопрос, ты текстуру сам натягивал, или там уже были координаты?
|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 03:23:05
Короче даю поюзать XomView v.1.7 Alpha версию Тем кому не терпится, заодно узнаю в чем недостатки. Чтобы увидеть 3D модель нужно Выделить XCollisionGeometry. Пока что он умеет лишь это. Ну и корректно сохраняет bin код, в отличие от предыдущего. Но даже с этими возможностями я полазил по ресурсам W3D W4 WF. Прикольно =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 15:21:01
Так небольшой прогресс, одна ветвь построилось: 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 Вроде бы все! Все строки и контейнеры использовались!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 15:53:36
Quote (hitman27) янимация 100% нет в модели у моделей в вормс(оружие шапки и тд) нет анимации она есть только у червя Вспомни Гробики, у них анимация есть, и скрыта она в xom а не в самой игре.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 18:09:49
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) А как обработать третий байт? Герыч дай формулу!!!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 20:01:13
Quote (zoom) почему тема про иснезновение карты пропала которую я начал? Эта? http://w4tweaks.ucoz.ru/forum/41-329-1
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 21:12:34
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; }
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2009, 22:17:16
РАБОТАЕТ!!!! 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; Наконец-то универсальная функция =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2009, 00:41:29
Quote (Герыч) вроде ничё сложного не было Скажи это тем кто читает эту тему и нихрена не понимает
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2009, 01:13:44
Кое-какие идеи для будущего Xom View'ера: 1. Создать табличное представление некоторых типов данных. Вектора, списки, координаты и т.п. 2. Создать дерево-классовое представление структуры файла. Тут будет проблема, потому что не для всех xom файлов будет возможность построения полного дерева... 3. Создать экспорт 3DS, TGA, XLS форматов 4. Самое сложное... Создать Импорт 3DS, TGA, XLS форматов...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2009, 21:14:56
Переводи, если надо, но учти скрины тоже придется переделывать, под русский язык. А вообще че вы все придрались к этому русскому? по моему английский лучше подходит для софта, я помню когда у меня был руссифицированый 3DSMAX я ничего не мог понять, т.к. большинство туториалов написаны на английском, да и вообще английский командный язык, одно слово, коротко и ясно, а в русском надо два или три... Кто бы вики перевел, была бы польза, а то так и стоит в англо-русском варианте http://w3d.wiki-site.com/index.p....D0%B5_1
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2009, 21:26:21
В каждом типе своя структура данных. Индексы хранятся в xom-байтовом-целом , как и большинство переменных обозначающих ссылку на строку или ссылку на контейнер. В большинстве контейнеров используется float переменные 4 байта, они как бы условные ориентиры на начало и конец контейнера. Проблема в том, что я не знаю размер контейнера, который не заканчивается CNTR, и таких контейнеров встречается много, нужно всех их раскодировать, для начала, чтобы получить полный список контейнеров. Ну а уже потом я буду строить по этому списку дерево. Со временем дерево будет строиться для большего количества типов. У меня вопросы: Какие ресурсы вы хотите просматривать, изменять? Все типы я, не смогу декодировать, это долго и сложно... Их около 200, да и нужно ли? Если контейнеры которые раскодируются не будут ссылочно связаны с другими, то их можно будет безпроблемно заменять! Хотя, если заметить факт наличия в контейнере строковой ссылки, которую мы меняем. то меняется вся таблица строк, а значит и контейнеры использующие строки будут повреждены, в этом и проблема....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2009, 22:44:45
XInteriorNode декодирован полностью!!!!
Он имеет массив ссылок на контейнеры, называние файла, и какие-то 4 координаты...
XInteriorNode - это своего рода папка, где лежат Xom файлы...
А это значит!!!!!!!!!! Что их можно из этих папок достать!!!!!!
|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 25.06.2009, 23:18:08
Как вам такое отображение?
Цитата 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.
Блин за что я взялся... запаришся вот так для каждого типа дерево строить...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.06.2009, 14:12:15
Итак, текстуры и модели с объектов я уже умею отображать. Проблема в том что координаты смещены, нужно еще учитывать Матрицу Перемещения.
Как видно детали узи не на их местах.
|
|
|
|