public byte[] Serialize() { uint TextStartBuffer = 0x20; // recalculate all pointers uint CurrentPointer = Header.TextStart + TextStartBuffer; foreach (TSSEntry e in Entries) { if (e.StringJPN != null) { e.SetJPNPointer(CurrentPointer - Header.TextStart); CurrentPointer += (uint)Util.StringToBytes(e.StringJPN).Length + 1; } if (e.StringENG != null) { e.SetENGPointer(CurrentPointer - Header.TextStart); CurrentPointer += (uint)Util.StringToBytes(e.StringENG).Length + 1; } } Header.TextLength = CurrentPointer - Header.TextStart; List <byte> Serialized = new List <byte>((int)(Header.TextStart + Header.TextLength)); //serialize Serialized.AddRange(Header.Serialize()); byte[] delimiter = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }; foreach (TSSEntry e in Entries) { Serialized.AddRange(e.SerializeScript()); Serialized.AddRange(delimiter); } Serialized.RemoveRange(Serialized.Count - 4, 4); for (int i = 0; i < TextStartBuffer; i++) { Serialized.Add(0x00); } foreach (TSSEntry e in Entries) { if (e.StringJPN != null) { Serialized.AddRange(Util.StringToBytes(e.StringJPN)); Serialized.Add(0x00); } if (e.StringENG != null) { Serialized.AddRange(Util.StringToBytes(e.StringENG)); Serialized.Add(0x00); } } return(Serialized.ToArray()); }
public byte[] Serialize() { uint TextStartBuffer = 0x20; // recalculate all pointers uint CurrentPointer = Header.TextStart + TextStartBuffer; foreach (TSSEntry e in Entries) { uint ptr = CurrentPointer - Header.TextStart; if (e.StringJPN != null) { e.SetJPNPointer(ptr); uint StringLength = (uint)Util.StringToBytes(e.StringJPN).Length; CurrentPointer += StringLength + 1; if (e.StringENG != null) { e.SetENGPointer(ptr + StringLength); } } // Only exporting JP and putting a pointer to that into both ENG and JPN slots /* * if (e.StringENG != null) * { * e.SetENGPointer(CurrentPointer - Header.TextStart); * CurrentPointer += (uint)Util.StringToBytes(e.StringENG).Length + 1; * } * //*/ } Header.TextLength = CurrentPointer - Header.TextStart; List <byte> Serialized = new List <byte>((int)(Header.TextStart + Header.TextLength)); //serialize Serialized.AddRange(Header.Serialize()); byte[] delimiter = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }; foreach (TSSEntry e in Entries) { Serialized.AddRange(e.SerializeScript()); Serialized.AddRange(delimiter); } Serialized.RemoveRange(Serialized.Count - 4, 4); for (int i = 0; i < TextStartBuffer; i++) { Serialized.Add(0x00); } foreach (TSSEntry e in Entries) { if (e.StringJPN != null) { Serialized.AddRange(Util.StringToBytes(e.StringJPN)); Serialized.Add(0x00); } /* Only exporting JP and putting a pointer to that into both ENG and JPN slots * if (e.StringENG != null) * { * Serialized.AddRange(Util.StringToBytes(e.StringENG)); * Serialized.Add(0x00); * } * */ } return(Serialized.ToArray()); }