diff --git a/Shockky/Resources/Config.cs b/Shockky/Resources/Config.cs index cc21ca6..b683884 100644 --- a/Shockky/Resources/Config.cs +++ b/Shockky/Resources/Config.cs @@ -1,4 +1,5 @@ -using System.Drawing; +using System.Diagnostics; +using System.Drawing; using Shockky.IO; using Shockky.Resources.Cast; @@ -126,6 +127,8 @@ public Config(ref ShockwaveReader input, ReaderContext context) Field5E = input.ReadInt16BigEndian(); Field60 = input.ReadInt16BigEndian(); Field62 = input.ReadInt16BigEndian(); + + Debug.Assert(Checksum == CalculateChecksum(), "Config checksum mismatch!"); } public uint CalculateChecksum() @@ -157,7 +160,7 @@ public uint CalculateChecksum() checksum += (uint)(ScoreUsedChannelsMask >> 32) + 23; checksum += (uint)(ScoreUsedChannelsMask & 0xFFFFFFFF) + 24; checksum *= (uint)Field34 + 25; - checksum *= (uint)Tempo + 26; + checksum += (uint)Tempo + 26; checksum *= (uint)Platform + 27; checksum *= (uint)((SaveSeed * 0xE06) + 0xFFF450000); // - 0xBB000 checksum ^= 0x72616C66; diff --git a/Shockky/Resources/IResource.cs b/Shockky/Resources/IResource.cs index 43dec4f..1883c1f 100644 --- a/Shockky/Resources/IResource.cs +++ b/Shockky/Resources/IResource.cs @@ -22,8 +22,8 @@ public static IResource Read(scoped ref ShockwaveReader input, ReaderContext con OsType.Fcdr => new FileCompressionTypes(ref bodyInput, context), OsType.ABMP => new AfterburnerMap(ref bodyInput, context), - OsType.imap => new IndexMap(ref bodyInput, context), - OsType.mmap => new MemoryMap(ref bodyInput, context), + OsType.imap => new IndexMap(ref bodyInput), + OsType.mmap => new MemoryMap(ref bodyInput), OsType.KEYPtr => new KeyMap(ref bodyInput, context), OsType.VWCF or OsType.DRCF => new Config(ref bodyInput, context), diff --git a/Shockky/Resources/IndexMap.cs b/Shockky/Resources/IndexMap.cs index 2e4a1d9..150b3ce 100644 --- a/Shockky/Resources/IndexMap.cs +++ b/Shockky/Resources/IndexMap.cs @@ -15,7 +15,7 @@ public sealed class IndexMap : IShockwaveItem, IResource public int Field10 { get; set; } public int Field14 { get; set; } - public IndexMap(ref ShockwaveReader input, ReaderContext context) + public IndexMap(ref ShockwaveReader input) { int memoryMapCount = input.ReadInt32BigEndian(); Debug.Assert(memoryMapCount == 1); diff --git a/Shockky/Resources/MemoryMap.cs b/Shockky/Resources/MemoryMap.cs index 5b5fb73..b7b8682 100644 --- a/Shockky/Resources/MemoryMap.cs +++ b/Shockky/Resources/MemoryMap.cs @@ -17,7 +17,7 @@ public sealed class MemoryMap : IShockwaveItem, IResource public ResourceEntry this[int index] => Entries[index]; - public MemoryMap(ref ShockwaveReader input, ReaderContext context) + public MemoryMap(ref ShockwaveReader input) { input.ReadInt16BigEndian(); input.ReadInt16BigEndian(); @@ -31,7 +31,7 @@ public MemoryMap(ref ShockwaveReader input, ReaderContext context) for (int i = 0; i < Entries.Length; i++) { - Entries[i] = new ResourceEntry(ref input, context); + Entries[i] = new ResourceEntry(ref input); } } diff --git a/Shockky/Resources/ResourceEntry.cs b/Shockky/Resources/ResourceEntry.cs index a427b76..fc04dbc 100644 --- a/Shockky/Resources/ResourceEntry.cs +++ b/Shockky/Resources/ResourceEntry.cs @@ -14,7 +14,7 @@ public sealed class ResourceEntry : IShockwaveItem public short Unknown { get; set; } public int Link { get; set; } - public ResourceEntry(ref ShockwaveReader input, ReaderContext context) + public ResourceEntry(ref ShockwaveReader input) { Kind = (OsType)input.ReadInt32BigEndian(); Length = input.ReadInt32BigEndian();