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