コード例 #1
0
                internal override void GetNames(MSB1 msb, Entries entries)
                {
                    base.GetNames(msb, entries);
                    CollisionName = MSB.FindName(entries.Parts, CollisionIndex);

                    MovePointNames = new string[MovePointIndices.Length];
                    for (int i = 0; i < MovePointIndices.Length; i++)
                    {
                        MovePointNames[i] = MSB.FindName(entries.Regions, MovePointIndices[i]);
                    }
                }
コード例 #2
0
 internal virtual void GetIndices(Entries entries)
 {
     ActivationPartIndex = MSB.FindIndex(entries.Parts, ActivationPartName);
     if (Shape is MSB.Shape.Composite composite)
     {
         foreach (MSB.Shape.Composite.Child child in composite.Children)
         {
             child.GetIndices(entries);
         }
     }
 }
コード例 #3
0
 internal void GetIndices(Entries entries)
 {
     if (!entries.BoneNames.Any(bn => bn.Name == Name))
     {
         entries.BoneNames.Add(new BoneName()
         {
             Name = Name
         });
     }
     NameIndex = MSB.FindIndex(entries.BoneNames, Name);
 }
コード例 #4
0
                internal override void GetIndices(MSBD msb, Entries entries)
                {
                    base.GetIndices(msb, entries);
                    CollisionIndex = MSB.FindIndex(entries.Parts, CollisionName);

                    MovePointIndices = new short[MovePointNames.Length];
                    for (int i = 0; i < MovePointNames.Length; i++)
                    {
                        MovePointIndices[i] = (short)MSB.FindIndex(entries.Regions, MovePointNames[i]);
                    }
                }
コード例 #5
0
        /// <summary>
        /// Deserializes file data from a stream.
        /// </summary>
        protected override void Read(BinaryReaderEx br)
        {
            br.BigEndian = false;

            br.AssertASCII("MSB ");
            br.AssertInt32(1);
            br.AssertInt32(0x10);
            br.AssertBoolean(false); // isBigEndian
            br.AssertBoolean(false); // isBitBigEndian
            br.AssertByte(1);        // textEncoding
            br.AssertByte(0xFF);     // is64BitOffset

            Entries entries;

            Models          = new ModelParam();
            entries.Models  = Models.Read(br);
            Events          = new EventParam();
            entries.Events  = Events.Read(br);
            Regions         = new PointParam();
            entries.Regions = Regions.Read(br);
            Routes          = new RouteParam();
            entries.Routes  = Routes.Read(br);
            Layers          = new EmptyParam(0x23, "LAYER_PARAM_ST");
            Layers.Read(br);
            Parts         = new PartsParam();
            entries.Parts = Parts.Read(br);
            PartsPoses    = new EmptyParam(0, "MAPSTUDIO_PARTS_POSE_ST");
            PartsPoses.Read(br);
            BoneNames = new EmptyParam(0, "MAPSTUDIO_BONE_NAME_STRING");
            BoneNames.Read(br);

            if (br.Position != 0)
            {
                throw new InvalidDataException("The next param offset of the final param should be 0, but it wasn't.");
            }

            MSB.DisambiguateNames(entries.Models);
            MSB.DisambiguateNames(entries.Regions);
            MSB.DisambiguateNames(entries.Parts);

            foreach (Event evt in entries.Events)
            {
                evt.GetNames(this, entries);
            }
            foreach (Region region in entries.Regions)
            {
                region.GetNames(entries);
            }
            foreach (Part part in entries.Parts)
            {
                part.GetNames(this, entries);
            }
        }
コード例 #6
0
        /// <summary>
        /// Deserializes file data from a stream.
        /// </summary>
        protected override void Read(BinaryReaderEx br)
        {
            br.BigEndian  = false;
            br.VarintLong = false;
            if (br.GetASCII(0, 4) == "MSB ")
            {
                Format        = MSBFormat.DarkSouls2Scholar;
                br.VarintLong = true;
                MSB.AssertHeader(br);
            }
            else if (br.GetUInt32(0) == 5)
            {
                Format = MSBFormat.DarkSouls2LE;
            }
            else
            {
                Format       = MSBFormat.DarkSouls2BE;
                br.BigEndian = true;
            }

            Entries entries;

            Models          = new ModelParam();
            entries.Models  = Models.Read(br);
            Events          = new EventParam();
            entries.Events  = Events.Read(br);
            Regions         = new PointParam();
            entries.Regions = Regions.Read(br);
            new RouteParam().Read(br);
            new LayerParam().Read(br);
            Parts             = new PartsParam();
            entries.Parts     = Parts.Read(br);
            PartPoses         = new MapstudioPartsPose().Read(br);
            entries.BoneNames = new MapstudioBoneName().Read(br);

            if (br.Position != 0)
            {
                throw new InvalidDataException($"The next param offset of the final param should be 0, but it was 0x{br.Position:X}.");
            }

            MSB.DisambiguateNames(entries.Models);
            MSB.DisambiguateNames(entries.Parts);
            MSB.DisambiguateNames(entries.BoneNames);

            foreach (Part part in entries.Parts)
            {
                part.GetNames(this, entries);
            }
            foreach (PartPose pose in PartPoses)
            {
                pose.GetNames(entries);
            }
        }
コード例 #7
0
        /// <summary>
        /// Serializes file data to a stream.
        /// </summary>
        protected override void Write(BinaryWriterEx bw)
        {
            Entries entries;

            entries.Models    = Models.GetEntries();
            entries.Events    = Events.GetEntries();
            entries.Regions   = Regions.GetEntries();
            entries.Parts     = Parts.GetEntries();
            entries.BoneNames = new List <BoneName>();

            foreach (Model model in entries.Models)
            {
                model.CountInstances(entries.Parts);
            }
            foreach (Event evt in entries.Events)
            {
                evt.GetIndices(this, entries);
            }
            foreach (Region region in entries.Regions)
            {
                region.GetIndices(this, entries);
            }
            foreach (Part part in entries.Parts)
            {
                part.GetIndices(this, entries);
            }
            foreach (PartsPose pose in PartsPoses)
            {
                pose.GetIndices(this, entries);
            }

            bw.BigEndian = false;
            MSB.WriteHeader(bw);

            Models.Write(bw, entries.Models);
            bw.FillInt64("NextParamOffset", bw.Position);
            Events.Write(bw, entries.Events);
            bw.FillInt64("NextParamOffset", bw.Position);
            Regions.Write(bw, entries.Regions);
            bw.FillInt64("NextParamOffset", bw.Position);
            new RouteParam().Write(bw, Routes);
            bw.FillInt64("NextParamOffset", bw.Position);
            new LayerParam().Write(bw, Layers);
            bw.FillInt64("NextParamOffset", bw.Position);
            Parts.Write(bw, entries.Parts);
            bw.FillInt64("NextParamOffset", bw.Position);
            new MapstudioPartsPose().Write(bw, PartsPoses);
            bw.FillInt64("NextParamOffset", bw.Position);
            new MapstudioBoneName().Write(bw, entries.BoneNames);
            bw.FillInt64("NextParamOffset", 0);
        }
コード例 #8
0
            internal void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveInt64("NameOffset");
                bw.WriteUInt32((uint)Type);
                bw.WriteInt32(id);
                bw.WriteUInt32((uint)Shape.Type);
                bw.WriteVector3(Position);
                bw.WriteVector3(Rotation);
                bw.WriteInt32(Unk2);
                bw.ReserveInt64("BaseDataOffset1");
                bw.ReserveInt64("BaseDataOffset2");
                bw.WriteInt32(-1);
                bw.WriteUInt32(MapStudioLayer);

                bw.ReserveInt64("ShapeDataOffset");
                bw.ReserveInt64("BaseDataOffset3");
                bw.ReserveInt64("TypeDataOffset");

                bw.FillInt64("NameOffset", bw.Position - start);
                bw.WriteUTF16(MSB.ReambiguateName(Name), true);
                bw.Pad(4);

                bw.FillInt64("BaseDataOffset1", bw.Position - start);
                bw.WriteInt16((short)UnkA.Count);
                bw.WriteInt16s(UnkA);
                bw.Pad(4);

                bw.FillInt64("BaseDataOffset2", bw.Position - start);
                bw.WriteInt16((short)UnkB.Count);
                bw.WriteInt16s(UnkB);
                bw.Pad(8);

                Shape.Write(bw, start);

                bw.FillInt64("BaseDataOffset3", bw.Position - start);
                bw.WriteInt32(ActivationPartIndex);
                bw.WriteInt32(EventEntityID);

                if (HasTypeData)
                {
                    WriteSpecific(bw, start);
                }
                else
                {
                    bw.FillInt64("TypeDataOffset", 0);
                }

                bw.Pad(8);
            }
コード例 #9
0
                internal override void GetIndices(MSBS msb, Entries entries)
                {
                    base.GetIndices(msb, entries);
                    WalkRegionIndices = new short[WalkRegionNames.Length];
                    for (int i = 0; i < WalkRegionNames.Length; i++)
                    {
                        WalkRegionIndices[i] = (short)MSB.FindIndex(entries.Regions, WalkRegionNames[i]);
                    }

                    foreach (WREntry wrEntry in WREntries)
                    {
                        wrEntry.GetIndices(entries);
                    }
                }
コード例 #10
0
        /// <summary>
        /// Serializes file data to a stream.
        /// </summary>
        protected override void Write(BinaryWriterEx bw)
        {
            Entries entries;

            entries.Models    = Models.GetEntries();
            entries.Events    = Events.GetEntries();
            entries.Regions   = Regions.GetEntries();
            entries.Parts     = Parts.GetEntries();
            entries.BoneNames = new List <BoneName>();

            Lookups lookups;

            lookups.Models     = MakeNameLookup(entries.Models);
            lookups.Parts      = MakeNameLookup(entries.Parts);
            lookups.Collisions = MakeNameLookup(Parts.Collisions);
            lookups.BoneNames  = new Dictionary <string, int>();

            foreach (Part part in entries.Parts)
            {
                part.GetIndices(lookups);
            }
            foreach (PartPose pose in PartPoses)
            {
                pose.GetIndices(lookups, entries);
            }

            bw.BigEndian  = Format == MSBFormat.DarkSouls2BE;
            bw.VarintLong = Format == MSBFormat.DarkSouls2Scholar;
            if (Format == MSBFormat.DarkSouls2Scholar)
            {
                MSB.WriteHeader(bw);
            }

            Models.Write(bw, entries.Models);
            bw.FillVarint("NextParamOffset", bw.Position);
            Events.Write(bw, entries.Events);
            bw.FillVarint("NextParamOffset", bw.Position);
            Regions.Write(bw, entries.Regions);
            bw.FillVarint("NextParamOffset", bw.Position);
            new RouteParam().Write(bw, new List <Entry>());
            bw.FillVarint("NextParamOffset", bw.Position);
            new LayerParam().Write(bw, new List <Entry>());
            bw.FillVarint("NextParamOffset", bw.Position);
            Parts.Write(bw, entries.Parts);
            bw.FillVarint("NextParamOffset", bw.Position);
            new MapstudioPartsPose().Write(bw, PartPoses);
            bw.FillVarint("NextParamOffset", bw.Position);
            new MapstudioBoneName().Write(bw, entries.BoneNames);
            bw.FillVarint("NextParamOffset", 0);
        }
コード例 #11
0
        /// <summary>
        /// Deserializes file data from a stream.
        /// </summary>
        protected override void Read(BinaryReaderEx br)
        {
            br.BigEndian = false;
            MSB.AssertHeader(br);

            Entries entries = default;

            Models            = new ModelParam();
            entries.Models    = Models.Read(br);
            Events            = new EventParam();
            entries.Events    = Events.Read(br);
            Regions           = new PointParam();
            entries.Regions   = Regions.Read(br);
            Routes            = new RouteParam().Read(br);
            Layers            = new LayerParam().Read(br);
            Parts             = new PartsParam();
            entries.Parts     = Parts.Read(br);
            PartsPoses        = new MapstudioPartsPose().Read(br);
            entries.BoneNames = new MapstudioBoneName().Read(br);

            if (br.Position != 0)
            {
                throw new InvalidDataException($"The next param offset of the final param should be 0, but it was 0x{br.Position:X}.");
            }

            MSB.DisambiguateNames(entries.Models);
            MSB.DisambiguateNames(entries.Parts);
            MSB.DisambiguateNames(entries.Regions);
            MSB.DisambiguateNames(entries.BoneNames);

            foreach (Event evt in entries.Events)
            {
                evt.GetNames(this, entries);
            }
            foreach (Region region in entries.Regions)
            {
                region.GetNames(this, entries);
            }
            foreach (Part part in entries.Parts)
            {
                part.GetNames(this, entries);
            }
            foreach (PartsPose pose in PartsPoses)
            {
                pose.GetNames(this, entries);
            }
        }
コード例 #12
0
            internal override void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveVarint("NameOffset");
                bw.WriteByte((byte)Type);
                bw.WriteByte(0);
                bw.WriteInt16((short)id);
                bw.WriteInt16(ModelIndex);
                bw.WriteInt16(0);
                bw.WriteVector3(Position);
                bw.WriteVector3(Rotation);
                bw.WriteVector3(Scale);
                bw.WriteUInt32s(DrawGroups);
                bw.WriteInt32(Unk44);
                bw.WriteInt32(Unk48);
                bw.WriteInt32(Unk4C);
                bw.WriteInt32(Unk50);
                bw.WriteUInt32s(DispGroups);
                bw.WriteInt32(Unk64);
                bw.WriteInt32(0);
                bw.WriteByte(Unk6C);
                bw.WriteByte(0);
                bw.WriteByte(Unk6E);
                bw.WriteByte(0);
                bw.ReserveVarint("TypeDataOffset");
                if (bw.VarintLong)
                {
                    bw.WriteInt64(0);
                }

                long nameStart = bw.Position;
                int  namePad   = bw.VarintLong ? 0x20 : 0x2C;

                bw.FillVarint("NameOffset", nameStart - start);
                bw.WriteUTF16(MSB.ReambiguateName(Name), true);
                if (bw.Position - nameStart < namePad)
                {
                    bw.Position += namePad - (bw.Position - nameStart);
                }
                bw.Pad(bw.VarintSize);

                bw.FillVarint("TypeDataOffset", bw.Position - start);
                WriteTypeData(bw);
            }
コード例 #13
0
        /// <summary>
        /// Deserializes file data from a stream.
        /// </summary>
        protected override void Read(BinaryReaderEx br)
        {
            br.BigEndian = false;
            br.AssertASCII("MSB ");
            br.AssertInt32(1);
            br.AssertInt32(0x10);
            br.AssertBoolean(false); // isBigEndian
            br.AssertBoolean(false); // isBitBigEndian
            br.AssertByte(1);        // textEncoding
            br.AssertSByte(-1);      // is64BitOffset

            Entries entries;

            Models          = new ModelParam();
            entries.Models  = Models.Read(br);
            Events          = new EventParam();
            entries.Events  = Events.Read(br);
            Regions         = new PointParam();
            entries.Regions = Regions.Read(br);
            new RouteParam().Read(br);
            new LayerParam().Read(br);
            Parts             = new PartsParam();
            entries.Parts     = Parts.Read(br);
            PartPoses         = new MapstudioPartsPose().Read(br);
            entries.BoneNames = new MapstudioBoneName().Read(br);

            if (br.Position != 0)
            {
                throw new InvalidDataException($"The next param offset of the final param should be 0, but it was 0x{br.Position:X}.");
            }

            MSB.DisambiguateNames(entries.Models);
            MSB.DisambiguateNames(entries.Parts);
            MSB.DisambiguateNames(entries.BoneNames);

            foreach (Part part in entries.Parts)
            {
                part.GetNames(this, entries);
            }
            foreach (PartPose pose in PartPoses)
            {
                pose.GetNames(entries);
            }
        }
コード例 #14
0
            internal override void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveInt32("NameOffset");
                bw.WriteUInt32((uint)Type);
                bw.WriteInt32(ID);
                bw.ReserveInt32("SibOffset");
                bw.WriteInt32(InstanceCount);
                bw.WriteInt32(0);
                bw.WriteInt32(0);
                bw.WriteInt32(0);

                bw.FillInt32("NameOffset", (int)(bw.Position - start));
                bw.WriteShiftJIS(MSB.ReambiguateName(Name), true);
                bw.FillInt32("SibOffset", (int)(bw.Position - start));
                bw.WriteShiftJIS(Placeholder, true);
                bw.Pad(4);
            }
コード例 #15
0
            internal override void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveInt64("NameOffset");
                bw.WriteUInt32((uint)Type);
                bw.WriteInt32(id);
                bw.ReserveInt64("SibOffset");
                bw.WriteInt32(InstanceCount);
                bw.WriteInt32(0);
                bw.WriteInt32(0);
                bw.WriteInt32(0);

                bw.FillInt64("NameOffset", bw.Position - start);
                bw.WriteUTF16(MSB.ReambiguateName(Name), true);

                bw.FillInt64("SibOffset", bw.Position - start);
                bw.WriteUTF16(SibPath, true);
                bw.Pad(8);
            }
コード例 #16
0
            internal override void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveInt32("NameOffset");
                bw.WriteUInt32((uint)Type);
                bw.WriteInt32(id);
                bw.WriteInt32(ModelIndex);
                bw.ReserveInt32("SibOffset");
                bw.WriteVector3(Position);
                bw.WriteVector3(Rotation);
                bw.WriteVector3(Scale);
                bw.WriteUInt32s(DrawGroups);
                bw.WriteUInt32s(DispGroups);
                bw.ReserveInt32("EntityDataOffset");
                bw.ReserveInt32("TypeDataOffset");
                bw.WriteInt32(0);
                bw.WriteInt32(0);

                long stringsStart = bw.Position;

                bw.FillInt32("NameOffset", (int)(bw.Position - start));
                bw.WriteShiftJIS(MSB.ReambiguateName(Name), true);

                bw.FillInt32("SibOffset", (int)(bw.Position - start));
                bw.WriteShiftJIS(SibPath, true);
                bw.Pad(4);
                if (bw.Position - stringsStart < 0x10)
                {
                    bw.WritePattern((int)(0x10 - (bw.Position - stringsStart)), 0x00);
                }

                bw.FillInt32("EntityDataOffset", (int)(bw.Position - start));
                WriteEntityData(bw);

                bw.FillInt32("TypeDataOffset", (int)(bw.Position - start));
                WriteTypeData(bw);
            }
コード例 #17
0
            internal override void Write(BinaryWriterEx bw, int id)
            {
                long start = bw.Position;

                bw.ReserveInt32("NameOffset");
                bw.WriteInt32(0);
                bw.WriteInt32(id);
                bw.WriteUInt32((uint)Shape.Type);
                bw.WriteVector3(Position);
                bw.WriteVector3(Rotation);
                bw.ReserveInt32("UnkOffsetA");
                bw.ReserveInt32("UnkOffsetB");
                bw.ReserveInt32("ShapeDataOffset");
                bw.ReserveInt32("EntityDataOffset");
                bw.WriteInt32(0);

                bw.FillInt32("NameOffset", (int)(bw.Position - start));
                bw.WriteShiftJIS(MSB.ReambiguateName(Name), true);
                bw.Pad(4);

                bw.FillInt32("UnkOffsetA", (int)(bw.Position - start));
                bw.WriteInt32(0);
                bw.FillInt32("UnkOffsetB", (int)(bw.Position - start));
                bw.WriteInt32(0);

                if (Shape.HasShapeData)
                {
                    bw.FillInt32("ShapeDataOffset", (int)(bw.Position - start));
                    Shape.WriteShapeData(bw);
                }
                else
                {
                    bw.FillInt32("ShapeDataOffset", 0);
                }

                bw.FillInt32("EntityDataOffset", (int)(bw.Position - start));
                bw.WriteInt32(EntityID);
            }
コード例 #18
0
ファイル: MSBD.cs プロジェクト: garyttierney/SoulsFormats
        /// <summary>
        /// Deserializes file data from a stream.
        /// </summary>
        protected override void Read(BinaryReaderEx br)
        {
            br.BigEndian = true;

            Entries entries;

            Models          = new ModelParam();
            entries.Models  = Models.Read(br);
            Events          = new EventParam();
            entries.Events  = Events.Read(br);
            Regions         = new PointParam();
            entries.Regions = Regions.Read(br);
            Parts           = new PartsParam();
            entries.Parts   = Parts.Read(br);
            var tree = new MapstudioTree();

            Trees = tree.Read(br);

            if (br.Position != 0)
            {
                throw new InvalidDataException("The next param offset of the final param should be 0, but it wasn't.");
            }

            MSB.DisambiguateNames(entries.Models);
            MSB.DisambiguateNames(entries.Regions);
            MSB.DisambiguateNames(entries.Parts);

            foreach (Event evt in entries.Events)
            {
                evt.GetNames(this, entries);
            }
            foreach (Part part in entries.Parts)
            {
                part.GetNames(this, entries);
            }
        }
コード例 #19
0
            internal override void Write(BinaryWriterEx bw, int index)
            {
                long start = bw.Position;

                bw.ReserveInt64("NameOffset");
                bw.WriteUInt16((ushort)Type);
                bw.WriteInt16((short)index);
                bw.WriteInt32(ModelIndex);
                bw.WriteVector3(Position);
                bw.WriteVector3(Rotation);
                bw.WriteVector3(Scale);
                bw.WriteUInt32s(DrawGroups);
                bw.WriteInt32(Unk44);
                bw.WriteInt32(Unk48);
                bw.WriteInt32(Unk4C);
                bw.WriteInt32(Unk50);
                bw.WriteUInt32s(DispGroups);
                bw.WriteInt32(Unk64);
                bw.WriteInt32(Unk68);
                bw.WriteInt32(Unk6C);
                bw.ReserveInt64("TypeDataOffset");
                bw.WriteInt64(0);

                long nameStart = bw.Position;

                bw.FillInt64("NameOffset", nameStart - start);
                bw.WriteUTF16(MSB.ReambiguateName(Name), true);
                if (bw.Position - nameStart < 0x20)
                {
                    bw.Position += 0x20 - (bw.Position - nameStart);
                }
                bw.Pad(8);

                bw.FillInt64("TypeDataOffset", bw.Position - start);
                WriteTypeData(bw);
            }
コード例 #20
0
 internal virtual void GetIndices(MSBD msb, Entries entries)
 {
     ModelIndex = MSB.FindIndex(entries.Models, ModelName);
 }
コード例 #21
0
 internal override void GetIndices(MSB1 msb, Entries entries)
 {
     base.GetIndices(msb, entries);
     SpawnPointIndices = MSB.FindIndices(entries.Regions, SpawnPointNames);
     SpawnPartIndices  = MSB.FindIndices(entries.Parts, SpawnPartNames);
 }
コード例 #22
0
 internal virtual void GetNames(MSB1 msb, Entries entries)
 {
     PartName   = MSB.FindName(entries.Parts, PartIndex);
     RegionName = MSB.FindName(entries.Regions, RegionIndex);
 }
コード例 #23
0
 internal virtual void GetNames(MSBD msb, Entries entries)
 {
     ModelName = MSB.FindName(entries.Models, ModelIndex);
 }
コード例 #24
0
 internal override void GetNames(MSBD msb, Entries entries)
 {
     base.GetNames(msb, entries);
     CollisionName = MSB.FindName(msb.Parts.Collisions, CollisionIndex);
 }
コード例 #25
0
 internal override void GetIndices(MSBD msb, Entries entries)
 {
     base.GetIndices(msb, entries);
     CollisionIndex = MSB.FindIndex(msb.Parts.Collisions, CollisionName);
 }
コード例 #26
0
 internal virtual void GetIndices(MSB1 msb, Entries entries)
 {
     PartIndex   = MSB.FindIndex(entries.Parts, PartName);
     RegionIndex = MSB.FindIndex(entries.Regions, RegionName);
 }
コード例 #27
0
 internal void GetIndices(MSB3 msb, Entries entries)
 {
     PartIndex = (short)MSB.FindIndex(entries.Parts, PartName);
 }
コード例 #28
0
 internal void GetNames(MSB3 msb, Entries entries)
 {
     PartName = MSB.FindName(entries.Parts, PartIndex);
 }
コード例 #29
0
 internal override void GetNames(MSB1 msb, Entries entries)
 {
     base.GetNames(msb, entries);
     TreasurePartName = MSB.FindName(entries.Parts, TreasurePartIndex);
 }
コード例 #30
0
 internal override void GetIndices(MSB1 msb, Entries entries)
 {
     base.GetIndices(msb, entries);
     TreasurePartIndex = MSB.FindIndex(entries.Parts, TreasurePartName);
 }