public DrawElement(FileReader reader, BIN_Parser header) { MaterialIndex = reader.ReadInt16(); ShapeBatchIndex = reader.ReadInt16(); Material = header.ReadSection <Material>(reader, MaterialIndex); Batch = header.ReadSection <ShapeBatch>(reader, ShapeBatchIndex); }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(Width); writer.Write(Height); writer.Write((byte)Format); writer.Write(Unknown); writer.Write((ushort)0); writer.Write(uint.MaxValue); }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(TextureIndex); writer.Write(PaletteIndex); writer.Write(WrapS); writer.Write(WrapT); writer.Write(Unknown); writer.Write(new byte[12]); //padding }
public Sampler(FileReader reader, BIN_Parser header) { TextureIndex = reader.ReadInt16(); PaletteIndex = reader.ReadInt16(); WrapS = reader.ReadByte(); WrapT = reader.ReadByte(); Unknown = reader.ReadUInt16(); Texture = header.ReadSection <Texture>(reader, TextureIndex); }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(DynamicLighting); writer.Write(Unknown2); writer.Write(Unknown3); writer.Write(AmbientColor); writer.Write((byte)0); writer.Write(SamplerIndices); writer.Write(Unknown4); writer.Write(Unknown5); writer.Write(Padding); }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(TriangleCount); writer.Write(DisplayListSize); writer.Write((uint)AttributeFlags); writer.Write(NormalsFlag); writer.Write(PositionsFlag); writer.Write(TexCoordFlag); writer.Write(NbtFlag); writer.Write(0); writer.Write(0); writer.Write(0); }
public Texture(FileReader reader, BIN_Parser header) { Width = reader.ReadUInt16(); Height = reader.ReadUInt16(); Format = (Decode_Gamecube.TextureFormats)reader.ReadByte(); Unknown = reader.ReadByte(); reader.ReadUInt16(); //padding uint imageOffset = reader.ReadUInt32(); using (reader.TemporarySeek(header.TextureOffset + imageOffset, System.IO.SeekOrigin.Begin)) { var size = Decode_Gamecube.GetDataSize(Format, Width, Height); ImageData = reader.ReadBytes(size); } }
public ShapeBatch(FileReader reader, BIN_Parser header) { TriangleCount = reader.ReadUInt16(); DisplayListSize = reader.ReadUInt16(); AttributeFlags = (GXAttributes)reader.ReadUInt32(); NormalsFlag = reader.ReadByte(); PositionsFlag = reader.ReadByte(); TexCoordFlag = reader.ReadByte(); NbtFlag = reader.ReadByte(); uint dataOffset = reader.ReadUInt32(); reader.SeekBegin(header.ShapeBatchOffset + dataOffset); ParsePacketData(reader, header); }
public SceneGraphNode(FileReader reader, int index, BIN_Parser header) { Index = index; ParentIndex = reader.ReadInt16(); FirstChildIndex = reader.ReadInt16(); NextSiblingIndex = reader.ReadInt16(); PrevSiblingIndex = reader.ReadInt16(); reader.ReadByte(); RenderFlags = (GraphObjectRenderFlags)reader.ReadByte(); reader.ReadInt16(); Scale = reader.ReadVec3(); Rotate = reader.ReadVec3(); Translate = reader.ReadVec3(); BoundingMin = reader.ReadVec3(); BoundingMax = reader.ReadVec3(); Unknown = reader.ReadSingle(); ushort drawElementCount = reader.ReadUInt16(); reader.ReadUInt16(); //padding uint drawElementOffset = reader.ReadUInt32(); if (drawElementCount > 0) { for (int i = 0; i < drawElementCount; i++) { reader.SeekBegin(header.SceneGraphOffset + drawElementOffset + (i * 4)); DrawnParts.Add(new DrawElement(reader, header)); } } if (FirstChildIndex >= 0) { AddChild(header.ReadSection <SceneGraphNode>(reader, FirstChildIndex)); } if (NextSiblingIndex >= 0) { if (Parent != null) { Parent.AddChild(header.ReadSection <SceneGraphNode>(reader, NextSiblingIndex)); } else { AddChild(header.ReadSection <SceneGraphNode>(reader, NextSiblingIndex)); } } }
public Material(FileReader reader, BIN_Parser header) { DynamicLighting = reader.ReadByte(); Unknown2 = reader.ReadByte(); Unknown3 = reader.ReadByte(); AmbientColor = reader.ReadColor8RGBA(); reader.ReadByte(); //padding SamplerIndices = reader.ReadInt16s(8); Unknown4 = reader.ReadInt16(); Unknown5 = reader.ReadInt16(); Padding = reader.ReadBytes(12); for (int i = 0; i < 8; i++) { if (SamplerIndices[i] != -1) { Samplers.Add(header.ReadSection <Sampler>(reader, SamplerIndices[i])); } } }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(ParentIndex); writer.Write(FirstChildIndex); writer.Write(NextSiblingIndex); writer.Write(PrevSiblingIndex); writer.Write((byte)0); writer.Write((byte)RenderFlags); writer.Write((ushort)0); writer.Write(Scale); writer.Write(Rotate); writer.Write(Translate); writer.Write(BoundingMin); writer.Write(BoundingMax); writer.Write(Unknown); writer.Write((ushort)DrawnParts.Count); writer.Write((ushort)0); writer.Write(0); writer.Write(new byte[56]); }
public void Write(ShapeBatch batch, FileWriter writer, BIN_Parser header) { writer.Write(OpCode); writer.Write((ushort)Vertices.Length); for (int i = 0; i < Vertices.Length; i++) { writer.Write(Vertices[i].PositionIndex); if (batch.AttributeFlags.HasFlag(GXAttributes.Normal)) { writer.Write(Vertices[i].NormalIndex); if (batch.NbtFlag != 0) { writer.Write(Vertices[i].BinormalIndex); writer.Write(Vertices[i].TangentIndex); } } if (batch.AttributeFlags.HasFlag(GXAttributes.Color0)) { writer.Write(Vertices[i].Color0Index); } if (batch.AttributeFlags.HasFlag(GXAttributes.Color1)) { writer.Write(Vertices[i].Color1Index); } for (int t = 0; t < batch.TexCoordFlag; t++) { if (batch.AttributeFlags.HasFlag((GXAttributes)(1 << (13 + t)))) { writer.Write(Vertices[i].TexCoordIndex[t]); } } } }
private void ParsePacketData(FileReader reader, BIN_Parser header) { long pos = reader.Position; while (reader.Position < pos + (DisplayListSize * 0x20)) { byte opCode = reader.ReadByte(); if (opCode == 0) { continue; } PacketData packet = new PacketData(); packet.OpCode = opCode; Packets.Add(packet); ushort vertexCount = reader.ReadUInt16(); packet.Vertices = new VertexGroup[vertexCount]; for (int i = 0; i < vertexCount; i++) { VertexGroup group = new VertexGroup(); group.PositionIndex = reader.ReadInt16(); if (AttributeFlags.HasFlag(GXAttributes.Normal)) { group.NormalIndex = reader.ReadInt16(); if (NbtFlag != 0) { group.BinormalIndex = reader.ReadInt16(); group.TangentIndex = reader.ReadInt16(); } } if (AttributeFlags.HasFlag(GXAttributes.Color0)) { group.Color0Index = reader.ReadInt16(); } if (AttributeFlags.HasFlag(GXAttributes.Color1)) { group.Color1Index = reader.ReadInt16(); } for (int t = 0; t < TexCoordFlag; t++) { if (AttributeFlags.HasFlag((GXAttributes)(1 << (13 + t)))) { group.TexCoordIndex[t] = reader.ReadInt16(); } } //Parse data using (reader.TemporarySeek(header.PositionOffset + (group.PositionIndex * 6), System.IO.SeekOrigin.Begin)) { group.Position = new Vector3( (float)reader.ReadInt16(), (float)reader.ReadInt16(), (float)reader.ReadInt16()); } if (group.NormalIndex != -1) { using (reader.TemporarySeek(header.NormalOffset + (group.NormalIndex * 12), System.IO.SeekOrigin.Begin)) { group.Normal = new Vector3( (float)reader.ReadSingle(), (float)reader.ReadSingle(), (float)reader.ReadSingle()); } } if (group.TangentIndex != -1) { using (reader.TemporarySeek(header.NormalOffset + (group.TangentIndex * 12), System.IO.SeekOrigin.Begin)) { group.Tangent = new Vector3( reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } } if (group.BinormalIndex != -1) { using (reader.TemporarySeek(header.NormalOffset + (group.BinormalIndex * 12), System.IO.SeekOrigin.Begin)) { group.Binormal = new Vector3( reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()); } } if (group.TexCoordIndex[0] != -1) { using (reader.TemporarySeek(header.TexCoordOffset + (group.TexCoordIndex[0] * 8), System.IO.SeekOrigin.Begin)) { //Flip UVs group.Texcoord = new Vector2( (float)reader.ReadSingle(), (float)reader.ReadSingle()); } } packet.Vertices[i] = group; } } }
public void Write(FileWriter writer, BIN_Parser header) { writer.Write(MaterialIndex); writer.Write(ShapeBatchIndex); }
public void Load(Stream stream) { Header = new BIN_Parser(stream); }