Пример #1
0
 private void WriteTextItem(BinaryData data, int RomAddress, TextTableItem item)
 {
     data.Position = RomAddress;
     foreach (var b in item.Data)
     {
         data.WriteByte(b);
     }
 }
Пример #2
0
        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;
                }
            }
        }