コード例 #1
0
        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());
        }
コード例 #2
0
        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());
        }