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()); } }
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) { Vertices.Clear(); Links.Clear(); AreaTables.Clear(); var vertexOffset = Reader.ReadUInt32(); var vertexCount = Reader.ReadInt32(); var linkOffset = Reader.ReadUInt32(); var linkCount = Reader.ReadInt32(); Unknown1 = Reader.ReadInt32(); Unknown2 = Reader.ReadInt32(); Unknown3 = Reader.ReadInt16(); Unknown4 = Reader.ReadInt16(); Unknown5 = Reader.ReadInt16(); Unknown6 = Reader.ReadInt16(); Unknown7 = Reader.ReadInt32(); var polyOffset = Reader.ReadUInt32(); var polyCount = Reader.ReadInt32(); Unknown8 = Reader.ReadInt32(); Reader.Seek(vertexOffset); for (int i = 0; i < vertexCount; i++) { var v = new SBM_GrCollVertex(); v.Open(Reader); Vertices.Add(v); } Reader.Seek(linkOffset); for (int i = 0; i < linkCount; i++) { var v = new SBM_GrCollLink(); v.Open(Reader); Links.Add(v); } Reader.Seek(polyOffset); for (int i = 0; i < polyCount; i++) { var v = new SBM_GrCollAreaTable(); v.Open(Reader); AreaTables.Add(v); } }
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); } }
public override void Open(HSDReader Reader) { var partitionPointer = Reader.ReadUInt32(); var partitionCount = Reader.ReadInt16(); Reader.ReadInt16(); { var temp = Reader.Position(); Reader.Seek(partitionPointer); uint[] pointers = new uint[partitionCount]; for (int i = 0; i < partitionCount; i++) { pointers[i] = Reader.ReadUInt32(); } for (int i = 0; i < partitionCount; i++) { Reader.Seek(pointers[i]); KAR_GrPartition p = new KAR_GrPartition(); p.Open(Reader); Partitions.Add(p); } Reader.Seek(temp); } // now for a few sections // there are 5 // 1 - collidable triangles // 2 - ? related to pads // 3 - ? // 4 - ? // 5 - ? // 32 Data Type // 32 pointer // 16 count // 16 padding { var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); var temp = Reader.Position(); Reader.Seek(pointer); for (int i = 0; i < count; i++) { CollidableTriangles.Add(Reader.ReadInt16()); } Reader.Seek(temp); } { //TODO: var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); var temp = Reader.Position(); Reader.Seek(pointer); for (int i = 0; i < count; i++) { UnknownIndices.Add(Reader.ReadInt16()); } Reader.Seek(temp); } { //TODO: var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); var temp = Reader.Position(); Reader.Seek(pointer); for (int i = 0; i < count; i++) { UnknownIndices2.Add(Reader.ReadInt16()); } Reader.Seek(temp); } { //TODO: var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); } { //TODO: var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); } if (Reader.ReadInt32() != 0) { throw new NotSupportedException("Dat format not supported"); } // one more bool section, usually all false? { //TODO: var dataType = Reader.ReadInt32(); var pointer = Reader.ReadUInt32(); var count = Reader.ReadInt16(); Reader.ReadInt16(); var temp = Reader.Position(); Reader.Seek(pointer); // TODO: bit reader Reader.Seek(temp); } }