private static void ExportBlock(SCBlock block, BinaryWriter bw, int blockIndex, SCBlockExportOption option) { if (option.HasFlagFast(SCBlockExportOption.DataOnly) && block.Data.Length == 0) { return; } if (option.HasFlagFast(SCBlockExportOption.FakeHeader)) { bw.Write($"BLOCK{blockIndex:0000} {block.Key:X8}"); } if (option.HasFlagFast(SCBlockExportOption.Key)) { bw.Write(block.Key); } if (option.HasFlagFast(SCBlockExportOption.TypeInfo)) { bw.Write((byte)block.Type); bw.Write((byte)block.SubType); } bw.Write(block.Data); }
public Zukan8(SAV8SWSH sav, SCBlock galar, SCBlock rigel1, SCBlock rigel2) : base(sav, 0) { Galar = galar; Rigel1 = rigel1; Rigel2 = rigel2; var revision = GetRevision(); DexLookup = GetDexLookup(PersonalTable.SWSH, revision); }
public static string GetBlockFileNameWithoutExtension(SCBlock block) { var key = block.Key; var name = $"{key:X8}"; if (block.HasValue()) { name += $" {block.GetValue()}"; } return(name); }
private const int BlockDataRatioEstimate2 = 555; // bytes per block, on average (stingy) private static IReadOnlyList <SCBlock> ReadBlocks(byte[] data) { var result = new List <SCBlock>(data.Length / BlockDataRatioEstimate2); int offset = 0; while (offset < data.Length - SIZE_HASH) { var block = SCBlock.ReadFromOffset(data, ref offset); result.Add(block); } return(result); }
/// <summary> /// Create a blank block array using the provided <see cref="arr"/> definition. /// </summary> /// <param name="arr">Block specification tuples (key, size)</param> /// <returns>List of blocks</returns> private static SCBlock[] GetBlankBlockArray(IReadOnlyList <uint> arr) { var blocks = new SCBlock[arr.Count / 2]; for (int i = 0; i < blocks.Length; i++) { int index = i * 2; var key = arr[index]; var length = (int)arr[index + 1]; var dummy = new byte[length]; blocks[i] = new SCBlock(key, SCTypeCode.None, dummy); } return(blocks); }
private static SCBlock[] GetBlankBlockArray(IReadOnlyList <uint> arr) { var blocks = new SCBlock[arr.Count / 2]; for (int i = 0; i < blocks.Length; i++) { int index = i * 2; blocks[i] = new SCBlock { Key = arr[index], Data = new byte[(int)arr[index + 1]] }; } return(blocks); }
private static SCBlock[] GetBlankBlockArray(IReadOnlyList <int> arr, int totalBlocks) { var blocks = new SCBlock[totalBlocks]; for (int i = 0; i < blocks.Length; i++) { blocks[i] = new SCBlock { Data = Array.Empty <byte>() } } ; for (int i = 0; i < arr.Count; i += 2) { int index = arr[i]; int length = arr[i + 1]; blocks[index].Data = new byte[length]; } return(blocks); }
public static string GetBlockSummary(SCBlock b) { var sb = new StringBuilder(); sb.Append("Key: ").AppendFormat("{0:X8}", b.Key).AppendLine(); sb.Append("Type: ").Append(b.Type).AppendLine(); if (b.Data.Length != 0) { sb.Append("Length: ").AppendFormat("{0:X8}", b.Data.Length).AppendLine(); } if (b.SubType != 0) { sb.Append("SubType: ").Append(b.SubType).AppendLine(); } else if (b.HasValue()) { sb.Append("Value: ").Append(b.GetValue()).AppendLine(); } return(sb.ToString()); }
public Record8(SAV8SWSH sav, SCBlock block, IReadOnlyList <byte> maxes) : base(sav, block.Data) =>
public BoxLayout8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public HallOfFameTime8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { Debug.Assert(Data.Length == 8); }
public MyStatus8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public PlayTime8(SaveFile sav, SCBlock block) : base(sav, block.Data) { }
public Daycare8(SaveFile sav, SCBlock block) : base(sav, block.Data) { }
public RaidSpawnList8(SaveFile sav, SCBlock block) : base(sav, block.Data) { }
public Misc8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public EventWork8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public FieldMoveModelSave8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public Record8(SaveFile sav, SCBlock block, IReadOnlyList <byte> maxes) : base(sav, block.Data) =>
public RaidSpawnList8(SaveFile sav, SCBlock block, int legal) : base(sav, block.Data) { CountAll = block.Data.Length / RaidSpawnDetail.SIZE; CountUsed = legal; }
public Situation8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public FashionUnlock8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public MyItem8(SaveFile SAV, SCBlock block) : base(SAV, block.Data) { }
public Daycare8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public Zukan8(SAV8SWSH sav, SCBlock block) : base(sav, 0) => Block = block;
public FashionUnlock8(SaveFile sav, SCBlock block) : base(sav, block.Data) { }
public TrainerCard8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public TitleScreen8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public TeamIndexes8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }
public PlayTime8(SAV8SWSH sav, SCBlock block) : base(sav, block.Data) { }