Also, I created a "bookmark" file for HexWorkshop a while ago that automatically structures most of the usermap for you (based on Shade's white paper), cutting the time it takes to mod by a lot.
Usermap Offsets Bookmark File for HexWorkshop
Instructions:
Download here: http://noscopecomics...ge-usermaps.hbk, and place in C:\Program Files\Break Point Software\Hex Workshop v5\Bookmarks\.
Then just open a usermap file (without extracting it using wxPirs) and on the bottom right click the open icon to browse for bookmarks.
A word of warning: these bookmarks are set up for a forge map that begins at offset 0xE000, but occasionally a forge map will start at offset 0xD000. If that is the case, then clearly the offsets will be off by 0x1000.
And now for the structure of the usermap file:
NOTE: I am NOT the author of this information -- ALL credit goes to Shade45 of HaloMods. He is a very nice guy and deserves our thanks.
public class BLF_Header : Chunk //48 Bytes
{
}
public class CHDR_Header : Chunk //264 Bytes
{
}
public class Header : Chunk //264 Bytes
{
[Size(4)]
public char[] MapV;
public int Size;
public short Unknown_8;
public short Unknown_10;
[Size(12)]
public byte[] Unknown_12;
[String(StringType.Unicode, 16)]
public string Varient_Name;
[String(128)]
public string Varient_Description;
[String(16)]
public string Varient_Author;
public int Unknown_200;
public int Unknown_204;
public int Unknown_208;
public int Unknown_212;
public int Unknown_216;
public int Entry_Size;
public int CON_File_Name_1;
public int CON_FIle_Name_2;
public int Unknown_232;
public int NULL;
public int Map_ID;
public int Unknown_244;
public int NULL_2;
public short NULL_3;
[Size(10)]
public byte[] Unknown_254;
}
public class Unknown_Block_1 : Chunk //56 Bytes
{
public short Unknown;
public short Unknown_2;
public byte Unknown_4;
public byte Spawned_Object_Count;
public short Unknown_6;
public int Map_ID;
public float World_Bounds_X_Min;
public float World_Bounds_X_Max;
public float World_Bounds_Y_Min;
public float World_Bounds_Y_Max;
public float World_Bounds_Z_Min;
public float World_Bounds_Z_Max;
public int Unknown_36;
public float Maximum_Budget;
public float Current_Budget;
public int Unknown_48;
public int Unknown_52;
}
public class Placement_Block : Chunk //84 Bytes * 640
{
public enum BlockType : short
{
Player_Spawn = 9, //9(hex)
Reserved = 41, //29(hex)
Added = 131, //83(hex)
Original = 137, //89(hex) - ignored and loaded straight from the map
Edited = 139, //8B(hex)
NULL = 0,
}
public int Block_Type; //0
#region Unused Data
[Size(8)]
public byte[] Unused_4; //4
#endregion
public int Tags_Index; //12 = (offset in index - index start offset) /12
public float X; //16
public float Y; //20
public float Z; //24
public float Yaw; //28
public float Pitch; //32
public float Roll; //36
public float Unknown_Rot_1; //40
public float Unknown_Rot_2; //44
public float Unknown_Rot_3; //48
#region Unused Data
[Size(8)]
public byte[] Unused_52; //52
#endregion
public byte Unknown_60; //60
public byte Unknown_61; //61
[Options(new string[]
{
"Unknown",
"Place At Start",
"Asymmetrical",
"Symmetrical",
#region Unused Flags
"Unused",
"Unused",
"Unused",
"Unused",
#endregion
})]
public Bitmask8 Flags; //62
public byte Team; //63
public byte Spare_Clips/Teleporter_Channel; //64
public byte Respawn_Time; //65
public short Unknown66; //66
#region Unused Data
[Size(16)]
public byte[] Unused_68; //68
#endregion
}
public class Unknown_Block_2 : Chunk //28 Bytes
{
public short Unknown;
public short Unknown_2;
public short Unknown_4;
public short Unknown_6;
public short Unknown_8;
public short Unknown_10;
public short Unknown_12;
public short Unknown_14;
public short Unknown_16;
public short Unknown_18;
public short Unknown_20;
public short Unknown_22;
public short Unknown_24;
public short Unknown_26;
}
public class Tag_Index_Entry : Chunk //12 Bytes * 256
{
[Ident(IdentType.ID)]
public TagReference Tag; //0
public byte Run_Time_Minimun; //4
public byte Run_Time_Maximun; //5
public byte Number_On_Map; //6
public byte Design_Time_Maximun; //7
public float Total_Cost; //8
}
public class Unknown_Block_3 : Chunk //4 Bytes *
{
public short Unknown;
public short Unknown_2;
}

Sign In
Register
Help
This topic is locked

MultiQuote
