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); }
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); }