These hold extra non-mesh and specific game information for meshes.
This is a partial template, there are some unfinished parts, particularly LOD.
Technical File Info
//--------------------------------------
//--- 010 Editor v2.1.3 Binary Template
//
// File: LH .inf file (ExtraInfo)
// Author: Glen Rickey
// Revision: 0.02
// Purpose: To Parse The Movies tm ExtraInfo (.inf) files
//--------------------------------------
#include "VecMatrix.bt"
#include "CompressedU16.bt"
enum
{
CE_HAS_BEEN_REMOVED,
CE_CHUNK_MORPH_BODY_PART,
CE_CHUNK_GAME_2DPOSITION,
CE_CHUNK_LANDSCAPE,
CE_CHUNK_LOD,
CE_CHUNK_HAIR,
CE_CHUNK_SET_VARIATION,
CE_CHUNK_CAMERAS,
CE_CHUNK_FIRE,
CE_CHUNK_MISC,
CE_CHUNK_FOG,
CE_CHUNK_ROOM,
CE_CHUNK_SPECIAL_POSITION,
CE_CHUNK_SCRIPTDATA,
};
// Basic chunks
struct cchunk
{
int32 type;
int32 chunksize;
};
// Define chunk parts
struct morphbodypart
{
int32 VertexCount;
int32 Unknown;
struct VertNorm
{
V3 Pos;
V3 Norm;
} VertNorms[VertexCount*3];
};
struct game2Dpos
{
int32 CountPos;
int32 ListPosMem;
struct G2DPos
{
V3 Pos;
char PosName[32];
} pos[CountPos];
};
struct landscape
{
};
// support structure for LOD
struct lodprimdata
{
int CountVertex;
int CountTriangle;
uint32 IdTriangles;
int ListTriangle;
};
struct lodprim
{
int Size;
int CountMaxVertex;
local int t;
local int MAX_COUNT_LOD;
MAX_COUNT_LOD=4;
for (t=0; t<MAX_COUNT_LOD; t++)
{
lodprimdata ListPrimData;
}
local int ListPrimTri;
local int tri;
for (t=0; t<MAX_COUNT_LOD; t++)
{
//RMU16(ListPrimData[t].ListTriangle, data, ListPrimData[t].CountTriangle*3);
ListPrimTri = ListPrimData[t].CountTriangle;
for (tri=0; tri < ListPrimTri*3; tri++)
{
U16F ListTriangle;
}
}
struct ri
{
uint16 ReindexData;
} ReIndexing[CountMaxVertex];
};
struct lod
{
int magicnum_2; // 2
int CountPrimitives;
lodprim LOD[4];
};
struct hair
{
int MagicNumber;
uint16 CountPrimitives;
struct
{
ubyte DontMorphMe : 1;
} Flags1;
ubyte ALIGN;
struct
{
U16F x;
U16F y;
} Coords[3];
struct CChunkHairPrim
{
int Size;
int CountVertex;
struct
{
U16F PosX;
U16F PosY;
} Pos;
struct CVertHair
{
int IndexMetrics[2];
V3 Coords [2];
} Infos[CountVertex];
} ListChunkPrim[CountPrimitives] <optimize=false>;
};
struct setvariation
{
};
struct cameras
{
uint32 RESERVED;
int CountCameras;
struct camlist
{
int camMem;
char Name[32];
struct camData
{
V3 CamLoc;
V3 CamTargLoc;
float FOV;
float Rotation;
float Unk;
} CamData;
} CamList[CountCameras];
};
struct fire
{
uint32 RESERVED;
int CountFire;
int Fires;
struct CFireLocation
{
char Name[32];
int CountLocation;
struct CLocation
{
V3 Position;
float Scale;
} Locations[CountLocation] <optimize=false>;
} Fires[CountFire];
};
struct misc
{
int RESERVED;
int TypeSoundProp;
};
struct fog
{
uint32 Reserved;
int RefCount;
int CountSprite;
V2 MinPos;
V2 MaxPos;
int ListPosMem;
int ListScaleMem;
int Obj3dMem;
V3
ListPos [CountSprite];
struct
{
float Scale;
} ListScale [CountSprite];
};
struct room
{
uint32 RESERVED;
char Name[32];
V3 TextTranslation;
float TextAngle;
V2 TextShape;
};
struct specialpos
{
char Name[32];
};
struct scriptdata
{
int32 RESERVED;
int32 ScriptLength;
int32 TextMem;
char ScriptData[ScriptLength];
};
//Main File Structure
struct extrainfo
{
struct exthead
{
uint32 magic;
uint32 CountChunk;
} head;
//read the next chunk
local int ichunk;
for (ichunk=0; ichunk<head.CountChunk; ichunk++)
{
struct cc
{
cchunk chunk;
switch (chunk.type)
{
case CE_CHUNK_MORPH_BODY_PART :
morphbodypart Morph;
break;
case CE_CHUNK_GAME_2DPOSITION :
game2Dpos Game2DPos;
break;
case CE_CHUNK_LANDSCAPE :
//landscape Land;
ubyte data[chunk.chunksize-8];
break;
case CE_CHUNK_LOD :
lod LOD;
break;
case CE_CHUNK_HAIR :
hair Hair;
break;
case CE_CHUNK_SET_VARIATION :
setvariation SetVariation;
break;
case CE_CHUNK_CAMERAS :
cameras Cameras;
break;
case CE_CHUNK_FIRE :
fire Fire;
break;
case CE_CHUNK_MISC :
misc Misc;
break;
case CE_CHUNK_FOG :
fog Fog;
//ubyte data[chunk.chunksize-8];
break;
case CE_CHUNK_ROOM :
room Room;
break;
case CE_CHUNK_SPECIAL_POSITION :
specialpos SpecialPosition;
break;
case CE_CHUNK_SCRIPTDATA :
scriptdata ScriptData;
break;
}
} CChunk;
}
} inf;