GXT

From GTAMods Wiki
Revision as of 16:10, 7 December 2007 by PARADOXON (talk | contribs) (Symbols & Colorcodes)
Jump to navigation Jump to search

A GXT file contains almost all text that are displayed on the screen of GTA3 and above. The files are located in the text folder. An entire list of all entries is available with Sanny Builder.

File Stub

Each GXT-File can contain certain tables with subtables and entries.

San Andreas Format

Header

The header contains data about the tables and their subtables.

INT32   - 4b   - Version? (Allways 0x080004)
CHAR[4] - 4b   - TABL

Table Block

The Table Block contains data about the subtables and their offsets.

INT32   - 4b   - Blocksize

//Array of [Blocksize / 12 Entries]
CHAR[8] - 8b   - Subtablename
INT32   - 4b   - Offset

The Offset of the subtable points to an 8-byte Char Array with the subtable's name, followed by TKEY. For the MAIN Table this points directly to TKEY!

TKEY and TDAT

TKEY

The TKEY Block of an subtable contains the CRC32-values of the entrytitles. The game calculates the CRC32-value out of a given string and checks if they exist in the GXT.

CHAR[4] - 4b   - TKEY
INT32   - 4b   - Blocksize

//Array of [Blocksize / 8]
INT32   - 4b   - Entryoffset
INT32   - 4b   - CRC32 (Entrytitle)

The TKEY block is directly followed by the TDAT Block which contains the contents of the entries. The Entryoffset is relative to the TDAT + 4 offset.

TDAT

CHAR[4] - 4b   - TDAT
INT32   - 4b   - Blocksize

From here the Entryoffset of each entry points to the content. The content can have diffrent size. However it is allways endet by '\0'! For Example "Hello!" needs to be "Hello!\0" here and this gives a size of 6 bytes. If this is the 1st content in TDAT the next got an offset of 0x06!

Special Characters

Here is a list of special characters for german language sets and their UINT8 Values:

Character Value
Ä 131
ä 154
Ö 145
ö 168
Ü 149
ü 172
ß 150

CRC32 Calculation

Here is a sample source which converts an CHAR[]-Array to an CRC32-polynom:

private static ulong[] table = new ulong[] {
           0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
           0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
           0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
           0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
           0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
           0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
           0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
           0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
           0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
           0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
           0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
           0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
           0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
           0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
           0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
           0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
           0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
           0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
           0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
           0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
           0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
           0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
           0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
           0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
           0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
           0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
           0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
           0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
           0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
           0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
           0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
           0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
           0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
           0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
           0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
           0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
           0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
           0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
           0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
           0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
           0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
           0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
           0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
           0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
           0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
           0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
           0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
           0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
           0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
           0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
           0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
           0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
           0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
           0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
           0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
           0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
           0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
           0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
           0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
           0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
           0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
           0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
           0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
           0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
       };

       public static ulong StringToCRC32(char[] Value)
       {
           ulong CRC = 0xFFFFFFFF;      // Register Base-Value

           for (int i = 0; i < Value.Length; i++)
           {
               CRC = ((CRC & 0xFFFFFF00) / 0x100) & 0xFFFFFF ^ table[(ulong)Value[i] ^ CRC & 0xFF];
           }
           return CRC;
       }

(C#/C migration by Aschratt)

It is impossible to get a string out of an CRC32-value. The game only checks if 2 values are identical. However this is not a very reliably way cause there can be more than 2 CRC32 Values for one string. But the probability for this is not very high!

Vice City & GTA III Format

Comming soon.

GXT Editing

Symbols & Colorcodes (Control Character)

Symbol Description
~1~ number within a text
~a~ text within a text
~b~ blue text
~d~ ▼-icon
~g~ green text
~h~ highlight
~k~ Key (followed by keycode)
~l~ black text
~n~ newline
~p~ purple text
~r~ red text
~s~ (Statistics?)
~u~ ▲-icon
~w~ white text
~y~ yellow text
~z~ (Mission Actor?)
~<~ ◄-icon
~>~ ►-icon

Keypresses

Foot Controls

Key Entry
Fire ~PED_FIREWEAPON~
Next Weapon / Target ~PED_CYCLE_WEAPON_RIGHT~
Previous Weapon / Target ~PED_CYCLE_WEAPON_LEFT~
Group Ctrl Foward (SA) ~GROUP_CONTROL_FWD~
Group Ctrl Back (SA) ~GROUP_CONTROL_BWD~
Conversation - No (SA) ~CONVERSATION_NO~
Conversation - Yes (SA) ~CONVERSATION_YES~
Foward ~GO_FORWARD~
Backwards ~GO_BACK~
Left ~GO_LEFT~
Right ~GO_RIGHT~
Zoom In ~PED_SNIPER_ZOOM_IN~
Zoom Out ~PED_SNIPER_ZOOM_OUT~
Enter+Exit ~VEHICLE_ENTER_EXIT~
Change Camera ~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~
Jump ~PED_JUMPING~
Sprint ~PED_SPRINT~
Aim Weapon ~PED_LOCK_TARGET~
Crouch (VC, SA) ~PED_DUCK~
Action (VC, SA) ~PED_ANSWER_PHONE~
Walk (SA) ~SNEAK_ABOUT~
Look Behind ~PED_LOOKBEHIND~

Vehicle Controls

Key Entry
Fire ~PED_FIREWEAPON~
Secondary Fire ~VEHICLE_FIREWEAPON_ALT~
Accelerate ~VEHICLE_ACCELERATE~
Brake / Reverse ~VEHICLE_BRAKE~
Left ~VEHICLE_STEERLEFT~
Right ~VEHICLE_STEERRIGHT~
Steer Foward / Down ~VEHICLE_STEERDOWN~
Steer Back / Up ~VEHICLE_STEERUP~
Enter+Exit ~VEHICLE_ENTER_EXIT~
Trip Skip ~CONVERSATION_YES~
Next Radio Station ~VEHICLE_RADIO_STATION_UP~
Previous Radio Station ~VEHICLE_RADIO_STATION_DOWN~
User Track Skip (SA) none
Horn ~VEHICLE_HORN~
Sub-mission ~TOGGLE_SUBMISSIONS~
Change Camera ~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~
Handbrake ~VEHICLE_HANDBRAKE~
Look Behind none
Mouse Look (SA) ~VEHICLE_MOUSELOOK~
Look Left ~VEHICLE_LOOKLEFT~
Look Right ~VEHICLE_LOOKRIGHT~
Special Ctrl Left ~VEHICLE_TURRETLEFT~
Special Ctrl Right ~VEHICLE_TURRETRIGHT~
Special Ctrl Up ~VEHICLE_TURRETUP~
Special Ctrl Down ~VEHICLE_TURRETDOWN~