public static SimpleChestEvent Serdes(SimpleChestEvent e, ISerializer s) { e ??= new SimpleChestEvent(); s.Begin(); e.ChestType = s.EnumU8(nameof(ChestType), e.ChestType); uint padding = s.UInt32(nameof(padding), 0); ApiUtil.Assert(padding == 0); e.ItemId = (ItemId)StoreIncremented.Serdes(nameof(e.ItemId), (ushort)e.ItemId, s.UInt16); e.Amount = s.UInt16(nameof(Amount), e.Amount); s.End(); return(e); }
public static AddPartyMemberEvent Serdes(AddPartyMemberEvent e, ISerializer s) { e ??= new AddPartyMemberEvent(); s.Begin(); e.Unk2 = s.UInt8(nameof(Unk2), e.Unk2); e.Unk3 = s.UInt8(nameof(Unk3), e.Unk3); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.PartyMemberId = (PartyCharacterId)StoreIncremented.Serdes(nameof(PartyMemberId), (ushort)e.PartyMemberId, s.UInt16); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); s.End(); return(e); }
public static AddRemoveInventoryItemEvent Serdes(AddRemoveInventoryItemEvent e, ISerializer s) { e ??= new AddRemoveInventoryItemEvent(); s.Begin(); e.Operation = s.EnumU8(nameof(Operation), e.Operation); e.Amount = s.UInt8(nameof(Amount), e.Amount); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.ItemId = (ItemId)StoreIncremented.Serdes(nameof(e.ItemId), (ushort)e.ItemId, s.UInt16); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); s.End(); return(e); }
public static QueryItemEvent Serdes(QueryItemEvent e, ISerializer s, QueryType subType) { e ??= new QueryItemEvent(subType); s.Begin(); e.Operation = s.EnumU8(nameof(Operation), e.Operation); e.Immediate = s.UInt8(nameof(Immediate), e.Immediate); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.ItemId = (ItemId)StoreIncremented.Serdes(nameof(ItemId), (ushort)e.ItemId, s.UInt16); ApiUtil.Assert(e.Unk4 == 0); ApiUtil.Assert(e.Unk5 == 0); s.End(); return(e); }
public static RemovePartyMemberEvent Serdes(RemovePartyMemberEvent e, ISerializer s) { e ??= new RemovePartyMemberEvent(); s.Begin(); e.PartyMemberId = (PartyCharacterId)StoreIncremented.Serdes(nameof(PartyMemberId), (byte)e.PartyMemberId, s.UInt8); e.Unk2 = s.UInt8(nameof(Unk2), e.Unk2); e.Unk3 = s.UInt8(nameof(Unk3), e.Unk3); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.Unk6 = s.UInt16(nameof(Unk6), e.Unk6); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); ApiUtil.Assert(e.Unk4 == 0); ApiUtil.Assert(e.Unk5 == 0); ApiUtil.Assert(e.Unk8 == 0); s.End(); return(e); }
public static SoundEvent Serdes(SoundEvent e, ISerializer s) { e ??= new SoundEvent(); s.Begin(); e.Mode = s.EnumU8(nameof(Mode), e.Mode); e.SoundId = (SampleId)StoreIncremented.Serdes(nameof(SoundId), (byte)e.SoundId, s.UInt8); e.Unk3 = s.UInt8(nameof(Unk3), e.Unk3); e.Volume = s.UInt8(nameof(Volume), e.Volume); e.RestartProbability = s.UInt8(nameof(RestartProbability), e.RestartProbability); e.FrequencyOverride = s.UInt16(nameof(FrequencyOverride), e.FrequencyOverride); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); ApiUtil.Assert(e.Unk3 <= 100); ApiUtil.Assert(e.Volume <= 150); ApiUtil.Assert(e.RestartProbability <= 102); ApiUtil.Assert(e.Unk8 == 0); s.End(); return(e); }
public static MapData3D Serdes(MapData3D existing, ISerializer s, AssetInfo config) { var map = existing ?? new MapData3D((MapDataId)config.Id); s.Begin(); map.Flags = s.EnumU8(nameof(Flags), map.Flags); // 0 int npcCount = NpcCountTransform.Serdes("NpcCount", map.Npcs.Count, s.UInt8); // 1 var _ = s.UInt8("MapType", (byte)map.MapType); // 2 map.SongId = s.TransformEnumU8(nameof(SongId), map.SongId, Tweak <SongId> .Instance); // 3 map.Width = s.UInt8(nameof(Width), map.Width); // 4 map.Height = s.UInt8(nameof(Height), map.Height); // 5 map.LabDataId = s.EnumU8(nameof(LabDataId), map.LabDataId); // 6 map.CombatBackgroundId = s.EnumU8(nameof(CombatBackgroundId), map.CombatBackgroundId); // 7 TODO: Verify this is combat background map.PaletteId = (PaletteId)StoreIncremented.Serdes(nameof(PaletteId), (byte)map.PaletteId, s.UInt8); map.Sound = StoreIncremented.Serdes(nameof(Sound), map.Sound, s.UInt8); for (int i = 0; i < npcCount; i++) { map.Npcs.TryGetValue(i, out var npc); npc = MapNpc.Serdes(i, npc, s); if (npc.Id != null) { map.Npcs[i] = npc; } } s.Check(); map.Contents ??= new byte[map.Width * map.Height]; map.Floors ??= new byte[map.Width * map.Height]; map.Ceilings ??= new byte[map.Width * map.Height]; for (int i = 0; i < map.Width * map.Height; i++) { map.Contents[i] = s.UInt8(null, map.Contents[i]); map.Floors[i] = s.UInt8(null, map.Floors[i]); map.Ceilings[i] = s.UInt8(null, map.Ceilings[i]); } s.Check(); map.SerdesZones(s); if (s.Mode == SerializerMode.Reading && s.IsComplete() || s.Mode != SerializerMode.Reading && map.AutomapGraphics == null) { ApiUtil.Assert(map.Zones.Count == 0); return(map); } map.SerdesEvents(s); map.SerdesNpcWaypoints(s); map.SerdesAutomap(s); map.SerdesChains(s, 64); if (s.Mode == SerializerMode.Reading) { map.Unswizzle(); } s.End(); return(map); }
public static MapData2D Serdes(MapData2D existing, ISerializer s, AssetInfo config) { var startOffset = s.Offset; var map = existing ?? new MapData2D((MapDataId)config.Id); s.Begin(); map.Flags = s.EnumU8(nameof(Flags), map.Flags); // 0 int npcCount = s.Transform("NpcCount", map.Npcs.Count, s.UInt8, NpcCountTransform.Instance); // 1 var _ = s.UInt8("MapType", (byte)map.MapType); // 2 map.SongId = s.TransformEnumU8(nameof(SongId), map.SongId, Tweak <SongId> .Instance); // 3 map.Width = s.UInt8(nameof(Width), map.Width); // 4 map.Height = s.UInt8(nameof(Height), map.Height); // 5 map.TilesetId = (TilesetId)StoreIncremented.Serdes(nameof(TilesetId), (byte)map.TilesetId, s.UInt8); //6 map.CombatBackgroundId = s.EnumU8(nameof(CombatBackgroundId), map.CombatBackgroundId); // 7 map.PaletteId = (PaletteId)StoreIncremented.Serdes(nameof(PaletteId), (byte)map.PaletteId, s.UInt8); map.FrameRate = s.UInt8(nameof(FrameRate), map.FrameRate); //9 for (int i = 0; i < npcCount; i++) { map.Npcs.TryGetValue(i, out var npc); npc = MapNpc.Serdes(i, npc, s); if (npc.ObjectNumber != 0 || npc.Id != null) { map.Npcs[i] = npc; } } s.Check(); map.Underlay ??= new int[map.Width * map.Height]; map.Overlay ??= new int[map.Width * map.Height]; for (int i = 0; i < map.Width * map.Height; i++) { ushort underlay = (ushort)(map.Underlay[i] + 1); ushort overlay = (ushort)(map.Overlay[i] + 1); byte b1 = (byte)(overlay >> 4); byte b2 = (byte)(((overlay & 0xf) << 4) | ((underlay & 0xf00) >> 8)); byte b3 = (byte)(underlay & 0xff); b1 = s.UInt8(null, b1); b2 = s.UInt8(null, b2); b3 = s.UInt8(null, b3); map.Overlay[i] = (b1 << 4) + (b2 >> 4); map.Underlay[i] = ((b2 & 0x0F) << 8) + b3; } s.Check(); ApiUtil.Assert(s.Offset == startOffset + 10 + npcCount * MapNpc.SizeOnDisk + 3 * map.Width * map.Height); map.SerdesZones(s); map.SerdesEvents(s); map.SerdesNpcWaypoints(s); if (map.Events.Any()) { map.SerdesChains(s, 250); } if (s.Mode == SerializerMode.Reading) { map.Unswizzle(); } s.End(); return(map); }