Beispiel #1
0
 public void WriteString(X360Writer writer)
 {
     StringOffset = (int) writer.BaseStream.Position;
     string value = ValueEncrypted ? Encoding.Default.GetString(EncryptedValue) : Value;
     StringLength = value.Length;
     writer.WriteNullTerminatedString(value);
 }
Beispiel #2
0
 public void Write(X360Writer writer)
 {
     writer.Write(Hash);
     writer.Write(Offset);
     writer.Write(Size);
 }
Beispiel #3
0
        public override void Write(Stream output, IDirectory inputDirectory)
        {
            X360Writer writer = new X360Writer(output, Encoding.Default, true, IsBigEndianPlatform(Platform));
            const int headerSize = 48;
            int indicesSize = 48*Entries.Count;
            int referenceSize = 16*References.Count;

            long startPosition = output.Position;
            output.Position += headerSize + indicesSize + referenceSize;

            foreach (var fpkEntry in Entries)
            {
                fpkEntry.WriteFilePath(writer);
            }
            foreach (var fpkReference in References)
            {
                fpkReference.WriteFilePath(writer);
            }
            output.AlignWrite(16, 0x00);

            foreach (var fpkEntry in Entries)
            {
                fpkEntry.WriteData(writer, inputDirectory);
                output.AlignWrite(16, 0x00);
            }

            uint fileSize = (uint) output.Position;

            output.Position = startPosition;

            if (writer.FlipEndian)
                writer.FlipEndian = false;
            writer.Write(0x66786f66); // foxf
            writer.Write((ushort) 0x6B70); //pk
            writer.Write((byte) FpkType);
            writer.WriteAsciiString(Platform, 3);
            writer.Write(fileSize);

            writer.FlipEndian = IsBigEndianPlatform(Platform);

            writer.WriteZeros(18);
            writer.Write(UnknownValue);
            writer.Write(Entries.Count);
            writer.Write(References.Count);
            writer.WriteZeros(4);

            foreach (var fpkEntry in Entries)
            {
                fpkEntry.Write(writer);
            }
            foreach (var fpkReference in References)
            {
                fpkReference.Write(writer);
            }
        }
Beispiel #4
0
 public void Write(X360Writer writer)
 {
     writer.Write(StringOffset);
     writer.Write(StringLength);
     writer.WriteZeros(4);
 }
Beispiel #5
0
 public void WriteData(X360Writer writer, IDirectory inputDirectory)
 {
     DataOffset = (uint) writer.BaseStream.Position;
     byte[] data = inputDirectory.ReadFile(GetFpkEntryFileName());
     DataSize = (ulong)data.Length;
     writer.BaseStream.Write(data, 0, data.Length);
 }
Beispiel #6
0
        public void WriteData(X360Writer writer, IDirectory inputDirectory)
        {
            long ftexHeaderPosition = writer.BaseStream.Position;
            writer.BaseStream.Position += HeaderSize + Entries.Count * PftxsFtexsFileEntry.HeaderSize;

            bool flipEndian = writer.FlipEndian;

            foreach (var entry in Entries)
            {
                var data = inputDirectory.ReadFile(entry.FilePath);
                entry.Offset = Convert.ToInt32(writer.BaseStream.Position - ftexHeaderPosition);
                entry.Size = Convert.ToInt32(data.Length);
                writer.Write(data);
            }
            long endPosition = writer.BaseStream.Position;

            writer.BaseStream.Position = ftexHeaderPosition;
            writer.FlipEndian = false;
            writer.Write(Convert.ToUInt32(0x58455446)); // FTEX
            writer.FlipEndian = flipEndian;

            writer.Write(Convert.ToUInt32(endPosition - ftexHeaderPosition)); // Size
            writer.Write(Hash);
            writer.Write(Convert.ToUInt32(Entries.Count));
            writer.Write(0U);
            writer.Write(0U);
            writer.Write(0U);
            foreach (var entry in Entries)
            {
                entry.Write(writer);
            }

            writer.BaseStream.Position = endPosition;
        }
Beispiel #7
0
 public void Write(X360Writer writer)
 {
     writer.Write(DataOffset);
     writer.Write(DataSize);
     FilePathFpkString.Write(writer);
     writer.Write(Md5Hash);
 }
Beispiel #8
0
 public void WriteFilePath(X360Writer writer)
 {
     if (Md5Hash == null)
         Md5Hash = Hashing.Md5HashText(FilePath);
     FilePathFpkString.WriteString(writer);
 }
Beispiel #9
0
 public void WriteFilePath(X360Writer writer)
 {
     ReferenceFilePath.WriteString(writer);
 }
Beispiel #10
0
 public void Write(X360Writer writer)
 {
     ReferenceFilePath.Write(writer);
 }
Beispiel #11
0
        public override void Write(Stream output, IDirectory inputDirectory)
        {
            X360Writer writer = new X360Writer(output, Encoding.Default, true, Endianness == "Big");
            long ftexHeaderPosition = output.Position;
            output.Position += FtexHeaderSize;
            long texlHeaderPosition = output.Position;
            output.Position += TexlHeaderSize;
            foreach (var file in Files)
            {
                file.WriteData(writer, inputDirectory);
            }

            long endPosition = output.Position;
            output.Position = ftexHeaderPosition;
            writer.FlipEndian = false;
            writer.Write(PftxMagicNumber);
            writer.FlipEndian = Endianness == "Big";

            writer.Write(0x40000000);
            writer.Write(0x00000010);
            writer.Write(0x00000001);

            output.Position = texlHeaderPosition;
            writer.FlipEndian = false;
            writer.Write(0x4C584554); // TEXL
            writer.FlipEndian = Endianness == "Big";

            writer.Write(Convert.ToUInt32(endPosition - texlHeaderPosition)); // Size
            writer.Write(Convert.ToUInt32(Files.Count));

            output.Position = endPosition;
        }