Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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);
        }