DTZ — различия между версиями
Материал из GTAModding.ru
Majestic (обсуждение | вклад) м (→данные handling) |
Majestic (обсуждение | вклад) м (→данные handling) |
||
Строка 743: | Строка 743: | ||
float fEngineInertia; //P | float fEngineInertia; //P | ||
float fMaxVelocity; fMaxVelocity=fMaxVelocity*180.0 | float fMaxVelocity; fMaxVelocity=fMaxVelocity*180.0 | ||
− | float 1.2 | + | float fMaxVelocity/1.2; |
float _f94; | float _f94; | ||
float _f98; | float _f98; |
Версия 14:53, 18 марта 2018
*.dtz
- дамп памяти консоли, содержащий основные игровые ресурсы GTA LCS и GTA VCS. Файл GAME.dtz
упакован при помощи алгоритма сжатия deflate/zlib.
Данный файл представляет особый интерес в силу того, что что в нем содержатся конфигурационные данные, а также элементы интерфейса и модели некоторых игровых объектов (в основном это бинарные аналоги текстовых файлов в папке data и моделей с текстурными архивами в папке models из GTA VC).
Содержание |
Заголовок
Версия GTA LCS
В приведенной ниже таблице дана расшифровка заголовка DTZ:
0x0 [4b FourCC] - Сигнатура DTZ, читается как GTAG. 0x4 [4b int] - неизвестно, обычно = 1. 0x8 [4b int] - размер DTZ. 0xC [4b int] - размер данных без учёта таблиц для перераспределения файла в памяти. 0x10 [4b int] - таблица смещений для перераспределения указателей в памяти (Reallocation Table). 0x14 [4b int] - количество смещений в Reallocation Table. 0x18 [4b int] - ссылается на таблицу смещений на хеши jenkins, которые заменяются на указатели на таблицы виртуальных методов (vmt). 0x1C [2b short] - количество хешей jenkins в 1 секции таблицы. 0x1E [2b short] - количество хешей jenkins во 2 секции таблицы (методы рендера в Atomic моделей). 0x20 [4b int] - gpThePaths (пути). 0x24 [4b int] - CPools::ms_pBuildingPool (смещение на данные, относящиеся к размещению статичных обьектов (Buildings IPL)). 0x28 [4b int] - смещение на данные, относящиеся к размещению дорог (Treadable IPL). 0x2C [4b int] - смещение на данные, относящиеся к размещению динамических объектов (Dummy IPL). 0x30 [4b int] - EntryInfoNodes (связана со стримингом динамических объектов карты). 0x34 [4b int] - PtrNodes (связвна со стримингом карты, ссылается на IPL из секций Buildings, Treadables, Dummys). 0x38 [4b int] - количество IDE. 0x3C [4b int] - таблица смещений на бинарные IDE (ID присваивается по счетчику смещений от 0 до количества IDE). 0x40 [4b int] - таблица классов авто (normal, poorfamily...), 11 классов с возможностью указания 25 IDE ID авто для класса. 0x44 [4b int] - количество ID авто в каждом классе вышеуказанной таблицы. 0x48 [4b int] - смещение на данные игровых зон (info.zon, navig.zon). 0x4C [4b int] - CWorld::ms_aSectors Данные игровых секторов, ссылается на PtrNode 0x50 [4b int] - CWorld::ms_bigBuildingsList 4 указателя на PtrNode 0x54 [4b int] - количество строк в таблице 2dfx. 0x58 [4b int] - смещение на таблицу 2dfx эффектов для объектов из default.ide (строка 64 байт). 0x5С [4b int] - смещение на массив hardcoded индексов моделей. 0x60 [4b int] - смещение на блок загрузки текстурных архивов CHK (TexList). 0x64 [4b int] - неизвестно, равно 0. 0x68 [4b int] - смещение на блок загрузки COL2 файлов. 0x6C [4b int] - неизвестно, равно 0. 0x70 [4b int] - смещение на коллизию-пустышку. 0x74 [4b int] - смещение на аналог object.dat (строка 32 байта, 117 шт.). 0x78 [4b int] - смещение на палитру RGBA цветов, используемых в carcols.dat, 256 цветов. 0x7C [4b int] - CStreamingInfo CStreaming::ms_aInfoForModel[] (аналог GTA3PS*HR.DIR). 0x80 [4b int] - смещение на блок загрузки ANIM файлов и анимаций (ped.ifp). 0x84 [4b int] - fistfite.dat 0x88 [4b int] - PedAnimInfo[] 0x8C [4b int] - аналог ped.dat. 0x90 [4b int] - аналог pedstats.dat. 0x94 [4b int] - количество строк в cull.ipl. 0x98 [4b int] - смещение на аналог cull.ipl (строка 16 байт). 0x9C [4b int] - относится к окклюзиям (не используется, равно 0). 0xA0 [4b int] - относится к окклюзиям (не используется, равно 0). 0xA4 [4b int] - смещение на аналог waterpro.dat. 0xA8 [4b int] - смещение на аналог HANDLING.CFG. 0xAC [4b int] - смещение на аналог surface.dat. 0xB0 [4b int] - смещение на аналог timecyc.dat. 0xB4 [4b int] - смещение на аналог pedgrp.dat. 0xB8 [4b int] - смещение на аналог particle.cfg. 0xBC [4b int] - смещение на аналог weapon.dat. 0xC0 [4b int] - таблица смещений на клампы встроенных в DTZ MDL файлов. 0xC4 [4b int] - смещение на аналог CUTS.DIR. 0xC8 [4b int] - смещение на аналог ferry.dat (пути для парома). 0xCС [4b int] - смещение на аналоги tracks.dat и tracks2.dat. 0xD0 [4b int] - смещение на аналог flight.dat. 0xD4 [4b int] - смещение на menu.chk (сжат Deflate/ZLib алгоритмом). 0xD8 [4b int] - размер fonts.chk (реальный). 0xDС [4b int] - смещение на fonts.chk (сжат Deflate/ZLib алгоритмом).
Краткое описание содержимого
В текущий момент известно, что в GAME.dtz
содержатся следующие данные:
Описание | Аналогия из предыдущих частей серии | Оффсет на ресурс | Комментарии |
---|---|---|---|
Текстуры | |||
текстуры меню | frontend.txd | LCS PS2: 0x4E4A30
LCS PSP: VCS PS2: VCS PSP: |
директория с текстурами меню, запакована deflate/zlib алгоритмом (*) |
текстуры шрифтов (fonts.chk) | fonts.txd | LCS PS2: 0x4EF4D8
LCS PSP: VCS PS2: VCS PSP: |
директория с текстурами шрифтов, запакована deflate/zlib алгоритмом (*) |
текстуры particle-эффектов | particle.txd | LCS PS2: 0x4A1C28
LCS PSP: VCS PS2: VCS PSP: |
содержит все текстуры particle-эффектов (*) |
generic-текстуры | generic.txd, wheels.txd, vehicle.txd | LCS PS2: 0x4A1BFC
LCS PSP: VCS PS2: VCS PSP: |
содержит общие текстуры для автотранспорта и все текстуры колес (*) |
значки радара | hud.txd | LCS PS2: 0x4A1BE4
LCS PSP: VCS PS2: VCS PSP: |
содержит текстуры для hud-а (*) |
текстуры радара | radarNN.txd | - | только в GTA VCS, запакованы deflate/zlib алгоритмом |
Анимация | |||
? | ped.ifp | ||
? | swim.ifp | только в GTA VCS | |
? | fight.ifp | только в GTA VCS | |
? | driveby.ifp | только в GTA VCS | |
Коллизия | |||
коллизии пешеходов (**) | peds.col | одна за всех :) | |
коллизии автотранспорта (**) | vehicles.col | ||
коллизии оружия (**) | weapons.col | ||
коллизии ко всем моделям из MasterWRLD, а так же к скриптовым объектам из GTA3XXX.IMG архива (**) | generic.col | ||
коллизии всех остальных объектов в игре (**) | содержат только ограничивающие коробку и сферу, всё остальное - в стиминг-COL2 из GTA3XXX.IMG | ||
Модели | |||
обруч (***) | race_ring.dff | VCS PS2: E02E3F | |
стрелка (***) | Shape .dff | LCS PS2: 30643F
VCS PS2: 28233F |
|
длинный цилиндр (***) | zonecyla.dff | VCS PS2: С4223F | |
шарик (***) | zoneaphr.dff | VCS PS2: E8B03E | |
конус входа (***) | entercone.dff | VCS PS2: A0B03E | |
цилиндр (***) | zonecylb.dff | LCS PS2: 64EA3F
VCS PS2: 70AD3E |
|
стрелка 2 (***) | arrow.dff | LCS PS2: 800643
VCS PS2: 882938 9C7D3E |
|
ЛОДы колес (***) | wheels.dff | LCS PS2: 800643
E8C249 50C349 B8C349 ECC349 88C449 94EB49 |
|
колесо 1 (***) | wheels.dff | LCS PS2: 80С249 | |
колесо 2 (***) | wheels.dff | LCS PS2: B4C249 | |
колесо 3 (***) | wheels.dff | LCS PS2: 1CC349 | |
колесо 4 (***) | wheels.dff | LCS PS2: 84C349 | |
колесо 5 (***) | wheels.dff | LCS PS2: 20C449 | |
колесо 6 (***) | wheels.dff | LCS PS2: 54C449 | |
LOD самолета (***) | air_vlo.dff | LCS PS2: 2CEB49 | |
колесо 7 (***) | wheels.dff | LCS PS2: 60EB49 | |
IDE / IPL / DAT | |||
аналог IDE (**) | *.ide | содержит все данные инициализации моделей, текстур и коллизий | |
аналог IPL (**) | *.ipl | содержит все координаты для расстановки коллизий и генерика в игре | |
цвета автомобилей (**) | carcols.dat | ||
цвета пешеходов (**) | pedcols.dat | только в GTA VCS | |
cullzone data | cullzone.dat | ||
fistfite data | fistfite.dat | ||
handling data (**) | handling.dat | LCS PS2: 0x1647A0
LCS PSP: VCS PS2: VCS PSP: |
в LCS и VCS структуры отличаются |
info.zon | |||
map.zon | |||
object data | object.dat | ||
particle data | particle.cfg | LCS PS2: 0x3917D0
|
характеристики спецэффектов |
pedstats data | pedstats.dat | LCS PS2:
часть 1 - часть 2 - часть 3 - LCS PSP:
VCS PS2: часть 1 - часть 2 - VCS PSP:
|
характеристики пешеходов
LCS PS2: часть 1 - 15 items часть 2 - 18 items часть 3 - 9 items LCS PSP: 42 items VCS PS2: часть 1 - 6 items часть 2 - 36 items VCS PSP: 42 items |
timecyc data | timecyc.dat | характеристики погоды | |
waterpro data | waterpro.dat | данные водных поверхностей | |
weapon data | weapon.dat | LCS PS2:0x40A980 VCS PS2: |
|
Разное | |||
SDT-файлы. | LCS:0x377720
|
только в PSP-версиях |
Внимание!
- Оффсеты указаны для распакованного game.dtz.
- Данные, помеченные (*) открываются при помощи GTA Stories Texture Explorer.
- Данные, помеченные (**) просматриваются при помощи Stories WRLD Tool.
- Данные, помеченные (***) импортируются в 3D MAX при помощи MDL importer.
Структуры
Ниже представлены некоторые структуры описанных выше данных.
IDE
IDE в DTZ представлена в виде глобальной бинарной таблицы, имеющей данные для всех моделей в игре, будь то автомобили, пешеходы или простые объекты.
Количество IDE и смещение на таблицу IDE можно узнать в DTZ по смещениям 0x38 и 0x3C для всех консольных игр. Таблица IDE представляет собой указатели на бинарные строки IDE, ID модели присваивается по счетчику указателей от 0 до кол-ва IDE. Если указатель равен 0 - значит данный ID свободен.
Структура бинарной строки IDE
Каждая бинарная строка IDE имеет глобальные данные и побочные, зависящие от типа загружаемой IDE.
Глобальные данные занимают 44 байт и имеют структуру:
4b - Свободное место для размещения указателя в памяти. 4b - Свободное место для размещения указателя в памяти. 4b - имя IDE/модели, хешированное по CRC32 алгоритму. 4b - Свободное место для размещения указателя в памяти. 1b - тип IDE, определяет какие побочные данные нужно загружать после глобальных данных. 1b - кол-во 2dfx. 2b - unknown. 4b - смещение на коллизию модели. 2b - 2dfx ID 2b - unknown (0xFFFF) 2b - unknown (обычно нули). 2b - номер наименования текстурного файла в таблице TexList. 4b - хеш типа секции. 4b - unknown (обычно нули). 4b - Дистанция прорисовки (у автомобилей и пешеходов = 0xFFFFFFFF).
Побочные данные:
Секция типа 1 (objs)
Секция типа 3 (tobj)
Секция типа 6 (cars)
1b - текущий ID primary цвета машины (в памяти) в файле всегда = 0 1b - текущий ID secondary цвета машины (в памяти) в файле всегда = 0 14b - имя авто в GXT 4b - размер колеса 2b - ID модели колеса 2b - номер строки в бинарной HANDLING.CFG 1b - Количество дверей 1b - Class (-1 - ignore, 0 - normal, 1 - poorfamily, 2 - richfamily, 3 - executive, 4 - worker, 5 - big, 6 - taxi, 7 - moped, 8 - motorbike, 9 - leisureboat, 10 - workerboat) 1b - Level 1b - unknown 4b - Frequency 4b - unknown (обычно нули). 16b - (3x float single + 4b выравнивание) - позиция headlights 16b - (3x float single + 4b выравнивание) - позиция taillights 16b - (3x float single + 4b выравнивание) - позиция ped_frontseat 16b - (3x float single + 4b выравнивание) - позиция ped_backseat 16b - (3x float single + 4b выравнивание) - позиция exhaust 4b - CompRules 4b - unknown (0x4479FF5C) возможно идентификатор секции указателей перекраски авто. 100b (25х longint) - глобальный массив указателей на цвета материалов модели, окрашенных primary цветом (заполняется указателями из аналогичной секции самой модели, при обнулении в памяти машина перестанет менять цвет). 100b (25х longint) - глобальный массив указателей на цвета материалов модели, окрашенных secondary цветом (заполняется указателями из аналогичной секции самой модели, при обнулении в памяти машина перестанет менять цвет). 8b - массив ID primary цветов из палитры carcols.dat 8b - массив ID secondary цветов из палитры carcols.dat 1b - общее кол-во используемых цветов. 1b - индекс цветовой схемы машины из массивов цветов (в памяти постоянно рандомизируется от 0 до кол-ва цветов) в файле всегда = 0 1b - текущий ID primary цвета машины (в памяти) в файле всегда = -1 1b - текущий ID secondary цвета машины (в памяти) в файле всегда = -1 4b - amount the normals are splayed by to improve the environment mapping on PSP 4b - unknown 4b - Anims ID (van, bikeh ,bikev и т.д.; -1 = null)
Секция типа 7 (peds)
cull.ipl
Строка занимает 16 байт и выглядит следующим образом: (Координаты содержат реальные округленные значения)
2b: Box Lower X Coord 2b: Box Upper X Coord 2b: Box Lower Y Coord 2b: Box Upper Y Coord 2b: Box Lower Z Coord 2b: Box Upper Z Coord 2b: Flag 1 2b: Flag 2
ped.dat
4b dword: MaskID 4b float: Walkspeed* 4b float: Runspeed* 4b float: Fastrunspeed* 4b float: Flee Distance 4b float: Heading Change 4b dword: Threats Mask 4b dword: Avoid Mask * умножить на 50
weapons data
Состоит из двух CWeaponModelInfo. Чтение происходит напрямую из заголовка DaTa Zlib.
Структура версии LCS
Заголовок
typedef struct Weapon_lcs_header { offset CWeaponModelInfo1; offset CWeaponModelInfo2; };
данные weapons
Общее число записей: 38
typedef struct vFireOffset{ float x; float y; float z; }; typedef struct vTimeStrc{ float a; float b; float c; }; typedef struct weapondata{ int iFireType; float fRange; int iFiringRate; int iReload; int iAmountOfAmmunition; int iDamage; float fSpeed; float fRadius; float fLifeSpan; float fSpread; DWORD dwPadding1; DWORD dwPadding2; vFireOffset FireOffset; DWORD dwZero; DWORD dwAnim_id; vTimeStrc time1; vTimeStrc time2; float unk; DWORD dwModelID; DWORD dwModelID2; DWORD dwweapon_slot; DWORD dwFlags <format=hex>; };
Структура версии VCS
Общее число записей: 40
typedef struct vFireOffset{ float x; float y; float z; }; typedef struct vTimeStrc{ float a; float b; float c; }; typedef struct weapondata{ DWORD dwType; int iFireType; float fRange; int iFiringRate; int iReload; int iAmountOfAmmunition; int iDamage; float fSpeed; float fRadius; float fLifeSpan; float fSpread; DWORD dwPadding; //padding (0xAA) vFireOffset m_vFireOffset; //вектор DWORD _f3C; //всегда нуль DWORD _f40; //целочисленное значение DWORD _f44; //DWORD ? unknown vTimeStrc m_vTimeStrc; vTimeStrc m_vTimeStrc; float unk; DWORD dwModelID; DWORD dwModel2ID; DWORD dwWeaponSlot DWORD _f6C; //padding (0xAA) };
pedstats data
Структура версии LCS
Заголовок
Размер массива адресов: 42. Чтение происходит напрямую из заголовка DaTa Zlib.
typedef struct pedstat_lcs_header { offset Pedstat_offset; };
данные pedstats
На PS2 разделены на три фрагмента: 15+18+9=42. Общее число записей: 42.
typedef struct pedstat_lcs{ int iNumber; char name[24]; float fFleeDistance; float fHeadingChangeRate; byte btFear; byte btTemper; byte btLawfullness; byte btView; float fAttackStrength; float fDefendWeakness; WORD btStatFlags; byte padding[2]; };
Структура версии VCS
Общее число записей: 42.
На PS2 разделены на два фрагмента: 6+36=42
typedef struct pedstat_vcs{ int iNumber; float fFleeDistance; float fHeadingChangeRate; float fAttackStrength; float fDefendWeakness; byte btStatFlags; byte btZero; byte btFear; byte btTemper; byte btLawfullness; byte btView; char name[26]; };
handling data
Структура версии LCS
Заголовок
Чтение происходит напрямую из заголовка DaTa Zlib.
typedef struct lcs_handling_header { float unknow; float unknow; float unknow; float unknow; float unknow; float null; float null; float null; };
данные handling
Общее число записей: 81.
typedef struct lcs_handling_item { float fMass; //B float fTurnMass; //C float fTractionMultiplier;//J float fCollisionDamageMultiplier; (fCollisionDamageMultiplier = (fMass/2000.0)*fCollisionDamageMultiplier) //ab DWORD CarId; float 1/fMass; float fDragMult; //D float _f1C; //null float CentreOfMassX; //F float CentreOfMassY; //G float CentreOfMassZ; //H float _f2C; //null int nPercentSubmerged //I float (fMass*0.8)/nPercentSubmerged; float _f38; //Unknown, gears related float _f3C; //Unknown, gears related float _f40; //Unknown, gears related float _f44; //Unknown, transmission gear 1 related float _f48; //Unknown, transmission gear 1 related float _f4C; //Unknown, transmission gear 1 related float _f50; //Unknown, transmission gear 2 related float _f54; //Unknown, transmission gear 2 related float _f58; //Unknown, transmission gear 2 related float _f5C; //Unknown, transmission gear 3 related float _f60; //Unknown, transmission gear 3 related float _f64; //Unknown, transmission gear 3 related float _f68; //Unknown, transmission gear 4 related float _f6C; //Unknown, transmission gear 4 related float _f70; //Unknown, transmission gear 4 related float _f74; //Unknown, transmission gear 5 related float _f78; //Unknown, transmission gear 5 related float _f7C; //Unknown, transmission gear 5 related char cDriveType_TransmissionData; //R char cEngineType_TransmissionData; //R byte nNumberOfGears_TransmissionData;//M byte padding; //null float fEngineAcceleration; fEngineAcceleration=fEngineAcceleration*2500*5(*2 for 4wd) //O float fEngineInertia; //P float fMaxVelocity; fMaxVelocity=fMaxVelocity*180.0 float fMaxVelocity/1.2; float _f94; float _f98; float _f9C; float fBrakeBias; //T float bABS; //U float fSteeringLock; //V float fTractionLoss; //K float fTractionBias; //L float _fB4; //null float fSuspensionForceLevel; //a float fSuspensionDampingLevel; //b float fSuspensionUpperLimit; //d float fSuspensionLowerLimit; //e float fSuspensionBias; //f float fSuspensionAntiDive; //g DWORD dwflags <format=hex>; float fSeatOffsetDistance; //aa DWORD dwMonetaryValue; //ac byte bFrontLights; //ah byte bRearLights; //ai byte padding[18]; };
Текстовую версию, декомпилированную с помощью Stories WRLD Tool, можно cкачать из архива gtamodding.ru.
Структура версии VCS
particle data
Структура версии LCS
Общее число записей: 82. Заголовок секции отсутствует. Чтение происходит напрямую из заголовка DaTa Zlib.
typedef struct particle { DWORD dwID; char Name[20]; //A; float CreateRange; //CR; float DefInitRadius; //E; float ExpRate; //F; word InitAngle; //GZA; word ChangeTimeA; //IZA; word AngleChangeAmount; //HZA; word InitZRadius; //HZR; float ChangeTimeZ; //GZR; float ZRadiusChangeAmount; //IZR; word FadeTime; //H; word InitInten; //G; word FadeAmount; //I; word InitIntenA; //GA; word FadeTimeA; //HA; word FadeAmountA; //IA; byte StartAnimFr; //K; byte FinalAnimFr; //L; word AnimSpeed; //J; int RotSpeed; //M; float GravitAccel; //N; int DragFrictDeccel; //O; int DefLifeSpan; //P; float PosRandomError; //Q; float VelRandomError; //R; float ExpRateError; //S; int RotRateError; //T; int LSErrorShape; //U; float TrailLengthMult; //V; int Flags <format=hex>; //Z; byte ColourR; //B; byte ColourG; //C; word ColourB; //D; byte InitColourVar; //CV; byte FadeColourR; //B2; byte FadeColourG; //C2; byte FadeColourB; //D2; DWORD unk1; int ColourFadeTime; //FT; float StretchTexX; //WX; float StretchTexY; //WY; float WindFactor; //WI; DWORD unk2; };
Структура версии VCS
carcols data
Структура версии LCS
Секция col
Общее число записей: 1. Заголовок секции отсутствует. Чтение происходит напрямую из заголовка DaTa Zlib.
Размер массива данных: 102. Лимит: 256 (кушает в памяти 1024 байт)
typedef struct colors { byte Red; //Kрасный цвет; byte Grey; //Зелёный цвет; byte Blue; //Синий цвет; byte Alpha; //Альфа канал цвета; };
Секция car
Общее число записей: равно количеству автотранспорта в игре. Является частью структуры IDE секции cars.
Размер массивов данных: 8. Если количество расцветок авто меньше 8, то пустые значения заполнены нулями.
typedef struct carcolors1 { byte ColorID1; //Номер первого цвета; };
typedef struct carcolors2 { byte ColorID2; //Номер второго цвета; };
Структура версии VCS
Текстовую версию, декомпилированную с помощью Stories WRLD Tool, можно cкачать из архива gtamodding.ru.