Skip to content

Latest commit

 

History

History
182 lines (157 loc) · 4.58 KB

cutseq_pak.asc

File metadata and controls

182 lines (157 loc) · 4.58 KB

PAK file format (TR4-TR5)

Overview

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.

Layout

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.

CUTSEQ file format (TR4-TR5)

Overview

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.

Layout

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;
}

Notes

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