using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HaloPlugins.Xbox
{
    public class scnr : TagDefinition
    {
       public scnr() : base("scnr", "scenario", 992)
       {
           Fields.AddRange(new IMetaNode[] {
           new TagReference("Unused", "sbsp"),
           new TagBlock("Sky Palette", 8, 32, new IMetaNode[] { 
               new TagReference("Sky", "sky "),
           }),
           new HaloPlugins.Enum("Map Type", new string[] { "Single_Player", "Multiplayer", "Main_Menu", "Shared", "Single_Player_Shared" }, 16),
           new Value("Local North", typeof(short)),
           new Padding(12),
           new TagBlock("Predicted Resources", 8, 2048, new IMetaNode[] { 
               new Value("Bitmap Index", typeof(int)),
               new TagIndex("Bitmap", "****"),
           }),
           new Padding(32),
           new TagBlock("Script Objects", 36, 640, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new HaloPlugins.Enum("Type", new string[] { "Biped", "Vehicle", "Weapon", "Scenery", "Machine", "Control", "Sound_Scenery", "Obstacle" }, 16),
               new Value("Placement Index", typeof(short)),
           }),
           new TagBlock("Scenery", 92, 2000, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringId("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Padding(4),
               new Flags("Active Change Colors", new string[] { "Primary", "Secondary", "Tertiary", "Quaternary" }, 32),
               new Value("Primary Color R", typeof(byte)),
               new Value("Primary Color G", typeof(byte)),
               new Value("Primary Color B", typeof(byte)),
               new Value("Secondary Color R", typeof(byte)),
               new Value("Secondary Color G", typeof(byte)),
               new Value("Secondary Color B", typeof(byte)),
               new Value("Tertiary Color R", typeof(byte)),
               new Value("Tertiary Color G", typeof(byte)),
               new Value("Tertiary Color B", typeof(byte)),
               new Value("Quaternary Color R", typeof(byte)),
               new Value("Quaternary Color G", typeof(byte)),
               new Value("Quaternary Color B", typeof(byte)),
               new HaloPlugins.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloPlugins.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new TagBlock("Pathfinding References", 4, -1, new IMetaNode[] { 
                   new Value("BSP Index", typeof(short)),
                   new Value("Pathfinding Object Index", typeof(short)),
               }),
               new Flags("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new TagBlock("Scenery Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Scenery", "scen"),
               new Padding(32),
           }),
           new TagBlock("Bipeds", 84, 128, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringId("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Padding(4),
               new Flags("Active Change Colors", new string[] { "Primary", "Secondary", "Tertiary", "Quaternary" }, 32),
               new Value("Primary Color R", typeof(byte)),
               new Value("Primary Color G", typeof(byte)),
               new Value("Primary Color B", typeof(byte)),
               new Value("Secondary Color R", typeof(byte)),
               new Value("Secondary Color G", typeof(byte)),
               new Value("Secondary Color B", typeof(byte)),
               new Value("Tertiary Color R", typeof(byte)),
               new Value("Tertiary Color G", typeof(byte)),
               new Value("Tertiary Color B", typeof(byte)),
               new Value("Quaternary Color R", typeof(byte)),
               new Value("Quaternary Color G", typeof(byte)),
               new Value("Quaternary Color B", typeof(byte)),
               new HaloPlugins.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloPlugins.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Flags("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new TagBlock("Biped Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Biped", "bipd"),
               new Padding(32),
           }),
           new TagBlock("Vehicles", 84, 256, new IMetaNode[] { //86
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringId("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Padding(4),
               new Flags("Active Change Colors", new string[] { "Primary", "Secondary", "Tertiary", "Quaternary" }, 32),
               new Value("Primary Color R", typeof(byte)),
               new Value("Primary Color G", typeof(byte)),
               new Value("Primary Color B", typeof(byte)),
               new Value("Secondary Color R", typeof(byte)),
               new Value("Secondary Color G", typeof(byte)),
               new Value("Secondary Color B", typeof(byte)),
               new Value("Tertiary Color R", typeof(byte)),
               new Value("Tertiary Color G", typeof(byte)),
               new Value("Tertiary Color B", typeof(byte)),
               new Value("Quaternary Color R", typeof(byte)),
               new Value("Quaternary Color G", typeof(byte)),
               new Value("Quaternary Color B", typeof(byte)),
               new HaloPlugins.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloPlugins.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Flags("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new TagBlock("Vehicle Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Vehicle", "vehi"),
               new Padding(32),
           }),
           new TagBlock("Equipment", 56, 256, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Padding(2),
           }),
           new TagBlock("Equipment Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Equipment", "eqip"),
               new Padding(32),
           }),
           new TagBlock("Weapons", 84, 128, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringId("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Padding(4),
               new Flags("Active Change Colors", new string[] { "Primary", "Secondary", "Tertiary", "Quaternary" }, 32),
               new Value("Primary Color R", typeof(byte)),
               new Value("Primary Color G", typeof(byte)),
               new Value("Primary Color B", typeof(byte)),
               new Value("Secondary Color R", typeof(byte)),
               new Value("Secondary Color G", typeof(byte)),
               new Value("Secondary Color B", typeof(byte)),
               new Value("Tertiary Color R", typeof(byte)),
               new Value("Tertiary Color G", typeof(byte)),
               new Value("Tertiary Color B", typeof(byte)),
               new Value("Quaternary Color R", typeof(byte)),
               new Value("Quaternary Color G", typeof(byte)),
               new Value("Quaternary Color B", typeof(byte)),
               new HaloPlugins.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloPlugins.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Flags("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new TagBlock("Weapon Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Weapon", "weap"),
               new Padding(32),
           }),
           new TagBlock("Power Groups", 40, 128, new IMetaNode[] { 
               new ShortString("Device", StringType.Asci),
               new Value("Inital Value", typeof(float)),
               new Flags("Flags", new string[] { "Only_Use_Once" }, 32),
           }),
           new TagBlock("Machines", 72, 400, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Value("Power Group Chunk #", typeof(short)),
               new Value("Position Group Chunk #", typeof(short)),
               new Flags("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new Flags("Flags", new string[] { "Does_Not_Operate_Automatically", "One-Sided", "Never_Appears_Locked", "Opened_By_Melee_Attack", "One-Sided_For_Player", "Does_Not_Close_Automatically" }, 16),
               new TagBlock("Pathfinding References", 4, -1, new IMetaNode[] { 
                   new Value("BSP Index", typeof(short)),
                   new Value("Pathfinding Object Index", typeof(short)),
               }),
           }),
           new TagBlock("Machine Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Machine", "mach"),
               new Padding(32),
           }),
           new TagBlock("Controls", 68, 100, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Value("Power Group Chunk #", typeof(short)),
               new Value("Position Group Chunk #", typeof(short)),
               new Flags("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new Flags("Flags", new string[] { "Usable_From_Both_Sides" }, 32),
               new Padding(2),
           }),
           new TagBlock("Control Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Control", "ctrl"),
               new Padding(32),
           }),
           new TagBlock("Light Fixtures", 80, 500, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Value("Power Group Chunk #", typeof(short)),
               new Value("Position Group Chunk #", typeof(short)),
               new Flags("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new Value("Color R", typeof(short)),
               new Value("Color G", typeof(short)),
               new Value("Color B", typeof(short)),
               new Value("Intensity", typeof(float)),
               new Value("Falloff Angle (Degrees)", typeof(float)),
               new Value("Cutoff Angle (Degrees)", typeof(float)),
           }),
           new TagBlock("Light Fixtures Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Light_Fixture", "lifi"),
               new Padding(32),
           }),
           new TagBlock("Sound Scenery", 80, 256, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new HaloPlugins.Enum("Volume Type", new string[] { "Sphere", "Vertical_Cylinder" }, 16),
               new Value("Height", typeof(float)),
               new Value("Override Distance Bounds Lower", typeof(float)),
               new Value("Override Distance Bounds Upper", typeof(float)),
               new Value("Override Cone Angle Bounds Lower", typeof(float)),
               new Value("Override Cone Angle Bounds Upper", typeof(float)),
               new Value("Override Outer Cone Gain", typeof(float)),
           }),
           new TagBlock("Sound Scenery Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Sound_Scenery", "ssce"),
               new Padding(32),
           }),
           new TagBlock("Light Volumes Placement", 108, 500, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Value("Power Group Chunk #", typeof(short)),
               new Value("Position Group Chunk #", typeof(short)),
               new Flags("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new HaloPlugins.Enum("Type", new string[] { "Sphere", "Orthogonal", "Projective", "Pyramid" }, 16),
               new Flags("Flags", new string[] { "Custom_Geometry", "unused", "Cinematic_Only" }, 8),
               new HaloPlugins.Enum("Lightmap Type", new string[] { "Use_Light_Tag_Setting", "Dynamic_Only", "Dynamic_Lightmaps", "Lightmaps_Only" }, 16),
               new Flags("Lightmap Flags", new string[] { "Unused" }, 8),
               new Value("Lightmap Half Light Scale", typeof(float)),
               new Value("Lightmap Light Scale", typeof(float)),
               new Value("Target Point X", typeof(float)),
               new Value("Target Point Y", typeof(float)),
               new Value("Target Point Z", typeof(float)),
               new Value("Width", typeof(float)),
               new Value("Height Scale", typeof(float)),
               new Value("Field Of View", typeof(float)),
               new Value("Falloff Distance", typeof(float)),
               new Value("Cutoff Distance", typeof(float)),
           }),
           new TagBlock("Light Volumes Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Light_Volume", "ligh"),
               new Padding(32),
           }),
           new TagBlock("Player Starting Profile", 68, 256, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Value("Starting Health Damage", typeof(float)),
               new Value("Starting Shield Damage", typeof(float)),
               new TagReference("Primary_Weapon", "weap"),
               new Value("Rounds loaded", typeof(short)),
               new Value("Rounds Total", typeof(short)),
               new TagReference("Secondary_Weapon", "weap"),
               new Value("Rounds loaded", typeof(short)),
               new Value("Rounds Total", typeof(short)),
               new Value("Starting Fragmentation Grenade Count", typeof(byte)),
               new Value("Starting Plasma Grenade Count", typeof(byte)),
               new Value("Starting Type3 Grenade Count", typeof(byte)),
               new Value("Starting Type4 Grenade Count", typeof(byte)),
           }),
           new TagBlock("Player Starting Locations", 52, 256, new IMetaNode[] { 
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Facing Degrees", typeof(float)),
               new HaloPlugins.Enum("Team Designator", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 16),
               new Value("BSP Index", typeof(short)),
               new HaloPlugins.Enum("Game Type 1", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 2", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 3", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 4", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Spawn Type 1", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloPlugins.Enum("Spawn Type 2", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloPlugins.Enum("Spawn Type 3", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloPlugins.Enum("Spawn Type 4", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new Padding(8),
               new HaloPlugins.Enum("Campaign Player Type", new string[] { "Type0_Masterchief", "Type1_Dervish", "Type2_Chief_Multiplayer", "Type3_Elite_Multiplayer" }, 16),
               new Padding(6),
           }),
           new TagBlock("Trigger Volumes", 68, 256, new IMetaNode[] { 
               new StringId("Name"),
               new Value("Object Name", typeof(short)),
               new Padding(2),
               new StringId("Node Name"),
               new Padding(28),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Extents X", typeof(float)),
               new Value("Extents Y", typeof(float)),
               new Value("Extents Z", typeof(float)),
               new Padding(4),
           }),
           new Padding(8),
           new TagBlock("Netgame Flags", 32, 200, new IMetaNode[] { 
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Facing Degrees", typeof(float)),
               new HaloPlugins.Enum("Type", new string[] { "CTF_Flag_Spawn", "CTF_Flag_Return", "Assault_Bomb_Spawn", "Assault_Bomb_Return", "Oddball_Spawn", "unused", "Race_Checkpoint", "Teleporter_Source", "Teleporter_Destination", "Headhunter_Bin", "Territories_Flag", "King_Hill_0", "King_Hill_1_vertex", "King_Hill_2_vertex", "King_Hill_3_vertex", "King_Hill_4_vertex", "King_Hill_5_vertex", "King_Hill_6_vertex", "King_Hill_7_vertex" }, 16),
               new HaloPlugins.Enum("Team Designator", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 16),
               new Value("Identifier", typeof(short)),
               new Flags("Flags", new string[] { "Multiple_Flag_Bomb", "Single_Flag_Bomb", "Neutral_Flag_Bomb" }, 16),
               new Padding(8),
           }),
           new TagBlock("Netgame Equipment", 144, 100, new IMetaNode[] { 
               new Flags("Flags", new string[] { "Levitate", "Destroy_Existing_On_New_Spawn" }, 32),
               new HaloPlugins.Enum("Game Type 1", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 2", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 3", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 4", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new Value("Team Index", typeof(short)),
               new Value("Spawn Time Seconds", typeof(short)),
               new Value("Respawn on Empty Time", typeof(short)),
               new HaloPlugins.Enum("Respawn Timer Starts", new string[] { "On_Pick_Up", "On_Body_Depletion" }, 16),
               new HaloPlugins.Enum("Classifier", new string[] { "Weapon", "Primary_Light_Land", "Secondary_Light_Land", "Primary_Heavy_Land", "Primary_Flying", "Seconary_Heavy_Land", "Primary_Turret", "Secondary_Turret", "Grenade", "Powerup" }, 32),
               new Padding(40),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Orientation Yaw", typeof(float)),
               new Value("Orientation Pitch", typeof(float)),
               new Value("Orientation Roll", typeof(float)),
               new TagReference("Collection", "****"),
               new Padding(48),
           }),
           new TagBlock("Starting Equipment", 156, 200, new IMetaNode[] { 
               new Flags("Starting Grenades", new string[] { "No_Grenades", "Plasma_Grenades" }, 32),
               new HaloPlugins.Enum("Game Type 1", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 2", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 3", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new HaloPlugins.Enum("Game Type 4", new string[] { "None", "Capture_The_Flag", "Slayer", "Oddball", "King_Of_The_Hill", "Race", "Juggernaught", "Territories", "Assault", "All_Team_Game_Types", "", "", "All_Game_Types", "All_Except_CTF" }, 16),
               new Padding(48),
               new TagReference("Item_Collection_1", "itmc"),
               new TagReference("Item_Collection_2", "itmc"),
               new TagReference("Item_Collection_3", "itmc"),
               new TagReference("Item_Collection_4", "itmc"),
               new TagReference("Item_Collection_5", "itmc"),
               new TagReference("Item_Collection_6", "itmc"),
               new Padding(48),
           }),
           new TagBlock("BSP Switch Trigger Volumes", 14, 256, new IMetaNode[] { 
               new Value("Trigger Volume", typeof(short)),
               new Value("Source BSP", typeof(short)),
               new Value("Destination BSP", typeof(short)),
               new Padding(8),
           }),
           new TagBlock("Decals", 16, 65536, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Yaw", typeof(byte)),
               new Value("Pitch", typeof(byte)),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
           }),
           new TagBlock("Decal Palette", 8, 128, new IMetaNode[] { 
               new TagReference("Decal", "deca"),
           }),
           new TagBlock("Detail Object Collection Palette", 8, 32, new IMetaNode[] { 
               new TagReference("Detail_Object_Collection", "dobc"),
           }),
           new TagBlock("Actor Palette", 8, 50, new IMetaNode[] { 
               new TagReference("Actor", "styl"),
           }),
           new TagBlock("AI Squad Types", 36, 100, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Value("Parent Squad Index", typeof(short)),
               new Value("Orders Index", typeof(short)),
           }),
           new TagBlock("AI Squads", 116, 335, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Flags("Flags", new string[] { "Unused", "Never_Search", "Start_Timer_Immediately", "No_Timer,_Delay_Forever", "Magic_Sight_After_Timer", "Automatic_Migration", "DEPRECIATED", "MP_respawn_enabled", "Blind", "Deaf", "BrainDead", "3D_Firing_Positions", "Initally_Placed" }, 32),
               new HaloPlugins.Enum("Team Designator", new string[] { "Red_(Default)", "Blue_(Player)", "Yellow_(Human)", "Green_(Covinant)", "Purple_(Flood)", "Orange_(Sentinel)", "Brown_(Heritic)", "Pink_(Prophet)", "Neutral" }, 16),
               new Value("Parent Squad Index", typeof(short)),
               new Value("Squad Delay Time", typeof(float)),
               new Value("# of AI that spawn on Easy", typeof(short)),
               new Value("# of AI that spawn on Legendary", typeof(short)),
               new HaloPlugins.Enum("Vehicle Spawn", new string[] { "Nulled", "Spawn_In_Passenger", "Spawn_In_Gunner", "Spawn_In_Driver", "Spawn_Out_Of_Vehicle", "Spawn_Vehicle_Only", "Spawn_In_Passenger" }, 16),
               new HaloPlugins.Enum("Major Upgrade", new string[] { "Normal", "Few", "Many", "None", "All" }, 16),
               new Value("Vehicle", typeof(short)),
               new Value("Character", typeof(short)),
               new Value("Initial Zone Index", typeof(short)),
               new Value("Return Zone Index", typeof(short)),
               new Value("Primary Weapon", typeof(short)),
               new Value("Secondary Weapon", typeof(short)),
               new HaloPlugins.Enum("Grenade Type", new string[] { "None", "Frag", "Plasma" }, 16),
               new Value("AI Orders Index", typeof(short)),
               new StringId("Vehicle Variant"),
               new TagBlock("Starting Loctations", 100, 32, new IMetaNode[] { 
                   new StringId("Name"),
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
                   new Value("Reference Frame", typeof(short)),
                   new Value("Facing Direction Yaw", typeof(short)),
                   new Value("Facing Direction Pitch", typeof(float)),
                   new Value("There", typeof(short)),
                   new Value("are", typeof(short)),
                   new Value("flags", typeof(short)),
                   new Value("here", typeof(short)),
                   new Value("Character", typeof(short)),
                   new Value("Primary Weapon", typeof(short)),
                   new Value("Secondary Weapon", typeof(short)),
                   new Value("Unknown", typeof(short)),
                   new Value("Vehicle", typeof(short)),
                   new HaloPlugins.Enum("Vehicle Spawn", new string[] { "Default", "Passenger", "Gunner", "Driver", "Small_Cargo", "Large_Cargo", "No_Driver", "No_Vehicle" }, 16),
                   new HaloPlugins.Enum("Grenade Type", new string[] { "None", "Frag", "Plasma" }, 16),
                   new Value("Swarm Count", typeof(short)),
                   new StringId("Actor Variant Name"),
                   new StringId("Vehicle Variant Name"),
                   new Value("Initial Movement Distance", typeof(float)),
                   new Value("Emitter Vehicle Index", typeof(short)),
                   new HaloPlugins.Enum("Initial Movement Mode", new string[] { "Default", "Climbing", "Flying" }, 16),
                   new ShortString("Placement Script", StringType.Asci),
                   new Value("(440)index", typeof(short)),
                   new Value("unknown", typeof(short)),
               }),
               new ShortString("Placement Script", StringType.Asci),
               new Value("Placement Script", typeof(short)),
               new Value("Unknown", typeof(short)),
           }),
           new TagBlock("Zones", 56, 128, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Flags("Flags", new string[] { "Manual_BSP_Index" }, 32),
               new Value("Manual BSP Index", typeof(short)),
               new Padding(2),
               new TagBlock("Firing Positions", 30, 512, new IMetaNode[] { //32
                   new Value("Position (Local) X", typeof(float)),
                   new Value("Position (Local) Y", typeof(float)),
                   new Value("Position (Local) Z", typeof(float)),
                   new Value("Reference Frame", typeof(short)),
                   new HaloPlugins.Enum("Flags", new string[] { "Open", "Partial", "Closed", "Modile", "Wall_Lean", "Perch", "Ground_Point", "Dynamic_Cover_Point" }, 16),
                   new Value("Area Index", typeof(short)),
                   new Value("Clustor Index", typeof(short)),
                   new Value("Normal Y", typeof(float)),
                   new Value("Normal P", typeof(float)),
                   new Padding(2),
               }),
               new TagBlock("Areas", 136, 64, new IMetaNode[] { 
                   new ShortString("Name", StringType.Asci),
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
                   new Value("Unknown", typeof(float)),
                   new Value("Unknown", typeof(int)),
                   new Value("Unknown", typeof(float)),
                   new Value("Flags", typeof(int)),
                   new Value("and", typeof(int)),
                   new Value("short", typeof(int)),
                   new Value("right", typeof(int)),
                   new Value("here", typeof(int)),
                   new Value("somewhere", typeof(int)),
                   new Padding(48),
                   new TagBlock("Flight Hints", 4, -1, new IMetaNode[] { 
                       new Value("Flight Hint Index", typeof(short)),
                       new Value("Poit Index", typeof(short)),
                   }),
               }),
           }),
           new TagBlock("Mission Scenes", 24, 100, new IMetaNode[] { 
               new StringId("Name"),
               new Flags("Flags", new string[] { "Scene_Can_Play_Mutliple_Times", "Enable_Combat_Dialog" }, 32),
               new TagBlock("Trigger Conditions", 12, 1, new IMetaNode[] { 
                   new HaloPlugins.Enum("Conbination Rule", new string[] { "OR", "AND" }, 32),
                   new TagBlock("Triggers", 8, 10, new IMetaNode[] { 
                       new Flags("Trigger Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
               new TagBlock("Roles", 16, 10, new IMetaNode[] { 
                   new StringId("name"),
                   new Value("Group Index", typeof(int)),
                   new TagBlock("Role Variants", 4, 10, new IMetaNode[] { 
                       new StringId("Variant Disignation"),
                   }),
               }),
           }),
           new TagBlock("Characters", 8, 64, new IMetaNode[] { 
               new TagReference("Character", "char"),
           }),
           new TagBlock("AI Pathfinding Data", 0, 16, new IMetaNode[] {
           }),
           new Padding(32),
           new TagBlock("Script Syntax Data", 1, -1, new IMetaNode[] { 
               new Value("Data", typeof(byte)),
           }),
           new TagBlock("Script String Data", 1, -1, 4, new IMetaNode[] { 
               new Value("Character", typeof(byte)),
           }),
           new TagBlock("Scripts", 40, 1024, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new HaloPlugins.Enum("Script Type", new string[] { "Startup", "Dormant", "Continuous", "Static", "Stub" }, 16),
               new HaloPlugins.Enum("Return Type", new string[] { "Unparsed", "Special_Form", "Function_Name", "Passthrough", "Viod", "Boolean", "Real", "Short", "Long", "String", "Script", "Trigger_Volume", "Cutscene_Flag", "Cutscene_Camera_Point", "Cutscene_Title", "Cutscene_Recording", "Device_Group", "AI", "AI_Command_List", "Starting_Profile", "Conversation", "Navpoint", "Hud_Message", "Object_List", "Sound", "Effect", "Damage", "Looping_Sound", "Animation_Graph", "Actor_Variant", "Dammge_Effect", "Object_Definition", "Game_Difficulty", "Team", "AI_Default_State", "Actor_Type", "Hud_Corner", "Object", "Unit", "Vehicle", "Weapon", "Device", "Scenery", "Object_Name", "Unit_Name", "Vehicle_Name", "Weapon_Name", "Device_Name", "Scenery_Name" }, 16),
               new Value("Root Expression Index", typeof(int)),
           }),
           new TagBlock("Globals", 40, 256, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new HaloPlugins.Enum("Type", new string[] { "Startup", "Dormant", "Continuous", "Static", "Stub" }, 16),
               new HaloPlugins.Enum("Return Type", new string[] { "Unparsed", "Special_Form", "Function_Name", "Passthrough", "Viod", "Boolean", "Real", "Short", "Long", "String", "Script", "Trigger_Volume", "Cutscene_Flag", "Cutscene_Camera_Point", "Cutscene_Title", "Cutscene_Recording", "Device_Group", "AI", "AI_Command_List", "Starting_Profile", "Conversation", "Navpoint", "Hud_Message", "Object_List", "Sound", "Effect", "Damage", "Looping_Sound", "Animation_Graph", "Actor_Variant", "Dammge_Effect", "Object_Definition", "Game_Difficulty", "Team", "AI_Default_State", "Actor_Type", "Hud_Corner", "Object", "Unit", "Vehicle", "Weapon", "Device", "Scenery", "Object_Name", "Unit_Name", "Vehicle_Name", "Weapon_Name", "Device_Name", "Scenery_Name" }, 16),
               new Value("Initialization Expression Index", typeof(int)),
           }),
           new TagBlock("References", 8, 512, new IMetaNode[] { 
               new TagReference("Reference", "****"),
           }),
           new Padding(8),
           new TagBlock("Scripting Data(Script Locations)", 128, 1, new IMetaNode[] { 
               new TagBlock("Point Sets", 48, 200, new IMetaNode[] { 
                   new ShortString("Name", StringType.Asci),
                   new TagBlock("Points", 60, 20, new IMetaNode[] { //76
                       new ShortString("Point name", StringType.Asci),
                       new Value("X", typeof(float)),
                       new Value("Y", typeof(float)),
                       new Value("Z", typeof(float)),
                       new Value("Reference Frame", typeof(short)),
                       new Value("", typeof(short)),
                       new Value("Surface Index", typeof(int)),
                       new Value("Facing Direction Y", typeof(float)),
                       new Value("Facing Direction P", typeof(float)),
                   }),
                   new Value("Bsp Index", typeof(int)), // These sizes may not be correct
                   new Value("Manual Reference Frame", typeof(short)),
                   new Flags("Flags", new string[] { "Manual Reference Frame", "Turret Deplaoyment" }, 16),
               }),
               new Padding(120),
           }),
           new TagBlock("Cutscene Flags", 56, 512, new IMetaNode[] { 
               new Padding(4),
               new ShortString("Name", StringType.Asci),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Facing Yaw", typeof(float)),
               new Value("Facing Pitch", typeof(float)),
           }),
           new TagBlock("Cutscene Camera", 64, 512, new IMetaNode[] { 
               new Padding(4),
               new ShortString("Name", StringType.Asci),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Orientation Y", typeof(float)),
               new Value("Orientation P", typeof(float)),
               new Value("Orientation R", typeof(float)),
               new Value("Field of View", typeof(float)),
           }),
           new TagBlock("Cutscene Titles", 36, 128, new IMetaNode[] { 
               new StringId("Name"),
               new Value("Text Bounds On Screen Top", typeof(short)),
               new Value("Text Bounds On Screen Left", typeof(short)),
               new Value("Text Bounds On Screen Bottom", typeof(short)),
               new Value("Text Bounds On Screen Right", typeof(short)),
               new Value("String Index", typeof(short)),
               new HaloPlugins.Enum("Justification", new string[] { "Left", "Right", "Center" }, 8),
               new Value("Text Color A", typeof(byte)),
               new Value("Text Color R", typeof(byte)),
               new Value("Text Color G", typeof(byte)),
               new Value("Text Color B", typeof(byte)),
               new Value("Shadow Color A", typeof(byte)),
               new Value("Shadow Color R", typeof(byte)),
               new Value("Shadow Color G", typeof(byte)),
               new Value("Shadow Color B", typeof(byte)),
               new Padding(1),
               new Value("Fade In Time Seconds", typeof(float)),
               new Value("Up Time Seconds", typeof(float)),
               new Value("Fade Out Time Seconds", typeof(float)),
           }),
           new TagReference("Custom_Object_Names", "unic"),
           new TagReference("Chapter_Title_Text", "unic"),
           new TagReference("HUD_Messages", "hmt "),
           new TagBlock("Structure BSPs", 68, 16, new IMetaNode[] { 
               new Value("Structure BSP Offset", typeof(int)),
               new Value("Structure BSP Size", typeof(int)),
               new Value("Primary Magic Meta Offset", typeof(int)),
               new Padding(4),
               new TagReference("Structure_BSP", "sbsp"),
               new TagReference("Light_Map", "ltmp"),
               new Value("UNUSED Radiance Est Search", typeof(float)),
               new Value("UNUSED Luminels Per World", typeof(float)),
               new Value("Unused Output White Reference", typeof(float)),
               new Padding(16),
               new Flags("Flags", new string[] { "Default_Sky_Enabled" }, 32),
               new Value("Default Sky", typeof(short)),
               new Padding(2),
           }),
           new TagBlock("Scenario Resources", 24, 1, new IMetaNode[] { 
               new TagBlock("References", 8, 16, new IMetaNode[] { 
                   new Padding(8), //new TagReference("Reference"),
               }),
               new TagBlock("Script Source", 8, 8, new IMetaNode[] { 
                   new Padding(8), //new TagReference("Reference"),
               }),
               new TagBlock("AI Resources", 8, 2, new IMetaNode[] { 
                   new Padding(8), //new TagReference("Reference"),
               }),
           }),
           new TagBlock("Scenario Resources", 16, 16, new IMetaNode[] { //40
               new TagBlock("Unused", 1, -1, new IMetaNode[] { 
                   new Value("Data", typeof(byte)),
               }),
               new TagBlock("Unused", 10, 2048, new IMetaNode[] { 
                   new Value("Unique ID", typeof(int)),
                   new Value("Origin BSP", typeof(short)),
                   new HaloPlugins.Enum("Type", new string[] {  }, 16),
                   new HaloPlugins.Enum("Source", new string[] {  }, 16),
               }),
           }),
           new Padding(8),
           new TagBlock("Scenario Kill Triggers", 2, 256, 4, new IMetaNode[] { 
               new Value("Trigger Volume", typeof(short)),
           }),
           new TagBlock("HS Syntax Datums", 20, 36864, new IMetaNode[] { 
               new Value("Datum Header", typeof(short)),
               new Value("Script Index/Function Index/Chunk", typeof(short)),
               new Value("Type", typeof(short)),
               new Value("Flags", typeof(short)),
               new Value("Next Node Index", typeof(int)),
               new Value("Data", typeof(int)),
               new Value("Source Offset", typeof(int)),
           }),
           new TagBlock("AI Orders", 124, 300, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Value("Style Index", typeof(int)),
               new Flags("Flags", new string[] { "Locked", "Always_Active", "Debug_On", "Strict_Area_Def", "Follow_Closest_Player", "Follow_Squad", "Active_Camo", "Suppress_Combat_Until_Engaged", "Inhibit_Vehicle_Use" }, 32),
               new HaloPlugins.Enum("Force Combat Status", new string[] { "None", "Asleep", "Idle", "Alert", "Combat" }, 32),
               new ShortString("Entry Script", StringType.Asci),
               new Value("Squad Index", typeof(int)),
               new Value("Follow Radius", typeof(float)),
               new TagBlock("Primary Area Set", 8, 32, new IMetaNode[] { 
                   new HaloPlugins.Enum("Area Type", new string[] { "Default", "Search", "Goal" }, 16),
                   new Value("Zone Index", typeof(int)),
                   new Value("Area Index", typeof(short)),
               }),
               new TagBlock("Secondary Area Set", 8, 32, new IMetaNode[] { 
                   new HaloPlugins.Enum("Area Type", new string[] { "Default", "Search", "Goal" }, 16),
                   new Value("Zone Index", typeof(int)),
                   new Value("Area Index", typeof(short)),
               }),
               new TagBlock("Secondary Set Trigger", 12, 5, new IMetaNode[] { 
                   new HaloPlugins.Enum("Combination Rule", new string[] { "OR", "AND" }, 16),
                   new HaloPlugins.Enum("Dialogue Type", new string[] { "None", "Advance", "Charge", "Fall-back", "retreat", "Moveone", "Arrival", "Enter_Vehicle", "Exit_Vehicle", "Follow_Player", "Leave_Player", "Support" }, 16),
                   new TagBlock("Triggers", 8, 5, new IMetaNode[] { 
                       new Flags("Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
               new TagBlock("Special Movement", 4, -1, new IMetaNode[] { 
                   new Flags("Movement", new string[] { "Jump", "Climb", "Vault", "Mount", "Hoist", "Wall_Jump", "n/a" }, 32),
               }),
               new TagBlock("Order Endings", 20, 12, new IMetaNode[] { 
                   new Value("Next Oreder Index", typeof(int)),
                   new HaloPlugins.Enum("Combination Rule", new string[] { "OR", "AND" }, 16),
                   new Value("Delay Time", typeof(float)),
                   new HaloPlugins.Enum("Dialogue Type", new string[] { "None", "Advance", "Charge", "Fall-back", "retreat", "Moveone", "Arrival", "Enter_Vehicle", "Exit_Vehicle", "Follow_Player", "Leave_Player", "Support" }, 16),
                   new TagBlock("Triggers", 8, 10, new IMetaNode[] { 
                       new Flags("Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
           }),
           new TagBlock("AI Triggers", 48, 256, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new Flags("Flags", new string[] { "Latch_ON_when_Triggered" }, 32),
               new HaloPlugins.Enum("Combination Rule", new string[] { "OR", "AND" }, 32),
               new TagBlock("Conditions", 56, 5, new IMetaNode[] { 
                   new HaloPlugins.Enum("Rule Type", new string[] { "A_or_greater_alive", "A_or_fewer_alive", "x_or_greater_strength", "x_or_lesser_strength", "If_enemy_Sighted", "After_A_ticks", "If_alerted_by_Squad_A", "Script_Ref_True", "Script_Ref_False", "If_Player_in_Trigger_Volume", "If_ALL_Players_In_Trigger_Volume", "Combat_Status_A_or_more", "Combat_status_A_or_less", "Arrived", "In_Vehicle", "Sighted_Player", "A_or_greater_fighting", "A_or_fewer_fighting", "Player_within_X_world_Units", "Player_shot_more_than_X_Seconds_ago", "Game_safe_to_save" }, 32),
                   new Value("Squad Index", typeof(int)),
                   new Value("Squad Group Index", typeof(short)),
                   new Value("a", typeof(short)),
                   new Value("x", typeof(int)),
                   new ShortString("Exit Condition Script", StringType.Asci),
                   new Value("Trigger Volume Index", typeof(int)),
                   new Flags("Flags", new string[] { "NOT!" }, 32),
               }),
           }),
           new TagBlock("Background Sound Pallete", 100, 64, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new TagReference("Background_Sound", "lsnd"),
               new TagReference("Inside_Cluster_Sound", "lsnd"),
               new Value("Cutoff Distance", typeof(float)),
               new Flags("Scale Flags", new string[] { "Override_Default_Scale", "Use_Adjacent_Cluster_As_Portal_Scale", "Use_Adjacent_Cluster_As_Exterior_Scale", "Scale_With_Weather_Intensity" }, 32),
               new Padding(12),
               new Value("Interior Scale", typeof(float)),
               new Value("Portal Scale", typeof(float)),
               new Value("Exterior Scale", typeof(float)),
               new Padding(8),
               new Value("Interpolation Speed Per Sec", typeof(float)),
               new Padding(8),
           }),
           new TagBlock("Sound Environment Pallete", 72, 64, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new TagReference("Sound_Environment", "snde"),
               new Value("Cuttoff Distance", typeof(float)),
               new Value("Interpolation Speed Per Sec", typeof(float)),
               new Padding(24),
           }),
           new TagBlock("Weather Palette", 136, 32, new IMetaNode[] { 
               new ShortString("Name", StringType.Asci),
               new TagReference("Weather_System", "weat"),
               new Padding(36),
               new TagReference("Wind", "wind"),
               new Value("Wind Direction i", typeof(float)),
               new Value("Wind Direction j", typeof(float)),
               new Value("Wind Direction k", typeof(float)),
               new Value("Wind Magnitude", typeof(float)),
               new StringId("Wind Scale Function"),
               new Padding(32),
           }),
           new Padding(40),
           new TagBlock("Scenario Clustor Data", 52, 16, new IMetaNode[] { 
               new TagReference("Unused", "sbsp"),
               new TagBlock("Background Sounds", 4, 512, new IMetaNode[] { 
                   new Value("Type Index", typeof(int)),
               }),
               new TagBlock("Sound Environments", 4, 512, new IMetaNode[] { 
                   new Value("Type Index", typeof(int)),
               }),
               new Value("BSP Checksum", typeof(int)),
               new TagBlock("Clustor Centroids", 12, 512, new IMetaNode[] { 
                   new Value("Centriod X", typeof(float)),
                   new Value("Centriod y", typeof(float)),
                   new Value("Centriod z", typeof(float)),
               }),
               new TagBlock("Weather Properties", 4, 512, new IMetaNode[] { 
                   new Value("Type Index", typeof(short)),
                   new Padding(2),
               }),
               new TagBlock("Atmospheric Fog Properties", 4, 512, new IMetaNode[] { 
                   new Value("Type Index", typeof(short)),
                   new Padding(2),
               }),
           }),
           new Padding(36),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new Value("", typeof(int)),
           new TagBlock("Spawn Data", 96, 1, new IMetaNode[] { 
               new Value("Dynamic Spawn Lower Height", typeof(float)),
               new Value("Dynamic Spawn Upper Height", typeof(float)),
               new Value("Game Objective Reset Height", typeof(float)),
               new Padding(60),
               new TagBlock("Dynamic Spawn Overloads", 16, 32, new IMetaNode[] { 
                   new HaloPlugins.Enum("Overload Type", new string[] { "Enemy", "Friend", "Enemy_Vehicle", "Friendly_Vehicle", "Empty_Vehicle", "Oddball_Inclusion", "Oddball_Exclusion", "Hill_Inclusion", "Hill_Exclusion", "Last_Race_Flag", "Dead_Ally", "Controlled_Territory" }, 32),
                   new Value("Inner Radius", typeof(float)),
                   new Value("Outer Radius", typeof(float)),
                   new Value("Weight", typeof(float)),
               }),
               new TagBlock("Static Respawn Zones", 48, 128, new IMetaNode[] { 
                   new StringId("Name"),
                   new Flags("Relevant Team", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 32),
                   new Flags("Relevant Games", new string[] { "Slayer", "Oddball", "King_Of_The_Hill", "CTF", "Race", "Headhunter", "Juggernaut", "Territories" }, 32),
                   new Flags("Flags", new string[] { "Disabled_If_Flag_Home", "Disabled_If_Flag_Away", "Disabled_If_Bomb_Home", "Disabled_If_Bomb_Away" }, 32),
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
                   new Value("Lower Height", typeof(float)),
                   new Value("Upper Height", typeof(float)),
                   new Value("Inner Radius", typeof(float)),
                   new Value("Outer Radius", typeof(float)),
                   new Value("Weight", typeof(float)),
               }),
               new TagBlock("Static Initial Spawn Zones", 48, 128, new IMetaNode[] { 
                   new StringId("Name"),
                   new Flags("Relevant Team", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 32),
                   new Flags("Relevant Games", new string[] { "Slayer", "Oddball", "King_Of_The_Hill", "CTF", "Race", "Headhunter", "Juggernaut", "Territories" }, 32),
                   new Flags("Flags", new string[] { "Disabled_If_Flag_Home", "Disabled_If_Flag_Away", "Disabled_If_Bomb_Home", "Disabled_If_Bomb_Away" }, 32),
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
                   new Value("Lower Height", typeof(float)),
                   new Value("Upper Height", typeof(float)),
                   new Value("Inner Radius", typeof(float)),
                   new Value("Outer Radius", typeof(float)),
                   new Value("Weight", typeof(float)),
               }),
           }),
           new TagReference("Sound_Effect_Collection", "sfx+"),
           new TagBlock("Crates", 76, 1024, new IMetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Flags("Placement Flags", new string[] { "Not_Automatically", "Not_On_Easy", "Not_On_Normal", "Not_On_Hard", "Lock_Type_To_Env_Object", "Lock_Transform_To_Env_Object", "Never_Placed", "Lock_Name_to_Env_Object", "Create_At_Rest" }, 32),
               new Value("Position X", typeof(float)),
               new Value("Position Y", typeof(float)),
               new Value("Position Z", typeof(float)),
               new Value("Rotation Yaw", typeof(float)),
               new Value("Rotation Pitch", typeof(float)),
               new Value("Rotation Roll", typeof(float)),
               new Value("Scale", typeof(float)),
               new Padding(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloPlugins.Enum("Type", new string[] {  }, 16),
               new HaloPlugins.Enum("Source", new string[] {  }, 16),
               new HaloPlugins.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringId("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Padding(4),
               new Flags("Active Change Colors", new string[] { "Primary", "Secondary", "Tertiary", "Quaternary" }, 16),
               new Value("Primary Color R", typeof(byte)),
               new Value("Primary Color G", typeof(byte)),
               new Value("Primary Color B", typeof(byte)),
               new Value("Secondary Color R", typeof(byte)),
               new Value("Secondary Color G", typeof(byte)),
               new Value("Secondary Color B", typeof(byte)),
               new Value("Tertiary Color R", typeof(byte)),
               new Value("Tertiary Color G", typeof(byte)),
               new Value("Tertiary Color B", typeof(byte)),
               new Value("Quaternary Color R", typeof(byte)),
               new Value("Quaternary Color G", typeof(byte)),
               new Value("Quaternary Color B", typeof(byte)),
           }),
           new TagBlock("Crate Palette", 40, 256, new IMetaNode[] { 
               new TagReference("Crate", "bloc"),
               new Padding(32),
           }),
           new TagReference("Global_Lighting", "gldf"),
           new TagBlock("Atmospheric Fog Palette", 244, 127, new IMetaNode[] { 
               new StringId("Name"),
               new Padding(1),
               new Value("Atmospheric Fog Color R", typeof(byte)),
               new Value("Atmospheric Fog Color G", typeof(byte)),
               new Value("Atmospheric Fog Color B", typeof(byte)),
               new Value("Atmospheric Fog Spread Distance", typeof(float)),
               new Value("Atmospheric Fog Max Density", typeof(float)),
               new Value("Atmospheric Fog Start Distance", typeof(float)),
               new Value("Atmospheric Fog Opaque Distance", typeof(float)),
               new Padding(25),
               new Value("Secondary Fog Color R", typeof(byte)),
               new Value("Secondary Fog Color G", typeof(byte)),
               new Value("Secondary Fog Color B", typeof(byte)),
               new Value("Secondary Fog Max Density", typeof(float)),
               new Value("Secondary Fog Start Distance", typeof(float)),
               new Value("Secondary Fog Opaque Distance", typeof(float)),
               new Padding(69),
               new Value("Planar Color R", typeof(byte)),
               new Value("Planar Color G", typeof(byte)),
               new Value("Planar Color B", typeof(byte)),
               new Value("Planar Max Density", typeof(float)),
               new Value("Planar Override Amount", typeof(float)),
               new Value("Planar Min Distance Bias", typeof(float)),
               new Padding(17),
               new Value("Patchy Color R", typeof(byte)),
               new Value("Patchy Color G", typeof(byte)),
               new Value("Patchy Color B", typeof(byte)),
               new Value("Patchy Density", typeof(float)),
               new Value("Patchy Distance", typeof(float)),
               new Padding(32),
               new TagReference("Patchy_Fog", "fpch"),
               new TagBlock("Mixers", 8, 2, new IMetaNode[] { 
                   new StringId("Atmospheric Fog Source"),
                   new StringId("Interpolator"),
               }),
               new Value("Amount", typeof(float)),
               new Value("Thershold", typeof(float)),
               new Value("Brightness", typeof(float)),
               new Value("Gamma Power", typeof(float)),
               new Flags("Camera Immersion Flags", new string[] { "Disable_Atmospheric_Fog", "Disable_Secondary_Fog", "Disable_Planar_Fog", "Invert_Planar_Fog_Priorites", "Disable_Water" }, 32),
           }),
           new TagBlock("Planar Fog Palette", 16, 127, new IMetaNode[] { 
               new StringId("Name"),
               new TagReference("Planar_Fog", "fog "),
               new Padding(4),
           }),
           new TagBlock("Creature Spawning", 132, 20, new IMetaNode[] { 
               new Padding(12),
               new TagBlock("Starting Location", 28, 10, new IMetaNode[] { 
                   new Value("X", typeof(float)),
                   new Value("Y", typeof(float)),
                   new Value("Z", typeof(float)),
                   new Value("Unknown", typeof(float)),
                   new Value("Yaw", typeof(float)),
                   new Value("Pitch", typeof(float)),
                   new Value("Roll", typeof(float)),
               }),
               new Padding(20),
               new TagReference("Creature", "crea"),
               new Value("Easy Spawn Count", typeof(short)),
               new Value("Legendary Spawn Count", typeof(short)),
               new Padding(80),
           }),
           new TagReference("Subtitles", "unic"),
           new Padding(24),
           new TagBlock("Decorator Palette", 8, 32, new IMetaNode[] { 
               new TagReference("Decorator", "DECR"),
           }),
           new Padding(8),
           new TagBlock("SBSP Lighting", 16, 16, new IMetaNode[] { 
               new TagReference("SBSP", "sbsp"),
               new TagBlock("Lighting Points", 12, 32768, new IMetaNode[] { 
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
               }),
           }),
           new Padding(8),
           new TagBlock("Map Description", 24, 1, new IMetaNode[] { 
               new TagReference("Map_Description", "unic"),
               new TagBlock("Campaign Level Data", 2896, 20, new IMetaNode[] { 
                   new Value("Campaign ID", typeof(int)),
                   new Value("Map ID", typeof(int)),
                   new TagReference("Preview_Image", "bitm"),
                   new ShortString("English Name", StringType.Unicode),
                   new ShortString("Japanese Name", StringType.Unicode),
                   new ShortString("German Name", StringType.Unicode),
                   new ShortString("French Name", StringType.Unicode),
                   new ShortString("Spanish Name", StringType.Unicode),
                   new ShortString("Italian Name", StringType.Unicode),
                   new ShortString("Korean Name", StringType.Unicode),
                   new ShortString("Chinese Name", StringType.Unicode),
                   new ShortString("Portuguese Name", StringType.Unicode),
                   new LongString("English Description", StringType.Unicode),
                   new LongString("Japanese Description", StringType.Unicode),
                   new LongString("German Description", StringType.Unicode),
                   new LongString("French Description", StringType.Unicode),
                   new LongString("Spanish Description", StringType.Unicode),
                   new LongString("Italian Description", StringType.Unicode),
                   new LongString("Korean Description", StringType.Unicode),
                   new LongString("Chinese Description", StringType.Unicode),
                   new LongString("Portuguese Description", StringType.Unicode),
               }),
               new TagBlock("Multiplayer", 3172, 50, new IMetaNode[] { 
                   new Value("Map ID", typeof(int)),
                   new TagReference("Preview_Image", "bitm"),
                   new ShortString("English Name", StringType.Unicode),
                   new ShortString("Japanese Name", StringType.Unicode),
                   new ShortString("German Name", StringType.Unicode),
                   new ShortString("French Name", StringType.Unicode),
                   new ShortString("Spanish Name", StringType.Unicode),
                   new ShortString("Italian Name", StringType.Unicode),
                   new ShortString("Korean Name", StringType.Unicode),
                   new ShortString("Chinese Name", StringType.Unicode),
                   new ShortString("Portuguese Name", StringType.Unicode),
                   new LongString("English Description", StringType.Unicode),
                   new LongString("Japanese Description", StringType.Unicode),
                   new LongString("German Description", StringType.Unicode),
                   new LongString("French Description", StringType.Unicode),
                   new LongString("Spanish Description", StringType.Unicode),
                   new LongString("Italian Description", StringType.Unicode),
                   new LongString("Korean Description", StringType.Unicode),
                   new LongString("Chinese Description", StringType.Unicode),
                   new LongString("Portuguese Description", StringType.Unicode),
                   new LongString("Scenario Path", StringType.Asci),
                   new Value("Sort Order", typeof(int)),
                   new Flags("Flags", new string[] { "Unlockable" }, 32),
                   new Value("Max Teams None", typeof(byte)),
                   new Value("Max Teams CTF", typeof(byte)),
                   new Value("Max Teams Slayer", typeof(byte)),
                   new Value("Max Teams Oddball", typeof(byte)),
                   new Value("Max Teams KOTH", typeof(byte)),
                   new Value("Max Teams Race", typeof(byte)),
                   new Value("Max Teams Headhunter", typeof(byte)),
                   new Value("Max Teams Juggernaught", typeof(byte)),
                   new Value("Max Teams Territories", typeof(byte)),
                   new Value("Max Teams Assault", typeof(byte)),
                   new Value("Max Teams Stub 10", typeof(byte)),
                   new Value("Max Teams Stub 11", typeof(byte)),
                   new Value("Max Teams Stub 12", typeof(byte)),
                   new Value("Max Teams Stub 13", typeof(byte)),
                   new Value("Max Teams Stub 14", typeof(byte)),
                   new Value("Max Teams Stub 15", typeof(byte)),
               }),
           }),
           new TagReference("Territory_Location_Names", "unic"),
           new Padding(8),
           new TagBlock("Level Dialog Palette", 8, 1, new IMetaNode[] { 
               new TagReference("Level_Dialog", "mdlg"),
           }),
           new TagReference("Location_Names", "unic"),
           new TagBlock("Interpolators", 24, 16, new IMetaNode[] { 
               new StringId("Name"),
               new StringId("Accelerator Name"),
               new StringId("Multiplier Name"),
               new TagBlock("Function", 1, -1, new IMetaNode[] { 
                   new Value("Data", typeof(byte)),
               }),
               new Padding(4),
           }),
           new Padding(8),
           new TagBlock("Screen Effects", 36, 16, new IMetaNode[] { 
               new Padding(16),
               new TagReference("Screen_Effect", "egor"),
               new StringId("Name"),
               new Padding(4),
               new Value("Unknown", typeof(float)),
           }),
           new TagBlock("Predicted Resources", 4, 512, new IMetaNode[] { 
               new TagIndex("Resource", "****"),
           }),
           });
       }
    }
}
