Beispiel #1
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);
            }
        }
Beispiel #2
0
                public Material(ref BinaryStream s)
                {
                    name = Encoding.ASCII.GetString(s.ReadBytes(28)).Replace("\0", "");

                    flag    = s.ReadUInt32();
                    unknown = s.ReadUInt32();

                    byte[] black = s.ReadBytes(4), white = s.ReadBytes(4);
                    blackColor = Color.FromArgb(black[3], black[0], black[1], black[2]);
                    whiteColor = Color.FromArgb(white[3], white[0], black[1], black[2]);

                    texMapCount                    = (uint)(flag & 0x03);
                    texSRTCount                    = (uint)((flag >> 2) & 0x03);
                    texCoordGenCount               = (uint)((flag >> 4) & 0x03);
                    tevStageCount                  = (uint)((flag >> 6) & 0x07);
                    hasAlphaCompare                = ((flag >> 9) & 0x01) == 1;
                    hasBlendMode                   = ((flag >> 10) & 0x01) == 1;
                    useTextureOnly                 = ((flag >> 11) & 0x01) == 1;
                    seperateBlendMode              = ((flag >> 12) & 0x01) == 1;
                    hasIndirectParameter           = ((flag >> 14) & 0x01) == 1;
                    projectionTexGenParameterCount = (uint)((flag >> 15) & 0x03);
                    hasFontShadowParameter         = ((flag >> 17) & 0x01) == 1;
                    thresholingAlphaInterpolation  = ((flag >> 18) & 0x01) == 1;

                    texMaps = new TexMap[texMapCount];
                    for (int i = 0; i < texMapCount; i++)
                    {
                        texMaps[i] = new TexMap(ref s);
                    }

                    texSRTs = new TexSRT[texSRTCount];
                    for (int i = 0; i < texSRTCount; i++)
                    {
                        texSRTs[i] = new TexSRT(ref s);
                    }

                    texCoords = new TexCoordGen[texCoordGenCount];
                    for (int i = 0; i < texCoordGenCount; i++)
                    {
                        texCoords[i] = new TexCoordGen(ref s);
                    }

                    tevStages = new TevStage[tevStageCount];
                    for (int i = 0; i < tevStageCount; i++)
                    {
                        tevStages[i] = new TevStage(ref s);
                    }

                    if (hasAlphaCompare)
                    {
                        alphaCompare = new AlphaCompare(ref s);
                    }

                    if (hasBlendMode)
                    {
                        blendMode = new BlendMode(ref s);
                    }

                    if (seperateBlendMode)
                    {
                        blendAlpha = new BlendMode(ref s);
                    }

                    if (hasIndirectParameter)
                    {
                        indirectParameter = new IndirectParameter(ref s);
                    }

                    projectionTexGenParameters = new ProjectionTexGenParameters[projectionTexGenParameterCount];
                    for (int i = 0; i < projectionTexGenParameterCount; i++)
                    {
                        projectionTexGenParameters[i] = new ProjectionTexGenParameters(ref s);
                    }

                    if (hasFontShadowParameter)
                    {
                        fontShadowParameter = new FontShadowParameter(ref s);
                    }

                    //System.Windows.Forms.MessageBox.Show($"[{s.BaseStream.Position}] mat end");
                }
Beispiel #3
0
        public Material(ref EndianBinaryReader reader)
        {
            base.setType(Type._3DS);

            mName     = reader.ReadString(0x14).Replace("\0", "");
            mTevColor = reader.ReadRGBAColor8();

            mTevConstantColors = new RGBAColor8[0x6];

            for (int i = 0; i < 6; i++)
            {
                mTevConstantColors[i] = reader.ReadRGBAColor8();
            }

            mFlags = reader.ReadUInt32();

            mTexMapCount          = ExtractBits(mFlags, 2, 0);
            mTexMtxCount          = ExtractBits(mFlags, 2, 2);
            mTexCoordGenCount     = ExtractBits(mFlags, 2, 4);
            mTevStageCount        = ExtractBits(mFlags, 2, 6);
            mHasAlphaCompare      = Convert.ToBoolean(ExtractBits(mFlags, 1, 9));
            mHasBlendMode         = Convert.ToBoolean(ExtractBits(mFlags, 1, 10));
            mUseTextureOnly       = Convert.ToBoolean(ExtractBits(mFlags, 1, 11));
            mSeperateBlendMode    = Convert.ToBoolean(ExtractBits(mFlags, 1, 12));
            mHasIndParam          = Convert.ToBoolean(ExtractBits(mFlags, 1, 14));
            mProjTexGenParamCount = ExtractBits(mFlags, 2, 15);
            mHasFontShadowParam   = Convert.ToBoolean(ExtractBits(mFlags, 1, 17));

            mTexMaps = new List <TexMap>();

            for (int i = 0; i < mTexMapCount; i++)
            {
                mTexMaps.Add(new TexMap(ref reader));
            }

            mTexSRTs = new List <TexSRT>();

            for (int i = 0; i < mTexMtxCount; i++)
            {
                mTexSRTs.Add(new TexSRT(ref reader));
            }

            mTexCoords = new List <TexCoordGen>();

            for (int i = 0; i < mTexCoordGenCount; i++)
            {
                mTexCoords.Add(new TexCoordGen(ref reader));
            }

            mTevStages = new List <TevStage>();

            for (int i = 0; i < mTevStageCount; i++)
            {
                mTevStages.Add(new TevStage(ref reader));
            }

            if (mHasAlphaCompare)
            {
                mAlphaCompare = new AlphaCompare(ref reader);
            }
            if (mHasBlendMode)
            {
                mBlendMode_Blend = new BlendMode(ref reader);
            }
            if (mSeperateBlendMode)
            {
                mBlendMode_Logic = new BlendMode(ref reader);
            }
            if (mHasIndParam)
            {
                mIndParameter = new IndirectParameter(ref reader);
            }

            mProjTexGenParams = new List <ProjectionTexGenParam>();

            for (int i = 0; i < mProjTexGenParamCount; i++)
            {
                mProjTexGenParams.Add(new ProjectionTexGenParam(ref reader));
            }

            if (mHasFontShadowParam)
            {
                mFontShadowParam = new FontShadowParameter(ref reader);
            }
        }
Beispiel #4
0
        public Material(ref EndianBinaryReader reader, uint version)
        {
            base.setType(Type.WiiU_Switch);

            mName = reader.ReadString(0x1C).Replace("\0", "");

            // Switch BFLYT
            if (version == 0x8030000)
            {
                mFlags = reader.ReadUInt32();
                mUnk   = reader.ReadUInt32();

                mBlackColor = reader.ReadRGBAColor8();
                mWhiteColor = reader.ReadRGBAColor8();
            }
            // WiiU BFLYT
            else
            {
                mBlackColor = reader.ReadRGBAColor8();
                mWhiteColor = reader.ReadRGBAColor8();
                mFlags      = reader.ReadUInt32();
            }

            mTexMapCount                    = Convert.ToUInt32(mFlags & 0x3);
            mTexMtxCount                    = Convert.ToUInt32((mFlags >> 2) & 0x3);
            mTexCoordGenCount               = Convert.ToUInt32((mFlags >> 4) & 0x3);
            mTevStageCount                  = Convert.ToUInt32((mFlags >> 6) & 0x7);
            mHasAlphaCompare                = Convert.ToBoolean((mFlags >> 9) & 0x1);
            mHasBlendMode                   = Convert.ToBoolean((mFlags >> 10) & 0x1);
            mUseTextureOnly                 = Convert.ToBoolean((mFlags >> 11) & 0x1);
            mSeperateBlendMode              = Convert.ToBoolean((mFlags >> 12) & 0x1);
            mHasIndParam                    = Convert.ToBoolean((mFlags >> 14) & 0x1);
            mProjTexGenParamCount           = Convert.ToUInt32((mFlags >> 15) & 0x3);
            mHasFontShadowParam             = Convert.ToBoolean((mFlags >> 17) & 0x1);
            mThresholdingAlphaInterpolation = Convert.ToBoolean((mFlags >> 18) & 0x1);

            mTexMaps = new List <TexMap>();

            for (int i = 0; i < mTexMapCount; i++)
            {
                mTexMaps.Add(new TexMap(ref reader));
            }

            mTexSRTs = new List <TexSRT>();

            for (int i = 0; i < mTexMtxCount; i++)
            {
                mTexSRTs.Add(new TexSRT(ref reader));
            }

            mTexCoords = new List <TexCoordGen>();

            for (int i = 0; i < mTexCoordGenCount; i++)
            {
                mTexCoords.Add(new TexCoordGen(ref reader));
            }

            mTevStages = new List <TevStage>();

            for (int i = 0; i < mTevStageCount; i++)
            {
                mTevStages.Add(new TevStage(ref reader));
            }

            if (mHasAlphaCompare)
            {
                mAlphaCompare = new AlphaCompare(ref reader);
            }
            if (mHasBlendMode)
            {
                mBlendMode_Blend = new BlendMode(ref reader);
            }
            if (mSeperateBlendMode)
            {
                mBlendMode_Logic = new BlendMode(ref reader);
            }
            if (mHasIndParam)
            {
                mIndParameter = new IndirectParameter(ref reader);
            }

            mProjTexGenParams = new List <ProjectionTexGenParam>();

            for (int i = 0; i < mProjTexGenParamCount; i++)
            {
                mProjTexGenParams.Add(new ProjectionTexGenParam(ref reader));
            }

            if (mHasFontShadowParam)
            {
                mFontShadowParam = new FontShadowParameter(ref reader);
            }
        }