Difference between revisions of "Chrono Cross File Structure"
Line 58: | Line 58: | ||
*002279A8 ~ 00227FFF: Unknown Data | *002279A8 ~ 00227FFF: Unknown Data | ||
*00228000 ~ 0039EA1F: CF\OUTs 25-74 | *00228000 ~ 0039EA1F: CF\OUTs 25-74 | ||
+ | **237000 ~ 23E21F: Guile's Long Status Screen Portrait | ||
*0039EA20 ~ 0039EFFF: Unknown Data | *0039EA20 ~ 0039EFFF: Unknown Data | ||
*0039F000 ~ 006ED3E7: CD\OUTs 75-125 | *0039F000 ~ 006ED3E7: CD\OUTs 75-125 | ||
+ | **3C8900 ~ 3C9B20: Guile's Status Screen Eyeblink Texture | ||
*006ED3E8 ~ 006ED7FF: Unknown Data | *006ED3E8 ~ 006ED7FF: Unknown Data | ||
*006ED800 ~ 00A57A1F: ROT\OUTs 126-178 | *006ED800 ~ 00A57A1F: ROT\OUTs 126-178 | ||
Line 70: | Line 72: | ||
*00B50238 ~ 00B507FF: Unknown Data | *00B50238 ~ 00B507FF: Unknown Data | ||
*00B50800 ~ 00D87A1F: OMCM\OUTs 204-307 | *00B50800 ~ 00D87A1F: OMCM\OUTs 204-307 | ||
+ | **B6D800 ~ B71A20: Guile Overworld Texture 1 | ||
*00D87A20 ~ 00DA07FF: Unknown Data | *00D87A20 ~ 00DA07FF: Unknown Data | ||
*00DA0800 ~ 00DA7017: disk1\OUTs 308-321 | *00DA0800 ~ 00DA7017: disk1\OUTs 308-321 | ||
Line 84: | Line 87: | ||
*0E585220 ~ 0E5857FF: Unknown Data | *0E585220 ~ 0E5857FF: Unknown Data | ||
*0E585800 ~ 0E60F21F: CTF\OUTs 1993-2084 | *0E585800 ~ 0E60F21F: CTF\OUTs 1993-2084 | ||
+ | **E588800 ~ E589A20: Guile's Small Portrait | ||
*0E60F220 ~ 0E60F7FF: Unknown Data | *0E60F220 ~ 0E60F7FF: Unknown Data | ||
*0E60F800 ~ 0FCFD167: MISC\OUTs 2085-2416 | *0E60F800 ~ 0FCFD167: MISC\OUTs 2085-2416 | ||
Line 191: | Line 195: | ||
*114C8A78 ~ 114C8FFF: Unknown Data | *114C8A78 ~ 114C8FFF: Unknown Data | ||
*114C9000 ~ 128D74EF: MISC\OUTs 3055-3707 - Character Battle Models | *114C9000 ~ 128D74EF: MISC\OUTs 3055-3707 - Character Battle Models | ||
− | **114C9000 ~ 114D2467: 3055 - | + | **114C9000 ~ 114D2467: 3055 - Texture Header & Serge's battle model texture & eyeball texture |
**114D2468 ~ 114D27FF: Buffer 00 bytes | **114D2468 ~ 114D27FF: Buffer 00 bytes | ||
**114D2800 ~ 114DD3DC: 3056 - Serge's battle model | **114D2800 ~ 114DD3DC: 3056 - Serge's battle model | ||
**14DD3DD ~ 114DD7FF: Buffer 00 bytes | **14DD3DD ~ 114DD7FF: Buffer 00 bytes | ||
− | **114DD800 ~ 114ECCA7: 3057 - | + | **114DD800 ~ 114ECCA7: 3057 - Serge's weapon models & textures |
**114ECCA8 ~ 114ECFFF: Buffer 00 bytes | **114ECCA8 ~ 114ECFFF: Buffer 00 bytes | ||
*128D74F0 ~ 128D77FF: Unknown Data | *128D74F0 ~ 128D77FF: Unknown Data | ||
Line 484: | Line 488: | ||
doesn't necessarily correspond to each color specification; one letter is used to represent | doesn't necessarily correspond to each color specification; one letter is used to represent | ||
each nybble for ease of labeling. | each nybble for ease of labeling. | ||
+ | |||
+ | For quick reference, the RG BS CLUT data in a standard TIM typically occur between addresses 0x14 and 0x214. | ||
</pre> | </pre> | ||
Line 496: | Line 502: | ||
*I# = Offsets into the CLUT. One byte (8 bits) is required for each pixel because the TIM | *I# = Offsets into the CLUT. One byte (8 bits) is required for each pixel because the TIM | ||
header specifies 8 bits-per-pixel. | header specifies 8 bits-per-pixel. | ||
+ | |||
+ | For quick reference, the I# image data in most normal TIMs follow address 0x220 | ||
</pre> | </pre> | ||
Line 521: | Line 529: | ||
doesn't necessarily correspond to each color specification; one letter is used to represent | doesn't necessarily correspond to each color specification; one letter is used to represent | ||
each nybble for ease of labeling. | each nybble for ease of labeling. | ||
+ | |||
+ | For quick reference, the RG BS CLUT data in an Altered Format TIM typically occurs between addresses 0x1C and 0x21C. | ||
</pre> | </pre> | ||
IMAGE...<pre> | IMAGE...<pre> | ||
− | ?? ?? ?? ?? ?? ?? ?? ?? - I1 I2 I3 I4 .. ..</pre> | + | ?? ?? ?? ?? ?? ?? ?? ?? - ?? ?? ?? ?? ?? ?? ?? ?? |
+ | I1 I2 I3 I4 .. .. | ||
+ | </pre> | ||
Absolutely nothing is known about the IMAGE header at this time; it does not seem to | Absolutely nothing is known about the IMAGE header at this time; it does not seem to | ||
Line 530: | Line 542: | ||
length of the IMAGE element seems to be specified. | length of the IMAGE element seems to be specified. | ||
+ | For quick reference, the I# image data in an Altered Format TIM usually follows address 0x22C. | ||
Revision as of 21:40, 11 March 2008
Chrono Cross, released late in the PlayStation's life, was subject to clever data obfuscation by Square. Obfuscation in this sense—the art of hiding data—means at the simplest level that, if you put Chrono Cross in your hard drive, you can't browse directories and view individual assets, like character models and textures. Instead, the game disc is compiled as a unified whole with an index file at the beginning which the PlayStation / Chrono Cross read to find files and operate.
In 2002, Terminus Traduction (specifically, Yazoo, Nemesis, and Manz) successfully audited Chrono Cross and wrote a set of utilities for extracting its data. The first tools (Chrono Cross Hacking Tools) were authored by Yazoo and dump the entire game's assets. The second set of tools (Chrono Cross Translation Tools) are heavily-modified versions of Yazoo's tools primarily coded by Nemesis and his team. They are specifically geared to dump assets (such as text, scripts, images with text, and video captions) needed for translation.
Contents
Chrono Cross Hacking Tools
How do I rip proper game images from the Chrono Cross discs?
Game image: A digital copy of your game CD. A game image may be said to exist in one of two formats once it's on your hard drive: 2048 byte-per-sector format or 2352 byte-per-sector format.
Some hacking utilities are hard-coded to recognize only game images with 2352 byte sectors; others work best with 2048 byte sectors. For example, TIMViewer and PSicture interpret data correctly only for 2048 byte-per-sector images, whereas the powerful tools created by Yazoo and Nemesis require 2352 byte sectors. What's the novice hacker to do?
Ripping game images is easy, and luckily with utilities such as IsoBuster you can rip both formats. Here are the IsoBuster commands you need to know:
2048 byte-per-sector format: File -> CD -> Extract CD <Content> -> Extract User Data 2352 byte-per-sector format: File -> CD -> Extract CD <Image> -> RAW
That should put you on good footing to use all the various tools available for hacking Chrono Cross. Remember, you're going to need lots of space on your hard drive for the game images: a 2048 byte-per-sector image for Disc 1 of Chrono Cross weighs in at 611MB (641,437,696 bytes), while a 2352 byte-per-sector image is 702MB (736,651,104 bytes) in size!
Yazoo's Tools Output Folders
Yazoo's Chrono Cross hacking tools creates the following folders, each containing several .OUT files of data. NOTE: Yazoo's tools require a 2352 byte-per-sector (736,651,104 byte) .bin file as input.
- BF = 2417-2513 BattleFields
- BS = 2543-3054 Battlescript
- CD = 75-125 Character Descriptions
- CF = 25-74 Character Faces
- CTF = 1993-2084 Character talking face
- disk1 = 308-321 "It's CDMAKE Dummy!"
- MISC = 0-24 Misc
- MISC = 179-185 Misc "It's CDMAKE Dummy!"
- MISC = 190-203 Misc
- MISC = 332-355 Misc "It's CDMAKE Dummy!"
- MISC = 1967-1977 Misc
- MISC = 2085-2416 Misc
- MISC = 2514-2542 Misc
- MISC = 3054-3707 Misc
- MISC = 3760-5597 Misc
- OAM = 322-331 OverWorld Alternate Models
- OMCM = 204-307 OverWorld Main Characters Models
- ROT = 126-178 Rare objects TIM
- ROT = 186-189 Rare objects TIM
- Rooms = 356-1966 Rooms
- SCL = 3708-3759 Small Character Layer
- WF = 1978-1992 Windows frame
- V = 5598-5617 Video
Data Map
This section currently lists where all the OUT directories listed above are located on Disc 1. The offsets are applicable to the physical game CD as well as to any ripped iso that is exactly 641,437,696 bytes long.
As time goes on the offsets will grow more and more specific, perhaps reaching the file-by-file level of detail in the distant future.
- 00000000 ~ 00012FFF: Unknown Data
- 00013000 ~ 002279A7: MISC\OUTs 0-24
- 002279A8 ~ 00227FFF: Unknown Data
- 00228000 ~ 0039EA1F: CF\OUTs 25-74
- 237000 ~ 23E21F: Guile's Long Status Screen Portrait
- 0039EA20 ~ 0039EFFF: Unknown Data
- 0039F000 ~ 006ED3E7: CD\OUTs 75-125
- 3C8900 ~ 3C9B20: Guile's Status Screen Eyeblink Texture
- 006ED3E8 ~ 006ED7FF: Unknown Data
- 006ED800 ~ 00A57A1F: ROT\OUTs 126-178
- 00A57A20 ~ 00A57FFF: Unknown Data
- 00A58000 ~ 00A5B017: MISC\OUTs 179-185
- 00A5B018 ~ 00A5B7FF: Unknown Data
- 00A5B800 ~ 00A9D21F: ROT\OUTs 186-189
- 00A9D220 ~ 00A9D7FF: Unknown Data
- 00A9D800 ~ 00B50237: MISC\OUTs 190-203
- 00B50238 ~ 00B507FF: Unknown Data
- 00B50800 ~ 00D87A1F: OMCM\OUTs 204-307
- B6D800 ~ B71A20: Guile Overworld Texture 1
- 00D87A20 ~ 00DA07FF: Unknown Data
- 00DA0800 ~ 00DA7017: disk1\OUTs 308-321
- 00DA7018 ~ 00DA77FF: Unknown Data
- 00DA7800 ~ 00DD9A1F: OAM\OUTs 322-331
- 00DD9A20 ~ 00DD9FFF: Unknown Data
- 00DDA000 ~ 00DD5817: OAM\OUTs 332-355
- 00DD5818 ~ 00DE5FFF: Unknown Data
- 00DE6000 ~ 0E520C37: Rooms\OUTs 356-1966
- 0E520C38 ~ 0E520FFF: Unknown Data
- 0E521000 ~ 0E5508FF: MISC\OUTs 1967-1977
- 0E550900 ~ 0E550FFF: Unknown Data
- 0E551000 ~ 0E58521F: WF\OUTs 1978-1992
- 0E585220 ~ 0E5857FF: Unknown Data
- 0E585800 ~ 0E60F21F: CTF\OUTs 1993-2084
- E588800 ~ E589A20: Guile's Small Portrait
- 0E60F220 ~ 0E60F7FF: Unknown Data
- 0E60F800 ~ 0FCFD167: MISC\OUTs 2085-2416
- 0FCFD168 ~ 0FCFD7FF: Unknown Data
- 0FCFD800 ~ 1128D28F: BF\OUTs 2417-2513 - Battle Fields (TIMs and models)
- 2417 - Unknown Kid model and Japanese text
- 2418 - Lizard Rock
- 2419 - Cape Howl
- 2420 - Cape Howl (Dusk)
- 2421 - Fossil Valley
- 2422 - Shadow Forest
- 2423 - Shadow Forest Tree Stream
- 2424 - Viper Manor Bluffs
- 2425 - Viper Manor Bluffs (Night)
- 2426 - Viper Manor
- 2427 - Viper Manor (Night)
- 2428 - Viper Manor Command
- 2429 - Viper Manor Command
- 2430 - Hydra Marshes
- 2431 - Hydra Marshes Branches
- 2432 - Hydra Marshes Hollow Tree
- 2433 - UNKNOWN
- 2434 - S.S. Invincible
- 2435 - S.S. Invincible Deck
- 2436 - Water Dragon Isle
- 2437 - Water Dragon Isle
- 2438 - Mt. Pyre
- 2439 - Fort Dragonia
- 2440 - Arni
- 2441 - Earth Dragon Isle
- 2442 - Earth Dragon Isle Sanctum
- 2443 - Isle of the Damned
- 2444 - Isle of the Damned (Garai's Dream)
- 2445 - Hydra Marshes (Another)
- 2446 - FATE Island (Clotho)
- 2447 - Darkness Beyond Time
- 2448 - Marbule Cave
- 2449 - El Nido Triangle
- 2450 - Lucca's Orphanage
- 2451 - Gaea's Navel
- 2452 - Gaea's Navel Sanctum
- 2453 - S.S. Zelbess Grand Slam Ring
- 2454 - Shadow Forest
- 2455 - Viper Manor Study
- 2456 - Guldove
- 2457 - Marbule
- 2458 - Mt. Pyre Sanctum
- 2459 - Fort Dragonia Crystal Room
- 2460 - Fort Dragonia Crystal Room
- 2461 - Earth Dragon Isle Sanctum
- 2462 - Terra Tower Exterior Warp
- 2463 - Fort Dragonia
- 2464 - Fort Dragonia
- 2465 - Fort Dragonia
- 2466 - Fort Dragonia Dragon Tear Chamber
- 2467 - Terra Tower
- 2468 - Terra Tower Exterior Warp
- 2469 - Terra Tower
- 2470 - Terra Tower
- 2471 - Terra Tower
- 2472 - Viper Manor Basement
- 2473 - Viper Manor Basement
- 2474 - UNKNOWN (Clouds)
- 2475 - UNKNOWN (Water)
- 2476 - UNKNOWN
- 2477 - Lucca's Orphanage
- 2478 - Lucca's Orphanage
- 2479 - Lucca's Orphanage
- 2480 - Mt. Pyre
- 2481 - Mt. Pyre
- 2482 - Water Dragon Isle Interior
- 2483 - Water Dragon Isle Sanctum
- 2484 - FATE Island (Lachesis)
- 2485 - FATE Island (Atropos)
- 2486 - Fort Dragonia (Bunyip)
- 2487 - Lucca's Orphanage (Portraits)
- 2488 - Terra Tower
- 2489 - Terra Tower
- 2490 - Terra Tower
- 2491 - Terra Tower Dragon God
- 2492 - Chronopolis
- 2493 - Chronopolis
- 2494 - Chronopolis Stairway
- 2495 - Chronopolis Frozen Flame
- 2496 - Temporal Vortex
- 2497 - Temporal Vortex (Escher)
- 2498 - Viper Manor Ruins
- 2499 - Dead Sea Highway
- 2500 - Dead Sea Buildings
- 2501 - Tower of Geddon Mall
- 2502 - Tower of Geddon Theater
- 2503 - Sky Dragon Isle Sanctum
- 2504 - UNKNOWN
- 2505 - UNKNOWN
- 2506 - UNKNOWN
- 2507 - UNKNOWN
- 2508 - UNKNOWN
- 2509 - Sky Dragon Isle Sanctum
- 2510 - S.S. Invincible Deck (Ghosts)
- 2511 - Gaea's Navel
- 2512 - Fort Dragonia
- 2513 - Fort Dragonia
- 1128D290 ~ 1128D7FF: Unknown Data
- 1128D800 ~ 112DB9EF: MISC\OUTs 2514-2542
- 112DB9F0 ~ 112DBFFF: Unknown Data
- 112DC000 ~ 114C8A77: BS\OUTs 2543-3054
- 114C8A78 ~ 114C8FFF: Unknown Data
- 114C9000 ~ 128D74EF: MISC\OUTs 3055-3707 - Character Battle Models
- 114C9000 ~ 114D2467: 3055 - Texture Header & Serge's battle model texture & eyeball texture
- 114D2468 ~ 114D27FF: Buffer 00 bytes
- 114D2800 ~ 114DD3DC: 3056 - Serge's battle model
- 14DD3DD ~ 114DD7FF: Buffer 00 bytes
- 114DD800 ~ 114ECCA7: 3057 - Serge's weapon models & textures
- 114ECCA8 ~ 114ECFFF: Buffer 00 bytes
- 128D74F0 ~ 128D77FF: Unknown Data
- 128D7800 ~ 1293B61F: SCL\OUTs 3708-3759
- 1293B620 ~ 1293F7FF: Unknown Data
- 1293F800 ~ 13A5D977: MISC\OUTs 3760-5597
- 13A5D978 ~ 186B9FFF: Unknown Data
- 186BA000 ~ 263B9000: V\OUTs 5598-5617 - Videos (STR)
- 186BA000 ~ 187FEFFF: 5598 - Frozen Flame
- 187FF000 ~ 18D5E7FF: 5599 - Chrono Cross 2
- 18D5E800 ~ 1967D07F: 5600 - Fort Dragonia
- 1967D080 ~ 19D07FFF: 5601 - Dream of Fort Dragonia
- 19D80000 ~ 1ACE8FFF: 5602 - Crossing Dimensions
- 1ACE9080 ~ 1AF9FFFF: 5603 - Kid at Cape Howl
- 1AFA0000 ~ 1B4E5FFF: 5604 - Viper Manor Evening
- 1B4E6000 ~ 1BE72FFF: 5605 - Dragon Tear Time Crash
- 1BE73000 ~ 1C273FFF: 5606 - Crossing Dimensions 2
- 1C274000 ~ 1C9D0FFF: 5607 - Orphanage Fire (Lynx)
- 1C9D1000 ~ 1CD90FFF: 5608 - Panther Attack
- 1CD91000 ~ 1D6AFFFF: 5609 - Fort Dragonia 2
- 1D6B0000 ~ 1DDFDFFF: 5610 - Approaching the Doors
- 1DDFE000 ~ 1E613FFF: 5611 - Panther Attack 2
- 1E614000 ~ 1F2ACFFF: 5612 - Lynx and the Dragon Tear
- 1F2AD000 ~ 20102FFF: 5613 - Lynx Stabs Kid
- 20103000 ~ 20AADFFF: 5614 - Kid at Opassa
- 20AAE000 ~ 21A34FFF: 5615 - Dead Sea Destruction
- 21A35000 ~ 236CCFFF: 5616 - Regaining the Body
- 236CD000 ~ 2636DFFF: 5617 - Chrono Cross
- 2636E000 ~ 263B9000: Null (00) data
Character Data Order
All data on the game CD pertaining to player characters occur in the following order.
Serge Kid Guile Norris Nikki Viper Riddel Karsh Zoah Marcy Korcha Luccia Poshul Razzly Zappah Orcha Radius Fargo Macha Glenn (One Sword) Leena Miki Harle Janice Draggy Starky Sprigg Mojo Turnip NioFio Greco Skelly Funguy Irenes Mel Leah Van Sneff Steena Doc Grobyc Pierre Orlha Pip x 6 variations Lynx Glenn (2 swords in battle model data comes afterward)
Chrono Cross Translation Tools
File and Data Types
Character Battle Models
As they exist on the game CD, Chrono Cross character battle models consist of applicable textures followed by the model geometry itself. The model data begin with a header that points to various sections, and the sections have their own subheaders and subsections.
Below Serge's, Kid's, and Guile's models are employed as examples of how the model data (vertices, shaders, animations, etc) are structured within the model file itself. Keep in mind that all data is represented in "Little Endian" Mode, meaning we humans must employ a byte-order reversal technique to understand it. For example, 06 00 00 00 means 0x06, and F8 4E 00 00 means 0x4EF8.
Also keep in mind that offset ranges are relative, meaning pointer tables report locations that are are a certain number of bytes from the beginning of the current header/subheader. This makes no difference in the overall file header when you're looking at the model data file as excised from the game CD, but it most certainly affects the correct interpretation of subheaders. Therefore, the offsets reported in subheader pointer tables are accompanied by (true offsets) from the beginning of the model file.
Example 1: Serge
HEADER... OFFSETS OFFSET VALUES 00000000 06 00 00 00 20 00 00 00-F8 4E 00 00 C8 50 00 00 00000010 28 52 00 00 CC A2 00 00-00 00 00 00 DC AB 00 00 SECTION 1 SUBHEADER... OFFSETS OFFSET VALUES 00000020 02 00 00 00 14 00 00 00-80 02 00 00 05 02 2B 04 00000030 F9 00 00 00 38 03 00 00-C8 28 00 00 28 42 00 00 00000040 11 00 00 00 00 00 00 00
Split into 4-byte chunks, the header and subheaders can be interpreted in the following way. "Section1," etc., report the beginning offsets of each section:
Header Offset Range: 00 ~ 1F 6 Sections | Section1 0x20 | Section2 0x4EF8 | Section3 0x50C8 Section4 0x5228 | Section5 0xA2CC | Section6 N/A | End of File 0xABDC Section1 Offset Range: 20 ~ 4EF7 SubHeader Offset Range: 20 ~ 47 *Pointer 0x02 | PointerTable Start 0x14(34)| ??? 0x0280 | * 0x042B0205 ??? 0xF9 | SubSection2 0x0338(0358) | SubSection3 0x28C8(28E8)| SubSection4 0x4228(4248) ??? 0x11 | ??? 0x00 SubSection1 Offset Range: 48 ~ 357 SubSection2 (UV Texture Map) Offset Range: 358 ~ 28E7 SubSection 2 Map... 0x0358 ~ 0x0FB7: Triangle UV data and pointers (264 triangles) 0x0FB8 ~ 0x2657: Quad UV data and pointers (362 quads) 0x2658 ~ 0x26E7: Triangle UV data and pointers (12 triangles) 0x26E8 ~ 0x28E7: Quad UV data and pointers (32 quads) Triangle UV data and pointer setup: U1 V1 U2 V2 U3 V3 P1 P1 - P2 P2 P3 P3 Quad UV data and pointer setup: U1 V1 U2 V2 U3 V3 U4 V4 - P1 P1 P2 P2 P3 P3 P4 P4
Rules for interpreting quad pointers... Rule for Positive Pointers (as interpreted in hexadecimal)
- If you're in one of the first two columns, divide the byte pair value by 0x2, then by 0x8. This value is the index for the vertex to which the UV point is mapped.
- If you're in one of the last two columns, divide the byte pair value by 0x8. This value is the index for the vertex to which the UV point is mapped.
Rule for Negative Pointers (as interpreted in decimal)
- If you're in one of the first two columns, divide the byte pair value by 16. Go backward that number of positions into the non-UV data.
- If you're in one of the last two columns, divide the byte pair value by 8. Go backward that number of positions into the non-UV data.
Rules for interpreting triangle pointers... Rule for Positive Pointers (hex)
- If you're in the first column, divide the byte pair value by 0x8. This value is the vertex index.
- If you're in one of the last two columns, divide the byte pair value by 0x2, then by 0x8. This value is the vertex index.
Rule for Negative Pointers (dec)
- If you're in the first column, divide the byte pair value by 8. Go backward that number of positions into the non-UV data, adding an invisible position to the three extant positions.
- If you're in one of the last two columns, divide the byte pair value by 16. Go backward that number of positions into the non-UV data, adding an invisible position to the three extant positions.
- For triangles, switch pointers such that the first UV coordinate gets the second pointer; the second UV coordinate gets the third pointer; the third UV coordinate gets the first pointer. The pointers retain the division properties they had in their original positions.
SubSection3 (Vertex Pool) Offset Range: 28E8 ~ 4247 SubSection 3 Map... 0x28E8 ~ 0x324F: "8-byte mode", 301 vertices 0x3250 ~ 0x3F6F: "16-byte mode", 210 vertices 0x3F70 ~ 0x3F97: "8-byte mode", 5 vertices 0x3F98 ~ 0x4247: "16-byte mode", 43 vertices "8-byte mode" setup... ZZ ** YY ** XX ** 00 00 - ZZ ** YY ** XX ** 01 00 ZZ ** YY ** XX ** 02 00 - ZZ ** YY ** XX ** 03 00 "16-byte mode" setup... ZZ ** YY ** XX ** 00 00 - ZZ ** YY ** XX ** 00 00 ZZ ** YY ** XX ** 01 00 - ZZ ** YY ** XX ** 01 00 Where... ZZ: Magnitude of coordinate on the up & down axis on the screen plane YY: Magnitude of coordinate on depth axis; toward or away from you with respect to the screen. XX: Magnitude of coordinate on right & left axis on the screen plane **: A directional reverser byte. If 00, the vertex is placed in one direction on the axis, and if FF, the vertex gets placed on a coordinate the same "magnitude" but opposite direction on that axis. (In actuality, it merely specifies whether the value is positive or negative in hex). ?? ??: The vertex index; two bytes per vertex. 16-byte mode appears to come into play when a vertex is associated with more than one bone. * The first eight bytes represent the vertex's location relative to the first bone it is associated with. * The second eight bytes represent the vertex's location relative to the second bone it is associated with. SubSection4 Offset Range: 4248 ~ 4EF7 SubSection4 Pattern... ?? ?? ?? 00 ?? ?? ?? 00 - ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 - ?? ?? ?? 00 ?? ?? ?? 00 The purpose of this SubSection is unknown; all data can be safely 00'd out and not affect Serge's model shape or animations.
Example 2: Kid
HEADER... OFFSETS OFFSET VALUES 00000000 06 00 00 00 20 00 00 00-B4 4D 00 00 C4 50 00 00 00000010 24 52 00 00 F0 C6 00 00-00 00 00 00 00 D0 00 00 SECTION 1 SUBHEADER... OFFSETS OFFSET VALUES 00000020 02 00 00 00 14 00 00 00-38 02 00 00 D9 01 07 04 00000030 26 02 00 00 74 03 00 00-04 2C 00 00 64 42 00 00 00000040 17 00 00 00 00 00 00 00
Split into 4-byte chunks, the header and subheaders can be interpreted in the following way. "Section1," etc., report the beginning offsets of each section:
Header Offset Range: 00 ~ 1F 6 sections | Section1 0x20 | Section2 0x4DB4 | Section3 0x50C4 Section4 0x5224 | Section5 0xC6F0 | Section6 N/A | End of File 0xD000 Section1 Offset Range: 20 ~ 4DB3 SubHeader Offset Range: 20 ~ 47 *Pointer 0x02 | PointerTableStart 0x14(34)| ??? 0x0238 | * 0x040701D9 ??? 0x0226 | SubSection2 0x0374(0394) | SubSection3 0x2C04(2C24)| SubSection4 0x4264(4284)' ??? 0x17 | ??? 0x00 SubSection1 Offset Range: 48 ~ 393 SubSection2 (UV Texture Map) Offset Range: 394 ~ 2C23 SubSection3 (Vertex Pool) Offset Range: 2C24 ~ 4283 SubSection4 Offset Range: 4284 ~ 4DB3
Example 3: Guile
HEADER... OFFSETS OFFSET VALUES 00000000 06 00 00 00 20 00 00 00-3C 4C 00 00 10 4F 00 00 00000010 70 50 00 00 1C E4 00 00-00 00 00 00 2C ED 00 00 SECTION 1 SUBHEADER... OFFSETS OFFSET VALUES 00000020 05 00 00 00 20 00 00 00-D8 00 00 00 C6 01 00 00 00000030 B8 01 00 00 5C 02 00 00-4B 03 9A 04 BE 02 00 00 00000040 3C 03 00 00 38 2A 00 00-D0 40 00 00 0D 00 00 00 00000050 00 00 00 00
Split into 4-byte chunks, the header and subheaders can be interpreted in the following way. "Section1," etc., report the beginning offsets of each section:
Header Offset Range: 00 ~ 1F 6 Sections | Section1 0x20 | Section2 0x4C3C | Section3 0x4F10 Section4 0x5070 | Section5 0xE41C | Section6 N/A | End of File 0xED2C Section1 Offset Range: 20 ~ 4C3B SubHeader Offset Range: 20 ~ 53 *Pointer 0x05 | PointerTableStart 0x20(40)| ??? 0xD8 | ??? 0x016C ??? 0x01B8 | ??? 0x025C | * 0x049A034B | ??? 0x02BE SubSection2 0x033C(035C) | SubSection3: 0x2A38(2A58) | SubSection4: 0x40D0(40F0)| ??? 0x0D ??? 0x00 SubSection1 Offset Range: 54 ~ 35B SubSection2 (UV Texture Map) Offset Range: 35C ~ 2A57 SubSection3 (Vertex Pool) Offset Range: 2A58 ~ 40EF SubSection4 Offset Range: 40F0 ~ 4C3B
DISCLAIMER: This is still a working entry. All interpretations are subject to change with time.
SPECIAL THANKS: To Gemini for identifying the battle textures that led us to the models; to Luminaire85 for finding and interpreting the headers and subheaders, fine-tuning various theories, and coding the model viewer; to MDenham for figuring out how the pointers and Section 1-1 work; and to Halkun, Cyberman and yaz0r for providing constant advice and guidance.
TIM Textures
Type "0" Normal TIM
These are the classic PlayStation TIM type. Detailed info about the format is available at wiki.qhimm.com, but let's have a brief run-through here, as this will help us compare the classic TIM format to the abnormal TIM format used in Chrono Cross battle models.
The basic structure of a classic TIM is HEADER CLUT IMAGE. The HEADER gives basic info about the file. It is directly followed by the CLUT, or color lookup table. Then comes the IMAGE data, which is usually going to be a series of offsets into the CLUT.
HEADER...10 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? specifies bit depth and whether a CLUT is present. For more, see http://wiki.qhimm.com/PSX/TIM_fileCLUT...
CL CL CL CL CX CX CY CY - CW CW CH CH RG BS RG BS RG BS .. .. Where... *CL = CLUT Length in bytes. *CX, CY, CW, and CH are beyond the scope of this entry; for more, see http://wiki.qhimm.com/PSX/TIM_file *RG BS are the red, green, blue, and special transparency values for each color in the CLUT. Note that these byte pairs are read as their constituent bits, so one nybble (half-byte) doesn't necessarily correspond to each color specification; one letter is used to represent each nybble for ease of labeling. For quick reference, the RG BS CLUT data in a standard TIM typically occur between addresses 0x14 and 0x214.IMAGE...
IL IL IL IL IX IX IY IY - IW IW IH IH I1 I2 I3 I4 .. .. Where... *IL = Length of the IMAGE data in bytes. *IX, IY, IW, and IH are beyond the scope of this entry. Once again, check the qhimm wiki for more in-depth info. *I# = Offsets into the CLUT. One byte (8 bits) is required for each pixel because the TIM header specifies 8 bits-per-pixel. For quick reference, the I# image data in most normal TIMs follow address 0x220
Altered Format TIM
The .TIM files used for battle model textures differ from the classic format, preventing tools like TIMViewer and PSicture from detecting them. Like the classic TIMs, the altered format TIMs consist of a HEADER, CLUT, and IMAGE data -- only the headers for each element are different. Thus it should be possible to run a bitmap through TIMViewer and turn it into a classic TIM, then take the "flesh" of the CLUT and IMAGE data from that classic TIM and insert it around the "skeleton" of an existing altered format TIM's headers. The resulting chimera TIM should be usable by the game for battle models. This method will be attempted for the Compendium's Make Your Magus project.
HEADER...02 00 00 00 ?? ?? ?? ??CLUT...
CL CL CL CL ?? ?? ?? ?? - ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? RG BS RG BS Where... *CL = CLUT Length in bytes. *?? appear to express all the information contained in a classic TIM CLUT header, but with an additional 8 bytes of unknown function interspersed. *RG BS are the red, green, blue, and special transparency values for each color in the CLUT. Note that these byte pairs are read as their constituent bits, so one nybble (half-byte) doesn't necessarily correspond to each color specification; one letter is used to represent each nybble for ease of labeling. For quick reference, the RG BS CLUT data in an Altered Format TIM typically occurs between addresses 0x1C and 0x21C.IMAGE...
?? ?? ?? ?? ?? ?? ?? ?? - ?? ?? ?? ?? ?? ?? ?? ?? I1 I2 I3 I4 .. ..
Absolutely nothing is known about the IMAGE header at this time; it does not seem to communicate any of the same information as the IMAGE header in a classic TIM -- not even the length of the IMAGE element seems to be specified.
For quick reference, the I# image data in an Altered Format TIM usually follows address 0x22C.
Debug Mode
With the room modifier code 8007E6E8 000E enabled, ZeaLitY restored a savestate in ePSXe immediately following the defeat of the Time Devourer on a new game plus in disc one. The game shifted to the Hydra Marshes, but strangely, this savestate (and only this savestate) booted the location with a debug mode menu active. Thanks to this completely accidental discovery, the game's debug mode is being mapped. Here is the Time Devourer battle savestate (to be used with that room modifier code):
Here is a savestate with the debug mode enabled:
Menu Layout
Several of these break the four-line height of text boxes, and the options as a result go well below the textbox. However, the decisions scroll down to the end of the string. So, if something has 8 choices (like the main menu), the first option will highlight the name of the fifth (since only 5-8 will be displayed). To get to the actual fifth and beyond, you have to go below the textbox to the invisible options.
Adjust Screen's RGB Start Changes "Mode: 00 R: 0 G: 0 B: 0" Input Red: 000 Next Input Red again! (If >255) "Max is 255, stupid!" ~ Input Green again! (If >255) "Max is 255, silly!" ~ Input Blue again! (If >255) "Max is 255, dope!" ~ Select Mode: 000 (If >3) "Range is 0 to 3!" End Select Mode again! Default Return Quit Adjust Underwater RGB Start Changes "Mode: 00 R: 0 G: 0 B: 0" Input Red: 000 Next Input Red again! (If >255) "Max is 255, stupid!" ~ Input Green again! (If >255) "Max is 255, silly!" ~ Input Blue again! (If >255) "Max is 255, dope!" Default Return Quit Adjust Chara.'s RGB Start Changes "Mode: 00 R: 0 G: 0 B: 0" Input Red: 000 Next Input Red again! (If >255) "Max is 255, stupid!" ~ Input Green again! (If >255) "Max is 255, silly!" ~ Input Blue again! (If >255) "Max is 255, dope!" Default Return Quit Adjust Chara.'s rot Start Changes "Current Values... X:0 Z:0 Y:0" Set rotx = 0000 (If >4096) "Max is 4096!" ~ Next Set rotx again ~ Set rotz again ~ Set roty again Default Return Quit Adjust Chara.'s scale "Scale what?" All 00/10 (If 0 "A number other than 0!") X Z Y Cancel Set Rect. Rect. Size rectsizeX 0000 ~ rectsizeZ 0000 Go away! Return YOU'RE AT MAP NO. 9! Map Jump This Map Before Jump Next Map Previous Map Planners' Rooms Special Exit Menu/Return Quit
For the demo scenes, a map parameter of 0 or 1 starts one at one of two exits with static characters. Moving takes one to the title screen. A parameter of 2 plays the demo scenes. A parameter of more than that acts like 0 or 1 except that no characters are loaded.
Map Digits
000 - Crash 001 - Crash 002 - Crash 003 - Crash 004 - Crash 005 - Black screen 006 - Crash 007 - Crash 008 - Title screen 009 - Game Over screen 010 - Demo scene - Shadow Forest Entrance 011 - Demo scene - Shadow Forest Giant Tree 012 - Demo scene - Viper Manor Study Bridge (Night) 013 - Demo scene - Viper Manor Study with Harle 014 - Demo scene - Hydra Marshes (bg music - Dilemma) with Solt and Peppor 015 - Demo scene - Hydra Marshes (bg music - Dilemma) 016 - Demo scene - Termina Entrance 017 - Demo scene - Termina Fortune Teller 018 - Demo scene - Lucca's Orphanage (unused?) 019 - Demo scene - S.S. Invincible 020 - Demo scene - Cape Howl Sunset 021 - Demo scene - Viper Manor (Night) 022 - Fort Dragonia - Second Story Elevator Lobby 023 - Fort Dragonia - Second Story Teleporter Room 024 - Fort Dragonia - Second Story Side-Staircase 025 - Fort Dragonia - Second Story Crystal 026 - Fort Dragonia - Dragon Tear Chamber Station 027 - Arni (Home World) 028 - Arni (Another World) 029 - Arni - Serge's House Living Room (Home) 030 - Arni - Serge's House Living Room (Another) 031 - Arni - Serge's Room (Home) 032 - Arni - Serge's Room (Another) 033 - Arni - Chief's Meadow (Home) 034 - Arni - Chief's Meadow (Another) 035 - Arni - Chief's Hut (Home) 036 - Arni - Chief's Hut (Another) 037 - Arni Dock (Home) 038 - Arni Dock (Another) 039 - Arni - Belcha's Kitchen (Home) 040 - Arni - Cafe Fleur (Another) 041 - Arni - Belcha's Kitchen Bed (Home) 042 - Arni - Cafe Fleur Bed (Another) 043 - Arni - Kiki's Dad's Room (Home) 044 - Arni - Kiki's Dad's Room (Another) 045 - Arni - Leena's House (Home) 046 - Arni - Leena's House (Another) 047 - Arni - Kiki's House (Home) 048 - Arni - Kiki's House (Another) 049 - SCENE - Sea of Eden - Wazuki takes Serge to Chronopolis 050 - Lizard Rock Entrance (Home) 051 - Lizard Rock Entrance (Another) 052 - Lizard Rock East (Home) 053 - Lizard Rock East (Another) 054 - Lizard Rock South (Home) 055 - Lizard Rock South (Another) 056 - Opassa Beach (Home) 057 - Opassa Beach (Another) 058 - Cape Howl Entrance (Home) 059 - Cape Howl Entrance (Another) 060 - Cape Howl Cape (Home) 061 - Cape Howl Cape (Another) 062 - Cape Howl Cape Sunset (Another) 063 - Cape Howl Rock (Home) 064 - Cape Howl Grave (Another) 065 - Cape Howl Grave Sunset (Another) 066 - Fossil Valley Entrance (Home) 067 - Fossil Valley Entrance (Another) 068 - Fossil Valley Skeleton (Home) 069 - Fossil Valley Skeleton (Another) 070 - Fossil Valley Entrance Post-Lynx Invasion (Another) 071 - Termina Cemetery (Home) 072 - Termina Cemetery (Another) 073 - Termina Fortune Teller (Home) 074 - Termina Fortune Teller (Another) 075 - Termina Dragoon Quarter (Home) 076 - Termina Dragoon Quarter (Another) 077 - Termina Entrance (Home) 078 - Termina Entrance (Another) 079 - Termina Dock (Home) 080 - Termina Dock (Another) 081 - Termina - Lisa's Element Shop (Home) 082 - Termina - Lisa's Element Shop (Another) 083 - Termina - Lisa's Element Shop Bed (Home) 084 - Termina - Lisa's Element Shop Bed (Another) 085 - Termina - Dragon's Tail Bar (Home) 086 - Termina - Dragon's Tail Bar (Another) 087 - Termina - Dragon's Tail Bar Back Room (Home) 088 - Termina - Dragon's Tail Bar Back Room (Another) 089 - Termina - Sick Girl's House (Home) 090 - Termina - Sick Girl's House (Another) 091 - Termina - Skelly's House (Home) 092 - Termina - Skelly's House (Another) 093 - Termina - Zappa's House (Home) 094 - Termina - Zappa's House (Another) 095 - Termina - Zappa's Guest Room (Home) 096 - Termina - Zappa's Guest Room (Another) 097 - Termina - Glenn's House (Home) 098 - Termina - Glenn's House (Another) 099 - Termina Cemetery House (Home) 100 - Termina Cemetery House (Another) 101 - Termina Inn (Home) 102 - Termina Inn (Another) 103 - Termina Inn Suite One (Home) 104 - Termina Inn Suite One (Another) 105 - Termina Inn Suite Two (Home) 106 - Termina Inn Suite Two (Another) 107 - Termina - Van's Room (Home) 108 - Termina - Van's Room (Another) 109 - Termina - Van's House (Home) 110 - Termina - Gogh's Room (Another) 111 - Termina - Van's House (Another) 112 - Termina Fortune Teller (Before Viper Manor Break-in) (Another) 113 - Termina Cemetery (Another) 114 - Termina Dock (Another) 115 - Termina - Magical Dreamers Ship Deck (Another) 116 - Termina - Magical Dreamers Ship - Nikki's Room (Another) 117 - Termina - Magical Dreamers Ship - Miki's Room (Another) 118 - Termina Entrance (Post-Invasion) (Another) 119 - SCENE - Karsh thinks of Riddel in the Dragoon Quarter 120 - Termina Dragoon Quarter (Disabled Exits) (Another) 121 - SCENE - The party sails through the Dragoon Quarter to Viper Manor 122 - Shadow Forest (Home) 123 - Shadow Forest (Another) 124 - Shadow Forest Second Shade (Home) 125 - Shadow forest Second Shade (Another) 126 - Shadow Forest Waterfall (Home) 127 - Shadow Forest Waterfall (Another) 128 - Shadow Forest Grotto (Home) 129 - Shadow Forest Grotto (Another) 130 - Shadow Forest Giant Tree (Home) 131 - Shadow Forest Giant Tree (Another) 132 - Shadow Forest Waterfall (Before Viper Manor) (Another) 133 - Shadow Forest Tree River (Home) 134 - Shadow Forest Tree River (Another) 135 - Shadow Forest River Current (Home) 136 - Shadow Forest River Current (Another) 137 - Shadow Forest Well Base (Home) 138 - Shadow Forest Well Base (Another) 139 - Viper Manor Drainage Duct (Home) 140 - Viper Manor Drainage Duct (Another) 141 - Viper Manor Gate (Home) 142 - Viper Manor Gate (Another) 143 - Viper Manor Bluffs Dock (Home) 144 - Viper Manor Bluffs Dock (Another) 145 - Viper Manor Bluffs Second Ascent (Home) 146 - Viper Manor Bluffs Second Ascent (Another) 147 - Viper Manor Bluffs Final Ascent (Home) 148 - Viper Manor Bluffs Final Ascent (Another) 149 - Viper Manor Courtyard (Home) 150 - Viper Manor Courtyard (Another) 151 - Viper Manor Stable Courtyard (Another) 152 - Viper Manor Stables 153 - Viper Manor Foyer 154 - Viper Manor - Karsh's Room 155 - Viper Manor - ZOAH'S ROOM 156 - Viper Manor - Norris's Room 157 - Viper Manor - Harle's Room 158 - Viper Manor - Throne Room 159 - Viper Manor - Bridge to Study 160 - Viper Manor - Bridge to Study (Night) 161 - Viper Manor Study 162 - Viper Manor Balcony (Night) 163 - Viper Manor - Executive Hallway 164 - Viper Manor Balcony 165 - Viper Manor - Viper's Room 166 - Viper Manor - Riddel's Room 167 - Viper Manor Basement Hall 168 - Viper Manor Barracks 169 - Viper Manor Mess Hall 170 - Viper Manor Treasury 171 - Viper Manor Armament 172 - Viper Manor Jail Cells (Home) 173 - Viper Manor Jail Cells (Another) 174 - Viper Manor - Fargo's Cell 175 - Viper Manor - Interrogation Chamber (Home) 176 - Viper Manor - Interrogation Chamber (Another) 177 - Viper Manor Sewers - Main Complex (Home) 178 - Viper Manor Sewers - Main Complex (Another) 179 - Viper Manor Sewers - Pump Controls (Home) 180 - Viper Manor Sewers - Pump Controls (Another) 181 - Viper Manor Sewers - Entrance (Home) 182 - Viper Manor Sewers - Entrance (Another) 183 - Viper Manor - Bridge to Treasure Tower 184 - Viper Manor - Treasure Tower 185 - SCENE - Belthasar explains dimensions 186 - Viper Manor Balcony Edge (Night) 187 - Viper Manor - Jail Cell 188 - Viper Manor - Throne Room (After Invasion) 189 - Viper Manor Foyer (Escape from Porre) 190 - Viper Manor Stables Courtyard (Escape from Porre) 191 - Viper Manor Basement Hall (During Break-In) 192 - Viper Manor Foyer (During Break-In) 193 - Viper Manor Treasury (After Invasion?) 194 - Viper Manor Gates (After Invasion) 195 - Viper Manor Courtyard (After Invasion) 196 - Viper Manor Study (After Invasion) 197 - Viper Manor Gates (Dario's Restoration) (Home) 198 - Viper Manor Courtyard (Dario's Restoration) (Home) 199 - Viper Manor - Viper's Room (After Invasion) 200 - Viper Manor - Neo Epoch 201 - Viper Manor - Executive Wing (Disabled Exits) 202 - Viper Manor Mess Hall (After Invasion) 203 - Guldove Dock (Home) 204 - Guldove Dock (Before Going with Macha) (Another) 205 - Guldove Shop Exterior (Home) 206 - Guldove Shop Exterior (Another) 207 - Guldove - Macha's Tent Upper Exterior (Home) 208 - Guldove - Macha's Tent Upper Exterior (Another) 209 - Guldove - Chief's Tent Exterior (Home) 210 - Guldove - Chief's Tent Exterior (Another) 211 - Guldove - Doc's House (Home) 212 - Guldove - Doc's House (Another) 213 - Guldove - Doc's Beds (Home) 214 - Guldove - Doc's Beds (Another) 215 - Guldove - Element Shop (Home) 216 - Guldove - Element Shop (Another) 217 - Guldove Bar (Home) 218 - Guldove Bar (Another) 219 - Guldove - Macha's Tent (Home) 220 - Guldove - Macha's Tent (Another) 221 - Guldove - Macha's Tent Lower Level (Home) 222 - Guldove - Macha's Tent Lower Level (Another) 223 - Guldove - Chief's Tent (Home) 224 - Guldove - Chief's Tent (Another) 225 - Guldove - Doc's House (After Lynx) (Another) 226 - Guldove - Doc's Beds (After Lynx) (Home) 227 - SCENE - Discussion with Kid and Korcha after escape from Lynx 228 - Guldove Dock (Another) 229 - SCENE - Orlha battles Porre soldiers 230 - Hydra Marshes Entrance (Home) 231 - Hydra Marshes Entrance (Another) 232 - Hydra Marshes Northeast of Entrance (Home) 233 - Hydra Marshes Northeast of Entrance (Another) 234 - Hydra Marshes Upper Area (Home) 235 - Hydra Marshes Upper Area (Another) 236 - Hydra Marshes Northwest of Entrance (Home) 237 - Hydra Marshes Northwest of Entrance (Another) 238 - Hydra Marshes - Branches (Home) 239 - Hydra Marshes - Branches (Another) 240 - Hydra Marshes - Beeba Pad (Home) 241 - Hydra Marshes - Beeba Pad (Another) 242 - Hydra Marshes - Wingapede Pad (Home) 243 - Hydra Marshes - Wingapede Pad (Another) 244 - Hydra Marshes - Hollow Tree (Home) 245 - Hydra Marshes - Hollow Tree (Another) 246 - Hydra Marshes - Quadffid Pool (Home) 247 - Hydra Marshes - Quadffid Pool (Another) 248 - Hydra Marshes - Hydra Pool (Home) 249 - Hydra Marshes - Hydra Pool (Another) 250 - El Nido (Home) 251 - El Nido (Another) 252 - El Nido Main Island (Home) 253 - El Nido Main Island (Another) 254 - Dead Sea 255 - Sea of Eden (Defense Activated) 256 - Divine Dragon Falls Cave (Home) 257 - Divine Dragon Falls Cave (Another) 258 - Sea of Eden (Home) 259 - Sea of Eden (Chronopolis Exposed) (Another) 260 - Divine Dragon Falls (Home) 261 - Divine Dragon Falls (Another) 262 - S.S. Invincible Deck 263 - S.S. Invincible First Level (During Ghost Siege) 264 - S.S. Invincible Second Level 265 - S.S. Invincible Hull (During Ghost Siege) 266 - S.S. Invincible Kitchen 267 - S.S. Invincible Storage (During Ghost Siege) 268 - S.S. Invincible Cannon Hold 269 - S.S. Invincible Hull 270 - S.S. Invincible Hammocks 271 - S.S. Invincible Special Deck SCENE - Fargo reminisces 272 - S.S. Invincible Deck (With Ghost Ship) 273 - S.S. Invincible First Level 274 - S.S. Invincible Mess Hall 275 - S.S. Invincible First Level Beds 276 - S.S. Invincible Second Level Beds 277 - S.S. Invincible Storage 278 - S.S. Invincible - Captain's Quarters 279 - Hermit's Hideaway (Home) 280 - Hermit's Hideaway (Another) 281 - Hermit's Hideaway Interior (Home) 282 - Hermit's Hideaway Interior (Another) 283 - Hermit's Hideaway Interior (Another) 284 - Hermit's Hideaway (Home) 285 - Water Dragon Isle (Home) 286 - Water Dragon Isle (Another) 287 - Water Dragon Isle Fairy Tree (Dwarf Attack) (Home) 288 - Water Dragon Isle Fairy Tree (Another) 289 - Water Dragon Isle Interior (Dwarf Attack) (Home) 290 - Water Dragon Isle Falls (Dwarf Attack) (Home) 291 - Water Dragon Isle Water Dragon (Home) 292 - Water Dragon Isle Fairy Tree (Home) 293 - Water Dragon Isle Interior (Home) 294 - Water Dragon Isle Falls (Home) 295 - Water Dragon Isle Campfire SCENE - Kid talks to Serge 296 - SCENE - The fairies criticize the humans at sundown 297 - Mt. Pyre (Home) 298 - Mt. Pyre (Another) 299 - Mt. Pyre Second Area (Home) 300 - Mt. Pyre Second Area (Another) 301 - Mt. Pyre Third Area (Home) 302 - Mt. Pyre Third Area (Another) 303 - Mt. Pyre Slide Falls (Home) 304 - Mt. Pyre Slide Falls (Another) 305 - Mt. Pyre Lower Passage (Home) 306 - Mt. Pyre Lower Passage (Another) 307 - Mt. Pyre Dragon (Home) 308 - Mt. Pyre Dragon (Another) 309 - Mt. Pyre Slide Falls (Frozen) (Home) 310 - Mt. Pyre Slide Falls (Frozen) (Another) 311 - Fort Dragonia (Home) 312 - Fort Dragonia (Another) 313 - Fort Dragonia Main Bridge (Home) 314 - Fort Dragonia Main Bridge (Another) 315 - Fort Dragonia West Bridge (Home) 316 - Fort Dragonia West Bridge (Another) 317 - Fort Dragonia Northwest Bridge (Home) 318 - Fort Dragonia Northwest Bridge (Another) 319 - Fort Dragonia Northeast Bridge (Home) 320 - Fort Dragonia Northeast Bridge (Another) 321 - Fort Dragonia East Bridge (Home) 322 - Fort Dragonia East Bridge (Another) 323 - Fort Dragonia Lobby (Home) 324 - Fort Dragonia Lobby (Another) 325 - Fort Dragonia Northeast (Home) 326 - Fort Dragonia Northeast (Another) 327 - Fort Dragonia Northeast Second Area (Home) 327 - Fort Dragonia Northeast Second Area (Another) 329 - Fort Dragonia Northeast Third Area (Home) 330 - Fort Dragonia Northeast Third Area (Another) 331 - Fort Dragonia Northeast Crystal (Home) 332 - Fort Dragonia Northeast Crystal (Another) 333 - Fort Dragonia Northwest Area (Home) 334 - Fort Dragonia Northwest Area (Another) 335 - Fort Dragonia Northwest Right Room (Home) 336 - Fort Dragonia Northwest Right Room (Another) 337 - Fort Dragonia Northwest Left Room (Home) 338 - Fort Dragonia Northwest Left Room (Another) 339 - Fort Dragonia Northwest Crystal (Home) 340 - Fort Dragonia Northwest Crystal (Another) 341 - Fort Dragonia West Maze (Home) 342 - Fort Dragonia West Maze (Another) 343 - Fort Dragonia Dragon Tear Chamber (SCENE - Crystal activations) (Home) 344 - Fort Dragonia Dragon Tear Chamber (SCENE - Crystal activations) (Another) 345 - S.S. Zelbess Special Deck (SCENE - Nikki tells Kid about the Magical Dreamers) 346 - Fort Dragonia Dragon Tear Chamber with Broken Statues (SCENE - Karsh, ZOAH, and Marcy find General Viper) 347 - Fort Dragonia West Arrangement Room (Home) 348 - Fort Dragonia West Arrangement Room (Another) 349 - Fort Dragonia East Area (Home) 350 - Fort Dragonia East Area (Another) 351 - Fort Dragonia East Area Selection (Home) 352 - Fort Dragonia East Area Selection (Another) 353 - Fort Dragonia East Area Crystal (Home) 354 - Fort Dragonia East Area Crystal (Another) 355 - Fort Dragonia Central Elevator (Home) 356 - Fort Dragonia Central Elevator (Another) 357 - Fort Dragonia - Second Story Elevator Lobby (Home) 358 - Fort Dragonia - Second Story Elevator Lobby (Another) 359 - Fort Dragonia - Second Story Teleporter Room (Home) 360 - Fort Dragonia - Second Story Teleporter Room (Another) 361 - Fort Dragonia - Second Story Side-Staircase (Home) 362 - Fort Dragonia - Second Story Side-Staircase (Another) 363 - Fort Dragonia - Second Story Crystal (Home) 364 - Fort Dragonia - Second Story Crystal (Another) 365 - Fort Dragonia - Dragon Tear Chamber Station (Home) 366 - Fort Dragonia - Dragon Tear Chamber Station (Another) 367 - Fort Dragonia - Dragon Tear Chamber (Home) 368 - Fort Dragonia - Dragon Tear Chamber (SCENE - Serge confronts Lynx and Viper) (Another) 369 - Fort Dragonia Basement (Home) 370 - Fort Dragonia Basement (Another) 371 - Temporal Vortex 372 - Temporal Vortex - Sprigg's House 373 - Temporal Vortex - Confusion Complex 374 - Temporal Vortex - Chaos 375 - S.S. Zelbess Deck 376 - S.S. Zelbess First Level 377 - S.S. Zelbess Second Level 378 - S.S. Zelbess Inn 379 - S.S. Zelbess Restaurant 380 - S.S. Zelbess Demi-human Room 381 - S.S. Zelbess Hold 382 - S.S. Zelbess Hull (SCENE (05) - Party walks to boat with Magical Dreamers theme) 383 - S.S. Zelbess Comedy Backstage 384 - Crash 385 - S.S. Zelbess - Captain's Quarters 386 - S.S. Zelbess - Casino 387 - S.S. Zelbess - Magical Dreamers Stage (SCENE - Magical Dreamers concert) 388 - S.S. Zelbess - Magical Dreamers Ship Deck 389 - S.S. Zelbess - Magical Dreamers Ship - Nikki's Room 390 - S.S. Zelbess - Magical Dreamers Ship - Miki's Room 391 - S.S. Zelbess - Grand Slam 392 - S.S. Zelbess - Deck (After Marbule Failure) 393 - S.S. Zelbess - Hull (SCENE (05) - Demi-humans begin to row) 394 - SCENE - Magical Dreamers stage opens up to S.S. Zelbess 395 - S.S. Zelbess Inn Attic (SCENE - Demi-human manipulates Casino) 396 - Marbule (Before Restoration) (Home) 397 - Marbule (Another) 398 - Marbule - Black Dragon Cave (Home) 399 - Marbule - Black Dragon Cave (Another) 400 - Marbule - Chief's Cave (Home) 401 - Marbule - Chief's Cave (Another) 402 - Marbule - Witch Doctor's Cave (Home) 403 - Marbule - Witch Doctor's Cave (Another) 404 - Marbule - Bro. of G's Shop (Home) 405 - Marbule - Bro. of G's Shop (Disabled Exits) 406 - Marbule - Mermaid Pirate House (Home) 407 - Marbule - Mermaid Pirate House (Disabled Exits) 408 - Marbule - Child Demi-human's Cave 409 - Marbule (After Restoration) (Home) 410 - Death's Door 411 - Pearly Gates 412 - Earth Dragon Isle (Home) 413 - Earth Dragon Isle (Another) 414 - Earth Dragon Isle Underground (Home) 415 - Earth Dragon Isle Underground (Another) 416 - Earth Dragon Isle Sand Boil (Home) 417 - Earth Dragon Isle Sand Boil (Another) 418 - Earth Dragon Isle - Earth Dragon (Home) 419 - Earth Dragon Isle - Criosphinx (Another) 420 - Isle of the Damned (Home) 421 - Isle of the Damned (Another) 422 - Isle of the Damned Dragon Bones (Home) 423 - Isle of the Damned Dragon Bones (Another) 424 - Isle of the Damned WightKnight (Home) 425 - Isle of the Damned WightKnight (Another) 426 - Isle of the Damned Grave (Home) 427 - Isle of the Damned Grave (Another) 428 - SCENE - Karsh battles the corrupted Dario 429 - Crash (Forbidden Island (Home)?) 430 - Forbidden Island Cabin (Home) 431 - Forbidden Island (Another) 432 - Forbidden Island Cabin (Another) 433 - Sky Dragon Isle (Home) 434 - Sky Dragon Isle (Another) 435 - Sky Dragon Isle Stairway (Home) 436 - Sky Dragon Isle Stairway (Another) 437 - Sky Dragon Isle Summit (Home) 438 - Sky Dragon Isle Summit (Another) 439 - Crash 440 - Crash 441 - Black screen 442 - Crash 443 - El Nido Triangle (Home) 444 - El Nido Triangle (Another) 445 - El Nido Triangle First Area (Home) 446 - Crash 447 - El Nido Triangle Second Area (Home) 448 - Crash 449 - Crash 450 - Gaea's Navel (Home) 451 - Gaea's Navel (After Beating Monsters) (Home) 452 - Gaea's Navel Right from Entrance (Home) 453 - Gaea's Navel Right from Entrance (Another) 454 - Gaea's Navel Right from Last (Home) 455 - Gaea's Navel Right from Last (Another) 456 - Gaea's Navel Green Dragon (Home) 457 - Gaea's Navel Green Dragon (Another) 458 - Dead Sea - Highway Ruins -South- 459 - Dead Sea - Highway Ruins -North- 460 - Dead Sea - City Ruins 461 - Dead Sea - City Ruins - Lithosphere Investigation Report #27 462 - Dead Sea - Tower of Gheddon (SCENE - The party looks up and enters( 463 - Dead Sea - Tower of Gheddon Mall 464 - Dead Sea - Tower of Gheddon Transit 465 - Dead Sea - Tower of Gheddon Theater 466 - Dead Sea - Tower of Gheddon Ruins 467 - Dead Sea - Tower of Gheddon Distortion 468 - Dead Sea - Leene Square 469 - Dead Sea - Nadia's Bell 470 - Dead Sea Special Entrance (SCENE - The party enters the Dead Sea) 471 - Fate Distortion 472 - Marbule Coast (SCENE - The Sky Dragon drops the party off) 473 - Nadia's Bell (SCENE - FATE destroys the Dead Sea) 474 - Crash 475 - Crash 476 - Crash 477 - Chronopolis Lobby (SCENE (02) - Wazuki takes Serge) 478 - Black screen 479 - Crash 480 - Crash 481 - Crash 482 - Crash 483 - Crash 484 - Crash 485 - Crash 486 - Black screen 487 - Crash 488 - SCENE - General Kid ending (Arni) 489 - SCENE - General Kid ending (Viper Manor Executive Wing) 490 - SCENE - General Kid ending (Viper Manor Throne Room) 491 - Black screen 492 - SCENE - Onward, Dragoons! ending (Viper Manor Throne Room) 493 - SCENE - The True Hero ending (Termina - Lisa's Element Shop) 494 - SCENE - The Magical Dreamers ending (Magical Dreamers Stage) 495 - SCENE - The Magical Dreamers ending (Termina Dock) 496 - Black screen 497 - Crash 498 - SCENE - The True Hero ending (Fort Dragonia - Second Story Elevator Lobby) 499 - SCENE - The True Hero ending (Fort Dragonia - Dragon Tear Chamber Station) 500 - SCENE - Onward, Dragoons! ending (S.S. Invincible Special Deck) 501 - SCENE - Onward, Dragoons! ending (S.S. Invincible First Level) 502 - SCENE - Onward, Dragoons! ending (Marbule Witch Doctor's Cave) 503 - SCENE - The True Hero ending (Viper Manor Mess Hall) 504 - SCENE - New Beginnings ending (Marbule (After Restoration)) 505 - SCENE - New Beginnings ending (Pearly Gates) 506 - Black screen 507 - Black screen 508 - Crash 509 - Crash 510 - Crash
Appendix
Explanation of Obfuscation
Halkun of QHIMM.com explains the process of compressing files by narrating Square's probable actions for creating Final Fantasy VII.
- All uncompressed data was preloaded in a particular data structure (like how it was originally).
- Compiling - The executables are built and the compiled structure's length is recorded. These can be dynamic; my theory is that there's no sector data here.
- PSX data creation - The ANI, TIM, RSD, HRC, and all the other PSX data is created from source assets.
- Compression - Pass 1 - GZIP - All the files that are not sector critical are GZipped. Compressed and uncompressed lengths are recorded.
- Compression - Pass 2 - LZS - All the files that are going to be sector critical are compressed in LZS and their lengths recorded.
- Concentration - Headers are made for all the files that need to be stuck together. They are then done so. Sector locations are kept blank.
- File finalization - All files are manifested in their final form, minus sector information.
- Cool preburn - A disk image is created on a blank hard drive. Blank indexes are written first. Then, when a file is copied to this image, sector information is written in the files that need it, and recorded in the master index. Each file gets this treatment.
- Burn - The disk is mastered.
The most location-important files accumulate at the beginning of the data, and the index is usually first (or perhaps last on a disc).
From: Games
From: Modification
Thanks to halkun for explanation of Square practices