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]