// Methods public override void Load(Stream fileStream) { // BINA Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); string sig = reader.ReadSignature(4); if (sig != Signature) { throw new InvalidSignatureException(Signature, sig); } var unknown1 = reader.ReadUInt32(); //Might be part of the Header according to Skyth's spec? if (unknown1 != 1) { Console.WriteLine($"Unknown1 does not equal 1 in this file! It's actually set to {unknown1}"); } var shapeCount = reader.ReadInt64(); var unknown2 = reader.ReadUInt64(); if (unknown2 != 24) { Console.WriteLine($"Unknown1 does not equal 24 in this file! It's actually set to {unknown1}"); } Console.WriteLine(unknown2); for (int i = 0; i < shapeCount; i++) { SvShape shape = new SvShape(); var shapeNameOffset = reader.ReadInt64(); long pos = reader.BaseStream.Position; reader.JumpTo(shapeNameOffset, false); shape.Name = reader.ReadNullTerminatedString(); reader.JumpTo(pos, true); shape.Unknown1 = reader.ReadUInt32(); shape.Size = reader.ReadVector3(); shape.Position = reader.ReadVector3(); shape.Rotation = reader.ReadQuaternion(); shape.BoundingBox.Minimum = reader.ReadVector3(); shape.BoundingBox.Maximum = reader.ReadVector3(); shape.Unknown2 = reader.ReadUInt32(); var sectorCount = reader.ReadInt64(); var sectorListOffset = reader.ReadInt64(); pos = reader.BaseStream.Position; reader.JumpTo(sectorListOffset, false); for (int s = 0; s < sectorCount; s++) { SvSector sector = new SvSector(); sector.SectorIndex = reader.Read(); sector.Visible = reader.ReadBoolean(); shape.Sectors.Add(sector); } reader.JumpTo(pos, true); SvShapes.Add(shape); } }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); VertexCountOffsetOffset = reader.ReadUInt32(); //Refered to in LibS06 as `geometry_address` PostFaceOffset = reader.ReadUInt32(); //Refered to in LibS06 as `mopp_code_address` VertexCountOffset = reader.ReadUInt32(); //Refered to in LibS06 as `vertex_section_address` FaceCountOffset = reader.ReadUInt32(); //Refered to in LibS06 as `face_section_address` VertexCount = reader.ReadUInt32(); //Vertexes for (int i = 0; i < VertexCount; i++) { Vertices.Add(reader.ReadVector3()); } //Faces FaceCount = reader.ReadUInt32(); for (int i = 0; i < FaceCount; i++) { S06CollisionFace face = new S06CollisionFace(); face.Vertex1 = reader.ReadUInt16(); face.Vertex2 = reader.ReadUInt16(); face.Vertex3 = reader.ReadUInt16(); reader.JumpAhead(2); face.Flags = reader.ReadUInt32(); Faces.Add(face); } }
public void Read(BINAReader reader) { uint nodesCount = reader.ReadUInt32(); uint dataNodeCount = reader.ReadUInt32(); long nodesOffset = reader.ReadInt64(); long dataNodeIndicesOffset = reader.ReadInt64(); // Nodes reader.JumpTo(nodesOffset); Nodes.Capacity = (int)nodesCount; for (int i = 0; i < nodesCount; ++i) { Nodes.Add(new Node(reader, false)); } // Data Node Indices reader.JumpTo(dataNodeIndicesOffset); DataNodeIndices.Capacity = (int)dataNodeCount; for (int i = 0; i < dataNodeCount; ++i) { DataNodeIndices.Add(reader.ReadInt32()); } }
// Constructors public EffectData(BINAReader reader) { EffectName = reader.GetString(); reader.JumpAhead(12); LinkMotionStop = reader.ReadBoolean(); reader.JumpAhead(7); }
public static void ExportFont(Stream stream, string outputFile) { var reader = new BINAReader(stream); reader.ReadHeader(); var sig = reader.ReadSignature(8); if (sig != "KFCS1000") { throw new InvalidSignatureException("KFCS1000", sig); } var fontName = reader.GetString(); reader.JumpAhead(4); reader.JumpAhead(0x10); var length = reader.ReadInt64(); var fntSig = reader.ReadSignature(); outputFile = fntSig == "OTTO" ? Path.ChangeExtension(outputFile, ".otf") : Path.ChangeExtension(outputFile, ".ttf"); var data = reader.ReadBytes((int)length - 4); using (var fntStream = File.Create(outputFile)) { fntStream.Write(Encoding.Default.GetBytes(fntSig), 0, 4); fntStream.Write(data, 0, data.Length); } }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); reader.ReadHeader(); uint fileCount = reader.ReadUInt32(); uint fileEntriesPos = reader.ReadUInt32(); uint typeCount = reader.ReadUInt32(); uint typeEntriesPos = reader.ReadUInt32(); // Files Files.Capacity = (int)fileCount; reader.JumpTo(fileEntriesPos, false); for (uint i = 0; i < fileCount; ++i) { Files.Add(new S06FileEntry(reader)); } // Types Types.Capacity = (int)typeCount; reader.JumpTo(typeEntriesPos, false); for (uint i = 0; i < typeCount; ++i) { Types.Add(new S06TypeEntry(reader, fileEntriesPos)); } }
// Methods public override void Read(BINAReader reader, BINAHeader header = null) { for (uint i = 0; i < EntryCount; ++i) { Entries[i] = new Entry(reader); } }
// Methods public void Read(BINAReader reader) { // Read the data uint lineType = reader.ReadUInt32(); uint padding1 = reader.ReadUInt32(); ulong nameOffset = reader.ReadUInt64(); ulong padding2 = reader.ReadUInt64(); UnknownFloat1 = reader.ReadSingle(); byte firstCharacter = reader.ReadByte(); byte firstAnim = reader.ReadByte(); byte secondCharacter = reader.ReadByte(); byte secondAnim = reader.ReadByte(); TalkingCharacter = reader.ReadUInt64(); // Parse it if (nameOffset != 0) { Name = reader.GetString((uint)nameOffset + reader.Offset); } LineType = (LineTypes)lineType; FirstCharacter = (CharacterTypes)firstCharacter; FirstCharAnimation = (AnimationTypes)firstAnim; SecondCharacter = (CharacterTypes)secondCharacter; SecondCharAnimation = (AnimationTypes)secondAnim; }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); while (reader.BaseStream.Position != 42020) { uint value1 = reader.ReadUInt32(); uint value2 = reader.ReadUInt32(); uint value3 = reader.ReadUInt32(); uint value4 = reader.ReadUInt32(); uint value5 = reader.ReadUInt32(); uint value6 = reader.ReadUInt32(); uint value7 = reader.ReadUInt32(); uint value8 = reader.ReadUInt32(); uint value9 = reader.ReadUInt32(); uint value10 = reader.ReadUInt32(); uint value11 = reader.ReadUInt32(); uint value12 = reader.ReadUInt32(); uint value13 = reader.ReadUInt32(); uint value14 = reader.ReadUInt32(); uint value15 = reader.ReadUInt32(); uint value16 = reader.ReadUInt32(); uint value17 = reader.ReadUInt32(); uint value18 = reader.ReadUInt32(); uint value19 = reader.ReadUInt32(); uint value20 = reader.ReadUInt32(); uint value21 = reader.ReadUInt32(); uint value22 = reader.ReadUInt32(); uint value23 = reader.ReadUInt32(); uint value24 = reader.ReadUInt32(); } }
// Constructors public DebrisData(BINAReader reader) { Gravity = reader.ReadSingle(); LifeTime = reader.ReadSingle(); Mass = reader.ReadSingle(); ExplosionScale = reader.ReadSingle(); ImpulseScale = reader.ReadSingle(); }
// Methods public override void Read(BINAReader reader, BINAHeader header = null) { for (uint i = 0; i < CaptionCount; ++i) { reader.FixPadding(8); Captions[i] = new Caption(reader); } }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); string sig = reader.ReadSignature(4); if (sig != Signature) { throw new InvalidSignatureException(Signature, sig); } uint unknown1 = reader.ReadUInt32(); //Probably Flags according to Rad's Spec if (unknown1 != 537265920) { Console.WriteLine($"unknown1 does not equal 537265920! Actually equals {unknown1}!"); } uint bankNameOffset = reader.ReadUInt32(); //Offset to the Scene Bank name uint cueNameOffset = reader.ReadUInt32(); //Offset of the first entry in the Scene Bank uint cueIndiciesOffset = reader.ReadUInt32(); //Offset to the number list for non stream indexs uint streamOffset = reader.ReadUInt32(); //Offset to the table for xma names Name = reader.ReadChars(64); //Scene Bank's name uint cueCount = reader.ReadUInt32(); //Total Number of Cues in this Scene Bank uint csbCueCount = reader.ReadUInt32(); //Amount of Cues in this Scene Bank which pull their data from a corrosponding CSB file uint streamCueCount = reader.ReadUInt32(); //Amount of Cues in this Scene Bank which use XMA files int streams = 0; for (uint i = 0; i < cueCount; i++) { Cue cue = new Cue() { Name = reader.ReadChars(32) }; uint cueType = reader.ReadUInt32(); uint cueIndex = reader.ReadUInt32(); cue.Category = reader.ReadUInt32(); cue.Unknown1 = reader.ReadSingle(); cue.Unknown2 = reader.ReadSingle(); if (cueType == 1) { long pos = reader.BaseStream.Position; //Save position reader.JumpTo(streamOffset, false); reader.JumpAhead(4 * streams); //Jump ahead to the right offset for our Cue's XMA reader.JumpTo(reader.ReadUInt32(), false); cue.Stream = reader.ReadNullTerminatedString(); //Read the XMA's name for this Cue reader.JumpTo(pos, true); //Jump back to where we were streams++; } Cues.Add(cue); //Save Cue to list } }
// Methods public void Read(BINAReader reader, bool readStageID = false) { // Stage Index StageIndex = reader.ReadByte(); byte unknown2 = reader.ReadByte(); byte unknown3 = reader.ReadByte(); byte unknown4 = reader.ReadByte(); // Time Bonus TimeBasis = reader.ReadUInt32(); TimeDown = reader.ReadUInt32(); // Miss Bonuses NoMissBonus = reader.ReadUInt32(); OneMissBonus = reader.ReadUInt32(); TwoMissBonus = reader.ReadUInt32(); ThreeMissBonus = reader.ReadUInt32(); FourMissBonus = reader.ReadUInt32(); FivePlusMissBonus = reader.ReadUInt32(); // Rank Scores SRankScore = reader.ReadUInt32(); ARankScore = reader.ReadUInt32(); BRankScore = reader.ReadUInt32(); uint CRankScore = reader.ReadUInt32(); // Not really used uint DRankScore = reader.ReadUInt32(); // Unused // Stage ID stageIDOffset = reader.ReadUInt64(); ulong unknown5 = reader.ReadUInt64(); if (readStageID) { StageID = reader.GetString((uint)stageIDOffset); } // Padding/Unknown Value Checks if (unknown2 != 0) { Console.WriteLine($"WARNING: Unknown2 != 0! ({unknown2})"); } if (unknown3 != 0) { Console.WriteLine($"WARNING: Unknown3 != 0! ({unknown3})"); } if (unknown4 != 0) { Console.WriteLine($"WARNING: Unknown4 != 0! ({unknown4})"); } if (unknown5 != 0) { Console.WriteLine($"WARNING: Unknown5 != 0! ({unknown5})"); } }
// Constructors public MotionData(BINAReader reader) { MotionName = reader.GetString(); reader.JumpAhead(12); SyncFrame = reader.ReadBoolean(); StopEndFrame = reader.ReadBoolean(); reader.JumpAhead(6); }
// Methods public override sealed void Load(Stream fileStream) { // BINA Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); // Data Read(reader, Header); }
// Constructors public PhysicsParam(BINAReader reader) { Mass = reader.ReadSingle(); Friction = reader.ReadSingle(); GravityFactor = reader.ReadSingle(); Restitution = reader.ReadSingle(); LinearDamping = reader.ReadSingle(); AngularDamping = reader.ReadSingle(); MaxLinearVelocity = reader.ReadSingle(); }
// Constructors public KillData(BINAReader reader) { KillType = (KillTypes)reader.ReadUInt32(); KillTime = reader.ReadSingle(); BreakMotionName = reader.GetString(); reader.JumpAhead(12); _DebrisData = new DebrisData(reader); reader.JumpAhead(4); }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); reader.ReadHeader(); //File related header stuff uint fileCount = reader.ReadUInt32(); uint fileEntriesPos = reader.ReadUInt32(); //Type related header stuff uint typeCount = reader.ReadUInt32(); uint typeEntriesPos = reader.ReadUInt32(); //Read Types reader.JumpTo(typeEntriesPos, false); for (uint i = 0; i < typeCount; ++i) { S06TypeEntry type = new S06TypeEntry(); uint namePos = reader.ReadUInt32(); uint typeFileCount = reader.ReadUInt32(); uint filesPos = reader.ReadUInt32(); long pos = reader.BaseStream.Position; reader.JumpTo(namePos, false); type.TypeName = reader.ReadNullTerminatedString(); reader.JumpTo(filesPos, false); //Read Objects for (uint f = 0; f < typeFileCount; ++f) { S06FileEntry file = new S06FileEntry(); uint friendlyNamePos = reader.ReadUInt32(); uint filePathPos = reader.ReadUInt32(); long curPos = reader.BaseStream.Position; reader.JumpTo(friendlyNamePos, false); file.FriendlyName = reader.ReadNullTerminatedString(); reader.JumpTo(filePathPos, false); file.FilePath = reader.ReadNullTerminatedString(); reader.JumpTo(curPos); type.Files.Add(file); } Types.Add(type); reader.JumpTo(pos, true); } }
// Methods public void Read(BINAReader reader) { _MotionData = new MotionData(reader); _MirageAnimData = new MirageAnimData(reader); reader.JumpAhead(8); _ProgramMotionData = new ProgramMotionData(reader); _EffectData = new EffectData(reader); _SoundData = new SoundData(reader); _KillData = new KillData(reader); reader.JumpAhead(8); }
// Constructors public ProgramMotionData(BINAReader reader) { MotionType = (MotionTypes)reader.ReadUInt32(); reader.JumpAhead(12); Axis = reader.ReadVector3(); reader.JumpAhead(4); Power = reader.ReadSingle(); SpeedScale = reader.ReadSingle(); Time = reader.ReadSingle(); reader.JumpAhead(4); }
// Methods public void Read(BINAReader reader) { for (uint i = 0; i < LineCount; ++i) { Lines[i] = new Line(reader); } Unknown1 = reader.ReadUInt32(); if (Unknown1 != 0) { Console.WriteLine("WARNING: Caption Unknown1 != 0!! {0:X}", Unknown1); } }
// Methods public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); string sig = reader.ReadSignature(4); if (sig != Signature) { throw new InvalidSignatureException(Signature, sig); } uint messageTableOffset = reader.ReadUInt32(); uint messageCount = reader.ReadUInt32(); long namePos = reader.BaseStream.Position; reader.JumpTo(messageTableOffset, false); Name = reader.ReadNullTerminatedString(); reader.JumpTo(namePos, true); for (uint i = 0; i < messageCount; i++) { string name = string.Empty; string text = string.Empty; string placeholder = string.Empty; uint nameOffset = reader.ReadUInt32(); uint textOffset = reader.ReadUInt32(); uint placeholderOffset = reader.ReadUInt32(); long pos = reader.BaseStream.Position; reader.JumpTo(nameOffset, false); name = reader.ReadNullTerminatedString(); reader.JumpTo(textOffset, false); text = reader.ReadNullTerminatedStringUTF16(); if (placeholderOffset != 0) { reader.JumpTo(placeholderOffset, false); placeholder = reader.ReadNullTerminatedString(); } MSTEntries entry = new MSTEntries(name, text, placeholder); entries.Add(entry); reader.JumpTo(pos, true); } }
// Methods public override void Load(Stream fileStream) { // BINA Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); string sig = reader.ReadSignature(4); if (sig != Signature) { throw new InvalidSignatureException(Signature, sig); } var unknown1 = reader.ReadUInt32(); //Might be part of the Header if Skyth's svcol spec is anything to go on? }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); long namePositionHack = reader.BaseStream.Position; reader.JumpAhead(0xC); prop.Name = reader.ReadNullTerminatedString(); reader.JumpTo(namePositionHack, true); reader.JumpTo(0x4c, true); prop.ObjectCount = reader.ReadUInt32(); reader.JumpAhead(0x4); for (uint i = 0; i < prop.ObjectCount; i++) { S06PropObject obj = new S06PropObject(); var objectNameOffset = reader.ReadUInt32(); obj.ObjectParameterCount = reader.ReadUInt32(); var paramOffset = reader.ReadUInt32(); obj.ObjectUnknown1 = reader.ReadUInt32(); obj.ObjectUnknown2 = reader.ReadUInt32(); long position = reader.BaseStream.Position; reader.JumpTo(objectNameOffset, false); obj.ObjectName = reader.ReadNullTerminatedString(); for (uint c = 0; c < obj.ObjectParameterCount; c++) { reader.JumpTo(paramOffset + (c * 0x18), false); S06PropParameter parameter = new S06PropParameter(); parameter.ParameterName = reader.ReadNullTerminatedString(); reader.JumpTo(paramOffset + (c * 0x18) + 0x10, false); parameter.ParameterType = reader.ReadUInt32(); parameter.ParameterID = reader.ReadUInt32(); obj.Parameters.Add(parameter); } prop.Objects.Add(obj); reader.JumpTo(position, true); } }
public override void Load(Stream fileStream) { // Header var reader = new BINAReader(fileStream); reader.ReadHeader(); string sig = reader.ReadSignature(4); if (sig != Signature) { throw new InvalidSignatureException(Signature, sig); } uint texturePos = reader.ReadUInt32(); uint placeholderEntries = reader.ReadUInt32(); reader.JumpTo(reader.ReadUInt32(), false); long pos = reader.BaseStream.Position; // Texture reader.JumpTo(texturePos, false); string texture = reader.ReadNullTerminatedString(); reader.JumpTo(pos, true); // Placeholders for (uint i = 0; i < placeholderEntries; ++i) { S06FontPictureUV fontPicture = new S06FontPictureUV(); Texture = texture; uint placeholderEntry = reader.ReadUInt32(); fontPicture.X = reader.ReadUInt16(); fontPicture.Y = reader.ReadUInt16(); fontPicture.Width = reader.ReadUInt16(); fontPicture.Height = reader.ReadUInt16(); pos = reader.BaseStream.Position; reader.JumpTo(placeholderEntry, false); fontPicture.Placeholder = reader.ReadNullTerminatedString(); reader.JumpTo(pos, true); Entries.Add(fontPicture); } }
// Methods public override void Load(Stream fileStream) { var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); IsBigEndian = reader.IsBigEndian; System.Console.WriteLine(reader.BaseStream.Position); RangeIn = reader.ReadSingle(); // Unused RangeDistance = reader.ReadSingle(); // Unused ModelName = reader.GetString(); reader.JumpAhead(12); SkeletonName = reader.GetString(); reader.JumpAhead(12); BoundingShape = (BoundingShapes)reader.ReadUInt32(); BoundingSize = reader.ReadVector3(); MeshName = reader.GetString(); reader.JumpAhead(20); ShapeOffset = reader.ReadVector3(); reader.JumpAhead(4); ShapeSizeOffset = reader.ReadSingle(); RigidBodyType = (RigidBodyTypes)reader.ReadByte(); RigidBodyMaterial = (RigidBodyMaterials)reader.ReadByte(); reader.JumpAhead(2); _PhysicsParam = new PhysicsParam(reader); ContactDamageType = (ContactDamageTypes)reader.ReadByte(); RideOnDamage = reader.ReadBoolean(); AerialBounce = reader.ReadBoolean(); reader.JumpAhead(9); // ReactionData for (uint i = 0; i < ReactionDataCount; i++) { _ReactionData[i] = new ReactionData(reader); } }
public void Read(BINAReader reader, bool readChildIndices = true) { long nameOffset = reader.ReadInt64(); long dataOffset = reader.ReadInt64(); long childIndexTableOffset = reader.ReadInt64(); ParentIndex = reader.ReadInt32(); Index = reader.ReadInt32(); DataIndex = reader.ReadInt32(); ushort childCount = reader.ReadUInt16(); bool hasData = reader.ReadBoolean(); byte fullPathSize = reader.ReadByte(); // Not counting this node in // Read name if (nameOffset != 0) { Name = reader.GetString((uint)nameOffset); } // (MINOR HACK) Store data offset in Data // to be read later, avoiding some Seeks if (hasData && dataOffset != 0) { Data = dataOffset; } // Read Child Indices if (!readChildIndices) { return; } long curPos = reader.BaseStream.Position; reader.JumpTo(childIndexTableOffset); ChildIndices.Capacity = childCount; for (int i = 0; i < childCount; ++i) { ChildIndices.Add(reader.ReadInt32()); } reader.JumpTo(curPos); }
protected NodeTree ReadNodeTree(BINAReader reader) { var nodeTree = new NodeTree(); uint nodesCount = reader.ReadUInt32(); nodeTree.DataNodeCount = reader.ReadUInt32(); long nodesOffset = reader.ReadInt64(); long dataNodeIndicesOffset = reader.ReadInt64(); // Nodes reader.JumpTo(nodesOffset); for (uint i = 0; i < nodesCount; ++i) { nodeTree.Nodes.Add(new Node(reader)); } return(nodeTree); }
// Methods public void Read(BINAReader reader) { uint id = reader.ReadUInt32(); long dataSize = reader.ReadInt64(); reader.JumpAhead(4); DataOffset = reader.ReadInt64(); reader.JumpAhead(8); ExtensionOffset = reader.ReadInt64(); DataType = (DataEntryTypes)reader.ReadUInt64(); if (DataType != DataEntryTypes.NotHere) { Data = new byte[dataSize]; } }
// Methods public override void Load(Stream fileStream, Dictionary <string, SetObjectType> objectTemplates) { if (objectTemplates == null) { throw new ArgumentNullException("objectTemplates", "Cannot load Colors set data without object templates."); } // Header var reader = new BINAReader(fileStream); Header = reader.ReadHeader(); // SOBJ Data Objects = SOBJ.Read(reader, objectTemplates, SOBJ.SOBJType.Colors); }