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

namespace HaloPlugins.Xbox
{
    public class scnr
    {
       public List<MetaNode> Fields = new List<MetaNode>();

       public scnr()
       {
           Fields.AddRange(new MetaNode[] {
           new TagReference("Unused"),
           new Reflexive("Sky Palette", 8, new MetaNode[] { 
               new TagReference("Sky"),
           }),
           new HaloObjects.Enum("Map Type", new string[] { "Single_Player", "Multiplayer", "Main_Menu", "Shared", "Single_Player_Shared" }, 16),
           new Value("Local North", typeof(short)),
           new Unused(12),
           new Reflexive("Predicted Resources", 8, new MetaNode[] { 
               new Value("Bitmap Index", typeof(int)),
               new Ident("Bitmap"),
           }),
           new Unused(32),
           new Reflexive("Script Objects", 36, new MetaNode[] { 
               new String32("Name"),
               new HaloObjects.Enum("Type", new string[] { "Biped", "Vehicle", "Weapon", "Scenery", "Machine", "Control", "Sound_Scenery", "Obstacle" }, 16),
               new Value("Placement Index", typeof(short)),
           }),
           new Reflexive("Scenery", 92, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringID("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Unused(4),
               new Bitmask("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 HaloObjects.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloObjects.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Reflexive("Pathfinding References", 4, new MetaNode[] { 
                   new Value("BSP Index", typeof(short)),
                   new Value("Pathfinding Object Index", typeof(short)),
               }),
               new Bitmask("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new Reflexive("Scenery Palette", 40, new MetaNode[] { 
               new TagReference("Scenery"),
               new Unused(32),
           }),
           new Reflexive("Bipeds", 84, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringID("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Unused(4),
               new Bitmask("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 HaloObjects.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloObjects.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Bitmask("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new Reflexive("Biped Palette", 40, new MetaNode[] { 
               new TagReference("Biped"),
               new Unused(32),
           }),
           new Reflexive("Vehicles", 84, new MetaNode[] { //86
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringID("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Unused(4),
               new Bitmask("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 HaloObjects.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloObjects.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Bitmask("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new Reflexive("Vehicle Palette", 40, new MetaNode[] { 
               new TagReference("Vehicle"),
               new Unused(32),
           }),
           new Reflexive("Equipment", 56, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new Unused(2),
           }),
           new Reflexive("Equipment Palette", 40, new MetaNode[] { 
               new TagReference("Equipment"),
               new Unused(32),
           }),
           new Reflexive("Weapons", 84, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringID("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Unused(4),
               new Bitmask("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 HaloObjects.Enum("Pathfinding Policy", new string[] { "Tag_Default", "Dynamic", "Cut_Out", "Static", "None" }, 8),
               new HaloObjects.Enum("Lightmapping Policy", new string[] { "Tag_Default", "Dynamic", "Per_Vertex" }, 8),
               new Bitmask("Valid Multiplayer Games", new string[] { "CTF", "Slayer", "Oddball", "KOTH", "Juggernaut", "Territories", "Assault" }, 32),
           }),
           new Reflexive("Weapon Palette", 40, new MetaNode[] { 
               new TagReference("Weapon"),
               new Unused(32),
           }),
           new Reflexive("Power Groups", 40, new MetaNode[] { 
               new String32("Device"),
               new Value("Inital Value", typeof(float)),
               new Bitmask("Flags", new string[] { "Only_Use_Once" }, 32),
           }),
           new Reflexive("Machines", 72, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.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 Bitmask("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new Bitmask("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 Reflexive("Pathfinding References", 4, new MetaNode[] { 
                   new Value("BSP Index", typeof(short)),
                   new Value("Pathfinding Object Index", typeof(short)),
               }),
           }),
           new Reflexive("Machine Palette", 40, new MetaNode[] { 
               new TagReference("Machine"),
               new Unused(32),
           }),
           new Reflexive("Controls", 68, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.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 Bitmask("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new Bitmask("Flags", new string[] { "Usable_From_Both_Sides" }, 32),
               new Unused(2),
           }),
           new Reflexive("Control Palette", 40, new MetaNode[] { 
               new TagReference("Control"),
               new Unused(32),
           }),
           new Reflexive("Light Fixtures", 80, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.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 Bitmask("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 Reflexive("Light Fixtures Palette", 40, new MetaNode[] { 
               new TagReference("Light_Fixture"),
               new Unused(32),
           }),
           new Reflexive("Sound Scenery", 80, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new Value("Editor Folder", typeof(short)),
               new HaloObjects.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 Reflexive("Sound Scenery Palette", 40, new MetaNode[] { 
               new TagReference("Sound_Scenery"),
               new Unused(32),
           }),
           new Reflexive("Light Volumes Placement", 108, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.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 Bitmask("Flags", new string[] { "Initially_Open", "Initially_Off", "Can_Change_Only_Once", "Position_Reversed", "Not_Usable_From_Any_Side" }, 32),
               new HaloObjects.Enum("Type", new string[] { "Sphere", "Orthogonal", "Projective", "Pyramid" }, 16),
               new Bitmask("Flags", new string[] { "Custom_Geometry", "unused", "Cinematic_Only" }, 8),
               new HaloObjects.Enum("Lightmap Type", new string[] { "Use_Light_Tag_Setting", "Dynamic_Only", "Dynamic_Lightmaps", "Lightmaps_Only" }, 16),
               new Bitmask("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 Reflexive("Light Volumes Palette", 40, new MetaNode[] { 
               new TagReference("Light_Volume"),
               new Unused(32),
           }),
           new Reflexive("Player Starting Profile", 68, new MetaNode[] { 
               new String32("Name"),
               new Value("Starting Health Damage", typeof(float)),
               new Value("Starting Shield Damage", typeof(float)),
               new TagReference("Primary_Weapon"),
               new Value("Rounds loaded", typeof(short)),
               new Value("Rounds Total", typeof(short)),
               new TagReference("Secondary_Weapon"),
               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 Reflexive("Player Starting Locations", 52, new MetaNode[] { 
               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 HaloObjects.Enum("Team Designator", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 16),
               new Value("BSP Index", typeof(short)),
               new HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.Enum("Spawn Type 1", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloObjects.Enum("Spawn Type 2", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloObjects.Enum("Spawn Type 3", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new HaloObjects.Enum("Spawn Type 4", new string[] { "Both", "Initial_Only", "Respawn_Only" }, 16),
               new Unused(8),
               new HaloObjects.Enum("Campaign Player Type", new string[] { "Type0_Masterchief", "Type1_Dervish", "Type2_Chief_Multiplayer", "Type3_Elite_Multiplayer" }, 16),
               new Unused(6),
           }),
           new Reflexive("Trigger Volumes", 68, new MetaNode[] { 
               new StringID("Name"),
               new Value("Object Name", typeof(short)),
               new Unused(2),
               new StringID("Node Name"),
               new Unused(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 Unused(4),
           }),
           new Unused(8),
           new Reflexive("Netgame Flags", 32, new MetaNode[] { 
               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 HaloObjects.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 HaloObjects.Enum("Team Designator", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 16),
               new Value("Identifier", typeof(short)),
               new Bitmask("Flags", new string[] { "Multiple_Flag_Bomb", "Single_Flag_Bomb", "Neutral_Flag_Bomb" }, 16),
               new Unused(8),
           }),
           new Reflexive("Netgame Equipment", 144, new MetaNode[] { 
               new Bitmask("Flags", new string[] { "Levitate", "Destroy_Existing_On_New_Spawn" }, 32),
               new HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.Enum("Respawn Timer Starts", new string[] { "On_Pick_Up", "On_Body_Depletion" }, 16),
               new HaloObjects.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 Unused(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 Unused(48),
           }),
           new Reflexive("Starting Equipment", 156, new MetaNode[] { 
               new Bitmask("Starting Grenades", new string[] { "No_Grenades", "Plasma_Grenades" }, 32),
               new HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.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 Unused(48),
               new TagReference("Item_Collection_1"),
               new TagReference("Item_Collection_2"),
               new TagReference("Item_Collection_3"),
               new TagReference("Item_Collection_4"),
               new TagReference("Item_Collection_5"),
               new TagReference("Item_Collection_6"),
               new Unused(48),
           }),
           new Reflexive("BSP Switch Trigger Volumes", 14, new MetaNode[] { 
               new Value("Trigger Volume", typeof(short)),
               new Value("Source BSP", typeof(short)),
               new Value("Destination BSP", typeof(short)),
               new Unused(8),
           }),
           new Reflexive("Decals", 16, new MetaNode[] { 
               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 Reflexive("Decal Palette", 8, new MetaNode[] { 
               new TagReference("Decal"),
           }),
           new Reflexive("Detail Object Collection Palette", 8, new MetaNode[] { 
               new TagReference("Detail_Object_Collection"),
           }),
           new Reflexive("Actor Palette", 8, new MetaNode[] { 
               new TagReference("Actor"),
           }),
           new Reflexive("AI Squad Types", 36, new MetaNode[] { 
               new String32("Name"),
               new Value("Parent Squad Index", typeof(short)),
               new Value("Orders Index", typeof(short)),
           }),
           new Reflexive("AI Squads", 116, new MetaNode[] { 
               new String32("Name"),
               new Bitmask("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 HaloObjects.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 HaloObjects.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 HaloObjects.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 HaloObjects.Enum("Grenade Type", new string[] { "None", "Frag", "Plasma" }, 16),
               new Value("AI Orders Index", typeof(short)),
               new StringID("Vehicle Variant"),
               new Reflexive("Starting Loctations", 100, new MetaNode[] { 
                   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 HaloObjects.Enum("Vehicle Spawn", new string[] { "Default", "Passenger", "Gunner", "Driver", "Small_Cargo", "Large_Cargo", "No_Driver", "No_Vehicle" }, 16),
                   new HaloObjects.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 HaloObjects.Enum("Initial Movement Mode", new string[] { "Default", "Climbing", "Flying" }, 16),
                   new String32("Placement Script"),
                   new Value("(440)index", typeof(short)),
                   new Value("unknown", typeof(short)),
               }),
               new String32("Placement Script"),
               new Value("Placement Script", typeof(short)),
               new Value("Unknown", typeof(short)),
           }),
           new Reflexive("Zones", 56, new MetaNode[] { 
               new String32("Name"),
               new Bitmask("Flags", new string[] { "Manual_BSP_Index" }, 32),
               new Value("Manual BSP Index", typeof(short)),
               new Unused(2),
               new Reflexive("Firing Positions", 30, new MetaNode[] { //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 HaloObjects.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 Unused(2),
               }),
               new Reflexive("Areas", 136, new MetaNode[] { 
                   new String32("Name"),
                   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 Unused(48),
                   new Reflexive("Flight Hints", 4, new MetaNode[] { 
                       new Value("Flight Hint Index", typeof(short)),
                       new Value("Poit Index", typeof(short)),
                   }),
               }),
           }),
           new Reflexive("Mission Scenes", 24, new MetaNode[] { 
               new StringID("Name"),
               new Bitmask("Flags", new string[] { "Scene_Can_Play_Mutliple_Times", "Enable_Combat_Dialog" }, 32),
               new Reflexive("Trigger Conditions", 12, new MetaNode[] { 
                   new HaloObjects.Enum("Conbination Rule", new string[] { "OR", "AND" }, 32),
                   new Reflexive("Triggers", 8, new MetaNode[] { 
                       new Bitmask("Trigger Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
               new Reflexive("Roles", 16, new MetaNode[] { 
                   new StringID("name"),
                   new Value("Group Index", typeof(int)),
                   new Reflexive("Role Variants", 4, new MetaNode[] { 
                       new StringID("Variant Disignation"),
                   }),
               }),
           }),
           new Reflexive("Characters", 8, new MetaNode[] { 
               new TagReference("Character"),
           }),
           new Reflexive("AI Pathfinding Data", 0, new MetaNode[] {
           }),
           new Unused(32),
           new Reflexive("Script Syntax Data", 1, new MetaNode[] { 
               new Value("Data", typeof(byte)),
           }),
           new Reflexive("Script String Data", 1, 4, new MetaNode[] { 
               new Value("Character", typeof(byte)),
           }),
           new Reflexive("Scripts", 40, new MetaNode[] { 
               new String32("Name"),
               new HaloObjects.Enum("Script Type", new string[] { "Startup", "Dormant", "Continuous", "Static", "Stub" }, 16),
               new HaloObjects.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 Reflexive("Globals", 40, new MetaNode[] { 
               new String32("Name"),
               new HaloObjects.Enum("Type", new string[] { "Startup", "Dormant", "Continuous", "Static", "Stub" }, 16),
               new HaloObjects.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 Reflexive("References", 8, new MetaNode[] { 
               new TagReference("Reference"),
           }),
           new Unused(8),
           new Reflexive("Scripting Data(Script Locations)", 128, new MetaNode[] { 
               new Reflexive("Point Sets", 48, new MetaNode[] { 
                   new String32("Name"),
                   new Reflexive("Points", 104, new MetaNode[] { //76
                       new String32("Point name"),
                       new Unused(16),
                       new Value("X", typeof(float)),
                       new Value("Y", typeof(float)),
                       new Value("Z", typeof(float)),
                       new Value("Reference Frame", typeof(short)),
                       new Value("Surface Index", typeof(int)),
                       new Value("Facing Direction Y", typeof(float)),
                       new Value("Facing Direction P", typeof(float)),
                       new Unused(30),
                   }),
                   new Value("Bsp Index", typeof(int)), // These sizes may not be correct
                   new Value("Manual Reference Frame", typeof(short)),
                   new Bitmask("Flags", new string[] { "Manual Reference Frame", "Turret Deplaoyment" }, 16),
               }),
               new Unused(120),
           }),
           new Reflexive("Cutscene Flags", 56, new MetaNode[] { 
               new Unused(4),
               new String32("Name"),
               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 Reflexive("Cutscene Camera", 64, new MetaNode[] { 
               new Unused(4),
               new String32("Name"),
               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 Reflexive("Cutscene Titles", 36, new MetaNode[] { 
               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 HaloObjects.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 Unused(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"),
           new TagReference("Chapter_Title_Text"),
           new TagReference("HUD_Messages"),
           new Reflexive("Structure BSPs", 68, new MetaNode[] { 
               new Value("Structure BSP Offset", typeof(int)),
               new Value("Structure BSP Size", typeof(int)),
               new Value("Primary Magic Meta Offset", typeof(int)),
               new Unused(4),
               new TagReference("Structure_BSP"),
               new TagReference("Light_Map"),
               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 Unused(16),
               new Bitmask("Flags", new string[] { "Default_Sky_Enabled" }, 32),
               new Value("Default Sky", typeof(short)),
               new Unused(2),
           }),
           new Reflexive("Scenario Resources", 24, new MetaNode[] { 
               new Reflexive("References", 8, new MetaNode[] { 
                   new Unused(8), //new TagReference("Reference"),
               }),
               new Reflexive("Script Source", 8, new MetaNode[] { 
                   new Unused(8), //new TagReference("Reference"),
               }),
               new Reflexive("AI Resources", 8, new MetaNode[] { 
                   new Unused(8), //new TagReference("Reference"),
               }),
           }),
           new Reflexive("Scenario Resources", 16, new MetaNode[] { //40
               new Reflexive("Unused", 1, new MetaNode[] { 
                   new Value("Data", typeof(byte)),
               }),
               new Reflexive("Unused", 10, new MetaNode[] { 
                   new Value("Unique ID", typeof(int)),
                   new Value("Origin BSP", typeof(short)),
                   new HaloObjects.Enum("Type", new string[] {  }, 16),
                   new HaloObjects.Enum("Source", new string[] {  }, 16),
               }),
           }),
           new Unused(8),
           new Reflexive("Scenario Kill Triggers", 2, 4, new MetaNode[] { 
               new Value("Trigger Volume", typeof(short)),
           }),
           new Reflexive("HS Syntax Datums", 20, new MetaNode[] { 
               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 Reflexive("AI Orders", 124, new MetaNode[] { 
               new String32("Name"),
               new Value("Style Index", typeof(int)),
               new Bitmask("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 HaloObjects.Enum("Force Combat Status", new string[] { "None", "Asleep", "Idle", "Alert", "Combat" }, 32),
               new String32("Entry Script"),
               new Value("Squad Index", typeof(int)),
               new Value("Follow Radius", typeof(float)),
               new Reflexive("Primary Area Set", 8, new MetaNode[] { 
                   new HaloObjects.Enum("Area Type", new string[] { "Default", "Search", "Goal" }, 16),
                   new Value("Zone Index", typeof(int)),
                   new Value("Area Index", typeof(short)),
               }),
               new Reflexive("Secondary Area Set", 8, new MetaNode[] { 
                   new HaloObjects.Enum("Area Type", new string[] { "Default", "Search", "Goal" }, 16),
                   new Value("Zone Index", typeof(int)),
                   new Value("Area Index", typeof(short)),
               }),
               new Reflexive("Secondary Set Trigger", 12, new MetaNode[] { 
                   new HaloObjects.Enum("Combination Rule", new string[] { "OR", "AND" }, 16),
                   new HaloObjects.Enum("Dialogue Type", new string[] { "None", "Advance", "Charge", "Fall-back", "retreat", "Moveone", "Arrival", "Enter_Vehicle", "Exit_Vehicle", "Follow_Player", "Leave_Player", "Support" }, 16),
                   new Reflexive("Triggers", 8, new MetaNode[] { 
                       new Bitmask("Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
               new Reflexive("Special Movement", 4, new MetaNode[] { 
                   new Bitmask("Movement", new string[] { "Jump", "Climb", "Vault", "Mount", "Hoist", "Wall_Jump", "n/a" }, 32),
               }),
               new Reflexive("Order Endings", 20, new MetaNode[] { 
                   new Value("Next Oreder Index", typeof(int)),
                   new HaloObjects.Enum("Combination Rule", new string[] { "OR", "AND" }, 16),
                   new Value("Delay Time", typeof(float)),
                   new HaloObjects.Enum("Dialogue Type", new string[] { "None", "Advance", "Charge", "Fall-back", "retreat", "Moveone", "Arrival", "Enter_Vehicle", "Exit_Vehicle", "Follow_Player", "Leave_Player", "Support" }, 16),
                   new Reflexive("Triggers", 8, new MetaNode[] { 
                       new Bitmask("Flags", new string[] { "Not" }, 32),
                       new Value("Trigger Index", typeof(int)),
                   }),
               }),
           }),
           new Reflexive("AI Triggers", 48, new MetaNode[] { 
               new String32("Name"),
               new Bitmask("Flags", new string[] { "Latch_ON_when_Triggered" }, 32),
               new HaloObjects.Enum("Combination Rule", new string[] { "OR", "AND" }, 32),
               new Reflexive("Conditions", 56, new MetaNode[] { 
                   new HaloObjects.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 String32("Exit Condition Script"),
                   new Value("Trigger Volume Index", typeof(int)),
                   new Bitmask("Flags", new string[] { "NOT!" }, 32),
               }),
           }),
           new Reflexive("Background Sound Pallete", 100, new MetaNode[] { 
               new String32("Name"),
               new TagReference("Background_Sound"),
               new TagReference("Inside_Cluster_Sound"),
               new Value("Cutoff Distance", typeof(float)),
               new Bitmask("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 Unused(12),
               new Value("Interior Scale", typeof(float)),
               new Value("Portal Scale", typeof(float)),
               new Value("Exterior Scale", typeof(float)),
               new Unused(8),
               new Value("Interpolation Speed Per Sec", typeof(float)),
               new Unused(8),
           }),
           new Reflexive("Sound Environment Pallete", 72, new MetaNode[] { 
               new String32("Name"),
               new TagReference("Sound_Environment"),
               new Value("Cuttoff Distance", typeof(float)),
               new Value("Interpolation Speed Per Sec", typeof(float)),
               new Unused(24),
           }),
           new Reflexive("Weather Palette", 136, new MetaNode[] { 
               new String32("Name"),
               new TagReference("Weather_System"),
               new Unused(36),
               new TagReference("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 Unused(32),
           }),
           new Unused(40),
           new Reflexive("Scenario Clustor Data", 52, new MetaNode[] { 
               new TagReference("Unused"),
               new Reflexive("Background Sounds", 4, new MetaNode[] { 
                   new Value("Type Index", typeof(int)),
               }),
               new Reflexive("Sound Environments", 4, new MetaNode[] { 
                   new Value("Type Index", typeof(int)),
               }),
               new Value("BSP Checksum", typeof(int)),
               new Reflexive("Clustor Centroids", 12, new MetaNode[] { 
                   new Value("Centriod X", typeof(float)),
                   new Value("Centriod y", typeof(float)),
                   new Value("Centriod z", typeof(float)),
               }),
               new Reflexive("Weather Properties", 4, new MetaNode[] { 
                   new Value("Type Index", typeof(short)),
                   new Unused(2),
               }),
               new Reflexive("Atmospheric Fog Properties", 4, new MetaNode[] { 
                   new Value("Type Index", typeof(short)),
                   new Unused(2),
               }),
           }),
           new Unused(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 Reflexive("Spawn Data", 96, new MetaNode[] { 
               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 Unused(60),
               new Reflexive("Dynamic Spawn Overloads", 16, new MetaNode[] { 
                   new HaloObjects.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 Reflexive("Static Respawn Zones", 48, new MetaNode[] { 
                   new StringID("Name"),
                   new Bitmask("Relevant Team", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 32),
                   new Bitmask("Relevant Games", new string[] { "Slayer", "Oddball", "King_Of_The_Hill", "CTF", "Race", "Headhunter", "Juggernaut", "Territories" }, 32),
                   new Bitmask("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 Reflexive("Static Initial Spawn Zones", 48, new MetaNode[] { 
                   new StringID("Name"),
                   new Bitmask("Relevant Team", new string[] { "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Brown", "Pink", "Neutral" }, 32),
                   new Bitmask("Relevant Games", new string[] { "Slayer", "Oddball", "King_Of_The_Hill", "CTF", "Race", "Headhunter", "Juggernaut", "Territories" }, 32),
                   new Bitmask("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"),
           new Reflexive("Crates", 76, new MetaNode[] { 
               new Value("Type", typeof(short)),
               new Value("Name", typeof(short)),
               new Bitmask("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 Unused(2),
               new Value("Manual BSP Flags", typeof(short)),
               new Value("Unique ID", typeof(int)),
               new Value("Origin BSP", typeof(short)),
               new HaloObjects.Enum("Type", new string[] {  }, 16),
               new HaloObjects.Enum("Source", new string[] {  }, 16),
               new HaloObjects.Enum("BSP Policy", new string[] { "Default", "Always_Places", "Manual_BSP_Placement" }, 16),
               new StringID("Variant Name"),
               new Value("Editor Folder", typeof(short)),
               new Unused(4),
               new Bitmask("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 Reflexive("Crate Palette", 40, new MetaNode[] { 
               new TagReference("Crate"),
               new Unused(32),
           }),
           new TagReference("Global_Lighting"),
           new Reflexive("Atmospheric Fog Palette", 244, new MetaNode[] { 
               new StringID("Name"),
               new Unused(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 Unused(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 Unused(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 Unused(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 Unused(32),
               new TagReference("Patchy_Fog"),
               new Reflexive("Mixers", 8, new MetaNode[] { 
                   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 Bitmask("Camera Immersion Flags", new string[] { "Disable_Atmospheric_Fog", "Disable_Secondary_Fog", "Disable_Planar_Fog", "Invert_Planar_Fog_Priorites", "Disable_Water" }, 32),
           }),
           new Reflexive("Planar Fog Palette", 16, new MetaNode[] { 
               new StringID("Name"),
               new TagReference("Planar_Fog"),
               new Unused(4),
           }),
           new Reflexive("Creature Spawning", 132, new MetaNode[] { 
               new Unused(12),
               new Reflexive("Starting Location", 28, new MetaNode[] { 
                   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 Unused(20),
               new TagReference("Creature"),
               new Value("Easy Spawn Count", typeof(short)),
               new Value("Legendary Spawn Count", typeof(short)),
               new Unused(80),
           }),
           new TagReference("Subtitles"),
           new Unused(24),
           new Reflexive("Decorator Palette", 8, new MetaNode[] { 
               new TagReference("Decorator"),
           }),
           new Unused(8),
           new Reflexive("SBSP Lighting", 16, new MetaNode[] { 
               new TagReference("SBSP"),
               new Reflexive("Lighting Points", 12, new MetaNode[] { 
                   new Value("Position X", typeof(float)),
                   new Value("Position Y", typeof(float)),
                   new Value("Position Z", typeof(float)),
               }),
           }),
           new Unused(8),
           new Reflexive("Map Description", 24, new MetaNode[] { 
               new TagReference("Map_Description"),
               new Reflexive("Campaign Level Data", 2896, new MetaNode[] { 
                   new Value("Campaign ID", typeof(int)),
                   new Value("Map ID", typeof(int)),
                   new TagReference("Preview_Image"),
                   new Unicode64("English Name"),
                   new Unicode64("Japanese Name"),
                   new Unicode64("German Name"),
                   new Unicode64("French Name"),
                   new Unicode64("Spanish Name"),
                   new Unicode64("Italian Name"),
                   new Unicode64("Korean Name"),
                   new Unicode64("Chinese Name"),
                   new Unicode64("Portuguese Name"),
                   new Unicode256("English Description"),
                   new Unicode256("Japanese Description"),
                   new Unicode256("German Description"),
                   new Unicode256("French Description"),
                   new Unicode256("Spanish Description"),
                   new Unicode256("Italian Description"),
                   new Unicode256("Korean Description"),
                   new Unicode256("Chinese Description"),
                   new Unicode256("Portuguese Description"),
               }),
               new Reflexive("Multiplayer", 3172, new MetaNode[] { 
                   new Value("Map ID", typeof(int)),
                   new TagReference("Preview_Image"),
                   new Unicode64("English Name"),
                   new Unicode64("Japanese Name"),
                   new Unicode64("German Name"),
                   new Unicode64("French Name"),
                   new Unicode64("Spanish Name"),
                   new Unicode64("Italian Name"),
                   new Unicode64("Korean Name"),
                   new Unicode64("Chinese Name"),
                   new Unicode64("Portuguese Name"),
                   new Unicode256("English Description"),
                   new Unicode256("Japanese Description"),
                   new Unicode256("German Description"),
                   new Unicode256("French Description"),
                   new Unicode256("Spanish Description"),
                   new Unicode256("Italian Description"),
                   new Unicode256("Korean Description"),
                   new Unicode256("Chinese Description"),
                   new Unicode256("Portuguese Description"),
                   new String256("Scenario Path"),
                   new Value("Sort Order", typeof(int)),
                   new Bitmask("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"),
           new Unused(8),
           new Reflexive("Level Dialog Palette", 8, new MetaNode[] { 
               new TagReference("Level_Dialog"),
           }),
           new TagReference("Location_Names"),
           new Reflexive("Interpolators", 24, new MetaNode[] { 
               new StringID("Name"),
               new StringID("Accelerator Name"),
               new StringID("Multiplier Name"),
               new Reflexive("Function", 1, new MetaNode[] { 
                   new Value("Data", typeof(byte)),
               }),
               new Unused(4),
           }),
           new Unused(8),
           new Reflexive("Screen Effects", 36, new MetaNode[] { 
               new Unused(16),
               new TagReference("Screen_Effect"),
               new StringID("Name"),
               new Unused(4),
               new Value("Unknown", typeof(float)),
           }),
           new Reflexive("Predicted Resources", 4, new MetaNode[] { 
               new Ident("Resource"),
           }),
           });
       }
    }
}
