public EncoderImpl(GameSpecificData data) { _data = data; }
public SC3StringDecoder(SC3Game game) { _data = GameSpecificData.For(game); }
public void LoadROM(string path) { rom.OpenROM(path); data = GameSpecificData.GetData(rom.GameCode); memoryManager = new GBAMemoryManager(); bool ROMdataFound = false; if (File.Exists(Path.ChangeExtension(path, ".xml"))) { } else { ROMdataFound = FEditor_shit.FEditorSucks.HasFooter(rom); if (ROMdataFound) { FEditor_shit.FEditorSucks.RemoveAndReadFooter(rom, memoryManager); } } if (rom.Length < GBAROM.MaxRomSize) { memoryManager.AddManagedSpace(rom.Length, GBAROM.MaxRomSize - rom.Length); } else if (rom.Length > GBAROM.MaxRomSize) { throw new IOException("ROM is larger than allowed."); } if (!ROMdataFound) { //Check if ROM hasn't been edited. If hasn't, add default free space. uint fileCRC32; using (BinaryReader reader = new BinaryReader(rom.GetStream())) { fileCRC32 = CRC32.CalculateCRC32(reader); } if (fileCRC32 == data.DefaultCRC32) { foreach (var item in data.DefaultFreeSpace) { memoryManager.AddManagedSpace(item.Key, item.Value); } } } int start = rom.ReadPointer(data.TextPointerTableOffset); LoadHuffmanTree( rom.ReadPointer(data.HuffmanTreePtrOffset), rom.ReadPointer(data.HuffmanTreeEndPtrOffset)); LoadRawTextOffsets(data.TextPointerTableOffset, data.TextPointerTableLength); ui.MaxIndex = textPointers.Length - 1; }