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

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

        public phmo()
        {
            Fields.AddRange(new MetaNode[] {
           new Value("flags (unused)", typeof(float)),
           new Value("mass", typeof(float)),
           new Value("low freq. desactivation scale", typeof(float)),
           new Value("high freq. desactivation scale", typeof(float)),
           new Value("Unused", typeof(float)),
           new Value("Unused", typeof(float)),
           new Value("Unused", typeof(float)),
           new Value("Unused", typeof(float)),
           new Value("Unused", typeof(float)),
           new Value("Unused", typeof(float)),
           new Reflexive("Phantom types (Lift)", 60, new MetaNode[] { 
               new Bitmask("Flags: type?", new string[] { "generates_effect", "use_acc_as_force", "negates_gravity", "ignores_players", "Oignores_nonplayers", "ignores_bipeds", "ignores_vehicles", "ignores_weapons", "ignores_equipement", "ignores_garbage", "ignores_projectiles", "ignores_scenery", "ignores_machines", "ignores_controls", "ignores_light_fixtures", "ignores_sound_scenery", "ignores_crates", "ignores_creatures", "localizes_physics", "disable_linear_damping", "disable_angular_damping", "ignores_dead_bipeds" }, 32),
               new HaloObjects.Enum("minimum size", new string[] { "default", "tiny", "small", "medium", "large", "huge", "extra_huge" }, 16),
               new HaloObjects.Enum("maximum size", new string[] { "default", "tiny", "small", "medium", "large", "huge", "extra_huge" }, 16),
               new StringID("Marker name"),
               new StringID("alignment marker name"),
               new Value("hookes law e", typeof(float)),
               new Value("linear radius", typeof(float)),
               new Value("center acc", typeof(float)),
               new Value("center max vel", typeof(float)),
               new Value("axis acc", typeof(float)),
               new Value("axis max vel", typeof(float)),
               new Value("direction acc", typeof(float)),
               new Value("direction max vel", typeof(float)),
               new Value("alignement hookes law e", typeof(float)),
               new Value("alignement acc", typeof(float)),
               new Value("alignement max vel", typeof(float)),
           }),
           new Reflexive("Node Edges", 24, new MetaNode[] { 
               new StringID("Node A Index"),
               new StringID("Node B Index"),
               new Reflexive("Constriants", 12, new MetaNode[] { 
                   new HaloObjects.Enum("Type", new string[] {  }, 16),
                   new HaloObjects.Enum("Index", new string[] { "None" }, 16),
                   new Bitmask("Flags", new string[] { "Is_Rigid", "Disable_Effects" }, 32),
                   new Value("Friction", typeof(float)),
               }),
               new StringID("Node A Material"),
               new StringID("Node B Material"),
           }),
           new Reflexive("Rigid Bodies", 144, 16, new MetaNode[] { 
               new Value("Node Index", typeof(short)),
               new Value("Region Index", typeof(short)),
               new HaloObjects.Enum("Permutation", new string[] { "None" }, 16),
               new Value("unused", typeof(short)),
               new Value("Bounding Sphere Offset X", typeof(float)),
               new Value("Bounding Sphere Offset Y", typeof(float)),
               new Value("Bounding Sphere Offset Z", typeof(float)),
               new Value("Bounding Sphere Radius", typeof(float)),
               new Bitmask("Flags", new string[] { "No_Collisions_w/_Self", "Only_Collide_w/_environment", "Disable_Effects", "Does_not_Interact_w/_Environment", "Best_Early_Mover_Body", "Has_no_Phantom_Power_Version" }, 16),
               new HaloObjects.Enum("Motion Type", new string[] {  }, 16),
               new Value("unused", typeof(short)),
               new Value("No Phantom Power Alt Index", typeof(short)),
               new Value("size?", typeof(float)),
               new HaloObjects.Enum("minimum size", new string[] { "default", "tiny", "small", "medium", "large", "huge", "extra_huge" }, 32),
               new Value("size", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unused", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Inertia Tensor Scale", typeof(float)),
               new Value("Linear Damping", typeof(float)),
               new Value("Angular Damping", typeof(float)),
               new Value("Center of Mass Offset (I)", typeof(float)),
               new Value("Center of Mass Offset (J)", typeof(float)),
               new Value("Center of Mass Offset (K)", typeof(float)),
               new Value("shape type enum", typeof(byte)),
               new Value("shape type enum", typeof(byte)),
               new Value("unused", typeof(short)),
               new Value("shape enum", typeof(byte)),
               new Value("shape type enum", typeof(byte)),
               new Value("unused", typeof(short)),
               new Value("Mass kg", typeof(float)),
               new Value("Center of Mass (I)", typeof(float)),
               new Value("Center of Mass (J)", typeof(float)),
               new Value("Center of Mass (K)", typeof(float)),
               new Value("Intertia Tensor X (I)", typeof(float)),
               new Value("Intertia Tensor X (J)", typeof(float)),
               new Value("Intertia Tensor X (K)", typeof(float)),
               new Value("Intertia Tensor Y (I)", typeof(float)),
               new Value("Intertia Tensor Y (J)", typeof(float)),
               new Value("Intertia Tensor Y (K)", typeof(float)),
               new Value("Intertia Tensor Z (I)", typeof(float)),
               new Value("Intertia Tensor Z (J)", typeof(float)),
               new Value("Intertia Tensor Z (K)", typeof(float)),
               new Value("Bounding Sphere Pad", typeof(float)),
           }),
           new Reflexive("Materials", 12, new MetaNode[] { 
               new StringID("name"),
               new StringID("global material name"),
               new Value("phantom type(enum)", typeof(short)),
               new Bitmask("Flags", new string[] { "does_not_collide_with_fixed_bodies" }, 16),
           }),
           new Reflexive("Spheres (shape)", 128, 16, new MetaNode[] { 
               new StringID("name"),
               new Value("material", typeof(short)),
               new Value("flags (unused)", typeof(short)),
               new Value("relative mass scale", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("mass", typeof(float)),
               new Value("phantom (enum)", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("radius", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("radius", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("rotation i (i)", typeof(float)),
               new Value("rotation i (j)", typeof(float)),
               new Value("rotation i (k)", typeof(float)),
               new Value("Unused", typeof(float)),
               new Value("rotation j (i)", typeof(float)),
               new Value("rotation j (j)", typeof(float)),
               new Value("rotation j (k)", typeof(float)),
               new Value("Unused", typeof(float)),
               new Value("rotation k (i)", typeof(float)),
               new Value("rotation k (j)", typeof(float)),
               new Value("rotation k (k)", typeof(float)),
               new Value("Unused", typeof(float)),
               new Value("translation i", typeof(float)),
               new Value("translation j", typeof(float)),
               new Value("translation k", typeof(float)),
               new Value("Unused", typeof(float)),
           }),
           new Reflexive("Multi Spheres (shape)", 140, new MetaNode[] { 
               new StringID("name"),
               new Value("material", typeof(short)),
               new Value("flags (unused)", typeof(short)),
               new Value("relative mass scale", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("mass", typeof(float)),
               new Value("phantom (enum)", typeof(float)),
               new Value("size", typeof(float)),
               new Value("num spheres", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Value("sphere i", typeof(float)),
               new Value("sphere j", typeof(float)),
               new Value("sphere k", typeof(float)),
               new Unused(4),
           }),
           new Reflexive("Pills (shape)", 80, 16, new MetaNode[] { 
               new StringID("Name"),
               new Bitmask("Flags(unused)", new string[] {  }, 32),
               new Value("relative mass scale", typeof(float)),
               new Value("friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("phantom enum", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("radius", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("bottom i", typeof(float)),
               new Value("bottom j", typeof(float)),
               new Value("bottom k", typeof(float)),
               new Value("unknown", typeof(float)),
               new Value("top i", typeof(float)),
               new Value("top j", typeof(float)),
               new Value("top k", typeof(float)),
               new Value("unknown", typeof(float)),
           }),
           new Reflexive("Boxes (shape)", 144, 16, new MetaNode[] { 
               new StringID("name"),
               new StringID("material"),
               new Value("relative mass scale", typeof(float)),
               new Value("friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("phantom enum", typeof(float)),
               new Value("size", typeof(short)),
               new Value("count", typeof(short)),
               new Value("phantom", typeof(float)),
               new Value("size", typeof(short)),
               new Value("count", typeof(short)),
               new Value("radius", typeof(float)),
               new Value("half extens i", typeof(float)),
               new Value("half extens j scale", typeof(float)),
               new Value("half extens k scale", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("unused", typeof(float)),
               new Value("unused", typeof(float)),
               new Value("unused", typeof(float)),
               new Value("rotation i (i)", typeof(float)),
               new Value("rotation i (j)", typeof(float)),
               new Value("rotation i (k)", typeof(float)),
               new Value("unused", typeof(float)),
               new Value("rotation j (i)", typeof(float)),
               new Value("rotation j (j)", typeof(float)),
               new Value("rotation j (k)", typeof(float)),
               new Value("unused", typeof(float)),
               new Value("rotation k (i)", typeof(float)),
               new Value("rotation k (j)", typeof(float)),
               new Value("rotation k (k)", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("translation i", typeof(float)),
               new Value("translation j", typeof(float)),
               new Value("translation k", typeof(float)),
               new Value("Unused", typeof(float)),
           }),
           new Reflexive("Triangles (shape)", 76, new MetaNode[] { //74
               new StringID("name"),
               new StringID("material"),
               new Value("relative mass scale", typeof(float)),
               new Value("friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("phantom enum", typeof(float)),
               new Value("size", typeof(short)),
               new Value("count", typeof(short)),
               new Value("radius", typeof(float)),
               new Value("point a i", typeof(float)),
               new Value("point a j", typeof(float)),
               new Value("point a k", typeof(float)),
               new Value("point b i", typeof(float)),
               new Value("point b j", typeof(float)),
               new Value("point b k", typeof(float)),
               new Value("point c i", typeof(float)),
               new Value("point c j", typeof(float)),
               new Value("point c k", typeof(float)),
           }),
           new Reflexive("Polyhedra or Phmo parts", 256, 16, new MetaNode[] { 
               new StringID("name"),
               new Value("material (enum)", typeof(int)),
               new Value("flags (unused)", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("restitution", typeof(float)),
               new Value("volume", typeof(float)),
               new Value("mass", typeof(float)),
               new Value("phantom ", typeof(float)),
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("radius", typeof(float)),
               new Value("aabb half entents i", typeof(float)),
               new Value("aabb half entents j", typeof(float)),
               new Value("aabb half entents k", typeof(float)),
               new Value("aabb center i", typeof(float)),
               new Value("aabb center j", typeof(float)),
               new Value("aabb center k", typeof(float)),
               new Value("four vectors size", typeof(float)),
               new Value("four vectors capacity", typeof(float)),
               new Value("num vertices", typeof(float)),
               new Value("Unknown", typeof(float)),
               new HaloObjects.Enum("Phmo part proprieties", new string[] { "Unknown", "Unknown", "unknown", "Unknown", "Unknown", "Static(Unmovable)" }, 16),
               new Value("4", typeof(short)),
               new Value("num vertrices count", typeof(short)),
               new Value("6", typeof(byte)),
               new Value("7", typeof(byte)),
               new Value("Unused", typeof(float)),
               new Value("four vectors x (i)", typeof(float)),
               new Value("four vectors x (j)", typeof(float)),
               new Value("four vectors x (k)", typeof(float)),
               new Value("four vectors y (i)", typeof(float)),
               new Value("four vectors y (j)", typeof(float)),
               new Value("four vectors y (k)", typeof(float)),
               new Value("four vectors z (i)", typeof(float)),
               new Value("four vectors z (j)", typeof(float)),
               new Value("four vectors z (k)", typeof(float)),
               new Value("four vectors x (i)", typeof(float)),
               new Value("four vectors x (j)", typeof(float)),
               new Value("four vectors x (k)", typeof(float)),
               new Value("four vectors y (i)", typeof(float)),
               new Value("four vectors y (j)", typeof(float)),
               new Value("four vectors y (k)", typeof(float)),
               new Value("four vectors z (i)", typeof(float)),
               new Value("four vectors z (j)", typeof(float)),
               new Value("four vectors z (k)", typeof(float)),
               new Value("four vectors x (i)", typeof(float)),
               new Value("four vectors x (j)", typeof(float)),
               new Value("four vectors x (k)", typeof(float)),
               new Value("four vectors y (i)", typeof(float)),
               new Value("four vectors y (j)", typeof(float)),
               new Value("four vectors y (k)", typeof(float)),
               new Value("four vectors z (i)", typeof(float)),
               new Value("four vectors z (j)", typeof(float)),
               new Value("four vectors z (k)", typeof(float)),
               new Value("four vectors x (i)", typeof(float)),
               new Value("four vectors x (j)", typeof(float)),
               new Value("four vectors x (k)", typeof(float)),
               new Value("four vectors y (i)", typeof(float)),
               new Value("four vectors y (j)", typeof(float)),
               new Value("four vectors y (k)", typeof(float)),
               new Value("four vectors z (i)", typeof(float)),
               new Value("four vectors z (j)", typeof(float)),
               new Value("four vectors z (k)", typeof(float)),
               new Value("plane equation size", typeof(short)),
               new Value("2", typeof(short)),
               new Value("3", typeof(byte)),
               new Value("Something Count?", typeof(byte)),
               new Value("3", typeof(short)),
               new Value("Planes equation capacity", typeof(short)),
               new Value("6", typeof(short)),
               new Value("Planes count", typeof(short)),
               new Value("3", typeof(short)),
           }),
           new Reflexive("Polyhedron Four Vectors", 48, new MetaNode[] { 
               new Value("Length Vector i", typeof(float)),
               new Value("Length Vector j", typeof(float)),
               new Value("Length Vector k", typeof(float)),
               new Value("Length Vector w", typeof(float)),
               new Value("Width Vector i", typeof(float)),
               new Value("Width Vector j", typeof(float)),
               new Value("Width Vector k", typeof(float)),
               new Value("Width Vector w", typeof(float)),
               new Value("Height Vector i", typeof(float)),
               new Value("Height Vector j", typeof(float)),
               new Value("Height Vector k", typeof(float)),
               new Value("Height Vector w", typeof(float)),
           }),
           new Reflexive("Polyhedron Planes Equations", 16, new MetaNode[] { 
               new Value("X", typeof(float)),
               new Value("y", typeof(float)),
               new Value("z", typeof(float)),
               new Value("d", typeof(float)),
           }),
           new Reflexive("Mass Distributions", 48, new MetaNode[] { 
               new Value("center of mass i", typeof(float)),
               new Value("center of mass j", typeof(float)),
               new Value("center of mass k", typeof(float)),
               new Value("inertia tensor i (i)", typeof(float)),
               new Value("inertia tensor i (j)", typeof(float)),
               new Value("inertia tensor i (k)", typeof(float)),
               new Value("inertia tensor j (i)", typeof(float)),
               new Value("inertia tensor j (j)", typeof(float)),
               new Value("inertia tensor j (k)", typeof(float)),
               new Value("inertia tensor k (i)", typeof(float)),
               new Value("inertia tensor k (j)", typeof(float)),
               new Value("inertia tensor k (k)", typeof(float)),
           }),
           new Reflexive("Lists", 48, new MetaNode[] { 
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("child shapes size", typeof(float)),
               new Value("child shapes  capacity", typeof(float)),
               new Value("shape type", typeof(short)),
               new Value("shape", typeof(short)),
               new Value("collision filter", typeof(float)),
               new Value("shape type", typeof(short)),
               new Value("shape", typeof(short)),
               new Value("collision filter", typeof(float)),
               new Value("shape type", typeof(short)),
               new Value("shape", typeof(short)),
               new Value("collision filter", typeof(float)),
               new Value("shape type", typeof(short)),
               new Value("shape", typeof(short)),
               new Value("collision filter", typeof(float)),
           }),
           new Reflexive("List shapes", 8, new MetaNode[] { 
               new HaloObjects.Enum("shape type", new string[] { "Box", "Polyhedron" }, 16),
               new Value("shape", typeof(short)),
               new Value("collision filter", typeof(float)),
           }),
           new Reflexive("MOPPS", 24, new MetaNode[] { 
               new Value("size", typeof(float)),
               new Value("count", typeof(float)),
               new Value("list (enum)", typeof(float)),
               new Value("code offset", typeof(float)),
               new Value("mopp codes bytes", typeof(float)),
               new Value("Unknown", typeof(float)),
           }),
           new Reflexive("MOPPS", 1, 16, new MetaNode[] { 
               new Value("mopp codes bytes", typeof(byte)),
           }),
           new Reflexive("Hinge Constraints", 120, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
           }),
           new Reflexive("Ragdoll Constraints", 148, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
               new Value("min twist", typeof(float)),
               new Value("max twist", typeof(float)),
               new Value("min cone", typeof(float)),
               new Value("max cone", typeof(float)),
               new Value("min plane", typeof(float)),
               new Value("max plane", typeof(float)),
               new Value("max friction torque", typeof(float)),
           }),
           new Reflexive("Regions", 12, new MetaNode[] { 
               new StringID("name"),
               new Reflexive("Permutations", 12, 4, new MetaNode[] { 
                   new StringID("name"),
                   new Reflexive("Rigid Bodies", 2, 4, new MetaNode[] { 
                       new Value("rigid body ", typeof(short)),
                   }),
               }),
           }),
           new Reflexive("Nodes", 12, 4, new MetaNode[] { 
               new StringID("name"),
               new Value("flag: does not animate", typeof(short)),
               new Value("parent", typeof(short)),
               new Value("Sibling", typeof(short)),
               new Value("child", typeof(short)),
           }),
           new Value("errors", typeof(int)),
           new Value("errors", typeof(int)),
           new Value("errors", typeof(int)),
           new Value("errors", typeof(int)),
           new Value("errors", typeof(int)),
           new Value("errors", typeof(int)),
           new Reflexive("Limited Hinge Constraints", 132, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
               new Value("limit friction", typeof(float)),
               new Value("limit min angle", typeof(float)),
               new Value("limit max angle", typeof(float)),
           }),
           new Reflexive("Ball And Socket Constraints", 120, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
           }),
           new Reflexive("Stiff Sprin Constraints", 124, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
               new Value("spring length", typeof(float)),
           }),
           new Reflexive("Prismatic Constraints", 132, new MetaNode[] { 
               new StringID("name"),
               new Value("node a", typeof(float)),
               new Value("node b", typeof(float)),
               new Value("a scale", typeof(float)),
               new Value("a forward i", typeof(float)),
               new Value("a forward j", typeof(float)),
               new Value("a forward k", typeof(float)),
               new Value("a left i", typeof(float)),
               new Value("a left j", typeof(float)),
               new Value("a left k", typeof(float)),
               new Value("a up i", typeof(float)),
               new Value("a up j", typeof(float)),
               new Value("a up k", typeof(float)),
               new Value("a position x", typeof(float)),
               new Value("a position y", typeof(float)),
               new Value("a position z", typeof(float)),
               new Value("b scale", typeof(float)),
               new Value("b forward i", typeof(float)),
               new Value("b forward j", typeof(float)),
               new Value("b forward k", typeof(float)),
               new Value("b left i", typeof(float)),
               new Value("b left j", typeof(float)),
               new Value("b left k", typeof(float)),
               new Value("b up i", typeof(float)),
               new Value("b up j", typeof(float)),
               new Value("b up k", typeof(float)),
               new Value("b position x", typeof(float)),
               new Value("b position y", typeof(float)),
               new Value("b position z", typeof(float)),
               new Value("edge index", typeof(float)),
               new Value("min_limit", typeof(float)),
               new Value("max_limit", typeof(float)),
               new Value("max_friction_force", typeof(float)),
           }),
           new Reflexive("Phantoms", 32, new MetaNode[] { 
               new Value("size", typeof(int)),
               new Value("count", typeof(int)),
               new Value("size", typeof(int)),
               new Value("count", typeof(int)),
               new Value("unknown", typeof(int)),
               new Value("unknown", typeof(int)),
               new Value("unknown", typeof(int)),
               new Value("count?", typeof(int)),
           }),
           });
        }
    }
}


#region Old Plugin
/*
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HaloObjects;

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

       public phmo()
       {
           Fields.AddRange(16, new MetaNode[] {
           new Bitmask("Flags", new string[] { "Unused" }, 32),
           new Value("Object Weight", typeof(float)),
           new Value("Mass", typeof(float)),
           new Value("Low Freq. Deactivation Scale", typeof(float)),
           new Value("High Freq. Deactivation Scale", typeof(float)),
           new Unused(20),
           new Reflexive("Phantom Types", 104, 16, 16, new MetaNode[] { 
               new Bitmask("Flags", new string[] { "Generates_Effects", "Uses_Acc_as_Force", "Negates_Gravity", "Ignore_Playes", "Ignores_NonPlayers", "Ignores_Bipeds", "Ignores_Vehicles", "Ignores_Weapons", "Ignores_Equipment", "Ignores_Garbage", "Ignores_Projectiles", "Ignores_Scenery", "Ignores_Machines", "Ignores_Controls", "Ignores_Light_Fixtures", "Ignores_Sound_Scenery", "Ignores_Creates", "Ignores_Creatures", "Localizes_Physics", "Disable_Linear_Dumping", "Disable_Angular_Damping", "Ignores_Dead_Bipeds" }, 32),
               new HaloObjects.Enum("Minimum Size", new string[] { "Default", "Tiny", "Small", "Medium", "Large", "Huge", "Extra_Huge" }, 16),
               new HaloObjects.Enum("Maximum Size", new string[] { "Default", "Tiny", "Small", "Medium", "Large", "Huge", "Extra_Huge" }, 16),
               new StringID("Marker Name"),
               new StringID("Alignment Marker Name"),
               new Value("Hookes Law E", typeof(float)),
               new Value("Linear Dead Radius", typeof(float)),
               new Value("Center Acc", typeof(float)),
               new Value("Center Max Vel.", typeof(float)),
               new Value("Axis Acc.", typeof(float)),
               new Value("Axis Max Vel.", typeof(float)),
               new Value("Direction Acc", typeof(float)),
               new Value("Direction Max Vel.", typeof(float)),
               new Value("Alignment Hookes Law E", typeof(float)),
               new Value("Alignment Acc.", typeof(float)),
               new Value("Alignment Max Vel.", typeof(float)),
               new Unused(20),
           }),
           new Reflexive("Node Edges", 24, 16, 16, new MetaNode[] { 
               new Value("Node A Index", typeof(int)),
               new Value("Node B Index", typeof(int)),
               new Reflexive("Constriants", 12, 16, 16, new MetaNode[] { 
                   new HaloObjects.Enum("Type", new string[] {  }, 16),
                   new HaloObjects.Enum("Index", new string[] { "None" }, 16),
                   new Bitmask("Flags", new string[] { "Is_Rigid", "Disable_Effects" }, 32),
                   new Value("Friction", typeof(float)),
               }),
               new StringID("Node A Material"),
               new StringID("Node B Material"),
           }),
           new Reflexive("Rigid Bodies", 144, 16, 16, new MetaNode[] { 
               new Value("Node Index", typeof(short)),
               new Value("Region Index", typeof(short)),
               new HaloObjects.Enum("Permutation", new string[] { "None" }, 16),
               new Value("Bounding Sphere Offset X", typeof(float)),
               new Value("Bounding Sphere Offset Y", typeof(float)),
               new Value("Bounding Sphere Offset Z", typeof(float)),
               new Value("Bounding Sphere Radius", typeof(float)),
               new Bitmask("Flags", new string[] { "No_Collisions_w/_Self", "Only_Collide_w/_environment", "Disable_Effects", "Does_not_Interact_w/_Environment", "Best_Early_Mover_Body", "Has_no_Phantom_Power_Version" }, 32),
               new HaloObjects.Enum("Motion Type", new string[] {  }, 32),
               new Value("No Phantom Power Alt Index", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Unused(4),
               new Value("Unknown", typeof(float)),
               new Value("Inertia Tensor Scale", typeof(float)),
               new Value("Linear Damping", typeof(float)),
               new Value("Angular Damping", typeof(float)),
               new Value("Center of Mass Offset (I)", typeof(float)),
               new Value("Center of Mass Offset (J)", typeof(float)),
               new Value("Center of Mass Offset (K)", typeof(float)),
               new HaloObjects.Enum("Shape Type", new string[] {  }, 32),
               new HaloObjects.Enum("Shape", new string[] { "None" }, 32),
               new Value("Mass kg", typeof(float)),
               new Value("Center of Mass (I)", typeof(float)),
               new Value("Center of Mass (J)", typeof(float)),
               new Value("Center of Mass (K)", typeof(float)),
               new Value("Intertia Tensor X (I)", typeof(float)),
               new Value("Intertia Tensor X (J)", typeof(float)),
               new Value("Intertia Tensor X (K)", typeof(float)),
               new Value("Intertia Tensor Y (I)", typeof(float)),
               new Value("Intertia Tensor Y (J)", typeof(float)),
               new Value("Intertia Tensor Y (K)", typeof(float)),
               new Value("Intertia Tensor Z (I)", typeof(float)),
               new Value("Intertia Tensor Z (J)", typeof(float)),
               new Value("Intertia Tensor Z (K)", typeof(float)),
               new Value("Bounding Sphere Pad", typeof(float)),
           }),
           new Reflexive("Materials", 12, 16, 16, new MetaNode[] { 
               new StringID("Material Base"),
               new StringID("Material"),
               new StringID("Unknown"),
           }),
           new Reflexive("Unknown48", 128, 16, 16, new MetaNode[] { 
               new StringID("Unknown"),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Unused(16),
               new Value("Unknown", typeof(float)),
               new Unused(16),
               new Value("Unknown", typeof(float)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
           }),
           new Unused(8),
           new Reflexive("Powered Mass Point", 80, 16, 16, new MetaNode[] { 
               new StringID("Name"),
               new Bitmask("Flags", new string[] { "Power_Lift", "Air_Lift" }, 32),
               new Value("Antigrav strength", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Mass", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Unused(8),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Unused(8),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
           }),
           new Reflexive("Mass Points", 144, 16, 16, new MetaNode[] { 
               new StringID("Physics ID"),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(float)),
               new Value("Friction", typeof(float)),
               new Value("Bounce Factor", typeof(float)),
               new Value("Volume", typeof(int)),
               new Value("Mass", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("x halfspace", typeof(float)),
               new Value("y halfspace", typeof(float)),
               new Value("z halfspace", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
           }),
           new Unused(8),
           new Reflexive("Vehicle Parts", 256, 16, 16, new MetaNode[] { 
               new StringID("Physics ID"),
               new Bitmask("Flags", new string[] {  }, 32),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Mass", typeof(float)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
           }),
           new Reflexive("Scalers", 48, 16, 16, new MetaNode[] { 
               new Value("Length Vector i", typeof(float)),
               new Value("Length Vector j", typeof(float)),
               new Value("Length Vector k", typeof(float)),
               new Value("Length Vector w", typeof(float)),
               new Value("Width Vector i", typeof(float)),
               new Value("Width Vector j", typeof(float)),
               new Value("Width Vector k", typeof(float)),
               new Value("Width Vector w", typeof(float)),
               new Value("Height Vector i", typeof(float)),
               new Value("Height Vector j", typeof(float)),
               new Value("Height Vector k", typeof(float)),
               new Value("Height Vector w", typeof(float)),
           }),
           new Reflexive("Planes", 16, 16, 16, new MetaNode[] { 
               new Value("X", typeof(float)),
               new Value("y", typeof(float)),
               new Value("z", typeof(float)),
               new Value("d", typeof(float)),
           }),
           new Unused(8),
           new Reflexive("Unknown223", 56, 16, 16, new MetaNode[] { 
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Unused(4),
           }),
           new Reflexive("Unknown239", 8, 16, 16, new MetaNode[] { 
               new Value("Unknown", typeof(int)),
               new Unused(4),
           }),
           new Reflexive("Unknown243", 24, 16, 16, new MetaNode[] { 
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Unused(4),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
               new Value("Unknown", typeof(int)),
           }),
           new Reflexive("Unknown253", 1, 16, 16, new MetaNode[] { 
               new Value("Unknown", typeof(byte)),
           }),
           new Unused(8),
           new Reflexive("Unknown25", 148, 16, 16, new MetaNode[] { 
               new StringID("Unknown"),
               new Unused(144),
           }),
           new Reflexive("Damage Permutations", 12, 16, 16, new MetaNode[] { 
               new StringID("Part"),
               new Reflexive("Damage Levels", 12, 16, 16, new MetaNode[] { 
                   new StringID("Level of Damage"),
                   new Reflexive("Phmo Variation", 2, 16, 16, new MetaNode[] { 
                       new Value("Phmo Variation Chunk#", typeof(short)),
                   }),
               }),
           }),
           new Reflexive("Bones", 12, 16, 16, new MetaNode[] { 
               new StringID("Bone"),
               new Value("Parent", typeof(short)),
               new Value("Child", typeof(short)),
               new Value("Next Sibling", typeof(short)),
               new Value("Final Sibling?", typeof(short)),
           }),
           new Unused(24),
           new Reflexive("Hinges", 132, 16, 16, new MetaNode[] { 
               new StringID("Name"),
               new Value("Start Permutation", typeof(short)),
               new Value("End Permutation", typeof(short)),
               new Value("Unknown", typeof(int)),
               new Unused(120),
           }),
           new Reflexive("Unknown268", 120, 16, 16, new MetaNode[] { 
               new StringID("Unknown"),
               new Unused(116),
           }),
           new Unused(16),
           new Reflexive("Unknown264", 32, 16, 16, new MetaNode[] { 
               new Unused(32),
           }),
           });
       }
    }
}
*/
#endregion