private void WriteTextItem(BinaryData data, int RomAddress, TextTableItem item) { data.Position = RomAddress; foreach (var b in item.Data) { data.WriteByte(b); } }
public override void Save(BinaryData data) { int DataRomOffset, lastTableOffset, lastTable2Offset; uint BankRomStart, BankRamStart; lastTableOffset = TextGroupInfo.Data.TableRomOffset; DataRomOffset = TextGroupInfo.Data.DataRomOffset; BankRamStart = TextGroupInfo.Segmented.BankAddress; BankRomStart = Conversions.ToUInteger(TextGroupInfo.Segmented.BankStartRom); if (TextGroupInfo.TableType == TextTableType.Dialogs) { lastTable2Offset = (int)TextGroupInfo.DialogData?.TableRomOffset; for (int i = 0; i < Count; i++) { TextTableDialogItem textitem = (TextTableDialogItem)this.ElementAtOrDefault(i); // Table 1 data.Position = lastTableOffset; data.Write(textitem is null ? 0 : Conversions.ToInteger(lastTable2Offset - BankRomStart + BankRamStart)); lastTableOffset += 4; // Table 2 (including Dialog Params) data.Position = lastTable2Offset; if (textitem is object) { data.Write(Conversions.ToShort(0)); data.WriteByte(0); data.WriteByte(textitem.UnknownValue); data.WriteByte(Conversions.ToByte(textitem.LinesPerSite)); data.WriteByte(0); data.Write(Conversions.ToShort(textitem.VerticalPosition)); data.Write(Conversions.ToShort(textitem.HorizontalPosition)); data.Write(Conversions.ToShort(0)); data.Write(Conversions.ToUInteger(DataRomOffset - BankRomStart + BankRamStart)); } else { data.Write(Conversions.ToShort(0)); data.WriteByte(0); data.WriteByte(0); data.WriteByte(0); data.WriteByte(0); data.Write(Conversions.ToShort(0)); data.Write(Conversions.ToShort(0)); data.Write(Conversions.ToShort(0)); data.Write(Conversions.ToUInteger(0)); } lastTable2Offset += 0x10; // Text Data data.Position = DataRomOffset; if (textitem is object) { WriteTextItem(data, DataRomOffset, textitem); } DataRomOffset += textitem.Data.Length; // Sound Effect if (TextGroupInfo.DialogData.HasSoundEffects && TextGroupInfo.DialogData.SoundEffectTable != -1) { data.Position = TextGroupInfo.DialogData.SoundEffectTable + i; data.Write((byte)textitem.SoundEffect); } } } else { for (int i = 0, loopTo1 = Count - 1; i <= loopTo1; i++) { TextTableItem textitem = (TextTableItem)this.ElementAtOrDefault(i); // Table data.Position = lastTableOffset; data.Write(textitem is null ? Conversions.ToUInteger(0) : Conversions.ToUInteger(DataRomOffset - BankRomStart + BankRamStart)); lastTableOffset += 4; // Text Data data.Position = DataRomOffset; if (textitem is object) { WriteTextItem(data, DataRomOffset, textitem); } DataRomOffset += textitem.Data.Length; } } }