示例#1
0
        private void Read_Name(uint obj_addr)
        {
            long prev_addr = Reader.BaseStream.Position;

            Reader.BaseStream.Seek(obj_addr, SeekOrigin.Begin);

            UnknownIndexes.Add(Reader.ReadUInt32()); // ???
            uint str_addr = Reader.ReadUInt32() - 4;

            Reader.BaseStream.Seek(str_addr, SeekOrigin.Begin);

            string codeString = Encoding.UTF8.GetString(Reader.ReadBytes(Reader.ReadInt32()));

            Debug.Assert(Reader.ReadByte() == 0);
            Names.Add(codeString);

            Reader.BaseStream.Seek(prev_addr, SeekOrigin.Begin);
        }
示例#2
0
        public List <byte> Write()
        {
            List <byte> bytes        = new List <byte>();
            List <int>  entryOffsets = new List <int>();


            //Header
            bytes.AddRange(BitConverter.GetBytes(FPF_SIGNATURE));
            bytes.AddRange(BitConverter.GetBytes((ushort)65534));
            bytes.AddRange(BitConverter.GetBytes((ushort)I_06));
            bytes.AddRange(BitConverter.GetBytes(I_08));
            bytes.AddRange(BitConverter.GetBytes(I_12));
            bytes.AddRange(BitConverter.GetBytes(F_16));
            bytes.AddRange(BitConverter.GetBytes(F_20));
            bytes.AddRange(BitConverter.GetBytes(F_24));
            bytes.AddRange(BitConverter.GetBytes(F_28));
            bytes.AddRange(BitConverter.GetBytes(F_32));
            bytes.AddRange(BitConverter.GetBytes(F_36));
            bytes.AddRange(BitConverter.GetBytes(I_40));
            bytes.AddRange(BitConverter.GetBytes(I_44));
            bytes.AddRange(BitConverter.GetBytes(F_48));
            bytes.AddRange(BitConverter.GetBytes(F_52));
            bytes.AddRange(BitConverter.GetBytes(F_56));
            bytes.AddRange(BitConverter.GetBytes(I_60));
            bytes.AddRange(BitConverter.GetBytes(I_64));
            bytes.AddRange(BitConverter.GetBytes(I_68));
            bytes.AddRange(BitConverter.GetBytes(I_72));
            bytes.AddRange(BitConverter.GetBytes(I_76));
            bytes.AddRange(BitConverter.GetBytes(I_80));
            bytes.AddRange(BitConverter.GetBytes(I_84));
            bytes.AddRange(BitConverter.GetBytes(I_88));
            bytes.AddRange(BitConverter.GetBytes(I_92));
            bytes.AddRange(BitConverter.GetBytes(F_96));
            bytes.AddRange(BitConverter.GetBytes(I_100));
            bytes.AddRange(BitConverter.GetBytes(F_104));
            bytes.AddRange(BitConverter.GetBytes(I_108));

            //Unknown indexes
            bytes.AddRange(UnknownIndexes.Write());

            //FPF_Entries
            if (FpfEntries == null)
            {
                FpfEntries = new List <FPF_Entry>();
            }
            for (int i = 0; i < EntryPointerListEntryCount; i++)
            {
                var entry = FpfEntries.Find(a => a.ID == i);

                if (entry != null)
                {
                    entryOffsets.Add(bytes.Count);
                }

                bytes.AddRange(new byte[8]);
            }

            for (int i = 0; i < FpfEntries.Count; i++)
            {
                bytes = Utils.ReplaceRange(bytes, BitConverter.GetBytes(bytes.Count), entryOffsets[i]);
                bytes.AddRange(FpfEntries[i].Write());
            }

            return(bytes);
        }