Ejemplo n.º 1
0
        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);
                }
            }

            // 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());
        }