code : str = None
src : str = ""
tags : list = None
+ opts : dict = None # option name -> description
desc : str = ""
total_time : int = 0
total_sessions : int = 0
self.tags = [ tag.strip() for tag in self["Tags"].split(";") ]
self.src = self.tags[0]
self.desc = self.get("Desc", "").replace("\\n", "\n").strip()
+
+ self.opts = { }
+ if (self.get("Opts")):
+ for opt in self["Opts"].split(";"):
+ if (":" in opt):
+ self.opts[opt.split(":")[0]] = opt.split(":", maxsplit=1)[1]
def _init_icons(self):
self.icon = self._read_icon()
except:
print("Cannot save total time", file=stderr)
- def run(self, params: list = None):
+ def run(self, opt: str = None):
if (not self.support):
raise RuntimeError("Unsupported game was called: " + game.name)
begin = time()
today = datetime.now()
- self.support._start(self, params)
+ self.support._start(self, opt)
elapsed = int(time() - begin)
if (elapsed >= 60): # Ignore very short sessions
import gamiki.support.custom_commands as custom
-def dosbox(dir: PurePath, link: PurePath) -> int:
+def dosbox(dir: PurePath, link: PurePath, opt: str = None) -> int:
cmd, env = custom.cmd("dosbox", link, None)
if (not cmd):
cmd.append("-conf")
cmd.append(cpu.as_posix())
cmd.append("-conf")
- cmd.append(dir.joinpath("start.conf").as_posix())
+
+ if (opt):
+ start = dir.joinpath(f"start-{opt}.conf")
+ else:
+ start = dir.joinpath("start.conf")
+
+ if (not start.exists()):
+ return 404;
+
+ cmd.append(start.as_posix())
return run(cmd, cwd=dir, env=env).returncode
def supports(self, game: Game) -> bool:
return False
- def _start(self, game: Game, params: list = None):
+ def _start(self, game: Game, opt: str = None):
if (not self.supports(game)):
raise RuntimeError("Unsupported game was called: " + game.name)
- def _running(self, game: Game):
- print("Running", game.name)
+ def _running(self, game: Game, opt: str = None):
+ if (opt):
+ print("Running", game.name, "(option: " + opt + ")")
+ else:
+ print("Running", game.name)
def _error(self, game: Game, rc: int):
print("\nError when running", game.name + ":", "RC", rc)
and not game.dir.joinpath("C", "WINDOWS").exists()
)
- def _start(self, game: Game, params: list = None):
- self._running(game)
- rep = dosbox(game.dir.resolve(), game.dir.resolve())
+ def _start(self, game: Game, opt: str = None):
+ self._running(game, opt)
+ rep = dosbox(game.dir.resolve(), game.dir.resolve(), opt)
if (rep != 0):
self._error(game, rep)
def supports(self, game: Game):
return game.dir.joinpath("start.sh").exists()
- def _start(self, game: Game, params: list = None):
+ def _start(self, game: Game, opt: str = None):
start = game.dir.resolve().joinpath("start.sh")
self._running(game)
def supports(self, game: Game):
return game.dir.joinpath("gameinfo").exists()
- def _start(self, game: Game, params: list = None):
+ def _start(self, game: Game, opt: str = None):
start = game.dir.resolve().joinpath("start.sh")
if (not start.exists()):
def supports(self, game: Game):
return game.dir.joinpath("wine.bat").exists()
- def _start(self, game: Game, params: list = None):
+ def _start(self, game: Game, opt: str = None):
dir = game.dir.resolve()
if (not dir.joinpath("wine.prefix").exists()):
and game.dir.joinpath("C", "WINDOWS").exists()
)
- def _start(self, game: Game, params: list = None):
+ def _start(self, game: Game, opt: str = None):
self._running(game)
rep = dosbox(game.dir.resolve(), game.library.dir.resolve())
if (rep != 0):