Exemple #1
0
        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);
            }
        }
Exemple #2
0
        // 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);
            }
        }
Exemple #3
0
        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
            }
        }
Exemple #4
0
        // 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);
            }
        }
Exemple #5
0
        // 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?
        }
Exemple #6
0
        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)
        {
            // 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();
            uint soundEntryCount    = reader.ReadUInt32();
            uint soundEntriesOffset = reader.ReadUInt32();

            // Data
            SoundEntries = new string[soundEntryCount];
            var soundNameOffsets = new uint[soundEntryCount];

            reader.JumpTo(soundEntriesOffset, false);

            // We read the offsets first and then the names to avoid unnecessary seeking.
            for (uint i = 0; i < soundEntryCount; ++i)
            {
                uint soundEntryIndex = reader.ReadUInt32();
                soundNameOffsets[soundEntryIndex] = reader.ReadUInt32();
            }

            for (uint i = 0; i < soundEntryCount; ++i)
            {
                reader.JumpTo(soundNameOffsets[i], false);
                SoundEntries[i] = reader.ReadNullTerminatedString();
            }
        }