Exemple #1
0
 public EncoderImpl(GameSpecificData data)
 {
     _data = data;
 }
Exemple #2
0
 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;
        }