OPTION_IOMODES = 0x00000003 # cover both interfaces
OPTION_PLANETS = 0x00000004 # planets and mining (> 1974)
OPTION_THOLIAN = 0x00000008 # Tholians and their webs (UT 1979 version)
-OPTION_PROBE = 0x00000020 # deep-space probes (DECUS version, 1980)
-OPTION_SHOWME = 0x00000040 # bracket Enterprise in chart (ESR, 2005)
-OPTION_RAMMING = 0x00000080 # enemies may ram Enterprise (Almy, 1979)
-OPTION_MVBADDY = 0x00000100 # more enemies can move (Almy, 1979?)
-OPTION_AUTOPASS = 0x00000200 # Autogenerate password (Almy, 1997?)
+OPTION_PROBE = 0x00000010 # deep-space probes (DECUS version, 1980)
+OPTION_MVBADDY = 0x00000020 # more enemies can move (Almy, 1979?)
+OPTION_RAMMING = 0x00000040 # enemies may ram Enterprise (Almy, 1979?)
+OPTION_ALMY = 0x00000080 # Almy's death ray upgrade (1997?)
+OPTION_AUTOPASS = 0x00000100 # Autogenerate password (Almy, 1997?)
+OPTION_BASE = 0x00000200 # bases have good shields (Stas, 2005)
OPTION_BLKHOLE = 0x00000400 # black hole may timewarp you (Stas, 2005)
-OPTION_BASE = 0x00000800 # bases have good shields (Stas, 2005)
+OPTION_SHOWME = 0x00000800 # bracket Enterprise in chart (ESR, 2005)
OPTION_WORLDS = 0x00001000 # logic for inhabited worlds (ESR, 2006)
OPTION_AUTOSCAN = 0x00002000 # automatic LRSCAN before CHART (ESR, 2006)
-OPTION_CAPTURE = 0x00004000 # Enable BSD-Trek capture (Almy, 2013).
-OPTION_CLOAK = 0x80008000 # Enable BSD-Trek capture (Almy, 2013).
-OPTION_ALMY = 0x01000000 # Almy's death ray upgrade (1997?)
-OPTION_COLOR = 0x04000000 # enable color display (ESR, 2010)
-OPTION_DOTFILL = 0x08000000 # fix dotfill glitch in chart (ESR, 2019)
-OPTION_ALPHAMERIC = 0x10000000 # Alpha Y coordinates (ESR, 2023)
+OPTION_COLOR = 0x00004000 # enable color display (ESR, 2010)
+OPTION_CAPTURE = 0x00008000 # Enable BSD-Trek capture (Almy, 2013).
+OPTION_CLOAK = 0x80010000 # Enable BSD-Trek capture (Almy, 2013).
+OPTION_DOTFILL = 0x08200000 # fix dotfill glitch in chart (ESR, 2019)
+OPTION_ALPHAMERIC = 0x00400000 # Alpha Y coordinates (ESR, 2023)
option_names = {
- "ALL": OPTION_ALL,
- "TTY": OPTION_TTY,
- "IOMODES": OPTION_IOMODES,
- "PLANETS": OPTION_PLANETS,
- "PROBE": OPTION_PROBE,
- "SHOWME": OPTION_SHOWME,
- "RAMMING": OPTION_RAMMING,
- "MVBADDY": OPTION_MVBADDY,
- "AUTOPASS": OPTION_AUTOPASS,
- "BLKHOLE": OPTION_BLKHOLE,
- "BASE": OPTION_BASE,
- "WORLDS": OPTION_WORLDS,
- "AUTOSCAN": OPTION_AUTOSCAN,
- "CAPTURE": OPTION_CAPTURE,
- "CLOAK": OPTION_CLOAK,
- "ALMY": OPTION_ALMY,
- "COLOR": OPTION_COLOR,
- "DOTFILL": OPTION_DOTFILL,
- "ALPHAMERIC": OPTION_ALPHAMERIC,
- }
+ "ALL": (OPTION_ALL, 0),
+ "TTY": (OPTION_TTY, 0),
+ "IOMODES": (OPTION_IOMODES, 0),
+ "PLANETS": (OPTION_PLANETS, 1974),
+ "THOLIAN": (OPTION_THOLIAN, 1979),
+ "PROBE": (OPTION_PROBE, 1980),
+ "MVBADDY": (OPTION_MVBADDY, 1981), # year bumped to make it distinct
+ "RAMMING": (OPTION_RAMMING, 1982), # year bumped to make it distinct
+ "ALMY": (OPTION_ALMY, 1997),
+ "AUTOPASS": (OPTION_AUTOPASS, 1998), # year bumped to make it distinct
+ "BASE": (OPTION_BASE, 2004), # year bumped to make it distinct
+ "BLKHOLE": (OPTION_BLKHOLE, 2004), # year bumped to make it distinct
+ "SHOWME": (OPTION_SHOWME, 2005),
+ "WORLDS": (OPTION_WORLDS, 2006),
+ "AUTOSCAN": (OPTION_AUTOSCAN, 2007), # year bumped to make it distinct
+ "COLOR": (OPTION_COLOR, 2010),
+ "CAPTURE": (OPTION_CAPTURE, 2013),
+ "CLOAK": (OPTION_CLOAK, 2014), # year bumped to make it distinct
+ "DOTFILL": (OPTION_DOTFILL, 2019),
+ "ALPHAMERIC": (OPTION_ALPHAMERIC, 2023)
+}
# Define devices
DSRSENS = 0
if mode == "IHEOL":
active = []
for k, v in option_names.items():
- if (v & game.options) and k != "ALL":
+ if (v[0] & game.options) and k != "ALL":
active.append(k)
active.sort()
prout(str(" ".join(active)))
if scanner.type == "IHEOL":
break
if scanner.token.upper() in option_names:
- changemask |= option_names[scanner.token.upper()]
+ changemask |= option_names[scanner.token.upper()][0]
else:
prout(_("No such option as ") + scanner.token)
if mode == "set":
game.thawed = False
game.skill = SKILL_NONE
gametype = None
- mode = None
- while gametype is None or game.length == 0 or game.skill == SKILL_NONE or mode is None:
+ wayback = 0
+ while gametype is None or game.length == 0 or game.skill == SKILL_NONE or wayback == 0:
eol_is_fancy = False
if not scanner.inqueue or scanner.token == "IHEOL": # Can start with command line options
if gametype is None:
proutn(_("Would you like a Short, Medium, or Long game? "))
elif game.skill == SKILL_NONE:
proutn(_("Are you a Novice, Fair, Good, Expert, or Emeritus player? "))
- elif mode is None:
- proutn(_("Choose your game style (plain, almy, fancy or just press enter): "))
+ elif wayback == 0:
+ proutn(_("Wayback setting (press enter for current year): "))
eol_is_fancy = True
scanner.nexttok()
if game.idebug:
game.skill = SKILL_EXPERT
elif scanner.token.startswith("em"): # emeritus
game.skill = SKILL_EMERITUS
- elif scanner.token.startswith("p"): # plain
- # Approximates the UT FORTRAN version.
- game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS | OPTION_COLOR | OPTION_CAPTURE | OPTION_CLOAK | OPTION_ALMY | OPTION_AUTOPASS | OPTION_DOTFILL | OPTION_ALPHAMERIC)
- mode = "plain"
- elif scanner.token.startswith("almy"): # almy
- # Approximates Tom Almy's version.
- mode = "almy"
- game.options &=~ (OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS | OPTION_COLOR | OPTION_DOTFILL | OPTION_ALPHAMERIC)
- elif scanner.token.startswith("f"): # fancy
- mode = "fancy"
+ elif scanner.type == "IHREAL":
+ wayback = scanner.int()
elif (eol_is_fancy and scanner.token.startswith("\n")):
- mode = "fancy"
+ wayback = time.localtime().tm_year
elif scanner.token.startswith("\n"):
continue
elif scanner.token.startswith("idebug"):
else:
# Unrecognized token
prout(_("Can't interpret %s") % repr(scanner.token))
+ for (name, (option, year)) in option_names.items():
+ if wayback < year:
+ game.options &=~ option
setpassword()
if game.passwd == "debug": # pragma: no cover
game.idebug = True
prout("=== Debug mode enabled.")
if game.idebug:
- prout("--- Setup: type=%s length=%s skill=%s mode=%s" % (gametype, game.length, game.skill, mode))
+ prout("--- Setup: type=%s length=%s skill=%s wayback=%s" % (gametype, game.length, game.skill, wayback))
# Use parameters to generate initial values of things
game.damfac = 0.5 * game.skill
game.inbase = rnd.integer(BASEMIN, BASEMAX+1)