Example #1
0
        /// <summary>
        /// This creates a GameType instance by checking the current ROM
        /// </summary>
        public static Game FromROM(DataManager ROM)
        {
            byte[] id_data = Core.ReadData(new Pointer(ID_ADDRESS), 0x12);
            String id      = new String(Encoding.ASCII.GetChars(id_data));

            GameVersion version = 0;
            char        game    = ' ';

            foreach (GameVersion region in Enum.GetValues(typeof(GameVersion)))
            {
                if (region == GameVersion.JAP)
                {
                    if (id.Equals(FE6.GameID(region)))
                    {
                        game = '6'; version = region; break;
                    }
                }
                if (id.Equals(FE7.GameID(region)))
                {
                    game = '7'; version = region; break;
                }
                if (id.Equals(FE8.GameID(region)))
                {
                    game = '8'; version = region; break;
                }
            }

            bool clean;
            bool expanded;

            switch (game)
            {
            case '6':
                expanded = (Core.CurrentROMSize == FE6.DefaultFileSize(version));
                clean    = (CRC32.GetChecksum(ROM.FileData) == FE6.Checksum(version));
                break;

            case '7':
                expanded = (Core.CurrentROMSize == FE7.DefaultFileSize(version));
                clean    = (CRC32.GetChecksum(ROM.FileData) == FE7.Checksum(version));
                break;

            case '8':
                expanded = (Core.CurrentROMSize == FE8.DefaultFileSize(version));
                clean    = (CRC32.GetChecksum(ROM.FileData) == FE8.Checksum(version));
                break;

            default: throw new Exception("The Fire Emblem game ID could not be identified.");
            }

            switch (game)
            {
            case '6': return(new FE6(version, clean, expanded));

            case '7': return(new FE7(version, clean, expanded));

            case '8': return(new FE8(version, clean, expanded));

            default: return(null);
            }
        }