I need an up-to-date OOF description

For Descent, Descent II and Descent3 level editing and modification assistance.
Post Reply
User avatar
Diedel
D2X Master
D2X Master
Posts: 5278
Joined: Thu Nov 05, 1998 12:01 pm
Contact:

I need an up-to-date OOF description

Post by Diedel »

Does anybody have that?

Diedel
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Post by SuperSheep »

This is from D3, don't know if everything is the same...

This is copied and pasted from OOF Editor which was written in VB. If you need translation (which you shouldn't :P), I'd be happy to.

Code: Select all

***** OOF File Format *****

The beginning of every OOF file has a File Header which contains
the file ID and version number of the OOF. After that is a series
if chunks that each begin with a Chunk Header describing the type
of chunk.

// General Data Types
struct vector {
	float x;
	float y;
	float z;
}
struct RGB {
	byte red;
	byte green;
	byte blue;
}
struct FACE_VERT {
	int Index;		// Index of face vert
	float tu;		// Texture U mapping coordinate
	float tv;		// Texture V mapping coordinate
}
struct FACE {
    	vector normal;		// Faces normal
    	int numVerts;		// Number of verts on face
	int textured;		// Is this face textured? 0-No,
				// Anything else, yes
UNION {
	int textureID;		// Texture index(if textured<>0)
	RGB color;		// Color of face(if textured=0)
}
	FACE_VERT faceVerts[numVerts];	// Face vert data
	float x_diff;		// Used for lightmaps I believe
	float y_diff;		// ditto
}
struct SPCL_PT {
	int nameLen;		// Length of SPCL point Name
	char name[nameLen];	// SPCL point name
	int propLen;		// Length of SPCL point Property name
	char prop[propLen];	// Property Name
	vector pos;		// SPCL point position
	float radius;		// Radius of SPCL point
}
struct OOF_PT {
	int parent;		// Parent of Point
	vector pos;		// Position of Point
	vector dir;		// Direction of Point
}
struct WBAT_DATA {
	int numWBATGPNT;		// Number of Gunpoints
	int GPNTindex[numWBATGPNT];	// Gunpoint indexes
	int numWBATTuuret;		// Number of Turrets
	int turretIndex[numWBATTurret];	// Sub-Object index
}
struct TXTRdata {
	int nameLen;		// Length of Texture Name
	string name[nameLen];	// Texture name(Imagename)
}
struct PANI_FRAMES {
	int startTime;		// Start Time of frame
	vector pos;		// Position
}
struct RANI_FRAMES {
	int startTime;		// Start Time of frame
	vector axis;		// Axis of rotation
	int angle;		// Angle to rotate(0-65535=0-360 degrees)
}
struct RANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	RANI_FRAMES RANIFrames[numKey];	// RANI Frames data
}
struct PANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	PANI_FRAMES PANIFrames[numKey];	// PANI Frames data
}



// File Header
struct OOFHeader {
	char fileID(4);		// File ID
	int version;		// Version number
}

struct OOFChunk {
	char chunkID(4);	// Chunk ID
	int chunkLength;	// Length of Chunk
}

// OHDR = Object Data Chunk
struct ObjectData {
	int numSOBJ;		// Number of Sub-Objects in OOF
	float maxRadius;	// Max Radius of Model
	vector minBounding;	// Minimum bounding point for model
	vector maxBounding;	// Maximum bounding point for model
	int numDetailLevels;	// Number of detail levels in model
}

struct ObjectDetail {
	int detailLevel;	// Level of detail
	float depth;		// Depth in models
}

// SOBJ = Sub-Object Chunk
struct SOBJData {
	int Index;		// Sub-Objects index
	int parent;		// Sub-Objects parent index
	vector norm;		// norm for seperation plane(debugging)
	float d;		// norm d for seperation plane(debugging)
	vector pnt;		// pnt for seperation plane(debugging)
	vector offset;		// 3D offset from parent(pivot point)
	float radius;		// Radius of Sub-Object
	int treeOffset;		// Offset of tree data(not used)
	int dataOffset;		// Offset of the data(not used)
	vector geo_center;	// geometric center of this subobject.
				// In the same Frame Of Reference as
				// all other vertices in this submodel.
				// (Relative to pivot point)
	string Name;		// Name of Sub-Object(null terminated)
	string Property;	// Property Name of Sub-Object
				// (null terminated)
	int move_type;		// -1 if no movement, otherwise
				// rotational or positional movement
				// Not used
	int move_axis;		// Movement Axis(Axis to Rotate
				// or move around). Not used
	int numFSChunks;	// Number of freespace chunks
	int FSData[numFSChunks];	// Freespace data
	int numVerts;		// Number of vertices on Sub-Object
	vector vertex[numVerts];	// Vertex positions
	vector normal[numVerts];	// Vertex normals
	float alpha[numVerts];	// Vertex Alpha value. Only present
				// if version => 2300
	int numFaces;		// Number of faces on Sub-Object
	FACE faceData[numFaces];	// Face information
}

// SPCL - Special Point Chunk
struct SPCLData {
	int numSPCL;			// Number of Special Points
	SPCL_PT SPCLpoint[numSPCL];	// Special Point data
}

// ATCH - Attach Point Chunk
struct ATCHData {
	int numATCH;			// Number of Attach points
	OOF_PT pntData[numATCH];	// Attach Point data
}

// NATH - Attach Normal Point Chunk
struct NATHData {
	int numNATH;			// Number of Attach Normals
	OOF_PT pntData[numNATH];	// Attach Normal Point data
}

// GRND - Ground Point Chunk
struct GRNDData {
	int numGRND;			// Number of Ground points
	OOF_PT pntData[numGRND];	// Ground Point data
}

// GPNT - Gunpoint Chunk
struct GPNTData {
	int numGPNT;			// Number of Gunpoints
	OOF_PT pntData[numGPNT];	// Gunpoint data
}

// WBAT - Weapons Battery chunk
struct WBSData {
	int numWBAT;			// Number of Weapons Batteries
	WBAT_DATA wbatData[numWBAT];	// Weapon Battery data
}

// TXTR - Texture Chunk
struct textureData {
	int numTextures;		   // Number of textures
	TXTRdata textureData[numTextures]; // Texture data
}

// RANI, ANIM - Rotational Animation Chunk
struct RANIData {
	RANI_ANIM FrameData[numSOBJ];	// RANI Frames data
}

// PANI - Positional Animation Chunk
struct PANIData {
	PANI_ANIM FrameData[numSOBJ];	// PANI Frames data
}

// PINF - Information chunk
struct PINFData {
	char info[chunkLength];		// Information chunk data
}


// IDTA - Interpreter Data
??

// GRID - Grid Data
??
User avatar
aldel
DBB Ace
DBB Ace
Posts: 345
Joined: Sun May 28, 2000 2:01 am
Location: Boston, MA, USA
Contact:

Post by aldel »

This might be helpful. I added some notes to the OOF description (originally compiled by Gwar) when I was experimenting with it.

http://descent.aldel.com/oof.txt
Post Reply