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); } }
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"); }
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); } }
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); } }