The files are composed of blocks. Each block has its offset and size in the header, and are spaced 8 bytes per block.
Code: Select all
public class Header
{
public const string VBSP; //0
public const int EngineVersion; //4 - 19
public int EntityTableOffset; //8
public int EntityTableSize; //12
public long Null; //16
public int UnknownBlockOffset; //24
public int UnknownBlockSize; //28
public long Null; //32
public int CoordinateBlockOffset; //40
public int CoordinateBlockSize; //44
public long Null; //48
public int UnknownIndexOffset; //56
public int UnknownIndexSize; //60
public long Null; // 64
public int UnknownIndexOffset; //72
public int UnknownIndexSize; //76
public long Null; //80
public int UnknownTableOffset; //88
public int UnknownTableSize; //92
public long Null; //96
public int UnknownMetaTableOffset; //104
public int UnknownMetaTableSize; //108
public long Null; //112
public int PointerBlockOffset; //120
public int PointerBlockSize; //124
public long Null; //128
//Blocks I havent mapped yet
public int PhysicsBlockOffset; //424
public int PhysicsBlockSize; //428
public long Null; //432
//More Blocks I havent mapped
public int MaterialTableOffset; //696
public int MaterialTableSize; //700
public long Null; //704
public int MaterialTableIndexOffset; //712
public int MaterialTableIndexSize; //716
public long Null; //720
//A cuple more Blocks I havent Mapped
}Code: Select all
public class CoordinateBlock
{
public float X;
public float Y;
public float Z;
public int Ident;
}Code: Select all
public class UnknownIndexBlock1
{
public int Unknown1;
public int Unknown2;
public int Unknown3;
}Code: Select all
public class UnknownIndexBlock2
{
public int Unknown;
}Code: Select all
public class PointerBlockHeader
{
public int Unknown1;
public int Unknown2;
public int Unknown3;
}
public class PointerBlock
{
public int Ident1;
public int Unknown1;
public int Ident2;
public int Unknown2; //Size of something?
public int Unknown3; //Count of something
public int Ident3;
public int Identifier; //Increasment by 1
public long Unused; //Null
public int Identifier; //Increasment by 9
public int Unknown5;
}