diff -Nru fs-uae-arcade-2.9.5/arcade/arcade_main.py fs-uae-arcade-2.9.6~dev/arcade/arcade_main.py --- fs-uae-arcade-2.9.5/arcade/arcade_main.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/arcade/arcade_main.py 2017-05-25 10:07:54.000000000 +0000 @@ -2,6 +2,7 @@ from arcade.glui.imageloader import ImageLoader from arcade.ui.arcade_window import ArcadeWindow, check_argument, fullscreen, \ maximized +from fsbc.settings import Settings from fsbc.system import macosx from .gnome3 import running_in_gnome_3, handle_gnome_extensions @@ -55,6 +56,8 @@ # We want a normal window. pass + Settings.instance().set("__arcade", "1") + # if windows: # pass # elif macosx: diff -Nru fs-uae-arcade-2.9.5/arcade/glui/gamecenterrunner.py fs-uae-arcade-2.9.6~dev/arcade/glui/gamecenterrunner.py --- fs-uae-arcade-2.9.5/arcade/glui/gamecenterrunner.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/arcade/glui/gamecenterrunner.py 2017-05-25 10:07:54.000000000 +0000 @@ -2,6 +2,7 @@ import threading from arcade.glui.state import State +from fsbc.settings import Settings from fsui.qt import QCursor @@ -77,6 +78,16 @@ # noinspection PyCallByClass,PyTypeChecker QCursor.setPos(x, y) + # cursor_x = Settings.instance().get("__cursor_x") + # cursor_y = Settings.instance().get("__cursor_y") + # try: + # cursor_x = int(cursor_x) + # cursor_y = int(cursor_y) + # except ValueError: + # pass + # else: + # QCursor.setPos(cursor_x, cursor_y) + threading.Thread(target=self._run_thread, name="GameRunnerRunThread").start() diff -Nru fs-uae-arcade-2.9.5/arcade/glui/launchmenu.py fs-uae-arcade-2.9.6~dev/arcade/glui/launchmenu.py --- fs-uae-arcade-2.9.5/arcade/glui/launchmenu.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/arcade/glui/launchmenu.py 2017-05-25 10:07:54.000000000 +0000 @@ -18,7 +18,7 @@ STATE_ABORTING = 5 STATE_ABORTED = 6 -FADE_TIME = 1.0 +FADE_TIME = 0.5 class LaunchMenu(Menu): diff -Nru fs-uae-arcade-2.9.5/arcade/glui/window.py fs-uae-arcade-2.9.6~dev/arcade/glui/window.py --- fs-uae-arcade-2.9.5/arcade/glui/window.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/arcade/glui/window.py 2017-05-25 10:07:54.000000000 +0000 @@ -1408,8 +1408,7 @@ State.get().fade_splash = True State.get().fade_start = State.get().time - State.get().fade_end = State.get().time + 2.0 - # Use 2.0 here to force full black for 1 second + State.get().fade_end = State.get().time + 0.5 State.get().fade_from = (0.0, 0.0, 0.0, 2.0) State.get().fade_to = (0.0, 0.0, 0.0, 0.0) diff -Nru fs-uae-arcade-2.9.5/arcade/ui/arcade_window.py fs-uae-arcade-2.9.6~dev/arcade/ui/arcade_window.py --- fs-uae-arcade-2.9.5/arcade/ui/arcade_window.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/arcade/ui/arcade_window.py 2017-05-25 10:07:54.000000000 +0000 @@ -38,7 +38,7 @@ value = check_argument("fullscreen") if not value: value = Settings.instance().get("arcade_fullscreen") - return value == "1" + return value != "0" def maximized(): @@ -126,7 +126,10 @@ def show_auto(self): if fullscreen(): - self.set_fullscreen(True, screen_geometry()) + geometry = screen_geometry() + self.set_fullscreen(True, geometry) + Settings.instance().set("__cursor_x", geometry[2]) + Settings.instance().set("__cursor_y", geometry[3]) elif maximized(): x, y, w, h = screen_geometry() self.set_maximized(True, (x, y, 960, 540)) diff -Nru fs-uae-arcade-2.9.5/debian/changelog fs-uae-arcade-2.9.6~dev/debian/changelog --- fs-uae-arcade-2.9.5/debian/changelog 2013-07-24 18:33:00.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/debian/changelog 2013-07-24 18:33:00.000000000 +0000 @@ -1,4 +1,4 @@ -fs-uae-arcade (2.9.5-0yakkety) yakkety; urgency=low +fs-uae-arcade (2.9.6~dev-0yakkety) yakkety; urgency=low * Dummy changelog entry diff -Nru fs-uae-arcade-2.9.5/dist/macosx/Info.plist fs-uae-arcade-2.9.6~dev/dist/macosx/Info.plist --- fs-uae-arcade-2.9.5/dist/macosx/Info.plist 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/dist/macosx/Info.plist 2017-05-25 10:07:53.000000000 +0000 @@ -19,11 +19,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.9.5 + 2.9.6 CFBundleSignature ???? CFBundleVersion - 2.9.5 + 2.9.6 LSHasLocalizedDisplayName LSMinimumSystemVersion diff -Nru fs-uae-arcade-2.9.5/fsboot/__init__.py fs-uae-arcade-2.9.6~dev/fsboot/__init__.py --- fs-uae-arcade-2.9.5/fsboot/__init__.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsboot/__init__.py 2017-05-25 10:07:53.000000000 +0000 @@ -37,6 +37,9 @@ if "--workspace" in sys.argv: # Hack set("fws", "1") +if "--openretro" in sys.argv: + # Hack + set("openretro", "1") if "--logging" in sys.argv: setup_logging() sys.argv.remove("--logging") @@ -205,7 +208,11 @@ @functools.lru_cache() def custom_path(name): - for app_name in ["fs-uae-launcher", "fs-uae"]: + if get("openretro") == "1": + app_names = ["openretro"] + else: + app_names = ["fs-uae-launcher", "fs-uae"] + for app_name in app_names: key_path = os.path.join(app_config_dir(app_name), name) logger.debug("Checking %s", repr(key_path)) if os.path.exists(key_path): @@ -238,18 +245,29 @@ if path: return path - logger.debug("Checking FS_UAE_BASE_DIR") - path = os.environ.get("FS_UAE_BASE_DIR", "") - if path: - logger.debug("Base directory via FS_UAE_BASE_DIR: %s", repr(path)) - return path + if get("openretro") == "1": + logger.debug("Checking OPENRETRO_BASE_DIR") + path = os.environ.get("OPENRETRO_BASE_DIR", "") + if path: + logger.debug("Base directory via OPENRETRO_BASE_DIR: %s", repr(path)) + return path + + else: + logger.debug("Checking FS_UAE_BASE_DIR") + path = os.environ.get("FS_UAE_BASE_DIR", "") + if path: + logger.debug("Base directory via FS_UAE_BASE_DIR: %s", repr(path)) + return path path = custom_path("base-dir") if path: logger.debug("Base directory via custom path config: %s", repr(path)) return path - path = os.path.join(documents_dir(True), "FS-UAE") + if get("openretro") == "1": + path = os.path.join(documents_dir(True), "OpenRetro") + else: + path = os.path.join(documents_dir(True), "FS-UAE") if not os.path.exists(path): os.makedirs(path) # FIXME: normalize / case-normalize base dir? diff -Nru fs-uae-arcade-2.9.5/fsgs/amiga/fsuaeamigadriver.py fs-uae-arcade-2.9.6~dev/fsgs/amiga/fsuaeamigadriver.py --- fs-uae-arcade-2.9.5/fsgs/amiga/fsuaeamigadriver.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/amiga/fsuaeamigadriver.py 2017-05-25 10:07:53.000000000 +0000 @@ -83,6 +83,13 @@ if Settings.instance()["__fullscreen_mode"]: self.launch_handler.config["fullscreen_mode"] = \ Settings.instance()["__fullscreen_mode"] + if Settings.instance()["__arcade"]: + # Remove window border when launched from FS-UAE Arcade in + # order to reduce flickering + self.launch_handler.config["window_border"] = "0" + # Set fade out duration to 500, if not already specified. + if not self.launch_handler.config.get("fade_out_duration", ""): + self.launch_handler.config["fade_out_duration"] = "500" else: self.launch_handler.config["fullscreen"] = "0" diff -Nru fs-uae-arcade-2.9.5/fsgs/amiga/launchhandler.py fs-uae-arcade-2.9.6~dev/fsgs/amiga/launchhandler.py --- fs-uae-arcade-2.9.5/fsgs/amiga/launchhandler.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/amiga/launchhandler.py 2017-05-25 10:07:53.000000000 +0000 @@ -90,6 +90,15 @@ self.config["flash_memory_dir"] = "" self.change_handler = GameChangeHandler(self.temp_dir) + self.config["cdroms_dir"] = FSGSDirectories.get_cdroms_dir() + self.config[ + "configurations_dir"] = FSGSDirectories.get_configurations_dir() + self.config["controllers_dir"] = FSGSDirectories.get_controllers_dir() + self.config["hard_drives_dir"] = FSGSDirectories.get_hard_drives_dir() + self.config["kickstarts_dir"] = FSGSDirectories.get_kickstarts_dir() + self.config["save_states_dir"] = FSGSDirectories.get_save_states_dir() + self.config["themes_dir"] = FSGSDirectories.get_themes_dir() + self.prepare_roms() if self.stop_flag: return @@ -711,12 +720,11 @@ print("[WHDLOAD] copy_whdload_files, dest_dir = ", dest_dir) whdload_dir = "" - slave = whdload_args.split(" ", 1)[0] - slave = slave.lower() + slave_original_name = whdload_args.split(" ", 1)[0] + slave = slave_original_name.lower() found_slave = False for dir_path, dir_names, file_names in os.walk(dest_dir): for name in file_names: - # print(name, slave) if name.lower() == slave: print("[WHDLOAD] Found", name) found_slave = True @@ -732,8 +740,8 @@ break if not found_slave: raise Exception( - "Did not find the specified WHDLoad slave. " - "Check the WHDLoad arguments") + "Did not find the specified WHDLoad slave {}. " + "Check the WHDLoad arguments".format(repr(slave_original_name))) print("[WHDLOAD] Slave directory:", repr(whdload_dir)) print("[WHDLOAD] Slave arguments:", whdload_args) diff -Nru fs-uae-arcade-2.9.5/fsgs/amiga/whdload.py fs-uae-arcade-2.9.6~dev/fsgs/amiga/whdload.py --- fs-uae-arcade-2.9.5/fsgs/amiga/whdload.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/amiga/whdload.py 2017-05-25 10:07:53.000000000 +0000 @@ -338,6 +338,7 @@ "DGenerationCD32/DGenerationCD32.info", "EmeraldMine2/EmeraldMine2.info", "Entity/Entity.info", + "EyeOfTheStorm/EyeOfTheStorm.info", "Fuzzball/Fuzzball.info", "Genesia/Genesia.info", "GenesiaFr/GenesiaFr.info", diff -Nru fs-uae-arcade-2.9.5/fsgs/drivers/gamedriver.py fs-uae-arcade-2.9.6~dev/fsgs/drivers/gamedriver.py --- fs-uae-arcade-2.9.5/fsgs/drivers/gamedriver.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/drivers/gamedriver.py 2017-05-25 10:07:53.000000000 +0000 @@ -7,6 +7,7 @@ import fsboot from fsbc.application import Application +from fsbc.resources import Resources from fsbc.settings import Settings from fsbc.system import System from fsbc.task import current_task @@ -50,11 +51,19 @@ self.temp_root = TemporaryItem( root=None, prefix="fsgs-", suffix="tmp", directory=True) - # Default current working directory for the emulator. + # # Default current working directory for the emulator. self.cwd = self.temp_dir("cwd") - # Fake home directory for the emulator. + # # Fake home directory for the emulator. self.home = self.temp_dir("home") + self.home._path = os.path.join(FSGSDirectories.get_cache_dir(), "Home") + if not os.path.exists(self.home.path): + os.makedirs(self.home.path) + self.cwd._path = self.home._path + # self.cwd._path = os.path.join(self.home._path, "cwd") + # if not os.path.exists(self.cwd.path): + # os.makedirs(self.cwd.path) + # Deprecated compatibility name self.args = self.emulator.args # Deprecated compatibility name @@ -160,7 +169,7 @@ NO_STRETCHING = "0" STRETCH_FILL_SCREEN = "1" STRETCH_ASPECT = "aspect" - DEFAULT_STRETCHING = STRETCH_FILL_SCREEN + DEFAULT_STRETCHING = STRETCH_ASPECT def stretching(self): if self.options[Option.STRETCH] == self.NO_STRETCHING: @@ -545,14 +554,24 @@ env["FSGS_WINDOW_TITLE"] = self._model_name env.update(self.env) - env["HOME"] = self.home.path + if not self.emulator.allow_home_access: + env["HOME"] = self.home.path if not self._allow_gsync: # DOSBox-FS and Fuse-FS does not work nicely with G-SYNC yet. # Enabling G-SYNC causes stuttering. + # Update: Should work fine with DOSBox-FS now... env["__GL_GSYNC_ALLOWED"] = "0" # Disable V-Sync env["__GL_SYNC_TO_VBLANK"] = "0" + + # Make sure we are allowed to flip buff ers faster than the screen + # refresh rate, important for e.g. DOSBox @70Hz. + # https://dri.freedesktop.org/wiki/ConfigurationOptions/ + # 1 = Application preference, default interval 0 + # Update: Not needed when emulators explicitly set swap interval 0. + # env["vblank_mode"] = "1" + self.update_environment_with_centering_info(env) def update_environment_with_centering_info(self, env): @@ -596,6 +615,16 @@ # print("window position", env["SDL_VIDEO_WINDOW_POS"]) # os.environ["SDL_VIDEO_WINDOW_POS"] = "{0},{1}".format(x, y) + def prepare_emulator_skin(self, env): + path = self.temp_file("left.png").path + with open(path, "wb") as f: + f.write(Resources("fsgs").stream("res/emu/left.png").read()) + env["FSGS_SKIN_LEFT"] = path + path = self.temp_file("right.png").path + with open(path, "wb") as f: + f.write(Resources("fsgs").stream("res/emu/right.png").read()) + env["FSGS_SKIN_RIGHT"] = path + def start_emulator( self, emulator, args=None, env_vars=None, executable=None, cwd=None): @@ -615,7 +644,6 @@ args = [] args.extend(self.args) - print(repr(args)) if "SDL_VIDEODRIVER" in os.environ: print("SDL_VIDEODRIVER was present in environment, removing!") @@ -624,9 +652,16 @@ env = os.environ.copy() FSUAE.add_environment_from_settings(env) self.update_environment(env) + self.prepare_emulator_skin(env) if env_vars: env.update(env_vars) - print(env) + print("") + for key in sorted(env.keys()): + print("[ENV]", key, ":", repr(env[key])) + print("") + for arg in args: + print("[ARG]", repr(arg)) + print("") kwargs = {} if env is not None: @@ -635,13 +670,15 @@ kwargs["cwd"] = cwd else: kwargs["cwd"] = self.cwd.path - print("[EMULATOR] CWD:", kwargs["cwd"]) + print("[CWD]", kwargs["cwd"]) + print("") if System.windows: kwargs["close_fds"] = True - print(" ".join(args)) + # print(" ".join(args)) current_task.set_progress( "Starting {emulator}".format(emulator=emulator)) - # process = subprocess.Popen(*args, **kwargs) + # import subprocess + # return subprocess.Popen(["strace", emulator.path] + args, **kwargs) return emulator.popen(args, **kwargs) # return process @@ -875,6 +912,7 @@ self.env = {} self.process = None # self.allow_system_emulator = False + self.allow_home_access = False class GameFiles: diff -Nru fs-uae-arcade-2.9.5/fsgs/drivers/mamedriver.py fs-uae-arcade-2.9.6~dev/fsgs/drivers/mamedriver.py --- fs-uae-arcade-2.9.5/fsgs/drivers/mamedriver.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/drivers/mamedriver.py 2017-05-25 10:07:53.000000000 +0000 @@ -19,6 +19,9 @@ super().__init__(fsgs) # self.emulator.name = "multiemu-fs" self.emulator.name = "arcade-fs" + # To prevent slow startup on Linux due to scanning all system + # fonts. + self.emulator.allow_home_access = True self.mame_init() def mame_emulator_name(self): diff -Nru fs-uae-arcade-2.9.5/fsgs/FSGSDirectories.py fs-uae-arcade-2.9.6~dev/fsgs/FSGSDirectories.py --- fs-uae-arcade-2.9.5/fsgs/FSGSDirectories.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/FSGSDirectories.py 2017-05-25 10:07:53.000000000 +0000 @@ -9,6 +9,7 @@ from fsbc.system import windows, macosx from fsbc.user import get_common_documents_dir from fsbc.user import get_documents_dir +from fsgs import openretro class FSGSDirectories(object): @@ -60,7 +61,10 @@ def get_configurations_dir(cls): path = cls.portable_dir("configurations_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Configurations") + if openretro: + path = os.path.join(cls.get_data_dir(), "Configs") + else: + path = os.path.join(cls.get_base_dir(), "Configurations") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -71,7 +75,10 @@ def get_controllers_dir(cls): path = cls.portable_dir("controllers_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Controllers") + if openretro: + path = os.path.join(cls.get_data_dir(), "Devs", "Joysticks") + else: + path = os.path.join(cls.get_base_dir(), "Controllers") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -82,7 +89,10 @@ def get_kickstarts_dir(cls): path = cls.portable_dir("kickstarts_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Kickstarts") + if openretro: + path = os.path.join(cls.media_dir(), "ROMs") + else: + path = os.path.join(cls.get_base_dir(), "Kickstarts") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -111,7 +121,10 @@ def get_floppies_dir(cls): path = cls.portable_dir("floppies_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Floppies") + if openretro: + path = os.path.join(cls.media_dir(), "Floppies") + else: + path = os.path.join(cls.get_base_dir(), "Floppies") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -122,7 +135,10 @@ def get_hard_drives_dir(cls): path = cls.portable_dir("hard_drives_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Hard Drives") + if openretro: + path = os.path.join(cls.media_dir(), "HardDrives") + else: + path = os.path.join(cls.get_base_dir(), "Hard Drives") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -133,7 +149,10 @@ def get_cdroms_dir(cls): path = cls.portable_dir("cdroms_dir") if not path: - path = os.path.join(cls.get_base_dir(), "CD-ROMs") + if openretro: + path = os.path.join(cls.media_dir(), "CD-ROMs") + else: + path = os.path.join(cls.get_base_dir(), "CD-ROMs") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -179,6 +198,17 @@ @classmethod @functools.lru_cache() + def media_dir(cls): + path = cls.portable_dir("media_dir") + if not path: + path = os.path.join(cls.get_base_dir(), "Media") + if not os.path.exists(path): + os.makedirs(path) + path = Paths.get_real_case(path) + return path + + @classmethod + @functools.lru_cache() def images_dir_for_sha1(cls, sha1): path = os.path.join(cls.images_dir(), sha1[:2]) # if not os.path.exists(path): @@ -195,7 +225,10 @@ def get_titles_dir(cls): path = cls.portable_dir("titles_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Titles") + if openretro: + path = os.path.join(cls.get_data_dir(), "Titles") + else: + path = os.path.join(cls.get_base_dir(), "Titles") return path @classmethod @@ -214,7 +247,10 @@ def get_save_states_dir(cls): path = cls.portable_dir("save_states_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Save States") + if openretro: + path = os.path.join(cls.get_data_dir(), "Saves") + else: + path = os.path.join(cls.get_base_dir(), "Save States") if not os.path.exists(path): os.makedirs(path) path = Paths.get_real_case(path) @@ -237,7 +273,10 @@ def get_screenshots_dir(cls): path = cls.portable_dir("screenshots_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Screenshots") + if openretro: + path = os.path.join(cls.get_data_dir(), "Screenshots") + else: + path = os.path.join(cls.get_base_dir(), "Screenshots") return path @classmethod @@ -252,7 +291,10 @@ def get_covers_dir(cls): path = cls.portable_dir("covers_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Covers") + if openretro: + path = os.path.join(cls.get_data_dir(), "Covers") + else: + path = os.path.join(cls.get_base_dir(), "Covers") return path @classmethod @@ -260,7 +302,10 @@ def get_themes_dir(cls): path = cls.portable_dir("themes_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Themes") + if openretro: + path = os.path.join(cls.get_data_dir(), "Themes") + else: + path = os.path.join(cls.get_base_dir(), "Themes") if not os.path.exists(path): os.makedirs(path) return path @@ -270,7 +315,10 @@ def get_plugins_dir(cls): path = cls.portable_dir("plugins_dir") if not path: - path = os.path.join(cls.get_base_dir(), "Plugins") + if openretro: + path = os.path.join(cls.get_data_dir(), "Plugins") + else: + path = os.path.join(cls.get_base_dir(), "Plugins") if not os.path.exists(path): os.makedirs(path) return path diff -Nru fs-uae-arcade-2.9.5/fsgs/__init__.py fs-uae-arcade-2.9.6~dev/fsgs/__init__.py --- fs-uae-arcade-2.9.5/fsgs/__init__.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/__init__.py 2017-05-25 10:07:53.000000000 +0000 @@ -16,3 +16,4 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. product = "FS-UAE" +openretro = False \ No newline at end of file diff -Nru fs-uae-arcade-2.9.5/fsgs/option.py fs-uae-arcade-2.9.6~dev/fsgs/option.py --- fs-uae-arcade-2.9.5/fsgs/option.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/option.py 2017-05-25 10:07:53.000000000 +0000 @@ -99,11 +99,16 @@ DONGLE_TYPE = "dongle_type" DOS_DATABASE = "dos_database" DOS_EMULATOR = "dos_emulator" + DOSBOX_CPU_CORE = "dosbox_cpu_core" + DOSBOX_CPU_CPUTYPE = "dosbox_cpu_cputype" DOSBOX_CPU_CYCLES = "dosbox_cpu_cycles" DOSBOX_GUS_GUS = "dosbox_gus_gus" DOSBOX_MACHINE = "dosbox_machine" DOSBOX_MEMSIZE = "dosbox_memsize" DOSBOX_SBLASTER_IRQ = "dosbox_sblaster_irq" + DOSBOX_SBLASTER_OPLRATE = "dosbox_sblaster_oplrate" + DOSBOX_SBLASTER_SBBASE = "dosbox_sblaster_sbbase" + DOSBOX_SBLASTER_SBTYPE = "dosbox_sblaster_sbtype" EFFECT = "effect" END_CONFIG = "end_config" EXPECT_VERSION = "expect_version" @@ -149,6 +154,7 @@ FLOPPY_OVERLAYS_DIR = "floppy_overlays_dir" FMV_ROM = "fmv_rom" FPU = "fpu" + FRAME = "frame" FREEZER_CARTRIDGE = "freezer_cartridge" FSAA = "fsaa" FULL_KEYBOARD = "full_keyboard" @@ -438,6 +444,7 @@ UAE_Z3MEM_SIZE = "uae_z3mem_size" UAE_Z3MEM_START = "uae_z3mem_start" UAEGFX_CARD = "uaegfx_card" + UAELOG = "uaelog" UAEM_WRITE_FLAGS = "uaem_write_flags" UAENATIVE_LIBRARY = "uaenative_library" UNSAFE_SAVE_STATES = "unsafe_save_states" diff -Nru fs-uae-arcade-2.9.5/fsgs/platforms/c64/vicec64driver.py fs-uae-arcade-2.9.6~dev/fsgs/platforms/c64/vicec64driver.py --- fs-uae-arcade-2.9.5/fsgs/platforms/c64/vicec64driver.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/platforms/c64/vicec64driver.py 2017-05-25 10:07:53.000000000 +0000 @@ -38,6 +38,8 @@ """ import os +import shutil + from fsbc.system import windows, macosx from fsgs.drivers.gamedriver import GameDriver from fsgs.input.mapper import InputMapper @@ -79,6 +81,8 @@ def prepare(self): dot_vice_dir = os.path.join(self.home.path, ".vice") + if os.path.exists(dot_vice_dir): + shutil.rmtree(dot_vice_dir) os.makedirs(dot_vice_dir) # noinspection SpellCheckingInspection diff -Nru fs-uae-arcade-2.9.5/fsgs/platforms/dos/dosboxdosdriver.py fs-uae-arcade-2.9.6~dev/fsgs/platforms/dos/dosboxdosdriver.py --- fs-uae-arcade-2.9.5/fsgs/platforms/dos/dosboxdosdriver.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/platforms/dos/dosboxdosdriver.py 2017-05-25 10:07:53.000000000 +0000 @@ -29,7 +29,7 @@ import shutil from fsbc.path import str_path -from fsbc.system import windows, System +from fsbc.system import System from fsgs.FSGSDirectories import FSGSDirectories from fsgs.drivers.gamedriver import GameDriver @@ -47,9 +47,14 @@ self.emulator.name = "dosbox-svn" else: self.emulator.name = "dosbox-fs" + # Right now G-SYNC only works fine with 60Hz modes. There's stuttering - # when DOSBox outputs 70 fps. - self.set_allow_gsync(False) + # when DOSBox outputs 70 fps. Edit: The problem is that G-SYNC is + # capped to monitors selected refresh rate. + if self.screen_refresh_rate() < 70.0: + print("[VIDEO] Screen refresh rate is < 70.0, disabling G-SYNC") + self.set_allow_gsync(False) + # self.ultrasnd_drive = None def __del__(self): @@ -64,10 +69,21 @@ self.configure(f) self.args.extend(["-conf", config_file]) + # FIXME: Move to game driver? + if self.options[Option.VIEWPORT]: + self.emulator.env["FSGS_VIEWPORT"] = self.options[Option.VIEWPORT] + def prepare_media(self): file_list = json.loads(self.config["file_list"]) self.unpack_game_hard_drives(file_list) + if self.options["cue_sheets"]: + cue_sheets = json.loads(self.options["cue_sheets"]) + for cue_sheet in cue_sheets: + with open(os.path.join(self.drives_dir.path, + cue_sheet["name"]), "wb") as f: + f.write(cue_sheet["data"].encode("UTF-8")) + def unpack_game_hard_drives(self, file_list): drives_added = set() dir_path = self.drives_dir.path @@ -75,8 +91,8 @@ # if self.stop_flag: # return - name = file_entry["name"].upper() - # name = file_entry["name"] + name = file_entry["name"] + name = name.upper() drives_added.add(name[0]) @@ -158,27 +174,38 @@ f.write("\n[cpu]\n") cpu_core = "auto" - # cpu_core = "normal" + if self.config[Option.DOSBOX_CPU_CORE]: + cpu_core = self.config[Option.DOSBOX_CPU_CORE] + cpu_core = cpu_core.lower().strip() + if System.windows and System.x86_64: + # Dynamic core crashes on Windows x86-64 + print("[DOS] Forcing normal cpu core on Windows x86-64") + if cpu_core in ["auto", "dynamic"]: + cpu_core = "normal" f.write("core={0}\n".format(cpu_core)) cpu_cycles = "auto" + if self.config[Option.DOSBOX_CPU_CPUTYPE]: + f.write("cputype={0}\n".format( + self.config[Option.DOSBOX_CPU_CPUTYPE])) if self.config[Option.DOSBOX_CPU_CYCLES]: cpu_cycles = self.options[Option.DOSBOX_CPU_CYCLES] - if cpu_cycles not in ["auto", "max"]: + if cpu_cycles.startswith("max "): + pass + elif cpu_cycles in ["auto", "max"]: + pass + else: cpu_cycles = "fixed " + cpu_cycles f.write("cycles={0}\n".format(cpu_cycles)) f.write("\n[dosbox]\n") - if self.options[Option.DOSBOX_MEMSIZE]: - f.write("memsize={}\n".format(self.options[Option.DOSBOX_MEMSIZE])) if self.options[Option.DOSBOX_MACHINE]: f.write("machine={}\n".format(self.options[Option.DOSBOX_MACHINE])) + if self.options[Option.DOSBOX_MEMSIZE]: + f.write("memsize={}\n".format(self.options[Option.DOSBOX_MEMSIZE])) self.configure_gus(f) self.configure_midi(f) - - f.write("\n[sblaster]\n") - if self.config[Option.DOSBOX_SBLASTER_IRQ]: - f.write("irq={}\n".format(self.options[Option.DOSBOX_SBLASTER_IRQ])) + self.configure_sblaster(f) f.write("\n[autoexec]\n") if self.options[Option.AUTO_LOAD] != "0": @@ -187,14 +214,22 @@ # pass for name in os.listdir(self.drives_dir.path): if name in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": + p = os.path.join(self.drives_dir.path, name, "CD", "IMAGE.CUE") + if os.path.exists(p): + f.write('IMGMOUNT {0} "{1}" -t iso\n'.format(name, p)) + continue + p = os.path.join(self.drives_dir.path, name, "CD", "IMAGE.ISO") + if os.path.exists(p): + f.write('IMGMOUNT {0} "{1}" -t iso\n'.format(name, p)) + continue if name in "DEF": f.write('MOUNT {0} "{1}" -t cdrom\n'.format( name, os.path.join(self.drives_dir.path, name))) - else: - f.write('MOUNT {0} "{1}"\n'.format( - name, os.path.join(self.drives_dir.path, name))) + continue + f.write('MOUNT {0} "{1}"\n'.format( + name, os.path.join(self.drives_dir.path, name))) f.write("C:\n") - # f.write("CLS\n") + f.write("CLS\n") # for i in range(25): # f.write("echo.\n") if self.options[Option.AUTO_LOAD] == "0": @@ -216,7 +251,7 @@ if not self.options[Option.AUTO_QUIT] == "0": f.write("exit\n") - if windows: + if System.windows: # We don't want to open the separate console window on windows. self.args.append("-noconsole") @@ -248,5 +283,19 @@ f.write("mididevice=alsa\n") f.write("midiconfig=128:0\n") + def configure_sblaster(self, f): + f.write("\n[sblaster]\n") + if self.config[Option.DOSBOX_SBLASTER_SBTYPE]: + f.write("sbtype={}\n".format( + self.options[Option.DOSBOX_SBLASTER_SBTYPE])) + if self.config[Option.DOSBOX_SBLASTER_SBBASE]: + f.write("sbbase={}\n".format( + self.options[Option.DOSBOX_SBLASTER_SBBASE])) + if self.config[Option.DOSBOX_SBLASTER_IRQ]: + f.write("irq={}\n".format(self.options[Option.DOSBOX_SBLASTER_IRQ])) + if self.config[Option.DOSBOX_SBLASTER_OPLRATE]: + f.write("oplrate={}\n".format( + self.options[Option.DOSBOX_SBLASTER_OPLRATE])) + def finish(self): pass diff -Nru fs-uae-arcade-2.9.5/fsgs/platforms/dos/dosplatform.py fs-uae-arcade-2.9.6~dev/fsgs/platforms/dos/dosplatform.py --- fs-uae-arcade-2.9.5/fsgs/platforms/dos/dosplatform.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/platforms/dos/dosplatform.py 2017-05-25 10:07:53.000000000 +0000 @@ -19,18 +19,18 @@ class DOSLoader(SimpleLoader): def load_files(self, values): self.config["file_list"] = values["file_list"] + self.config["cue_sheets"] = values["cue_sheets"] def load_extra(self, values): - self.config["dosbox_cpu_cycles"] = values["dosbox_cpu_cycles"] - self.config["dosbox_sblaster_irq"] = values["sblaster_irq"] - # FIXME: REMOVE - self.config["sblaster_irq"] = values["sblaster_irq"] + for key in values.keys(): + if key.startswith("dosbox_"): + self.config[key] = values[key] + # for key in ["dosbox_cpu_cycles", "dosbox_sblaster_sbtype", + # "dosbox_sblaster_sbbase", "dosbox_sblaster_irq", + # "dosbox_sblaster_oplrate"]: + # self.config[key] = values[key] self.config["command"] = values["command"] if not self.config["command"]: # Deprecated option self.config["command"] = values["hd_startup"] - - for key in values.keys(): - if key.startswith("dosbox_"): - self.config[key] = values[key] diff -Nru fs-uae-arcade-2.9.5/fsgs/platforms/loader.py fs-uae-arcade-2.9.6~dev/fsgs/platforms/loader.py --- fs-uae-arcade-2.9.5/fsgs/platforms/loader.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/platforms/loader.py 2017-05-25 10:07:53.000000000 +0000 @@ -22,6 +22,9 @@ self.config["cartridge_slot"] = "sha1://{0}/{1}".format( file_list[0]["sha1"], file_list[0]["name"]) + self.config["cue_sheets"] = values["cue_sheets"] + + def load_extra(self, values): pass diff -Nru fs-uae-arcade-2.9.5/fsgs/plugins/plugin_manager.py fs-uae-arcade-2.9.6~dev/fsgs/plugins/plugin_manager.py --- fs-uae-arcade-2.9.5/fsgs/plugins/plugin_manager.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fsgs/plugins/plugin_manager.py 2017-05-25 10:07:53.000000000 +0000 @@ -30,7 +30,6 @@ class BasePlugin: - def __init__(self, path, name, version="0.0.0"): self.path = path self.name = name @@ -53,7 +52,6 @@ class Plugin(BasePlugin): - def __init__(self, path, name, version, cp): super().__init__(path, name, version) self.load_provides(cp) @@ -112,7 +110,6 @@ class Expansion(BasePlugin): - def __init__(self, path, arch_path): name = os.path.basename(path) version_path = os.path.join(arch_path, "Version.txt") @@ -153,7 +150,6 @@ class PluginResource: - def __init__(self, plugin, name): self.plugin = plugin self.name = name @@ -165,7 +161,6 @@ class Executable: - def __init__(self, path): self.path = path @@ -178,24 +173,20 @@ env = env.copy() else: env = os.environ.copy() - if windows: - pass - elif macosx: - pass - else: + + if os.environ.get("FS_PLUGINS_LD_LIBRARY_PATH") == "1": env["LD_LIBRARY_PATH"] = os.path.dirname(self.path) + return subprocess.Popen(args, env=env, **kwargs) class PluginExecutable(Executable): - def __init__(self, plugin, path): super().__init__(path) self.plugin = plugin class PluginManager: - @classmethod def instance(cls): if not hasattr(cls, "_instance") or cls._instance is None: @@ -209,9 +200,13 @@ if plugins_dir and os.path.isdir(plugins_dir): result.append(plugins_dir) expansion_dir = os.path.join( - FSGSDirectories.get_base_dir(), "Workspace", "Expansion") + FSGSDirectories.get_base_dir(), "Workspace", "Expansion") if expansion_dir and os.path.isdir(expansion_dir): result.append(expansion_dir) + system_plugins_dir = os.path.join( + fsboot.executable_dir(), "..", "..", "..", "Plugins") + if system_plugins_dir and os.path.isdir(system_plugins_dir): + result.append(system_plugins_dir) return result def __init__(self): Binary files /tmp/tmpAOjkoU/TpCSw2J6ar/fs-uae-arcade-2.9.5/fsgs/res/emu/left.png and /tmp/tmpAOjkoU/Kpkc0fVNha/fs-uae-arcade-2.9.6~dev/fsgs/res/emu/left.png differ Binary files /tmp/tmpAOjkoU/TpCSw2J6ar/fs-uae-arcade-2.9.5/fsgs/res/emu/right.png and /tmp/tmpAOjkoU/Kpkc0fVNha/fs-uae-arcade-2.9.6~dev/fsgs/res/emu/right.png differ diff -Nru fs-uae-arcade-2.9.5/fstd/desktop/gnome3.py fs-uae-arcade-2.9.6~dev/fstd/desktop/gnome3.py --- fs-uae-arcade-2.9.5/fstd/desktop/gnome3.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fstd/desktop/gnome3.py 2017-05-25 10:07:54.000000000 +0000 @@ -51,8 +51,6 @@ print("atexit.register reset_gnome_extensions") atexit.register(reset_gnome_extensions, original_extensions) - # sys.exit(1) - def running_in_gnome_3(): value = os.environ.get("XDG_CURRENT_DESKTOP", "").upper() diff -Nru fs-uae-arcade-2.9.5/fs-uae-arcade fs-uae-arcade-2.9.6~dev/fs-uae-arcade --- fs-uae-arcade-2.9.5/fs-uae-arcade 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fs-uae-arcade 2017-05-25 10:07:54.000000000 +0000 @@ -19,7 +19,7 @@ socket.setdefaulttimeout(30.0) -initialize_application("fs-uae-arcade", version="2.9.5") +initialize_application("fs-uae-arcade", version="2.9.6dev") os.environ["SDL_VIDEO_MAC_FULLSCREEN_SPACES"] = "0" try: diff -Nru fs-uae-arcade-2.9.5/fs-uae-arcade.spec fs-uae-arcade-2.9.6~dev/fs-uae-arcade.spec --- fs-uae-arcade-2.9.5/fs-uae-arcade.spec 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/fs-uae-arcade.spec 2017-05-25 10:07:54.000000000 +0000 @@ -1,6 +1,6 @@ %define name fs-uae-arcade -%define version 2.9.5 -%define unmangled_version 2.9.5 +%define version 2.9.6dev +%define unmangled_version 2.9.6dev %define release 1%{?dist} Summary: Fullscreen game browser for FS-UAE diff -Nru fs-uae-arcade-2.9.5/launcher/apps/fs_uae_launcher.py fs-uae-arcade-2.9.6~dev/launcher/apps/fs_uae_launcher.py --- fs-uae-arcade-2.9.5/launcher/apps/fs_uae_launcher.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/apps/fs_uae_launcher.py 2017-05-25 10:07:54.000000000 +0000 @@ -10,6 +10,12 @@ return print("FS-UAE Launcher {0}".format(VERSION)) + for i, arg in enumerate(sys.argv[:]): + if arg == "--fullscreen" or arg == "--fullscreen=1": + sys.argv[i] = "--settings:fullscreen=1" + elif arg == "--no-fullscreen" or arg == "--fullscreen=0": + sys.argv[i] = "--settings:fullscreen=0" + from launcher.launcherapp import LauncherApp app = LauncherApp() if "--no-auto-detect-game" in sys.argv: @@ -43,10 +49,14 @@ FS-UAE Launcher Help" Options: + --new-config[=] + +Options for directly launching games: + --fullscreen + --no-fullscreen --no-gui Do not show launch progress dialog --no-auto-detect-game Do not try to auto-detect game from archive - --new-config[=] TODO: Add more documentation """ diff -Nru fs-uae-arcade-2.9.5/launcher/apps/__init__.py fs-uae-arcade-2.9.6~dev/launcher/apps/__init__.py --- fs-uae-arcade-2.9.5/launcher/apps/__init__.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/apps/__init__.py 2017-05-25 10:07:54.000000000 +0000 @@ -6,6 +6,8 @@ # Workaround to make import typing work without having it on the default # python path (would confuse mypy). +from launcher.option import Option + sys.modules["typing"] = fstd.typing @@ -36,6 +38,22 @@ if "--openretro" in sys.argv: sys.argv.remove("--openretro") fsgs.product = "OpenRetro" + fsgs.openretro = True + # Must also remember to update game_scanner.py + Option.get(Option.ARCADE_DATABASE)["default"] = "1" + Option.get(Option.ATARI_DATABASE)["default"] = "1" + Option.get(Option.C64_DATABASE)["default"] = "1" + Option.get(Option.CPC_DATABASE)["default"] = "1" + Option.get(Option.DOS_DATABASE)["default"] = "1" + Option.get(Option.GB_DATABASE)["default"] = "1" + Option.get(Option.GBA_DATABASE)["default"] = "1" + Option.get(Option.GBC_DATABASE)["default"] = "1" + Option.get(Option.NES_DATABASE)["default"] = "1" + Option.get(Option.PSX_DATABASE)["default"] = "1" + Option.get(Option.SMD_DATABASE)["default"] = "1" + Option.get(Option.SNES_DATABASE)["default"] = "1" + Option.get(Option.TG16_DATABASE)["default"] = "1" + Option.get(Option.ZXS_DATABASE)["default"] = "1" # Check new app option. for arg in sys.argv: diff -Nru fs-uae-arcade-2.9.5/launcher/game_scanner.py fs-uae-arcade-2.9.6~dev/launcher/game_scanner.py --- fs-uae-arcade-2.9.5/launcher/game_scanner.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/game_scanner.py 2017-05-25 10:07:54.000000000 +0000 @@ -5,6 +5,7 @@ from functools import lru_cache from fsbc import settings +from fsgs import openretro from fsgs.FSGSDirectories import FSGSDirectories from fsgs.FileDatabase import FileDatabase from fsgs.GameDatabase import IncompleteGameException @@ -45,6 +46,25 @@ if LauncherSettings.get(platform_option) != "0": return True return False + if openretro: + if platform_option in [ + Option.ARCADE_DATABASE, + Option.ATARI_DATABASE, + Option.C64_DATABASE, + Option.CPC_DATABASE, + Option.DOS_DATABASE, + Option.GB_DATABASE, + Option.GBA_DATABASE, + Option.GBC_DATABASE, + Option.NES_DATABASE, + Option.PSX_DATABASE, + Option.SMD_DATABASE, + Option.SNES_DATABASE, + Option.TG16_DATABASE, + Option.ZXS_DATABASE]: + if LauncherSettings.get(platform_option) != "0": + return True + return False if settings.get(Option.PLATFORMS_FEATURE) != "1": return False if LauncherSettings.get(platform_option) == "1": diff -Nru fs-uae-arcade-2.9.5/launcher/option.py fs-uae-arcade-2.9.6~dev/launcher/option.py --- fs-uae-arcade-2.9.5/launcher/option.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/option.py 2017-05-25 10:07:54.000000000 +0000 @@ -80,7 +80,7 @@ "type": "Boolean", }, Option.ARCADE_FULLSCREEN: { - "default": "0", + "default": "1", "description": N_("Arcade Fullscreen"), "type": "boolean", }, @@ -415,7 +415,7 @@ "type": "", }, Option.FADE_IN_DURATION: { - "default": "0", + "default": "500", "description": N_("Fade-in Duration on Start"), "type": "", }, @@ -461,7 +461,7 @@ ] }, Option.FLOPPY_DRIVE_VOLUME: { - "default": "25", + "default": "20", "description": N_("Floppy Drive Volume"), "type": "integer", "min": 0, @@ -474,6 +474,15 @@ "min": 0, "max": 100, }, + Option.FRAME: { + "default": "auto", + "description": N_("Frame"), + "type": "", + "values": [ + ("0", N_("None")), + ("auto", N_("Auto")), + ] + }, Option.FREEZER_CARTRIDGE: { "default": "0", "description": N_("Freezer Cartridge"), @@ -889,6 +898,7 @@ ("1", N_("Max Scaling")), ("0", N_("No Scaling")), ("integer", N_("Integer Scaling")), + ("legacy", N_("Legacy Scaling")), ] }, Option.SCANLINES: { @@ -992,7 +1002,7 @@ ] }, Option.STRETCH: { - "default": "1", + "default": "aspect", "description": N_("Stretch"), "type": "Choice", "values": [ @@ -1341,7 +1351,7 @@ "type": "boolean", }, Option.ZOOM: { - "default": "auto", + "default": "692x540", "description": N_("Zoom Amiga display (crop)"), "type": "choice", "values": [ @@ -1354,7 +1364,7 @@ ("640x480+border", N_("640x480 + Border")), ("640x512", "640x512"), ("640x512+border", N_("640x512 + Border")), - ("704x520", "704x520"), + ("692x540", "692x540"), ("704x540", "704x540"), ("704x566", "704x566"), ("724x566", "724x566"), diff -Nru fs-uae-arcade-2.9.5/launcher/panels/quicksettingspanel.py fs-uae-arcade-2.9.6~dev/launcher/panels/quicksettingspanel.py --- fs-uae-arcade-2.9.5/launcher/panels/quicksettingspanel.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/panels/quicksettingspanel.py 2017-05-25 10:07:54.000000000 +0000 @@ -21,6 +21,9 @@ SMOOTHING = [] + MEDNAFEN CROPPING = [Platform.ZXS] +SCALING += AMIGA_PLATFORMS +STRETCHING += AMIGA_PLATFORMS + class QuickSettingsPanel(fsui.Panel): def __init__(self, parent, fsgc): @@ -38,10 +41,11 @@ hori_layout.add(settings_button, margin_right=10) self.layout.add_spacer(0) - self.add_option(Option.KEEP_ASPECT, text=gettext("Keep Aspect"), - platforms=AMIGA_PLATFORMS) + # self.add_option(Option.KEEP_ASPECT, text=gettext("Keep Aspect"), + # platforms=AMIGA_PLATFORMS) self.add_option(Option.SCALE, text=None, platforms=SCALING) self.add_option(Option.STRETCH, text=None, platforms=STRETCHING) + self.add_option(Option.ZOOM, text=None, platforms=AMIGA_PLATFORMS) self.add_option(Option.BORDER, text=None, platforms=BORDER) self.add_option(Option.SMOOTHING, text=None, platforms=SMOOTHING) @@ -50,7 +54,7 @@ # self.add_option(Option.CROP, text=None, platforms=CROPPING) # self.add_option(Option.ZXS_DRIVER, [Platform.ZXS]) - self.add_option(Option.DOS_EMULATOR, [Platform.DOS]) + # self.add_option(Option.DOS_EMULATOR, [Platform.DOS]) self.add_option(Option.AUTO_LOAD, [Platform.DOS, Platform.ZXS]) self.add_option(Option.AUTO_QUIT, [Platform.DOS]) self.add_option(Option.TURBO_LOAD, [Platform.ZXS]) diff -Nru fs-uae-arcade-2.9.5/launcher/settings/arcade_settings_page.py fs-uae-arcade-2.9.6~dev/launcher/settings/arcade_settings_page.py --- fs-uae-arcade-2.9.5/launcher/settings/arcade_settings_page.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/settings/arcade_settings_page.py 2017-05-25 10:07:54.000000000 +0000 @@ -1,3 +1,4 @@ +import fsgs import fsui from launcher.option import Option from launcher.settings.settings_page import SettingsPage @@ -7,7 +8,7 @@ def __init__(self, parent): super().__init__(parent) icon = fsui.Icon("fs-uae-arcade", "pkg:launcher") - self.add_header(icon, "FS-UAE Arcade") + self.add_header(icon, "{} Arcade".format(fsgs.product)) self.add_option(Option.ARCADE_FULLSCREEN) self.add_option(Option.ARCADE_THEME) self.add_option(Option.ARCADE_INITIAL_FAVORITES) diff -Nru fs-uae-arcade-2.9.5/launcher/settings/gamedatabasesettingspage.py fs-uae-arcade-2.9.6~dev/launcher/settings/gamedatabasesettingspage.py --- fs-uae-arcade-2.9.5/launcher/settings/gamedatabasesettingspage.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/settings/gamedatabasesettingspage.py 2017-05-25 10:07:54.000000000 +0000 @@ -1,3 +1,4 @@ +from fsgs import openretro from launcher.settings.option_ui import OptionUI import fsui @@ -23,49 +24,49 @@ self.add_option(Option.DATABASE_SHOW_ADULT) self.add_option(Option.DATABASE_SHOW_UNPUBLISHED) - if settings.get(Option.PLATFORMS_FEATURE) == "1": - self.add_section(gettext("Additional Databases")) - - label = fsui.MultiLineLabel( - self, gettext( - "Note: This is an experimental feature. " - "Additional plugins are needed."), 640) - self.layout.add(label, margin_top=20, margin_bottom=20) - - self.add_database_option(Option.CPC_DATABASE, "Amstrad CPC") - self.add_database_option(Option.ARCADE_DATABASE, "Arcade") - self.add_database_option(Option.ATARI_DATABASE, "Atari ST") - self.add_database_option(Option.C64_DATABASE, "Commodore 64") - self.add_database_option(Option.DOS_DATABASE, "DOS") - self.add_database_option(Option.GB_DATABASE, "Game Boy") - self.add_database_option(Option.GBA_DATABASE, "Game Boy Advance") - self.add_database_option(Option.GBC_DATABASE, "Game Boy Color") - self.add_database_option(Option.NES_DATABASE, "Nintendo") - self.add_database_option(Option.PSX_DATABASE, "PlayStation") - self.add_database_option(Option.SNES_DATABASE, "Super Nintendo") - self.add_database_option(Option.ZXS_DATABASE, "ZX Spectrum") - - # label = fsui.MultiLineLabel( - # self, gettext( - # "Note: Support for additional game databases is an " - # "experimental feature and does not provide the " - # "same level of maturity as Amiga/CDTV/CD32. " - # "Also, additional plugins are needed to play the " - # "games."), 640) - # self.layout.add(label, margin_top=20) - - def add_database_option(self, name, description=""): - self.options_on_page.add(name) - group = OptionUI.create_group( - self, name, description=description, help_button=False) - - if self.hori_counter % 2 == 0: - self.hori_layout = fsui.HorizontalLayout() - self.layout.add( - self.hori_layout, fill=True, margin_top=10, margin_bottom=10, - margin_left=-10, margin_right=-10) - self.hori_layout.add(group, fill=True, expand=-1, margin=10, - margin_top=0, margin_bottom=0) - if self.hori_counter % 2 == 0: - self.hori_layout.add_spacer(10) - self.hori_counter += 1 + # if openretro or settings.get(Option.PLATFORMS_FEATURE) == "1": + # self.add_section(gettext("Additional Databases")) + # + # label = fsui.MultiLineLabel( + # self, gettext( + # "Note: This is an experimental feature. " + # "Additional plugins are needed."), 640) + # self.layout.add(label, margin_top=20, margin_bottom=20) + # + # self.add_database_option(Option.CPC_DATABASE, "Amstrad CPC") + # self.add_database_option(Option.ARCADE_DATABASE, "Arcade") + # self.add_database_option(Option.ATARI_DATABASE, "Atari ST") + # self.add_database_option(Option.C64_DATABASE, "Commodore 64") + # self.add_database_option(Option.DOS_DATABASE, "DOS") + # self.add_database_option(Option.GB_DATABASE, "Game Boy") + # self.add_database_option(Option.GBA_DATABASE, "Game Boy Advance") + # self.add_database_option(Option.GBC_DATABASE, "Game Boy Color") + # self.add_database_option(Option.NES_DATABASE, "Nintendo") + # self.add_database_option(Option.PSX_DATABASE, "PlayStation") + # self.add_database_option(Option.SNES_DATABASE, "Super Nintendo") + # self.add_database_option(Option.ZXS_DATABASE, "ZX Spectrum") + # + # # label = fsui.MultiLineLabel( + # # self, gettext( + # # "Note: Support for additional game databases is an " + # # "experimental feature and does not provide the " + # # "same level of maturity as Amiga/CDTV/CD32. " + # # "Also, additional plugins are needed to play the " + # # "games."), 640) + # # self.layout.add(label, margin_top=20) + # + # def add_database_option(self, name, description=""): + # self.options_on_page.add(name) + # group = OptionUI.create_group( + # self, name, description=description, help_button=False) + # + # if self.hori_counter % 2 == 0: + # self.hori_layout = fsui.HorizontalLayout() + # self.layout.add( + # self.hori_layout, fill=True, margin_top=10, margin_bottom=10, + # margin_left=-10, margin_right=-10) + # self.hori_layout.add(group, fill=True, expand=-1, margin=10, + # margin_top=0, margin_bottom=0) + # if self.hori_counter % 2 == 0: + # self.hori_layout.add_spacer(10) + # self.hori_counter += 1 diff -Nru fs-uae-arcade-2.9.5/launcher/settings/gameplatformssettingspage.py fs-uae-arcade-2.9.6~dev/launcher/settings/gameplatformssettingspage.py --- fs-uae-arcade-2.9.5/launcher/settings/gameplatformssettingspage.py 1970-01-01 00:00:00.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/settings/gameplatformssettingspage.py 2017-05-25 10:07:54.000000000 +0000 @@ -0,0 +1,69 @@ +from fsgs import openretro +from launcher.settings.option_ui import OptionUI + +import fsui +from fsbc import settings +from launcher.i18n import gettext +from launcher.option import Option +from launcher.settings.settings_page import SettingsPage + + +class GamePlatformsSettingsPage(SettingsPage): + def __init__(self, parent): + super().__init__(parent) + icon = fsui.Icon("database-settings", "pkg:workspace") + title = gettext("Game Platforms") + subtitle = "" + self.add_header(icon, title, subtitle) + + self.hori_layout = None + self.hori_counter = 0 + + if openretro or settings.get(Option.PLATFORMS_FEATURE) == "1": + # self.add_section(gettext("Game Databases")) + + label = fsui.MultiLineLabel( + self, gettext( + "Note: This is an experimental feature. " + "Additional plugins are needed."), 640) + self.layout.add(label, margin_top=20, margin_bottom=20) + + self.add_database_option(Option.CPC_DATABASE, "Amstrad CPC") + self.add_database_option(Option.ARCADE_DATABASE, "Arcade") + self.add_database_option(Option.ATARI_DATABASE, "Atari ST") + self.add_database_option(Option.C64_DATABASE, "Commodore 64") + self.add_database_option(Option.DOS_DATABASE, "DOS") + self.add_database_option(Option.GB_DATABASE, "Game Boy") + self.add_database_option(Option.GBA_DATABASE, "Game Boy Advance") + self.add_database_option(Option.GBC_DATABASE, "Game Boy Color") + self.add_database_option(Option.NES_DATABASE, "Nintendo") + self.add_database_option(Option.PSX_DATABASE, "PlayStation") + self.add_database_option(Option.SMD_DATABASE, "Mega Drive") + self.add_database_option(Option.SNES_DATABASE, "Super Nintendo") + self.add_database_option(Option.TG16_DATABASE, "TurboGrafx-16") + self.add_database_option(Option.ZXS_DATABASE, "ZX Spectrum") + + # label = fsui.MultiLineLabel( + # self, gettext( + # "Note: Support for additional game databases is an " + # "experimental feature and does not provide the " + # "same level of maturity as Amiga/CDTV/CD32. " + # "Also, additional plugins are needed to play the " + # "games."), 640) + # self.layout.add(label, margin_top=20) + + def add_database_option(self, name, description=""): + self.options_on_page.add(name) + group = OptionUI.create_group( + self, name, description=description, help_button=False) + + if self.hori_counter % 2 == 0: + self.hori_layout = fsui.HorizontalLayout() + self.layout.add( + self.hori_layout, fill=True, margin_top=10, margin_bottom=10, + margin_left=-10, margin_right=-10) + self.hori_layout.add(group, fill=True, expand=-1, margin=10, + margin_top=0, margin_bottom=0) + if self.hori_counter % 2 == 0: + self.hori_layout.add_spacer(10) + self.hori_counter += 1 diff -Nru fs-uae-arcade-2.9.5/launcher/settings/launchersettingspage.py fs-uae-arcade-2.9.6~dev/launcher/settings/launchersettingspage.py --- fs-uae-arcade-2.9.5/launcher/settings/launchersettingspage.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/settings/launchersettingspage.py 2017-05-25 10:07:54.000000000 +0000 @@ -1,3 +1,5 @@ +import fsgs +from fsgs import openretro from launcher.settings.maintenance_settings_page import DefragmentDatabasesTask import fsboot @@ -12,7 +14,7 @@ def __init__(self, parent): super().__init__(parent) icon = fsui.Icon("fs-uae-launcher", "pkg:launcher") - self.add_header(icon, "FS-UAE Launcher") + self.add_header(icon, "{} Launcher".format(fsgs.product)) if fsboot.get("fws") == "1": # We omit the appearance settings, since they have no effect @@ -27,7 +29,8 @@ self.add_section(gettext("Experimental Features")) # Netplay feature is now enabled by default # self.add_option(Option.NETPLAY_FEATURE) - self.add_option(Option.PLATFORMS_FEATURE) + if not openretro: + self.add_option(Option.PLATFORMS_FEATURE) # self.add_option(Option.LAUNCHER_CONFIG_FEATURE) # self.add_option(Option.LAUNCHER_SETUP_WIZARD_FEATURE) diff -Nru fs-uae-arcade-2.9.5/launcher/settings/settings_dialog.py fs-uae-arcade-2.9.6~dev/launcher/settings/settings_dialog.py --- fs-uae-arcade-2.9.5/launcher/settings/settings_dialog.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/settings/settings_dialog.py 2017-05-25 10:07:54.000000000 +0000 @@ -1,4 +1,6 @@ +import fsgs import fsui +from fsbc import settings from launcher.i18n import gettext from launcher.launcher_settings import LauncherSettings from launcher.launcher_signal import LauncherSignal @@ -10,6 +12,7 @@ from launcher.settings.directories_settings_page import DirectoriesSettingsPage from launcher.settings.fs_uae_settings_page import FSUAESettingsPage from launcher.settings.gamedatabasesettingspage import GameDatabaseSettingsPage +from launcher.settings.gameplatformssettingspage import GamePlatformsSettingsPage from launcher.settings.joystick_settings_page import JoystickSettingsPage from launcher.settings.keyboard_settings_page import KeyboardSettingsPage from launcher.settings.language_settings_page import LanguageSettingsPage @@ -32,8 +35,8 @@ return fsui.open_window_instance(cls, parent) def __init__(self, parent, index=0): - PagedDialog.__init__(self, parent, "{} - FS-UAE Launcher".format( - gettext("Settings"))) + PagedDialog.__init__(self, parent, "{} - {} Launcher".format( + gettext("Settings"), fsgs.product)) # FIXME: remove this once the dialog uses Window as base class # self.setAttribute(Qt.WA_DeleteOnClose, True) @@ -87,7 +90,7 @@ # gettext("Logging"), LoggingSettingsPage, # fsui.Icon("settings", "pkg:workspace")) self.add_page( - "FS-UAE Launcher", LauncherSettingsPage, + "{} Launcher".format(fsgs.product), LauncherSettingsPage, fsui.Icon("fs-uae-launcher", "pkg:launcher"), bold=True) self.add_page( gettext("File Database"), ScanSettingsPage, @@ -95,6 +98,10 @@ self.add_page( gettext("Game Database"), GameDatabaseSettingsPage, fsui.Icon("database-settings", "pkg:workspace")) + if fsgs.openretro or settings.get(Option.PLATFORMS_FEATURE) == "1": + self.add_page( + gettext("Game Platforms"), GamePlatformsSettingsPage, + fsui.Icon("database-settings", "pkg:workspace")) # self.add_page(gettext("Custom Settings"), CustomSettingsPage) if LauncherSettings.get(Option.NETPLAY_FEATURE) != "0": self.add_page( @@ -110,7 +117,7 @@ # gettext("Maintenance"), MaintenanceSettingsPage, # fsui.Icon("maintenance", "pkg:workspace")) self.add_page( - "FS-UAE Arcade", ArcadeSettingsPage, + "{} Arcade".format(fsgs.product), ArcadeSettingsPage, fsui.Icon("fs-uae-arcade", "pkg:launcher"), bold=True) # Old texts diff -Nru fs-uae-arcade-2.9.5/launcher/version.py fs-uae-arcade-2.9.6~dev/launcher/version.py --- fs-uae-arcade-2.9.5/launcher/version.py 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/launcher/version.py 2017-05-25 10:07:54.000000000 +0000 @@ -1 +1 @@ -VERSION = "2.9.5" +VERSION = "2.9.6dev" diff -Nru fs-uae-arcade-2.9.5/setup.py fs-uae-arcade-2.9.6~dev/setup.py --- fs-uae-arcade-2.9.5/setup.py 2017-04-08 14:46:37.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/setup.py 2017-05-25 10:07:53.000000000 +0000 @@ -20,7 +20,7 @@ name = "fs-uae-arcade" py_name = "fs_uae_arcade" tar_name = "fs-uae-arcade" -version = "2.9.5" +version = "2.9.6dev" author = "Frode Solheim" author_email = "frode@fs-uae.net" package_map = { @@ -124,7 +124,7 @@ else: setup_kwargs["executables"] = [Executable(s) for s in scripts] - setup_kwargs["version"] = "2.9.5" + setup_kwargs["version"] = "2.9.6" build_exe_options = { "includes": [ # "ctypes", @@ -174,7 +174,7 @@ if sys.platform == "darwin": setup_kwargs["name"] = title - setup_kwargs["version"] = "2.9.5" + setup_kwargs["version"] = "2.9.6" else: setup_kwargs["scripts"] = scripts diff -Nru fs-uae-arcade-2.9.5/VERSION fs-uae-arcade-2.9.6~dev/VERSION --- fs-uae-arcade-2.9.5/VERSION 2017-04-08 14:46:38.000000000 +0000 +++ fs-uae-arcade-2.9.6~dev/VERSION 2017-05-25 10:07:54.000000000 +0000 @@ -1 +1 @@ -2.9.5 +2.9.6dev