Exemple #1
0
        public PAN1(FileReader reader, BxlytHeader header) : base()
        {
            LayoutFile = header;
            _flags1    = reader.ReadByte();
            byte origin = reader.ReadByte();

            Alpha        = reader.ReadByte();
            PaneMagFlags = reader.ReadByte();
            Name         = reader.ReadString(0x18, true);
            UserDataInfo = reader.ReadString(0x8, true);
            Translate    = reader.ReadVec3SY();
            Rotate       = reader.ReadVec3SY();
            Scale        = reader.ReadVec2SY();
            Width        = reader.ReadSingle();
            Height       = reader.ReadSingle();

            int mainorigin   = origin % 16;
            int parentorigin = origin / 16;

            originX       = (OriginX)(mainorigin % 4);
            originY       = (OriginY)(mainorigin / 4);
            ParentOriginX = (OriginX)(parentorigin % 4);
            ParentOriginY = (OriginY)(parentorigin / 4);
            UserData      = new USD1();
        }
Exemple #2
0
        public PAN1(BxlytHeader header, string name) : base()
        {
            LayoutFile = header;

            LoadDefaults();
            Name = name;
        }
Exemple #3
0
        public PIC1(FileReader reader, BRLYT.Header header) : base(reader, header)
        {
            ParentLayout = header;

            ColorTopLeft     = STColor8.FromBytes(reader.ReadBytes(4));
            ColorTopRight    = STColor8.FromBytes(reader.ReadBytes(4));
            ColorBottomLeft  = STColor8.FromBytes(reader.ReadBytes(4));
            ColorBottomRight = STColor8.FromBytes(reader.ReadBytes(4));
            MaterialIndex    = reader.ReadUInt16();
            byte numUVs = reader.ReadByte();

            reader.Seek(1); //padding

            TexCoords = new TexCoord[numUVs];
            for (int i = 0; i < numUVs; i++)
            {
                TexCoords[i] = new TexCoord()
                {
                    TopLeft     = reader.ReadVec2SY(),
                    TopRight    = reader.ReadVec2SY(),
                    BottomLeft  = reader.ReadVec2SY(),
                    BottomRight = reader.ReadVec2SY(),
                };
            }

            Material = header.MaterialList.Materials[MaterialIndex];
        }
Exemple #4
0
        public WND1(BxlytHeader header, string name)
        {
            layoutHeader = header;
            LoadDefaults();
            Name = name;

            Content = new BxlytWindowContent(header, this.Name);
            UseOneMaterialForAll = true;
            UseVertexColorForAll = true;
            WindowKind           = WindowKind.Around;
            NotDrawnContent      = false;

            StretchLeft  = 0;
            StretchRight = 0;
            StretchTop   = 0;
            StretchBottm = 0;

            Width  = 70;
            Height = 80;

            FrameElementLeft  = 16;
            FrameElementRight = 16;
            FrameElementTop   = 16;
            FrameElementBottm = 16;
            FrameCount        = 1;

            WindowFrames = new List <BxlytWindowFrame>();
            SetFrames(header);
        }
Exemple #5
0
        public TXT1(BCLYT.Header header, string name)
        {
            LoadDefaults();
            Name       = name;
            layoutFile = header;
            //Add new material
            var mat = new Material(this.Name, header);

            header.MaterialList.Materials.Add(mat);
            MaterialIndex = (ushort)header.MaterialList.Materials.IndexOf(mat);
            Material      = mat;

            Text = Encoding.Unicode.GetString(new byte[0]);

            FontIndex       = 0;
            FontName        = "";
            TextLength      = 4;
            MaxTextLength   = 4;
            TextAlignment   = 0;
            LineAlignment   = LineAlign.Unspecified;
            ItalicTilt      = 0;
            FontTopColor    = STColor8.White;
            FontBottomColor = STColor8.White;
            FontSize        = new Vector2F(92, 101);
            CharacterSpace  = 0;
            LineSpace       = 0;
            ShadowXY        = new Vector2F(1, -1);
            ShadowXYSize    = new Vector2F(1, 1);
            ShadowBackColor = STColor8.Black;
            ShadowForeColor = STColor8.Black;
            ShadowItalic    = 0;
        }
Exemple #6
0
        public TevStage(FileReader reader, BxlytHeader header)
        {
            TexCoord = (TexCoordID)reader.ReadByte();
            Color    = reader.ReadByte();

            ushort tmp16 = reader.ReadUInt16();

            TexMap = (TexMapID)(tmp16 & 0x1ff);
            RasSel = (TevSwapSel)((tmp16 & 0x7ff) >> 9);
            TexSel = (TevSwapSel)(tmp16 >> 11);

            byte tmp8 = reader.ReadByte();

            ColorA           = (ColorArg)(tmp8 & 0xf);
            ColorB           = (ColorArg)(tmp8 >> 4);
            tmp8             = reader.ReadByte();
            ColorC           = (ColorArg)(tmp8 & 0xf);
            ColorD           = (ColorArg)(tmp8 >> 4);
            tmp8             = reader.ReadByte();
            ColorOp          = (TevColorOp)(tmp8 & 0xf);
            ColorBias        = (Bias)((tmp8 & 0x3f) >> 4);
            ColorScale       = (TevScale)(tmp8 >> 6);
            tmp8             = reader.ReadByte();
            ColorClamp       = (tmp8 & 0x1) == 1;
            ColorRegID       = (TevColorRegID)((tmp8 & 0x7) >> 1);
            ColorConstantSel = (TevKColorSel)(tmp8 >> 3);

            tmp8             = reader.ReadByte();
            AlphaA           = (AlphaArg)(tmp8 & 0xf);
            AlphaB           = (AlphaArg)(tmp8 >> 4);
            tmp8             = reader.ReadByte();
            AlphaC           = (AlphaArg)(tmp8 & 0xf);
            AlphaD           = (AlphaArg)(tmp8 >> 4);
            tmp8             = reader.ReadByte();
            AlphaOp          = (TevAlphaOp)(tmp8 & 0xf);
            AlphaBias        = (Bias)((tmp8 & 0x3f) >> 4);
            AlphaScale       = (TevScale)(tmp8 >> 6);
            tmp8             = reader.ReadByte();
            AlphaClamp       = (tmp8 & 0x1) == 1;
            AlphaRegID       = (TevAlphaRegID)((tmp8 & 0x7) >> 1);
            AlphaConstantSel = (TevKAlphaSel)(tmp8 >> 3);

            tmp8             = reader.ReadByte();
            TexID            = (byte)(tmp8 & 0x3);
            tmp8             = reader.ReadByte();
            IndBias          = (Bias)(tmp8 & 0x7);
            Matrix           = (IndTexMtxID)((tmp8 & 0x7F) >> 3);
            tmp8             = reader.ReadByte();
            WrapS            = (IndTexWrap)(tmp8 & 0x7);
            WrapT            = (IndTexWrap)((tmp8 & 0x3F) >> 3);
            tmp8             = reader.ReadByte();
            Format           = (IndTexFormat)(tmp8 & 0x3);
            UsePreviousStage = (byte)((tmp8 & 0x7) >> 2);
            UnmodifiedLOD    = (byte)((tmp8 & 0xF) >> 3);
            Alpha            = (IndTexAlphaSel)((tmp8 & 0x3F) >> 4);
        }
Exemple #7
0
        public TextureRef(FileReader reader, BxlytHeader header)
        {
            ID    = reader.ReadInt16();
            flag1 = reader.ReadByte();
            flag2 = reader.ReadByte();

            if (header.Textures.Count > 0)
            {
                Name = header.Textures[ID];
            }
        }
Exemple #8
0
        public Material(string name, BxlytHeader header)
        {
            ParentLayout      = header;
            Name              = name;
            TextureMaps       = new TextureRef[0];
            TextureTransforms = new BxlytTextureTransform[0];
            TexCoordGens      = new TexCoordGen[0];
            TevStages         = new TevStage[0];
            ProjTexGenParams  = new ProjectionTexGenParam[0];

            BlackColor = new STColor8(0, 0, 0, 0);
            WhiteColor = STColor8.White;
        }
 public TexCoordGen(FileReader reader, BxlytHeader header)
 {
     Matrix = reader.ReadEnum <TexGenMatrixType>(false);
     Source = reader.ReadEnum <TexGenType>(false);
     if (header.VersionMajor >= 8)
     {
         unkData = reader.ReadBytes(0xE);
     }
     else
     {
         unkData = reader.ReadBytes(6);
     }
 }
Exemple #10
0
        public USD1(FileReader reader, BxlytHeader header) : base()
        {
            long startPos = reader.Position - 8;

            ushort numEntries = reader.ReadUInt16();

            reader.ReadUInt16(); //padding

            for (int i = 0; i < numEntries; i++)
            {
                Entries.Add(new USD1Entry(reader, startPos, header));
            }
        }
Exemple #11
0
        public TextureRef(FileReader reader, BxlytHeader header)
        {
            ID            = reader.ReadInt16();
            WrapModeU     = (WrapMode)reader.ReadByte();
            WrapModeV     = (WrapMode)reader.ReadByte();
            MinFilterMode = FilterMode.Linear;
            MaxFilterMode = FilterMode.Linear;

            if (header.Textures.Count > 0)
            {
                Name = header.Textures[ID];
            }
        }
        public GRP1(FileReader reader, BxlytHeader header)
        {
            LayoutFile = header;

            Name = reader.ReadString(0x10, true);;
            int numNodes = reader.ReadUInt16();

            reader.Seek(2); //padding

            for (int i = 0; i < numNodes; i++)
            {
                Panes.Add(reader.ReadString(0x10, true));
            }
        }
Exemple #13
0
        public PRT1(BxlytHeader header, string name) : base()
        {
            LoadDefaults();
            Name = name;

            layoutFile = (BCLYT.Header)header;

            MagnifyX = 1;
            MagnifyY = 1;

            LayoutFileName = "";

            Properties = new List <PartProperty>();
        }
Exemple #14
0
        public PIC1(BxlytHeader header, string name) : base()
        {
            LoadDefaults();
            Name = name;

            ParentLayout = header;

            ColorTopLeft     = STColor8.White;
            ColorTopRight    = STColor8.White;
            ColorBottomLeft  = STColor8.White;
            ColorBottomRight = STColor8.White;
            TexCoords        = new TexCoord[1];
            TexCoords[0]     = new TexCoord();

            Material = new Material(name, header);
        }
Exemple #15
0
        public USD1Entry(FileReader reader, long startPos, BxlytHeader header)
        {
            long pos = reader.Position;

            uint   nameOffset = reader.ReadUInt32();
            uint   dataOffset = reader.ReadUInt32();
            ushort dataLength = reader.ReadUInt16();

            Type    = reader.ReadEnum <UserDataType>(false);
            Unknown = reader.ReadByte();

            long datapos = reader.Position;

            if (nameOffset != 0)
            {
                reader.SeekBegin(pos + nameOffset);
                Name = reader.ReadZeroTerminatedString();
            }

            if (dataOffset != 0)
            {
                reader.SeekBegin(pos + dataOffset);
                switch (Type)
                {
                case UserDataType.String:
                    if (dataLength != 0)
                    {
                        data = reader.ReadString((int)dataLength);
                    }
                    else
                    {
                        data = reader.ReadZeroTerminatedString();
                    }
                    break;

                case UserDataType.Int:
                    data = reader.ReadInt32s((int)dataLength);
                    break;

                case UserDataType.Float:
                    data = reader.ReadSingles((int)dataLength);
                    break;
                }
            }

            reader.SeekBegin(datapos);
        }
Exemple #16
0
        public MAT1(FileReader reader, BxlytHeader header) : base()
        {
            Materials = new List <BxlytMaterial>();

            long pos = reader.Position;

            ushort numMats = reader.ReadUInt16();

            reader.Seek(2); //padding

            uint[] offsets = reader.ReadUInt32s(numMats);
            for (int i = 0; i < numMats; i++)
            {
                reader.SeekBegin(pos + offsets[i] - 8);
                Materials.Add(new Material(reader, header));
            }
        }
Exemple #17
0
        public TevStage(FileReader reader, BxlytHeader header)
        {
            flags1           = reader.ReadUInt32();
            ColorSources     = new TevSource[] { (TevSource)(flags1 & 0xF), (TevSource)((flags1 >> 4) & 0xF), (TevSource)((flags1 >> 8) & 0xF) };
            ColorOperators   = new TevColorOp[] { (TevColorOp)((flags1 >> 12) & 0xF), (TevColorOp)((flags1 >> 16) & 0xF), (TevColorOp)((flags1 >> 20) & 0xF) };
            ColorMode        = (TevMode)((flags1 >> 24) & 0xF);
            ColorScale       = (TevScale)((flags1 >> 28) & 0x3);
            ColorSavePrevReg = ((flags1 >> 30) & 0x1) == 1;
            flags2           = reader.ReadUInt32();
            AlphaSources     = new TevSource[] { (TevSource)(flags2 & 0xF), (TevSource)((flags2 >> 4) & 0xF), (TevSource)((flags2 >> 8) & 0xF) };
            AlphaOperators   = new TevAlphaOp[] { (TevAlphaOp)((flags2 >> 12) & 0xF), (TevAlphaOp)((flags2 >> 16) & 0xF), (TevAlphaOp)((flags2 >> 20) & 0xF) };
            AlphaMode        = (TevMode)((flags2 >> 24) & 0xF);
            AlphaScale       = (TevScale)((flags2 >> 28) & 0x3);
            AlphaSavePrevReg = ((flags2 >> 30) & 0x1) == 1;

            ConstColors = reader.ReadUInt32();
        }
Exemple #18
0
        public void Write(FileWriter writer, BxlytHeader header)
        {
            writer.Write(Matrix, false);
            writer.Write(Source, false);

            int length = header.VersionMajor >= 8 ? 0xE : 6;

            for (int i = 0; i < length; i++)
            {
                if (i < unkData.Length)
                {
                    writer.Write(unkData[i]);
                }
                else
                {
                    writer.Write((byte)0);
                }
            }
        }
Exemple #19
0
        public PAN1(FileReader reader, BxlytHeader header) : base()
        {
            LayoutFile = header;
            _flags1    = reader.ReadByte();
            byte origin = reader.ReadByte();

            Alpha        = reader.ReadByte();
            PaneMagFlags = reader.ReadByte();
            Name         = reader.ReadString(0x10, true);
            UserDataInfo = reader.ReadString(0x8, true);
            Translate    = reader.ReadVec3SY();
            Rotate       = reader.ReadVec3SY();
            Scale        = reader.ReadVec2SY();
            Width        = reader.ReadSingle();
            Height       = reader.ReadSingle();

            originX = OriginXMap[(OriginXRev)(origin % 3)];
            originY = OriginYMap[(OriginYRev)(origin / 3)];
        }
Exemple #20
0
 public Material(string name, BxlytHeader header)
 {
     ParentLayout          = header;
     Name                  = name;
     TextureMaps           = new TextureRef[0];
     TextureTransforms     = new BxlytTextureTransform[0];
     TexCoordGens          = new List <TexCoordGenEntry>();
     IndirectTexTransforms = new List <BxlytTextureTransform>();
     IndirectStages        = new List <IndirectStage>();
     TevSwapModeTable      = new TevSwapModeTable();
     ChanControl           = new ChanCtrl();
     BlackColor            = new STColor8(0, 0, 0, 0);
     WhiteColor            = STColor8.White;
     ColorRegister3        = STColor8.White;
     TevColor1             = STColor8.White;
     TevColor2             = STColor8.White;
     TevColor3             = STColor8.White;
     TevColor4             = STColor8.White;
     TevStages             = new TevStage[0];
     BlendMode             = new BxlytBlendMode();
     AlphaCompare          = new AlphaCompare();
 }
Exemple #21
0
        public TXT1(FileReader reader, BxlytHeader header) : base(reader, header)
        {
            layoutFile = header;

            TextLength    = reader.ReadUInt16();
            MaxTextLength = reader.ReadUInt16();
            MaterialIndex = reader.ReadUInt16();
            FontIndex     = reader.ReadUInt16();
            TextAlignment = reader.ReadByte();
            LineAlignment = (LineAlign)reader.ReadByte();
            _flags        = reader.ReadByte();
            reader.Seek(1); //padding
            uint textOffset = reader.ReadUInt32();

            FontTopColor    = STColor8.FromBytes(reader.ReadBytes(4));
            FontBottomColor = STColor8.FromBytes(reader.ReadBytes(4));
            FontSize        = reader.ReadVec2SY();
            CharacterSpace  = reader.ReadSingle();
            LineSpace       = reader.ReadSingle();

            if (MaterialIndex != ushort.MaxValue && header.Materials.Count > 0)
            {
                Material = header.Materials[MaterialIndex];
            }

            if (FontIndex != ushort.MaxValue && header.Fonts.Count > 0)
            {
                FontName = header.Fonts[FontIndex];
            }

            if (RestrictedTextLengthEnabled)
            {
                text = reader.ReadZeroTerminatedString(Encoding.Unicode);
            }
            else
            {
                text = reader.ReadZeroTerminatedString(Encoding.Unicode);
            }
        }
Exemple #22
0
        public GRP1(FileReader reader, BxlytHeader header)
        {
            LayoutFile = header;

            ushort numNodes = 0;

            if (header.VersionMajor >= 5)
            {
                Name     = reader.ReadString(34, true);
                numNodes = reader.ReadUInt16();
            }
            else
            {
                Name     = reader.ReadString(24, true);;
                numNodes = reader.ReadUInt16();
                reader.Seek(2); //padding
            }

            for (int i = 0; i < numNodes; i++)
            {
                Panes.Add(reader.ReadString(24, true));
            }
        }
Exemple #23
0
        public WND1(BxlytHeader header, FileReader reader) : base(reader, header)
        {
            layoutHeader = header;
            WindowFrames = new List <BxlytWindowFrame>();

            long pos = reader.Position - 0x4C;

            StretchLeft       = reader.ReadUInt16();
            StretchRight      = reader.ReadUInt16();
            StretchTop        = reader.ReadUInt16();
            StretchBottm      = reader.ReadUInt16();
            FrameElementLeft  = reader.ReadUInt16();
            FrameElementRight = reader.ReadUInt16();
            FrameElementTop   = reader.ReadUInt16();
            FrameElementBottm = reader.ReadUInt16();
            FrameCount        = reader.ReadByte();
            _flag             = reader.ReadByte();
            reader.ReadUInt16();//padding
            uint contentOffset  = reader.ReadUInt32();
            uint frameOffsetTbl = reader.ReadUInt32();

            WindowKind = (WindowKind)((_flag >> 2) & 3);

            reader.SeekBegin(pos + contentOffset);
            Content = new BxlytWindowContent(reader, header);

            reader.SeekBegin(pos + frameOffsetTbl);

            var offsets = reader.ReadUInt32s(FrameCount);

            foreach (int offset in offsets)
            {
                reader.SeekBegin(pos + offset);
                WindowFrames.Add(new BxlytWindowFrame(reader, header));
            }
        }
Exemple #24
0
 public void SetFrames(BxlytHeader header)
 {
 }
Exemple #25
0
        public void SetFrames(BxlytHeader header)
        {
            if (WindowFrames == null)
            {
                WindowFrames = new List <BxlytWindowFrame>();
            }

            switch (FrameCount)
            {
            case 1:
                if (WindowFrames.Count == 0)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_LT"));
                }
                break;

            case 2:
                if (WindowFrames.Count == 0)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_L"));
                }
                if (WindowFrames.Count == 1)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_R"));
                }
                break;

            case 4:
                if (WindowFrames.Count == 0)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_LT"));
                }
                if (WindowFrames.Count == 1)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_RT"));
                }
                if (WindowFrames.Count == 2)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_LB"));
                }
                if (WindowFrames.Count == 3)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_RB"));
                }
                break;

            case 8:
                if (WindowFrames.Count == 0)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_LT"));
                }
                if (WindowFrames.Count == 1)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_RT"));
                }
                if (WindowFrames.Count == 2)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_LB"));
                }
                if (WindowFrames.Count == 3)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_RB"));
                }
                if (WindowFrames.Count == 4)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_T"));
                }
                if (WindowFrames.Count == 5)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_B"));
                }
                if (WindowFrames.Count == 6)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_R"));
                }
                if (WindowFrames.Count == 7)
                {
                    WindowFrames.Add(new BxlytWindowFrame(header, $"{Name}_L"));
                }
                break;
            }

            //Now search for invalid unused materials and remove them
            for (int i = 0; i < WindowFrames.Count; i++)
            {
                if (i >= FrameCount)
                {
                    header.TryRemoveMaterial(WindowFrames[i].Material);
                }
                else if (!header.Materials.Contains(WindowFrames[i].Material))
                {
                    header.AddMaterial(WindowFrames[i].Material);
                }
            }
        }
Exemple #26
0
 public TexCoordGen(FileReader reader, BxlytHeader header)
 {
     Matrix  = (TexGenMatrixType)reader.ReadByte();
     Source  = (TexGenType)reader.ReadByte();
     Unknown = reader.ReadUInt16();
 }
Exemple #27
0
        public Material(FileReader reader, BxlytHeader header) : base()
        {
            ParentLayout = header;

            Name              = reader.ReadString(20, true);
            BlackColor        = reader.ReadColor8RGBA();
            WhiteColor        = reader.ReadColor8RGBA();
            TevConstantColors = reader.ReadColor8sRGBA(5);
            flags             = reader.ReadUInt32();

            uint texCount         = Convert.ToUInt32(flags & 3);
            uint mtxCount         = Convert.ToUInt32(flags >> 2) & 3;
            uint texCoordGenCount = Convert.ToUInt32(flags >> 4) & 3;
            uint tevStageCount    = Convert.ToUInt32(flags >> 6) & 0x7;

            EnableAlphaCompare = Convert.ToBoolean((flags >> 9) & 0x1);
            EnableBlend        = Convert.ToBoolean((flags >> 10) & 0x1);
            var useTextureOnly = Convert.ToBoolean((flags >> 11) & 0x1);

            EnableBlendLogic = Convert.ToBoolean((flags >> 12) & 0x1);
            EnableIndParams  = Convert.ToBoolean((flags >> 14) & 0x1);
            var projTexGenParamCount = Convert.ToUInt32((flags >> 15) & 0x3);

            EnableFontShadowParams = Convert.ToBoolean((flags >> 17) & 0x1);
            AlphaInterpolation     = Convert.ToBoolean((flags >> 18) & 0x1);


            Console.WriteLine($"MAT1 {Name}");
            Console.WriteLine($"texCount {texCount}");
            Console.WriteLine($"mtxCount {mtxCount}");
            Console.WriteLine($"texCoordGenCount {texCoordGenCount}");
            Console.WriteLine($"tevStageCount {tevStageCount}");
            Console.WriteLine($"hasAlphaCompare {EnableAlphaCompare}");
            Console.WriteLine($"hasBlendMode {EnableBlend}");
            Console.WriteLine($"useTextureOnly {useTextureOnly}");
            Console.WriteLine($"seperateBlendMode {EnableBlendLogic}");
            Console.WriteLine($"hasIndParam {EnableIndParams}");
            Console.WriteLine($"projTexGenParamCount {projTexGenParamCount}");
            Console.WriteLine($"hasFontShadowParam {EnableFontShadowParams}");
            Console.WriteLine($"AlphaInterpolation {AlphaInterpolation}");


            TextureMaps       = new TextureRef[texCount];
            TextureTransforms = new BxlytTextureTransform[mtxCount];
            TexCoordGens      = new TexCoordGen[texCoordGenCount];
            TevStages         = new TevStage[tevStageCount];
            ProjTexGenParams  = new ProjectionTexGenParam[projTexGenParamCount];

            for (int i = 0; i < texCount; i++)
            {
                TextureMaps[i] = new TextureRef(reader, header);
            }

            for (int i = 0; i < mtxCount; i++)
            {
                TextureTransforms[i] = new BxlytTextureTransform(reader);
            }

            for (int i = 0; i < texCoordGenCount; i++)
            {
                TexCoordGens[i] = new TexCoordGen(reader, header);
            }

            for (int i = 0; i < tevStageCount; i++)
            {
                TevStages[i] = new TevStage(reader, header);
            }

            if (EnableAlphaCompare)
            {
                AlphaCompare = new BxlytAlphaCompare(reader, header);
            }
            if (EnableBlend)
            {
                BlendMode = new BxlytBlendMode(reader, header);
            }
            if (EnableBlendLogic)
            {
                BlendModeLogic = new BxlytBlendMode(reader, header);
            }
            if (EnableIndParams)
            {
                IndParameter = new IndirectParameter(reader, header);
            }

            for (int i = 0; i < projTexGenParamCount; i++)
            {
                ProjTexGenParams[i] = new ProjectionTexGenParam(reader, header);
            }

            if (EnableFontShadowParams)
            {
                FontShadowParameter = new FontShadowParameter(reader, header);
            }
        }
Exemple #28
0
 public BND1(FileReader reader, BxlytHeader header) : base(reader, header)
 {
 }
Exemple #29
0
 public BND1(BxlytHeader header, string name) : base()
 {
     LoadDefaults();
     Name = name;
 }
Exemple #30
0
        public Material(FileReader reader, BxlytHeader header) : base()
        {
            ParentLayout = header;

            BlendMode             = new BxlytBlendMode();
            AlphaCompare          = new AlphaCompare();
            TexCoordGens          = new List <TexCoordGenEntry>();
            IndirectTexTransforms = new List <BxlytTextureTransform>();
            IndirectStages        = new List <IndirectStage>();

            Name = reader.ReadString(0x14, true);

            BlackColor     = reader.ReadColor16RGBA().ToColor8();
            WhiteColor     = reader.ReadColor16RGBA().ToColor8();
            ColorRegister3 = reader.ReadColor16RGBA().ToColor8();
            TevColor1      = reader.ReadColor8RGBA();
            TevColor2      = reader.ReadColor8RGBA();
            TevColor3      = reader.ReadColor8RGBA();
            TevColor4      = reader.ReadColor8RGBA();
            flags          = reader.ReadUInt32();

            HasMaterialColor  = Convert.ToBoolean(ExtractBits(flags, 1, 4));
            HasChannelControl = Convert.ToBoolean(ExtractBits(flags, 1, 6));
            HasBlendMode      = Convert.ToBoolean(ExtractBits(flags, 1, 7));
            HasAlphaCompare   = Convert.ToBoolean(ExtractBits(flags, 1, 8));
            uint tevStagesCount   = ExtractBits(flags, 5, 9);
            uint indTexOrderCount = ExtractBits(flags, 2, 16);
            uint indSrtCount      = ExtractBits(flags, 2, 17);

            HasTevSwapTable = Convert.ToBoolean(ExtractBits(flags, 1, 19));
            uint texCoordGenCount = ExtractBits(flags, 4, 20);
            uint mtxCount         = ExtractBits(flags, 4, 24);
            uint texCount         = ExtractBits(flags, 4, 28);

            Console.WriteLine($"HasMaterialColor {HasMaterialColor}");
            Console.WriteLine($"HasChannelControl {HasChannelControl}");
            Console.WriteLine($"HasBlendMode {HasBlendMode}");
            Console.WriteLine($"HasAlphaCompare {HasAlphaCompare}");
            Console.WriteLine($"tevStagesCount {tevStagesCount}");
            Console.WriteLine($"indTexOrderCount {indTexOrderCount}");
            Console.WriteLine($"indSrtCount {indSrtCount}");
            Console.WriteLine($"HasTevSwapTable {HasTevSwapTable}");
            Console.WriteLine($"texCoordGenCount {texCoordGenCount}");
            Console.WriteLine($"mtxCount {mtxCount}");
            Console.WriteLine($"texCount {texCount}");

            TextureMaps       = new TextureRef[texCount];
            TevStages         = new TevStage[tevStagesCount];
            TextureTransforms = new BxlytTextureTransform[mtxCount];

            for (int i = 0; i < texCount; i++)
            {
                TextureMaps[i] = new TextureRef(reader, header);
            }

            for (int i = 0; i < mtxCount; i++)
            {
                TextureTransforms[i] = new BxlytTextureTransform(reader);
            }

            for (int i = 0; i < texCoordGenCount; i++)
            {
                TexCoordGens.Add(new TexCoordGenEntry(reader));
            }

            if (HasChannelControl)
            {
                ChanControl = new ChanCtrl(reader);
            }

            if (HasMaterialColor)
            {
                MatColor = reader.ReadColor8RGBA();
            }

            if (HasTevSwapTable)
            {
                TevSwapModeTable = new TevSwapModeTable(reader);
            }

            for (int i = 0; i < indSrtCount; i++)
            {
                IndirectTexTransforms.Add(new BxlytTextureTransform(reader));
            }

            for (int i = 0; i < indTexOrderCount; i++)
            {
                IndirectStages.Add(new IndirectStage(reader));
            }

            for (int i = 0; i < tevStagesCount; i++)
            {
                TevStages[i] = new TevStage(reader, header);
            }

            if (HasAlphaCompare)
            {
                AlphaCompare = new AlphaCompare(reader);
            }

            if (HasBlendMode)
            {
                BlendMode = new BxlytBlendMode(reader, header);
            }
        }