Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- var path = @"D:\bank.bin";
- var data = File.ReadAllBytes(path);
- int ofs0 = 0x1BE3C0;
- int ofsK = 0x1BBE48;
- int len0 = 0x130;
- int lenK = ofs0-ofsK;
- //Console.WriteLine("Output: Table 0");
- //spitTable(data, ofs0, len0);
- var E = GetTable(data, ofs0, len0).ToArray();
- //Console.WriteLine("Output: Table K");
- //spitTable(data, ofsK, lenK);
- var K = GetTable(data, ofsK, lenK).ToArray();
- //Console.WriteLine("Verifying Tables");
- foreach (var z in verifyList(K))
- Console.WriteLine(z);
- }
- private IEnumerable<string> verifyList(KeyValuePair<ushort, ushort>[] K)
- {
- var enc = StringConverter.GSC2U_KOR; // reference PKHeX.Core and make this property public
- foreach (var kv in K)
- {
- var k = kv.Key;
- var t = k >> 8;
- byte v = (byte)k;
- char val = (char)kv.Value;
- var table = enc[t];
- if (!table.TryGetValue(v, out string pkhex))
- yield return $"Key not in PKHeX: {k:X3} = {val} (0x{(ushort)val:X4})";
- else if (pkhex[0] != val)
- yield return $"{k:X3} bad; {val} (0x{(ushort)val:X4}) != {(char)pkhex[0]} (pkh)";
- }
- }
- private void spitTable(byte[] data, int ofs, int len)
- {
- var bytes = data.Skip(ofs).Take(len).ToArray();
- for (int i = 0; i < bytes.Length; i+=4)
- {
- ushort a = BitConverter.ToUInt16(bytes, i + 0);
- ushort b = BitConverter.ToUInt16(bytes, i + 2);
- if (BitConverter.ToUInt32(bytes, 0) == 0)
- continue;
- Console.WriteLine($"{b:X2} -> {(char)a}");
- }
- }
- private IEnumerable<KeyValuePair<ushort,ushort>> GetTable(byte[] data, int ofs, int len)
- {
- var bytes = data.Skip(ofs).Take(len).ToArray();
- for (int i = 0; i < bytes.Length; i+=4)
- {
- ushort value = BitConverter.ToUInt16(bytes, i + 0);
- ushort key = BitConverter.ToUInt16(bytes, i + 2);
- if (BitConverter.ToUInt32(bytes, i) == 0)
- continue;
- yield return new KeyValuePair<ushort, ushort>(key, value);
- }
- }
Add Comment
Please, Sign In to add comment