Difference between revisions of "GCX"
(Created page with "Script File. == Format Specifications == * ''' [http://en.wikipedia.org/wiki/Endianness Endian Order] ''': Big Endian This file seems to be like script to determine some aspe...") |
SolidSnake11 (talk | contribs) (→0x40) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 99: | Line 99: | ||
*'''0x60''' | *'''0x60''' | ||
All working code is writting after that. Like 0x40, the next two bytes are the size. Inside this are stored the instructions, followed by one byte with his size. It's supposed to be a hashed name.<br> | All working code is writting after that. Like 0x40, the next two bytes are the size. Inside this are stored the instructions, followed by one byte with his size. It's supposed to be a hashed name.<br> | ||
+ | **'''0x0d33'''<br>fs <span style="color:blue">//Needs to be checked | ||
+ | **'''0x0d4d'''<br>gm <span style="color:blue">//Needs to be checked | ||
+ | **'''0x0d56'''<br>gv <span style="color:blue">//Needs to be checked | ||
**'''0x0d86'''<br>if | **'''0x0d86'''<br>if | ||
**'''0x226d'''<br>menu | **'''0x226d'''<br>menu | ||
Line 104: | Line 107: | ||
**'''0x306a'''<br>light | **'''0x306a'''<br>light | ||
**'''0x430d'''<br>delay | **'''0x430d'''<br>delay | ||
− | **'''0x5c9e'''<br> | + | **'''0x4ad9'''<br>system |
− | **'''0x64c0'''<br> | + | **'''0x5c9e'''<br>varsave |
+ | **'''0x64c0'''<br>eval | ||
**'''0x698d'''<br>sound | **'''0x698d'''<br>sound | ||
+ | **'''0x6ea6'''<br>expr <span style="color:blue">//Needs to be checked | ||
**'''0x7d50'''<br>Unknown | **'''0x7d50'''<br>Unknown | ||
+ | **'''0x9891'''<br>chanl <span style="color:blue">//Needs to be checked | ||
+ | **'''0x9906'''<br>chara | ||
**'''0x9a1f'''<br>start | **'''0x9a1f'''<br>start | ||
− | **''' | + | **'''0x9d45'''<br>dgd <span style="color:blue">//Needs to be checked |
− | **'''0xa242'''<br> | + | **'''0xa242'''<br>demo |
**'''0xc091'''<br>map | **'''0xc091'''<br>map | ||
**'''0xc8bb'''<br>load | **'''0xc8bb'''<br>load | ||
− | **'''0xcc85'''<br> | + | **'''0xcc85'''<br>pad |
+ | **'''0xdbab'''<br>ntrap | ||
**'''0xe257'''<br>Unknown | **'''0xe257'''<br>Unknown | ||
− | **'''0xe43c'''<br> | + | **'''0xe43c'''<br>str_status |
+ | **'''0xec9d'''<br>jimaku | ||
**'''0xeee9'''<br>camera | **'''0xeee9'''<br>camera | ||
Line 230: | Line 239: | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | === GCX Diff Analysis === | ||
+ | [[gcx-analysis]] | ||
[[Category:MGS1]] | [[Category:MGS1]] | ||
[[Category:Script]] | [[Category:Script]] | ||
[[Category:In-Progress]] | [[Category:In-Progress]] |
Latest revision as of 21:08, 24 March 2018
Script File.
Contents
Format Specifications
- Endian Order : Big Endian
This file seems to be like script to determine some aspects of each level, menu... Usually will be two gcx files per level.
No header on it.
GCX files can be split into two different sections:
- Functions
- Bytecode
Functions
The first section of the file. It has a table with offsets to the data. The first 4 bytes gives info of the table, with this bytes we have a lot of info.
Bytes | Info |
---|---|
ushort {2} | Offset from the beginning of the table. |
ushort {2} | Offset of the end of the table. |
The offsets obtained, we must add +4.
The table has two colums:
Bytes | Info |
---|---|
ushort {2} | Hashed name |
ushort {2} | Offset of the function |
We can get the number of total rows with this formula: offset_of_the_end_of_the_table / 4
Once we get the entire table, we need to load the functions. The offset on the table are the offset after the table +4, so if the table ends at 0x100, and the offset of given functions starts at 0x200, we need to do: 0x100 + 0x200 + 4. If the given result is correct, the pointed byte will be "@". If not, we have a bad offset or "NOT SCRIPT DATA!!"
Bytecode
Immediately after the functions section, this hasn't table, but works in the same way. First two bytes indicates the initial offset and the next two bytes the end of this section. Until this text is written, always has one "@".
Structure
INFO | |
---|---|
ushort {2} | Offset where functions section starts +4 |
ushort {2} | Offset where functions's TOC ends +4 |
Table of Content from Functions | |
ushort {2} | Function name Hash |
ushort {2} | Absolute Offset after the end of TOC |
Repeat | ... |
byte {\0\0\0\0} | End of Table of Content |
MORE TO COME |
How file works
The gcx script starts with 0x40 (@). If not, there isn't a script data. Let's take a look on how it works.
0x40
The start of the script, the next two bytes are the size. Inside 0x40 could be 3 commands:
Command | Usage |
---|---|
0x30 | Unknown |
0x60 | Code |
0x70 | Call function |
- 0x30
Unknown, until this text is written, we don't find it in any case.
- 0x60
All working code is writting after that. Like 0x40, the next two bytes are the size. Inside this are stored the instructions, followed by one byte with his size. It's supposed to be a hashed name.
- 0x0d33
fs //Needs to be checked - 0x0d4d
gm //Needs to be checked - 0x0d56
gv //Needs to be checked - 0x0d86
if - 0x226d
menu - 0x22ff
mesg - 0x306a
light - 0x430d
delay - 0x4ad9
system - 0x5c9e
varsave - 0x64c0
eval - 0x698d
sound - 0x6ea6
expr //Needs to be checked - 0x7d50
Unknown - 0x9891
chanl //Needs to be checked - 0x9906
chara - 0x9a1f
start - 0x9d45
dgd //Needs to be checked - 0xa242
demo - 0xc091
map - 0xc8bb
load - 0xcc85
pad - 0xdbab
ntrap - 0xe257
Unknown - 0xe43c
str_status - 0xec9d
jimaku - 0xeee9
camera
- 0x0d33
- 0x70
Calling a function with given hash name.
Tools
Actually we are writting a tool to convert to readable text.
Others
Scripts being analyzed/defined
Camera
Script ID | Info | Hex Values |
---|---|---|
0x5061 (Pa) | Object Initialize | |
0x506C (Pl) | Camera Field Of Vision lenght | (04 01 0E D8) 04 01 (Field Of Vision Initialize) 0E D8(Field Of Vision Lenght) |
0x5077 (Pw) | Field Of Vision width | (04 01 01 2C) 04 (Init) 01 01 2C (Field Of Vision Width) |
0x5078 (Px) | Camera Rotation | (04 01 00 E1) 04(Init) 01 (Rotate to the left "01 enabled") 00 (Rotate to the right "00 Disabled") E1 (Maxium Rotation possible for both sides) |
0x5070 (Pp) | Object Coordinates | 0A(Pos Start)XX XX XX XX(X-X+"Left/Right")XX(Z+/Z-"Foward/Backwards) XX (Y+/Y-(Up/Down) XX XX (Z+/Z-"Foward/Backwards) |
0x5064 (Pd) | Camera Facing Direction | (0A 01 01 00 01 0F 00 01 00 00) 0A 01 (Init) 01 [Camera Facing Direction (00=Up 01=Front 02=Down) 00 (Unknown) 01 0F 00 01 (Camera Model direction) |
0x5068 (Ph) | Unknown (No apparent changes when edited) | (03 02 01) |
0x5065 (Pe) | Unknown (No Apparent changes when edited) | (04 08 9F C3 00 00) |
Sentry
Script ID | Info | Hex Values |
---|---|---|
0x5061 (Pa) | Object Initialize | |
0x5072 (Pr) | Sentry Way Path | (03 02 10) 03 02 (Init) 10 (Waypath ID) |
Item
Script ID | Info | Hex Values |
---|---|---|
0x5061 (Pa) | Object Initialize | |
0x5070 (Pp) | Position | (Same as camera) |
0x5072 (Pr) | Item Type | (03 02 00) 03 02 (Init) 00(Itemy type,00 Weapons,01 Items,02 Ammo Type) |
0x5069 (Pi) | Item ID | (03 02 08) 03 02(Init) 08 (Weapon ID CHAFF GRENADE) |
0x506E (Pn) | Amount | (04 01 00 0C) 04 01(start) 00 0C (Amount) |
0x506D (Pm) | TEXT | (09 07 06 53 4F 43 4F 4D) 09 (Script lenght) 07 (Unknown) 06 (Text Lenght) 53 4F 43 4F 4D (SOCOM) |
Door (triggers)
Script ID | Info | Hex Values |
---|---|---|
0x5065 (Pe) | Extra data(?) | 06(KeycardLVL) 31 0E 11 80 00 1E 02 11(ItemToOpenWith) 31 09 31 13 31 00 |