Directors Cut Wiki : FlmTemplate

DirectorsCutModdingFoundry Categories PageIndex RecentChanges RecentlyCommented Login/Register
Trail: FacialAnimations FileFormat FileFormats Flags3 FlmExtras FlmFormat FlmMainHeader FlmTemplate

This is a template for 010 Editor to interpret FLM files

FLM File Template

//--------------------------------------
//--- 010 Editor v2.1.3 Binary Template
//
// File: FLM Test
// Author: Glen Rickey
// Revision: 0.01
// Purpose: To Test Templates
//--------------------------------------

enum 	{ TYPE_0, TYPE_1, TYPE_2, TYPE_3, TYPE_4, TYPE_5, TYPE_6, TYPE_7, TYPE_8, TYPE_9};

struct linkref {
	int LinkedTo;
	int ActorIndex;
	int esize;
	};

struct link {
	int LinkedTo;
	};

struct Type0 {
	int loc3;
	float coords_x;
	float coords_y;
	float coords_z;
	float coords_rot;
	ubyte RefCount;
	ubyte loc8_1;
	ubyte loc8_2;
	ubyte loc8_3;
	int link1_count;
	int link2_count;
	int loc11;
	int loc12;
	int loc13;
	int loc14;
	int NextID;
	int loc16;
	int esize;

	local int i;
	for (i = 0; i < RefCount-1; i++)
		{
		linkref refs;
		}

	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		} 
	};


struct Type1 {
	int loc3;
	float actor_x;
	float actor_y;
	float actor_z;
	float actor_rot;
	ubyte RefCount;
	ubyte loc9;
	ubyte loc10;
	ubyte loc11;
	int link1_count;
	int link2_count;
	int loc14;
	int loc15;
	int SyncIndex;
	int loc17;
	int ActionTE;
	int loc19;
	int DevModeTE;
	int NextID;
	int loc22;
	int esize;
	
	local int i;
	for (i = 0; i < RefCount-1; i++)
		{
		linkref refs;
		}

	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		} 
	};

struct Type2 {
	int loc3;
	float lotview_x;
	float lotview_y;
	float lotview_z;
	float lotview_rot;
	ubyte RefCount;
	ubyte loc9;
	ubyte loc10;
	ubyte loc11;
	int link1_count;
	int link2_count;
	int loc14;
	int loc15;
	int loc16;
	float loc17;
	float start_x;
	float start_y;
	float start_z;
	float point1_x;
	float point1_y;
	float point1_z;
	float point2_x;
	float point2_y;
	float point2_z;
	float end_x;
	float end_y;
	float end_z;
	float Duration;
	int ActionTE;
	int TweenFlag;
	int NextID;
	int loc34;
	int esize;

	local int i;
	for (i = 0; i < RefCount-1; i++)
		{
		linkref refs;
		}

	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		} 
	};

struct Type3 {
	int loc3;
	float x;
	float y;
	float z;
	float rot;
	ubyte ActorCount;
	ubyte loc8_1;
	ubyte loc8_2;
	ubyte loc8_3;
	int loc9;
	int loc10;
	int loc11;
	int loc12;
	int loc13;
	int loc14;
	int SliderTE;
	ubyte BranchCount;
	ubyte loc17;
	ubyte loc18;
	ubyte loc19;
	ubyte loc20;
	ubyte loc21;
	ubyte loc22;
	ubyte loc23;
	ubyte loc24;
	ubyte loc25;
	ubyte loc26;
	ubyte loc27;

	local int i;
	for (i=0; i < ActorCount; i++)
		{
		linkref defaultbranch;
		}
	for (i=0; i < (ActorCount * BranchCount); i++)
		{
		linkref branch;
		}
	for (i=0; i < (ActorCount * BranchCount); i++)
		{
		float branchprobability;
		}

	};

struct Type4 {
	int loc3;
	float x;
	float y;
	float z;
	float rot;
	int loc8;
	int link1_count;
	int link2_count;
	int loc11;
	int loc12;
	int loc13;
	int loc14;
	byte loc15;
	byte loc16;
	byte loc17;
	byte loc18;
	int loc19;
	int loc20;
	int loc21;
	int loc22;
	int loc23;
	int loc24;
	uint16 loc25;
	uint16 loc26;
	float loc27;
	int LookAtID;
	int loc29;
	float X_1;
	float Y_1;
	float Z_1;
	uint16 loc33;
	uint16 loc34;
	uint16 loc35;
	uint16 loc37;
	uint16 loc38;
	uint16 loc40;
	int loc42;
	int NextID;
	int loc44;
	int esize;

	local int i;
	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		}
	};

struct Type5 {
	int loc3;
	int loc4;
	int NextID;
	int PropTE;
	int loc7;
	uint16 PropType;
	uint16 unkbool; 
	float proppos_x;
	float proppos_y;
	float proppos_z;
	float prop_rot_x;
	float prop_rot_y;
	float prop_rot_z;
	int esize;
	if (PropType>10)
		{
		float x;
		float y;
		float z;
		float rot;
		} ;	
			
	};

struct Type6 {
	int actortype;
	int loc4;
	int NextID;
	int CostumeTE;
	ubyte loc7;
	ubyte loc8;
	ubyte loc9;
	ubyte loc10;
	ubyte Gender; //2 = male extra? 3=female extra? 10=either extra? 19=male 22=female 26=either
	ubyte loc12;
	ubyte RequiredRole;
	ubyte GenreCount;
	float lotx;
	float loty;
	float lotz;
	float lotrot;
	int loc19;
	int loc20;
	ubyte StuntInfoTE;
	byte pad[3];
	
	if (Gender>10)
		{
		float x;
		float y;
		float z;
		float rot;
		} ;	
	
	local int i;
	for (i=0; i<GenreCount; i++)
	    {
	        int GenreTE;
	    }
	
	};

struct Type7 {
	int loc3;
	int loc4;
	int loc5;	
	int loc6;
	int loc7;
	ubyte loc8;
	ubyte loc9;
	ubyte loc10;
	ubyte loc11;
	int link1_count;
	int link2_count;
	int Duration;
	int loc15;
	int SyncIndex;
	int loc17;
	int loc18;
	float campos_x;
	float campos_y;
	float campos_z;
	float targetpos_x;
	float targetpos_y;
	float targetpos_z;
	float Clip;
	float Zoom;
	float Bank;
	ubyte motionflag;
	ubyte stillflag;
	ubyte transition;
	ubyte loc31;
	int NextID;
	int loc33;
	int esize;

	local int i;
	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		}

	};

struct Type7a {
	int loc3;
	int loc4;
	int loc5;	
	int loc6;
	int loc7;
	ubyte loc8;
	ubyte loc9;
	ubyte loc10;
	ubyte loc11;
	int link1_count;
	int link2_count;
	int Duration;
	int loc15;
	int SyncIndex;
	int loc17;
	int loc18;
	float campos_x;
	float campos_y;
	float campos_z;
	float targetpos_x;
	float targetpos_y;
	float targetpos_z;
	float Clip;
	float Zoom;
	float Bank;
	ubyte motionflag;
	ubyte stillflag;
	ubyte transition;
	ubyte loc31;
	int NextID;
	int loc33;
	int esize;
	
	int loc35;
	int loc36;
	
	linkref ref;

	local int i;
	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		}
	};

struct Type8 {
	int loc3;
	int loc4;
	int NextID;
	int loc6;
	int loc7;
	int16 loc8;
	int16 unkbool;
	int loc10;
	int loc11;
	int loc12;
	int loc13;
	int loc14;
	int loc15;
	int esize;
	float x;
	float y;
	float z;
	float rot;
	};

struct Type9 {
	int loc3;
	float x;
	float y;
	float z;
	float rot;
	int loc8;
	int link1_count;
	int link2_count;
	int loc11;
	int loc12;
	int loc13;
	int loc14;
	float loc15;
	float loc16;
	int loc17;
	int FacialExpTE;
	int ExpCtlID;
	int loc20;
	int loc21;
	float loc22;
	int sfxTE;
	int sfxModTE;
	int loc25;
	int loc26;
	int loc27;
	int NextID;
	int loc29;
	int esize;
	local int i;
	for (i=0; i < link1_count; i++)
		{
		link Link1;
		}
	for (i=0; i < link2_count; i++)
		{
		link Link2;
		}
	};

struct cc {
			int chunktype;	
			int chunksize;
			int ID;
			switch (chunktype) 
				{
				case TYPE_0:
					Type0 Type_0;
					break;
				case TYPE_1:
					Type1 Animation;
					break;
				case TYPE_2:
					Type2 MotionPath;
					break;
				case TYPE_3:
					Type3 Branch;
					break;
				case TYPE_4:
					Type4 Type_4;
					break;
				case TYPE_5:
					Type5 Prop;
					break;
				case TYPE_6:
					Type6 Actor;
					break;
				case TYPE_7:
					if (header.MagicNumber==18)
						Type7 Camera;
					else
						Type7a Camera;
					break;
				case TYPE_8:
					Type8 Type_8;
					break;
				case TYPE_9:
					Type9 SFX;
					break;
				}
	};

struct FlmFile {
	struct Header {
	int	OffsetToTxt;
	int	MagicNumber;
	int	TxtSize;
	int	CrewTE;

	int	GameTimeShotDesc;
	float	SPTimeStart;
	float	SPTimeEnd;
	float 	SPRaciness;

	int	SPNameTE;
	int	SPSisNameTE;
	int	SPDescTE;
	ubyte	SPCountGenre;
	ubyte 	SPCountTechnologies;
	ubyte	CountText;
	ubyte	CountSlider;

	uint16	TickTrailerStart;
	uint16	CountBoxes;

	ubyte	CountSyncs;
	struct Flags1 {
				ubyte	IsWorkInProgress	: 1;
				ubyte	ContainsSliderType	: 1;
				ubyte	ContainsExtraScenes	: 1;
				ubyte	MustHaveDolly		: 1;
				ubyte	MustHaveCrane		: 1;
				ubyte						: 0;
		} flags1;

	ubyte	CountObjects;
	ubyte	CountExtraScene;

	int	ScriptDataIndexText;


		
	} header;
local int i;
if (header.CountExtraScene > 0) 
	{
		for ( i = 0; i <header.CountExtraScene; i++)
		{
		int 	ExtraScenesTE;
		}
	}

if (header.SPCountTechnologies > 0) 
	{
		for ( i = 0; i <header.SPCountTechnologies; i++)
		{
		int 	TechTE;
		}
	}
if (header.SPCountGenre > 0) 
	{
		for ( i = 0; i <header.SPCountGenre; i++)
		{
		int 	GenresTE;
		}
	}

	int TEOList[header.CountText];

	struct {
		struct {
			string text;
			} TextElement[header.CountText]<optimize=false>;
		} TextElements;

	local quad pos;
	local int p;
	pos = FTell();
	p = (4 -(pos % 4)) % 4;
	byte pad[p]; //just need to snap to next 4-byte boundary

	struct {
		struct {
			int SyncTE;
			uint16 data1;
			uint16 data2;
			} Sync[header.CountSyncs]<optimize=false>;
		}Syncs;

	struct {
		struct {
			int SliderPosCount;
	        local int spc;
	        for (spc=0; spc < SliderPosCount; spc++)
	            {
	                int SliderPosTE;
	            }
			} Slider[header.CountSlider]<optimize=false>;

		struct {
			struct {
				int unk;
				} UnkNegOnes[header.CountSlider]<optimize=false>;
			} junk;
		}Sliders;

	local int ichunk;
	for (ichunk = 0; ichunk < header.CountObjects; ichunk++)
		{
		cc cchunk;
		};

	local int ibox;
	for (ibox = 0; ibox < header.CountBoxes; ibox++)
		{
		cc cbox;
		};
} flmfile;

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional Valid CSS Powered by Wikka Wakka Wiki 1.1.6.2
Page was generated in 0.1176 seconds