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(); }
public PAN1(BxlytHeader header, string name) : base() { LayoutFile = header; LoadDefaults(); Name = name; }
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]; }
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); }
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; }
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); }
public TextureRef(FileReader reader, BxlytHeader header) { ID = reader.ReadInt16(); flag1 = reader.ReadByte(); flag2 = reader.ReadByte(); if (header.Textures.Count > 0) { Name = header.Textures[ID]; } }
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); } }
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)); } }
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)); } }
public PRT1(BxlytHeader header, string name) : base() { LoadDefaults(); Name = name; layoutFile = (BCLYT.Header)header; MagnifyX = 1; MagnifyY = 1; LayoutFileName = ""; Properties = new List <PartProperty>(); }
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); }
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); }
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)); } }
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(); }
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); } } }
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)]; }
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(); }
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); } }
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)); } }
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)); } }
public void SetFrames(BxlytHeader header) { }
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); } } }
public TexCoordGen(FileReader reader, BxlytHeader header) { Matrix = (TexGenMatrixType)reader.ReadByte(); Source = (TexGenType)reader.ReadByte(); Unknown = reader.ReadUInt16(); }
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 BND1(FileReader reader, BxlytHeader header) : base(reader, header) { }
public BND1(BxlytHeader header, string name) : base() { LoadDefaults(); Name = name; }
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); } }