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

namespace HaloPlugins.Xbox
{
    public class spas : TagDefinition
    {
       public spas() : base("spas", "shader_pass", 36)
       {
           Fields.AddRange(new IMetaNode[] {
           new Padding(16),
           new Value("Unknown", typeof(int)),
           new Padding(8),
           new TagBlock("Postprocess Definitions", 88, 1, new IMetaNode[] { 
               new TagBlock("Unknown7", 306, 1024, new IMetaNode[] { 
                   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(float)),
                   new Value("Unknown", typeof(int)),
                   new Padding(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(float)),
                   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(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 Padding(16),
                   new Value("Unknown", typeof(int)),
                   new Padding(4),
                   new TagReference("Unknown", "****"),
                   new Value("Unknown", typeof(int)),
                   new Value("Unknown", typeof(int)),
                   new Padding(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("FUCK THIS VALUE", typeof(int)),
                   new Value("AND FUCK ENTITY", typeof(int)),
                   new Value("Unknown", typeof(short)),
               }),
               new TagBlock("Textures", 4, 1024, new IMetaNode[] { 
                   new Value("Bitmap Parameter Index", typeof(byte)),
                   new Value("Bitmap Extern Index", typeof(byte)),
                   new Value("Texture Stage Index", typeof(byte)),
                   new Value("Flags", typeof(byte)),
               }),
               new TagBlock("Render States", 5, 1024, new IMetaNode[] { 
                   new Value("State Index", typeof(byte)),
                   new Value("State Value", typeof(int)),
               }),
               new TagBlock("Texture States", 24, 1024, new IMetaNode[] { 
                   new Value("Unknown", typeof(int)),
                   new Value("Unknown", typeof(int)),
                   new Value("Unknown", typeof(int)),
                   new Padding(4),
                   new Value("Unknown", typeof(int)),
                   new Padding(4),
               }),
               new TagBlock("Pixel Shader Fragments", 4, 1024, new IMetaNode[] { //4
                   new Value("Switch Parameter Index", typeof(short)),
                   new Value("Permutation Index", typeof(short)),
               }),
               new TagBlock("Pixel Shader Permutations", 6, 1024, new IMetaNode[] { 
                   new Value("Enum Index", typeof(short)),
                   new Value("Flags", typeof(short)),
                   new Value("Combiner", typeof(short)),
               }),
               new TagBlock("Pixel Shader Combiners", 32, 1024, new IMetaNode[] { 
                   new Padding(16),
                   new Value("Constant Color 0 A", typeof(byte)),
                   new Value("Constant Color 0 R", typeof(byte)),
                   new Value("Constant Color 0 G", typeof(byte)),
                   new Value("Constant Color 0 B", typeof(byte)),
                   new Value("Constant Color 1 A", typeof(byte)),
                   new Value("Constant Color 1 R", typeof(byte)),
                   new Value("Constant Color 1 G", typeof(byte)),
                   new Value("Constant Color 1 B", typeof(byte)),
                   new Value("Color A Register Ptr Index", typeof(byte)),
                   new Value("Color B Register Ptr Index", typeof(byte)),
                   new Value("Color C Register Ptr Index", typeof(byte)),
                   new Value("Color D Register Ptr Index", typeof(byte)),
                   new Value("Alpha A Register Ptr Index", typeof(byte)),
                   new Value("Alpha B Register Ptr Index", typeof(byte)),
                   new Value("Alpha C Register Ptr Index", typeof(byte)),
                   new Value("Alpha D Register Ptr Index", typeof(byte)),
               }),
               new TagBlock("Externs", 4, 1024, new IMetaNode[] { 
                   new Value("Extern Index", typeof(int)),
               }),
               new Padding(24),
           }),
           });
       }
    }
}
