Beispiel #1
0
            internal Timeline(BinaryReaderEx br, MQBVersion version, Dictionary <long, Disposition> disposesByOffset)
            {
                long disposOffsetsOffset = br.ReadVarint();
                int  disposCount         = br.ReadInt32();

                if (version == MQBVersion.DarkSouls2Scholar)
                {
                    br.AssertInt32(0);
                }
                long customDataOffset = br.ReadVarint();
                int  customDataCount  = br.ReadInt32();

                Unk10 = br.ReadInt32();

                Dispositions = new List <Disposition>(disposCount);
                long[] disposOffsets = br.GetVarints(disposOffsetsOffset, disposCount);
                foreach (long disposOffset in disposOffsets)
                {
                    Dispositions.Add(disposesByOffset[disposOffset]);
                    disposesByOffset.Remove(disposOffset);
                }

                br.StepIn(customDataOffset);
                {
                    CustomData = new List <CustomData>(customDataCount);
                    for (int i = 0; i < customDataCount; i++)
                    {
                        CustomData.Add(new MQB.CustomData(br));
                    }
                }
                br.StepOut();
            }
Beispiel #2
0
            internal void Write(BinaryWriterEx bw, MQBVersion version, Dictionary <Disposition, long> offsetsByDispos, int cutIndex, List <CustomData> allCustomData, List <long> customDataValueOffsets)
            {
                int disposCount = Timelines.Sum(g => g.Dispositions.Count);

                bw.WriteFixStrW(Name, 0x40, 0x00);
                bw.WriteInt32(disposCount);
                bw.WriteInt32(Unk44);
                bw.WriteInt32(Duration);
                bw.WriteInt32(0);

                bw.WriteInt32(Timelines.Count);
                if (version == MQBVersion.DarkSouls2Scholar)
                {
                    bw.WriteInt32(0);
                }
                bw.ReserveVarint($"TimelinesOffset{cutIndex}");
                if (version != MQBVersion.DarkSouls2Scholar)
                {
                    bw.WriteInt64(0);
                }

                foreach (Timeline timeline in Timelines)
                {
                    timeline.WriteDispositions(bw, offsetsByDispos, allCustomData, customDataValueOffsets);
                }
            }
Beispiel #3
0
 internal void WriteTimelines(BinaryWriterEx bw, MQBVersion version, int cutIndex)
 {
     bw.FillVarint($"TimelinesOffset{cutIndex}", bw.Position);
     for (int i = 0; i < Timelines.Count; i++)
     {
         Timelines[i].Write(bw, version, cutIndex, i);
     }
 }
Beispiel #4
0
 internal void Write(BinaryWriterEx bw, MQBVersion version, int cutIndex, int timelineIndex)
 {
     bw.ReserveVarint($"DisposOffsetsOffset[{cutIndex}:{timelineIndex}]");
     bw.WriteInt32(Dispositions.Count);
     if (version == MQBVersion.DarkSouls2Scholar)
     {
         bw.WriteInt32(0);
     }
     bw.ReserveVarint($"TimelineCustomDataOffset[{cutIndex}:{timelineIndex}]");
     bw.WriteInt32(CustomData.Count);
     bw.WriteInt32(Unk10);
 }
Beispiel #5
0
            internal Cut(BinaryReaderEx br, MQBVersion version)
            {
                Name = br.ReadFixStrW(0x40);
                int disposCount = br.ReadInt32();

                Unk44    = br.ReadInt32();
                Duration = br.ReadInt32();
                br.AssertInt32(0);

                int timelineCount = br.ReadInt32();

                if (version == MQBVersion.DarkSouls2Scholar)
                {
                    br.AssertInt32(0);
                }
                long timelinesOffset = br.ReadVarint();

                if (version != MQBVersion.DarkSouls2Scholar)
                {
                    br.AssertInt64(0);
                }

                var disposesByOffset = new Dictionary <long, Disposition>(disposCount);

                for (int i = 0; i < disposCount; i++)
                {
                    disposesByOffset[br.Position] = new Disposition(br);
                }

                br.StepIn(timelinesOffset);
                {
                    Timelines = new List <Timeline>(timelineCount);
                    for (int i = 0; i < timelineCount; i++)
                    {
                        Timelines.Add(new Timeline(br, version, disposesByOffset));
                    }
                }
                br.StepOut();
            }