Пример #1
0
            public override void SerializeImpl(SerializerObject s)
            {
                switch (TileCompression)
                {
                case Compression.RLE1:
                    s.DoEncoded(new RHR_RLETileEncoder(RHR_RLETileEncoder.RLEMode.RLE1), () => {
                        TileIndices = s.SerializeArray <ushort>(TileIndices, 64, name: nameof(TileIndices));
                    });
                    break;

                case Compression.RLE2:
                    s.DoEncoded(new RHR_RLETileEncoder(RHR_RLETileEncoder.RLEMode.RLE2), () => {
                        TileIndices = s.SerializeArray <ushort>(TileIndices, 64, name: nameof(TileIndices));
                    });
                    break;

                case Compression.BlockDiff:
                    BaseMapEntry = s.Serialize <ushort>(BaseMapEntry, name: nameof(BaseMapEntry));
                    Padding      = s.Serialize <ushort>(Padding, name: nameof(Padding));
                    s.DoEncoded(new RHREncoder(RHREncoder.EncoderMode.TileData), () => {
                        TileIndices = s.SerializeArray <ushort>(TileIndices, 64, name: nameof(TileIndices));
                    });
                    break;

                case Compression.Block:
                    s.DoEncoded(new RHREncoder(RHREncoder.EncoderMode.TileData), () => {
                        TileIndices = s.SerializeArray <ushort>(TileIndices, 64, name: nameof(TileIndices));
                    });
                    break;
                }
            }
        public override void SerializeImpl(SerializerObject s)
        {
            if (s.GameSettings.GBA_IsMilan)
            {
                FrameCount      = s.Serialize <ushort>((ushort)FrameCount, name: nameof(FrameCount));
                Milan_Ushort_02 = s.Serialize <ushort>(Milan_Ushort_02, name: nameof(Milan_Ushort_02));
                Milan_Bytes_04  = s.SerializeArray <byte>(Milan_Bytes_04, 8, name: nameof(Milan_Bytes_04));
            }
            else
            {
                FrameCount = s.Serialize <uint>(FrameCount, name: nameof(FrameCount));
            }

            var baseOffset = s.CurrentPointer;

            FrameOffsets = s.SerializeArray <uint>(FrameOffsets, FrameCount, name: nameof(FrameOffsets));

            if (Frames == null)
            {
                Frames = new GBA_BatmanVengeance_AnimationFrame[FrameCount];
            }

            for (int i = 0; i < FrameOffsets.Length; i++)
            {
                Frames[i] = s.DoAt(baseOffset + FrameOffsets[i], () => s.SerializeObject <GBA_BatmanVengeance_AnimationFrame>(Frames[i], onPreSerialize: f => f.Puppet = Puppet, name: $"{nameof(Frames)}[{i}]"));
            }
        }
Пример #3
0
        /// <summary>
        /// Handles the data serialization
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            Unk1 = s.Serialize <uint>(Unk1, name: nameof(Unk1));

            var unk2Length = 27;

            // The PS1 version hard-codes a different length for this version
            if (s.GameSettings.EngineVersion == EngineVersion.R1_PS1_Edu && s.GameSettings.EduVolume.StartsWith("CS"))
            {
                unk2Length = 29;
            }

            Unk2        = s.SerializeArray <byte>(Unk2, unk2Length, name: nameof(Unk2));
            Unk3        = s.SerializeArray <byte>(Unk3, 3130, name: nameof(Unk3));
            SampleNames = s.SerializeStringArray(SampleNames, 7, 9, name: nameof(SampleNames));

            VignetteItemsCount = s.Serialize <byte>(VignetteItemsCount, name: nameof(VignetteItemsCount));
            Unk5 = s.Serialize <uint>(Unk5, name: nameof(Unk5));
            Unk6 = s.Serialize <uint>(Unk6, name: nameof(Unk6));

            VignetteItems = s.SerializeObjectArray <R1_PCEdu_GeneralFileVignetteItem>(VignetteItems, VignetteItemsCount, name: nameof(VignetteItems));

            CreditsStringItemsCount = s.Serialize <uint>(CreditsStringItemsCount, name: nameof(CreditsStringItemsCount));
            CreditsStringItems      = s.SerializeObjectArray <R1_PC_GeneralFileStringItem>(CreditsStringItems, CreditsStringItemsCount, name: nameof(CreditsStringItems));
        }
Пример #4
0
        public override void SerializeImpl(SerializerObject s)
        {
            Unk1             = s.Serialize <ushort>(Unk1, name: nameof(Unk1));
            Unk2             = s.Serialize <ushort>(Unk2, name: nameof(Unk2));
            Unk3             = s.Serialize <ushort>(Unk3, name: nameof(Unk3));
            ObjectsCount     = s.Serialize <uint>(ObjectsCount, name: nameof(ObjectsCount));
            OffsetsCount     = s.Serialize <uint>(OffsetsCount, name: nameof(OffsetsCount));
            UShort_0E        = s.Serialize <ushort>(UShort_0E, name: nameof(UShort_0E));
            Offsets          = s.SerializeArray <uint>(Offsets, OffsetsCount, name: nameof(Offset));
            UnusedOffsets    = s.SerializeArray <uint>(UnusedOffsets, 4 - OffsetsCount, name: nameof(UnusedOffsets));
            ObjectsOffset    = s.Serialize <uint>(ObjectsOffset, name: nameof(ObjectsOffset));
            UnkData0         = s.SerializeArray <byte>(UnkData0, 24, name: nameof(UnkData0));
            ObjectsEndOffset = s.Serialize <uint>(ObjectsEndOffset, name: nameof(ObjectsEndOffset));
            UnkData1         = s.SerializeArray <byte>(UnkData1, 76 - 24 - 4, name: nameof(UnkData1));
            if (UnkDataBlocks == null)
            {
                UnkDataBlocks = new byte[OffsetsCount][];
            }
            for (int i = 0; i < OffsetsCount; i++)
            {
                UnkDataBlocks[i] = s.SerializeArray <byte>(UnkDataBlocks[i], 64, name: $"{nameof(UnkDataBlocks)}[{i}]");
            }

            Objects = s.SerializeObjectArray <GBARRR_Object>(Objects, ObjectsCount, name: nameof(Objects));
            s.Serialize <uint>(0, "Padding");
        }
Пример #5
0
        public override void SerializeBlock(SerializerObject s)
        {
            if (s.GameSettings.EngineVersion == EngineVersion.GBA_BatmanVengeance)
            {
                Byte_03       = s.Serialize <byte>(Byte_03, name: nameof(Byte_03));
                IsCompressed  = s.Serialize <bool>(IsCompressed, name: nameof(IsCompressed));
                TileMapLength = s.Serialize <ushort>(TileMapLength, name: nameof(TileMapLength));
            }
            else
            {
                TileMapLength = s.Serialize <ushort>(TileMapLength, name: nameof(TileMapLength));
                IsCompressed  = s.Serialize <bool>(IsCompressed, name: nameof(IsCompressed));
                Byte_03       = s.Serialize <byte>(Byte_03, name: nameof(Byte_03));
            }

            if (IsDataCompressed ?? IsCompressed)
            {
                s.DoEncoded(new GBA_LZSSEncoder(), () => TileMap = s.SerializeArray <byte>(TileMap, TileMapLength * 32, name: nameof(TileMap)));
                s.Align();
            }
            else
            {
                TileMap = s.SerializeArray <byte>(TileMap, TileMapLength * 32, name: nameof(TileMap));
            }
        }
Пример #6
0
        public override void SerializeImpl(SerializerObject s)
        {
            MapLayersPointers    = s.SerializePointerArray(MapLayersPointers, 4, name: nameof(MapLayersPointers));
            CollisionDataPointer = s.SerializePointer(CollisionDataPointer, name: nameof(CollisionDataPointer));
            LayersBlockPointer   = s.SerializePointer(LayersBlockPointer, name: nameof(LayersBlockPointer));
            HasDataBlockHeader   = s.Serialize <bool>(HasDataBlockHeader, name: nameof(HasDataBlockHeader));
            s.SerializeArray <byte>(new byte[3], 3, name: "Padding");
            ObjDataPointer         = s.SerializePointer(ObjDataPointer, name: nameof(ObjDataPointer));
            ObjDataUnkTablePointer = s.SerializePointer(ObjDataUnkTablePointer, name: nameof(ObjDataUnkTablePointer));
            s.SerializeArray <byte>(new byte[12], 12, name: "Padding"); // Always 0, but still part of the same struct

            if (MapLayers == null)
            {
                MapLayers = new GBAVV_Map2D_MapLayer[MapLayersPointers.Length];
            }

            for (int i = 0; i < MapLayers.Length; i++)
            {
                MapLayers[i] = s.DoAt(MapLayersPointers[i], () => s.SerializeObject <GBAVV_Map2D_MapLayer>(MapLayers[i], name: $"{nameof(MapLayers)}[{i}]"));
            }

            CollisionLayer = s.DoAt(CollisionDataPointer, () => s.SerializeObject <GBAVV_Map2D_MapLayer>(CollisionLayer, name: nameof(CollisionLayer)));

            LayersBlock = s.DoAt(LayersBlockPointer, () => s.SerializeObject <GBAVV_Map2D_LayersBlock>(LayersBlock, x =>
            {
                x.HasHeader = HasDataBlockHeader;
                x.MapData   = this;
            }, name: nameof(LayersBlock)));

            ObjData         = s.DoAt(ObjDataPointer, () => s.SerializeObject <GBAVV_Map2D_ObjData>(ObjData, name: nameof(ObjData)));
            ObjDataUnkTable = s.DoAt(ObjDataUnkTablePointer, () => s.SerializeObject <GBAVV_Map2D_ObjDataUnkTable>(ObjDataUnkTable, name: nameof(ObjDataUnkTable)));
        }
        /// <summary>
        /// Handles the data serialization
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            var isEncryptedAndChecksum = s.GameSettings.EngineVersion != EngineVersion.R1_PS1_Edu;

            LevelDefineChecksum = s.DoChecksum(new Checksum8Calculator(false), () =>
            {
                s.DoXOR((byte)(isEncryptedAndChecksum ? 0x57 : 0), () =>
                {
                    LevelDefine_0 = s.SerializeArray <byte>(LevelDefine_0, 6, name: nameof(LevelDefine_0));
                    MusicTrack    = s.Serialize <byte>(MusicTrack, name: nameof(MusicTrack));
                    BG_0          = s.Serialize <byte>(BG_0, name: nameof(BG_0));
                    BG_1          = s.Serialize <byte>(BG_1, name: nameof(BG_1));
                    BG_2          = s.Serialize <byte>(BG_2, name: nameof(BG_2));
                    LevelDefine_1 = s.SerializeArray <byte>(LevelDefine_1, 3, name: nameof(LevelDefine_1));
                    RayEvts       = s.Serialize <R1_RayEvtsFlags>(RayEvts, name: nameof(RayEvts));
                    UnkByte       = s.Serialize <byte>(UnkByte, name: nameof(UnkByte));
                });
            }, ChecksumPlacement.Before, calculateChecksum: isEncryptedAndChecksum, name: nameof(LevelDefineChecksum));

            BackgroundDefineNormalChecksum = s.DoChecksum(new Checksum8Calculator(false), () =>
            {
                s.DoXOR((byte)(isEncryptedAndChecksum ? 0xA5 : 0), () => BackgroundDefineNormal = s.SerializeObjectArray <R1_BackgroundLayerPosition>(BackgroundDefineNormal, 6, name: nameof(BackgroundDefineNormal)));
            }, ChecksumPlacement.Before, calculateChecksum: isEncryptedAndChecksum, name: nameof(BackgroundDefineNormalChecksum));

            BackgroundDefineDiffChecksum = s.DoChecksum(new Checksum8Calculator(false), () =>
            {
                s.DoXOR((byte)(isEncryptedAndChecksum ? 0xA5 : 0), () => BackgroundDefineDiff = s.SerializeObjectArray <R1_BackgroundLayerPosition>(BackgroundDefineDiff, 6, name: nameof(BackgroundDefineDiff)));
            }, ChecksumPlacement.Before, calculateChecksum: isEncryptedAndChecksum, name: nameof(BackgroundDefineDiffChecksum));
        }
Пример #8
0
        public void SerializeVignette(SerializerObject s, bool isImgDataCompressed)
        {
            // Serialize data from pointers

            s.DoAt(ImageDataPointer, () => {
                if (s.Context.Settings.GameModeSelection == GameModeSelection.RaymanDSi)
                {
                    if (isImgDataCompressed)
                    {
                        s.DoEncoded(new GBA_LZSSEncoder(), () => ImageData = s.SerializeArray <byte>(ImageData, 0x40 * Width * Height, name: nameof(ImageData)));
                    }
                    else
                    {
                        ImageData = s.SerializeArray <byte>(ImageData, 0x40 * Width * Height, name: nameof(ImageData));
                    }
                }
                else
                {
                    ImageData = s.SerializeArray <byte>(ImageData, 0x20 * Width * Height, name: nameof(ImageData));
                }
            });

            s.DoAt(BlockIndicesPointer, () => BlockIndices = s.SerializeArray <ushort>(BlockIndices, Width * Height, name: nameof(BlockIndices)));

            s.DoAt(PaletteIndicesPointer, () => PaletteIndices = s.SerializeArray <byte>(PaletteIndices, Width * Height, name: nameof(PaletteIndices)));

            s.DoAt(PalettesPointer, () => {
                Palettes = s.SerializeObjectArray <ARGB1555Color>(Palettes,
                                                                  (s.Context.Settings.GameModeSelection == GameModeSelection.RaymanDSi) ? 256 : (PaletteCount * 16),
                                                                  name: nameof(Palettes));
            });
        }
Пример #9
0
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize alpha data (only on EDU)
            if (s.GameSettings.EngineVersion == EngineVersion.R1_PC_Edu || s.GameSettings.EngineVersion == EngineVersion.R1_PS1_Edu)
            {
                if (EDU_Alpha == null)
                {
                    EDU_Alpha = new byte[160][];
                }

                for (int i = 0; i < EDU_Alpha.Length; i++)
                {
                    EDU_Alpha[i] = s.SerializeArray <byte>(EDU_Alpha[i], 256, name: $"{nameof(EDU_Alpha)}[{i}]");
                }
            }

            LevelsCount    = s.Serialize <ushort>(LevelsCount, name: nameof(LevelsCount));
            Unk2           = s.Serialize <byte>(Unk2, name: nameof(Unk2));
            Unk3           = s.Serialize <byte>(Unk3, name: nameof(Unk3));
            WorldMapVig    = s.SerializeString(WorldMapVig, 9, name: nameof(WorldMapVig));
            LevelSelectVig = s.SerializeString(LevelSelectVig, 9, name: nameof(LevelSelectVig));
            Unk4           = s.SerializeArray <byte>(Unk4, 7, name: nameof(Unk4));
            Unk5           = s.Serialize <byte>(Unk5, name: nameof(Unk5));
            Unk6           = s.Serialize <ushort>(Unk6, name: nameof(Unk6));

            Levels = s.SerializeObjectArray <R1_WorldMapInfo>(Levels, 32, name: nameof(Levels));

            Unk8 = s.Serialize <uint>(Unk8, name: nameof(Unk8));
            Unk9 = s.SerializeArray <byte>(Unk9, 17, name: nameof(Unk9));

            UnkStrings = s.SerializeStringArray(UnkStrings, 319, 9, name: nameof(UnkStrings));

            UnkLevelStructs = s.SerializeObjectArray <R1_PC_WorldMapLevelUnkStruct>(UnkLevelStructs, LevelsCount, name: nameof(UnkLevelStructs));
        }
Пример #10
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);
        }
Пример #11
0
 /// <summary>
 /// Handles the data serialization
 /// </summary>
 /// <param name="s">The serializer object</param>
 public override void SerializeImpl(SerializerObject s)
 {
     ColorIndexes     = s.SerializeArray <byte>(ColorIndexes, Settings.CellSize * Settings.CellSize, name: nameof(ColorIndexes));
     Alpha            = s.SerializeArray <byte>(Alpha, Settings.CellSize * Settings.CellSize, name: nameof(Alpha));
     TransparencyMode = s.Serialize <uint>(TransparencyMode, name: nameof(TransparencyMode));
     Unknown1         = s.SerializeArray <byte>(Unknown1, 28, name: nameof(Unknown1));
 }
Пример #12
0
        public override void SerializeBlock(SerializerObject s)
        {
            if (s.GameSettings.GBA_IsMilan)
            {
                Milan_ActorID = s.SerializeString(Milan_ActorID, length: 4, name: nameof(Milan_ActorID));
                s.SerializeArray <byte>(new byte[8], 8, name: "Padding");
            }
            else
            {
                if (s.GameSettings.EngineVersion > EngineVersion.GBA_BatmanVengeance)
                {
                    UnkData = s.SerializeArray <byte>(UnkData, 8, name: nameof(UnkData));
                }

                Index_Puppet = s.Serialize <byte>(Index_Puppet, name: nameof(Index_Puppet));
                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));

                if (s.GameSettings.EngineVersion == EngineVersion.GBA_BatmanVengeance)
                {
                    Actions = s.SerializeObjectArray <GBA_Action>(Actions, (BlockSize - 4) / 12, name: nameof(Actions));
                }
                else
                {
                    Actions = s.SerializeObjectArray <GBA_Action>(Actions, (BlockSize - 12) / 8, name: nameof(Actions));
                }
            }
        }
Пример #13
0
        public override void SerializeBlock(SerializerObject s)
        {
            if (s.GameSettings.EngineVersion <= EngineVersion.GBA_BatmanVengeance)
            {
                Is8Bit        = s.Serialize <bool>(Is8Bit, name: nameof(Is8Bit));
                IsCompressed  = s.Serialize <bool>(IsCompressed, name: nameof(IsCompressed));
                TileSetLength = s.Serialize <ushort>(TileSetLength, name: nameof(TileSetLength));
            }
            else
            {
                TileSetLength = s.Serialize <ushort>(TileSetLength, name: nameof(TileSetLength));
                IsCompressed  = s.Serialize <bool>(IsCompressed, name: nameof(IsCompressed));
                Is8Bit        = s.Serialize <bool>(Is8Bit, name: nameof(Is8Bit));
            }

            var tileLength = s.GameSettings.EngineVersion < EngineVersion.GBA_BatmanVengeance && Is8Bit ? 64 : 32;

            if (IsDataCompressed ?? IsCompressed)
            {
                s.DoEncoded(new GBA_LZSSEncoder(), () => TileSet = s.SerializeArray <byte>(TileSet, TileSetLength * tileLength, name: nameof(TileSet)));
                s.Align();
            }
            else
            {
                TileSet = s.SerializeArray <byte>(TileSet, TileSetLength * tileLength, name: nameof(TileSet));
            }
        }
Пример #14
0
        /// <summary>
        /// Handles the data serialization
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize data
            if (s.GameSettings.EngineVersion == EngineVersion.R1_DSi)
            {
                DSi_Dword_00 = s.Serialize <uint>(DSi_Dword_00, name: nameof(DSi_Dword_00));
                DSi_Dword_04 = s.Serialize <uint>(DSi_Dword_04, name: nameof(DSi_Dword_04));
            }
            ImageDataPointer      = s.SerializePointer(ImageDataPointer, name: nameof(ImageDataPointer));
            BlockIndicesPointer   = s.SerializePointer(BlockIndicesPointer, name: nameof(BlockIndicesPointer));
            PaletteIndicesPointer = s.SerializePointer(PaletteIndicesPointer, name: nameof(PaletteIndicesPointer));
            PalettesPointer       = s.SerializePointer(PalettesPointer, name: nameof(PalettesPointer));

            Width  = s.Serialize <ushort>(Width, name: nameof(Width));
            Height = s.Serialize <ushort>(Height, name: nameof(Height));

            UnkBytes_14 = s.SerializeArray <byte>(UnkBytes_14, 4, name: nameof(UnkBytes_14));

            Pointer_18 = s.SerializePointer(Pointer_18, name: nameof(Pointer_18));
            Pointer_1B = s.SerializePointer(Pointer_1B, name: nameof(Pointer_1B));

            UnkBytes_20 = s.SerializeArray <byte>(UnkBytes_20, 4, name: nameof(UnkBytes_20));

            if (s.GameSettings.EngineVersion == EngineVersion.R1_DSi)
            {
                DSi_Dword_2C = s.Serialize <uint>(DSi_Dword_2C, name: nameof(DSi_Dword_2C));
            }

            // Serialize data from pointers
            SerializeVignette(s, s.GameSettings.EngineVersion == EngineVersion.R1_DSi);
        }
Пример #15
0
        public override void SerializeBlock(SerializerObject s)
        {
            if (s.GameSettings.EngineVersion == EngineVersion.GBC_R1_PocketPC)
            {
                FileOffsets = s.SerializeArraySize <uint, uint>(FileOffsets, name: nameof(FileOffsets));
                FileOffsets = s.SerializeArray <uint>(FileOffsets, FileOffsets.Length, name: nameof(FileOffsets));
                if (Files == null)
                {
                    Files = new SoundFile_PPC[FileOffsets.Length];
                }
                for (int i = 0; i < FileOffsets.Length; i++)
                {
                    if (FileOffsets[i] == 0)
                    {
                        continue;
                    }
                    s.Goto(BlockStartPointer + FileOffsets[i]);
                    Files[i] = s.SerializeObject <SoundFile_PPC>(Files[i], name: $"{nameof(Files)}[{i}]");
                }
            }
            else
            {
                DataOffsetsOffset  = s.Serialize <ushort>(DataOffsetsOffset, name: nameof(DataOffsetsOffset));
                UShort_02          = s.Serialize <ushort>(UShort_02, name: nameof(UShort_02));
                SoundIDOffsetCount = s.Serialize <ushort>(SoundIDOffsetCount, name: nameof(SoundIDOffsetCount));
                SoundOffsetCount   = s.Serialize <ushort>(SoundOffsetCount, name: nameof(SoundOffsetCount));

                s.DoAt(BlockStartPointer + DataOffsetsOffset, () => {
                    SoundIDOffsets = s.SerializeArray <ushort>(SoundIDOffsets, SoundIDOffsetCount, name: nameof(SoundIDOffsets));
                    SoundOffsets   = s.SerializeArray <ushort>(SoundOffsets, SoundOffsetCount, name: nameof(SoundOffsets));
                });
                if (SoundIDs == null)
                {
                    SoundIDs = new SoundID[SoundIDOffsetCount];
                }
                if (Sounds == null)
                {
                    Sounds = new Sound[SoundOffsetCount];
                }
                for (int i = 0; i < SoundIDs.Length; i++)
                {
                    s.Goto(BlockStartPointer + SoundIDOffsets[i]);
                    SoundIDs[i] = s.SerializeObject <SoundID>(SoundIDs[i], name: $"{nameof(SoundIDs)}[{i}]");
                }
                for (int i = 0; i < Sounds.Length; i++)
                {
                    int nextOff = i < Sounds.Length - 1 ? SoundOffsets[i + 1] : (int)BlockSize;
                    int length  = nextOff - SoundOffsets[i];
                    s.Goto(BlockStartPointer + SoundOffsets[i]);
                    Sounds[i] = s.SerializeObject <Sound>(Sounds[i], onPreSerialize: d => d.Length = length, name: $"{nameof(Sounds)}[{i}]");
                    if (Sounds[i].SoundProgramID.HasValue)
                    {
                        Sounds[i].SoundProgram = s.DoAt(DependencyTable.GetPointer(Sounds[i].SoundProgramID.Value - 1), () => {
                            return(s.SerializeObject <GBC_SoundProgram>(Sounds[i].SoundProgram, name: nameof(Sound.SoundProgram)));
                        });
                    }
                }
            }
        }
Пример #16
0
 public override void SerializeImpl(SerializerObject s)
 {
     FunctionPointer_0 = s.SerializePointer(FunctionPointer_0, name: nameof(FunctionPointer_0));
     FunctionPointer_1 = s.SerializePointer(FunctionPointer_1, name: nameof(FunctionPointer_1));
     FunctionPointer_2 = s.SerializePointer(FunctionPointer_2, name: nameof(FunctionPointer_2));
     Bytes_10          = s.SerializeArray <byte>(Bytes_10, 4, name: nameof(Bytes_10));
     AdditionalHeight  = s.SerializeObject <FixedPointInt>(AdditionalHeight, name: nameof(AdditionalHeight));
     Bytes_18          = s.SerializeArray <byte>(Bytes_18, 20, name: nameof(Bytes_18));
 }
        public override void SerializeImpl(SerializerObject s)
        {
            DataLength = s.Serialize <uint>(DataLength, name: nameof(DataLength));

            if (DataLength > 0)
            {
                Unk2 = s.SerializeArray <byte>(Unk2, 24, name: nameof(Unk2));
                Data = s.SerializeArray <byte>(Data, DataLength, name: nameof(Data));
            }
        }
Пример #18
0
        public override void SerializeImpl(SerializerObject s)
        {
            HasEvents = s.Serialize <bool>(HasEvents, name: nameof(HasEvents));
            s.SerializeArray <byte>(new byte[3], 3, name: "Padding");

            // Serialize event map dimensions
            Width  = s.Serialize <ushort>(Width, name: nameof(Width));
            Height = s.Serialize <ushort>(Height, name: nameof(Height));

            EventIndexMap = s.SerializeArray <ushort>(EventIndexMap, Width * Height, name: nameof(EventIndexMap));
        }
Пример #19
0
 public override void SerializeBlock(SerializerObject s)
 {
     IndicesCount8bpp = s.Serialize <ushort>(IndicesCount8bpp, name: nameof(IndicesCount8bpp));
     IndicesCount4bpp = s.Serialize <ushort>(IndicesCount4bpp, name: nameof(IndicesCount4bpp));
     if (HasExtraData)
     {
         ExtraData = s.SerializeArray <byte>(ExtraData, 4, name: nameof(ExtraData));
     }
     Indices8bpp = s.SerializeArray <ushort>(Indices8bpp, IndicesCount8bpp, name: nameof(Indices8bpp));
     Indices4bpp = s.SerializeArray <ushort>(Indices4bpp, IndicesCount4bpp, name: nameof(Indices4bpp));
 }
Пример #20
0
        public override void SerializeImpl(SerializerObject s)
        {
            GraphicsPointer = s.SerializeObject <SNES_Pointer>(GraphicsPointer, onPreSerialize: p => p.HasMemoryBankValue = true, name: nameof(GraphicsPointer));
            VRAMAddress     = s.Serialize <ushort>(VRAMAddress, name: nameof(VRAMAddress));
            BytesToCopy     = s.Serialize <ushort>(BytesToCopy, name: nameof(BytesToCopy));
            Unknown         = s.SerializeArray <byte>(Unknown, BytesToCopy >> 8, name: nameof(Unknown));

            GraphicsBuffer = s.DoAt(GraphicsPointer.GetPointer(), () => {
                return(s.SerializeArray <byte>(GraphicsBuffer, BytesToCopy, name: nameof(GraphicsBuffer)));
            });
        }
Пример #21
0
 /// <summary>
 /// Handles the data serialization
 /// </summary>
 /// <param name="s">The serializer object</param>
 public override void SerializeImpl(SerializerObject s)
 {
     ImageDescriptorsPointer     = s.Serialize <uint>(ImageDescriptorsPointer, name: nameof(ImageDescriptorsPointer));
     AnimationDescriptorsPointer = s.Serialize <uint>(AnimationDescriptorsPointer, name: nameof(AnimationDescriptorsPointer));
     Dummy1                    = s.SerializeArray <byte>(Dummy1, 32, name: nameof(Dummy1));
     ImageBufferLength         = s.Serialize <uint>(ImageBufferLength, name: nameof(ImageBufferLength));
     Dummy2                    = s.SerializeArray <byte>(Dummy2, 24, name: nameof(Dummy2));
     ImageDescriptorsCount     = s.Serialize <ushort>(ImageDescriptorsCount, name: nameof(ImageDescriptorsCount));
     Dummy3                    = s.SerializeArray <byte>(Dummy3, 62, name: nameof(Dummy3));
     AnimationDescriptorsCount = s.Serialize <byte>(AnimationDescriptorsCount, name: nameof(AnimationDescriptorsCount));
     Dummy4                    = s.SerializeArray <byte>(Dummy4, 3, name: nameof(Dummy4));
 }
Пример #22
0
        public override void SerializeImpl(SerializerObject s)
        {
            Palette = s.SerializeObjectArray <RGBA5551Color>(Palette, 256, name: nameof(Palette));

            Width        = s.Serialize <ushort>(Width, name: nameof(Width));
            Height       = s.Serialize <ushort>(Height, name: nameof(Height));
            TileSetCount = s.Serialize <uint>(TileSetCount, name: nameof(TileSetCount));

            TileMap        = s.SerializeObjectArray <MapTile>(TileMap, Width * Height, name: nameof(TileMap));
            TileSet        = s.SerializeArray <byte>(TileSet, TileSetCount * 0x20, name: nameof(TileSet));
            PaletteIndices = s.SerializeArray <byte>(PaletteIndices, (Width * Height) / 2, name: nameof(PaletteIndices));
        }
Пример #23
0
 public override void SerializeImpl(SerializerObject s)
 {
     ObjectType = s.Serialize <Mode7Type>(ObjectType, name: nameof(ObjectType));
     if (ObjectType != Mode7Type.Invalid)
     {
         XPosition = s.Serialize <short>(XPosition, name: nameof(XPosition));
         YPosition = s.Serialize <short>(YPosition, name: nameof(YPosition));
         Data0     = s.SerializeArray <byte>(Data0, 10, name: nameof(Data0));
         AnimFrame = s.Serialize <short>(AnimFrame, name: nameof(AnimFrame));
         Data1     = s.SerializeArray <byte>(Data1, 14, name: nameof(Data1));
     }
 }
Пример #24
0
        public override void SerializeImpl(SerializerObject s)
        {
            Sync      = s.SerializeArray <byte>(Sync, 12, name: nameof(Sync));
            Header    = s.SerializeArray <byte>(Header, 4, name: nameof(Header));
            SubHeader = s.SerializeArray <byte>(SubHeader, 8, name: nameof(SubHeader));

            Object = s.SerializeObject <T>(Object, name: nameof(Object));

            s.Goto(Offset + ISO9960_BinFile.SectorDataSize + ISO9960_BinFile.SectorHeaderSize);
            EDC = s.SerializeArray <byte>(EDC, 4, name: nameof(EDC));
            ECC = s.SerializeArray <byte>(ECC, 276, name: nameof(ECC));
        }
Пример #25
0
        /// <summary>
        /// Handles the data serialization
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize the background layer information
            BackgroundDefineNormal = s.SerializeObjectArray <R1_BackgroundLayerPosition>(BackgroundDefineNormal, 6, name: nameof(BackgroundDefineNormal));
            BackgroundDefineDiff   = s.SerializeObjectArray <R1_BackgroundLayerPosition>(BackgroundDefineDiff, 6, name: nameof(BackgroundDefineDiff));

            Unknown3 = s.SerializeArray <byte>(Unknown3, 16, name: nameof(Unknown3));

            BackgroundLayerInfos = s.SerializeObjectArray <R1_ImageDescriptor>(BackgroundLayerInfos, 12, name: nameof(BackgroundLayerInfos));

            Unknown4 = s.SerializeArray <byte>(Unknown4, s.GameSettings.EngineVersion == EngineVersion.R1_PS1_JP ? 208 : 80, name: nameof(Unknown4));
        }
Пример #26
0
        public override void SerializeImpl(SerializerObject s)
        {
            FrameTablePointer = s.SerializePointer(FrameTablePointer, name: nameof(FrameTablePointer));
            HitBox            = s.SerializeObject <AnimRect>(HitBox, name: nameof(HitBox));
            RenderBox         = s.SerializeObject <AnimRect>(RenderBox, name: nameof(RenderBox));
            PaletteIndex      = s.Serialize <byte>(PaletteIndex, name: nameof(PaletteIndex));
            AnimSpeed         = s.Serialize <byte>(AnimSpeed, name: nameof(AnimSpeed));
            FramesCount       = s.Serialize <byte>(FramesCount, name: nameof(FramesCount));
            Byte_13           = s.Serialize <byte>(Byte_13, name: nameof(Byte_13));
            s.SerializeArray <byte>(new byte[4], 4, name: "Padding");

            FrameTable = s.DoAt(FrameTablePointer, () => s.SerializeArray <ushort>(FrameTable, FramesCount, name: nameof(FrameTable)));
        }
Пример #27
0
        public override void SerializeImpl(SerializerObject s)
        {
            Bytes_00       = s.SerializeArray <byte>(Bytes_00, 16, name: nameof(Bytes_00));
            PalettePointer = s.SerializePointer(PalettePointer, name: nameof(PalettePointer));
            Pointer_14     = s.SerializePointer(Pointer_14, name: nameof(Pointer_14));
            Pointer_18     = s.SerializePointer(Pointer_18, name: nameof(Pointer_18));
            Pointer_1C     = s.SerializePointer(Pointer_1C, name: nameof(Pointer_1C));
            Pointer_20     = s.SerializePointer(Pointer_20, name: nameof(Pointer_20));
            Pointer_24     = s.SerializePointer(Pointer_24, name: nameof(Pointer_24));
            Bytes_28       = s.SerializeArray <byte>(Bytes_28, 8, name: nameof(Bytes_28));
            NamePointer    = s.SerializePointer(NamePointer, name: nameof(NamePointer));

            Palette = s.DoAt(PalettePointer, () => s.SerializeObjectArray <ARGB1555Color>(Palette, 16, name: nameof(Palette)));
            Name    = s.DoAt(NamePointer, () => s.SerializeString(Name, name: nameof(Name)));
        }
Пример #28
0
 public override void SerializeBlock(SerializerObject s)
 {
     Width        = s.Serialize <uint>(Width, name: nameof(Width));
     Height       = s.Serialize <uint>(Height, name: nameof(Height));
     Speed        = s.Serialize <uint>(Speed, name: nameof(Speed));
     FrameCount   = s.Serialize <uint>(FrameCount, name: nameof(FrameCount));
     FrameOffsets = s.SerializeArray <uint>(FrameOffsets, FrameCount, name: nameof(FrameOffsets));
     if (s.GameSettings.EngineVersion == EngineVersion.GBC_R1_PocketPC)
     {
         if (FrameDataPPC == null)
         {
             FrameDataPPC = new BGR565Color[FrameCount][];
         }
         for (int i = 0; i < FrameDataPPC.Length; i++)
         {
             uint decompressedSize = Width * Height * 2;
             uint nextOff          = i < FrameDataPPC.Length - 1 ? FrameOffsets[i + 1] : BlockSize;
             uint compressedSize   = nextOff - FrameOffsets[i];
             s.DoAt(BlockStartPointer + FrameOffsets[i], () => {
                 s.DoEncoded(new Lzo1xEncoder(compressedSize, decompressedSize), () => {
                     FrameDataPPC[i] = s.SerializeObjectArray <BGR565Color>(FrameDataPPC[i], Width * Height, name: $"{nameof(FrameDataPPC)}[{i}]");
                 });
             });
         }
     }
 }
Пример #29
0
        /// <summary>
        /// Serializes the data
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // HEADER
            base.SerializeImpl(s);

            // IMAGE BLOCK

            s.DoAt(ImageBlockPointer, () => ImageBlock = s.SerializeObject <R1_PS1_VignetteBlockGroup>(ImageBlock, name: nameof(ImageBlock), onPreSerialize: x => x.BlockGroupSize = (int)(PaletteBlockPointer - ImageBlockPointer) / 2));

            // PARALLAX PALETTES

            s.DoAt(PaletteBlockPointer, () =>
            {
                // TODO: Get correct length and parse
                UnknownPaletteHeader = s.SerializeArray <byte>(UnknownPaletteHeader, (FileSize - PaletteBlockPointer.FileOffset) % 512, name: nameof(UnknownPaletteHeader));

                uint numPalettes = (uint)(FileSize - s.CurrentPointer.FileOffset) / (256 * 2);
                if (ParallaxPalettes == null)
                {
                    ParallaxPalettes = new ARGB1555Color[numPalettes][];
                }

                for (int i = 0; i < ParallaxPalettes.Length; i++)
                {
                    ParallaxPalettes[i] = s.SerializeObjectArray <ARGB1555Color>(ParallaxPalettes[i], 256, name: nameof(ParallaxPalettes) + "[" + i + "]");
                }
            });
        }
Пример #30
0
 /// <summary>
 /// Handles the data serialization
 /// </summary>
 /// <param name="s">The serializer object</param>
 public override void SerializeImpl(SerializerObject s)
 {
     MapData         = s.DoAt(s.CurrentPointer + 0x28000, () => s.SerializeObject <MapData>(MapData, name: nameof(MapData)));
     Palettes        = s.DoAt(s.CurrentPointer + 0x2ADC4, () => s.SerializeObjectArray <ARGB1555Color>(Palettes, 16 * 16, name: nameof(Palettes)));
     TileDescriptors = s.DoAt(s.CurrentPointer + 0x1AAF8, () => s.SerializeObjectArray <SNES_Proto_TileDescriptor>(TileDescriptors, 1024 * 4, name: nameof(TileDescriptors)));
     TileMap         = s.DoAt(s.CurrentPointer + 0x30000, () => s.SerializeArray <byte>(TileMap, 0x10000, name: nameof(TileMap)));
 }