示例#1
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <byte>(serializeFunc => {
         Height = (byte)serializeFunc(Height, 5, name: nameof(Height));
         Type   = (byte)serializeFunc(Type, 3, name: nameof(Type));
     });
 }
示例#2
0
        public override void SerializeBlock(SerializerObject s)
        {
            s.SerializeBitValues <byte>(bitFunc => {
                IsObjAnimation = bitFunc(IsObjAnimation ? 1 : 0, 1, name: nameof(IsObjAnimation)) == 1;
                Batman_Byte00  = (byte)bitFunc(Batman_Byte00, 7, name: nameof(Batman_Byte00));
            });

            Index_Palette   = s.Serialize <byte>(Index_Palette, name: nameof(Index_Palette));
            AnimationsCount = s.Serialize <byte>(AnimationsCount, name: nameof(AnimationsCount));
            Index_TileSet   = s.Serialize <byte>(Index_TileSet, name: nameof(Index_TileSet));

            if (s.GameSettings.EngineVersion < EngineVersion.GBA_BatmanVengeance)
            {
                TilemapWidth  = s.Serialize <byte>(TilemapWidth, name: nameof(TilemapWidth));
                TilemapHeight = s.Serialize <byte>(TilemapHeight, name: nameof(TilemapHeight));
                Padding       = s.SerializeArray <byte>(Padding, 2, name: nameof(Padding));
            }
            var animOffsetsBase = s.CurrentPointer;

            AnimationOffsets = s.SerializeArray <uint>(AnimationOffsets, AnimationsCount, name: nameof(AnimationOffsets));

            if (Animations == null)
            {
                Animations = new GBA_BatmanVengeance_Animation[AnimationOffsets.Length];
            }
            BlockEndPointer = Offset + BlockSize;
            for (int i = 0; i < AnimationOffsets.Length; i++)
            {
                Animations[i] = s.DoAt(animOffsetsBase + AnimationOffsets[i], () => s.SerializeObject <GBA_BatmanVengeance_Animation>(Animations[i], onPreSerialize: a => a.Puppet = this, name: $"{nameof(Animations)}[{i}]"));
            }

            s.Goto(Offset + BlockSize);
        }
示例#3
0
 public override void SerializeImpl(SerializerObject s)
 {
     Byte_00          = s.Serialize <byte>(Byte_00, name: nameof(Byte_00));
     Byte_01          = s.Serialize <byte>(Byte_01, name: nameof(Byte_01));
     Byte_02          = s.Serialize <byte>(Byte_02, name: nameof(Byte_02));
     Byte_03          = s.Serialize <byte>(Byte_03, name: nameof(Byte_03));
     Byte_04          = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));
     Byte_05          = s.Serialize <byte>(Byte_05, name: nameof(Byte_05));
     Byte_06          = s.Serialize <byte>(Byte_06, name: nameof(Byte_06));
     Byte_07          = s.Serialize <byte>(Byte_07, name: nameof(Byte_07));
     FistChargedLevel = s.Serialize <byte>(FistChargedLevel, name: nameof(FistChargedLevel));
     Byte_09          = s.Serialize <byte>(Byte_09, name: nameof(Byte_09));
     Byte_0A          = s.Serialize <byte>(Byte_0A, name: nameof(Byte_0A));
     Byte_0B          = s.Serialize <byte>(Byte_0B, name: nameof(Byte_0B));
     s.SerializeBitValues <byte>(bitFunc =>
     {
         IsNormalFist = bitFunc(IsNormalFist ? 1 : 0, 1, name: nameof(IsNormalFist)) == 1;
         FistSpeed    = (byte)bitFunc(FistSpeed, 2, name: nameof(FistSpeed));
         IsGoldFist   = bitFunc(IsGoldFist ? 1 : 0, 1, name: nameof(IsGoldFist)) == 1;
         Byte_0C      = (byte)bitFunc(Byte_0C, 4, name: nameof(Byte_0C));
     });
     Byte_0D = s.Serialize <byte>(Byte_0D, name: nameof(Byte_0D));
     Byte_0E = s.Serialize <byte>(Byte_0E, name: nameof(Byte_0E));
     Byte_0F = s.Serialize <byte>(Byte_0F, name: nameof(Byte_0F));
     Byte_10 = s.Serialize <byte>(Byte_10, name: nameof(Byte_10));
     Byte_11 = s.Serialize <byte>(Byte_11, name: nameof(Byte_11));
     Byte_12 = s.Serialize <byte>(Byte_12, name: nameof(Byte_12));
     Byte_13 = s.Serialize <byte>(Byte_13, name: nameof(Byte_13));
 }
示例#4
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <ushort>(bitFunc =>
     {
         ZDCIndex = (ushort)bitFunc(ZDCIndex, 11, name: nameof(ZDCIndex));
         ZDCCount = (byte)bitFunc(ZDCCount, 5, name: nameof(ZDCCount));
     });
 }
示例#5
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <byte>(bitFunc =>
     {
         ShapeIndex = (byte)bitFunc(ShapeIndex, 4, name: nameof(ShapeIndex));
         Unknown    = (byte)bitFunc(Unknown, 4, name: nameof(Unknown));
     });
 }
示例#6
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <byte>(bitFunc => {
         Padding0 = (byte)bitFunc(Padding0, 3, name: nameof(Padding0));
         IsEmpty  = bitFunc(IsEmpty ? 1 : 0, 1, name: nameof(IsEmpty)) == 1;
         Padding1 = (byte)bitFunc(Padding1, 3, name: nameof(Padding1));
         IsLarge  = bitFunc(IsLarge ? 1 : 0, 1, name: nameof(IsLarge)) == 1;
     });
     s.SerializeBitValues <ushort>(bitFunc =>
     {
         TileIndex = (ushort)bitFunc(TileIndex, 9, name: nameof(TileIndex));
         Palette   = bitFunc(Palette, 3, name: nameof(Palette));
         Priority  = bitFunc(Priority, 2, name: nameof(Priority));
         FlipX     = bitFunc(FlipX ? 1 : 0, 1, name: nameof(FlipX)) == 1;
         FlipY     = bitFunc(FlipY ? 1 : 0, 1, name: nameof(FlipY)) == 1;
     });
 }
示例#7
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <ushort>(bitFunc =>
     {
         Data1 = (ushort)bitFunc(Data1, 12, name: nameof(Data1));
         Data2 = (byte)bitFunc(Data2, 4, name: nameof(Data2));
     });
 }
示例#8
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <uint>(bitFunc =>
     {
         RegionOffset = bitFunc(RegionOffset, 14, name: nameof(RegionOffset));
         Region       = bitFunc(Region, 2, name: nameof(Region));
     });
     TileData = s.SerializeArray <byte>(TileData, BlockSize - 4, name: nameof(TileData));
 }
示例#9
0
 public override void SerializeImpl(SerializerObject s)
 {
     FrameOffset = s.Serialize <ushort>(FrameOffset, name: nameof(FrameOffset));
     s.SerializeBitValues <byte>(bitFunc =>
     {
         AnimSpeed = (byte)bitFunc(AnimSpeed, 5, name: nameof(AnimSpeed));
         Loop      = bitFunc(Loop ? 1 : 0, 1, name: nameof(Loop)) == 1;
         PingPong  = bitFunc(PingPong ? 1 : 0, 1, name: nameof(PingPong)) == 1;
         LastBit   = bitFunc(LastBit ? 1 : 0, 1, name: nameof(LastBit)) == 1;
     });
     s.SerializeBitValues <byte>(bitFunc => {
         FrameCount          = (byte)bitFunc(FrameCount, 7, name: nameof(FrameCount));
         FramesHaveExtraData = bitFunc(FramesHaveExtraData ? 1 : 0, 1, name: nameof(FramesHaveExtraData)) == 1;
     });
     s.DoAt(Offset + 4 * FrameOffset, () => {
         Frames = s.SerializeObjectArray <GBAIsometric_Spyro_AnimFrame>(Frames, FrameCount, onPreSerialize: f => f.HasExtraData = FramesHaveExtraData, name: nameof(Frames));
     });
 }
 public override void SerializeImpl(SerializerObject s)
 {
     Speed      = s.Serialize <byte>(Speed, name: nameof(Speed));
     FrameCount = s.Serialize <byte>(FrameCount, name: nameof(FrameCount));
     s.SerializeBitValues <ushort>(bitfunc => {
         StartFrameIndex = (ushort)bitfunc(StartFrameIndex, 15, name: nameof(StartFrameIndex));
         FlipX           = bitfunc(FlipX ? 1 : 0, 1, name: nameof(FlipX)) == 1;
     });
 }
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <byte>((bitFunc) => {
         Width  = bitFunc(Width, 4, name: nameof(Width));
         Height = bitFunc(Height, 4, name: nameof(Height));
     });
     Byte_01 = s.Serialize <byte>(Byte_01, name: nameof(Byte_01));
     Byte_02 = s.Serialize <byte>(Byte_02, name: nameof(Byte_02));
 }
示例#12
0
 /// <summary>
 /// Handles the data serialization
 /// </summary>
 /// <param name="s">The serializer object</param>
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <byte>(bitFunc =>
     {
         IsUnlocked = bitFunc(IsUnlocked ? 1 : 0, 1, name: nameof(IsUnlocked)) == 1;
         Unk_01     = (byte)bitFunc(Unk_01, 1, name: nameof(Unk_01));
         Cages      = (byte)bitFunc(Cages, 3, name: nameof(Cages));
         Unk_05     = (byte)bitFunc(Unk_05, 3, name: nameof(Unk_05));
     });
 }
示例#13
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <ushort>(bitFunc =>
     {
         TileIndex    = (ushort)bitFunc(TileIndex, 10, name: nameof(TileIndex));
         Palette      = bitFunc(Palette, 3, name: nameof(Palette));
         IsForeground = bitFunc(IsForeground ? 1 : 0, 1, name: nameof(IsForeground)) == 1;
         FlipX        = bitFunc(FlipX ? 1 : 0, 1, name: nameof(FlipX)) == 1;
         FlipY        = bitFunc(FlipY ? 1 : 0, 1, name: nameof(FlipY)) == 1;
     });
 }
 public override void SerializeImpl(SerializerObject s)
 {
     s.SerializeBitValues <ushort>(bitFunc => {
         WidthPower    = (byte)bitFunc(WidthPower, 2, name: nameof(WidthPower));
         HeightPower   = (byte)bitFunc(HeightPower, 2, name: nameof(HeightPower));
         XPosition     = (byte)bitFunc(XPosition, 5, name: nameof(XPosition));
         YPosition     = (byte)bitFunc(YPosition, 5, name: nameof(YPosition));
         Unknown       = (byte)bitFunc(Unknown, 1, name: nameof(Unknown));
         IsLastPattern = bitFunc(IsLastPattern ? 1 : 0, 1, name: nameof(IsLastPattern)) == 1;
     });
 }
        public override void SerializeImpl(SerializerObject s)
        {
            X = s.Serialize <byte>(X, name: nameof(X));
            Y = s.Serialize <byte>(Y, name: nameof(Y));
            RelativeTileIndex = s.Serialize <byte>(RelativeTileIndex, name: nameof(RelativeTileIndex));

            s.SerializeBitValues <byte>(bitFunc => {
                SpriteSize  = (byte)bitFunc(SpriteSize, 2, name: nameof(SpriteSize));
                SpriteShape = (Shape)bitFunc((int)SpriteShape, 2, name: nameof(SpriteShape));
                PalIndex    = (byte)bitFunc(PalIndex, 4, name: nameof(PalIndex));
            });
        }
        public override void SerializeImpl(SerializerObject s)
        {
            s.SerializeBitValues <ushort>(bitFunc =>
            {
                FrameImageIndex  = (ushort)bitFunc(FrameImageIndex, 11, name: nameof(FrameImageIndex));
                UnkBitFieldValue = bitFunc(UnkBitFieldValue, 5, name: nameof(UnkBitFieldValue));
            });
            XPosition = s.Serialize <sbyte>(XPosition, name: nameof(XPosition));
            YPosition = s.Serialize <sbyte>(YPosition, name: nameof(YPosition));

            if (HasExtraData)
            {
                ExtraData_04 = s.Serialize <ushort>(ExtraData_04, name: nameof(ExtraData_04));
                ExtraData_06 = s.Serialize <ushort>(ExtraData_06, name: nameof(ExtraData_06));
            }
        }
示例#17
0
        }                                  // 24-bit integer

        public override void SerializeImpl(SerializerObject s)
        {
            if (Type == Palm_Database.DatabaseType.PRC)
            {
                Name        = s.SerializeString(Name, 4, name: nameof(Name));
                ID          = s.Serialize <ushort>(ID, name: nameof(ID));
                DataPointer = s.SerializePointer(DataPointer, name: nameof(DataPointer));
            }
            else
            {
                DataPointer = s.SerializePointer(DataPointer, name: nameof(DataPointer));
                s.SerializeBitValues <uint>(bitFunc => {
                    UniqueID   = (uint)bitFunc((int)UniqueID, 24, name: nameof(UniqueID));
                    Attributes = (byte)bitFunc(Attributes, 8, name: nameof(Attributes));
                });
            }
        }
示例#18
0
        public override void SerializeImpl(SerializerObject s)
        {
            switch (Header.Type)
            {
            case Gameloft_RRR_MapLayerHeader.LayerType.Graphics:
                TileMap = s.SerializeObjectArray <MapTile>(TileMap, Header.Width * Header.Height, name: nameof(TileMap));
                break;

            case Gameloft_RRR_MapLayerHeader.LayerType.Collision:

                if (TileMap == null)
                {
                    TileMap = new MapTile[Header.Width * Header.Height];
                }

                for (int i = 0; i < TileMap.Length;)
                {
                    s.SerializeBitValues <byte>(bitFunc =>
                    {
                        for (int j = 0; j < 4; j++)     // 4 * 2 = 8 (2 bits per collision type)
                        {
                            if (i >= TileMap.Length)
                            {
                                break;
                            }

                            if (TileMap[i] == null)
                            {
                                TileMap[i] = new MapTile();
                            }

                            TileMap[i].CollisionType = (ushort)bitFunc(TileMap[i].CollisionType, 2, name: $"{nameof(TileMap)}[{i}]");

                            i++;
                        }
                    });
                }

                break;
            }
        }
示例#19
0
        public override void SerializeImpl(SerializerObject s)
        {
            XPosition = s.Serialize <short>(XPosition, name: nameof(XPosition));
            YPosition = s.Serialize <short>(YPosition, name: nameof(YPosition));
            Width     = s.Serialize <byte>(Width, name: nameof(Width));
            Height    = s.Serialize <byte>(Height, name: nameof(Height));

            if (s.GameSettings.EngineVersion == EngineVersion.R2_PS1)
            {
                s.SerializeBitValues <ushort>(bitFunc =>
                {
                    LayerIndex = (byte)bitFunc(LayerIndex, 5, name: nameof(LayerIndex));
                    R2_Flags   = (ushort)bitFunc(R2_Flags, 11, name: nameof(R2_Flags));
                });
            }
            else
            {
                Byte_06    = s.Serialize <byte>(Byte_06, name: nameof(Byte_06));
                LayerIndex = s.Serialize <byte>(LayerIndex, name: nameof(LayerIndex));
            }
        }
示例#20
0
        public override void SerializeImpl(SerializerObject s)
        {
            if (s.GameSettings.EngineVersion == EngineVersion.GBAIsometric_RHR)
            {
                ObjectType = s.Serialize <ushort>(ObjectType, name: nameof(ObjectType));
            }
            else
            {
                s.SerializeBitValues <ushort>(bitFunc =>
                {
                    ObjectType     = (ushort)bitFunc(ObjectType, 10, name: nameof(ObjectType));
                    Value1         = bitFunc(Value1 ? 1 : 0, 1, name: nameof(Value1)) == 1;
                    HorizontalFlip = bitFunc(HorizontalFlip ? 1 : 0, 1, name: nameof(HorizontalFlip)) == 1;
                    Value2         = bitFunc(Value2 ? 1 : 0, 1, name: nameof(Value2)) == 1;
                    Value3         = bitFunc(Value3, 2, name: nameof(Value3));
                    IsNormalObj    = bitFunc(IsNormalObj ? 1 : 0, 1, name: nameof(IsNormalObj)) == 1;

                    if (!IsNormalObj)
                    {
                        ObjectType = 0; // Some waypoints in Spyro 2 have an object type which is wrong, so make sure it's always 0
                    }
                });
            }

            XPosition = s.Serialize <short>(XPosition, name: nameof(XPosition));
            YPosition = s.Serialize <short>(YPosition, name: nameof(YPosition));
            Height    = s.Serialize <short>(Height, name: nameof(Height));

            if (s.GameSettings.EngineVersion == EngineVersion.GBAIsometric_RHR)
            {
                WaypointIndex = s.Serialize <short>(WaypointIndex, name: nameof(WaypointIndex));
                WaypointCount = s.Serialize <byte>(WaypointCount, name: nameof(WaypointCount));
                LinkIndex     = s.Serialize <byte>(LinkIndex, name: nameof(LinkIndex));
                Data          = s.SerializeArray <byte>(Data, 4, name: nameof(Data));
            }
            else
            {
                LinkIndex = 0xFF;
            }
        }
示例#21
0
        public override void SerializeImpl(SerializerObject s)
        {
            if (s.GameSettings.GBA_IsMilan)
            {
                if (Type == ActorType.Actor)
                {
                    Index_ActorModel = s.Serialize <ushort>(Index_ActorModel, name: nameof(Index_ActorModel));
                    XPos             = s.Serialize <short>(XPos, name: nameof(XPos));
                    YPos             = s.Serialize <short>(YPos, name: nameof(YPos));
                    Milan_Height     = s.Serialize <ushort>(Milan_Height, name: nameof(Milan_Height));
                    Milan_XlateID    = s.Serialize <ushort>(Milan_XlateID, name: nameof(Milan_XlateID));

                    Milan_LinksCount = s.Serialize <ushort>(Milan_LinksCount, name: nameof(Milan_LinksCount));
                    Milan_Links      = s.SerializeObjectArray <Milan_ActorLink>(Milan_Links, Milan_LinksCount, name: nameof(Milan_Links));

                    UnkData1 = s.SerializeArray <byte>(UnkData1, s.GameSettings.EngineVersion == EngineVersion.GBA_TomClancysRainbowSixRogueSpear ? 8 : 12, name: nameof(UnkData1));

                    DialogCount = s.Serialize <ushort>(DialogCount, name: nameof(DialogCount));
                    DialogTable = s.SerializeArray <short>(DialogTable, DialogCount, name: nameof(DialogTable));
                }
                else
                {
                    XPos          = s.Serialize <short>(XPos, name: nameof(XPos));
                    YPos          = s.Serialize <short>(YPos, name: nameof(YPos));
                    Milan_Height  = s.Serialize <ushort>(Milan_Height, name: nameof(Milan_Height));
                    Milan_XlateID = s.Serialize <ushort>(Milan_XlateID, name: nameof(Milan_XlateID));

                    Milan_LinksCount = s.Serialize <ushort>(Milan_LinksCount, name: nameof(Milan_LinksCount));
                    Milan_Links      = s.SerializeObjectArray <Milan_ActorLink>(Milan_Links, Milan_LinksCount, name: nameof(Milan_Links));

                    Milan_CaptorIndicesCount = s.Serialize <ushort>(Milan_CaptorIndicesCount, name: nameof(Milan_CaptorIndicesCount));
                    Milan_CaptorIndices      = s.SerializeArray <ushort>(Milan_CaptorIndices, Milan_CaptorIndicesCount, name: nameof(Milan_CaptorIndices));
                }

                return;
            }

            if (Type == ActorType.Unk)
            {
                Index     = s.Serialize <byte>(Index, name: nameof(Index));
                Unk_01    = s.Serialize <byte>(Unk_01, name: nameof(Unk_01));
                ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                if (ActorSize >= 2)
                {
                    Byte_04          = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));
                    Index_ActorModel = s.Serialize <byte>((byte)Index_ActorModel, name: nameof(Index_ActorModel));
                }
                ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - (s.CurrentPointer - Offset), name: nameof(ExtraData));
            }
            else
            {
                XPos = s.Serialize <short>(XPos, name: nameof(XPos));
                YPos = s.Serialize <short>(YPos, name: nameof(YPos));

                if (Type != ActorType.Captor)
                {
                    Byte_04 = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));
                    ActorID = s.Serialize <byte>(ActorID, name: nameof(ActorID));

                    if (s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow || Type == ActorType.Actor || Type == ActorType.AlwaysActor)
                    {
                        Index_ActorModel = s.Serialize <byte>((byte)Index_ActorModel, name: nameof(Index_ActorModel));
                        ActionIndex      = s.Serialize <byte>(ActionIndex, name: nameof(ActionIndex));
                    }

                    if (s.GameSettings.EngineVersion > EngineVersion.GBA_BatmanVengeance && s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        Link_0 = s.Serialize <byte>(Link_0, name: nameof(Link_0));
                        Link_1 = s.Serialize <byte>(Link_1, name: nameof(Link_1));
                        Link_2 = s.Serialize <byte>(Link_2, name: nameof(Link_2));
                        Link_3 = s.Serialize <byte>(Link_3, name: nameof(Link_3));
                    }

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCell &&
                        s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        Short_0C = s.Serialize <short>(Short_0C, name: nameof(Short_0C));
                        Short_0E = s.Serialize <short>(Short_0E, name: nameof(Short_0E));
                        int len = Short_0E & 0xF;
                        ExtraData = s.SerializeArray <byte>(ExtraData, len, name: nameof(ExtraData));
                    }
                    else if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        if (Type == ActorType.Waypoint || Type == ActorType.Unk)
                        {
                            ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                            ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 8, name: nameof(ExtraData));
                        }
                        else
                        {
                            Short_0C  = s.Serialize <short>(Short_0C, name: nameof(Short_0C));
                            ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                            ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 12, name: nameof(ExtraData));
                        }
                    }
                }
                else
                {
                    Byte_04 = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_PrinceOfPersia)
                    {
                        UnkData1          = s.SerializeArray <byte>(UnkData1, 1, name: nameof(UnkData1));
                        LinkedActorsCount = s.Serialize <byte>(LinkedActorsCount, name: nameof(LinkedActorsCount));
                        CaptorID          = s.Serialize <CaptorType>(CaptorID, name: nameof(CaptorID));
                    }
                    else
                    {
                        s.SerializeBitValues <byte>(bitFunc =>
                        {
                            LinkedActorsCount = (byte)bitFunc(LinkedActorsCount, 5, name: nameof(LinkedActorsCount));
                            CaptorID          = (CaptorType)bitFunc((byte)CaptorID, 3, name: nameof(CaptorID));
                        });
                    }
                    Index_CaptorData = s.Serialize <byte>(Index_CaptorData, name: nameof(Index_CaptorData));

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        UnkData2  = s.SerializeArray <byte>(UnkData2, 1, name: nameof(UnkData2));
                        ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                    }
                    else if (s.GameSettings.EngineVersion < EngineVersion.GBA_PrinceOfPersia)
                    {
                        UnkData2 = s.SerializeArray <byte>(UnkData2, 1, name: nameof(UnkData2));
                    }
                    else
                    {
                        UnkData2 = s.SerializeArray <byte>(UnkData2, 3, name: nameof(UnkData2));
                    }
                    BoxMinY = s.Serialize <short>(BoxMinY, name: nameof(BoxMinY));
                    BoxMinX = s.Serialize <short>(BoxMinX, name: nameof(BoxMinX));
                    BoxMaxY = s.Serialize <short>(BoxMaxY, name: nameof(BoxMaxY));
                    BoxMaxX = s.Serialize <short>(BoxMaxX, name: nameof(BoxMaxX));
                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 20, name: nameof(ExtraData));
                    }
                }
            }
        }
示例#22
0
        public override void SerializeImpl(SerializerObject s)
        {
            if (Type == ActorType.Unk)
            {
                Index     = s.Serialize <byte>(Index, name: nameof(Index));
                Unk_01    = s.Serialize <byte>(Unk_01, name: nameof(Unk_01));
                ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                if (ActorSize >= 2)
                {
                    Byte_04           = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));
                    GraphicsDataIndex = s.Serialize <byte>(GraphicsDataIndex, name: nameof(GraphicsDataIndex));
                }
                ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - (s.CurrentPointer - Offset), name: nameof(ExtraData));
            }
            else
            {
                XPos = s.Serialize <short>(XPos, name: nameof(XPos));
                YPos = s.Serialize <short>(YPos, name: nameof(YPos));

                if (Type != ActorType.BoxTrigger)
                {
                    Byte_04 = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));
                    ActorID = s.Serialize <byte>(ActorID, name: nameof(ActorID));

                    if (s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow || Type == ActorType.Normal || Type == ActorType.Always)
                    {
                        GraphicsDataIndex = s.Serialize <byte>(GraphicsDataIndex, name: nameof(GraphicsDataIndex));
                        StateIndex        = s.Serialize <byte>(StateIndex, name: nameof(StateIndex));
                    }

                    if (s.GameSettings.EngineVersion > EngineVersion.GBA_BatmanVengeance && s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        Link_0 = s.Serialize <byte>(Link_0, name: nameof(Link_0));
                        Link_1 = s.Serialize <byte>(Link_1, name: nameof(Link_1));
                        Link_2 = s.Serialize <byte>(Link_2, name: nameof(Link_2));
                        Link_3 = s.Serialize <byte>(Link_3, name: nameof(Link_3));
                    }

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCell &&
                        s.GameSettings.EngineVersion < EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        Short_0C = s.Serialize <short>(Short_0C, name: nameof(Short_0C));
                        Short_0E = s.Serialize <short>(Short_0E, name: nameof(Short_0E));
                        int len = Short_0E & 0xF;
                        ExtraData = s.SerializeArray <byte>(ExtraData, len, name: nameof(ExtraData));
                    }
                    else if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        if (Type == ActorType.Trigger || Type == ActorType.Unk)
                        {
                            ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                            ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 8, name: nameof(ExtraData));
                        }
                        else
                        {
                            Short_0C  = s.Serialize <short>(Short_0C, name: nameof(Short_0C));
                            ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                            ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 12, name: nameof(ExtraData));
                        }
                    }
                }
                else
                {
                    Byte_04 = s.Serialize <byte>(Byte_04, name: nameof(Byte_04));

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_PrinceOfPersia)
                    {
                        UnkData1          = s.SerializeArray <byte>(UnkData1, 1, name: nameof(UnkData1));
                        LinkedActorsCount = s.Serialize <byte>(LinkedActorsCount, name: nameof(LinkedActorsCount));
                        BoxActorID        = s.Serialize <BoxActorType>(BoxActorID, name: nameof(BoxActorID));
                    }
                    else
                    {
                        s.SerializeBitValues <byte>(bitFunc =>
                        {
                            LinkedActorsCount = (byte)bitFunc(LinkedActorsCount, 5, name: nameof(LinkedActorsCount));
                            BoxActorID        = (BoxActorType)bitFunc((byte)BoxActorID, 3, name: nameof(BoxActorID));
                        });
                    }
                    BoxActorBlockOffsetIndex = s.Serialize <byte>(BoxActorBlockOffsetIndex, name: nameof(BoxActorBlockOffsetIndex));

                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        UnkData2  = s.SerializeArray <byte>(UnkData2, 1, name: nameof(UnkData2));
                        ActorSize = s.Serialize <ushort>(ActorSize, name: nameof(ActorSize));
                    }
                    else if (s.GameSettings.EngineVersion < EngineVersion.GBA_PrinceOfPersia)
                    {
                        UnkData2 = s.SerializeArray <byte>(UnkData2, 1, name: nameof(UnkData2));
                    }
                    else
                    {
                        UnkData2 = s.SerializeArray <byte>(UnkData2, 3, name: nameof(UnkData2));
                    }
                    BoxMinY = s.Serialize <short>(BoxMinY, name: nameof(BoxMinY));
                    BoxMinX = s.Serialize <short>(BoxMinX, name: nameof(BoxMinX));
                    BoxMaxY = s.Serialize <short>(BoxMaxY, name: nameof(BoxMaxY));
                    BoxMaxX = s.Serialize <short>(BoxMaxX, name: nameof(BoxMaxX));
                    if (s.GameSettings.EngineVersion >= EngineVersion.GBA_SplinterCellPandoraTomorrow)
                    {
                        ExtraData = s.SerializeArray <byte>(ExtraData, ActorSize - 20, name: nameof(ExtraData));
                    }
                }
            }
        }
示例#23
0
        }                                           // Padding?

        public override void SerializeImpl(SerializerObject s)
        {
            if (s.GameSettings.EngineVersion == EngineVersion.GBA_BatmanVengeance)
            {
                Batman_Data = s.SerializeArray <byte>(Batman_Data, 0x10, name: nameof(Batman_Data));
            }
            else if (s.GameSettings.GBA_IsShanghai || s.GameSettings.GBA_IsMilan)
            {
                Width  = s.Serialize <ushort>(Width, name: nameof(Width));
                Height = s.Serialize <ushort>(Height, name: nameof(Height));

                if (s.GameSettings.GBA_IsMilan)
                {
                    s.SerializeBitValues <byte>(bitFunc =>
                    {
                        Milan_MapCompressionType = (Milan_CompressionType)bitFunc((byte)Milan_MapCompressionType, 7, name: nameof(Milan_MapCompressionType));
                        Milan_UnkFlag            = bitFunc(Milan_UnkFlag ? 1 : 0, 1, name: nameof(Milan_UnkFlag)) == 1;
                    });

                    Milan_Byte_05   = s.Serialize <byte>(Milan_Byte_05, name: nameof(Milan_Byte_05));
                    Milan_Byte_06   = s.Serialize <byte>(Milan_Byte_06, name: nameof(Milan_Byte_06));
                    Milan_Byte_07   = s.Serialize <byte>(Milan_Byte_07, name: nameof(Milan_Byte_07));
                    Milan_Ushort_08 = s.Serialize <ushort>(Milan_Ushort_08, name: nameof(Milan_Ushort_08));
                    Milan_Ushort_0A = s.Serialize <ushort>(Milan_Ushort_0A, name: nameof(Milan_Ushort_0A));
                }
                else
                {
                    Shanghai_Byte_04 = s.Serialize <byte>(Shanghai_Byte_04, name: nameof(Shanghai_Byte_04));
                    Shanghai_Byte_05 = s.Serialize <byte>(Shanghai_Byte_05, name: nameof(Shanghai_Byte_05));
                    Shanghai_Byte_06 = s.Serialize <byte>(Shanghai_Byte_06, name: nameof(Shanghai_Byte_06));
                    Shanghai_Byte_07 = s.Serialize <byte>(Shanghai_Byte_07, name: nameof(Shanghai_Byte_07));

                    if (s.GameSettings.EngineVersion == EngineVersion.GBA_DonaldDuck && Shanghai_Byte_04 == 3)
                    {
                        Shanghai_MapTileSize = s.Serialize <byte>(Shanghai_MapTileSize, name: nameof(Shanghai_MapTileSize));
                        Shanghai_Byte_09     = s.Serialize <byte>(Shanghai_Byte_09, name: nameof(Shanghai_Byte_09));
                    }
                    else
                    {
                        Shanghai_Byte_08     = s.Serialize <byte>(Shanghai_Byte_08, name: nameof(Shanghai_Byte_08));
                        Shanghai_MapTileSize = s.Serialize <byte>(Shanghai_MapTileSize, name: nameof(Shanghai_MapTileSize));
                    }

                    Shanghai_Byte_0A = s.Serialize <byte>(Shanghai_Byte_0A, name: nameof(Shanghai_Byte_0A));
                    Shanghai_Byte_0B = s.Serialize <byte>(Shanghai_Byte_0B, name: nameof(Shanghai_Byte_0B));

                    ScrollX = s.Serialize <int>(ScrollX, name: nameof(ScrollX));
                    s.Log($"ScrollXFloat: {ScrollXFloat}");
                    ScrollY = s.Serialize <int>(ScrollY, name: nameof(ScrollY));
                    s.Log($"ScrollYFloat: {ScrollYFloat}");
                }
            }
            else
            {
                ScrollX = s.Serialize <int>(ScrollX, name: nameof(ScrollX));
                s.Log($"ScrollXFloat: {ScrollXFloat}");
                ScrollY = s.Serialize <int>(ScrollY, name: nameof(ScrollY));
                s.Log($"ScrollYFloat: {ScrollYFloat}");
                Width   = s.Serialize <ushort>(Width, name: nameof(Width));
                Height  = s.Serialize <ushort>(Height, name: nameof(Height));
                Byte_0C = s.Serialize <byte>(Byte_0C, name: nameof(Byte_0C));
                Byte_0D = s.Serialize <byte>(Byte_0D, name: nameof(Byte_0D));
                Byte_0E = s.Serialize <byte>(Byte_0E, name: nameof(Byte_0E));
                Byte_0F = s.Serialize <byte>(Byte_0F, name: nameof(Byte_0F));
            }
        }