From 5a37c1043bd858dbbc202f74e7bceff1d9a660a7 Mon Sep 17 00:00:00 2001 From: Rebecca Wallander Date: Sun, 25 Feb 2018 13:09:02 +0100 Subject: [PATCH] Add higan runner. --- lutris/runners/__init__.py | 2 +- lutris/runners/higan.py | 94 ++++++++++++++++++++++ share/lutris/media/runner_icons/higan.png | Bin 0 -> 2992 bytes 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 lutris/runners/higan.py create mode 100644 share/lutris/media/runner_icons/higan.png diff --git a/lutris/runners/__init__.py b/lutris/runners/__init__.py index 5254d7d22..93a056501 100644 --- a/lutris/runners/__init__.py +++ b/lutris/runners/__init__.py @@ -7,7 +7,7 @@ __all__ = ( # Microsoft based "wine", "winesteam", "dosbox", # Multi-system - "mame", "mess", "mednafen", "scummvm", "residualvm", "libretro", "ags", + "mame", "mess", "mednafen", "scummvm", "residualvm", "libretro", "ags", "higan", # Commdore "fsuae", "vice", # Atari diff --git a/lutris/runners/higan.py b/lutris/runners/higan.py new file mode 100644 index 000000000..1ba2bfe57 --- /dev/null +++ b/lutris/runners/higan.py @@ -0,0 +1,94 @@ +from lutris.runners.runner import Runner +from os.path import expanduser + + +class higan(Runner): + human_name = "higan" + description = ("Multi-system emulator including NES, GB(A), PC Engine " + "support.") + platforms = [ + 'Nintendo Game Boy (Color)', + 'Nintendo Game Boy Advance', + 'Sega Game Gear', + 'Sega Genesis/Mega Drive', + 'Sega Master System', + 'Nintendo NES', + 'NEC PC Engine TurboGrafx-16', + 'NEC PC Engine SuperGrafx', + 'Nintendo SNES', + 'Bandai WonderSwan', + ] + runner_executable = "higan/bin/higan" + game_options = [ + { + "option": "main_dir", + "type": "directory_chooser", + "label": "ROM directory", + 'help': ("The game data directory. \n" + "higan uses its own \"Game Pak\" system. Gamepaks are " + "an attempt to simulate physical Nintendo Game Paks in digital form. " + "The idea is that for each game, one folder acts as a gamepak, " + "and contains all data that is specific to said game.") + }, + { + "option": "subgame1", + "type": "directory_chooser", + "label": "Secondary ROM directory", + "advanced": True, + "help": ("The game data directory for the secondary cart slot" + "on either the Sufami Turbo, Satellaview or Super Game Boy.") + }, + { + "option": "subgame2", + "type": "directory_chooser", + "label": "Tertiary ROM directory", + "advanced": True, + "help": "The game data directory for the tertiary cart slot on the Sufami Turbo." + } + ] + runner_options = [ + { + "option": "fs", + "type": "bool", + "label": "Fullscreen", + "default": False, + }, + { + "option": "region", + "type": "choice", + "label": "Region", + "choices": [('Auto', 'auto'), + ('NTSC-U', 'NTSC-U'), + ('PAL', 'PAL'), + ('NTSC-J', 'NTSC-J')], + "default": "auto", + "help": "The region of the console." + } + ] + + def play(self): + + rom = self.game_config.get("main_dir") or '' + fullscreen = self.runner_config.get("fs") or False + region = self.runner_config.get("region") or 'auto' + subgame1 = self.game_config.get("subgame1") or '' + subgame2 = self.game_config.get("subgame2") or '' + + command = [self.get_executable()] + + if fullscreen: + command.append('--fullscreen') + + if region != 'auto': + command.append(region + '|' + expanduser(rom)) + else: + command.append(expanduser(rom)) + + if subgame1: + command.append(expanduser(subgame1)) + if subgame2: + command.append(expanduser(subgame2)) + + launch_info = {'command': command} + + return launch_info diff --git a/share/lutris/media/runner_icons/higan.png b/share/lutris/media/runner_icons/higan.png new file mode 100644 index 0000000000000000000000000000000000000000..5b448a49be1245e49c85f779537bd35ed2dca21d GIT binary patch literal 2992 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 mHAC|0?2y>+`Qz#TdHXl5G0oO2D0xi)0000