Difference between revisions of "GXT"
m (→Symbols & Colorcodes (Control Character)) |
(→Foot Controls) |
||
Line 285: | Line 285: | ||
! Key | ! Key | ||
! Entry | ! Entry | ||
+ | ! SCM-Relation | ||
|- | |- | ||
| Fire | | Fire | ||
| ~PED_FIREWEAPON~ | | ~PED_FIREWEAPON~ | ||
+ | | 00E1: player 0 pressed_key 17 | ||
|- | |- | ||
| Next Weapon / Target | | Next Weapon / Target | ||
| ~PED_CYCLE_WEAPON_RIGHT~ | | ~PED_CYCLE_WEAPON_RIGHT~ | ||
+ | | 00E1: player 0 pressed_key 7 | ||
|- | |- | ||
| Previous Weapon / Target | | Previous Weapon / Target | ||
| ~PED_CYCLE_WEAPON_LEFT~ | | ~PED_CYCLE_WEAPON_LEFT~ | ||
+ | | 00E1: player 0 pressed_key 5 | ||
|- | |- | ||
| Group Ctrl Foward (SA) | | Group Ctrl Foward (SA) | ||
| ~GROUP_CONTROL_FWD~ | | ~GROUP_CONTROL_FWD~ | ||
+ | | 00E1: player 0 pressed_key 9 | ||
|- | |- | ||
| Group Ctrl Back (SA) | | Group Ctrl Back (SA) | ||
| ~GROUP_CONTROL_BWD~ | | ~GROUP_CONTROL_BWD~ | ||
+ | | 00E1: player 0 pressed_key 8 | ||
|- | |- | ||
| Conversation - No (SA) | | Conversation - No (SA) | ||
| ~CONVERSATION_NO~ | | ~CONVERSATION_NO~ | ||
+ | | 00E1: player 0 pressed_key 10 | ||
|- | |- | ||
| Conversation - Yes (SA) | | Conversation - Yes (SA) | ||
| ~CONVERSATION_YES~ | | ~CONVERSATION_YES~ | ||
+ | | 00E1: player 0 pressed_key 11 | ||
|- | |- | ||
| Foward | | Foward | ||
| ~GO_FORWARD~ | | ~GO_FORWARD~ | ||
+ | | 00E1: player 0 pressed_key 1 * | ||
|- | |- | ||
| Backwards | | Backwards | ||
| ~GO_BACK~ | | ~GO_BACK~ | ||
+ | | 00E1: player 0 pressed_key 1 * | ||
|- | |- | ||
| Left | | Left | ||
| ~GO_LEFT~ | | ~GO_LEFT~ | ||
+ | | 00E1: player 0 pressed_key 0 * | ||
|- | |- | ||
| Right | | Right | ||
| ~GO_RIGHT~ | | ~GO_RIGHT~ | ||
+ | | 00E1: player 0 pressed_key 0 * | ||
|- | |- | ||
| Zoom In | | Zoom In | ||
| ~PED_SNIPER_ZOOM_IN~ | | ~PED_SNIPER_ZOOM_IN~ | ||
+ | | 00E1: player 0 pressed_key 5 | ||
|- | |- | ||
| Zoom Out | | Zoom Out | ||
| ~PED_SNIPER_ZOOM_OUT~ | | ~PED_SNIPER_ZOOM_OUT~ | ||
+ | | 00E1: player 0 pressed_key 7 | ||
|- | |- | ||
| Enter+Exit | | Enter+Exit | ||
| ~VEHICLE_ENTER_EXIT~ | | ~VEHICLE_ENTER_EXIT~ | ||
+ | | 00E1: player 0 pressed_key 15 | ||
|- | |- | ||
| Change Camera | | Change Camera | ||
| ~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~ | | ~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~ | ||
+ | | 00E1: player 0 pressed_key 13 | ||
|- | |- | ||
| Jump | | Jump | ||
| ~PED_JUMPING~ | | ~PED_JUMPING~ | ||
+ | | 00E1: player 0 pressed_key 14 | ||
|- | |- | ||
| Sprint | | Sprint | ||
| ~PED_SPRINT~ | | ~PED_SPRINT~ | ||
+ | | 00E1: player 0 pressed_key 16 | ||
|- | |- | ||
| Aim Weapon | | Aim Weapon | ||
| ~PED_LOCK_TARGET~ | | ~PED_LOCK_TARGET~ | ||
+ | | 00E1: player 0 pressed_key 6 | ||
|- | |- | ||
| Crouch (VC, SA) | | Crouch (VC, SA) | ||
| ~PED_DUCK~ | | ~PED_DUCK~ | ||
+ | | 00E1: player 0 pressed_key 18 | ||
|- | |- | ||
| Action (VC, SA) | | Action (VC, SA) | ||
| ~PED_ANSWER_PHONE~ | | ~PED_ANSWER_PHONE~ | ||
+ | | 00E1: player 0 pressed_key 4 | ||
|- | |- | ||
| Walk (SA) | | Walk (SA) | ||
| ~SNEAK_ABOUT~ | | ~SNEAK_ABOUT~ | ||
+ | | 00E1: player 0 pressed_key LALT | ||
|- | |- | ||
| Look Behind | | Look Behind | ||
| ~PED_LOOKBEHIND~ | | ~PED_LOOKBEHIND~ | ||
+ | | 00E1: player 0 pressed_key 19 | ||
|} | |} | ||
+ | {| | ||
+ | |- | ||
+ | | * = needs another [[OpCode]]! | ||
+ | |- | ||
+ | | 0494: get_joystick 0 data_to $MOVE_AXIS_X $MOVE_AXIS_Y $SPECIAL_AXIS_X $SPECIAL_AXIS_Y | ||
+ | |} | ||
+ | |||
====Vehicle Controls==== | ====Vehicle Controls==== | ||
{| | {| |
Revision as of 20:30, 17 December 2007
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.
Contents
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
Vice City and GTA III GXTs are very simelar to the SA GXTs. In this article all those additional infos are not listed.
Header
The header contains data about the tables and their subtables.
INT32 - 4b - Version? (Allways 0x080004) CHAR[4] - 4b - TABL
Table Block
INT32 - 4b - Blocksize //Array of [Blocksize / 12 Entries] CHAR[8] - 8b - Subtablename INT32 - 4b - Offset
TKEY and TDAT
TKEY
CHAR[4] - 4b - TKEY INT32 - 4b - Blocksize //Array of [Blocksize / 12] INT32 - 4b - Entryoffset CHAR[8] - 8b - Entryname
Unlike San Andreas entrynames are stored directly in 8b chararrays here. Ths means to calculate the entries in the table you have to divide the blocksize through 12.
TDAT
CHAR[4] - 4b - TDAT INT32 - 4b - Blocksize
The TDAT-Block contains the strings which are displayed by the game. But here are some differencies towards San Andreas. The strings are encodet in unicode, which means that each character takes the space of 2 characters (which means 2 bytes per character). Mostly the last byte is 0x00.
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 |
~j~ | ? (Consoles Only ?) |
~k~ | Key (followed by keycode) |
~l~ | black text |
~n~ | newline |
~m~ | ? (Consoles Only ?) |
~o~ | ? (Consoles Only ?) |
~p~ | purple text |
~r~ | red text |
~s~ | Reset to standart |
~u~ | ▲-icon |
~v~ | ? (Consoles Only ?) |
~w~ | white text |
~x~ | ? (Consoles Only ?) |
~y~ | yellow text |
~z~ | subtitle (doesn't shown when the Subtitles option is off) |
~<~ | ◄-icon |
~>~ | ►-icon |
Keypresses
Foot Controls
Key | Entry | SCM-Relation |
---|---|---|
Fire | ~PED_FIREWEAPON~ | 00E1: player 0 pressed_key 17 |
Next Weapon / Target | ~PED_CYCLE_WEAPON_RIGHT~ | 00E1: player 0 pressed_key 7 |
Previous Weapon / Target | ~PED_CYCLE_WEAPON_LEFT~ | 00E1: player 0 pressed_key 5 |
Group Ctrl Foward (SA) | ~GROUP_CONTROL_FWD~ | 00E1: player 0 pressed_key 9 |
Group Ctrl Back (SA) | ~GROUP_CONTROL_BWD~ | 00E1: player 0 pressed_key 8 |
Conversation - No (SA) | ~CONVERSATION_NO~ | 00E1: player 0 pressed_key 10 |
Conversation - Yes (SA) | ~CONVERSATION_YES~ | 00E1: player 0 pressed_key 11 |
Foward | ~GO_FORWARD~ | 00E1: player 0 pressed_key 1 * |
Backwards | ~GO_BACK~ | 00E1: player 0 pressed_key 1 * |
Left | ~GO_LEFT~ | 00E1: player 0 pressed_key 0 * |
Right | ~GO_RIGHT~ | 00E1: player 0 pressed_key 0 * |
Zoom In | ~PED_SNIPER_ZOOM_IN~ | 00E1: player 0 pressed_key 5 |
Zoom Out | ~PED_SNIPER_ZOOM_OUT~ | 00E1: player 0 pressed_key 7 |
Enter+Exit | ~VEHICLE_ENTER_EXIT~ | 00E1: player 0 pressed_key 15 |
Change Camera | ~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~ | 00E1: player 0 pressed_key 13 |
Jump | ~PED_JUMPING~ | 00E1: player 0 pressed_key 14 |
Sprint | ~PED_SPRINT~ | 00E1: player 0 pressed_key 16 |
Aim Weapon | ~PED_LOCK_TARGET~ | 00E1: player 0 pressed_key 6 |
Crouch (VC, SA) | ~PED_DUCK~ | 00E1: player 0 pressed_key 18 |
Action (VC, SA) | ~PED_ANSWER_PHONE~ | 00E1: player 0 pressed_key 4 |
Walk (SA) | ~SNEAK_ABOUT~ | 00E1: player 0 pressed_key LALT |
Look Behind | ~PED_LOOKBEHIND~ | 00E1: player 0 pressed_key 19 |
* = needs another OpCode! |
0494: get_joystick 0 data_to $MOVE_AXIS_X $MOVE_AXIS_Y $SPECIAL_AXIS_X $SPECIAL_AXIS_Y |
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~ |
Unused
Here are some keypress codes only used during development stage. They were removed or replaced later but probably they are still working. Maybe this is usefull for further research. Some are only used in PS2 Version.
~TAKE_SCREEN_SHOT~ |
~SWITCH_DEBUG_CAM_ON~ |
~TOGGLE_DPAD~ |
~NETWORK_TALK~ |
~SHOW_MOUSE_POINTER_TOGGLE~ |
~PED_1RST_PERSON_LOOK_DOWN~ |
~PED_1RST_PERSON_LOOK_UP~ |
~PED_1RST_PERSON_LOOK_RIGHT~ |
~PED_1RST_PERSON_LOOK_LEFT~ |
~PED_CENTER_CAMERA_BEHIND_PLAYER~ |