public override void Open(HSDReader Reader) { var vertexOffset = Reader.ReadUInt32(); var vertexCount = Reader.ReadInt32(); var faceOffset = Reader.ReadUInt32(); var faceCount = Reader.ReadInt32(); var jointOffset = Reader.ReadUInt32(); var jointCount = Reader.ReadInt32(); var zonevertexOffset = Reader.ReadUInt32(); var zonevertexCount = Reader.ReadInt32(); var zonefaceOffset = Reader.ReadUInt32(); var zonefaceCount = Reader.ReadInt32(); var zonejointOffset = Reader.ReadUInt32(); var zonejointCount = Reader.ReadInt32(); Reader.Seek(vertexOffset); for (int i = 0; i < vertexCount; i++) { Vertices.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle())); } Reader.Seek(faceOffset); for (int i = 0; i < faceCount; i++) { KAR_CollisionTriangle tri = new KAR_CollisionTriangle(); tri.Open(Reader); Faces.Add(tri); } Reader.Seek(jointOffset); for (int i = 0; i < jointCount; i++) { KAR_CollisionJoint joint = new KAR_CollisionJoint(); joint.Open(Reader); Joints.Add(joint); } Reader.Seek(zonevertexOffset); for (int i = 0; i < zonevertexCount; i++) { ZoneVertices.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle())); } Reader.Seek(zonefaceOffset); for (int i = 0; i < zonefaceCount; i++) { KAR_ZoneCollisionTriangle tri = new KAR_ZoneCollisionTriangle(); tri.Open(Reader); ZoneFaces.Add(tri); } Reader.Seek(zonejointOffset); for (int i = 0; i < zonejointCount; i++) { KAR_ZoneCollisionJoint joint = new KAR_ZoneCollisionJoint(); joint.Open(Reader); ZoneJoints.Add(joint); } }
public override void Open(HSDReader Reader) { uint DataOffset = Reader.ReadUInt32(); Width = Reader.ReadUInt16(); Height = Reader.ReadUInt16(); Format = (GXTexFmt)Reader.ReadUInt32(); Mipmap = Reader.ReadUInt32(); MinLOD = Reader.ReadSingle(); MaxLOD = Reader.ReadSingle(); Data = Reader.ReadBuffer(DataOffset, TPL.TextureByteSize((TPL_TextureFormat)Format, Width, Height)); }
public override void Open(HSDReader Reader) { uint Offset = Reader.ReadUInt32(); float Weight = Reader.ReadSingle(); JOBJs = new List <HSD_JOBJ>(); Weights = new List <float>(); while (Offset != 0) { JOBJs.Add(Reader.ReadObject <HSD_JOBJ>(Offset)); Weights.Add(Weight); Offset = Reader.ReadUInt32(); Weight = Reader.ReadSingle(); } }
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) { Type = Reader.ReadInt16(); int PathPointCount = Reader.ReadInt16(); Tension = Reader.ReadSingle(); uint PointTableOffset = Reader.ReadUInt32(); TotalLength = Reader.ReadSingle(); uint segmentLengthOffset = Reader.ReadUInt32(); if (Reader.ReadInt32() != 0) // this is a pointer to a float array of length 5? { Console.WriteLine("Resave not supported"); //throw new NotSupportedException("Dat not supported"); } Reader.Seek(PointTableOffset); for (int i = 0; i < PathPointCount; i++) { Points.Add(new GXVector3(Reader.ReadSingle(), Reader.ReadSingle(), Reader.ReadSingle())); } Reader.Seek(segmentLengthOffset); for (int i = 0; i < PathPointCount; i++) { SegmentLengths.Add(Reader.ReadSingle()); } }
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); } }