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