-
Notifications
You must be signed in to change notification settings - Fork 0
DTZ
*.dtz is a console memory dump containing the main game resources for GTA Liberty City Stories and GTA Vice City Stories.
The GAME.dtz file is packed with the deflate/zlib compression algorithm.
This file is especially interesting because it contains configuration data, interface elements, and models for some game objects. In most cases, these are binary equivalents of text files from the data folder and models with texture archives from the models folder in GTA Vice City.
- Header
- Short description of contents
- Structures
The table below describes the DTZ header.
0x00 [4b FourCC] - DTZ signature, read as GTAG.
0x04 [4b int] - unknown, usually 1.
0x08 [4b int] - DTZ size.
0x0C [4b int] - data size, not counting the tables used to relocate the file in memory.
0x10 [4b int] - offset table used for pointer relocation in memory.
This is the Reallocation Table.
0x14 [4b int] - number of offsets in the Reallocation Table.
0x18 [4b int] - points to an offset table for Jenkins hashes.
These hashes are replaced with pointers to virtual method tables, or VMTs.
0x1C [2b short] - number of Jenkins hashes in section 1 of the table.
0x1E [2b short] - number of Jenkins hashes in section 2 of the table.
These are render methods in model Atomics.
0x20 [4b int] - gpThePaths.
0x24 [4b int] - CPools::ms_pBuildingPool.
Offset to data related to static object placement, or Buildings IPL.
0x28 [4b int] - offset to data related to road placement, or Treadable IPL.
0x2C [4b int] - offset to data related to dynamic object placement, or Dummy IPL.
0x30 [4b int] - EntryInfoNodes.
Related to streaming dynamic map objects.
0x34 [4b int] - PtrNodes.
Related to map streaming. Points to IPL data from the Buildings,
Treadables, and Dummys sections.
0x38 [4b int] - IDE count.
0x3C [4b int] - offset table for binary IDE entries.
The ID is assigned by offset counter, from 0 to IDE count.
0x40 [4b int] - vehicle class table.
Classes include normal, poorfamily, and others.
There are 11 classes, with support for 25 vehicle IDE IDs per class.
0x44 [4b int] - number of vehicle IDs in each class of the table above.
0x48 [4b int] - offset to game zone data, such as info.zon and navig.zon.
0x4C [4b int] - CWorld::ms_aSectors.
Game sector data. Points to PtrNode.
0x50 [4b int] - CWorld::ms_bigBuildingsList.
Four pointers to PtrNode.
0x54 [4b int] - number of rows in the 2dfx table.
0x58 [4b int] - offset to the 2dfx effects table for objects from default.ide.
Each row is 64 bytes.
0x5C [4b int] - offset to the hardcoded model index array.
0x60 [4b int] - offset to the CHK texture archive loading block, or TexList.
0x64 [4b int] - unknown, equals 0.
0x68 [4b int] - offset to the COL2 file loading block.
0x6C [4b int] - unknown, equals 0.
0x70 [4b int] - offset to dummy collision data.
0x74 [4b int] - offset to an object.dat equivalent.
Each row is 32 bytes. There are 117 rows.
0x78 [4b int] - offset to the RGBA color palette used in carcols.dat.
Contains 256 colors.
0x7C [4b int] - CStreamingInfo CStreaming::ms_aInfoForModel[].
Equivalent to GTA3PS*HR.DIR.
0x80 [4b int] - offset to the ANIM file and animation loading block, or ped.ifp.
0x84 [4b int] - fistfite.dat.
0x88 [4b int] - PedAnimInfo[].
0x8C [4b int] - equivalent to ped.dat.
0x90 [4b int] - equivalent to pedstats.dat.
0x94 [4b int] - number of rows in cull.ipl.
0x98 [4b int] - offset to the cull.ipl equivalent.
Each row is 16 bytes.
0x9C [4b int] - related to occlusions.
Unused, equals 0.
0xA0 [4b int] - related to occlusions.
Unused, equals 0.
0xA4 [4b int] - offset to a waterpro.dat equivalent.
0xA8 [4b int] - offset to a HANDLING.CFG equivalent.
0xAC [4b int] - offset to a surface.dat equivalent.
0xB0 [4b int] - offset to a timecyc.dat equivalent.
0xB4 [4b int] - offset to a pedgrp.dat equivalent.
0xB8 [4b int] - offset to a particle.cfg equivalent.
0xBC [4b int] - offset to a weapon.dat equivalent.
0xC0 [4b int] - offset table for Clumps from MDL files embedded in DTZ.
0xC4 [4b int] - offset to a CUTS.DIR equivalent.
0xC8 [4b int] - offset to a ferry.dat equivalent, containing ferry paths.
0xCC [4b int] - offset to equivalents of tracks.dat and tracks2.dat.
0xD0 [4b int] - offset to a flight.dat equivalent.
0xD4 [4b int] - offset to menu.chk.
Compressed with Deflate/Zlib.
0xD8 [4b int] - real size of fonts.chk.
0xDC [4b int] - offset to fonts.chk.
Compressed with Deflate/Zlib.
At the moment, the following data is known to be stored in GAME.dtz.
Equivalent in previous games:
frontend.txd
Resource offsets:
LCS PS2: 0x4E4A30
LCS PSP: 0x4DA830
VCS PS2: 0x581330
VCS PSP: 0x51D95C
Comment:
Directory with menu textures, packed with the deflate/zlib algorithm. (*)
Equivalent in previous games:
fonts.txd
Resource offsets:
LCS PS2: 0x4EF4D8
LCS PSP: 0x4E2B1C
VCS PS2: 0x57BE4C
VCS PSP: 0x530AFC
Comment:
Directory with font textures, packed with the deflate/zlib algorithm. (*)
Equivalent in previous games:
particle.txd
Resource offsets:
LCS PS2: 0x4A1C28
LCS PSP: 0x38AB90
VCS PS2: 0x761F0
VCS PSP: 0x3F7FB0
Comment:
Contains all particle-effect textures. (*)
Equivalent in previous games:
generic.txd
wheels.txd
vehicle.txd
Resource offsets:
LCS PS2: 0x4A1BFC
LCS PSP: 0x392B04
VCS PS2: 0x539E0
VCS PSP: 0x3D60B4
Comment:
Contains common vehicle textures and all wheel textures. (*)
Equivalent in previous games:
hud.txd
Resource offsets:
LCS PS2: 0x4A1BE4
LCS PSP: 0x38AD30
VCS PS2: 0x287B0
VCS PSP: 0x3B4678
Comment:
Contains HUD textures. (*)
Equivalent in previous games:
radarNN.txd
Resource offsets:
-
Comment:
Only in GTA VCS. Packed with the deflate/zlib algorithm.
? ped.ifp
? swim.ifp only in GTA VCS
? fight.ifp only in GTA VCS
? driveby.ifp only in GTA VCS
Pedestrian collisions (**)
Equivalent: peds.col
Comment: one for all :)
Vehicle collisions (**)
Equivalent: vehicles.col
Weapon collisions (**)
Equivalent: weapons.col
Collisions for all models from MasterWRLD and for script objects from the GTA3XXX.IMG archive (**)
Equivalent: generic.col
Collisions for all other objects in the game (**)
Comment:
These contain only the bounding box and bounding sphere.
Everything else is in streaming COL2 from GTA3XXX.IMG.
Ring (***)
Equivalent: race_ring.dff
Resource offset:
VCS PS2: E02E3F
Comment: ring
Arrow (***)
Equivalent: Shape .dff
Resource offsets:
LCS PS2: 30643F
VCS PS2: 28233F
Comment: arrow
Long cylinder (***)
Equivalent: zonecyla.dff
Resource offset:
VCS PS2: C4223F
Comment: long cylinder
Small sphere (***)
Equivalent: zoneaphr.dff
Resource offset:
VCS PS2: E8B03E
Comment: small sphere
Entrance cone (***)
Equivalent: entercone.dff
Resource offset:
VCS PS2: A0B03E
Comment: entrance cone
Cylinder (***)
Equivalent: zonecylb.dff
Resource offsets:
LCS PS2: 64EA3F
VCS PS2: 70AD3E
Comment: cylinder
Arrow 2 (***)
Equivalent: arrow.dff
Resource offsets:
LCS PS2: 800643
VCS PS2: 882938 9C7D3E
Comment:
LCS arrow
VCS arrow
Wheel LODs (***)
Equivalent: wheels.dff
Resource offsets:
LCS PS2: 800643
E8C249 50C349 B8C349 ECC349 88C449 94EB49
Comment: wheel LODs
Wheel 1 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 80C249
Comment: wheel 1
Wheel 2 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: B4C249
Comment: wheel 2
Wheel 3 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 1CC349
Comment: wheel 3
Wheel 4 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 84C349
Comment: wheel 4
Wheel 5 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 20C449
Comment: wheel 5
Wheel 6 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 54C449
Comment: wheel 6
Plane LOD (***)
Equivalent: air_vlo.dff
Resource offset:
LCS PS2: 2CEB49
Comment: winged pencil
Wheel 7 (***)
Equivalent: wheels.dff
Resource offset:
LCS PS2: 60EB49
Comment: wheel 7
IDE equivalent (**)
Equivalent: *.ide
Comment:
Contains all initialization data for models, textures, and collisions.
IPL equivalent (**)
Equivalent: *.ipl
Comment:
Contains all coordinates used for placing collisions and generic objects in the game.
Vehicle colors (**)
Equivalent: carcols.dat
Pedestrian colors (**)
Equivalent: pedcols.dat
Comment:
Only in GTA VCS.
cullzone data
Equivalent: cullzone.dat
fistfite data
Equivalent: fistfite.dat
handling data (**)
Equivalent: handling.dat
Resource offsets:
LCS PS2: 0x1647A0
LCS PSP: 0x50190
VCS PS2: 0x4C2A10
VCS PSP: 0x3AF30F
Comment:
The structures differ between LCS and VCS.
info.zon
map.zon
object data
Equivalent: object.dat
particle data
Equivalent: particle.cfg
Resource offset:
LCS PS2: 0x3917D0
Comment:
Special-effect characteristics.
pedstats data
Equivalent: pedstats.dat
Resource offsets:
LCS PS2:
part 1 - 0x49E820
part 2 - 0x49EB78
part 3 - 0x4A1A10
LCS PSP:
0x391DA0
VCS PS2:
part 1 - 0x4C8080
part 2 - 0x4C8428
VCS PSP:
0x3B1F10
Comment:
Pedestrian characteristics.
Counts:
LCS PS2:
part 1 - 15 items
part 2 - 18 items
part 3 - 9 items
LCS PSP:
42 items
VCS PS2:
part 1 - 6 items
part 2 - 36 items
VCS PSP:
42 items
timecyc data
Equivalent: timecyc.dat
Comment:
Weather characteristics.
waterpro data
Equivalent: waterpro.dat
Comment:
Water-surface data.
weapon data
Equivalent: weapon.dat
Resource offsets:
LCS PS2:
0x40A980
0x44FAE0
VCS PS2:
0x3D7530
VCS PSP:
0x2E8B60
SDT files
Resource offsets:
LCS: 0x377720
Comment:
Only in PSP versions.
Offsets are given for unpacked game.dtz.
Data marked with (*) can be opened with GTA Stories Texture Explorer.
Data marked with (**) can be viewed with Stories WRLD Tool.
Data marked with (***) can be imported into 3D Studio Max with MDL importer.
Below are some structures for the data described above.
In DTZ, IDE is represented as a global binary table containing data for every model in the game, whether the model is a vehicle, pedestrian, or simple object.
The IDE count and the offset to the IDE table can be found in DTZ at offsets 0x38 and 0x3C for all console games.
The IDE table is a table of pointers to binary IDE rows. The model ID is assigned by pointer index, from 0 to the IDE count.
If a pointer is 0, that ID is free.
Each binary IDE row contains global data and additional data that depends on the type of IDE being loaded.
The global data is 44 bytes long and has this structure:
4b - free space for placing a pointer in memory
4b - free space for placing a pointer in memory
4b - IDE/model name, hashed with the CRC32 algorithm
4b - free space for placing a pointer in memory
1b - IDE type.
Determines which additional data must be loaded after the global data.
1b - number of 2dfx entries
2b - unknown
4b - offset to model collision
2b - 2dfx ID
2b - unknown, 0xFFFF
2b - unknown, usually zeroes
2b - texture-file name number in the TexList table
4b - section-type hash
4b - unknown, usually zeroes
4b - draw distance.
For vehicles and pedestrians, this is 0xFFFFFFFF.
Additional data:
Type 1 section: objs
Type 3 section: tobj
Type 6 section: cars
1b - current primary vehicle color ID.
This is used in memory. In the file, it is always 0.
1b - current secondary vehicle color ID.
This is used in memory. In the file, it is always 0.
14b - vehicle name in GXT
4b - wheel size
2b - wheel model ID
2b - row number in the binary HANDLING.CFG
1b - number of doors
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, usually zeroes
16b - 3x float single + 4b alignment:
headlights position
16b - 3x float single + 4b alignment:
taillights position
16b - 3x float single + 4b alignment:
ped_frontseat position
16b - 3x float single + 4b alignment:
ped_backseat position
16b - 3x float single + 4b alignment:
exhaust position
4b - CompRules
4b - unknown, 0x4479FF5C.
Possibly an identifier for the vehicle repaint-pointer section.
100b - 25x longint:
global pointer array for model material colors affected by the primary color.
Filled with pointers from the matching section of the model itself.
If this is zeroed in memory, the car stops changing color.
100b - 25x longint:
global pointer array for model material colors affected by the secondary color.
Filled with pointers from the matching section of the model itself.
If this is zeroed in memory, the car stops changing color.
8b - array of primary color IDs from the carcols.dat palette
8b - array of secondary color IDs from the carcols.dat palette
1b - total number of used colors
1b - vehicle color-scheme index from the color arrays.
In memory, this is constantly randomized from 0 to the color count.
In the file, it is always 0.
1b - current primary vehicle color ID.
This is used in memory. In the file, it is always -1.
1b - current secondary vehicle color ID.
This is used in memory. In the file, it is always -1.
4b - amount the normals are splayed by to improve the environment mapping on PSP
4b - unknown
4b - animation ID.
Examples: van, bikeh, bikev, and so on.
-1 means null.
Type 7 section: peds
Each row is 16 bytes and has the following structure.
The coordinates contain real rounded values.
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
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
* multiply by 50
Consists of two CWeaponModelInfo entries. Reading happens directly from the DaTa Zlib header.
typedef struct Weapon_lcs_header
{
offset CWeaponModelInfo1;
offset CWeaponModelInfo2;
};Total number of records: 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>;
};Total number of records: 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; // vector
DWORD _f3C; // always zero
DWORD _f40; // integer value
DWORD _f44; // DWORD? unknown
vTimeStrc m_vTimeStrc;
vTimeStrc m_vTimeStrc;
float unk;
DWORD dwModelID;
DWORD dwModel2ID;
DWORD dwWeaponSlot
DWORD _f6C; // padding, 0xAA
};Address array size: 42. Reading happens directly from the DaTa Zlib header.
typedef struct pedstat_lcs_header
{
offset Pedstat_offset;
};On PS2, it is divided into three fragments:
15 + 18 + 9 = 42
Total number of records: 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];
};Total number of records: 42.
On PS2, it is divided into two fragments:
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];
};Reading happens directly from the DaTa Zlib header.
typedef struct lcs_handling_header
{
float unknow;
float unknow;
float unknow;
float unknow;
float unknow;
float null;
float null;
float null;
};Total number of records: 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; // duplicates _f94 // set by engine
float _f3C; // 0xBC23D70A // set by engine
float _f40; // duplicates _f94 // set by engine
float _f44; // unknown, transmission gear 1 related
float _f48; // unknown, transmission gear 1 related
float _f4C; // 0xBC23D70A // set by engine
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 for all vehicles, -0.05 for bikes // set by engine
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];
};A text version decompiled with Stories WRLD Tool can be downloaded from the gtamodding.ru archive.
0x00 4b float ? = -0.2 for cars and -0.05 for bikes, set by engine
0x04 4b float ? = 0xBC23D70A, set by engine
0x08 4b float ? = -0.2 for cars and -0.05 for bikes, set by engine
0x0C 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 the maximum gear ratio.
All gear ratios are calculated using this value and the 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
Total number of records: 82.
There is no section header. Reading happens directly from the DaTa Zlib header.
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;
};This part of the article is unfinished. You can help the project by correcting and expanding it.
Total number of records: 1.
There is no section header. Reading happens directly from the DaTa Zlib header.
Data array size: 102.
Limit: 256. In memory, it consumes 1024 bytes.
typedef struct colors
{
byte Red; // red color
byte Grey; // green color
byte Blue; // blue color
byte Alpha; // color alpha channel
};Total number of records: equal to the number of vehicles in the game.
This is part of the IDE structure's cars section.
Data array size: 8.
If the number of vehicle color schemes is less than 8, the empty values are filled with zeroes.
typedef struct carcolors1
{
byte ColorID1; // first color number
};
typedef struct carcolors2
{
byte ColorID2; // second color number
};TBA