/// <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); } }