public static FdsGame Import(string fdsFileName, byte[] rawRomData = null) { if (rawRomData == null) { rawRomData = File.ReadAllBytes(fdsFileName); } if (Encoding.ASCII.GetString(rawRomData, 0, 3) == "FDS") // header? cut it! { var fdsDataNoHeader = new byte[rawRomData.Length - 0x10]; Array.Copy(rawRomData, 0x10, fdsDataNoHeader, 0, fdsDataNoHeader.Length); rawRomData = fdsDataNoHeader; } var crc32 = CRC32(rawRomData); var code = GenerateCode(crc32, DefaultPrefix); var gamePath = Path.Combine(GamesDirectory, code); var fdsPath = Path.Combine(gamePath, code + ".fds"); Directory.CreateDirectory(gamePath); File.WriteAllBytes(fdsPath, rawRomData); var game = new FdsGame(gamePath, true); game.Name = Path.GetFileNameWithoutExtension(fdsFileName); game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim(); game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim(); game.Name = game.Name.Replace("_", " ").Replace(" ", " ").Trim(); game.FindCover(fdsFileName, Resources.blank_fds, crc32); game.Args = DefaultArgs; game.Save(); return(game); }
public static NesMiniApplication Import(string fileName, byte[] rawRomData = null) { var extension = Path.GetExtension(fileName).ToLower(); char prefixCode; string application; switch (extension) { // For some unusual NES ROM formats case ".fds": return(FdsGame.Import(fileName, rawRomData)); case ".nes": case ".unf": case ".unif": prefixCode = 'U'; application = "/bin/nes"; break; case ".desktop": return(ImportApp(fileName)); case ".gb": case ".gbc": prefixCode = 'C'; application = "/bin/gb"; break; case ".gba": prefixCode = 'A'; application = "/bin/gba"; break; case ".n64": case ".z64": case ".v64": prefixCode = 'F'; application = "/bin/n64"; break; case ".smc": prefixCode = 'E'; application = "/bin/snes"; break; case ".gen": case ".smd": prefixCode = 'G'; application = "/bin/md"; break; case ".sms": prefixCode = 'M'; application = "/bin/sms"; break; default: prefixCode = 'Z'; application = "/bin/path-to-your-app"; break; } if (rawRomData == null) { rawRomData = File.ReadAllBytes(fileName); } var crc32 = CRC32(rawRomData); var code = GenerateCode(crc32, prefixCode); var gamePath = Path.Combine(GamesDirectory, code); var romName = Path.GetFileName(fileName).Replace(" ", "_"); var romPath = Path.Combine(gamePath, romName); Directory.CreateDirectory(gamePath); File.WriteAllBytes(romPath, rawRomData); var game = new NesMiniApplication(gamePath, true); game.Name = Path.GetFileNameWithoutExtension(fileName); game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim(); game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim(); game.Name = game.Name.Replace("_", " ").Replace(" ", " ").Trim(); game.FindCover(fileName, Resources.blank, crc32); game.Command = string.Format("{0} /usr/share/games/nes/kachikachi/{1}/{2}", application, code, romName); game.Save(); return(game); }
public static NesMiniApplication Import(string fileName, byte[] rawRomData = null) { var extension = Path.GetExtension(fileName).ToLower(); char prefixCode; string application; Image defaultCover = Resources.blank_app; switch (extension) { // For some unusual NES ROM formats case ".fds": return(FdsGame.ImportFds(fileName, rawRomData)); case ".nes": case ".unf": case ".unif": prefixCode = NesUGame.Prefix; application = NesUGame.DefaultApp; defaultCover = NesUGame.DefaultCover; // Most of UNIF roms are pirated Famicom games break; case ".desktop": return(ImportApp(fileName)); case ".gb": prefixCode = GbGame.Prefix; application = GbGame.DefaultApp; defaultCover = GbGame.DefaultCover; break; case ".gbc": prefixCode = GbcGame.Prefix; application = GbcGame.DefaultApp; defaultCover = GbcGame.DefaultCover; break; case ".gba": prefixCode = GbaGame.Prefix; application = GbaGame.DefaultApp; defaultCover = GbaGame.DefaultCover; break; case ".n64": case ".z64": case ".v64": prefixCode = N64Game.Prefix; application = N64Game.DefaultApp; defaultCover = N64Game.DefaultCover; break; case ".sfc": case ".smc": prefixCode = SnesGame.Prefix; application = SnesGame.DefaultApp; defaultCover = SnesGame.DefaultCover; break; case ".gen": case ".md": case ".smd": prefixCode = GenesisGame.Prefix; application = GenesisGame.DefaultApp; defaultCover = GenesisGame.DefaultCover; break; case ".sms": prefixCode = SmsGame.Prefix; application = SmsGame.DefaultApp; defaultCover = SmsGame.DefaultCover; break; case ".pce": prefixCode = PceGame.Prefix; application = PceGame.DefaultApp; defaultCover = PceGame.DefaultCover; break; default: prefixCode = Prefix; if (extension.Length > 1) { application = string.Format("/bin/{0}", extension.Substring(1)); } else { application = DefaultApp; } defaultCover = DefaultCover; break; } if (rawRomData == null) { rawRomData = File.ReadAllBytes(fileName); } var crc32 = CRC32(rawRomData); var code = GenerateCode(crc32, prefixCode); var gamePath = Path.Combine(GamesDirectory, code); var romName = Regex.Replace(Path.GetFileName(fileName), @"[^A-Za-z0-9.-]", "_").Trim(); var romPath = Path.Combine(gamePath, romName); Directory.CreateDirectory(gamePath); File.WriteAllBytes(romPath, rawRomData); var game = new NesMiniApplication(gamePath, true); game.Name = Path.GetFileNameWithoutExtension(fileName); game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim(); game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim(); game.Name = game.Name.Replace("_", " ").Replace(" ", " ").Trim(); game.FindCover(fileName, defaultCover, crc32); game.Command = string.Format("{0} /usr/share/games/nes/kachikachi/{1}/{2}", application, code, romName); game.Save(); return(NesMiniApplication.FromDirectory(gamePath)); }
public static FdsGame Import(string fdsFileName, byte[] rawRomData = null) { if (rawRomData == null) { rawRomData = File.ReadAllBytes(fdsFileName); } var crc32 = CRC32(rawRomData); var code = GenerateCode(crc32, prefixCode); var gamePath = Path.Combine(GamesDirectory, code); var fdsPath = Path.Combine(gamePath, code + ".fds"); Directory.CreateDirectory(gamePath); File.WriteAllBytes(fdsPath, rawRomData); var game = new FdsGame(gamePath, true); game.Name = Path.GetFileNameWithoutExtension(fdsFileName); game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim(); game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim(); game.Name = game.Name.Replace("_", " ").Replace(" ", " ") /*.Replace(", The", "")*/.Trim(); // Trying to find cover file Image cover = null; if (!string.IsNullOrEmpty(fdsFileName)) { var imagePath = Path.Combine(Path.GetDirectoryName(fdsFileName), Path.GetFileNameWithoutExtension(fdsFileName) + ".png"); if (File.Exists(imagePath)) { cover = LoadBitmap(imagePath); } imagePath = Path.Combine(Path.GetDirectoryName(fdsFileName), Path.GetFileNameWithoutExtension(fdsFileName) + ".jpg"); if (File.Exists(imagePath)) { cover = LoadBitmap(imagePath); } var artDirectory = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "art"); Directory.CreateDirectory(artDirectory); imagePath = Path.Combine(artDirectory, Path.GetFileNameWithoutExtension(fdsFileName) + ".png"); if (File.Exists(imagePath)) { cover = LoadBitmap(imagePath); } imagePath = Path.Combine(artDirectory, Path.GetFileNameWithoutExtension(fdsFileName) + ".jpg"); if (File.Exists(imagePath)) { cover = LoadBitmap(imagePath); } var covers = Directory.GetFiles(artDirectory, string.Format("{0:X8}*.*", crc32), SearchOption.AllDirectories); if (covers.Length > 0) { cover = LoadBitmap(covers[0]); } } if (cover == null) { cover = Resources.blank_fds; } game.Image = cover; game.Save(); return(game); }