public override void Open(HSDReader Reader) { for (int i = 0; i < Size; i++) { Elements[i] = Reader.ReadObject <T>(Reader.Position()); } }
public override void Open(HSDReader Reader) { var start = Reader.Position(); var count = Reader.ReadInt32(); for (int i = 0; i < count; i++) { var off = Reader.ReadUInt32(); var temp = Reader.Position(); Reader.Seek(start + off); SBM_GrMapSpriteSheet sheet = new SBM_GrMapSpriteSheet(); sheet.Open(Reader, start); Sheets.Add(sheet); Reader.Seek(temp); } // there is sometimes padding with values in it // there is a 0xC section that has 0, 0x20, and some number }
public override void Open(HSDReader Reader) { base.Open(Reader); uint BaseOffset = Reader.Position(); GroupsUnk2_1D = new HSD_Array <KAR_GrUnk2_1DModel>(Size); Reader.Seek(Offset); GroupsUnk2_1D.Open(Reader); Reader.Seek(BaseOffset); }
public override void Open(HSDReader Reader) { var dataoff = Reader.ReadUInt32(); var datacount = Reader.ReadInt32(); var datastaticoff = Reader.ReadUInt32(); var datastaticcount = Reader.ReadInt32(); var datacommonoff = Reader.ReadUInt32(); var datacommoncount = Reader.ReadInt32(); Reader.Seek(dataoff); for (int i = 0; i < datacount; i++) { var off = Reader.ReadUInt32(); var temp = Reader.Position(); Reader.Seek(off); var v = new KAR_GrYakumonoData(); v.Open(Reader); YakuData.Add(v); Reader.Seek(temp); } Reader.Seek(datastaticoff); for (int i = 0; i < datastaticcount; i++) { var off = Reader.ReadUInt32(); var temp = Reader.Position(); Reader.Seek(off); var v = new KAR_GrYakumonoData(); v.Open(Reader); YakuStaticData.Add(v); Reader.Seek(temp); } for (int i = 0; i < datacommoncount; i++) { Reader.Seek(datacommonoff + (uint)(i * 12)); var com = new KAR_GrYakumonoCommonData(); com.Open(Reader); YakuCommonData.Add(com); } }
public override void Open(HSDReader Reader) { base.Open(Reader); uint BaseOffset = Reader.Position(); DOBJIndices.Clear(); Reader.Seek(Offset); for (int i = 0; i < Size; i++) { DOBJIndices.Add(Reader.ReadUInt16()); } Reader.Seek(BaseOffset); }
public override void Open(HSDReader Reader) { var off = Reader.ReadUInt32(); while (off != 0) { var temp = Reader.Position(); Reader.Seek(off); HSD_Light light = new HSD_Light(); light.Open(Reader); Lights.Add(light); Reader.Seek(temp); off = Reader.ReadUInt32(); } }
public override void Open(HSDReader Reader) { var start = Reader.Position(); for (int i = 0; i < 4; i++) { Reader.Seek(start + (uint)(8 * i)); KAR_GrCourseSplineTable table = new KAR_GrCourseSplineTable(); if (table.Indices.Count == 0) { break; } table.Open(Reader); Tables.Add(table); } }
public GXDisplayList(byte[] Buffer, HSD_AttributeGroup Group) { if (Buffer == null) { return; } HSDReader Reader = new HSDReader(new MemoryStream(Buffer)); while (Reader.Position() < Buffer.Length) { GXPrimitiveGroup g = new GXPrimitiveGroup(); if (!g.Read(Reader, Group)) { break; } Primitives.Add(g); } Reader.Close(); }
public override void Open(HSDReader Reader) { if (Reader.ReadInt32() != 0) { throw new NotSupportedException("Yaku all not supported"); } var off = Reader.ReadUInt32(); while (off != 0) { var temp = Reader.Position(); Reader.Seek(off); SBM_YakuAllNode node = new SBM_YakuAllNode(); node.Open(Reader); Nodes.Add(node); Reader.Seek(temp); off = Reader.ReadUInt32(); } }
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); } }
public List <FOBJKey> GetKeys(float FrameCount = -1) { List <FOBJKey> Keys = new List <FOBJKey>(); int clock = 0; Reader.Seek(0); while (Reader.Position() < FOBJ.Data.Length) { int type = Reader.ExtendedByte(); InterpolationType interpolation = (InterpolationType)((type) & 0x0F); int numOfKey = ((type >> 4)) + 1; if (interpolation == 0) { break; } for (int i = 0; i < numOfKey; i++) { double value = 0; double tan = 0; int time = 0; switch (interpolation) { case InterpolationType.Step: value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale); time = Reader.ExtendedByte(); break; case InterpolationType.Linear: value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale); time = Reader.ExtendedByte(); break; case InterpolationType.HermiteValue: value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale); time = Reader.ExtendedByte(); break; case InterpolationType.Hermite: value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale); tan = ReadVal(Reader, FOBJ.TanFormat, FOBJ.TanScale); time = Reader.ExtendedByte(); break; case InterpolationType.HermiteCurve: tan = ReadVal(Reader, FOBJ.TanFormat, FOBJ.TanScale); break; case InterpolationType.Constant: value = ReadVal(Reader, FOBJ.ValueFormat, FOBJ.ValueScale); break; default: throw new Exception("Unknown Interpolation Type " + interpolation.ToString("X")); } //Console.WriteLine(clock + " " + value + " " + FOBJ.ValueFormat ); FOBJKey kf = new FOBJKey(); kf.InterpolationType = interpolation; kf.Value = (float)value; kf.Frame = clock; kf.Tan = (float)tan; Keys.Add(kf); clock += time; } } return(Keys); }