X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=sst;h=21935f4ebee7b9c7faa103c9150c208222fe3303;hb=4645bc15ad6aa7a636f7a31babcdd7d7b9635553;hp=450729232b10f10622bda649fe8ebb09547dc93c;hpb=d7d3a01f17e507e8cdad45a099fcad9c72f7b534;p=super-star-trek.git diff --git a/sst b/sst index 4507292..21935f4 100755 --- a/sst +++ b/sst @@ -302,13 +302,14 @@ 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_BLKHOLE = 0x00000200 # black hole may timewarp you (Stas, 2005) -OPTION_BASE = 0x00000400 # bases have good shields (Stas, 2005) -OPTION_WORLDS = 0x00000800 # logic for inhabited worlds (ESR, 2006) -OPTION_AUTOSCAN = 0x00001000 # automatic LRSCAN before CHART (ESR, 2006) -OPTION_CAPTURE = 0x00002000 # Enable BSD-Trek capture (Almy, 2013). -OPTION_CLOAK = 0x80004000 # Enable BSD-Trek capture (Almy, 2013). -OPTION_PLAIN = 0x01000000 # user chose plain game +OPTION_AUTOPASS = 0x00000200 # Autogenerate password (Almy, 1997?) +OPTION_BLKHOLE = 0x00000400 # black hole may timewarp you (Stas, 2005) +OPTION_BASE = 0x00000800 # bases have good shields (Stas, 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) @@ -322,15 +323,17 @@ option_names = { "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, - "PLAIN": OPTION_PLAIN, + "ALMY": OPTION_ALMY, "COLOR": OPTION_COLOR, "DOTFILL": OPTION_DOTFILL, + "ALPHAMERIC": OPTION_ALPHAMERIC, } # Define devices @@ -1279,7 +1282,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): # Loop to move a single torpedo setwnd(message_window) for step in range(1, QUADSIZE*2): - if not track.nexttok(): + if not track.nextstep(): break w = track.sector() if not w.valid_sector(): @@ -1303,7 +1306,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): # In the C/FORTRAN version, dispersion was 2.5 radians, which # is 143 degrees, which is almost exactly 4.8 clockface units displacement = course(track.bearing+rnd.real(-2.4, 2.4), distance=2**0.5) - displacement.nexttok() + displacement.nextstep() bumpto = displacement.sector() if not bumpto.valid_sector(): return hit @@ -1345,7 +1348,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): return None proutn(crmena(True, iquad, "sector", w)) displacement = course(track.bearing+rnd.real(-2.4, 2.4), distance=2**0.5, origin=w) - displacement.nexttok() + displacement.nextstep() bumpto = displacement.sector() if game.quad[bumpto.i][bumpto.j] == ' ': prout(_(" buffeted into black hole.")) @@ -2547,7 +2550,7 @@ def events(): supercommander() elif evcode == FDSPROB: # Move deep space probe schedule(FDSPROB, 0.01) - if not game.probe.nexttok(): + if not game.probe.nextstep(): if not game.probe.quadrant().valid_quadrant() or \ game.state.galaxy[game.probe.quadrant().i][game.probe.quadrant().j].supernova: # Left galaxy or ran into supernova @@ -3884,7 +3887,7 @@ def imove(icourse=None, noattack=False): # Move out game.quad[game.sector.i][game.sector.j] = '.' for _m in range(icourse.moves): - icourse.nexttok() + icourse.nextstep() w = icourse.sector() if icourse.origin.quadrant() != icourse.location.quadrant(): newquadrant(noattack) @@ -4115,7 +4118,7 @@ class course: self.step = 0 def arrived(self): return self.location.roundtogrid() == self.final - def nexttok(self): + def nextstep(self): "Next step on course." self.step += 1 self.nextlocation = self.location + self.increment @@ -4264,7 +4267,7 @@ def warp(wcourse, involuntary): look = wcourse.moves while look > 0: look -= 1 - wcourse.nexttok() + wcourse.nextstep() w = wcourse.sector() if not w.valid_sector(): break @@ -4810,7 +4813,7 @@ def beam(): if not ja(): scanner.chew() return - if not (game.options & OPTION_PLAIN): + if (game.options & OPTION_ALMY): nrgneed = 50 * game.skill + game.height / 100.0 if nrgneed > game.energy: prout(_("Engineering to bridge--")) @@ -5077,7 +5080,10 @@ def deathray(): prouts(_("WHIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR")) skip(1) dprob = 0.30 - if game.options & OPTION_PLAIN: + # Ugh. This test (For Tom Almy's death-ray upgrade) was inverted for a long time. + # Furthermore, somebody (ESR or Stas?) changed Tom Almy's 0.7 upgraded chance of + # working to 0.5. + if game.options & OPTION_ALMY: dprob = 0.5 r = rnd.real() if r > dprob: @@ -5088,7 +5094,7 @@ def deathray(): prout(_("Ensign Chekov- \"Congratulations, Captain!\"")) if game.unwon() == 0: finish(FWON) - if (game.options & OPTION_PLAIN) == 0: + if (game.options & OPTION_ALMY): prout(_("Spock- \"Captain, I believe the `Experimental Death Ray'")) if rnd.withprob(0.05): prout(_(" is still operational.\"")) @@ -6009,7 +6015,7 @@ def choose(): return True if scanner.sees("regular"): break - proutn(_("What is \"%s\"? ") % scanner.token) + proutn(_("What game type is \"%s\"? ") % scanner.token) scanner.chew() while game.length==0 or game.skill==SKILL_NONE: if scanner.nexttok() == "IHALPHA": @@ -6030,7 +6036,7 @@ def choose(): elif scanner.sees("emeritus"): game.skill = SKILL_EMERITUS else: - proutn(_("What is \"")) + proutn(_("What skill level is is \"")) proutn(scanner.token) prout("\"?") else: @@ -6046,15 +6052,14 @@ def choose(): scanner.nexttok() if scanner.sees("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_DOTFILL | OPTION_ALPHAMERIC) - game.options |= OPTION_PLAIN + 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) elif scanner.sees("almy"): # Approximates Tom Almy's version. game.options &=~ (OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS | OPTION_COLOR | OPTION_DOTFILL | OPTION_ALPHAMERIC) elif scanner.sees("fancy") or scanner.sees("\n"): pass elif len(scanner.token): - proutn(_("What is \"%s\"?") % scanner.token) + proutn(_("What game style is \"%s\"?") % scanner.token) setpassword() if game.passwd == "debug": # pragma: no cover game.idebug = True @@ -6225,7 +6230,12 @@ def newqad(): def setpassword(): "Set the self-destruct password." - if game.options & OPTION_PLAIN: + if game.options & OPTION_AUTOPASS: + game.passwd = "" + game.passwd += chr(ord('a')+rnd.integer(26)) + game.passwd += chr(ord('a')+rnd.integer(26)) + game.passwd += chr(ord('a')+rnd.integer(26)) + else: while True: scanner.chew() proutn(_("Please type in a secret password- ")) @@ -6234,11 +6244,6 @@ def setpassword(): #game.passwd = getpass.getpass("Please type in a secret password- ") if game.passwd is not None: break - else: - game.passwd = "" - game.passwd += chr(ord('a')+rnd.integer(26)) - game.passwd += chr(ord('a')+rnd.integer(26)) - game.passwd += chr(ord('a')+rnd.integer(26)) # Code from sst.c begins here @@ -6779,7 +6784,7 @@ if __name__ == '__main__': game = Gamestate() rnd = randomizer() logfp = None - game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_PLAIN) + game.options = OPTION_ALL &~ OPTION_IOMODES if os.getenv("TERM"): game.options |= OPTION_CURSES # pragma: no cover else: @@ -6842,6 +6847,7 @@ if __name__ == '__main__': logfp.write("# SST2K version %s\n" % version) logfp.write("# recorded by %s@%s on %s\n" % \ (getpass.getuser(),socket.getfqdn(),time.ctime())) + logfp.write("#\n") rnd.seed(seed) scanner = sstscanner() for arg in arguments: