Version Differences

The col format was first introduced with GTA III, referred to as version 1 here. The game's successor Vice City used exactly the same format.

In the PS2 version of GTA San Andreas, however, a new version was used (version 2), which was later updated for the PC and XBOX releases (version 3).

Feature Matrix

The following matrix is supposed to give an in-depth feature overview of the 3 known versions of the GTA collision file format.

Feature

Version 1

Version 2

Version 3

Supported by games:

GTA III

Y

N

N

GTA Vice City

Y

N

N

GTA San Andreas (PS2)

Y

Y

N

GTA San Andreas (PC/XBOX)

Y

Y

Y

Geometric shapes:

Collision spheres

Y

Y

Y

Collision boxes

Y

Y

Y

Collision mesh

Y

Y

Y

Face groups

N

Y

Y

Shadow mesh

N

N

Y

Miscellaneous:

Light intensity:

N

Y

Y

Data compression

N

Y

Y

Four character code

COLL

COL2

COL3

Explanation

The main difference between the old version 1 format and the new version 2 and 3 formats is the reduced file size. Faces and vertices are only half as big, shrinking models without spheres and boxes to almost 50%.

Also, face groups have been introduced, which should speed up collision tests for large models, provided they are calculated properly.

Another new feature are the light intensity values, which are a simple but effective way to achieve realtime lighting. You can define a 1 byte lighting value per face, which causes characters and vehicles to change their brightness when they step onto the face. This is used to simulate darkness in places where the sun cannot reach, such as under buildings, etc.

And finally version 3 introduces a shadow mesh, which is used to create projected shadows. They only include the faces you want to cast a shadow (like bridges); spheres and boxes are not possible.

You can mix all formats within one collision file as you wish, just make sure the target game does support all of them (see matrix above).

File Format

As mentioned above, the collision files are containers for one or more collision models. They do not have a header; models are stored linearly without any padding.

All offsets in col 2/3 format are relative to after the fourcc, so file offset + 4.

Col 2/3 format does not store the number of vertices. Normally you do not need that, since you would just add the vertex index to the offset in your pointer. But if you do need it, scan the faces for the largest index.

The unknown section was presumably planned to hold a set of lines, used for collisions with very thin objects (like railings). But this was never confirmed, nor is it used anywhere.

The sequence of sections in the col 2/3 format as given above can be observed in every file sample. However, since there are offsets now, you could order them however you want.

There is no offset to face groups, reading them is optional. To read them, go to the start of the face array, go back 4 byte, read the ammount of groups, and go back 28*GroupCount byte. But check the flag in the header for existance of face groups first.

The 2 byte padding after the vertex arrays in col 2/3 is used to provide a 4 byte alignment. It is present if the array's length leaves a rest when divided by 4, i.e. (VertexCount*6) mod 4 != 0.

Annotations

Data Compression and Limits

In the col 2/3 format not only face indices take up half as much space (uint16 instead of uint32); also vertex coordinates are now stored as so-called fixed-point numbers.

To convert such an int16 number to a floating point number, simply divide it by 128.0.

But there is one major disadvantage you have to take care of: meshes are limited to dimensions of +/- 255.99 units on each axis. But this should be no problem, since objects bigger than that would defy the whole purpose of the streaming engine, and should never be used.

Face Groups

Faces in large col 2/3 meshes (more than 80 faces) are grouped by location, and get a bounding box. This way collision checks can be limited to a special area of interest, to speed them up significantly.

Some statistics: There is an minimum average of 13.8 faces per group, maximum is 50[1]. On average there are 31.75 faces per group.

In the grouping algorithm, a face count of > 50 is the criterion to split a group.

Shadow Mesh

The so-called "shadow mesh" introduced with version 3 is used to cast real-time shadows in GTA SA. Again, to save cpu time these are reduced to significant parts of the object, like bridges on map parts. Very important is that they always have to be closed! If there are holes in your mesh, you will get odd projection errors, with shadow triangles floating around.

Tools

Version 1 only

CollMaker[2] by Steve M. (2002)Very simple tool that creates single model collision files based on text cordinates as input, such as the text .x files.

CollEditor[3] by Steve M. (2003)The first 3D editor for collision files. Allowed simple modification and management of collision models. Not very user-friendly, though, and not bug-free.

Col IO[4] by Delfi (2004)Another 3D editor. Unlike CollEditor, this one allowes to drag spheres, boxes and vertices comfortably with the mouse. Mainly suited for vehicles and quite buggy.

All versions

KAMS[5] by Kam (2005)A collection of scripts for 3D Studio Max, including one for import/export of collision files. Does not support face groups.

This page is licensed under the GNU Free Documentation Licence. This page has a separate license to the CC-BY-SA that applies to most of Grand Theft Wiki.

The full text of the GNU FDL v1.2 is here. Click the "History" button to see the full list of authors. See Grand Theft Wiki:Copyright for more detail on our copyright policy.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.See Grand Theft Wiki:Copyright for more information.