private static float[] Read(HSDReader d, GXCompType type, int size) { switch (type) { case GXCompType.UInt16: size /= 2; break; case GXCompType.Int16: size /= 2; break; case GXCompType.Float: size /= 4; break; } float[] a = new float[size]; switch (type) { case GXCompType.UInt8: for (int i = 0; i < size; i++) { a[i] = d.ReadByte(); } break; case GXCompType.Int8: for (int i = 0; i < size; i++) { a[i] = d.ReadSByte(); } break; case GXCompType.UInt16: for (int i = 0; i < size; i++) { a[i] = d.ReadUInt16(); } break; case GXCompType.Int16: for (int i = 0; i < size; i++) { a[i] = d.ReadInt16(); } break; case GXCompType.Float: for (int i = 0; i < size; i++) { a[i] = d.ReadSingle(); } break; default: for (int i = 0; i < size; i++) { a[i] = d.ReadByte(); } break; } return(a); }
public override void Open(HSDReader Reader) { Name = (GXAttribName)Reader.ReadUInt32(); AttributeType = (GXAttribType)Reader.ReadUInt32(); CompCount = (GXCompCnt)Reader.ReadInt32(); CompType = (GXCompType)Reader.ReadUInt32(); Scale = Reader.ReadByte(); Reader.ReadByte();//Padding Stride = Reader.ReadUInt16(); Offset = Reader.ReadUInt32(); }
public override void Open(HSDReader Reader) { List <byte> data = new List <byte>(); byte cmd = Reader.ReadByte(); while (cmd != 0) { int size = MeleeScript.GetCommandSize(cmd); data.Add(cmd); data.AddRange(Reader.ReadBytes(size - 1)); cmd = Reader.ReadByte(); } Data = data.ToArray(); }
public bool Read(HSDReader Reader, HSD_AttributeGroup Attributes) { PrimitiveType = (GXPrimitiveType)Reader.ReadByte(); if (PrimitiveType == 0) { return(false); } Count = Reader.ReadUInt16(); Indices = new GXIndexGroup[Count]; for (int j = 0; j < Count; j++) { GXIndexGroup g = new GXIndexGroup(); g.Indices = new ushort[Attributes.Attributes.Count]; int i = 0; Indices[j] = g; foreach (GXVertexBuffer att in Attributes.Attributes) { switch (att.AttributeType) { case GXAttribType.GX_DIRECT: if (att.Name == GXAttribName.GX_VA_CLR0) { g.Clr0 = ReadGXClr(Reader, (int)att.CompType); } else if (att.Name == GXAttribName.GX_VA_CLR1) { g.Clr1 = ReadGXClr(Reader, (int)att.CompType); } else { g.Indices[i] = Reader.ReadByte(); } break; case GXAttribType.GX_INDEX8: g.Indices[i] = Reader.ReadByte(); break; case GXAttribType.GX_INDEX16: g.Indices[i] = Reader.ReadUInt16(); break; } i++; } } return(true); }
public override void Open(HSDReader Reader) { Type = Reader.ReadInt32(); if (Type == -1) { MatAnimJoint = Reader.ReadObject <HSD_MatAnimJoint>(Reader.ReadUInt32()); } else { Reader.ReadInt32(); // nothing } FrameCount = Reader.ReadSingle(); uint TrackCountOffset = Reader.ReadUInt32(); uint TrackOffset = Reader.ReadUInt32(); Reader.Seek(TrackCountOffset); List <byte> TrackCounts = new List <byte>(); byte TrackCount; while ((TrackCount = Reader.ReadByte()) != 0xFF) { TrackCounts.Add(TrackCount); } int track = 0; for (int i = 0; i < TrackCounts.Count; i++) { HSD_AnimNode Node = new HSD_AnimNode(); Nodes.Add(Node); for (int j = 0; j < TrackCounts[i]; j++) { Reader.Seek((uint)(TrackOffset + 0xC * track++)); HSD_Track t = new HSD_Track(); t.Open(Reader); Node.Tracks.Add(t); } } }
private static double ReadVal(HSDReader d, GXAnimDataFormat Format, float Scale) { d.BigEndian = false; switch (Format) { case GXAnimDataFormat.Float: return(d.ReadSingle()); case GXAnimDataFormat.Short: return(d.ReadInt16() / (double)Scale); case GXAnimDataFormat.UShort: return(d.ReadUInt16() / (double)Scale); case GXAnimDataFormat.SByte: return(d.ReadSByte() / (double)Scale); case GXAnimDataFormat.Byte: return(d.ReadByte() / (double)Scale); default: return(0); } }
private static byte[] ReadGXClr(HSDReader Reader, int CompType) { byte[] clr = new byte[] { 1, 1, 1, 1 }; int b; switch (CompType) { case 0: // GX_RGB565 b = Reader.ReadUInt16(); clr[0] = (byte)((((b >> 11) & 0x1F) << 3) | (((b >> 11) & 0x1F) >> 2)); clr[1] = (byte)((((b >> 5) & 0x3F) << 2) | (((b >> 5) & 0x3F) >> 4)); clr[2] = (byte)((((b) & 0x1F) << 3) | (((b) & 0x1F) >> 2)); break; case 1: // GX_RGB888 clr[0] = Reader.ReadByte(); clr[1] = Reader.ReadByte(); clr[2] = Reader.ReadByte(); break; case 2: // GX_RGBX888 clr[0] = Reader.ReadByte(); clr[1] = Reader.ReadByte(); clr[2] = Reader.ReadByte(); Reader.ReadByte(); break; case 3: // GX_RGBA4 b = Reader.ReadUInt16(); clr[0] = (byte)((((b >> 12) & 0xF) << 4) | ((b >> 12) & 0xF)); clr[1] = (byte)((((b >> 8) & 0xF) << 4) | ((b >> 8) & 0xF)); clr[2] = (byte)((((b >> 4) & 0xF) << 4) | ((b >> 4) & 0xF)); clr[3] = (byte)((((b) & 0xF) << 4) | ((b) & 0xF)); break; case 4: // GX_RGBA6 b = (Reader.ReadByte() << 16) | (Reader.ReadByte() << 8) | (Reader.ReadByte()); clr[0] = (byte)((((b >> 18) & 0x3F) << 2) | (((b >> 18) & 0x3F) >> 4)); clr[1] = (byte)((((b >> 12) & 0x3F) << 2) | (((b >> 12) & 0x3F) >> 4)); clr[2] = (byte)((((b >> 6) & 0x3F) << 2) | (((b >> 6) & 0x3F) >> 4)); clr[3] = (byte)((((b) & 0x3F) << 2) | (((b) & 0x3F) >> 4)); break; case 5: // GX_RGBX888 clr[0] = Reader.ReadByte(); clr[1] = Reader.ReadByte(); clr[2] = Reader.ReadByte(); clr[3] = Reader.ReadByte(); break; default: throw new Exception("Unknown Color Type"); } return(clr); }