"""
import os, sys, math, curses, time, readline, cPickle, random, copy, gettext, getpass
-version="2.0"
+version="2.1"
docpath = (".", "../doc", "/usr/share/doc/sst")
game.nkinks = game.nhelp = game.casual = game.abandoned = 0
game.iscate = game.resting = game.imine = game.icrystl = game.icraft = False
game.isatb = game.state.nplankl = 0
- game.state.starkl = game.state.basekl = 0
+ game.state.starkl = game.state.basekl = game.state.nworldkl = 0
game.iscraft = "onship"
game.landed = False
game.alive = True
+
+ # the galaxy
+ game.state.galaxy = fill2d(GALSIZE, lambda i_unused, j_unused: Quadrant())
+ # the starchart
+ game.state.chart = fill2d(GALSIZE, lambda i_unused, j_unused: Page())
+
+ game.state.planets = [] # Planet information
+ game.state.baseq = [] # Base quadrant coordinates
+ game.state.kcmdr = [] # Commander quadrant coordinates
+ game.statekscmdr = Coord() # Supercommander quadrant coordinates
+
# Starchart is functional but we've never seen it
game.lastchart = FOREVER
# Put stars in the galaxy
if game.state.nscrem:
prout(_(" YOU'LL NEED IT."))
waitfor()
+ clrscr()
+ setwnd(message_window)
newqad()
if len(game.enemies) - (thing == game.quadrant) - (game.tholian != None):
game.shldup = True
# Code from sst.c begins here
-commands = {
- "SRSCAN": OPTION_TTY,
- "STATUS": OPTION_TTY,
- "REQUEST": OPTION_TTY,
- "LRSCAN": OPTION_TTY,
- "PHASERS": 0,
- "TORPEDO": 0,
- "PHOTONS": 0,
- "MOVE": 0,
- "SHIELDS": 0,
- "DOCK": 0,
- "DAMAGES": 0,
- "CHART": 0,
- "IMPULSE": 0,
- "REST": 0,
- "WARP": 0,
- "SCORE": 0,
- "SENSORS": OPTION_PLANETS,
- "ORBIT": OPTION_PLANETS,
- "TRANSPORT": OPTION_PLANETS,
- "MINE": OPTION_PLANETS,
- "CRYSTALS": OPTION_PLANETS,
- "SHUTTLE": OPTION_PLANETS,
- "PLANETS": OPTION_PLANETS,
- "REPORT": 0,
- "COMPUTER": 0,
- "COMMANDS": 0,
- "EMEXIT": 0,
- "PROBE": OPTION_PROBE,
- "SAVE": 0,
- "FREEZE": 0, # Synonym for SAVE
- "ABANDON": 0,
- "DESTRUCT": 0,
- "DEATHRAY": 0,
- "DEBUG": 0,
- "MAYDAY": 0,
- "SOS": 0, # Synonym for MAYDAY
- "CALL": 0, # Synonym for MAYDAY
- "QUIT": 0,
- "HELP": 0,
-}
+commands = [
+ ("SRSCAN", OPTION_TTY),
+ ("STATUS", OPTION_TTY),
+ ("REQUEST", OPTION_TTY),
+ ("LRSCAN", OPTION_TTY),
+ ("PHASERS", 0),
+ ("TORPEDO", 0),
+ ("PHOTONS", 0),
+ ("MOVE", 0),
+ ("SHIELDS", 0),
+ ("DOCK", 0),
+ ("DAMAGES", 0),
+ ("CHART", 0),
+ ("IMPULSE", 0),
+ ("REST", 0),
+ ("WARP", 0),
+ ("SCORE", 0),
+ ("SENSORS", OPTION_PLANETS),
+ ("ORBIT", OPTION_PLANETS),
+ ("TRANSPORT", OPTION_PLANETS),
+ ("MINE", OPTION_PLANETS),
+ ("CRYSTALS", OPTION_PLANETS),
+ ("SHUTTLE", OPTION_PLANETS),
+ ("PLANETS", OPTION_PLANETS),
+ ("REPORT", 0),
+ ("COMPUTER", 0),
+ ("COMMANDS", 0),
+ ("EMEXIT", 0),
+ ("PROBE", OPTION_PROBE),
+ ("SAVE", 0),
+ ("FREEZE", 0), # Synonym for SAVE
+ ("ABANDON", 0),
+ ("DESTRUCT", 0),
+ ("DEATHRAY", 0),
+ ("DEBUG", 0),
+ ("MAYDAY", 0),
+ ("SOS", 0), # Synonym for MAYDAY
+ ("CALL", 0), # Synonym for MAYDAY
+ ("QUIT", 0),
+ ("HELP", 0),
+ ("", 0),
+]
def listCommands():
"Generate a list of legal commands."
prout(_("LEGAL COMMANDS ARE:"))
emitted = 0
- for key in commands:
- if not commands[key] or (commands[key] & game.options):
+ for (key, opt) in commands:
+ if not opt or (opt & game.options):
proutn("%-12s " % key)
emitted += 1
if emitted % 5 == 4:
setwnd(message_window)
if key == "IHEOL":
return
- if scanner.token.upper() in commands or scanner.token == "ABBREV":
+ cmds = map(lambda x: x[0], commands)
+ if scanner.token.upper() in cmds or scanner.token.upper() == "ABBREV":
break
skip(1)
listCommands()
def makemoves():
"Command-interpretation loop."
- clrscr()
- setwnd(message_window)
while True: # command loop
drawmaps(1)
while True: # get a command
clrscr()
setwnd(message_window)
clrscr()
- candidates = filter(lambda x: x.startswith(scanner.token.upper()),
- commands)
- if len(candidates) == 1:
- cmd = candidates[0]
- break
- elif candidates and not (game.options & OPTION_PLAIN):
- prout("Commands with prefix '%s': %s" % (scanner.token, " ".join(candidates)))
- else:
+ abandon_passed = False
+ for (cmd, opt) in commands:
+ # commands after ABANDON cannot be abbreviated
+ if cmd == "ABANDON":
+ abandon_passed = True
+ if cmd == scanner.token.upper() or (not abandon_passed \
+ and cmd.startswith(scanner.token.upper())):
+ break;
+ if cmd == "":
listCommands()
continue
+ else:
+ break;
if cmd == "SRSCAN": # srscan
srscan()
elif cmd == "STATUS": # status
if logfp:
logfp.close()
print ""
+
+# End.