TR4 and TR5 use a file format with the extension PAK
for certain files (mostly pictures). This file format is actually a container for raw binary content, compressed using zlib.
struct pak_file
{
uint32_t UncompressedSize; // Uncompressed size of data (4 bytes)
uint8_t CompressedData[]; // zlib-compressed data (read until EOF)
}
Note
|
The UncompressedSize field is used by the game to allocate the buffer for uncompressed data. Do not put a wrong value here, or it’ll result in unexpected and wrong behaviour.
|
The CUTSEQ.BIN
file is a file containing information about all the engine-rendered cutscenes (as opposite to FMVs, which are pre-rendered videos).
In TR4, this file is contained in a PAK file, whose format is described above, and the resulting file is called CUTSEQ.PAK
.
In TR5, like many other things (e.g. level files), the file is not compressed, and is called CUTSEQ.BIN
.
uint8_t DEL[8]; // "(C) DEL!", for Derek Leigh-Gilchrist
cutscene_header Cutscenes[N]; // N = 30 for TR4, 44 for TR5, 4 for Times Demo
uint8_t Padding[]; // Empty space between header and data
uint8_t CutsceneData[];
struct cutscene_header // 8 bytes
{
uint32_t Offset; // Offset relative to start of file
uint32_t Size; // Size in bytes
}
struct cutscene_data
{
uint16_t NumActors; // Actor 1 is always Lara (slot ID 0)
uint16_t NumFrames;
int32_t OriginX; // Origin coordinates are in TR world coordinates
int32_t OriginY; // Negative Y is up
int32_t OriginZ;
int32_t AudioTrackIndex; // -1 means no audio track
uint32_t CameraDataOffset;
actor_slot_header Actors[NumActors];
camera_data CameraData;
uint8_t Padding[];
uint8_t ActorData[];
uint8_t Padding[];
}
struct actor_slot_header // 8 bytes
{
uint32_t DataOffset;
uint16_t SlotNumber; // TR model slot ID number
uint16_t NumNodes; // Same as number of meshes in model
}
struct camera_data
{
position_header TargetHeader;
position_header CameraHeader;
packed_coord TargetPosition;
packed_coord CameraPosition;
}
struct actor_data
{
mesh_header Meshes[NumNodes];
mesh_data MeshData[NumNodes];
}
struct mesh_data
{
packed_coord PositionData;
packed_coord RotationData;
}
struct position_header // 14 bytes
{
int16_t StartX;
int16_t StartY;
int16_t StartZ;
uint16_t AxisBitsizes; // X = bits 14-11, Y = 9-6, Z = 4-1
uint16_t NumValuesX;
uint16_t NumValuesY;
uint16_t NumValuesZ;
}
struct rotation_header // 14 bytes
{
// 1024 = 360 degrees
int16_t StartX;
int16_t StartY;
int16_t StartZ;
uint16_t AxisBitsizes; // X = bits 14-11, Y = 9-6, Z = 4-1
uint16_t NumValuesX;
uint16_t NumValuesY;
uint16_t NumValuesZ;
}
struct packed_coord // (variable length)
{
dynamic Xaxis; // todo: explain better
dynamic Yaxis; // core design, why did you make this
dynamic Zaxis;
}
In TR4 CUTSEQ.PAK, DEL (Derek Leigh-Gilchrist) left a hidden message in the first Padding section:
Cutseq.JIZ , Compiled by Del using the one and only 'ASMLE.EXE' Ok, I`ve got about 1.5k of padding here, so enjoy my ramblings... Keep your greasy mits off my packed data... Greets to... Alex,Damon,Rich,Charlie,Jon,Dan,Dude,Martin,Jens,DaveS,DaveM,ZeoGrad and all the usual... Tombraider IV Delta-Packed Animation Data (C) 1999 Core Design. Sector padded for hotness... Format: dc.w num_actors dc.w num_frames dc.l orgx,orgy,orgz dc.l audio_track dc.l packed_camera_data_offset dc.l packed_actor_data_offset dc.w object_slot dc.w num_nodes nice eh? hack away my friends... NUDE CHEAT ALERT... NUDE CHEAT ALERT... maybe... EMAIL: [email protected] OR [email protected] Developer Credits: Coding: Del,Gibby,Chris,Rich & Tom Delta Compressor: MJ Animation: Jerr Art: Jibber,Pete,Phil,Andy,Rich,Jamie Sound: Pete FMV: Pete,Dave and some others... Thanks to... PsyQ,SCEE,MartinJ and the GNU people... Don`t forget, ** PC-Engine RULES ** BTW people, 30% of the entire game is MIPS. The rest is 'C' , but luckily GNU isn`t as dry as it used to be... Some decent(ish) links: http://www.nlights.demon.co.uk http://www.core-design.com http://www.hu6280.com http://www.geeknews.com http://www.hotmail.com http://www.hitbox.com http://www.tombraider.com http://www.ign64.com http://www.rareware.com http://www.eidos.com Special greet to my baby girl Abigail, and my Wife(?) Caroline... See you in TR5.... bwhahahah
TR5 CUTSEQ.BIN also contains a message:
'cutseq.asm' Compiled by Del - 18:08:53 Thursday 26th of October 2000