Пример #1
0
        public override void SerializeImpl(SerializerObject s)
        {
            States = s.SerializeArraySize <R1_EventState[], byte>(States, name: nameof(States));

            for (int i = 0; i < States.Length; i++)
            {
                States[i] = s.SerializeArraySize <R1_EventState, byte>(States[i], name: nameof(States) + "[" + i + "]");
                States[i] = s.SerializeObjectArray <R1_EventState>(States[i], States[i].Length, name: nameof(States) + "[" + i + "]");
            }
        }
Пример #2
0
        /// <summary>
        /// Handles the data serialization
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize palettes
            s.DoAt(s.CurrentPointer + 0x2ADC4, () =>
            {
                TilePalette   = s.SerializeObjectArray <RGBA5551Color>(TilePalette, 8 * 16, name: nameof(TilePalette));
                SpritePalette = s.SerializeObjectArray <RGBA5551Color>(SpritePalette, 8 * 16, name: nameof(SpritePalette));
            });

            // Serialize tile sets
            TileSet_0000 = s.DoAt(s.CurrentPointer + 0x30000, () => s.SerializeArray <byte>(TileSet_0000, 1024 * 32, name: nameof(TileSet_0000)));
            TileSet_8000 = s.DoAt(s.CurrentPointer + 0x36F00, () => s.SerializeArray <byte>(TileSet_8000, 21 * 16, name: nameof(TileSet_8000)));
            // Animated tiles: 0x37050
            s.DoAt(s.CurrentPointer + 0x8077, () => {
                AnimatedTiles = s.SerializeArraySize <SNES_Proto_AnimatedTileEntry, byte>(AnimatedTiles, name: nameof(AnimatedTiles));
                AnimatedTiles = s.SerializeObjectArray <SNES_Proto_AnimatedTileEntry>(AnimatedTiles, AnimatedTiles.Length, name: nameof(AnimatedTiles));
            });
            // Serialize maps
            BG1_Map   = s.DoAt(s.CurrentPointer + 0x28000, () => s.SerializeObject <MapData>(BG1_Map, name: nameof(BG1_Map)));
            BG1_Tiles = s.DoAt(s.CurrentPointer + 0x1AAF8, () => s.SerializeObjectArray <MapTile>(BG1_Tiles, 1024 * 4, onPreSerialize: x => x.SNES_Is8PxTile = true, name: nameof(BG1_Tiles)));
            BG2_Tiles = s.DoAt(s.CurrentPointer + 0x29dc4, () => s.SerializeObjectArray <MapTile>(BG2_Tiles, 32 * 32, onPreSerialize: x => x.SNES_Is8PxTile = true, name: nameof(BG2_Tiles)));
            BG3_Tiles = s.DoAt(s.CurrentPointer + 0x2A5C4, () => s.SerializeObjectArray <MapTile>(BG3_Tiles, 32 * 32, onPreSerialize: x => x.SNES_Is8PxTile = true, name: nameof(BG3_Tiles)));

            // Serialize object data
            Rayman = s.DoAt(s.CurrentPointer + 0x10016, () => s.SerializeObject <SNES_Proto_Object>(Rayman, name: nameof(Rayman)));

            // Serialize sprite tile sets
            SpriteTileSet     = s.DoAt(s.CurrentPointer + 0x2afc4, () => s.SerializeArray <byte>(SpriteTileSet, 0x3000, name: nameof(SpriteTileSet)));
            SpriteTileSetAdd0 = s.DoAt(s.CurrentPointer + 0x24ea8, () => s.SerializeArray <byte>(SpriteTileSetAdd0, 0x600, name: nameof(SpriteTileSetAdd0)));
            SpriteTileSetAdd1 = s.DoAt(s.CurrentPointer + 0x24ea8 + 0x600, () => s.SerializeArray <byte>(SpriteTileSetAdd1, 0x600, name: nameof(SpriteTileSetAdd1)));
            SpriteTileSetAdd2 = s.DoAt(s.CurrentPointer + 0x24ea8 + 0xC00, () => s.SerializeArray <byte>(SpriteTileSetAdd2, 0x400, name: nameof(SpriteTileSetAdd2)));
        }
Пример #3
0
 public override void SerializeImpl(SerializerObject s)
 {
     s.DoEndian(R1Engine.Serialize.BinaryFile.Endian.Big, () => {
         LanguageTables = s.SerializeArraySize <LanguageTable, ushort>(LanguageTables, name: nameof(LanguageTables));
         LanguageTables = s.SerializeObjectArray <LanguageTable>(LanguageTables, LanguageTables.Length, name: nameof(LanguageTables));
     });
 }
Пример #4
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)));
                        });
                    }
                }
            }
        }
Пример #5
0
 public override void SerializeImpl(SerializerObject s)
 {
     Length  = s.Serialize <uint>(Length, name: nameof(Length));
     Strings = s.SerializeArraySize <string, ushort>(Strings, name: nameof(Strings));
     for (int i = 0; i < Strings.Length; i++)
     {
         ushort len = s.Serialize <ushort>((ushort)(Strings[i]?.Length ?? 0), name: $"{nameof(Strings)}[{i}].Length");
         Strings[i] = s.SerializeString(Strings[i], length: len, name: $"{nameof(Strings)}[{i}]");
     }
 }
Пример #6
0
        /// <summary>
        /// Serializes the data
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize PC Header
            base.SerializeImpl(s);

            // Hard-code to 1 item
            DesItemCount = 1;

            // Serialize the DES
            DesItems = s.SerializeObjectArray <R1_PC_DES>(DesItems, DesItemCount, onPreSerialize: data => data.FileType = R1_PC_DES.Type.BigRay, name: nameof(DesItems));

            // Serialize the ETA
            Eta = s.SerializeArraySize <R1_PC_ETA, byte>(Eta, name: nameof(Eta));
            Eta = s.SerializeObjectArray <R1_PC_ETA>(Eta, Eta.Length, name: nameof(Eta));
        }
Пример #7
0
        /// <summary>
        /// Serializes the data
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize PC Header
            base.SerializeImpl(s);

            // Serialize world data
            BG1 = s.Serialize <ushort>(BG1, name: nameof(BG1));
            BG2 = s.Serialize <ushort>(BG2, name: nameof(BG2));
            Plan0NumPcxCount  = s.Serialize <byte>(Plan0NumPcxCount, name: nameof(Plan0NumPcxCount));
            VideoBiosCheckSum = s.Serialize <byte>(VideoBiosCheckSum, name: nameof(VideoBiosCheckSum));
            BiosCheckSum      = s.Serialize <byte>(BiosCheckSum, name: nameof(BiosCheckSum));

            if (s.GameSettings.EngineVersion == EngineVersion.R1_PC || s.GameSettings.EngineVersion == EngineVersion.R1_PocketPC)
            {
                s.DoXOR(0x15, () => Plan0NumPcx = s.SerializeArray <byte>(Plan0NumPcx, Plan0NumPcxCount, name: nameof(Plan0NumPcx)));
            }
            else
            {
                s.DoXOR(0x19, () => Plan0NumPcxFiles = s.SerializeStringArray(Plan0NumPcxFiles, Plan0NumPcxCount, 8, name: nameof(Plan0NumPcxFiles)));
            }

            // Serialize the DES
            DesItemCount = s.Serialize <ushort>(DesItemCount, name: nameof(DesItemCount));

            DesItems = s.SerializeObjectArray <R1_PC_DES>(DesItems, DesItemCount, onPreSerialize: data => data.FileType = R1_PC_DES.Type.World, name: nameof(DesItems));

            // Serialize the ETA
            Eta = s.SerializeArraySize <R1_PC_ETA, byte>(Eta, name: nameof(Eta));
            Eta = s.SerializeObjectArray <R1_PC_ETA>(Eta, Eta.Length, name: nameof(Eta));

            // Kit and EDU have more data...
            if (s.GameSettings.EngineVersion == EngineVersion.R1_PC_Kit || s.GameSettings.EngineVersion == EngineVersion.R1_PC_Edu)
            {
                // Serialize world defines
                WorldDefineChecksum = s.DoChecksum(new Checksum8Calculator(false), () =>
                {
                    s.DoXOR(0x71, () => WorldDefine = s.SerializeObject <R1_PC_WorldDefine>(WorldDefine, name: nameof(WorldDefine)));
                }, ChecksumPlacement.Before, name: nameof(WorldDefineChecksum));

                // Serialize file tables
                if (s.GameSettings.EngineVersion == EngineVersion.R1_PC_Kit)
                {
                    DESFileNames = s.SerializeStringArray(DESFileNames, 100, 13, name: nameof(DESFileNames));
                    ETAFileNames = s.SerializeStringArray(ETAFileNames, 60, 13, name: nameof(ETAFileNames));
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Serializes the data
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // HEADER

            Pointers = s.SerializeArraySize <uint, uint>(Pointers);
            Pointers = s.SerializeArray <uint>(Pointers, Pointers.Length, name: nameof(Pointers));
            FileSize = s.Serialize <uint>(FileSize, name: nameof(FileSize));

            // IMAGE BLOCKS

            if (ImageBlocks == null)
            {
                ImageBlocks = new ObjectArray <ARGB1555Color> [Pointers.Length];
            }

            for (int i = 0; i < Pointers.Length; i++)
            {
                var parentPointer = i == Pointers.Length - 1 ? FileSize : Pointers[i + 1];

                ImageBlocks[i] = s.SerializeObject <ObjectArray <ARGB1555Color> >(ImageBlocks[i], name: $"{nameof(ImageBlocks)} [{i}]", onPreSerialize: x => x.Length = (parentPointer - Pointers[i]) / 2);
            }
        }
Пример #9
0
        }                                          // EDU/Kit only

        /// <summary>
        /// Serializes the data
        /// </summary>
        /// <param name="s">The serializer object</param>
        public override void SerializeImpl(SerializerObject s)
        {
            // Serialize PC Header
            base.SerializeImpl(s);

            // Serialize the ETA
            Eta = s.SerializeArraySize <R1_PC_ETA, byte>(Eta, name: nameof(Eta));
            Eta = s.SerializeObjectArray <R1_PC_ETA>(Eta, Eta.Length, name: nameof(Eta));

            // Serialize the DES
            DesItemCount = s.Serialize <ushort>(DesItemCount, name: nameof(DesItemCount));

            // We need to read one less DES as DES 0 is not in this file
            DesItems = s.SerializeObjectArray <R1_PC_DES>(DesItems, DesItemCount - 1, onPreSerialize: data => data.FileType = R1_PC_DES.Type.AllFix, name: nameof(DesItems));

            RaymanExeCheckSum3 = s.Serialize(RaymanExeCheckSum3, name: nameof(RaymanExeCheckSum3));

            DESIndex_Ray    = s.Serialize <uint>(DESIndex_Ray, name: nameof(DESIndex_Ray));
            DESIndex_Alpha  = s.Serialize <uint>(DESIndex_Alpha, name: nameof(DESIndex_Alpha));
            DESIndex_Alpha2 = s.Serialize <uint>(DESIndex_Alpha2, name: nameof(DESIndex_Alpha2));

            if (s.GameSettings.GameModeSelection == GameModeSelection.RaymanPC_1_21_JP)
            {
                DESIndex_Alpha3 = s.Serialize <uint>(DESIndex_Alpha3, name: nameof(DESIndex_Alpha3));
            }

            DESIndex_RayLittle = s.Serialize <uint>(DESIndex_RayLittle, name: nameof(DESIndex_RayLittle));
            DESIndex_MapObj    = s.Serialize <uint>(DESIndex_MapObj, name: nameof(DESIndex_MapObj));
            DESIndex_ClockObj  = s.Serialize <uint>(DESIndex_ClockObj, name: nameof(DESIndex_ClockObj));
            DESIndex_DivObj    = s.Serialize <uint>(DESIndex_DivObj, name: nameof(DESIndex_DivObj));

            if (s.GameSettings.EngineVersion == EngineVersion.R1_PC_Kit || s.GameSettings.EngineVersion == EngineVersion.R1_PC_Edu || s.GameSettings.EngineVersion == EngineVersion.R1_PS1_Edu)
            {
                DESIndex_PARCHEM = s.Serialize <uint>(DESIndex_PARCHEM, name: nameof(DESIndex_PARCHEM));
            }
        }
Пример #10
0
 /// <summary>
 /// Handles the data serialization
 /// </summary>
 /// <param name="s">The serializer object</param>
 public override void SerializeImpl(SerializerObject s)
 {
     Indices = s.SerializeArraySize <ushort, ushort>(Indices, name: nameof(Indices));
     Indices = s.SerializeArray <ushort>(Indices, Indices.Length, name: nameof(Indices));
 }
Пример #11
0
 public override void SerializeImpl(SerializerObject s)
 {
     World = s.Serialize <byte>(World, name: nameof(World));
     Types = s.SerializeArraySize <byte, byte>(Types, name: nameof(Types));
     Types = s.SerializeArray <byte>(Types, Types.Length, name: nameof(Types));
 }
Пример #12
0
 public override void SerializeImpl(SerializerObject s)
 {
     Type = s.Serialize <FileType>(Type, name: nameof(Type));
     Data = s.SerializeArraySize <byte, uint>(Data, name: nameof(Data));
     Data = s.SerializeArray <byte>(Data, Data.Length, name: nameof(Data));
 }