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, the model format is detailed byte-by-byte. Keep in mind that all data in PSX games are 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.
Overall Structure
A general overview of how a given battle model's various sections fit together:
MODEL HEADER *Section 1 Section 1 Header "Constructs" UV Map Vertex Pool VDDM (Vestigial Data that Doesn't Matter) *Section 2 (Skeleton) Section 2 Header Skeletal Units *Section 3 (Yet Uknown; affects model shading and placement on the battlefield) *Section 4 (Animations) *Section 5 (Uknown)[/pre] ==MODEL HEADER== <pre>#S #S #S #S S1 S1 S1 S1 - S2 S2 S2 S2 S3 S3 S3 S3 S4 S4 S4 S4 S5 S5 S5 S5 - S6 S6 S6 S6 EF EF EF EF Where... #S = Number of Sections in the model. S1 = Starting Offset of Section 1. S2 = Starting Offset of Section 2. S3 = Starting Offset of Section 3. S4 = Starting Offset of Section 4. S5 = Starting Offset of Section 5. S6 = Starting Offset of Section 6 (usually set to zero, making it de facto nonexistent). EF = End of File address.
Section 1
Section 1 is composed of a number of units we'll call "Constructs" for lack of a better term at the moment. Each "Construct" apparently ties together parts of the model's UV Map, Vertex Pool, the VDDM, and the skeleton defined in Section 2.
Section 1 Header
#C #C #C #C C1 C1 C1 C1 - C2 C2 C2 C2 ... ?? ?? ?? ?? ?? ?? ?? ?? Where... #C = Number of Constructs C1 = Starting Offset of the First Construct, relative to the beginning of Section 1. C2 = Starting Offset of the Second Construct, relative to the beginning of Section 1. ... = More starting offsets of additional Constructs, relative to the beginning of Section 1. ?? = There are four bytes of data that may be a checksum, followed by an additional four bytes of unknown purpose.
Section 2
Section 3
Section 4
Section 5
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.