DTZ — различия между версиями
Материал из GTAModding.ru
Sergeanur (обсуждение | вклад) (→Версия GTA LCS) |
Majestic (обсуждение | вклад) (→Структура версии VCS) |
||
(не показаны 9 промежуточных версий 2 участников) | |||
Строка 15: | Строка 15: | ||
0x8 [4b int] - размер DTZ. | 0x8 [4b int] - размер DTZ. | ||
0xC [4b int] - размер данных без учёта таблиц для перераспределения файла в памяти. | 0xC [4b int] - размер данных без учёта таблиц для перераспределения файла в памяти. | ||
− | 0x10 [4b int] - таблица смещений для перераспределения | + | 0x10 [4b int] - таблица смещений для перераспределения указателей в памяти (Reallocation Table). |
− | 0x14 [4b int] - количество смещений в | + | 0x14 [4b int] - количество смещений в Reallocation Table. |
0x18 [4b int] - ссылается на таблицу смещений на хеши jenkins, которые заменяются на указатели на таблицы виртуальных методов (vmt). | 0x18 [4b int] - ссылается на таблицу смещений на хеши jenkins, которые заменяются на указатели на таблицы виртуальных методов (vmt). | ||
− | 0x1C [2b short] - количество хешей jenkins. | + | 0x1C [2b short] - количество хешей jenkins в 1 секции таблицы. |
− | 0x1E [2b short] - количество | + | 0x1E [2b short] - количество хешей jenkins во 2 секции таблицы (методы рендера в Atomic моделей). |
− | 0x20 [4b int] - пути. | + | 0x20 [4b int] - '''gpThePaths''' (пути). |
− | 0x24 [4b int] - смещение на данные, относящиеся к размещению | + | 0x24 [4b int] - '''CPools::ms_pBuildingPool''' (смещение на данные, относящиеся к размещению статичных обьектов (Buildings IPL)). |
− | 0x28 [4b int] - смещение на данные, относящиеся к размещению | + | 0x28 [4b int] - смещение на данные, относящиеся к размещению дорог (Treadable IPL). |
− | 0x2C [4b int] - смещение на данные, относящиеся к размещению | + | 0x2C [4b int] - смещение на данные, относящиеся к размещению динамических объектов (Dummy IPL). |
− | 0x30 [4b int] - EntryInfoNodes ( | + | 0x30 [4b int] - EntryInfoNodes (связана со стримингом динамических объектов карты). |
− | 0x34 [4b int] - PtrNodes ( | + | 0x34 [4b int] - PtrNodes (связвна со стримингом карты, ссылается на IPL из секций Buildings, Treadables, Dummys). |
− | 0x38 [4b int] - количество | + | 0x38 [4b int] - количество IDE. |
− | 0x3C [4b int] - таблица смещений на | + | 0x3C [4b int] - таблица смещений на бинарные IDE (ID присваивается по счетчику смещений от 0 до количества IDE). |
− | 0x40 [4b int] - | + | 0x40 [4b int] - таблица классов авто (normal, poorfamily...), 11 классов с возможностью указания 25 IDE ID авто для класса. |
− | 0x44 [4b int] - | + | 0x44 [4b int] - количество ID авто в каждом классе вышеуказанной таблицы. |
0x48 [4b int] - смещение на данные игровых зон ('''info.zon''', '''navig.zon'''). | 0x48 [4b int] - смещение на данные игровых зон ('''info.zon''', '''navig.zon'''). | ||
− | 0x4C [4b int] - | + | 0x4C [4b int] - '''CWorld::ms_aSectors''' Данные игровых секторов, ссылается на PtrNode |
− | 0x50 [4b int] - | + | 0x50 [4b int] - '''CWorld::ms_bigBuildingsList''' 4 указателя на PtrNode |
0x54 [4b int] - количество строк в таблице 2dfx. | 0x54 [4b int] - количество строк в таблице 2dfx. | ||
0x58 [4b int] - смещение на таблицу 2dfx эффектов для объектов из default.ide (строка 64 байт). | 0x58 [4b int] - смещение на таблицу 2dfx эффектов для объектов из default.ide (строка 64 байт). | ||
− | 0x5С [4b int] - | + | 0x5С [4b int] - смещение на массив hardcoded индексов моделей. |
− | 0x60 [4b int] - смещение на блок загрузки текстурных архивов CHK. | + | 0x60 [4b int] - смещение на блок загрузки текстурных архивов CHK (TexList). |
0x64 [4b int] - неизвестно, равно 0. | 0x64 [4b int] - неизвестно, равно 0. | ||
0x68 [4b int] - смещение на блок загрузки COL2 файлов. | 0x68 [4b int] - смещение на блок загрузки COL2 файлов. | ||
Строка 42: | Строка 42: | ||
0x70 [4b int] - смещение на коллизию-пустышку. | 0x70 [4b int] - смещение на коллизию-пустышку. | ||
0x74 [4b int] - смещение на аналог '''object.dat''' (строка 32 байта, 117 шт.). | 0x74 [4b int] - смещение на аналог '''object.dat''' (строка 32 байта, 117 шт.). | ||
− | 0x78 [4b int] - смещение на палитру RGBA цветов, используемых в '''carcols.dat'''. | + | 0x78 [4b int] - смещение на палитру RGBA цветов, используемых в '''carcols.dat''', 256 цветов. |
0x7C [4b int] - '''CStreamingInfo CStreaming::ms_aInfoForModel[]''' (аналог GTA3PS*HR.DIR). | 0x7C [4b int] - '''CStreamingInfo CStreaming::ms_aInfoForModel[]''' (аналог GTA3PS*HR.DIR). | ||
0x80 [4b int] - смещение на блок загрузки ANIM файлов и анимаций ('''ped.ifp'''). | 0x80 [4b int] - смещение на блок загрузки ANIM файлов и анимаций ('''ped.ifp'''). | ||
0x84 [4b int] - '''fistfite.dat''' | 0x84 [4b int] - '''fistfite.dat''' | ||
− | 0x88 [4b int] - | + | 0x88 [4b int] - '''PedAnimInfo[]''' |
0x8C [4b int] - аналог '''ped.dat'''. | 0x8C [4b int] - аналог '''ped.dat'''. | ||
0x90 [4b int] - аналог '''pedstats.dat'''. | 0x90 [4b int] - аналог '''pedstats.dat'''. | ||
0x94 [4b int] - количество строк в '''cull.ipl'''. | 0x94 [4b int] - количество строк в '''cull.ipl'''. | ||
0x98 [4b int] - смещение на аналог '''cull.ipl''' (строка 16 байт). | 0x98 [4b int] - смещение на аналог '''cull.ipl''' (строка 16 байт). | ||
− | 0x9C [4b int] - | + | 0x9C [4b int] - относится к окклюзиям (не используется, равно 0). |
− | 0xA0 [4b int] - | + | 0xA0 [4b int] - относится к окклюзиям (не используется, равно 0). |
0xA4 [4b int] - смещение на аналог '''waterpro.dat'''. | 0xA4 [4b int] - смещение на аналог '''waterpro.dat'''. | ||
0xA8 [4b int] - смещение на аналог '''HANDLING.CFG'''. | 0xA8 [4b int] - смещение на аналог '''HANDLING.CFG'''. | ||
Строка 423: | Строка 423: | ||
Ниже представлены некоторые структуры описанных выше данных. | Ниже представлены некоторые структуры описанных выше данных. | ||
+ | === 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 === | === weapons data === | ||
Строка 609: | Строка 707: | ||
float fTurnMass; //C | float fTurnMass; //C | ||
float fTractionMultiplier;//J | float fTractionMultiplier;//J | ||
− | float | + | float fCollisionDamageMultiplier; (fCollisionDamageMultiplier = (fMass/2000.0)*fCollisionDamageMultiplier) //ab |
DWORD CarId; | DWORD CarId; | ||
− | float | + | float 1/fMass; |
float fDragMult; //D | float fDragMult; //D | ||
float _f1C; //null | float _f1C; //null | ||
Строка 619: | Строка 717: | ||
float _f2C; //null | float _f2C; //null | ||
int nPercentSubmerged //I | int nPercentSubmerged //I | ||
− | float | + | float (fMass*0.8)/nPercentSubmerged; |
− | float _f38; | + | float _f38; //дублирует значение _f94 //выставляет движок |
− | float _f3C; | + | float _f3C; //0xBC23D70A //выставляет движок |
− | float _f40; | + | float _f40; //дублирует значение _f94 //выставляет движок |
− | float _f44; | + | float _f44; //Unknown, transmission gear 1 related |
− | float _f48; | + | float _f48; //Unknown, transmission gear 1 related |
− | float _f4C; | + | float _f4C; //0xBC23D70A //выставляет движок |
− | float _f50; | + | float _f50; //Unknown, transmission gear 2 related |
− | float _f54; | + | float _f54; //Unknown, transmission gear 2 related |
− | float _f58; | + | float _f58; //Unknown, transmission gear 2 related |
− | float _f5C; | + | float _f5C; //Unknown, transmission gear 3 related |
− | float _f60; | + | float _f60; //Unknown, transmission gear 3 related |
− | float _f64; | + | float _f64; //Unknown, transmission gear 3 related |
− | float _f68; | + | float _f68; //Unknown, transmission gear 4 related |
− | float _f6C; | + | float _f6C; //Unknown, transmission gear 4 related |
− | float _f70; | + | float _f70; //Unknown, transmission gear 4 related |
− | float _f74; | + | float _f74; //Unknown, transmission gear 5 related |
− | float _f78; | + | float _f78; //Unknown, transmission gear 5 related |
− | float _f7C; | + | float _f7C; //Unknown, transmission gear 5 related |
− | char cDriveType_TransmissionData; // | + | char cDriveType_TransmissionData; //Q |
char cEngineType_TransmissionData; //R | char cEngineType_TransmissionData; //R | ||
byte nNumberOfGears_TransmissionData;//M | byte nNumberOfGears_TransmissionData;//M | ||
− | byte | + | byte padding; //null |
− | float | + | float fEngineAcceleration; fEngineAcceleration=fEngineAcceleration*2500*5(*2 for 4wd) //O |
float fEngineInertia; //P | float fEngineInertia; //P | ||
− | float | + | float fMaxVelocity; fMaxVelocity=fMaxVelocity*180.0 |
− | float | + | float fMaxVelocity/1.2; |
− | float _f94; | + | float _f94 //=-0.2 для всего транспорта, -0.05 для байков; //выставляет движок |
float _f98; | float _f98; | ||
− | float | + | float fBrakeDeceleration; fBrakeDeceleration=fBrakeDeceleration*2500; //S |
float fBrakeBias; //T | float fBrakeBias; //T | ||
float bABS; //U | float bABS; //U | ||
Строка 661: | Строка 759: | ||
float fSuspensionBias; //f | float fSuspensionBias; //f | ||
float fSuspensionAntiDive; //g | float fSuspensionAntiDive; //g | ||
− | DWORD dwflags <format=hex>; | + | DWORD dwflags <format=hex>; //ag |
float fSeatOffsetDistance; //aa | float fSeatOffsetDistance; //aa | ||
DWORD dwMonetaryValue; //ac | DWORD dwMonetaryValue; //ac | ||
Строка 674: | Строка 772: | ||
==== Структура версии VCS ==== | ==== Структура версии VCS ==== | ||
− | + | <source lang="html4strict"> | |
+ | |||
+ | 0x0 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) | ||
+ | 0x4 4b float ? = 0xBC23D70A (set by engine) | ||
+ | 0x8 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) | ||
+ | 0xC 4b float ? Unknown, Gear 1 ratio | ||
+ | 0x10 4b float ? Unknown, Gear 1 ratio | ||
+ | 0x14 4b float ? = 0xBC23D70A (set by engine) | ||
+ | 0x18 4b float ? Unknown, Gear 2 ratio | ||
+ | 0x1C 4b float ? Unknown, Gear 2 ratio | ||
+ | 0x20 4b float ? Unknown, Gear 2 ratio | ||
+ | 0x24 4b float ? Unknown, Gear 3 ratio | ||
+ | 0x28 4b float ? Unknown, Gear 3 ratio | ||
+ | 0x2C 4b float ? Unknown, Gear 3 ratio | ||
+ | 0x30 4b float ? Unknown, Gear 4 ratio | ||
+ | 0x34 4b float ? Unknown, Gear 4 ratio | ||
+ | 0x38 4b float ? Unknown, Gear 4 ratio | ||
+ | 0x3C 4b float ? Unknown, Gear 5 ratio | ||
+ | 0x40 4b float ? Unknown, Gear 5 ratio | ||
+ | 0x44 4b float ? Unknown, Gear 5 ratio | ||
+ | 0x48 4b float N fEngineAcceleration; fEngineAcceleration=fEngineAcceleration*12500(*2 for 4wd vehicles) | ||
+ | 0x4C 4b float P TransmissionData.fEngineInertia | ||
+ | 0x50 4b float ? Unknown, seems to be max gear ratio (all gear ratios are calculated using this value and number of gears) | ||
+ | 0x54 4b float ? value above /1.2 | ||
+ | 0x58 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) | ||
+ | 0x5C 1b char Q TransmissionData.nDriveType | ||
+ | 0x5D 1b char R TransmissionData.nEngineType | ||
+ | 0x5E 1b int M TransmissionData.nNumberOfGears | ||
+ | 0x5F 1b - - Padding | ||
+ | 0x60 4b float R fBrakeDeceleration; fBrakeDeceleration=fBrakeDeceleration*2500 | ||
+ | 0x64 4b float T fBrakeBias | ||
+ | 0x68 4b float V fSteeringLock | ||
+ | 0x6C 4b float K fTractionLoss | ||
+ | 0x70 4b float L fTractionBias | ||
+ | 0x74 4b float a fSuspensionForceLevel | ||
+ | 0x78 4b float b fSuspensionDampingLevel | ||
+ | 0x7C 4b float d suspension upper limit | ||
+ | 0x80 4b float e suspension lower limit | ||
+ | 0x84 4b float f suspension bias between front and rear | ||
+ | 0x88 4b float g suspension anti-dive multiplier | ||
+ | 0x8C 4b float aa fSeatOffsetDistance | ||
+ | 0x90 4b int ac nMonetaryValue | ||
+ | 0x94 1b int ah front lights | ||
+ | 0x95 1b int ai rear lights | ||
+ | 0x96 2b - Padding | ||
+ | 0x98 4b float D fDragMult | ||
+ | 0x9C 4b - Padding (maybe...) | ||
+ | 0xA0 4b float F CentreOfMass.x | ||
+ | 0xA4 4b float G CentreOfMass.y | ||
+ | 0xA8 4b float H CentreOfMass.z | ||
+ | 0xAC 4b - padding | ||
+ | 0xB0 4b int I nPercentSubmerged | ||
+ | 0xB4 4b float ? = fMass*0.8/nPercentSubmerged | ||
+ | 0xB8 4b float N TransmissionData.fMaxVelocity | ||
+ | 0xBC 4b float B fMass | ||
+ | 0xC0 4b float C fTurnMass | ||
+ | 0xC4 4b float J fTractionMultiplier | ||
+ | 0xC8 4b float Y fCollisionDamageMultiplier; fCollisionDamageMultiplier=fMass/2000*fCollisionDamageMultiplier | ||
+ | 0xCC 4b int ag handlingFlags | ||
+ | 0xD0 4b int af modelFlags | ||
+ | 0xD4 12b - Padding | ||
+ | |||
+ | |||
+ | </source> | ||
=== particle data === | === particle data === |
Текущая версия на 21:31, 22 марта 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; //дублирует значение _f94 //выставляет движок float _f3C; //0xBC23D70A //выставляет движок float _f40; //дублирует значение _f94 //выставляет движок float _f44; //Unknown, transmission gear 1 related float _f48; //Unknown, transmission gear 1 related float _f4C; //0xBC23D70A //выставляет движок 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; //Q 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 //=-0.2 для всего транспорта, -0.05 для байков; //выставляет движок float _f98; float fBrakeDeceleration; fBrakeDeceleration=fBrakeDeceleration*2500; //S 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>; //ag float fSeatOffsetDistance; //aa DWORD dwMonetaryValue; //ac byte bFrontLights; //ah byte bRearLights; //ai byte padding[18]; };
Текстовую версию, декомпилированную с помощью Stories WRLD Tool, можно cкачать из архива gtamodding.ru.
Структура версии VCS
0x0 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) 0x4 4b float ? = 0xBC23D70A (set by engine) 0x8 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) 0xC 4b float ? Unknown, Gear 1 ratio 0x10 4b float ? Unknown, Gear 1 ratio 0x14 4b float ? = 0xBC23D70A (set by engine) 0x18 4b float ? Unknown, Gear 2 ratio 0x1C 4b float ? Unknown, Gear 2 ratio 0x20 4b float ? Unknown, Gear 2 ratio 0x24 4b float ? Unknown, Gear 3 ratio 0x28 4b float ? Unknown, Gear 3 ratio 0x2C 4b float ? Unknown, Gear 3 ratio 0x30 4b float ? Unknown, Gear 4 ratio 0x34 4b float ? Unknown, Gear 4 ratio 0x38 4b float ? Unknown, Gear 4 ratio 0x3C 4b float ? Unknown, Gear 5 ratio 0x40 4b float ? Unknown, Gear 5 ratio 0x44 4b float ? Unknown, Gear 5 ratio 0x48 4b float N fEngineAcceleration; fEngineAcceleration=fEngineAcceleration*12500(*2 for 4wd vehicles) 0x4C 4b float P TransmissionData.fEngineInertia 0x50 4b float ? Unknown, seems to be max gear ratio (all gear ratios are calculated using this value and number of gears) 0x54 4b float ? value above /1.2 0x58 4b float ? =-0.2 for cars and -0.05 for bikes (set by engine) 0x5C 1b char Q TransmissionData.nDriveType 0x5D 1b char R TransmissionData.nEngineType 0x5E 1b int M TransmissionData.nNumberOfGears 0x5F 1b - - Padding 0x60 4b float R fBrakeDeceleration; fBrakeDeceleration=fBrakeDeceleration*2500 0x64 4b float T fBrakeBias 0x68 4b float V fSteeringLock 0x6C 4b float K fTractionLoss 0x70 4b float L fTractionBias 0x74 4b float a fSuspensionForceLevel 0x78 4b float b fSuspensionDampingLevel 0x7C 4b float d suspension upper limit 0x80 4b float e suspension lower limit 0x84 4b float f suspension bias between front and rear 0x88 4b float g suspension anti-dive multiplier 0x8C 4b float aa fSeatOffsetDistance 0x90 4b int ac nMonetaryValue 0x94 1b int ah front lights 0x95 1b int ai rear lights 0x96 2b - Padding 0x98 4b float D fDragMult 0x9C 4b - Padding (maybe...) 0xA0 4b float F CentreOfMass.x 0xA4 4b float G CentreOfMass.y 0xA8 4b float H CentreOfMass.z 0xAC 4b - padding 0xB0 4b int I nPercentSubmerged 0xB4 4b float ? = fMass*0.8/nPercentSubmerged 0xB8 4b float N TransmissionData.fMaxVelocity 0xBC 4b float B fMass 0xC0 4b float C fTurnMass 0xC4 4b float J fTractionMultiplier 0xC8 4b float Y fCollisionDamageMultiplier; fCollisionDamageMultiplier=fMass/2000*fCollisionDamageMultiplier 0xCC 4b int ag handlingFlags 0xD0 4b int af modelFlags 0xD4 12b - Padding
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.