public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } // Write the stats foreach (var stats in Stats) { stats.Pointer = sir0.Length; sir0.Write(sir0.Length, stats.ToByteArray()); } // Write the stats pointers var statsPointer = sir0.Length; foreach (var stats in Stats) { sir0.WritePointer(sir0.Length, stats.Pointer); } // Write the floor infos foreach (var floor in Floors) { floor.Pointer = sir0.Length; foreach (var floorEntry in floor.Entries) { sir0.Write(sir0.Length, floorEntry.ToByteArray()); } sir0.WritePadding(sir0.Length, 16, 0xFF); } // Write the content header align(16); sir0.SubHeaderOffset = sir0.Length; sir0.WriteInt64(sir0.Length, Stats.Length); sir0.WritePointer(sir0.Length, statsPointer); sir0.WriteInt64(sir0.Length, Floors.Length); foreach (var floor in Floors) { sir0.WritePointer(sir0.Length, floor.Pointer); } return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } // Write the records foreach (var record in Records) { record.Pointer = sir0.Length; sir0.Write(sir0.Length, record.ToByteArray()); } // Write the content header align(16); sir0.SubHeaderOffset = sir0.Length; sir0.WriteInt64(sir0.Length, Records.Length); foreach (var record in Records) { sir0.WritePointer(sir0.Length, record.Pointer); } return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } var entriesSectionStart = sir0.Length; // Write the entries foreach (var entry in Entries) { align(8); sir0.Write(sir0.Length, entry.ToByteArray()); } // Write the content header sir0.SubHeaderOffset = sir0.Length; sir0.WriteString(sir0.Length, Encoding.ASCII, "PFDB"); align(8); sir0.WritePointer(sir0.Length, entriesSectionStart); sir0.WriteInt64(sir0.Length, Entries.Count); return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } var pointers = new List <int>(); var entriesSectionStart = sir0.Length; // Write the strings foreach (var entry in Entries) { pointers.Add(sir0.Length); sir0.WriteNullTerminatedString(sir0.Length, encoding, entry); } // Write the pointers align(8); sir0.SubHeaderOffset = sir0.Length; sir0.WriteInt64(sir0.Length, Entries.Count); foreach (int pointer in pointers) { sir0.WritePointer(sir0.Length, pointer); } return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } var floorInfoPointer = sir0.Length; foreach (var floor in FloorInfos) { sir0.Write(sir0.Length, floor.ToByteArray()); } align(16); var wildPokemonPointer = sir0.Length; if (WildPokemon != null) { sir0.Write(sir0.Length, WildPokemon.ToSir0().Data.ReadArray()); } align(16); var data3Pointer = sir0.Length; if (Data3 != null) { sir0.Write(sir0.Length, Data3.ToSir0().Data.ReadArray()); } align(16); var data4Pointer = sir0.Length; if (Data4 != null) { sir0.Write(sir0.Length, Data4.ToSir0().Data.ReadArray()); } // Write the content header align(16); sir0.SubHeaderOffset = sir0.Length; sir0.WritePointer(sir0.Length, floorInfoPointer); sir0.WritePointer(sir0.Length, wildPokemonPointer); sir0.WritePointer(sir0.Length, data3Pointer); sir0.WritePointer(sir0.Length, data4Pointer); return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } var allStringValues = Strings.Values.SelectMany(strList => strList).ToArray(); // Ensure that the order in the generated message.bin matches the original if possible var orderedStrings = allStringValues.OrderBy(str => str.Hash).ToArray(); foreach (var entry in orderedStrings) { entry.StringOffset = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.Value); } align(8); int entriesOffset = sir0.Length; foreach (var entry in allStringValues) { sir0.MarkPointer(sir0.Length); sir0.WriteInt64(sir0.Length, entry.StringOffset); sir0.WriteInt32(sir0.Length, entry.Hash); sir0.WriteInt32(sir0.Length, entry.Unknown); } sir0.SubHeaderOffset = sir0.Length; sir0.WriteInt32(sir0.Length, Strings.Count); sir0.WriteInt32(sir0.Length, Strings.Count); sir0.MarkPointer(sir0.Length); sir0.WriteInt64(sir0.Length, entriesOffset); return(sir0.Build()); }
public Sir0 ToSir0() { var sir0 = new Sir0Builder(8); void align(int length) { var paddingLength = length - (sir0.Length % length); if (paddingLength != length) { sir0.WritePadding(sir0.Length, paddingLength); } } // Write the strings foreach (var entry in Entries) { align(8); entry.ModelNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.ModelName); align(8); entry.AnimationNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.AnimationName); align(8); entry.BaseFormModelNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.BaseFormModelName); align(8); entry.PortraitSheetNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.PortraitSheetName); align(8); entry.RescueCampSheetNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.RescueCampSheetName); align(8); entry.RescueCampSheetReverseNamePointer = sir0.Length; sir0.WriteNullTerminatedString(sir0.Length, Encoding.Unicode, entry.RescueCampSheetReverseName); } // Write the data align(8); var entriesSectionStart = sir0.Length; foreach (var entry in Entries) { var entryOffset = sir0.Length; sir0.Write(sir0.Length, entry.ToByteArray()); sir0.MarkPointer(entryOffset + 0); sir0.MarkPointer(entryOffset + 8); sir0.MarkPointer(entryOffset + 16); sir0.MarkPointer(entryOffset + 24); sir0.MarkPointer(entryOffset + 32); sir0.MarkPointer(entryOffset + 40); } // Write the content header sir0.SubHeaderOffset = sir0.Length; sir0.WriteString(sir0.Length, Encoding.ASCII, "PGDB"); align(8); sir0.WritePointer(sir0.Length, entriesSectionStart); sir0.WriteInt64(sir0.Length, Entries.Count); return(sir0.Build()); }