Header
Header Size = 2048 bytes
Code: Select all
public struct MapHeader
{
public char[4] head;
public int Version;
public int MapSize;
public byte[4] null;
public int IndexOffset;
public int MetaStart;
public int MetaSize;
public int IndexSize;
public int Unkown;
public char[30] BuildDate;
public int MapType;// 0 = SP 1 = MP 2 = MM 3 = S 4 = SPS - int32
public int Unknown;
public int always1;
public int SIDMetaTableOffset;
public int SIDCount;
public int SIDTableLength;
public int SIDIndexOffset;
public int SIDTable1Offset;
public int Unknown;// SID related??
public int Unknown;// Geometry/Cache related??
public int Unknown;// Geometry/Cache related??
public int Unknown;// Geometry/Cache related??
public int Unknown;// Geometry/Cache related??
public int Unknown;// Geometry/Cache related??
public int Unknown;// Geometry/Cache related??
public char[35] MapName;
public char[80] MapScenario;
public int ObjectCount;
public int FileTableOffset;
public int Unknown;// FileTableSize?
public int FileTableIndexOffset;
public int IndexToSomething;
public int Unknown;// 252 in MP null in all others
public int Unknown;
public int OffsetToSomething;
public int Unknown;
public char[4] Foot;
}
Header Length = 32
Code: Select all
public struct IndexHeader
{
public int IndexHeaderLength;
public int Const 120;
public int Const1472;
public int TagStart = IndexHeaderLength + IndexOffset;
public int MapMagic - (IndexOffset + 32);
public int ObjectCount;
public int TagStart;
TagStart = TagStart + 8
SecondaryMapMagic = TagStart - (IndexOffset + IndexSize)
}
Code: Select all
public struct H2Tag
{
public string TagPath;
public string TagClass;
public int MetaOffset;
public int MetaSize;
public int TagID;
}
public struct TagInfo
{
public char[4] TagClass;
public int TagID;
public int TagMetaOffser;
public int TagMetaSize;
}
Code: Select all
public struct Unicode
{
public int Offset;
public int ID;
}
public enum Languages //only 5 for vista
{
English,
German,
French,
Spanish,
Itlian
}
public struct UnicodeValuesinMatgMeta
{
//Start at Offset + 392
public int StringCount;
public int IndexSize;
public int IndexOffset;
public int FileTableOffset;
public int Unknown;
public long Null; //I think I did that right long = 8 bytes???
}
Code: Select all
//StringIDs now have a block of meta after the name, what that meta is/does I dont know
public struct SIDBlock
{
public int Offset;
public string FirstName;
public string SecondName;
public byte Length;
public short Index;
public byte[] Meta;
}