Enable GNU realine keys, fix a small but fatal bug.
[super-star-trek.git] / sst.py
diff --git a/sst.py b/sst.py
index 95b4722494b853fa58e1ba45c39fdcb69a46f376..8583af2c3ea94d94e466b9decebfb29e7b4ca257 100755 (executable)
--- a/sst.py
+++ b/sst.py
@@ -13,6 +13,13 @@ on how to modify (and how not to modify!) this code.
 """
 import os, sys, math, curses, time, readline, pickle, random, copy, gettext, getpass
 
 """
 import os, sys, math, curses, time, readline, pickle, random, copy, gettext, getpass
 
+# This import only works on Unixes.  The intention is to enable
+# Ctrl-P, Ctrl-N, and friends in Cmd.
+try:
+    import readline
+except ImportError:
+    pass
+
 version = "2.1"
 
 docpath        = (".", "../doc", "/usr/share/doc/sst")
 version = "2.1"
 
 docpath        = (".", "../doc", "/usr/share/doc/sst")
@@ -21,11 +28,11 @@ def _(st):
     return gettext.gettext(st)
 
 GALSIZE        = 8             # Galaxy size in quadrants
     return gettext.gettext(st)
 
 GALSIZE        = 8             # Galaxy size in quadrants
-NINHAB         = (GALSIZE * GALSIZE / 2)       # Number of inhabited worlds
+NINHAB         = (GALSIZE * GALSIZE // 2)      # Number of inhabited worlds
 MAXUNINHAB     = 10            # Maximum uninhabited worlds
 QUADSIZE       = 10            # Quadrant size in sectors
 BASEMIN                = 2                             # Minimum starbases
 MAXUNINHAB     = 10            # Maximum uninhabited worlds
 QUADSIZE       = 10            # Quadrant size in sectors
 BASEMIN                = 2                             # Minimum starbases
-BASEMAX        = (GALSIZE * GALSIZE / 12)      # Maximum starbases
+BASEMAX        = (GALSIZE * GALSIZE // 12)     # Maximum starbases
 MAXKLGAME      = 127           # Maximum Klingons per game
 MAXKLQUAD      = 9             # Maximum Klingons per quadrant
 FULLCREW       = 428           # Crew size. BSD Trek was 387, that's wrong 
 MAXKLGAME      = 127           # Maximum Klingons per game
 MAXKLQUAD      = 9             # Maximum Klingons per quadrant
 FULLCREW       = 428           # Crew size. BSD Trek was 387, that's wrong 
@@ -66,7 +73,7 @@ class Coord:
     def valid_quadrant(self):
         return self.i >= 0 and self.i < GALSIZE and self.j >= 0 and self.j < GALSIZE
     def valid_sector(self):
     def valid_quadrant(self):
         return self.i >= 0 and self.i < GALSIZE and self.j >= 0 and self.j < GALSIZE
     def valid_sector(self):
-       return self.i >= 0 and self.i < QUADSIZE and self.j >= 0 and self.j < QUADSIZE
+        return self.i >= 0 and self.i < QUADSIZE and self.j >= 0 and self.j < QUADSIZE
     def invalidate(self):
         self.i = self.j = None
     def is_valid(self):
     def invalidate(self):
         self.i = self.j = None
     def is_valid(self):
@@ -136,12 +143,12 @@ class Thingy(Coord):
 
 class Planet:
     def __init__(self):
 
 class Planet:
     def __init__(self):
-        self.name = None       # string-valued if inhabited
-        self.quadrant = Coord()        # quadrant located
-        self.pclass = None     # could be ""M", "N", "O", or "destroyed"
+        self.name = None        # string-valued if inhabited
+        self.quadrant = Coord()        # quadrant located
+        self.pclass = None        # could be ""M", "N", "O", or "destroyed"
         self.crystals = "absent"# could be "mined", "present", "absent"
         self.crystals = "absent"# could be "mined", "present", "absent"
-        self.known = "unknown" # could be "unknown", "known", "shuttle_down"
-        self.inhabited = False # is it inhabited?
+        self.known = "unknown"        # could be "unknown", "known", "shuttle_down"
+        self.inhabited = False        # is it inhabited?
     def __str__(self):
         return self.name
 
     def __str__(self):
         return self.name
 
@@ -149,18 +156,18 @@ class Quadrant:
     def __init__(self):
         self.stars = 0
         self.planet = None
     def __init__(self):
         self.stars = 0
         self.planet = None
-       self.starbase = False
-       self.klingons = 0
-       self.romulans = 0
-       self.supernova = False
-       self.charted = False
-        self.status = "secure" # Could be "secure", "distressed", "enslaved"
+        self.starbase = False
+        self.klingons = 0
+        self.romulans = 0
+        self.supernova = False
+        self.charted = False
+        self.status = "secure"        # Could be "secure", "distressed", "enslaved"
 
 class Page:
     def __init__(self):
 
 class Page:
     def __init__(self):
-       self.stars = None
-       self.starbase = False
-       self.klingons = None
+        self.stars = None
+        self.starbase = False
+        self.klingons = None
     def __repr__(self):
         return "<%s,%s,%s>" % (self.klingons, self.starbase, self.stars)
 
     def __repr__(self):
         return "<%s,%s,%s>" % (self.klingons, self.starbase, self.stars)
 
@@ -175,77 +182,77 @@ def fill2d(size, fillfun):
 
 class Snapshot:
     def __init__(self):
 
 class Snapshot:
     def __init__(self):
-        self.snap = False      # snapshot taken
-        self.crew = 0          # crew complement
-       self.remkl = 0          # remaining klingons
-       self.nscrem = 0         # remaining super commanders
-       self.starkl = 0         # destroyed stars
-       self.basekl = 0         # destroyed bases
-       self.nromrem = 0        # Romulans remaining
-       self.nplankl = 0        # destroyed uninhabited planets
-       self.nworldkl = 0       # destroyed inhabited planets
-        self.planets = []      # Planet information
-        self.date = 0.0        # stardate
-       self.remres = 0         # remaining resources
-       self.remtime = 0        # remaining time
-        self.baseq = []        # Base quadrant coordinates
-        self.kcmdr = []        # Commander quadrant coordinates
-       self.kscmdr = Coord()   # Supercommander quadrant coordinates
+        self.snap = False        # snapshot taken
+        self.crew = 0           # crew complement
+        self.remkl = 0          # remaining klingons
+        self.nscrem = 0                # remaining super commanders
+        self.starkl = 0         # destroyed stars
+        self.basekl = 0         # destroyed bases
+        self.nromrem = 0        # Romulans remaining
+        self.nplankl = 0        # destroyed uninhabited planets
+        self.nworldkl = 0        # destroyed inhabited planets
+        self.planets = []        # Planet information
+        self.date = 0.0           # stardate
+        self.remres = 0         # remaining resources
+        self.remtime = 0        # remaining time
+        self.baseq = []         # Base quadrant coordinates
+        self.kcmdr = []         # Commander quadrant coordinates
+        self.kscmdr = Coord()        # Supercommander quadrant coordinates
         # the galaxy
         self.galaxy = fill2d(GALSIZE, lambda i_unused, j_unused: Quadrant())
         # the starchart
         # the galaxy
         self.galaxy = fill2d(GALSIZE, lambda i_unused, j_unused: Quadrant())
         # the starchart
-       self.chart = fill2d(GALSIZE, lambda i_unused, j_unused: Page())
+        self.chart = fill2d(GALSIZE, lambda i_unused, j_unused: Page())
 
 class Event:
     def __init__(self):
 
 class Event:
     def __init__(self):
-        self.date = None       # A real number
-        self.quadrant = None   # A coord structure
+        self.date = None        # A real number
+        self.quadrant = None        # A coord structure
 
 # game options 
 
 # game options 
-OPTION_ALL     = 0xffffffff
-OPTION_TTY     = 0x00000001    # old interface 
-OPTION_CURSES  = 0x00000002    # new interface 
-OPTION_IOMODES = 0x00000003    # cover both interfaces 
-OPTION_PLANETS = 0x00000004    # planets and mining 
-OPTION_THOLIAN = 0x00000008    # Tholians and their webs (UT 1979 version)
-OPTION_THINGY  = 0x00000010    # Space Thingy can shoot back (Stas, 2005)
-OPTION_PROBE   = 0x00000020    # deep-space probes (DECUS version, 1980)
-OPTION_SHOWME  = 0x00000040    # bracket Enterprise in chart 
-OPTION_RAMMING = 0x00000080    # enemies may ram Enterprise (Almy)
-OPTION_MVBADDY = 0x00000100    # more enemies can move (Almy)
-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_PLAIN   = 0x01000000    # user chose plain game 
-OPTION_ALMY    = 0x02000000    # user chose Almy variant 
-OPTION_COLOR    = 0x04000000   # enable color display (experimental, ESR, 2010)
+OPTION_ALL        = 0xffffffff
+OPTION_TTY        = 0x00000001        # old interface 
+OPTION_CURSES        = 0x00000002        # new interface 
+OPTION_IOMODES        = 0x00000003        # cover both interfaces 
+OPTION_PLANETS        = 0x00000004        # planets and mining 
+OPTION_THOLIAN        = 0x00000008        # Tholians and their webs (UT 1979 version)
+OPTION_THINGY        = 0x00000010        # Space Thingy can shoot back (Stas, 2005)
+OPTION_PROBE        = 0x00000020        # deep-space probes (DECUS version, 1980)
+OPTION_SHOWME        = 0x00000040        # bracket Enterprise in chart 
+OPTION_RAMMING        = 0x00000080        # enemies may ram Enterprise (Almy)
+OPTION_MVBADDY        = 0x00000100        # more enemies can move (Almy)
+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_PLAIN        = 0x01000000        # user chose plain game 
+OPTION_ALMY        = 0x02000000        # user chose Almy variant 
+OPTION_COLOR    = 0x04000000        # enable color display (experimental, ESR, 2010)
 
 # Define devices 
 
 # Define devices 
-DSRSENS         = 0
-DLRSENS         = 1
-DPHASER         = 2
-DPHOTON         = 3
-DLIFSUP         = 4
-DWARPEN         = 5
-DIMPULS         = 6
-DSHIELD         = 7
-DRADIO  = 0
+DSRSENS         = 0
+DLRSENS         = 1
+DPHASER         = 2
+DPHOTON         = 3
+DLIFSUP         = 4
+DWARPEN         = 5
+DIMPULS         = 6
+DSHIELD         = 7
+DRADIO         = 0
 DSHUTTL  = 9
 DCOMPTR  = 10
 DSHUTTL  = 9
 DCOMPTR  = 10
-DNAVSYS         = 11
+DNAVSYS         = 11
 DTRANSP  = 12
 DTRANSP  = 12
-DSHCTRL         = 13
-DDRAY   = 14
-DDSP    = 15
-NDEVICES = 16  # Number of devices
-
-SKILL_NONE     = 0
-SKILL_NOVICE   = 1
-SKILL_FAIR     = 2
-SKILL_GOOD     = 3
-SKILL_EXPERT   = 4
-SKILL_EMERITUS = 5
+DSHCTRL         = 13
+DDRAY         = 14
+DDSP         = 15
+NDEVICES = 16        # Number of devices
+
+SKILL_NONE        = 0
+SKILL_NOVICE        = 1
+SKILL_FAIR        = 2
+SKILL_GOOD        = 3
+SKILL_EXPERT        = 4
+SKILL_EMERITUS        = 5
 
 def damaged(dev):
     return (game.damage[dev] != 0.0)
 
 def damaged(dev):
     return (game.damage[dev] != 0.0)
@@ -253,20 +260,20 @@ def communicating():
     return not damaged(DRADIO) or game.condition=="docked"
 
 # Define future events 
     return not damaged(DRADIO) or game.condition=="docked"
 
 # Define future events 
-FSPY   = 0     # Spy event happens always (no future[] entry)
-               # can cause SC to tractor beam Enterprise
-FSNOVA  = 1    # Supernova
-FTBEAM  = 2    # Commander tractor beams Enterprise
-FSNAP   = 3    # Snapshot for time warp
-FBATTAK = 4    # Commander attacks base
-FCDBAS  = 5    # Commander destroys base
-FSCMOVE = 6    # Supercommander moves (might attack base)
-FSCDBAS = 7    # Supercommander destroys base
-FDSPROB = 8    # Move deep space probe
-FDISTR = 9     # Emit distress call from an inhabited world 
-FENSLV = 10    # Inhabited word is enslaved */
-FREPRO = 11    # Klingons build a ship in an enslaved system
-NEVENTS        = 12
+FSPY        = 0        # Spy event happens always (no future[] entry)
+                # can cause SC to tractor beam Enterprise
+FSNOVA  = 1        # Supernova
+FTBEAM  = 2        # Commander tractor beams Enterprise
+FSNAP   = 3        # Snapshot for time warp
+FBATTAK = 4        # Commander attacks base
+FCDBAS  = 5        # Commander destroys base
+FSCMOVE = 6        # Supercommander moves (might attack base)
+FSCDBAS = 7        # Supercommander destroys base
+FDSPROB = 8        # Move deep space probe
+FDISTR        = 9        # Emit distress call from an inhabited world 
+FENSLV        = 10        # Inhabited word is enslaved */
+FREPRO        = 11        # Klingons build a ship in an enslaved system
+NEVENTS        = 12
 
 # Abstract out the event handling -- underlying data structures will change
 # when we implement stateful events 
 
 # Abstract out the event handling -- underlying data structures will change
 # when we implement stateful events 
@@ -281,7 +288,7 @@ class Enemy:
         self.kavgd = None
         if loc:
             self.move(loc)
         self.kavgd = None
         if loc:
             self.move(loc)
-        self.power = power     # enemy energy level
+        self.power = power        # enemy energy level
         game.enemies.append(self)
     def move(self, loc):
         motion = (loc != self.location)
         game.enemies.append(self)
     def move(self, loc):
         motion = (loc != self.location)
@@ -301,95 +308,95 @@ class Enemy:
             game.enemies.remove(self)
         return motion
     def __repr__(self):
             game.enemies.remove(self)
         return motion
     def __repr__(self):
-        return "<%s,%s.%f>" % (self.type, self.location, self.power)   # For debugging
+        return "<%s,%s.%f>" % (self.type, self.location, self.power)        # For debugging
 
 class Gamestate:
     def __init__(self):
 
 class Gamestate:
     def __init__(self):
-        self.options = None    # Game options
-        self.state = Snapshot()        # A snapshot structure
-        self.snapsht = Snapshot()      # Last snapshot taken for time-travel purposes
-        self.quad = None       # contents of our quadrant
-        self.damage = [0.0] * NDEVICES # damage encountered
-        self.future = []       # future events
+        self.options = None        # Game options
+        self.state = Snapshot()        # A snapshot structure
+        self.snapsht = Snapshot()        # Last snapshot taken for time-travel purposes
+        self.quad = None        # contents of our quadrant
+        self.damage = [0.0] * NDEVICES        # damage encountered
+        self.future = []        # future events
         i = NEVENTS
         while i > 0:
             i -= 1
             self.future.append(Event())
         i = NEVENTS
         while i > 0:
             i -= 1
             self.future.append(Event())
-        self.passwd  = None    # Self Destruct password
+        self.passwd  = None        # Self Destruct password
         self.enemies = []
         self.enemies = []
-        self.quadrant = None   # where we are in the large
-        self.sector = None     # where we are in the small
-        self.tholian = None    # Tholian enemy object
-        self.base = None       # position of base in current quadrant
-        self.battle = None     # base coordinates being attacked
-        self.plnet = None      # location of planet in quadrant
-        self.gamewon = False   # Finished!
-        self.ididit = False    # action taken -- allows enemy to attack
-        self.alive = False     # we are alive (not killed)
-        self.justin = False    # just entered quadrant
-        self.shldup = False    # shields are up
-        self.shldchg = False   # shield is changing (affects efficiency)
-        self.iscate = False    # super commander is here
-        self.ientesc = False   # attempted escape from supercommander
-        self.resting = False   # rest time
-        self.icraft = False    # Kirk in Galileo
-        self.landed = False    # party on planet (true), on ship (false)
-        self.alldone = False   # game is now finished
-        self.neutz = False     # Romulan Neutral Zone
-        self.isarmed = False   # probe is armed
-        self.inorbit = False   # orbiting a planet
-        self.imine = False     # mining
-        self.icrystl = False   # dilithium crystals aboard
-        self.iseenit = False   # seen base attack report
-        self.thawed = False    # thawed game
-        self.condition = None  # "green", "yellow", "red", "docked", "dead"
-        self.iscraft = None    # "onship", "offship", "removed"
-        self.skill = None      # Player skill level
-        self.inkling = 0       # initial number of klingons
-        self.inbase = 0                # initial number of bases
-        self.incom = 0         # initial number of commanders
-        self.inscom = 0                # initial number of commanders
-        self.inrom = 0         # initial number of commanders
-        self.instar = 0                # initial stars
-        self.intorps = 0       # initial/max torpedoes
-        self.torps = 0         # number of torpedoes
-        self.ship = 0          # ship type -- 'E' is Enterprise
-        self.abandoned = 0     # count of crew abandoned in space
-        self.length = 0                # length of game
-        self.klhere = 0                # klingons here
-        self.casual = 0                # causalties
-        self.nhelp = 0         # calls for help
-        self.nkinks = 0                # count of energy-barrier crossings
-        self.iplnet = None     # planet # in quadrant
-        self.inplan = 0                # initial planets
-        self.irhere = 0                # Romulans in quadrant
-        self.isatb = 0         # =2 if super commander is attacking base
-        self.tourn = None      # tournament number
-        self.nprobes = 0       # number of probes available
-        self.inresor = 0.0     # initial resources
-        self.intime = 0.0      # initial time
-        self.inenrg = 0.0      # initial/max energy
-        self.inshld = 0.0      # initial/max shield
-        self.inlsr = 0.0       # initial life support resources
-        self.indate = 0.0      # initial date
-        self.energy = 0.0      # energy level
-        self.shield = 0.0      # shield level
-        self.warpfac = 0.0     # warp speed
-        self.lsupres = 0.0     # life support reserves
-        self.optime = 0.0      # time taken by current operation
-        self.damfac = 0.0      # damage factor
-        self.lastchart = 0.0   # time star chart was last updated
-        self.cryprob = 0.0     # probability that crystal will work
-        self.probe = None      # object holding probe course info
-        self.height = 0.0      # height of orbit around planet
-        self.score = 0.0       # overall score
-        self.perdate = 0.0     # rate of kills
-        self.idebug = False    # Debugging instrumentation enabled?
+        self.quadrant = None        # where we are in the large
+        self.sector = None        # where we are in the small
+        self.tholian = None        # Tholian enemy object
+        self.base = None        # position of base in current quadrant
+        self.battle = None        # base coordinates being attacked
+        self.plnet = None        # location of planet in quadrant
+        self.gamewon = False        # Finished!
+        self.ididit = False        # action taken -- allows enemy to attack
+        self.alive = False        # we are alive (not killed)
+        self.justin = False        # just entered quadrant
+        self.shldup = False        # shields are up
+        self.shldchg = False        # shield is changing (affects efficiency)
+        self.iscate = False        # super commander is here
+        self.ientesc = False        # attempted escape from supercommander
+        self.resting = False        # rest time
+        self.icraft = False        # Kirk in Galileo
+        self.landed = False        # party on planet (true), on ship (false)
+        self.alldone = False        # game is now finished
+        self.neutz = False        # Romulan Neutral Zone
+        self.isarmed = False        # probe is armed
+        self.inorbit = False        # orbiting a planet
+        self.imine = False        # mining
+        self.icrystl = False        # dilithium crystals aboard
+        self.iseenit = False        # seen base attack report
+        self.thawed = False        # thawed game
+        self.condition = None        # "green", "yellow", "red", "docked", "dead"
+        self.iscraft = None        # "onship", "offship", "removed"
+        self.skill = None        # Player skill level
+        self.inkling = 0        # initial number of klingons
+        self.inbase = 0                # initial number of bases
+        self.incom = 0                # initial number of commanders
+        self.inscom = 0                # initial number of commanders
+        self.inrom = 0                # initial number of commanders
+        self.instar = 0                # initial stars
+        self.intorps = 0        # initial/max torpedoes
+        self.torps = 0                # number of torpedoes
+        self.ship = 0                # ship type -- 'E' is Enterprise
+        self.abandoned = 0        # count of crew abandoned in space
+        self.length = 0                # length of game
+        self.klhere = 0                # klingons here
+        self.casual = 0                # causalties
+        self.nhelp = 0                # calls for help
+        self.nkinks = 0                # count of energy-barrier crossings
+        self.iplnet = None        # planet # in quadrant
+        self.inplan = 0                # initial planets
+        self.irhere = 0                # Romulans in quadrant
+        self.isatb = 0                # =2 if super commander is attacking base
+        self.tourn = None        # tournament number
+        self.nprobes = 0        # number of probes available
+        self.inresor = 0.0        # initial resources
+        self.intime = 0.0        # initial time
+        self.inenrg = 0.0        # initial/max energy
+        self.inshld = 0.0        # initial/max shield
+        self.inlsr = 0.0        # initial life support resources
+        self.indate = 0.0        # initial date
+        self.energy = 0.0        # energy level
+        self.shield = 0.0        # shield level
+        self.warpfac = 0.0        # warp speed
+        self.lsupres = 0.0        # life support reserves
+        self.optime = 0.0        # time taken by current operation
+        self.damfac = 0.0        # damage factor
+        self.lastchart = 0.0        # time star chart was last updated
+        self.cryprob = 0.0        # probability that crystal will work
+        self.probe = None        # object holding probe course info
+        self.height = 0.0        # height of orbit around planet
+        self.score = 0.0        # overall score
+        self.perdate = 0.0        # rate of kills
+        self.idebug = False        # Debugging instrumentation enabled?
         self.statekscmdr = None # No SuperCommander coordinates yet.
     def recompute(self):
         # Stas thinks this should be (C expression): 
         # game.state.remkl + len(game.state.kcmdr) > 0 ?
         self.statekscmdr = None # No SuperCommander coordinates yet.
     def recompute(self):
         # Stas thinks this should be (C expression): 
         # game.state.remkl + len(game.state.kcmdr) > 0 ?
-       #       game.state.remres/(game.state.remkl + 4*len(game.state.kcmdr)) : 99
+        #        game.state.remres/(game.state.remkl + 4*len(game.state.kcmdr)) : 99
         # He says the existing expression is prone to divide-by-zero errors
         # after killing the last klingon when score is shown -- perhaps also
         # if the only remaining klingon is SCOM.
         # He says the existing expression is prone to divide-by-zero errors
         # after killing the last klingon when score is shown -- perhaps also
         # if the only remaining klingon is SCOM.
@@ -427,9 +434,9 @@ def randrange(*args):
 def randreal(*args):
     v = random.random()
     if len(args) == 1:
 def randreal(*args):
     v = random.random()
     if len(args) == 1:
-        v *= args[0]           # from [0, args[0])
+        v *= args[0]                 # from [0, args[0])
     elif len(args) == 2:
     elif len(args) == 2:
-        v = args[0] + v*(args[1]-args[0])      # from [args[0], args[1])
+        v = args[0] + v*(args[1]-args[0])        # from [args[0], args[1])
     return v
 
 # Code from ai.c begins here
     return v
 
 # Code from ai.c begins here
@@ -437,8 +444,8 @@ def randreal(*args):
 def welcoming(iq):
     "Would this quadrant welcome another Klingon?"
     return iq.valid_quadrant() and \
 def welcoming(iq):
     "Would this quadrant welcome another Klingon?"
     return iq.valid_quadrant() and \
-       not game.state.galaxy[iq.i][iq.j].supernova and \
-       game.state.galaxy[iq.i][iq.j].klingons < MAXKLQUAD
+        not game.state.galaxy[iq.i][iq.j].supernova and \
+        game.state.galaxy[iq.i][iq.j].klingons < MAXKLQUAD
 
 def tryexit(enemy, look, irun):
     "A bad guy attempts to bug out."
 
 def tryexit(enemy, look, irun):
     "A bad guy attempts to bug out."
@@ -446,41 +453,41 @@ def tryexit(enemy, look, irun):
     iq.i = game.quadrant.i+(look.i+(QUADSIZE-1))/QUADSIZE - 1
     iq.j = game.quadrant.j+(look.j+(QUADSIZE-1))/QUADSIZE - 1
     if not welcoming(iq):
     iq.i = game.quadrant.i+(look.i+(QUADSIZE-1))/QUADSIZE - 1
     iq.j = game.quadrant.j+(look.j+(QUADSIZE-1))/QUADSIZE - 1
     if not welcoming(iq):
-       return False
+        return False
     if enemy.type == 'R':
     if enemy.type == 'R':
-       return False # Romulans cannot escape! 
+        return False # Romulans cannot escape! 
     if not irun:
     if not irun:
-       # avoid intruding on another commander's territory 
-       if enemy.type == 'C':
+        # avoid intruding on another commander's territory 
+        if enemy.type == 'C':
             if iq in game.state.kcmdr:
                 return []
             if iq in game.state.kcmdr:
                 return []
-           # refuse to leave if currently attacking starbase 
-           if game.battle == game.quadrant:
-               return []
-       # don't leave if over 1000 units of energy 
-       if enemy.power > 1000.0:
-           return []
+            # refuse to leave if currently attacking starbase 
+            if game.battle == game.quadrant:
+                return []
+        # don't leave if over 1000 units of energy 
+        if enemy.power > 1000.0:
+            return []
     oldloc = copy.copy(enemy.location)
     # handle local matters related to escape
     enemy.move(None)
     game.klhere -= 1
     if game.condition != "docked":
     oldloc = copy.copy(enemy.location)
     # handle local matters related to escape
     enemy.move(None)
     game.klhere -= 1
     if game.condition != "docked":
-       newcnd()
+        newcnd()
     # Handle global matters related to escape 
     game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons -= 1
     game.state.galaxy[iq.i][iq.j].klingons += 1
     if enemy.type == 'S':
     # Handle global matters related to escape 
     game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons -= 1
     game.state.galaxy[iq.i][iq.j].klingons += 1
     if enemy.type == 'S':
-       game.iscate = False
-       game.ientesc = False
-       game.isatb = 0
-       schedule(FSCMOVE, 0.2777)
-       unschedule(FSCDBAS)
-       game.state.kscmdr = iq
+        game.iscate = False
+        game.ientesc = False
+        game.isatb = 0
+        schedule(FSCMOVE, 0.2777)
+        unschedule(FSCDBAS)
+        game.state.kscmdr = iq
     else:
     else:
-       for cmdr in game.state.kcmdr:
-           if cmdr == game.quadrant:
-               game.state.kcmdr.append(iq)
-               break
+        for cmdr in game.state.kcmdr:
+            if cmdr == game.quadrant:
+                game.state.kcmdr.append(iq)
+                break
     # report move out of quadrant.
     return [(True, enemy, oldloc, ibq)]
 
     # report move out of quadrant.
     return [(True, enemy, oldloc, ibq)]
 
@@ -529,48 +536,48 @@ def movebaddy(enemy):
     irun = False
     # This should probably be just (game.quadrant in game.state.kcmdr) + (game.state.kscmdr==game.quadrant) 
     if game.skill >= SKILL_EXPERT:
     irun = False
     # This should probably be just (game.quadrant in game.state.kcmdr) + (game.state.kscmdr==game.quadrant) 
     if game.skill >= SKILL_EXPERT:
-       nbaddys = (((game.quadrant in game.state.kcmdr)*2 + (game.state.kscmdr==game.quadrant)*2+game.klhere*1.23+game.irhere*1.5)/2.0)
+        nbaddys = (((game.quadrant in game.state.kcmdr)*2 + (game.state.kscmdr==game.quadrant)*2+game.klhere*1.23+game.irhere*1.5)/2.0)
     else:
     else:
-       nbaddys = (game.quadrant in game.state.kcmdr) + (game.state.kscmdr==game.quadrant)
+        nbaddys = (game.quadrant in game.state.kcmdr) + (game.state.kscmdr==game.quadrant)
     old_dist = enemy.kdist
     mdist = int(old_dist + 0.5) # Nearest integer distance 
     # If SC, check with spy to see if should hi-tail it 
     if enemy.type == 'S' and \
     old_dist = enemy.kdist
     mdist = int(old_dist + 0.5) # Nearest integer distance 
     # If SC, check with spy to see if should hi-tail it 
     if enemy.type == 'S' and \
-       (enemy.power <= 500.0 or (game.condition=="docked" and not damaged(DPHOTON))):
-       irun = True
-       motion = -QUADSIZE
+        (enemy.power <= 500.0 or (game.condition=="docked" and not damaged(DPHOTON))):
+        irun = True
+        motion = -QUADSIZE
     else:
     else:
-       # decide whether to advance, retreat, or hold position 
-       forces = enemy.power+100.0*len(game.enemies)+400*(nbaddys-1)
-       if not game.shldup:
-           forces += 1000 # Good for enemy if shield is down! 
-       if not damaged(DPHASER) or not damaged(DPHOTON):
+        # decide whether to advance, retreat, or hold position 
+        forces = enemy.power+100.0*len(game.enemies)+400*(nbaddys-1)
+        if not game.shldup:
+            forces += 1000 # Good for enemy if shield is down! 
+        if not damaged(DPHASER) or not damaged(DPHOTON):
             if damaged(DPHASER): # phasers damaged 
             if damaged(DPHASER): # phasers damaged 
-               forces += 300.0
-           else:
-               forces -= 0.2*(game.energy - 2500.0)
-           if damaged(DPHOTON): # photon torpedoes damaged 
-               forces += 300.0
-           else:
-               forces -= 50.0*game.torps
-       else:
-           # phasers and photon tubes both out! 
-           forces += 1000.0
-       motion = 0
+                forces += 300.0
+            else:
+                forces -= 0.2*(game.energy - 2500.0)
+            if damaged(DPHOTON): # photon torpedoes damaged 
+                forces += 300.0
+            else:
+                forces -= 50.0*game.torps
+        else:
+            # phasers and photon tubes both out! 
+            forces += 1000.0
+        motion = 0
         if forces <= 1000.0 and game.condition != "docked": # Typical situation 
         if forces <= 1000.0 and game.condition != "docked": # Typical situation 
-           motion = ((forces + randreal(200))/150.0) - 5.0
-       else:
+            motion = ((forces + randreal(200))/150.0) - 5.0
+        else:
             if forces > 1000.0: # Very strong -- move in for kill 
             if forces > 1000.0: # Very strong -- move in for kill 
-               motion = (1.0 - randreal())**2 * old_dist + 1.0
-           if game.condition == "docked" and (game.options & OPTION_BASE): # protected by base -- back off ! 
-               motion -= game.skill*(2.0-randreal()**2)
-       if game.idebug:
-           proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
-       # don't move if no motion 
-       if motion == 0:
-           return []
-       # Limit motion according to skill 
-       if abs(motion) > game.skill:
+                motion = (1.0 - randreal())**2 * old_dist + 1.0
+            if game.condition == "docked" and (game.options & OPTION_BASE): # protected by base -- back off ! 
+                motion -= game.skill*(2.0-randreal()**2)
+        if game.idebug:
+            proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
+        # don't move if no motion 
+        if motion == 0:
+            return []
+        # Limit motion according to skill 
+        if abs(motion) > game.skill:
             if motion < 0:
                 motion = -game.skill
             else:
             if motion < 0:
                 motion = -game.skill
             else:
@@ -578,27 +585,27 @@ def movebaddy(enemy):
     # calculate preferred number of steps 
     nsteps = abs(int(motion))
     if motion > 0 and nsteps > mdist:
     # calculate preferred number of steps 
     nsteps = abs(int(motion))
     if motion > 0 and nsteps > mdist:
-       nsteps = mdist # don't overshoot 
+        nsteps = mdist # don't overshoot 
     if nsteps > QUADSIZE:
     if nsteps > QUADSIZE:
-       nsteps = QUADSIZE # This shouldn't be necessary 
+        nsteps = QUADSIZE # This shouldn't be necessary 
     if nsteps < 1:
     if nsteps < 1:
-       nsteps = 1 # This shouldn't be necessary 
+        nsteps = 1 # This shouldn't be necessary 
     if game.idebug:
     if game.idebug:
-       proutn("NSTEPS = %d:" % nsteps)
+        proutn("NSTEPS = %d:" % nsteps)
     # Compute preferred values of delta X and Y 
     m = game.sector - enemy.location
     if 2.0 * abs(m.i) < abs(m.j):
     # Compute preferred values of delta X and Y 
     m = game.sector - enemy.location
     if 2.0 * abs(m.i) < abs(m.j):
-       m.i = 0
+        m.i = 0
     if 2.0 * abs(m.j) < abs(game.sector.i-enemy.location.i):
     if 2.0 * abs(m.j) < abs(game.sector.i-enemy.location.i):
-       m.j = 0
+        m.j = 0
     m = (motion * m).sgn()
     goto = enemy.location
     # main move loop 
     for ll in range(nsteps):
     m = (motion * m).sgn()
     goto = enemy.location
     # main move loop 
     for ll in range(nsteps):
-       if game.idebug:
-           proutn(" %d" % (ll+1))
-       # Check if preferred position available 
-       look = goto + m
+        if game.idebug:
+            proutn(" %d" % (ll+1))
+        # Check if preferred position available 
+        look = goto + m
         if m.i < 0:
             krawli = 1
         else:
         if m.i < 0:
             krawli = 1
         else:
@@ -607,115 +614,115 @@ def movebaddy(enemy):
             krawlj = 1
         else:
             krawlj = -1
             krawlj = 1
         else:
             krawlj = -1
-       success = False
-       attempts = 0 # Settle mysterious hang problem 
-       while attempts < 20 and not success:
+        success = False
+        attempts = 0 # Settle mysterious hang problem 
+        while attempts < 20 and not success:
             attempts += 1
             attempts += 1
-           if look.i < 0 or look.i >= QUADSIZE:
+            if look.i < 0 or look.i >= QUADSIZE:
+                if motion < 0:
+                    return tryexit(enemy, look, irun)
+                if krawli == m.i or m.j == 0:
+                    break
+                look.i = goto.i + krawli
+                krawli = -krawli
+            elif look.j < 0 or look.j >= QUADSIZE:
                 if motion < 0:
                 if motion < 0:
-                   return tryexit(enemy, look, irun)
-               if krawli == m.i or m.j == 0:
-                   break
-               look.i = goto.i + krawli
-               krawli = -krawli
-           elif look.j < 0 or look.j >= QUADSIZE:
-               if motion < 0:
-                   return tryexit(enemy, look, irun)
-               if krawlj == m.j or m.i == 0:
-                   break
-               look.j = goto.j + krawlj
-               krawlj = -krawlj
-           elif (game.options & OPTION_RAMMING) and game.quad[look.i][look.j] != '.':
-               # See if enemy should ram ship 
-               if game.quad[look.i][look.j] == game.ship and \
-                   (enemy.type == 'C' or enemy.type == 'S'):
-                   collision(rammed=True, enemy=enemy)
-                   return []
-               if krawli != m.i and m.j != 0:
-                   look.i = goto.i + krawli
-                   krawli = -krawli
-               elif krawlj != m.j and m.i != 0:
-                   look.j = goto.j + krawlj
-                   krawlj = -krawlj
-               else:
-                   break # we have failed 
-           else:
-               success = True
-       if success:
-           goto = look
-           if game.idebug:
-               proutn(repr(goto))
-       else:
-           break # done early 
+                    return tryexit(enemy, look, irun)
+                if krawlj == m.j or m.i == 0:
+                    break
+                look.j = goto.j + krawlj
+                krawlj = -krawlj
+            elif (game.options & OPTION_RAMMING) and game.quad[look.i][look.j] != '.':
+                # See if enemy should ram ship 
+                if game.quad[look.i][look.j] == game.ship and \
+                    (enemy.type == 'C' or enemy.type == 'S'):
+                    collision(rammed=True, enemy=enemy)
+                    return []
+                if krawli != m.i and m.j != 0:
+                    look.i = goto.i + krawli
+                    krawli = -krawli
+                elif krawlj != m.j and m.i != 0:
+                    look.j = goto.j + krawlj
+                    krawlj = -krawlj
+                else:
+                    break # we have failed 
+            else:
+                success = True
+        if success:
+            goto = look
+            if game.idebug:
+                proutn(repr(goto))
+        else:
+            break # done early 
     if game.idebug:
     if game.idebug:
-       skip(1)
+        skip(1)
     # Enemy moved, but is still in sector
     return [(False, enemy, old_dist, goto)]
 
 def moveklings():
     "Sequence Klingon tactical movement."
     if game.idebug:
     # Enemy moved, but is still in sector
     return [(False, enemy, old_dist, goto)]
 
 def moveklings():
     "Sequence Klingon tactical movement."
     if game.idebug:
-       prout("== MOVCOM")
+        prout("== MOVCOM")
     # Figure out which Klingon is the commander (or Supercommander)
     # and do move
     tacmoves = []
     if game.quadrant in game.state.kcmdr:
         for enemy in game.enemies:
     # Figure out which Klingon is the commander (or Supercommander)
     # and do move
     tacmoves = []
     if game.quadrant in game.state.kcmdr:
         for enemy in game.enemies:
-           if enemy.type == 'C':
-               tacmoves += movebaddy(enemy)
+            if enemy.type == 'C':
+                tacmoves += movebaddy(enemy)
     if game.state.kscmdr == game.quadrant:
         for enemy in game.enemies:
     if game.state.kscmdr == game.quadrant:
         for enemy in game.enemies:
-           if enemy.type == 'S':
-               tacmoves += movebaddy(enemy)
-               break
+            if enemy.type == 'S':
+                tacmoves += movebaddy(enemy)
+                break
     # If skill level is high, move other Klingons and Romulans too!
     # Move these last so they can base their actions on what the
     # commander(s) do.
     if game.skill >= SKILL_EXPERT and (game.options & OPTION_MVBADDY):
         for enemy in game.enemies:
             if enemy.type in ('K', 'R'):
     # If skill level is high, move other Klingons and Romulans too!
     # Move these last so they can base their actions on what the
     # commander(s) do.
     if game.skill >= SKILL_EXPERT and (game.options & OPTION_MVBADDY):
         for enemy in game.enemies:
             if enemy.type in ('K', 'R'):
-               tacmoves += movebaddy(enemy)
+                tacmoves += movebaddy(enemy)
     return tacmoves
 
 def movescom(iq, avoid):
     "Commander movement helper." 
     # Avoid quadrants with bases if we want to avoid Enterprise 
     if not welcoming(iq) or (avoid and iq in game.state.baseq):
     return tacmoves
 
 def movescom(iq, avoid):
     "Commander movement helper." 
     # Avoid quadrants with bases if we want to avoid Enterprise 
     if not welcoming(iq) or (avoid and iq in game.state.baseq):
-       return False
+        return False
     if game.justin and not game.iscate:
     if game.justin and not game.iscate:
-       return False
+        return False
     # do the move 
     game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].klingons -= 1
     game.state.kscmdr = iq
     game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].klingons += 1
     if game.state.kscmdr == game.quadrant:
     # do the move 
     game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].klingons -= 1
     game.state.kscmdr = iq
     game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].klingons += 1
     if game.state.kscmdr == game.quadrant:
-       # SC has scooted, remove him from current quadrant 
-       game.iscate = False
-       game.isatb = 0
-       game.ientesc = False
-       unschedule(FSCDBAS)
-       for enemy in game.enemies:
-           if enemy.type == 'S':
-               enemy.move(None)
-       game.klhere -= 1
-       if game.condition != "docked":
-           newcnd()
+        # SC has scooted, remove him from current quadrant 
+        game.iscate = False
+        game.isatb = 0
+        game.ientesc = False
+        unschedule(FSCDBAS)
+        for enemy in game.enemies:
+            if enemy.type == 'S':
+                enemy.move(None)
+        game.klhere -= 1
+        if game.condition != "docked":
+            newcnd()
         sortenemies()
     # check for a helpful planet 
     for i in range(game.inplan):
         sortenemies()
     # check for a helpful planet 
     for i in range(game.inplan):
-       if game.state.planets[i].quadrant == game.state.kscmdr and \
-           game.state.planets[i].crystals == "present":
-           # destroy the planet 
-           game.state.planets[i].pclass = "destroyed"
-           game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].planet = None
-           if communicating():
-               announce()
-               prout(_("Lt. Uhura-  \"Captain, Starfleet Intelligence reports"))
-               proutn(_("   a planet in Quadrant %s has been destroyed") % game.state.kscmdr)
-               prout(_("   by the Super-commander.\""))
-           break
+        if game.state.planets[i].quadrant == game.state.kscmdr and \
+            game.state.planets[i].crystals == "present":
+            # destroy the planet 
+            game.state.planets[i].pclass = "destroyed"
+            game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].planet = None
+            if communicating():
+                announce()
+                prout(_("Lt. Uhura-  \"Captain, Starfleet Intelligence reports"))
+                proutn(_("   a planet in Quadrant %s has been destroyed") % game.state.kscmdr)
+                prout(_("   by the Super-commander.\""))
+            break
     return True # looks good! 
     return True # looks good! 
-                       
+                        
 def supercommander():
     "Move the Super Commander." 
     iq = Coord()
 def supercommander():
     "Move the Super Commander." 
     iq = Coord()
@@ -724,51 +731,51 @@ def supercommander():
     idelta = Coord()
     basetbl = []
     if game.idebug:
     idelta = Coord()
     basetbl = []
     if game.idebug:
-       prout("== SUPERCOMMANDER")
+        prout("== SUPERCOMMANDER")
     # Decide on being active or passive 
     avoid = ((game.incom - len(game.state.kcmdr) + game.inkling - game.state.remkl)/(game.state.date+0.01-game.indate) < 0.1*game.skill*(game.skill+1.0) or \
     # Decide on being active or passive 
     avoid = ((game.incom - len(game.state.kcmdr) + game.inkling - game.state.remkl)/(game.state.date+0.01-game.indate) < 0.1*game.skill*(game.skill+1.0) or \
-           (game.state.date-game.indate) < 3.0)
+            (game.state.date-game.indate) < 3.0)
     if not game.iscate and avoid:
     if not game.iscate and avoid:
-       # compute move away from Enterprise 
-       idelta = game.state.kscmdr-game.quadrant
-       if idelta.distance() > 2.0:
-           # circulate in space 
-           idelta.i = game.state.kscmdr.j-game.quadrant.j
-           idelta.j = game.quadrant.i-game.state.kscmdr.i
+        # compute move away from Enterprise 
+        idelta = game.state.kscmdr-game.quadrant
+        if idelta.distance() > 2.0:
+            # circulate in space 
+            idelta.i = game.state.kscmdr.j-game.quadrant.j
+            idelta.j = game.quadrant.i-game.state.kscmdr.i
     else:
     else:
-       # compute distances to starbases 
-       if not game.state.baseq:
-           # nothing left to do 
-           unschedule(FSCMOVE)
-           return
-       sc = game.state.kscmdr
+        # compute distances to starbases 
+        if not game.state.baseq:
+            # nothing left to do 
+            unschedule(FSCMOVE)
+            return
+        sc = game.state.kscmdr
         for (i, base) in enumerate(game.state.baseq):
         for (i, base) in enumerate(game.state.baseq):
-           basetbl.append((i, (base - sc).distance()))
-       if game.state.baseq > 1:
-            basetbl.sort(lambda x, y: cmp(x[1], y[1]))
-       # look for nearest base without a commander, no Enterprise, and
+            basetbl.append((i, (base - sc).distance()))
+        if game.state.baseq > 1:
+            basetbl.sort(key=lambda x: x[1])
+        # look for nearest base without a commander, no Enterprise, and
         # without too many Klingons, and not already under attack. 
         # without too many Klingons, and not already under attack. 
-       ifindit = iwhichb = 0
-       for (i2, base) in enumerate(game.state.baseq):
-           i = basetbl[i2][0]  # bug in original had it not finding nearest
-           if base == game.quadrant or base == game.battle or not welcoming(base):
-               continue
-           # if there is a commander, and no other base is appropriate,
-           # we will take the one with the commander
+        ifindit = iwhichb = 0
+        for (i2, base) in enumerate(game.state.baseq):
+            i = basetbl[i2][0]        # bug in original had it not finding nearest
+            if base == game.quadrant or base == game.battle or not welcoming(base):
+                continue
+            # if there is a commander, and no other base is appropriate,
+            # we will take the one with the commander
             for cmdr in game.state.kcmdr:
             for cmdr in game.state.kcmdr:
-               if base == cmdr and ifindit != 2:
-                   ifindit = 2
-                   iwhichb = i
-                   break
-           else:       # no commander -- use this one 
-               ifindit = 1
-               iwhichb = i
-               break
-       if ifindit == 0:
-           return # Nothing suitable -- wait until next time
-       ibq = game.state.baseq[iwhichb]
-       # decide how to move toward base 
-       idelta = ibq - game.state.kscmdr
+                if base == cmdr and ifindit != 2:
+                    ifindit = 2
+                    iwhichb = i
+                    break
+            else:        # no commander -- use this one 
+                ifindit = 1
+                iwhichb = i
+                break
+        if ifindit == 0:
+            return # Nothing suitable -- wait until next time
+        ibq = game.state.baseq[iwhichb]
+        # decide how to move toward base 
+        idelta = ibq - game.state.kscmdr
     # Maximum movement is 1 quadrant in either or both axes 
     idelta = idelta.sgn()
     # try moving in both x and y directions
     # Maximum movement is 1 quadrant in either or both axes 
     idelta = idelta.sgn()
     # try moving in both x and y directions
@@ -776,63 +783,63 @@ def supercommander():
     # but it might be this translation is just wrong.
     iq = game.state.kscmdr + idelta
     if not movescom(iq, avoid):
     # but it might be this translation is just wrong.
     iq = game.state.kscmdr + idelta
     if not movescom(iq, avoid):
-       # failed -- try some other maneuvers 
-       if idelta.i == 0 or idelta.j == 0:
-           # attempt angle move 
-           if idelta.i != 0:
-               iq.j = game.state.kscmdr.j + 1
-               if not movescom(iq, avoid):
-                   iq.j = game.state.kscmdr.j - 1
-                   movescom(iq, avoid)
-           elif idelta.j != 0:
-               iq.i = game.state.kscmdr.i + 1
-               if not movescom(iq, avoid):
-                   iq.i = game.state.kscmdr.i - 1
-                   movescom(iq, avoid)
-       else:
-           # try moving just in x or y 
-           iq.j = game.state.kscmdr.j
-           if not movescom(iq, avoid):
-               iq.j = game.state.kscmdr.j + idelta.j
-               iq.i = game.state.kscmdr.i
-               movescom(iq, avoid)
+        # failed -- try some other maneuvers 
+        if idelta.i == 0 or idelta.j == 0:
+            # attempt angle move 
+            if idelta.i != 0:
+                iq.j = game.state.kscmdr.j + 1
+                if not movescom(iq, avoid):
+                    iq.j = game.state.kscmdr.j - 1
+                    movescom(iq, avoid)
+            elif idelta.j != 0:
+                iq.i = game.state.kscmdr.i + 1
+                if not movescom(iq, avoid):
+                    iq.i = game.state.kscmdr.i - 1
+                    movescom(iq, avoid)
+        else:
+            # try moving just in x or y 
+            iq.j = game.state.kscmdr.j
+            if not movescom(iq, avoid):
+                iq.j = game.state.kscmdr.j + idelta.j
+                iq.i = game.state.kscmdr.i
+                movescom(iq, avoid)
     # check for a base 
     if len(game.state.baseq) == 0:
     # check for a base 
     if len(game.state.baseq) == 0:
-       unschedule(FSCMOVE)
+        unschedule(FSCMOVE)
     else:
         for ibq in game.state.baseq:
     else:
         for ibq in game.state.baseq:
-           if ibq == game.state.kscmdr and game.state.kscmdr == game.battle:
-               # attack the base 
-               if avoid:
-                   return # no, don't attack base! 
-               game.iseenit = False
-               game.isatb = 1
-               schedule(FSCDBAS, randreal(1.0, 3.0))
-               if is_scheduled(FCDBAS):
-                   postpone(FSCDBAS, scheduled(FCDBAS)-game.state.date)
-               if not communicating():
-                   return # no warning 
-               game.iseenit = True
-               announce()
-               prout(_("Lt. Uhura-  \"Captain, the starbase in Quadrant %s") \
+            if ibq == game.state.kscmdr and game.state.kscmdr == game.battle:
+                # attack the base 
+                if avoid:
+                    return # no, don't attack base! 
+                game.iseenit = False
+                game.isatb = 1
+                schedule(FSCDBAS, randreal(1.0, 3.0))
+                if is_scheduled(FCDBAS):
+                    postpone(FSCDBAS, scheduled(FCDBAS)-game.state.date)
+                if not communicating():
+                    return # no warning 
+                game.iseenit = True
+                announce()
+                prout(_("Lt. Uhura-  \"Captain, the starbase in Quadrant %s") \
                       % game.state.kscmdr)
                       % game.state.kscmdr)
-               prout(_("   reports that it is under attack from the Klingon Super-commander."))
-               proutn(_("   It can survive until stardate %d.\"") \
+                prout(_("   reports that it is under attack from the Klingon Super-commander."))
+                proutn(_("   It can survive until stardate %d.\"") \
                        % int(scheduled(FSCDBAS)))
                        % int(scheduled(FSCDBAS)))
-               if not game.resting:
-                   return
-               prout(_("Mr. Spock-  \"Captain, shall we cancel the rest period?\""))
-               if not ja():
-                   return
-               game.resting = False
-               game.optime = 0.0 # actually finished 
-               return
+                if not game.resting:
+                    return
+                prout(_("Mr. Spock-  \"Captain, shall we cancel the rest period?\""))
+                if not ja():
+                    return
+                game.resting = False
+                game.optime = 0.0 # actually finished 
+                return
     # Check for intelligence report 
     if not game.idebug and \
     # Check for intelligence report 
     if not game.idebug and \
-       (withprob(0.8) or \
-        (not communicating()) or \
-        not game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].charted):
-       return
+        (withprob(0.8) or \
+         (not communicating()) or \
+         not game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].charted):
+        return
     announce()
     prout(_("Lt. Uhura-  \"Captain, Starfleet Intelligence reports"))
     proutn(_("   the Super-commander is in Quadrant %s,") % game.state.kscmdr)
     announce()
     prout(_("Lt. Uhura-  \"Captain, Starfleet Intelligence reports"))
     proutn(_("   the Super-commander is in Quadrant %s,") % game.state.kscmdr)
@@ -841,28 +848,28 @@ def supercommander():
 def movetholian():
     "Move the Tholian."
     if not game.tholian or game.justin:
 def movetholian():
     "Move the Tholian."
     if not game.tholian or game.justin:
-       return
+        return
     tid = Coord()
     if game.tholian.location.i == 0 and game.tholian.location.j == 0:
     tid = Coord()
     if game.tholian.location.i == 0 and game.tholian.location.j == 0:
-       tid.i = 0
+        tid.i = 0
         tid.j = QUADSIZE-1
     elif game.tholian.location.i == 0 and game.tholian.location.j == QUADSIZE-1:
         tid.j = QUADSIZE-1
     elif game.tholian.location.i == 0 and game.tholian.location.j == QUADSIZE-1:
-       tid.i = QUADSIZE-1
+        tid.i = QUADSIZE-1
         tid.j = QUADSIZE-1
     elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == QUADSIZE-1:
         tid.j = QUADSIZE-1
     elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == QUADSIZE-1:
-       tid.i = QUADSIZE-1
+        tid.i = QUADSIZE-1
         tid.j = 0
     elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
         tid.j = 0
     elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
-       tid.i = 0
+        tid.i = 0
         tid.j = 0
     else:
         tid.j = 0
     else:
-       # something is wrong! 
-       game.tholian.move(None)
+        # something is wrong! 
+        game.tholian.move(None)
         prout("***Internal error: Tholian in a bad spot.")
         prout("***Internal error: Tholian in a bad spot.")
-       return
+        return
     # do nothing if we are blocked 
     if game.quad[tid.i][tid.j] not in ('.', '#'):
     # do nothing if we are blocked 
     if game.quad[tid.i][tid.j] not in ('.', '#'):
-       return
+        return
     here = copy.copy(game.tholian.location)
     delta = (tid - game.tholian.location).sgn()
     # move in x axis 
     here = copy.copy(game.tholian.location)
     delta = (tid - game.tholian.location).sgn()
     # move in x axis 
@@ -877,14 +884,14 @@ def movetholian():
             game.tholian.move(here)
     # check to see if all holes plugged 
     for i in range(QUADSIZE):
             game.tholian.move(here)
     # check to see if all holes plugged 
     for i in range(QUADSIZE):
-       if game.quad[0][i] != '#' and game.quad[0][i] != 'T':
-           return
-       if game.quad[QUADSIZE-1][i] != '#' and game.quad[QUADSIZE-1][i] != 'T':
-           return
-       if game.quad[i][0] != '#' and game.quad[i][0] != 'T':
-           return
-       if game.quad[i][QUADSIZE-1] != '#' and game.quad[i][QUADSIZE-1] != 'T':
-           return
+        if game.quad[0][i] != '#' and game.quad[0][i] != 'T':
+            return
+        if game.quad[QUADSIZE-1][i] != '#' and game.quad[QUADSIZE-1][i] != 'T':
+            return
+        if game.quad[i][0] != '#' and game.quad[i][0] != 'T':
+            return
+        if game.quad[i][QUADSIZE-1] != '#' and game.quad[i][QUADSIZE-1] != 'T':
+            return
     # All plugged up -- Tholian splits 
     game.quad[game.tholian.location.i][game.tholian.location.j] = '#'
     dropin(' ')
     # All plugged up -- Tholian splits 
     game.quad[game.tholian.location.i][game.tholian.location.j] = '#'
     dropin(' ')
@@ -899,135 +906,135 @@ def doshield(shraise):
     action = "NONE"
     game.ididit = False
     if shraise:
     action = "NONE"
     game.ididit = False
     if shraise:
-       action = "SHUP"
+        action = "SHUP"
     else:
     else:
-       key = scanner.nexttok()
-       if key == "IHALPHA":
-           if scanner.sees("transfer"):
-               action = "NRG"
-           else:
-               if damaged(DSHIELD):
-                   prout(_("Shields damaged and down."))
-                   return
-               if scanner.sees("up"):
-                   action = "SHUP"
-               elif scanner.sees("down"):
-                   action = "SHDN"
-       if action == "NONE":
-           proutn(_("Do you wish to change shield energy? "))
-           if ja():
-               action = "NRG"
-           elif damaged(DSHIELD):
-               prout(_("Shields damaged and down."))
-               return
-           elif game.shldup:
-               proutn(_("Shields are up. Do you want them down? "))
-               if ja():
-                   action = "SHDN"
-               else:
-                   scanner.chew()
-                   return
-           else:
-               proutn(_("Shields are down. Do you want them up? "))
-               if ja():
-                   action = "SHUP"
-               else:
-                   scanner.chew()
-                   return
+        key = scanner.nexttok()
+        if key == "IHALPHA":
+            if scanner.sees("transfer"):
+                action = "NRG"
+            else:
+                if damaged(DSHIELD):
+                    prout(_("Shields damaged and down."))
+                    return
+                if scanner.sees("up"):
+                    action = "SHUP"
+                elif scanner.sees("down"):
+                    action = "SHDN"
+        if action == "NONE":
+            proutn(_("Do you wish to change shield energy? "))
+            if ja():
+                action = "NRG"
+            elif damaged(DSHIELD):
+                prout(_("Shields damaged and down."))
+                return
+            elif game.shldup:
+                proutn(_("Shields are up. Do you want them down? "))
+                if ja():
+                    action = "SHDN"
+                else:
+                    scanner.chew()
+                    return
+            else:
+                proutn(_("Shields are down. Do you want them up? "))
+                if ja():
+                    action = "SHUP"
+                else:
+                    scanner.chew()
+                    return
     if action == "SHUP": # raise shields 
     if action == "SHUP": # raise shields 
-       if game.shldup:
-           prout(_("Shields already up."))
-           return
-       game.shldup = True
-       game.shldchg = True
-       if game.condition != "docked":
-           game.energy -= 50.0
-       prout(_("Shields raised."))
-       if game.energy <= 0:
-           skip(1)
-           prout(_("Shields raising uses up last of energy."))
-           finish(FNRG)
-           return
-       game.ididit = True
-       return
+        if game.shldup:
+            prout(_("Shields already up."))
+            return
+        game.shldup = True
+        game.shldchg = True
+        if game.condition != "docked":
+            game.energy -= 50.0
+        prout(_("Shields raised."))
+        if game.energy <= 0:
+            skip(1)
+            prout(_("Shields raising uses up last of energy."))
+            finish(FNRG)
+            return
+        game.ididit = True
+        return
     elif action == "SHDN":
     elif action == "SHDN":
-       if not game.shldup:
-           prout(_("Shields already down."))
-           return
-       game.shldup = False
-       game.shldchg = True
-       prout(_("Shields lowered."))
-       game.ididit = True
-       return
+        if not game.shldup:
+            prout(_("Shields already down."))
+            return
+        game.shldup = False
+        game.shldchg = True
+        prout(_("Shields lowered."))
+        game.ididit = True
+        return
     elif action == "NRG":
     elif action == "NRG":
-       while scanner.nexttok() != "IHREAL":
-           scanner.chew()
-           proutn(_("Energy to transfer to shields- "))
+        while scanner.nexttok() != "IHREAL":
+            scanner.chew()
+            proutn(_("Energy to transfer to shields- "))
         nrg = scanner.real
         nrg = scanner.real
-       scanner.chew()
-       if nrg == 0:
-           return
-       if nrg > game.energy:
-           prout(_("Insufficient ship energy."))
-           return
-       game.ididit = True
-       if game.shield+nrg >= game.inshld:
-           prout(_("Shield energy maximized."))
-           if game.shield+nrg > game.inshld:
-               prout(_("Excess energy requested returned to ship energy"))
-           game.energy -= game.inshld-game.shield
-           game.shield = game.inshld
-           return
-       if nrg < 0.0 and game.energy-nrg > game.inenrg:
-           # Prevent shield drain loophole 
-           skip(1)
-           prout(_("Engineering to bridge--"))
-           prout(_("  Scott here. Power circuit problem, Captain."))
-           prout(_("  I can't drain the shields."))
-           game.ididit = False
-           return
-       if game.shield+nrg < 0:
-           prout(_("All shield energy transferred to ship."))
-           game.energy += game.shield
-           game.shield = 0.0
-           return
-       proutn(_("Scotty- \""))
-       if nrg > 0:
-           prout(_("Transferring energy to shields.\""))
-       else:
-           prout(_("Draining energy from shields.\""))
-       game.shield += nrg
-       game.energy -= nrg
-       return
+        scanner.chew()
+        if nrg == 0:
+            return
+        if nrg > game.energy:
+            prout(_("Insufficient ship energy."))
+            return
+        game.ididit = True
+        if game.shield+nrg >= game.inshld:
+            prout(_("Shield energy maximized."))
+            if game.shield+nrg > game.inshld:
+                prout(_("Excess energy requested returned to ship energy"))
+            game.energy -= game.inshld-game.shield
+            game.shield = game.inshld
+            return
+        if nrg < 0.0 and game.energy-nrg > game.inenrg:
+            # Prevent shield drain loophole 
+            skip(1)
+            prout(_("Engineering to bridge--"))
+            prout(_("  Scott here. Power circuit problem, Captain."))
+            prout(_("  I can't drain the shields."))
+            game.ididit = False
+            return
+        if game.shield+nrg < 0:
+            prout(_("All shield energy transferred to ship."))
+            game.energy += game.shield
+            game.shield = 0.0
+            return
+        proutn(_("Scotty- \""))
+        if nrg > 0:
+            prout(_("Transferring energy to shields.\""))
+        else:
+            prout(_("Draining energy from shields.\""))
+        game.shield += nrg
+        game.energy -= nrg
+        return
 
 def randdevice():
     "Choose a device to damage, at random."
     weights = (
 
 def randdevice():
     "Choose a device to damage, at random."
     weights = (
-       105,    # DSRSENS: short range scanners 10.5% 
-       105,    # DLRSENS: long range scanners          10.5% 
-       120,    # DPHASER: phasers                      12.0% 
-       120,    # DPHOTON: photon torpedoes             12.0% 
-       25,     # DLIFSUP: life support                  2.5% 
-       65,     # DWARPEN: warp drive                    6.5% 
-       70,     # DIMPULS: impulse engines               6.5% 
-       145,    # DSHIELD: deflector shields            14.5% 
-       30,     # DRADIO:  subspace radio                3.0% 
-       45,     # DSHUTTL: shuttle                       4.5% 
-       15,     # DCOMPTR: computer                      1.5% 
-       20,     # NAVCOMP: navigation system             2.0% 
-       75,     # DTRANSP: transporter                   7.5% 
-       20,     # DSHCTRL: high-speed shield controller  2.0% 
-       10,     # DDRAY: death ray                       1.0% 
-       30,     # DDSP: deep-space probes                3.0% 
+        105,        # DSRSENS: short range scanners        10.5% 
+        105,        # DLRSENS: long range scanners                10.5% 
+        120,        # DPHASER: phasers                        12.0% 
+        120,        # DPHOTON: photon torpedoes                12.0% 
+        25,        # DLIFSUP: life support                         2.5% 
+        65,        # DWARPEN: warp drive                         6.5% 
+        70,        # DIMPULS: impulse engines                 6.5% 
+        145,        # DSHIELD: deflector shields                14.5% 
+        30,        # DRADIO:  subspace radio                 3.0% 
+        45,        # DSHUTTL: shuttle                         4.5% 
+        15,        # DCOMPTR: computer                         1.5% 
+        20,        # NAVCOMP: navigation system                 2.0% 
+        75,        # DTRANSP: transporter                         7.5% 
+        20,        # DSHCTRL: high-speed shield controller  2.0% 
+        10,        # DDRAY: death ray                         1.0% 
+        30,        # DDSP: deep-space probes                 3.0% 
     )
     assert(sum(weights) == 1000)
     idx = randrange(1000)
     wsum = 0
     for (i, w) in enumerate(weights):
     )
     assert(sum(weights) == 1000)
     idx = randrange(1000)
     wsum = 0
     for (i, w) in enumerate(weights):
-       wsum += w
-       if idx < wsum:
-           return i
-    return None        # we should never get here
+        wsum += w
+        if idx < wsum:
+            return i
+    return None        # we should never get here
 
 def collision(rammed, enemy):
     "Collision handling for rammong events."
 
 def collision(rammed, enemy):
     "Collision handling for rammong events."
@@ -1044,7 +1051,7 @@ def collision(rammed, enemy):
         proutn(_(" rams "))
     proutn(crmena(False, enemy.type, "sector", enemy.location))
     if rammed:
         proutn(_(" rams "))
     proutn(crmena(False, enemy.type, "sector", enemy.location))
     if rammed:
-       proutn(_(" (original position)"))
+        proutn(_(" (original position)"))
     skip(1)
     deadkl(enemy.location, enemy.type, game.sector)
     proutn("***" + crmshp() + " heavily damaged.")
     skip(1)
     deadkl(enemy.location, enemy.type, game.sector)
     proutn("***" + crmshp() + " heavily damaged.")
@@ -1058,28 +1065,28 @@ def collision(rammed, enemy):
     ncrits = randrange(NDEVICES/2)
     while ncrits > 0:
         ncrits -= 1
     ncrits = randrange(NDEVICES/2)
     while ncrits > 0:
         ncrits -= 1
-       dev = randdevice()
-       if game.damage[dev] < 0:
-           continue
-       extradm = (10.0*hardness*randreal()+1.0)*game.damfac
-       # Damage for at least time of travel! 
-       game.damage[dev] += game.optime + extradm
+        dev = randdevice()
+        if game.damage[dev] < 0:
+            continue
+        extradm = (10.0*hardness*randreal()+1.0)*game.damfac
+        # Damage for at least time of travel! 
+        game.damage[dev] += game.optime + extradm
     game.shldup = False
     prout(_("***Shields are down."))
     if game.state.remkl + len(game.state.kcmdr) + game.state.nscrem:
     game.shldup = False
     prout(_("***Shields are down."))
     if game.state.remkl + len(game.state.kcmdr) + game.state.nscrem:
-       announce()
-       damagereport()
+        announce()
+        damagereport()
     else:
     else:
-       finish(FWON)
+        finish(FWON)
     return
 
 def torpedo(origin, bearing, dispersion, number, nburst):
     "Let a photon torpedo fly" 
     if not damaged(DSRSENS) or game.condition == "docked":
     return
 
 def torpedo(origin, bearing, dispersion, number, nburst):
     "Let a photon torpedo fly" 
     if not damaged(DSRSENS) or game.condition == "docked":
-       setwnd(srscan_window)
+        setwnd(srscan_window)
     else: 
     else: 
-       setwnd(message_window)
-    ac = bearing + 0.25*dispersion     # dispersion is a random variable
+        setwnd(message_window)
+    ac = bearing + 0.25*dispersion        # dispersion is a random variable
     bullseye = (15.0 - bearing)*0.5235988
     track = course(bearing=ac, distance=QUADSIZE, origin=cartesian(origin)) 
     bumpto = Coord(0, 0)
     bullseye = (15.0 - bearing)*0.5235988
     track = course(bearing=ac, distance=QUADSIZE, origin=cartesian(origin)) 
     bumpto = Coord(0, 0)
@@ -1089,39 +1096,39 @@ def torpedo(origin, bearing, dispersion, number, nburst):
         if not track.nexttok():
             break
         w = track.sector()
         if not track.nexttok():
             break
         w = track.sector()
-       if not w.valid_sector():
-           break
-       iquad = game.quad[w.i][w.j]
-       tracktorpedo(w, step, number, nburst, iquad)
-       if iquad == '.':
-           continue
-       # hit something 
+        if not w.valid_sector():
+            break
+        iquad = game.quad[w.i][w.j]
+        tracktorpedo(w, step, number, nburst, iquad)
+        if iquad == '.':
+            continue
+        # hit something 
         setwnd(message_window)
         if not damaged(DSRSENS) or game.condition == "docked":
         setwnd(message_window)
         if not damaged(DSRSENS) or game.condition == "docked":
-           skip(1)     # start new line after text track 
-       if iquad in ('E', 'F'): # Hit our ship 
-           skip(1)
-           prout(_("Torpedo hits %s.") % crmshp())
-           hit = 700.0 + randreal(100) - \
-               1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
-           newcnd() # we're blown out of dock 
-           if game.landed or game.condition == "docked":
-               return hit # Cheat if on a planet 
+            skip(1)        # start new line after text track 
+        if iquad in ('E', 'F'): # Hit our ship 
+            skip(1)
+            prout(_("Torpedo hits %s.") % crmshp())
+            hit = 700.0 + randreal(100) - \
+                1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
+            newcnd() # we're blown out of dock 
+            if game.landed or game.condition == "docked":
+                return hit # Cheat if on a planet 
             # 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+randreal(-2.4, 2.4), distance=2**0.5)
             displacement.nexttok()
             bumpto = displacement.sector()
             # 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+randreal(-2.4, 2.4), distance=2**0.5)
             displacement.nexttok()
             bumpto = displacement.sector()
-           if not bumpto.valid_sector():
-               return hit
-           if game.quad[bumpto.i][bumpto.j] == ' ':
-               finish(FHOLE)
-               return hit
-           if game.quad[bumpto.i][bumpto.j] != '.':
-               # can't move into object 
-               return hit
-           game.sector = bumpto
-           proutn(crmshp())
+            if not bumpto.valid_sector():
+                return hit
+            if game.quad[bumpto.i][bumpto.j] == ' ':
+                finish(FHOLE)
+                return hit
+            if game.quad[bumpto.i][bumpto.j] != '.':
+                # can't move into object 
+                return hit
+            game.sector = bumpto
+            proutn(crmshp())
             game.quad[w.i][w.j] = '.'
             game.quad[bumpto.i][bumpto.j] = iquad
             prout(_(" displaced by blast to Sector %s ") % bumpto)
             game.quad[w.i][w.j] = '.'
             game.quad[bumpto.i][bumpto.j] = iquad
             prout(_(" displaced by blast to Sector %s ") % bumpto)
@@ -1129,14 +1136,14 @@ def torpedo(origin, bearing, dispersion, number, nburst):
                 enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
             sortenemies()
             return None
                 enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
             sortenemies()
             return None
-       elif iquad in ('C', 'S', 'R', 'K'): # Hit a regular enemy 
-           # find the enemy 
-           if iquad in ('C', 'S') and withprob(0.05):
-               prout(crmena(True, iquad, "sector", w) + _(" uses anti-photon device;"))
-               prout(_("   torpedo neutralized."))
-               return None
+        elif iquad in ('C', 'S', 'R', 'K'): # Hit a regular enemy 
+            # find the enemy 
+            if iquad in ('C', 'S') and withprob(0.05):
+                prout(crmena(True, iquad, "sector", w) + _(" uses anti-photon device;"))
+                prout(_("   torpedo neutralized."))
+                return None
             for enemy in game.enemies:
             for enemy in game.enemies:
-               if w == enemy.location:
+                if w == enemy.location:
                     kp = math.fabs(enemy.power)
                     h1 = 700.0 + randrange(100) - \
                         1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
                     kp = math.fabs(enemy.power)
                     h1 = 700.0 + randrange(100) - \
                         1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
@@ -1173,101 +1180,101 @@ def torpedo(origin, bearing, dispersion, number, nburst):
                     break
             else:
                 prout("Internal error, no enemy where expected!")
                     break
             else:
                 prout("Internal error, no enemy where expected!")
-                raise SystemExit, 1
+                raise SystemExit(1)
+            return None
+        elif iquad == 'B': # Hit a base 
+            skip(1)
+            prout(_("***STARBASE DESTROYED.."))
+            game.state.baseq = [x for x in game.state.baseq if x != game.quadrant]
+            game.quad[w.i][w.j] = '.'
+            game.base.invalidate()
+            game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase = False
+            game.state.chart[game.quadrant.i][game.quadrant.j].starbase = False
+            game.state.basekl += 1
+            newcnd()
             return None
             return None
-       elif iquad == 'B': # Hit a base 
-           skip(1)
-           prout(_("***STARBASE DESTROYED.."))
-            game.state.baseq = filter(lambda x: x != game.quadrant, game.state.baseq)
-           game.quad[w.i][w.j] = '.'
-           game.base.invalidate()
-           game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase = False
-           game.state.chart[game.quadrant.i][game.quadrant.j].starbase = False
-           game.state.basekl += 1
-           newcnd()
-           return None
-       elif iquad == 'P': # Hit a planet 
-           prout(crmena(True, iquad, "sector", w) + _(" destroyed."))
-           game.state.nplankl += 1
-           game.state.galaxy[game.quadrant.i][game.quadrant.j].planet = None
-           game.iplnet.pclass = "destroyed"
-           game.iplnet = None
-           game.plnet.invalidate()
-           game.quad[w.i][w.j] = '.'
-           if game.landed:
-               # captain perishes on planet 
-               finish(FDPLANET)
-           return None
-       elif iquad == '@': # Hit an inhabited world -- very bad! 
-           prout(crmena(True, iquad, "sector", w) + _(" destroyed."))
-           game.state.nworldkl += 1
-           game.state.galaxy[game.quadrant.i][game.quadrant.j].planet = None
-           game.iplnet.pclass = "destroyed"
-           game.iplnet = None
-           game.plnet.invalidate()
-           game.quad[w.i][w.j] = '.'
-           if game.landed:
-               # captain perishes on planet 
-               finish(FDPLANET)
-           prout(_("The torpedo destroyed an inhabited planet."))
-           return None
-       elif iquad == '*': # Hit a star 
-           if withprob(0.9):
-               nova(w)
+        elif iquad == 'P': # Hit a planet 
+            prout(crmena(True, iquad, "sector", w) + _(" destroyed."))
+            game.state.nplankl += 1
+            game.state.galaxy[game.quadrant.i][game.quadrant.j].planet = None
+            game.iplnet.pclass = "destroyed"
+            game.iplnet = None
+            game.plnet.invalidate()
+            game.quad[w.i][w.j] = '.'
+            if game.landed:
+                # captain perishes on planet 
+                finish(FDPLANET)
+            return None
+        elif iquad == '@': # Hit an inhabited world -- very bad! 
+            prout(crmena(True, iquad, "sector", w) + _(" destroyed."))
+            game.state.nworldkl += 1
+            game.state.galaxy[game.quadrant.i][game.quadrant.j].planet = None
+            game.iplnet.pclass = "destroyed"
+            game.iplnet = None
+            game.plnet.invalidate()
+            game.quad[w.i][w.j] = '.'
+            if game.landed:
+                # captain perishes on planet 
+                finish(FDPLANET)
+            prout(_("The torpedo destroyed an inhabited planet."))
+            return None
+        elif iquad == '*': # Hit a star 
+            if withprob(0.9):
+                nova(w)
             else:
                 prout(crmena(True, '*', "sector", w) + _(" unaffected by photon blast."))
             else:
                 prout(crmena(True, '*', "sector", w) + _(" unaffected by photon blast."))
-           return None
-       elif iquad == '?': # Hit a thingy 
-           if not (game.options & OPTION_THINGY) or withprob(0.3):
-               skip(1)
-               prouts(_("AAAAIIIIEEEEEEEEAAAAAAAAUUUUUGGGGGHHHHHHHHHHHH!!!"))
-               skip(1)
-               prouts(_("    HACK!     HACK!    HACK!        *CHOKE!*  "))
-               skip(1)
-               proutn(_("Mr. Spock-"))
-               prouts(_("  \"Fascinating!\""))
-               skip(1)
-               deadkl(w, iquad, w)
-           else:
-               # Stas Sergeev added the possibility that
-               # you can shove the Thingy and piss it off.
-               # It then becomes an enemy and may fire at you.
-               thing.angry()
-           return None
-       elif iquad == ' ': # Black hole 
-           skip(1)
-           prout(crmena(True, ' ', "sector", w) + _(" swallows torpedo."))
-           return None
-       elif iquad == '#': # hit the web 
-           skip(1)
-           prout(_("***Torpedo absorbed by Tholian web."))
-           return None
-       elif iquad == 'T':  # Hit a Tholian 
-           h1 = 700.0 + randrange(100) - \
-               1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
-           h1 = math.fabs(h1)
-           if h1 >= 600:
-               game.quad[w.i][w.j] = '.'
-               deadkl(w, iquad, w)
-               game.tholian = None
-               return None
-           skip(1)
-           proutn(crmena(True, 'T', "sector", w))
-           if withprob(0.05):
-               prout(_(" survives photon blast."))
-               return None
-           prout(_(" disappears."))
-           game.tholian.move(None)
-           game.quad[w.i][w.j] = '#'
-           dropin(' ')
-           return None
+            return None
+        elif iquad == '?': # Hit a thingy 
+            if not (game.options & OPTION_THINGY) or withprob(0.3):
+                skip(1)
+                prouts(_("AAAAIIIIEEEEEEEEAAAAAAAAUUUUUGGGGGHHHHHHHHHHHH!!!"))
+                skip(1)
+                prouts(_("    HACK!     HACK!    HACK!        *CHOKE!*  "))
+                skip(1)
+                proutn(_("Mr. Spock-"))
+                prouts(_("  \"Fascinating!\""))
+                skip(1)
+                deadkl(w, iquad, w)
+            else:
+                # Stas Sergeev added the possibility that
+                # you can shove the Thingy and piss it off.
+                # It then becomes an enemy and may fire at you.
+                thing.angry()
+            return None
+        elif iquad == ' ': # Black hole 
+            skip(1)
+            prout(crmena(True, ' ', "sector", w) + _(" swallows torpedo."))
+            return None
+        elif iquad == '#': # hit the web 
+            skip(1)
+            prout(_("***Torpedo absorbed by Tholian web."))
+            return None
+        elif iquad == 'T':  # Hit a Tholian 
+            h1 = 700.0 + randrange(100) - \
+                1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
+            h1 = math.fabs(h1)
+            if h1 >= 600:
+                game.quad[w.i][w.j] = '.'
+                deadkl(w, iquad, w)
+                game.tholian = None
+                return None
+            skip(1)
+            proutn(crmena(True, 'T', "sector", w))
+            if withprob(0.05):
+                prout(_(" survives photon blast."))
+                return None
+            prout(_(" disappears."))
+            game.tholian.move(None)
+            game.quad[w.i][w.j] = '#'
+            dropin(' ')
+            return None
         else: # Problem!
         else: # Problem!
-           skip(1)
-           proutn("Don't know how to handle torpedo collision with ")
-           proutn(crmena(True, iquad, "sector", w))
-           skip(1)
-           return None
-       break
+            skip(1)
+            proutn("Don't know how to handle torpedo collision with ")
+            proutn(crmena(True, iquad, "sector", w))
+            skip(1)
+            return None
+        break
     skip(1)
     setwnd(message_window)
     prout(_("Torpedo missed."))
     skip(1)
     setwnd(message_window)
     prout(_("Torpedo missed."))
@@ -1276,24 +1283,24 @@ def torpedo(origin, bearing, dispersion, number, nburst):
 def fry(hit):
     "Critical-hit resolution." 
     if hit < (275.0-25.0*game.skill)*randreal(1.0, 1.5):
 def fry(hit):
     "Critical-hit resolution." 
     if hit < (275.0-25.0*game.skill)*randreal(1.0, 1.5):
-       return
+        return
     ncrit = int(1.0 + hit/(500.0+randreal(100)))
     proutn(_("***CRITICAL HIT--"))
     # Select devices and cause damage
     cdam = []
     while ncrit > 0:
         while True:
     ncrit = int(1.0 + hit/(500.0+randreal(100)))
     proutn(_("***CRITICAL HIT--"))
     # Select devices and cause damage
     cdam = []
     while ncrit > 0:
         while True:
-           j = randdevice()
-           # Cheat to prevent shuttle damage unless on ship 
+            j = randdevice()
+            # Cheat to prevent shuttle damage unless on ship 
             if not (game.damage[j]<0.0 or (j == DSHUTTL and game.iscraft != "onship")):
                 break
             if not (game.damage[j]<0.0 or (j == DSHUTTL and game.iscraft != "onship")):
                 break
-       cdam.append(j)
-       extradm = (hit*game.damfac)/(ncrit*randreal(75, 100))
-       game.damage[j] += extradm
+        cdam.append(j)
+        extradm = (hit*game.damfac)/(ncrit*randreal(75, 100))
+        game.damage[j] += extradm
         ncrit -= 1
     skipcount = 0
     for (i, j) in enumerate(cdam):
         ncrit -= 1
     skipcount = 0
     for (i, j) in enumerate(cdam):
-       proutn(device[j])
+        proutn(device[j])
         if skipcount % 3 == 2 and i < len(cdam)-1:
             skip(1)
         skipcount += 1
         if skipcount % 3 == 2 and i < len(cdam)-1:
             skip(1)
         skipcount += 1
@@ -1301,15 +1308,15 @@ def fry(hit):
             proutn(_(" and "))
     prout(_(" damaged."))
     if damaged(DSHIELD) and game.shldup:
             proutn(_(" and "))
     prout(_(" damaged."))
     if damaged(DSHIELD) and game.shldup:
-       prout(_("***Shields knocked down."))
-       game.shldup = False
+        prout(_("***Shields knocked down."))
+        game.shldup = False
 
 def attack(torps_ok):
     # bad guy attacks us 
     # torps_ok == False forces use of phasers in an attack 
     # game could be over at this point, check
     if game.alldone:
 
 def attack(torps_ok):
     # bad guy attacks us 
     # torps_ok == False forces use of phasers in an attack 
     # game could be over at this point, check
     if game.alldone:
-       return
+        return
     attempt = False
     ihurt = False
     hitmax = 0.0
     attempt = False
     ihurt = False
     hitmax = 0.0
@@ -1317,14 +1324,14 @@ def attack(torps_ok):
     chgfac = 1.0
     where = "neither"
     if game.idebug:
     chgfac = 1.0
     where = "neither"
     if game.idebug:
-       prout("=== ATTACK!")
+        prout("=== ATTACK!")
     # Tholian gets to move before attacking 
     if game.tholian:
     # Tholian gets to move before attacking 
     if game.tholian:
-       movetholian()
+        movetholian()
     # if you have just entered the RNZ, you'll get a warning 
     if game.neutz: # The one chance not to be attacked 
     # if you have just entered the RNZ, you'll get a warning 
     if game.neutz: # The one chance not to be attacked 
-       game.neutz = False
-       return
+        game.neutz = False
+        return
     # commanders get a chance to tac-move towards you 
     if (((game.quadrant in game.state.kcmdr or game.state.kscmdr == game.quadrant) and not game.justin) or game.skill == SKILL_EMERITUS) and torps_ok:
         for (bugout, enemy, old, goto) in  moveklings():
     # commanders get a chance to tac-move towards you 
     if (((game.quadrant in game.state.kcmdr or game.state.kscmdr == game.quadrant) and not game.justin) or game.skill == SKILL_EMERITUS) and torps_ok:
         for (bugout, enemy, old, goto) in  moveklings():
@@ -1347,129 +1354,129 @@ def attack(torps_ok):
         sortenemies()
     # if no enemies remain after movement, we're done 
     if len(game.enemies) == 0 or (len(game.enemies) == 1 and thing.at(game.quadrant) and not thing.angered):
         sortenemies()
     # if no enemies remain after movement, we're done 
     if len(game.enemies) == 0 or (len(game.enemies) == 1 and thing.at(game.quadrant) and not thing.angered):
-       return
+        return
     # set up partial hits if attack happens during shield status change 
     pfac = 1.0/game.inshld
     if game.shldchg:
     # set up partial hits if attack happens during shield status change 
     pfac = 1.0/game.inshld
     if game.shldchg:
-       chgfac = 0.25 + randreal(0.5)
+        chgfac = 0.25 + randreal(0.5)
     skip(1)
     # message verbosity control 
     if game.skill <= SKILL_FAIR:
     skip(1)
     # message verbosity control 
     if game.skill <= SKILL_FAIR:
-       where = "sector"
+        where = "sector"
     for enemy in game.enemies:
     for enemy in game.enemies:
-       if enemy.power < 0:
-           continue    # too weak to attack 
-       # compute hit strength and diminish shield power 
-       r = randreal()
-       # Increase chance of photon torpedos if docked or enemy energy is low 
-       if game.condition == "docked":
-           r *= 0.25
-       if enemy.power < 500:
-           r *= 0.25 
-       if enemy.type == 'T' or (enemy.type == '?' and not thing.angered):
-           continue
-       # different enemies have different probabilities of throwing a torp 
-       usephasers = not torps_ok or \
-           (enemy.type == 'K' and r > 0.0005) or \
-           (enemy.type == 'C' and r > 0.015) or \
-           (enemy.type == 'R' and r > 0.3) or \
-           (enemy.type == 'S' and r > 0.07) or \
-           (enemy.type == '?' and r > 0.05)
-       if usephasers:      # Enemy uses phasers 
-           if game.condition == "docked":
-               continue # Don't waste the effort! 
-           attempt = True # Attempt to attack 
-           dustfac = randreal(0.8, 0.85)
-           hit = enemy.power*math.pow(dustfac, enemy.kavgd)
-           enemy.power *= 0.75
-       else: # Enemy uses photon torpedo 
-           # We should be able to make the bearing() method work here
-           pcourse = 1.90985*math.atan2(game.sector.j-enemy.location.j, enemy.location.i-game.sector.i)
-           hit = 0
-           proutn(_("***TORPEDO INCOMING"))
-           if not damaged(DSRSENS):
-               proutn(_(" From ") + crmena(False, enemy.type, where, enemy.location))
-           attempt = True
-           prout("  ")
-           dispersion = (randreal()+randreal())*0.5 - 0.5
-           dispersion += 0.002*enemy.power*dispersion
-           hit = torpedo(enemy.location, pcourse, dispersion, number=1, nburst=1)
-           if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
-               finish(FWON) # Klingons did themselves in! 
-           if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.alldone:
-               return # Supernova or finished 
-           if hit == None:
-               continue
-       # incoming phaser or torpedo, shields may dissipate it 
-       if game.shldup or game.shldchg or game.condition == "docked":
-           # shields will take hits 
-           propor = pfac * game.shield
+        if enemy.power < 0:
+            continue        # too weak to attack 
+        # compute hit strength and diminish shield power 
+        r = randreal()
+        # Increase chance of photon torpedos if docked or enemy energy is low 
+        if game.condition == "docked":
+            r *= 0.25
+        if enemy.power < 500:
+            r *= 0.25 
+        if enemy.type == 'T' or (enemy.type == '?' and not thing.angered):
+            continue
+        # different enemies have different probabilities of throwing a torp 
+        usephasers = not torps_ok or \
+            (enemy.type == 'K' and r > 0.0005) or \
+            (enemy.type == 'C' and r > 0.015) or \
+            (enemy.type == 'R' and r > 0.3) or \
+            (enemy.type == 'S' and r > 0.07) or \
+            (enemy.type == '?' and r > 0.05)
+        if usephasers:            # Enemy uses phasers 
+            if game.condition == "docked":
+                continue # Don't waste the effort! 
+            attempt = True # Attempt to attack 
+            dustfac = randreal(0.8, 0.85)
+            hit = enemy.power*math.pow(dustfac, enemy.kavgd)
+            enemy.power *= 0.75
+        else: # Enemy uses photon torpedo 
+            # We should be able to make the bearing() method work here
+            pcourse = 1.90985*math.atan2(game.sector.j-enemy.location.j, enemy.location.i-game.sector.i)
+            hit = 0
+            proutn(_("***TORPEDO INCOMING"))
+            if not damaged(DSRSENS):
+                proutn(_(" From ") + crmena(False, enemy.type, where, enemy.location))
+            attempt = True
+            prout("  ")
+            dispersion = (randreal()+randreal())*0.5 - 0.5
+            dispersion += 0.002*enemy.power*dispersion
+            hit = torpedo(enemy.location, pcourse, dispersion, number=1, nburst=1)
+            if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
+                finish(FWON) # Klingons did themselves in! 
+            if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.alldone:
+                return # Supernova or finished 
+            if hit == None:
+                continue
+        # incoming phaser or torpedo, shields may dissipate it 
+        if game.shldup or game.shldchg or game.condition == "docked":
+            # shields will take hits 
+            propor = pfac * game.shield
             if game.condition == "docked":
                 propor *= 2.1
             if game.condition == "docked":
                 propor *= 2.1
-           if propor < 0.1:
-               propor = 0.1
-           hitsh = propor*chgfac*hit+1.0
-           absorb = 0.8*hitsh
-           if absorb > game.shield:
-               absorb = game.shield
-           game.shield -= absorb
-           hit -= hitsh
-           # taking a hit blasts us out of a starbase dock 
-           if game.condition == "docked":
-               dock(False)
-           # but the shields may take care of it 
-           if propor > 0.1 and hit < 0.005*game.energy:
-               continue
-       # hit from this opponent got through shields, so take damage 
-       ihurt = True
-       proutn(_("%d unit hit") % int(hit))
-       if (damaged(DSRSENS) and usephasers) or game.skill<=SKILL_FAIR:
-           proutn(_(" on the ") + crmshp())
-       if not damaged(DSRSENS) and usephasers:
-           prout(_(" from ") + crmena(False, enemy.type, where, enemy.location))
-       skip(1)
-       # Decide if hit is critical 
-       if hit > hitmax:
-           hitmax = hit
-       hittot += hit
-       fry(hit)
-       game.energy -= hit
+            if propor < 0.1:
+                propor = 0.1
+            hitsh = propor*chgfac*hit+1.0
+            absorb = 0.8*hitsh
+            if absorb > game.shield:
+                absorb = game.shield
+            game.shield -= absorb
+            hit -= hitsh
+            # taking a hit blasts us out of a starbase dock 
+            if game.condition == "docked":
+                dock(False)
+            # but the shields may take care of it 
+            if propor > 0.1 and hit < 0.005*game.energy:
+                continue
+        # hit from this opponent got through shields, so take damage 
+        ihurt = True
+        proutn(_("%d unit hit") % int(hit))
+        if (damaged(DSRSENS) and usephasers) or game.skill<=SKILL_FAIR:
+            proutn(_(" on the ") + crmshp())
+        if not damaged(DSRSENS) and usephasers:
+            prout(_(" from ") + crmena(False, enemy.type, where, enemy.location))
+        skip(1)
+        # Decide if hit is critical 
+        if hit > hitmax:
+            hitmax = hit
+        hittot += hit
+        fry(hit)
+        game.energy -= hit
     if game.energy <= 0:
     if game.energy <= 0:
-       # Returning home upon your shield, not with it... 
-       finish(FBATTLE)
-       return
+        # Returning home upon your shield, not with it... 
+        finish(FBATTLE)
+        return
     if not attempt and game.condition == "docked":
     if not attempt and game.condition == "docked":
-       prout(_("***Enemies decide against attacking your ship."))
+        prout(_("***Enemies decide against attacking your ship."))
     percent = 100.0*pfac*game.shield+0.5
     if not ihurt:
     percent = 100.0*pfac*game.shield+0.5
     if not ihurt:
-       # Shields fully protect ship 
-       proutn(_("Enemy attack reduces shield strength to "))
+        # Shields fully protect ship 
+        proutn(_("Enemy attack reduces shield strength to "))
     else:
     else:
-       # Emit message if starship suffered hit(s) 
-       skip(1)
-       proutn(_("Energy left %2d    shields ") % int(game.energy))
-       if game.shldup:
-           proutn(_("up "))
-       elif not damaged(DSHIELD):
-           proutn(_("down "))
-       else:
-           proutn(_("damaged, "))
+        # Emit message if starship suffered hit(s) 
+        skip(1)
+        proutn(_("Energy left %2d    shields ") % int(game.energy))
+        if game.shldup:
+            proutn(_("up "))
+        elif not damaged(DSHIELD):
+            proutn(_("down "))
+        else:
+            proutn(_("damaged, "))
     prout(_("%d%%,   torpedoes left %d") % (percent, game.torps))
     # Check if anyone was hurt 
     if hitmax >= 200 or hittot >= 500:
     prout(_("%d%%,   torpedoes left %d") % (percent, game.torps))
     # Check if anyone was hurt 
     if hitmax >= 200 or hittot >= 500:
-       icas = randrange(int(hittot * 0.015))
-       if icas >= 2:
-           skip(1)
-           prout(_("Mc Coy-  \"Sickbay to bridge.  We suffered %d casualties") % icas)
-           prout(_("   in that last attack.\""))
-           game.casual += icas
-           game.state.crew -= icas
+        icas = randrange(int(hittot * 0.015))
+        if icas >= 2:
+            skip(1)
+            prout(_("Mc Coy-  \"Sickbay to bridge.  We suffered %d casualties") % icas)
+            prout(_("   in that last attack.\""))
+            game.casual += icas
+            game.state.crew -= icas
     # After attack, reset average distance to enemies 
     for enemy in game.enemies:
     # After attack, reset average distance to enemies 
     for enemy in game.enemies:
-       enemy.kavgd = enemy.kdist
+        enemy.kavgd = enemy.kdist
     sortenemies()
     return
     sortenemies()
     return
-               
+                
 def deadkl(w, etype, mv):
     "Kill a Klingon, Tholian, Romulan, or Thingy." 
     # Added mv to allow enemy to "move" before dying 
 def deadkl(w, etype, mv):
     "Kill a Klingon, Tholian, Romulan, or Thingy." 
     # Added mv to allow enemy to "move" before dying 
@@ -1510,31 +1517,31 @@ def deadkl(w, etype, mv):
     # For each kind of enemy, finish message to player 
     prout(_(" destroyed."))
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
     # For each kind of enemy, finish message to player 
     prout(_(" destroyed."))
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
-       return
+        return
     game.recompute()
     # Remove enemy ship from arrays describing local conditions
     for e in game.enemies:
     game.recompute()
     # Remove enemy ship from arrays describing local conditions
     for e in game.enemies:
-       if e.location == w:
+        if e.location == w:
             e.move(None)
             e.move(None)
-           break
+            break
     return
 
 def targetcheck(w):
     "Return None if target is invalid, otherwise return a course angle."
     if not w.valid_sector():
     return
 
 def targetcheck(w):
     "Return None if target is invalid, otherwise return a course angle."
     if not w.valid_sector():
-       huh()
-       return None
+        huh()
+        return None
     delta = Coord()
     # C code this was translated from is wacky -- why the sign reversal?
     delta.j = (w.j - game.sector.j)
     delta.i = (game.sector.i - w.i)
     if delta == Coord(0, 0):
     delta = Coord()
     # C code this was translated from is wacky -- why the sign reversal?
     delta.j = (w.j - game.sector.j)
     delta.i = (game.sector.i - w.i)
     if delta == Coord(0, 0):
-       skip(1)
-       prout(_("Spock-  \"Bridge to sickbay.  Dr. McCoy,"))
-       prout(_("  I recommend an immediate review of"))
-       prout(_("  the Captain's psychological profile.\""))
-       scanner.chew()
-       return None
+        skip(1)
+        prout(_("Spock-  \"Bridge to sickbay.  Dr. McCoy,"))
+        prout(_("  I recommend an immediate review of"))
+        prout(_("  the Captain's psychological profile.\""))
+        scanner.chew()
+        return None
     return delta.bearing()
 
 def torps():
     return delta.bearing()
 
 def torps():
@@ -1542,63 +1549,63 @@ def torps():
     tcourse = []
     game.ididit = False
     if damaged(DPHOTON):
     tcourse = []
     game.ididit = False
     if damaged(DPHOTON):
-       prout(_("Photon tubes damaged."))
-       scanner.chew()
-       return
+        prout(_("Photon tubes damaged."))
+        scanner.chew()
+        return
     if game.torps == 0:
     if game.torps == 0:
-       prout(_("No torpedoes left."))
-       scanner.chew()
-       return
+        prout(_("No torpedoes left."))
+        scanner.chew()
+        return
     # First, get torpedo count
     while True:
         scanner.nexttok()
     # First, get torpedo count
     while True:
         scanner.nexttok()
-       if scanner.token == "IHALPHA":
-           huh()
-           return
-       elif scanner.token == "IHEOL" or not scanner.waiting():
-           prout(_("%d torpedoes left.") % game.torps)
+        if scanner.token == "IHALPHA":
+            huh()
+            return
+        elif scanner.token == "IHEOL" or not scanner.waiting():
+            prout(_("%d torpedoes left.") % game.torps)
             scanner.chew()
             scanner.chew()
-           proutn(_("Number of torpedoes to fire- "))
-            continue   # Go back around to get a number
-       else: # key == "IHREAL"
-           n = scanner.int()
-           if n <= 0: # abort command 
-               scanner.chew()
-               return
-           if n > MAXBURST:
-               scanner.chew()
-               prout(_("Maximum of %d torpedoes per burst.") % MAXBURST)
-               return
+            proutn(_("Number of torpedoes to fire- "))
+            continue        # Go back around to get a number
+        else: # key == "IHREAL"
+            n = scanner.int()
+            if n <= 0: # abort command 
+                scanner.chew()
+                return
+            if n > MAXBURST:
+                scanner.chew()
+                prout(_("Maximum of %d torpedoes per burst.") % MAXBURST)
+                return
             if n > game.torps:
             if n > game.torps:
-                scanner.chew() # User requested more torps than available
-                continue       # Go back around
-            break      # All is good, go to next stage
+                scanner.chew()        # User requested more torps than available
+                continue        # Go back around
+            break        # All is good, go to next stage
     # Next, get targets
     target = []
     for i in range(n):
     # Next, get targets
     target = []
     for i in range(n):
-       key = scanner.nexttok()
-       if i == 0 and key == "IHEOL":
-           break       # no coordinate waiting, we will try prompting 
-       if i == 1 and key == "IHEOL":
-           # direct all torpedoes at one target 
-           while i < n:
-               target.append(target[0])
-               tcourse.append(tcourse[0])
-               i += 1
-           break
+        key = scanner.nexttok()
+        if i == 0 and key == "IHEOL":
+            break        # no coordinate waiting, we will try prompting 
+        if i == 1 and key == "IHEOL":
+            # direct all torpedoes at one target 
+            while i < n:
+                target.append(target[0])
+                tcourse.append(tcourse[0])
+                i += 1
+            break
         scanner.push(scanner.token)
         target.append(scanner.getcoord())
         if target[-1] == None:
             return
         tcourse.append(targetcheck(target[-1]))
         if tcourse[-1] == None:
         scanner.push(scanner.token)
         target.append(scanner.getcoord())
         if target[-1] == None:
             return
         tcourse.append(targetcheck(target[-1]))
         if tcourse[-1] == None:
-           return
+            return
     scanner.chew()
     if len(target) == 0:
     scanner.chew()
     if len(target) == 0:
-       # prompt for each one 
-       for i in range(n):
-           proutn(_("Target sector for torpedo number %d- ") % (i+1))
-           scanner.chew()
+        # prompt for each one 
+        for i in range(n):
+            proutn(_("Target sector for torpedo number %d- ") % (i+1))
+            scanner.chew()
             target.append(scanner.getcoord())
             if target[-1] == None:
                 return
             target.append(scanner.getcoord())
             if target[-1] == None:
                 return
@@ -1608,45 +1615,45 @@ def torps():
     game.ididit = True
     # Loop for moving <n> torpedoes 
     for i in range(n):
     game.ididit = True
     # Loop for moving <n> torpedoes 
     for i in range(n):
-       if game.condition != "docked":
-           game.torps -= 1
-       dispersion = (randreal()+randreal())*0.5 -0.5
-       if math.fabs(dispersion) >= 0.47:
-           # misfire! 
-           dispersion *= randreal(1.2, 2.2)
-           if n > 0:
-               prouts(_("***TORPEDO NUMBER %d MISFIRES") % (i+1))
-           else:
-               prouts(_("***TORPEDO MISFIRES."))
-           skip(1)
-           if i < n:
-               prout(_("  Remainder of burst aborted."))
-           if withprob(0.2):
-               prout(_("***Photon tubes damaged by misfire."))
-               game.damage[DPHOTON] = game.damfac * randreal(1.0, 3.0)
-           break
-       if game.shldup or game.condition == "docked":
-           dispersion *= 1.0 + 0.0001*game.shield
-       torpedo(game.sector, tcourse[i], dispersion, number=i, nburst=n)
-       if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
-           return
+        if game.condition != "docked":
+            game.torps -= 1
+        dispersion = (randreal()+randreal())*0.5 -0.5
+        if math.fabs(dispersion) >= 0.47:
+            # misfire! 
+            dispersion *= randreal(1.2, 2.2)
+            if n > 0:
+                prouts(_("***TORPEDO NUMBER %d MISFIRES") % (i+1))
+            else:
+                prouts(_("***TORPEDO MISFIRES."))
+            skip(1)
+            if i < n:
+                prout(_("  Remainder of burst aborted."))
+            if withprob(0.2):
+                prout(_("***Photon tubes damaged by misfire."))
+                game.damage[DPHOTON] = game.damfac * randreal(1.0, 3.0)
+            break
+        if game.shldup or game.condition == "docked":
+            dispersion *= 1.0 + 0.0001*game.shield
+        torpedo(game.sector, tcourse[i], dispersion, number=i, nburst=n)
+        if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
+            return
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)<=0:
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)<=0:
-       finish(FWON)
+        finish(FWON)
 
 def overheat(rpow):
     "Check for phasers overheating."
     if rpow > 1500:
         checkburn = (rpow-1500.0)*0.00038
         if withprob(checkburn):
 
 def overheat(rpow):
     "Check for phasers overheating."
     if rpow > 1500:
         checkburn = (rpow-1500.0)*0.00038
         if withprob(checkburn):
-           prout(_("Weapons officer Sulu-  \"Phasers overheated, sir.\""))
-           game.damage[DPHASER] = game.damfac* randreal(1.0, 2.0) * (1.0+checkburn)
+            prout(_("Weapons officer Sulu-  \"Phasers overheated, sir.\""))
+            game.damage[DPHASER] = game.damfac* randreal(1.0, 2.0) * (1.0+checkburn)
 
 def checkshctrl(rpow):
     "Check shield control."
     skip(1)
     if withprob(0.998):
 
 def checkshctrl(rpow):
     "Check shield control."
     skip(1)
     if withprob(0.998):
-       prout(_("Shields lowered."))
-       return False
+        prout(_("Shields lowered."))
+        return False
     # Something bad has happened 
     prouts(_("***RED ALERT!  RED ALERT!"))
     skip(2)
     # Something bad has happened 
     prouts(_("***RED ALERT!  RED ALERT!"))
     skip(2)
@@ -1654,11 +1661,11 @@ def checkshctrl(rpow):
     game.energy -= rpow+hit*0.8
     game.shield -= hit*0.2
     if game.energy <= 0.0:
     game.energy -= rpow+hit*0.8
     game.shield -= hit*0.2
     if game.energy <= 0.0:
-       prouts(_("Sulu-  \"Captain! Shield malf***********************\""))
-       skip(1)
-       stars()
-       finish(FPHASER)
-       return True
+        prouts(_("Sulu-  \"Captain! Shield malf***********************\""))
+        skip(1)
+        stars()
+        finish(FPHASER)
+        return True
     prouts(_("Sulu-  \"Captain! Shield malfunction! Phaser fire contained!\""))
     skip(2)
     prout(_("Lt. Uhura-  \"Sir, all decks reporting damage.\""))
     prouts(_("Sulu-  \"Captain! Shield malfunction! Phaser fire contained!\""))
     skip(2)
     prout(_("Lt. Uhura-  \"Sir, all decks reporting damage.\""))
@@ -1666,11 +1673,11 @@ def checkshctrl(rpow):
     skip(1)
     fry(0.8*hit)
     if icas:
     skip(1)
     fry(0.8*hit)
     if icas:
-       skip(1)
-       prout(_("McCoy to bridge- \"Severe radiation burns, Jim."))
-       prout(_("  %d casualties so far.\"") % icas)
-       game.casual += icas
-       game.state.crew -= icas
+        skip(1)
+        prout(_("McCoy to bridge- \"Severe radiation burns, Jim."))
+        prout(_("  %d casualties so far.\"") % icas)
+        game.casual += icas
+        game.state.crew -= icas
     skip(1)
     prout(_("Phaser energy dispersed by shields."))
     prout(_("Enemy unaffected."))
     skip(1)
     prout(_("Phaser energy dispersed by shields."))
     prout(_("Enemy unaffected."))
@@ -1683,44 +1690,44 @@ def hittem(hits):
     skip(1)
     kk = 0
     for wham in hits:
     skip(1)
     kk = 0
     for wham in hits:
-       if wham == 0:
-           continue
-       dustfac = randreal(0.9, 1.0)
-       hit = wham*math.pow(dustfac, game.enemies[kk].kdist)
-       kpini = game.enemies[kk].power
-       kp = math.fabs(kpini)
-       if PHASEFAC*hit < kp:
-           kp = PHASEFAC*hit
+        if wham == 0:
+            continue
+        dustfac = randreal(0.9, 1.0)
+        hit = wham*math.pow(dustfac, game.enemies[kk].kdist)
+        kpini = game.enemies[kk].power
+        kp = math.fabs(kpini)
+        if PHASEFAC*hit < kp:
+            kp = PHASEFAC*hit
         if game.enemies[kk].power < 0:
             game.enemies[kk].power -= -kp
         else:
             game.enemies[kk].power -= kp
         if game.enemies[kk].power < 0:
             game.enemies[kk].power -= -kp
         else:
             game.enemies[kk].power -= kp
-       kpow = game.enemies[kk].power
-       w = game.enemies[kk].location
-       if hit > 0.005:
-           if not damaged(DSRSENS):
-               boom(w)
-           proutn(_("%d unit hit on ") % int(hit))
-       else:
-           proutn(_("Very small hit on "))
-       ienm = game.quad[w.i][w.j]
-       if ienm == '?':
-           thing.angry()
-       proutn(crmena(False, ienm, "sector", w))
-       skip(1)
-       if kpow == 0:
-           deadkl(w, ienm, w)
-           if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0:
-               finish(FWON)            
-           if game.alldone:
-               return
-           kk -= 1     # don't do the increment
+        kpow = game.enemies[kk].power
+        w = game.enemies[kk].location
+        if hit > 0.005:
+            if not damaged(DSRSENS):
+                boom(w)
+            proutn(_("%d unit hit on ") % int(hit))
+        else:
+            proutn(_("Very small hit on "))
+        ienm = game.quad[w.i][w.j]
+        if ienm == '?':
+            thing.angry()
+        proutn(crmena(False, ienm, "sector", w))
+        skip(1)
+        if kpow == 0:
+            deadkl(w, ienm, w)
+            if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0:
+                finish(FWON)                
+            if game.alldone:
+                return
+            kk -= 1        # don't do the increment
             continue
             continue
-       else: # decide whether or not to emasculate klingon 
-           if kpow > 0 and withprob(0.9) and kpow <= randreal(0.4, 0.8)*kpini:
-               prout(_("***Mr. Spock-  \"Captain, the vessel at Sector %s")%w)
-               prout(_("   has just lost its firepower.\""))
-               game.enemies[kk].power = -kpow
+        else: # decide whether or not to emasculate klingon 
+            if kpow > 0 and withprob(0.9) and kpow <= randreal(0.4, 0.8)*kpini:
+                prout(_("***Mr. Spock-  \"Captain, the vessel at Sector %s")%w)
+                prout(_("   has just lost its firepower.\""))
+                game.enemies[kk].power = -kpow
         kk += 1
     return
 
         kk += 1
     return
 
@@ -1740,239 +1747,239 @@ def phasers():
     skip(1)
     # SR sensors and Computer are needed for automode 
     if damaged(DSRSENS) or damaged(DCOMPTR):
     skip(1)
     # SR sensors and Computer are needed for automode 
     if damaged(DSRSENS) or damaged(DCOMPTR):
-       itarg = False
+        itarg = False
     if game.condition == "docked":
     if game.condition == "docked":
-       prout(_("Phasers can't be fired through base shields."))
-       scanner.chew()
-       return
+        prout(_("Phasers can't be fired through base shields."))
+        scanner.chew()
+        return
     if damaged(DPHASER):
     if damaged(DPHASER):
-       prout(_("Phaser control damaged."))
-       scanner.chew()
-       return
+        prout(_("Phaser control damaged."))
+        scanner.chew()
+        return
     if game.shldup:
     if game.shldup:
-       if damaged(DSHCTRL):
-           prout(_("High speed shield control damaged."))
-           scanner.chew()
-           return
-       if game.energy <= 200.0:
-           prout(_("Insufficient energy to activate high-speed shield control."))
-           scanner.chew()
-           return
-       prout(_("Weapons Officer Sulu-  \"High-speed shield control enabled, sir.\""))
-       ifast = True
+        if damaged(DSHCTRL):
+            prout(_("High speed shield control damaged."))
+            scanner.chew()
+            return
+        if game.energy <= 200.0:
+            prout(_("Insufficient energy to activate high-speed shield control."))
+            scanner.chew()
+            return
+        prout(_("Weapons Officer Sulu-  \"High-speed shield control enabled, sir.\""))
+        ifast = True
     # Original code so convoluted, I re-did it all
     # (That was Tom Almy talking about the C code, I think -- ESR)
     while automode == "NOTSET":
     # Original code so convoluted, I re-did it all
     # (That was Tom Almy talking about the C code, I think -- ESR)
     while automode == "NOTSET":
-       key = scanner.nexttok()
-       if key == "IHALPHA":
-           if scanner.sees("manual"):
-               if len(game.enemies)==0:
-                   prout(_("There is no enemy present to select."))
-                   scanner.chew()
-                   key = "IHEOL"
-                   automode = "AUTOMATIC"
-               else:
-                   automode = "MANUAL"
-                   key = scanner.nexttok()
-           elif scanner.sees("automatic"):
-               if (not itarg) and len(game.enemies) != 0:
-                   automode = "FORCEMAN"
-               else:
-                   if len(game.enemies)==0:
-                       prout(_("Energy will be expended into space."))
-                   automode = "AUTOMATIC"
-                   key = scanner.nexttok()
-           elif scanner.sees("no"):
-               no = True
-           else:
-               huh()
-               return
-       elif key == "IHREAL":
-           if len(game.enemies)==0:
-               prout(_("Energy will be expended into space."))
-               automode = "AUTOMATIC"
-           elif not itarg:
-               automode = "FORCEMAN"
-           else:
-               automode = "AUTOMATIC"
-       else:
-           # "IHEOL" 
-           if len(game.enemies)==0:
-               prout(_("Energy will be expended into space."))
-               automode = "AUTOMATIC"
-           elif not itarg:
-               automode = "FORCEMAN"
-           else: 
-               proutn(_("Manual or automatic? "))
+        key = scanner.nexttok()
+        if key == "IHALPHA":
+            if scanner.sees("manual"):
+                if len(game.enemies)==0:
+                    prout(_("There is no enemy present to select."))
+                    scanner.chew()
+                    key = "IHEOL"
+                    automode = "AUTOMATIC"
+                else:
+                    automode = "MANUAL"
+                    key = scanner.nexttok()
+            elif scanner.sees("automatic"):
+                if (not itarg) and len(game.enemies) != 0:
+                    automode = "FORCEMAN"
+                else:
+                    if len(game.enemies)==0:
+                        prout(_("Energy will be expended into space."))
+                    automode = "AUTOMATIC"
+                    key = scanner.nexttok()
+            elif scanner.sees("no"):
+                no = True
+            else:
+                huh()
+                return
+        elif key == "IHREAL":
+            if len(game.enemies)==0:
+                prout(_("Energy will be expended into space."))
+                automode = "AUTOMATIC"
+            elif not itarg:
+                automode = "FORCEMAN"
+            else:
+                automode = "AUTOMATIC"
+        else:
+            # "IHEOL" 
+            if len(game.enemies)==0:
+                prout(_("Energy will be expended into space."))
+                automode = "AUTOMATIC"
+            elif not itarg:
+                automode = "FORCEMAN"
+            else: 
+                proutn(_("Manual or automatic? "))
                 scanner.chew()
     avail = game.energy
     if ifast:
         avail -= 200.0
     if automode == "AUTOMATIC":
                 scanner.chew()
     avail = game.energy
     if ifast:
         avail -= 200.0
     if automode == "AUTOMATIC":
-       if key == "IHALPHA" and scanner.sees("no"):
-           no = True
-           key = scanner.nexttok()
-       if key != "IHREAL" and len(game.enemies) != 0:
-           prout(_("Phasers locked on target. Energy available: %.2f")%avail)
-       irec = 0
+        if key == "IHALPHA" and scanner.sees("no"):
+            no = True
+            key = scanner.nexttok()
+        if key != "IHREAL" and len(game.enemies) != 0:
+            prout(_("Phasers locked on target. Energy available: %.2f")%avail)
+        irec = 0
         while True:
         while True:
-           scanner.chew()
-           if not kz:
-               for i in range(len(game.enemies)):
-                   irec += math.fabs(game.enemies[i].power)/(PHASEFAC*math.pow(0.90, game.enemies[i].kdist))*randreal(1.01, 1.06) + 1.0
-           kz = 1
-           proutn(_("%d units required. ") % irec)
-           scanner.chew()
-           proutn(_("Units to fire= "))
-           key = scanner.nexttok()
-           if key != "IHREAL":
-               return
-           rpow = scanner.real
-           if rpow > avail:
-               proutn(_("Energy available= %.2f") % avail)
-               skip(1)
-               key = "IHEOL"
+            scanner.chew()
+            if not kz:
+                for i in range(len(game.enemies)):
+                    irec += math.fabs(game.enemies[i].power)/(PHASEFAC*math.pow(0.90, game.enemies[i].kdist))*randreal(1.01, 1.06) + 1.0
+            kz = 1
+            proutn(_("%d units required. ") % irec)
+            scanner.chew()
+            proutn(_("Units to fire= "))
+            key = scanner.nexttok()
+            if key != "IHREAL":
+                return
+            rpow = scanner.real
+            if rpow > avail:
+                proutn(_("Energy available= %.2f") % avail)
+                skip(1)
+                key = "IHEOL"
             if not rpow > avail:
                 break
             if not rpow > avail:
                 break
-       if rpow <= 0:
-           # chicken out 
-           scanner.chew()
-           return
+        if rpow <= 0:
+            # chicken out 
+            scanner.chew()
+            return
         key = scanner.nexttok()
         key = scanner.nexttok()
-       if key == "IHALPHA" and scanner.sees("no"):
-           no = True
-       if ifast:
-           game.energy -= 200 # Go and do it! 
-           if checkshctrl(rpow):
-               return
-       scanner.chew()
-       game.energy -= rpow
-       extra = rpow
-       if len(game.enemies):
-           extra = 0.0
-           powrem = rpow
-           for i in range(len(game.enemies)):
-               hits.append(0.0)
-               if powrem <= 0:
-                   continue
-               hits[i] = math.fabs(game.enemies[i].power)/(PHASEFAC*math.pow(0.90, game.enemies[i].kdist))
-               over = randreal(1.01, 1.06) * hits[i]
-               temp = powrem
-               powrem -= hits[i] + over
-               if powrem <= 0 and temp < hits[i]:
-                   hits[i] = temp
-               if powrem <= 0:
-                   over = 0.0
-               extra += over
-           if powrem > 0.0:
-               extra += powrem
-           hittem(hits)
-           game.ididit = True
-       if extra > 0 and not game.alldone:
-           if game.tholian:
-               proutn(_("*** Tholian web absorbs "))
-               if len(game.enemies)>0:
-                   proutn(_("excess "))
-               prout(_("phaser energy."))
-           else:
-               prout(_("%d expended on empty space.") % int(extra))
+        if key == "IHALPHA" and scanner.sees("no"):
+            no = True
+        if ifast:
+            game.energy -= 200 # Go and do it! 
+            if checkshctrl(rpow):
+                return
+        scanner.chew()
+        game.energy -= rpow
+        extra = rpow
+        if len(game.enemies):
+            extra = 0.0
+            powrem = rpow
+            for i in range(len(game.enemies)):
+                hits.append(0.0)
+                if powrem <= 0:
+                    continue
+                hits[i] = math.fabs(game.enemies[i].power)/(PHASEFAC*math.pow(0.90, game.enemies[i].kdist))
+                over = randreal(1.01, 1.06) * hits[i]
+                temp = powrem
+                powrem -= hits[i] + over
+                if powrem <= 0 and temp < hits[i]:
+                    hits[i] = temp
+                if powrem <= 0:
+                    over = 0.0
+                extra += over
+            if powrem > 0.0:
+                extra += powrem
+            hittem(hits)
+            game.ididit = True
+        if extra > 0 and not game.alldone:
+            if game.tholian:
+                proutn(_("*** Tholian web absorbs "))
+                if len(game.enemies)>0:
+                    proutn(_("excess "))
+                prout(_("phaser energy."))
+            else:
+                prout(_("%d expended on empty space.") % int(extra))
     elif automode == "FORCEMAN":
     elif automode == "FORCEMAN":
-       scanner.chew()
-       key = "IHEOL"
-       if damaged(DCOMPTR):
-           prout(_("Battle computer damaged, manual fire only."))
-       else:
-           skip(1)
-           prouts(_("---WORKING---"))
-           skip(1)
-           prout(_("Short-range-sensors-damaged"))
-           prout(_("Insufficient-data-for-automatic-phaser-fire"))
-           prout(_("Manual-fire-must-be-used"))
-           skip(1)
+        scanner.chew()
+        key = "IHEOL"
+        if damaged(DCOMPTR):
+            prout(_("Battle computer damaged, manual fire only."))
+        else:
+            skip(1)
+            prouts(_("---WORKING---"))
+            skip(1)
+            prout(_("Short-range-sensors-damaged"))
+            prout(_("Insufficient-data-for-automatic-phaser-fire"))
+            prout(_("Manual-fire-must-be-used"))
+            skip(1)
     elif automode == "MANUAL":
     elif automode == "MANUAL":
-       rpow = 0.0
+        rpow = 0.0
         for k in range(len(game.enemies)):
         for k in range(len(game.enemies)):
-           aim = game.enemies[k].location
-           ienm = game.quad[aim.i][aim.j]
-           if msgflag:
-               proutn(_("Energy available= %.2f") % (avail-0.006))
-               skip(1)
-               msgflag = False
-               rpow = 0.0
-           if damaged(DSRSENS) and \
+            aim = game.enemies[k].location
+            ienm = game.quad[aim.i][aim.j]
+            if msgflag:
+                proutn(_("Energy available= %.2f") % (avail-0.006))
+                skip(1)
+                msgflag = False
+                rpow = 0.0
+            if damaged(DSRSENS) and \
                not game.sector.distance(aim)<2**0.5 and ienm in ('C', 'S'):
                not game.sector.distance(aim)<2**0.5 and ienm in ('C', 'S'):
-               prout(cramen(ienm) + _(" can't be located without short range scan."))
-               scanner.chew()
-               key = "IHEOL"
-               hits[k] = 0 # prevent overflow -- thanks to Alexei Voitenko 
-               k += 1
-               continue
-           if key == "IHEOL":
-               scanner.chew()
-               if itarg and k > kz:
-                   irec = (abs(game.enemies[k].power)/(PHASEFAC*math.pow(0.9, game.enemies[k].kdist))) *       randreal(1.01, 1.06) + 1.0
-               kz = k
-               proutn("(")
-               if not damaged(DCOMPTR):
-                   proutn("%d" % irec)
-               else:
-                   proutn("??")
-               proutn(")  ")
-               proutn(_("units to fire at %s-  ") % crmena(False, ienm, "sector", aim))                
-               key = scanner.nexttok()
-           if key == "IHALPHA" and scanner.sees("no"):
-               no = True
-               key = scanner.nexttok()
-               continue
-           if key == "IHALPHA":
-               huh()
-               return
-           if key == "IHEOL":
-               if k == 1: # Let me say I'm baffled by this 
-                   msgflag = True
-               continue
-           if scanner.real < 0:
-               # abort out 
-               scanner.chew()
-               return
-           hits[k] = scanner.real
-           rpow += scanner.real
-           # If total requested is too much, inform and start over 
+                prout(cramen(ienm) + _(" can't be located without short range scan."))
+                scanner.chew()
+                key = "IHEOL"
+                hits[k] = 0 # prevent overflow -- thanks to Alexei Voitenko 
+                k += 1
+                continue
+            if key == "IHEOL":
+                scanner.chew()
+                if itarg and k > kz:
+                    irec = (abs(game.enemies[k].power)/(PHASEFAC*math.pow(0.9, game.enemies[k].kdist))) *        randreal(1.01, 1.06) + 1.0
+                kz = k
+                proutn("(")
+                if not damaged(DCOMPTR):
+                    proutn("%d" % irec)
+                else:
+                    proutn("??")
+                proutn(")  ")
+                proutn(_("units to fire at %s-  ") % crmena(False, ienm, "sector", aim))                
+                key = scanner.nexttok()
+            if key == "IHALPHA" and scanner.sees("no"):
+                no = True
+                key = scanner.nexttok()
+                continue
+            if key == "IHALPHA":
+                huh()
+                return
+            if key == "IHEOL":
+                if k == 1: # Let me say I'm baffled by this 
+                    msgflag = True
+                continue
+            if scanner.real < 0:
+                # abort out 
+                scanner.chew()
+                return
+            hits[k] = scanner.real
+            rpow += scanner.real
+            # If total requested is too much, inform and start over 
             if rpow > avail:
             if rpow > avail:
-               prout(_("Available energy exceeded -- try again."))
-               scanner.chew()
-               return
-           key = scanner.nexttok() # scan for next value 
-           k += 1
-       if rpow == 0.0:
-           # zero energy -- abort 
-           scanner.chew()
-           return
-       if key == "IHALPHA" and scanner.sees("no"):
-           no = True
-       game.energy -= rpow
-       scanner.chew()
-       if ifast:
-           game.energy -= 200.0
-           if checkshctrl(rpow):
-               return
-       hittem(hits)
-       game.ididit = True
+                prout(_("Available energy exceeded -- try again."))
+                scanner.chew()
+                return
+            key = scanner.nexttok() # scan for next value 
+            k += 1
+        if rpow == 0.0:
+            # zero energy -- abort 
+            scanner.chew()
+            return
+        if key == "IHALPHA" and scanner.sees("no"):
+            no = True
+        game.energy -= rpow
+        scanner.chew()
+        if ifast:
+            game.energy -= 200.0
+            if checkshctrl(rpow):
+                return
+        hittem(hits)
+        game.ididit = True
      # Say shield raised or malfunction, if necessary 
     if game.alldone:
      # Say shield raised or malfunction, if necessary 
     if game.alldone:
-       return
+        return
     if ifast:
     if ifast:
-       skip(1)
-       if no == 0:
-           if withprob(0.01):
-               prout(_("Sulu-  \"Sir, the high-speed shield control has malfunctioned . . ."))
-               prouts(_("         CLICK   CLICK   POP  . . ."))
-               prout(_(" No response, sir!"))
-               game.shldup = False
-           else:
-               prout(_("Shields raised."))
-       else:
-           game.shldup = False
+        skip(1)
+        if no == 0:
+            if withprob(0.01):
+                prout(_("Sulu-  \"Sir, the high-speed shield control has malfunctioned . . ."))
+                prouts(_("         CLICK   CLICK   POP  . . ."))
+                prout(_(" No response, sir!"))
+                game.shldup = False
+            else:
+                prout(_("Shields raised."))
+        else:
+            game.shldup = False
     overheat(rpow)
 
 # Code from events,c begins here.
     overheat(rpow)
 
 # Code from events,c begins here.
@@ -2007,12 +2014,12 @@ def postpone(evtype, offset):
 def cancelrest():
     "Rest period is interrupted by event."
     if game.resting:
 def cancelrest():
     "Rest period is interrupted by event."
     if game.resting:
-       skip(1)
-       proutn(_("Mr. Spock-  \"Captain, shall we cancel the rest period?\""))
-       if ja():
-           game.resting = False
-           game.optime = 0.0
-           return True
+        skip(1)
+        proutn(_("Mr. Spock-  \"Captain, shall we cancel the rest period?\""))
+        if ja():
+            game.resting = False
+            game.optime = 0.0
+            return True
     return False
 
 def events():
     return False
 
 def events():
@@ -2099,7 +2106,7 @@ def events():
             game.state.chart[game.battle.i][game.battle.j].starbase = False
         # Remove Starbase from galaxy 
         game.state.galaxy[game.battle.i][game.battle.j].starbase = False
             game.state.chart[game.battle.i][game.battle.j].starbase = False
         # Remove Starbase from galaxy 
         game.state.galaxy[game.battle.i][game.battle.j].starbase = False
-        game.state.baseq = filter(lambda x: x != game.battle, game.state.baseq)
+        game.state.baseq = [x for x in game.state.baseq if x != game.battle]
         if game.isatb == 2:
             # reinstate a commander's base attack 
             game.battle = hold
         if game.isatb == 2:
             # reinstate a commander's base attack 
             game.battle = hold
@@ -2107,104 +2114,104 @@ def events():
         else:
             game.battle.invalidate()
     if game.idebug:
         else:
             game.battle.invalidate()
     if game.idebug:
-       prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
-       for i in range(1, NEVENTS):
-           if   i == FSNOVA:  proutn("=== Supernova       ")
-           elif i == FTBEAM:  proutn("=== T Beam          ")
-           elif i == FSNAP:   proutn("=== Snapshot        ")
-           elif i == FBATTAK: proutn("=== Base Attack     ")
-           elif i == FCDBAS:  proutn("=== Base Destroy    ")
-           elif i == FSCMOVE: proutn("=== SC Move         ")
-           elif i == FSCDBAS: proutn("=== SC Base Destroy ")
-           elif i == FDSPROB: proutn("=== Probe Move      ")
-           elif i == FDISTR:  proutn("=== Distress Call   ")
-           elif i == FENSLV:  proutn("=== Enslavement     ")
-           elif i == FREPRO:  proutn("=== Klingon Build   ")
-           if is_scheduled(i):
-               prout("%.2f" % (scheduled(i)))
-           else:
-               prout("never")
+        prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
+        for i in range(1, NEVENTS):
+            if   i == FSNOVA:  proutn("=== Supernova       ")
+            elif i == FTBEAM:  proutn("=== T Beam          ")
+            elif i == FSNAP:   proutn("=== Snapshot        ")
+            elif i == FBATTAK: proutn("=== Base Attack     ")
+            elif i == FCDBAS:  proutn("=== Base Destroy    ")
+            elif i == FSCMOVE: proutn("=== SC Move         ")
+            elif i == FSCDBAS: proutn("=== SC Base Destroy ")
+            elif i == FDSPROB: proutn("=== Probe Move      ")
+            elif i == FDISTR:  proutn("=== Distress Call   ")
+            elif i == FENSLV:  proutn("=== Enslavement     ")
+            elif i == FREPRO:  proutn("=== Klingon Build   ")
+            if is_scheduled(i):
+                prout("%.2f" % (scheduled(i)))
+            else:
+                prout("never")
     radio_was_broken = damaged(DRADIO)
     hold.i = hold.j = 0
     while True:
     radio_was_broken = damaged(DRADIO)
     hold.i = hold.j = 0
     while True:
-       # Select earliest extraneous event, evcode==0 if no events 
-       evcode = FSPY
-       if game.alldone:
-           return
-       datemin = fintim
-       for l in range(1, NEVENTS):
-           if game.future[l].date < datemin:
-               evcode = l
-               if game.idebug:
-                   prout("== Event %d fires" % evcode)
-               datemin = game.future[l].date
-       xtime = datemin-game.state.date
-       game.state.date = datemin
-       # Decrement Federation resources and recompute remaining time 
-       game.state.remres -= (game.state.remkl+4*len(game.state.kcmdr))*xtime
+        # Select earliest extraneous event, evcode==0 if no events 
+        evcode = FSPY
+        if game.alldone:
+            return
+        datemin = fintim
+        for l in range(1, NEVENTS):
+            if game.future[l].date < datemin:
+                evcode = l
+                if game.idebug:
+                    prout("== Event %d fires" % evcode)
+                datemin = game.future[l].date
+        xtime = datemin-game.state.date
+        game.state.date = datemin
+        # Decrement Federation resources and recompute remaining time 
+        game.state.remres -= (game.state.remkl+4*len(game.state.kcmdr))*xtime
         game.recompute()
         game.recompute()
-       if game.state.remtime <= 0:
-           finish(FDEPLETE)
-           return
-       # Any crew left alive? 
-       if game.state.crew <= 0:
-           finish(FCREW)
-           return
-       # Is life support adequate? 
-       if damaged(DLIFSUP) and game.condition != "docked":
-           if game.lsupres < xtime and game.damage[DLIFSUP] > game.lsupres:
-               finish(FLIFESUP)
-               return
-           game.lsupres -= xtime
-           if game.damage[DLIFSUP] <= xtime:
-               game.lsupres = game.inlsr
-       # Fix devices 
-       repair = xtime
-       if game.condition == "docked":
-           repair /= DOCKFAC
-       # Don't fix Deathray here 
-       for l in range(NDEVICES):
-           if game.damage[l] > 0.0 and l != DDRAY:
+        if game.state.remtime <= 0:
+            finish(FDEPLETE)
+            return
+        # Any crew left alive? 
+        if game.state.crew <= 0:
+            finish(FCREW)
+            return
+        # Is life support adequate? 
+        if damaged(DLIFSUP) and game.condition != "docked":
+            if game.lsupres < xtime and game.damage[DLIFSUP] > game.lsupres:
+                finish(FLIFESUP)
+                return
+            game.lsupres -= xtime
+            if game.damage[DLIFSUP] <= xtime:
+                game.lsupres = game.inlsr
+        # Fix devices 
+        repair = xtime
+        if game.condition == "docked":
+            repair /= DOCKFAC
+        # Don't fix Deathray here 
+        for l in range(NDEVICES):
+            if game.damage[l] > 0.0 and l != DDRAY:
                 if game.damage[l]-repair > 0.0:
                     game.damage[l] -= repair
                 else:
                     game.damage[l] = 0.0
                 if game.damage[l]-repair > 0.0:
                     game.damage[l] -= repair
                 else:
                     game.damage[l] = 0.0
-       # If radio repaired, update star chart and attack reports 
-       if radio_was_broken and not damaged(DRADIO):
-           prout(_("Lt. Uhura- \"Captain, the sub-space radio is working and"))
-           prout(_("   surveillance reports are coming in."))
-           skip(1)
-           if not game.iseenit:
-               attackreport(False)
-               game.iseenit = True
-           rechart()
-           prout(_("   The star chart is now up to date.\""))
-           skip(1)
-       # Cause extraneous event EVCODE to occur 
-       game.optime -= xtime
-       if evcode == FSNOVA: # Supernova 
-           announce()
-           supernova(None)
-           schedule(FSNOVA, expran(0.5*game.intime))
-           if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
-               return
-       elif evcode == FSPY: # Check with spy to see if SC should tractor beam 
-           if game.state.nscrem == 0 or \
-               ictbeam or istract or \
+        # If radio repaired, update star chart and attack reports 
+        if radio_was_broken and not damaged(DRADIO):
+            prout(_("Lt. Uhura- \"Captain, the sub-space radio is working and"))
+            prout(_("   surveillance reports are coming in."))
+            skip(1)
+            if not game.iseenit:
+                attackreport(False)
+                game.iseenit = True
+            rechart()
+            prout(_("   The star chart is now up to date.\""))
+            skip(1)
+        # Cause extraneous event EVCODE to occur 
+        game.optime -= xtime
+        if evcode == FSNOVA: # Supernova 
+            announce()
+            supernova(None)
+            schedule(FSNOVA, expran(0.5*game.intime))
+            if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
+                return
+        elif evcode == FSPY: # Check with spy to see if SC should tractor beam 
+            if game.state.nscrem == 0 or \
+                ictbeam or istract or \
                 game.condition == "docked" or game.isatb == 1 or game.iscate:
                 game.condition == "docked" or game.isatb == 1 or game.iscate:
-               return
-           if game.ientesc or \
-               (game.energy<2000 and game.torps<4 and game.shield < 1250) or \
-               (damaged(DPHASER) and (damaged(DPHOTON) or game.torps<4)) or \
-               (damaged(DSHIELD) and \
-                (game.energy < 2500 or damaged(DPHASER)) and \
+                return
+            if game.ientesc or \
+                (game.energy<2000 and game.torps<4 and game.shield < 1250) or \
+                (damaged(DPHASER) and (damaged(DPHOTON) or game.torps<4)) or \
+                (damaged(DSHIELD) and \
+                 (game.energy < 2500 or damaged(DPHASER)) and \
                  (game.torps < 5 or damaged(DPHOTON))):
                  (game.torps < 5 or damaged(DPHOTON))):
-               # Tractor-beam her! 
-               istract = ictbeam = True
+                # Tractor-beam her! 
+                istract = ictbeam = True
                 tractorbeam((game.state.kscmdr-game.quadrant).distance())
                 tractorbeam((game.state.kscmdr-game.quadrant).distance())
-           else:
-               return
-       elif evcode == FTBEAM: # Tractor beam 
+            else:
+                return
+        elif evcode == FTBEAM: # Tractor beam 
             if not game.state.kcmdr:
                 unschedule(FTBEAM)
                 continue
             if not game.state.kcmdr:
                 unschedule(FTBEAM)
                 continue
@@ -2217,15 +2224,15 @@ def events():
                 continue
             ictbeam = True
             tractorbeam(yank)
                 continue
             ictbeam = True
             tractorbeam(yank)
-       elif evcode == FSNAP: # Snapshot of the universe (for time warp) 
-           game.snapsht = copy.deepcopy(game.state)
-           game.state.snap = True
-           schedule(FSNAP, expran(0.5 * game.intime))
-       elif evcode == FBATTAK: # Commander attacks starbase 
-           if not game.state.kcmdr or not game.state.baseq:
-               # no can do 
-               unschedule(FBATTAK)
-               unschedule(FCDBAS)
+        elif evcode == FSNAP: # Snapshot of the universe (for time warp) 
+            game.snapsht = copy.deepcopy(game.state)
+            game.state.snap = True
+            schedule(FSNAP, expran(0.5 * game.intime))
+        elif evcode == FBATTAK: # Commander attacks starbase 
+            if not game.state.kcmdr or not game.state.baseq:
+                # no can do 
+                unschedule(FBATTAK)
+                unschedule(FCDBAS)
                 continue
             try:
                 for ibq in game.state.baseq:
                 continue
             try:
                 for ibq in game.state.baseq:
@@ -2239,147 +2246,147 @@ def events():
                     continue
             except JumpOut:
                 pass
                     continue
             except JumpOut:
                 pass
-           # commander + starbase combination found -- launch attack 
-           game.battle = ibq
-           schedule(FCDBAS, randreal(1.0, 4.0))
-           if game.isatb: # extra time if SC already attacking 
-               postpone(FCDBAS, scheduled(FSCDBAS)-game.state.date)
-           game.future[FBATTAK].date = game.future[FCDBAS].date + expran(0.3*game.intime)
-           game.iseenit = False
+            # commander + starbase combination found -- launch attack 
+            game.battle = ibq
+            schedule(FCDBAS, randreal(1.0, 4.0))
+            if game.isatb: # extra time if SC already attacking 
+                postpone(FCDBAS, scheduled(FSCDBAS)-game.state.date)
+            game.future[FBATTAK].date = game.future[FCDBAS].date + expran(0.3*game.intime)
+            game.iseenit = False
             if not communicating():
             if not communicating():
-               continue # No warning :-( 
-           game.iseenit = True
-           announce()
-           skip(1)
-           prout(_("Lt. Uhura-  \"Captain, the starbase in Quadrant %s") % game.battle)
-           prout(_("   reports that it is under attack and that it can"))
-           prout(_("   hold out only until stardate %d.\"") % (int(scheduled(FCDBAS))))
-           if cancelrest():
+                continue # No warning :-( 
+            game.iseenit = True
+            announce()
+            skip(1)
+            prout(_("Lt. Uhura-  \"Captain, the starbase in Quadrant %s") % game.battle)
+            prout(_("   reports that it is under attack and that it can"))
+            prout(_("   hold out only until stardate %d.\"") % (int(scheduled(FCDBAS))))
+            if cancelrest():
                 return
                 return
-       elif evcode == FSCDBAS: # Supercommander destroys base 
-           unschedule(FSCDBAS)
-           game.isatb = 2
-           if not game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].starbase: 
-               continue # WAS RETURN! 
-           hold = game.battle
-           game.battle = game.state.kscmdr
-           destroybase()
-       elif evcode == FCDBAS: # Commander succeeds in destroying base 
-           if evcode == FCDBAS:
-               unschedule(FCDBAS)
+        elif evcode == FSCDBAS: # Supercommander destroys base 
+            unschedule(FSCDBAS)
+            game.isatb = 2
+            if not game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].starbase: 
+                continue # WAS RETURN! 
+            hold = game.battle
+            game.battle = game.state.kscmdr
+            destroybase()
+        elif evcode == FCDBAS: # Commander succeeds in destroying base 
+            if evcode == FCDBAS:
+                unschedule(FCDBAS)
                 if not game.state.baseq() \
                        or not game.state.galaxy[game.battle.i][game.battle.j].starbase:
                 if not game.state.baseq() \
                        or not game.state.galaxy[game.battle.i][game.battle.j].starbase:
-                   game.battle.invalidate()
+                    game.battle.invalidate()
                     continue
                     continue
-               # find the lucky pair 
-               for cmdr in game.state.kcmdr:
-                   if cmdr == game.battle: 
-                       break
+                # find the lucky pair 
+                for cmdr in game.state.kcmdr:
+                    if cmdr == game.battle: 
+                        break
                 else:
                 else:
-                   # No action to take after all 
-                   continue
+                    # No action to take after all 
+                    continue
             destroybase()
             destroybase()
-       elif evcode == FSCMOVE: # Supercommander moves 
-           schedule(FSCMOVE, 0.2777)
-           if not game.ientesc and not istract and game.isatb != 1 and \
+        elif evcode == FSCMOVE: # Supercommander moves 
+            schedule(FSCMOVE, 0.2777)
+            if not game.ientesc and not istract and game.isatb != 1 and \
                    (not game.iscate or not game.justin): 
                    (not game.iscate or not game.justin): 
-               supercommander()
-       elif evcode == FDSPROB: # Move deep space probe 
-           schedule(FDSPROB, 0.01)
+                supercommander()
+        elif evcode == FDSPROB: # Move deep space probe 
+            schedule(FDSPROB, 0.01)
             if not game.probe.nexttok():
             if not game.probe.nexttok():
-               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
+                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
                     if communicating():
                     if communicating():
-                       announce()
-                       skip(1)
-                       proutn(_("Lt. Uhura-  \"The deep space probe "))
-                       if not game.probe.quadrant().valid_quadrant():
-                           prout(_("has left the galaxy.\""))
-                       else:
-                           prout(_("is no longer transmitting.\""))
-                   unschedule(FDSPROB)
-                   continue
+                        announce()
+                        skip(1)
+                        proutn(_("Lt. Uhura-  \"The deep space probe "))
+                        if not game.probe.quadrant().valid_quadrant():
+                            prout(_("has left the galaxy.\""))
+                        else:
+                            prout(_("is no longer transmitting.\""))
+                    unschedule(FDSPROB)
+                    continue
                 if communicating():
                 if communicating():
-                   #announce()
-                   skip(1)
-                   prout(_("Lt. Uhura-  \"The deep space probe is now in Quadrant %s.\"") % game.probe.quadrant())
+                    #announce()
+                    skip(1)
+                    prout(_("Lt. Uhura-  \"The deep space probe is now in Quadrant %s.\"") % game.probe.quadrant())
             pquad = game.probe.quadrant()
             pquad = game.probe.quadrant()
-           pdest = game.state.galaxy[pquad.i][pquad.j]
-           if communicating():
-               game.state.chart[pquad.i][pquad.j].klingons = pdest.klingons
-               game.state.chart[pquad.i][pquad.j].starbase = pdest.starbase
-               game.state.chart[pquad.i][pquad.j].stars = pdest.stars
-               pdest.charted = True
-           game.probe.moves -= 1 # One less to travel
-           if game.probe.arrived() and game.isarmed and pdest.stars:
-               supernova(game.probe)           # fire in the hole!
-               unschedule(FDSPROB)
-               if game.state.galaxy[pquad.i][pquad.j].supernova: 
-                   return
-       elif evcode == FDISTR: # inhabited system issues distress call 
-           unschedule(FDISTR)
-           # try a whole bunch of times to find something suitable 
+            pdest = game.state.galaxy[pquad.i][pquad.j]
+            if communicating():
+                game.state.chart[pquad.i][pquad.j].klingons = pdest.klingons
+                game.state.chart[pquad.i][pquad.j].starbase = pdest.starbase
+                game.state.chart[pquad.i][pquad.j].stars = pdest.stars
+                pdest.charted = True
+            game.probe.moves -= 1 # One less to travel
+            if game.probe.arrived() and game.isarmed and pdest.stars:
+                supernova(game.probe)                # fire in the hole!
+                unschedule(FDSPROB)
+                if game.state.galaxy[pquad.i][pquad.j].supernova: 
+                    return
+        elif evcode == FDISTR: # inhabited system issues distress call 
+            unschedule(FDISTR)
+            # try a whole bunch of times to find something suitable 
             for i in range(100):
             for i in range(100):
-               # need a quadrant which is not the current one,
-               # which has some stars which are inhabited and
-               # not already under attack, which is not
-               # supernova'ed, and which has some Klingons in it
-               w = randplace(GALSIZE)
-               q = game.state.galaxy[w.i][w.j]
+                # need a quadrant which is not the current one,
+                # which has some stars which are inhabited and
+                # not already under attack, which is not
+                # supernova'ed, and which has some Klingons in it
+                w = randplace(GALSIZE)
+                q = game.state.galaxy[w.i][w.j]
                 if not (game.quadrant == w or q.planet == None or \
                 if not (game.quadrant == w or q.planet == None or \
-                     not q.planet.inhabited or \
-                     q.supernova or q.status!="secure" or q.klingons<=0):
+                      not q.planet.inhabited or \
+                      q.supernova or q.status!="secure" or q.klingons<=0):
                     break
             else:
                     break
             else:
-               # can't seem to find one; ignore this call 
-               if game.idebug:
-                   prout("=== Couldn't find location for distress event.")
-               continue
-           # got one!!  Schedule its enslavement 
-           ev = schedule(FENSLV, expran(game.intime))
-           ev.quadrant = w
-           q.status = "distressed"
-           # tell the captain about it if we can 
-           if communicating():
-               prout(_("Uhura- Captain, %s in Quadrant %s reports it is under attack") \
+                # can't seem to find one; ignore this call 
+                if game.idebug:
+                    prout("=== Couldn't find location for distress event.")
+                continue
+            # got one!!  Schedule its enslavement 
+            ev = schedule(FENSLV, expran(game.intime))
+            ev.quadrant = w
+            q.status = "distressed"
+            # tell the captain about it if we can 
+            if communicating():
+                prout(_("Uhura- Captain, %s in Quadrant %s reports it is under attack") \
                         % (q.planet, repr(w)))
                         % (q.planet, repr(w)))
-               prout(_("by a Klingon invasion fleet."))
-               if cancelrest():
-                   return
-       elif evcode == FENSLV:          # starsystem is enslaved 
-           ev = unschedule(FENSLV)
-           # see if current distress call still active 
-           q = game.state.galaxy[ev.quadrant.i][ev.quadrant.j]
-           if q.klingons <= 0:
-               q.status = "secure"
-               continue
-           q.status = "enslaved"
-
-           # play stork and schedule the first baby 
-           ev2 = schedule(FREPRO, expran(2.0 * game.intime))
-           ev2.quadrant = ev.quadrant
-
-           # report the disaster if we can 
-           if communicating():
-               prout(_("Uhura- We've lost contact with starsystem %s") % \
+                prout(_("by a Klingon invasion fleet."))
+                if cancelrest():
+                    return
+        elif evcode == FENSLV:                # starsystem is enslaved 
+            ev = unschedule(FENSLV)
+            # see if current distress call still active 
+            q = game.state.galaxy[ev.quadrant.i][ev.quadrant.j]
+            if q.klingons <= 0:
+                q.status = "secure"
+                continue
+            q.status = "enslaved"
+
+            # play stork and schedule the first baby 
+            ev2 = schedule(FREPRO, expran(2.0 * game.intime))
+            ev2.quadrant = ev.quadrant
+
+            # report the disaster if we can 
+            if communicating():
+                prout(_("Uhura- We've lost contact with starsystem %s") % \
                         q.planet)
                         q.planet)
-               prout(_("in Quadrant %s.\n") % ev.quadrant)
-       elif evcode == FREPRO:          # Klingon reproduces 
-           # If we ever switch to a real event queue, we'll need to
-           # explicitly retrieve and restore the x and y.
-           ev = schedule(FREPRO, expran(1.0 * game.intime))
-           # see if current distress call still active 
-           q = game.state.galaxy[ev.quadrant.i][ev.quadrant.j]
-           if q.klingons <= 0:
-               q.status = "secure"
-               continue
-           if game.state.remkl >= MAXKLGAME:
-               continue                # full right now 
-           # reproduce one Klingon 
-           w = ev.quadrant
+                prout(_("in Quadrant %s.\n") % ev.quadrant)
+        elif evcode == FREPRO:                # Klingon reproduces 
+            # If we ever switch to a real event queue, we'll need to
+            # explicitly retrieve and restore the x and y.
+            ev = schedule(FREPRO, expran(1.0 * game.intime))
+            # see if current distress call still active 
+            q = game.state.galaxy[ev.quadrant.i][ev.quadrant.j]
+            if q.klingons <= 0:
+                q.status = "secure"
+                continue
+            if game.state.remkl >= MAXKLGAME:
+                continue                # full right now 
+            # reproduce one Klingon 
+            w = ev.quadrant
             m = Coord()
             m = Coord()
-           if game.klhere >= MAXKLQUAD:
+            if game.klhere >= MAXKLQUAD:
                 try:
                     # this quadrant not ok, pick an adjacent one 
                     for m.i in range(w.i - 1, w.i + 2):
                 try:
                     # this quadrant not ok, pick an adjacent one 
                     for m.i in range(w.i - 1, w.i + 2):
@@ -2392,73 +2399,73 @@ def events():
                                 continue
                             raise JumpOut
                     else:
                                 continue
                             raise JumpOut
                     else:
-                        continue       # search for eligible quadrant failed
+                        continue        # search for eligible quadrant failed
                 except JumpOut:
                     w = m
                 except JumpOut:
                     w = m
-           # deliver the child 
-           game.state.remkl += 1
-           q.klingons += 1
-           if game.quadrant == w:
+            # deliver the child 
+            game.state.remkl += 1
+            q.klingons += 1
+            if game.quadrant == w:
                 game.klhere += 1
                 game.klhere += 1
-               game.enemies.append(newkling())
-           # recompute time left
+                game.enemies.append(newkling())
+            # recompute time left
             game.recompute()
             game.recompute()
-           if communicating():
-               if game.quadrant == w:
-                   prout(_("Spock- sensors indicate the Klingons have"))
-                   prout(_("launched a warship from %s.") % q.planet)
-               else:
-                   prout(_("Uhura- Starfleet reports increased Klingon activity"))
-                   if q.planet != None:
-                       proutn(_("near %s ") % q.planet)
-                   prout(_("in Quadrant %s.") % w)
-                               
+            if communicating():
+                if game.quadrant == w:
+                    prout(_("Spock- sensors indicate the Klingons have"))
+                    prout(_("launched a warship from %s.") % q.planet)
+                else:
+                    prout(_("Uhura- Starfleet reports increased Klingon activity"))
+                    if q.planet != None:
+                        proutn(_("near %s ") % q.planet)
+                    prout(_("in Quadrant %s.") % w)
+                                
 def wait():
     "Wait on events."
     game.ididit = False
     while True:
 def wait():
     "Wait on events."
     game.ididit = False
     while True:
-       key = scanner.nexttok()
-       if key  != "IHEOL":
-           break
-       proutn(_("How long? "))
+        key = scanner.nexttok()
+        if key  != "IHEOL":
+            break
+        proutn(_("How long? "))
     scanner.chew()
     if key != "IHREAL":
     scanner.chew()
     if key != "IHREAL":
-       huh()
-       return
+        huh()
+        return
     origTime = delay = scanner.real
     if delay <= 0.0:
     origTime = delay = scanner.real
     if delay <= 0.0:
-       return
+        return
     if delay >= game.state.remtime or len(game.enemies) != 0:
     if delay >= game.state.remtime or len(game.enemies) != 0:
-       proutn(_("Are you sure? "))
-       if not ja():
-           return
+        proutn(_("Are you sure? "))
+        if not ja():
+            return
     # Alternate resting periods (events) with attacks 
     game.resting = True
     while True:
     # Alternate resting periods (events) with attacks 
     game.resting = True
     while True:
-       if delay <= 0:
-           game.resting = False
-       if not game.resting:
-           prout(_("%d stardates left.") % int(game.state.remtime))
-           return
-       temp = game.optime = delay
-       if len(game.enemies):
-           rtime = randreal(1.0, 2.0)
-           if rtime < temp:
-               temp = rtime
-           game.optime = temp
-       if game.optime < delay:
-           attack(torps_ok=False)
-       if game.alldone:
-           return
-       events()
-       game.ididit = True
-       if game.alldone:
-           return
-       delay -= temp
-       # Repair Deathray if long rest at starbase 
-       if origTime-delay >= 9.99 and game.condition == "docked":
-           game.damage[DDRAY] = 0.0
-       # leave if quadrant supernovas
+        if delay <= 0:
+            game.resting = False
+        if not game.resting:
+            prout(_("%d stardates left.") % int(game.state.remtime))
+            return
+        temp = game.optime = delay
+        if len(game.enemies):
+            rtime = randreal(1.0, 2.0)
+            if rtime < temp:
+                temp = rtime
+            game.optime = temp
+        if game.optime < delay:
+            attack(torps_ok=False)
+        if game.alldone:
+            return
+        events()
+        game.ididit = True
+        if game.alldone:
+            return
+        delay -= temp
+        # Repair Deathray if long rest at starbase 
+        if origTime-delay >= 9.99 and game.condition == "docked":
+            game.damage[DDRAY] = 0.0
+        # leave if quadrant supernovas
         if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
             break
     game.resting = False
         if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
             break
     game.resting = False
@@ -2469,9 +2476,9 @@ def nova(nov):
     ncourse = (0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5)
     newc = Coord(); neighbor = Coord(); bump = Coord(0, 0)
     if withprob(0.05):
     ncourse = (0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5)
     newc = Coord(); neighbor = Coord(); bump = Coord(0, 0)
     if withprob(0.05):
-       # Wow! We've supernova'ed 
-       supernova(game.quadrant)
-       return
+        # Wow! We've supernova'ed 
+        supernova(game.quadrant)
+        return
     # handle initial nova 
     game.quad[nov.i][nov.j] = '.'
     prout(crmena(False, '*', "sector", nov) + _(" novas."))
     # handle initial nova 
     game.quad[nov.i][nov.j] = '.'
     prout(crmena(False, '*', "sector", nov) + _(" novas."))
@@ -2501,10 +2508,10 @@ def nova(nov):
                         return
                     else:
                         hits.append(neighbor)
                         return
                     else:
                         hits.append(neighbor)
-                       game.state.galaxy[game.quadrant.i][game.quadrant.j].stars -= 1
-                       game.state.starkl += 1
-                       proutn(crmena(True, '*', "sector", neighbor))
-                       prout(_(" novas."))
+                        game.state.galaxy[game.quadrant.i][game.quadrant.j].stars -= 1
+                        game.state.starkl += 1
+                        proutn(crmena(True, '*', "sector", neighbor))
+                        prout(_(" novas."))
                         game.quad[neighbor.i][neighbor.j] = '.'
                         kount += 1
                 elif iquad in ('P', '@'): # Destroy planet 
                         game.quad[neighbor.i][neighbor.j] = '.'
                         kount += 1
                 elif iquad in ('P', '@'): # Destroy planet 
@@ -2523,7 +2530,7 @@ def nova(nov):
                     game.quad[neighbor.i][neighbor.j] = '.'
                 elif iquad == 'B': # Destroy base 
                     game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase = False
                     game.quad[neighbor.i][neighbor.j] = '.'
                 elif iquad == 'B': # Destroy base 
                     game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase = False
-                    game.state.baseq = filter(lambda x: x!= game.quadrant, game.state.baseq)
+                    game.state.baseq = [x for x in game.state.baseq if x!= game.quadrant]
                     game.base.invalidate()
                     game.state.basekl += 1
                     newcnd()
                     game.base.invalidate()
                     game.state.basekl += 1
                     newcnd()
@@ -2582,9 +2589,9 @@ def nova(nov):
     dist = kount*0.1
     direc = ncourse[3*(bump.i+1)+bump.j+2]
     if direc == 0.0:
     dist = kount*0.1
     direc = ncourse[3*(bump.i+1)+bump.j+2]
     if direc == 0.0:
-       dist = 0.0
+        dist = 0.0
     if dist == 0.0:
     if dist == 0.0:
-       return
+        return
     scourse = course(bearing=direc, distance=dist)
     game.optime = scourse.time(warp=4)
     skip(1)
     scourse = course(bearing=direc, distance=dist)
     game.optime = scourse.time(warp=4)
     skip(1)
@@ -2592,70 +2599,70 @@ def nova(nov):
     imove(scourse, noattack=True)
     game.optime = scourse.time(warp=4)
     return
     imove(scourse, noattack=True)
     game.optime = scourse.time(warp=4)
     return
-       
+        
 def supernova(w):
     "Star goes supernova."
     num = 0; npdead = 0
     if w != None: 
 def supernova(w):
     "Star goes supernova."
     num = 0; npdead = 0
     if w != None: 
-       nq = copy.copy(w)
+        nq = copy.copy(w)
     else:
     else:
-       # Scheduled supernova -- select star at random. 
-       stars = 0
+        # Scheduled supernova -- select star at random. 
+        stars = 0
         nq = Coord()
         nq = Coord()
-       for nq.i in range(GALSIZE):
-           for nq.j in range(GALSIZE):
-               stars += game.state.galaxy[nq.i][nq.j].stars
-       if stars == 0:
-           return # nothing to supernova exists 
-       num = randrange(stars) + 1
-       for nq.i in range(GALSIZE):
-           for nq.j in range(GALSIZE):
-               num -= game.state.galaxy[nq.i][nq.j].stars
-               if num <= 0:
-                   break
-           if num <=0:
-               break
-       if game.idebug:
-           proutn("=== Super nova here?")
-           if ja():
-               nq = game.quadrant
+        for nq.i in range(GALSIZE):
+            for nq.j in range(GALSIZE):
+                stars += game.state.galaxy[nq.i][nq.j].stars
+        if stars == 0:
+            return # nothing to supernova exists 
+        num = randrange(stars) + 1
+        for nq.i in range(GALSIZE):
+            for nq.j in range(GALSIZE):
+                num -= game.state.galaxy[nq.i][nq.j].stars
+                if num <= 0:
+                    break
+            if num <=0:
+                break
+        if game.idebug:
+            proutn("=== Super nova here?")
+            if ja():
+                nq = game.quadrant
     if not nq == game.quadrant or game.justin:
     if not nq == game.quadrant or game.justin:
-       # it isn't here, or we just entered (treat as enroute) 
-       if communicating():
-           skip(1)
-           prout(_("Message from Starfleet Command       Stardate %.2f") % game.state.date)
-           prout(_("     Supernova in Quadrant %s; caution advised.") % nq)
+        # it isn't here, or we just entered (treat as enroute) 
+        if communicating():
+            skip(1)
+            prout(_("Message from Starfleet Command       Stardate %.2f") % game.state.date)
+            prout(_("     Supernova in Quadrant %s; caution advised.") % nq)
     else:
     else:
-       ns = Coord()
-       # we are in the quadrant! 
-       num = randrange(game.state.galaxy[nq.i][nq.j].stars) + 1
-       for ns.i in range(QUADSIZE):
-           for ns.j in range(QUADSIZE):
-               if game.quad[ns.i][ns.j]=='*':
-                   num -= 1
-                   if num==0:
-                       break
-           if num==0:
-               break
-       skip(1)
-       prouts(_("***RED ALERT!  RED ALERT!"))
-       skip(1)
-       prout(_("***Incipient supernova detected at Sector %s") % ns)
-       if (ns.i-game.sector.i)**2 + (ns.j-game.sector.j)**2 <= 2.1:
-           proutn(_("Emergency override attempts t"))
-           prouts("***************")
-           skip(1)
-           stars()
-           game.alldone = True
+        ns = Coord()
+        # we are in the quadrant! 
+        num = randrange(game.state.galaxy[nq.i][nq.j].stars) + 1
+        for ns.i in range(QUADSIZE):
+            for ns.j in range(QUADSIZE):
+                if game.quad[ns.i][ns.j]=='*':
+                    num -= 1
+                    if num==0:
+                        break
+            if num==0:
+                break
+        skip(1)
+        prouts(_("***RED ALERT!  RED ALERT!"))
+        skip(1)
+        prout(_("***Incipient supernova detected at Sector %s") % ns)
+        if (ns.i-game.sector.i)**2 + (ns.j-game.sector.j)**2 <= 2.1:
+            proutn(_("Emergency override attempts t"))
+            prouts("***************")
+            skip(1)
+            stars()
+            game.alldone = True
     # destroy any Klingons in supernovaed quadrant
     kldead = game.state.galaxy[nq.i][nq.j].klingons
     game.state.galaxy[nq.i][nq.j].klingons = 0
     if nq == game.state.kscmdr:
     # destroy any Klingons in supernovaed quadrant
     kldead = game.state.galaxy[nq.i][nq.j].klingons
     game.state.galaxy[nq.i][nq.j].klingons = 0
     if nq == game.state.kscmdr:
-       # did in the Supercommander! 
-       game.state.nscrem = game.state.kscmdr.i = game.state.kscmdr.j = game.isatb =  0
-       game.iscate = False
-       unschedule(FSCMOVE)
-       unschedule(FSCDBAS)
+        # did in the Supercommander! 
+        game.state.nscrem = game.state.kscmdr.i = game.state.kscmdr.j = game.isatb =  0
+        game.iscate = False
+        unschedule(FSCMOVE)
+        unschedule(FSCDBAS)
     survivors = filter(lambda w: w != nq, game.state.kcmdr)
     comkills = len(game.state.kcmdr) - len(survivors)
     game.state.kcmdr = survivors
     survivors = filter(lambda w: w != nq, game.state.kcmdr)
     comkills = len(game.state.kcmdr) - len(survivors)
     game.state.kcmdr = survivors
@@ -2669,30 +2676,30 @@ def supernova(w):
     game.state.nromrem -= nrmdead
     # Destroy planets 
     for loop in range(game.inplan):
     game.state.nromrem -= nrmdead
     # Destroy planets 
     for loop in range(game.inplan):
-       if game.state.planets[loop].quadrant == nq:
-           game.state.planets[loop].pclass = "destroyed"
-           npdead += 1
+        if game.state.planets[loop].quadrant == nq:
+            game.state.planets[loop].pclass = "destroyed"
+            npdead += 1
     # Destroy any base in supernovaed quadrant
     # Destroy any base in supernovaed quadrant
-    game.state.baseq = filter(lambda x: x != nq, game.state.baseq)
+    game.state.baseq = [x for x in game.state.baseq if x != nq]
     # If starship caused supernova, tally up destruction 
     if w != None:
     # If starship caused supernova, tally up destruction 
     if w != None:
-       game.state.starkl += game.state.galaxy[nq.i][nq.j].stars
-       game.state.basekl += game.state.galaxy[nq.i][nq.j].starbase
-       game.state.nplankl += npdead
+        game.state.starkl += game.state.galaxy[nq.i][nq.j].stars
+        game.state.basekl += game.state.galaxy[nq.i][nq.j].starbase
+        game.state.nplankl += npdead
     # mark supernova in galaxy and in star chart 
     if game.quadrant == nq or communicating():
     # mark supernova in galaxy and in star chart 
     if game.quadrant == nq or communicating():
-       game.state.galaxy[nq.i][nq.j].supernova = True
+        game.state.galaxy[nq.i][nq.j].supernova = True
     # If supernova destroys last Klingons give special message 
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0 and not nq == game.quadrant:
     # If supernova destroys last Klingons give special message 
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0 and not nq == game.quadrant:
-       skip(2)
-       if w == None:
-           prout(_("Lucky you!"))
-       proutn(_("A supernova in %s has just destroyed the last Klingons.") % nq)
-       finish(FWON)
-       return
+        skip(2)
+        if w == None:
+            prout(_("Lucky you!"))
+        proutn(_("A supernova in %s has just destroyed the last Klingons.") % nq)
+        finish(FWON)
+        return
     # if some Klingons remain, continue or die in supernova 
     if game.alldone:
     # if some Klingons remain, continue or die in supernova 
     if game.alldone:
-       finish(FSNOVAED)
+        finish(FSNOVAED)
     return
 
 # Code from finish.c ends here.
     return
 
 # Code from finish.c ends here.
@@ -2701,8 +2708,8 @@ def selfdestruct():
     "Self-destruct maneuver. Finish with a BANG!" 
     scanner.chew()
     if damaged(DCOMPTR):
     "Self-destruct maneuver. Finish with a BANG!" 
     scanner.chew()
     if damaged(DCOMPTR):
-       prout(_("Computer damaged; cannot execute destruct sequence."))
-       return
+        prout(_("Computer damaged; cannot execute destruct sequence."))
+        return
     prouts(_("---WORKING---")); skip(1)
     prouts(_("SELF-DESTRUCT-SEQUENCE-ACTIVATED")); skip(1)
     prouts("   10"); skip(1)
     prouts(_("---WORKING---")); skip(1)
     prouts(_("SELF-DESTRUCT-SEQUENCE-ACTIVATED")); skip(1)
     prouts("   10"); skip(1)
@@ -2719,11 +2726,11 @@ def selfdestruct():
     skip(1)
     scanner.nexttok()
     if game.passwd != scanner.token:
     skip(1)
     scanner.nexttok()
     if game.passwd != scanner.token:
-       prouts(_("PASSWORD-REJECTED;"))
-       skip(1)
-       prouts(_("CONTINUITY-EFFECTED"))
-       skip(2)
-       return
+        prouts(_("PASSWORD-REJECTED;"))
+        skip(1)
+        prouts(_("CONTINUITY-EFFECTED"))
+        skip(2)
+        return
     prouts(_("PASSWORD-ACCEPTED")); skip(1)
     prouts("                   5"); skip(1)
     prouts("                      4"); skip(1)
     prouts(_("PASSWORD-ACCEPTED")); skip(1)
     prouts("                   5"); skip(1)
     prouts("                      4"); skip(1)
@@ -2731,29 +2738,29 @@ def selfdestruct():
     prouts("                            2"); skip(1)
     prouts("                              1"); skip(1)
     if withprob(0.15):
     prouts("                            2"); skip(1)
     prouts("                              1"); skip(1)
     if withprob(0.15):
-       prouts(_("GOODBYE-CRUEL-WORLD"))
-       skip(1)
+        prouts(_("GOODBYE-CRUEL-WORLD"))
+        skip(1)
     kaboom()
 
 def kaboom():
     stars()
     if game.ship=='E':
     kaboom()
 
 def kaboom():
     stars()
     if game.ship=='E':
-       prouts("***")
+        prouts("***")
     prouts(_("********* Entropy of %s maximized *********") % crmshp())
     skip(1)
     stars()
     skip(1)
     if len(game.enemies) != 0:
     prouts(_("********* Entropy of %s maximized *********") % crmshp())
     skip(1)
     stars()
     skip(1)
     if len(game.enemies) != 0:
-       whammo = 25.0 * game.energy
-       for l in range(len(game.enemies)):
-           if game.enemies[l].power*game.enemies[l].kdist <= whammo: 
-               deadkl(game.enemies[l].location, game.quad[game.enemies[l].location.i][game.enemies[l].location.j], game.enemies[l].location)
+        whammo = 25.0 * game.energy
+        for l in range(len(game.enemies)):
+            if game.enemies[l].power*game.enemies[l].kdist <= whammo: 
+                deadkl(game.enemies[l].location, game.quad[game.enemies[l].location.i][game.enemies[l].location.j], game.enemies[l].location)
     finish(FDILITHIUM)
     finish(FDILITHIUM)
-                               
+                                
 def killrate():
     "Compute our rate of kils over time."
     elapsed = game.state.date - game.indate
 def killrate():
     "Compute our rate of kils over time."
     elapsed = game.state.date - game.indate
-    if elapsed == 0:   # Avoid divide-by-zero error if calculated on turn 0
+    if elapsed == 0:        # Avoid divide-by-zero error if calculated on turn 0
         return 0
     else:
         starting = (game.inkling + game.incom + game.inscom)
         return 0
     else:
         starting = (game.inkling + game.incom + game.inscom)
@@ -2783,270 +2790,270 @@ def finish(ifin):
     prout(_("It is stardate %.1f.") % game.state.date)
     skip(1)
     if ifin == FWON: # Game has been won
     prout(_("It is stardate %.1f.") % game.state.date)
     skip(1)
     if ifin == FWON: # Game has been won
-       if game.state.nromrem != 0:
-           prout(_("The remaining %d Romulans surrender to Starfleet Command.") %
-                 game.state.nromrem)
-
-       prout(_("You have smashed the Klingon invasion fleet and saved"))
-       prout(_("the Federation."))
-       game.gamewon = True
-       if game.alive:
+        if game.state.nromrem != 0:
+            prout(_("The remaining %d Romulans surrender to Starfleet Command.") %
+                  game.state.nromrem)
+
+        prout(_("You have smashed the Klingon invasion fleet and saved"))
+        prout(_("the Federation."))
+        game.gamewon = True
+        if game.alive:
             badpt = badpoints()
             if badpt < 100.0:
             badpt = badpoints()
             if badpt < 100.0:
-                badpt = 0.0    # Close enough!
+                badpt = 0.0        # Close enough!
             # killsPerDate >= RateMax
             # killsPerDate >= RateMax
-           if game.state.date-game.indate < 5.0 or \
+            if game.state.date-game.indate < 5.0 or \
                 killrate() >= 0.1*game.skill*(game.skill+1.0) + 0.1 + 0.008*badpt:
                 killrate() >= 0.1*game.skill*(game.skill+1.0) + 0.1 + 0.008*badpt:
-               skip(1)
-               prout(_("In fact, you have done so well that Starfleet Command"))
-               if game.skill == SKILL_NOVICE:
-                   prout(_("promotes you one step in rank from \"Novice\" to \"Fair\"."))
-               elif game.skill == SKILL_FAIR:
-                   prout(_("promotes you one step in rank from \"Fair\" to \"Good\"."))
-               elif game.skill == SKILL_GOOD:
-                   prout(_("promotes you one step in rank from \"Good\" to \"Expert\"."))
-               elif game.skill == SKILL_EXPERT:
-                   prout(_("promotes you to Commodore Emeritus."))
-                   skip(1)
-                   prout(_("Now that you think you're really good, try playing"))
-                   prout(_("the \"Emeritus\" game. It will splatter your ego."))
-               elif game.skill == SKILL_EMERITUS:
-                   skip(1)
-                   proutn(_("Computer-  "))
-                   prouts(_("ERROR-ERROR-ERROR-ERROR"))
-                   skip(2)
-                   prouts(_("  YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM"))
-                   skip(1)
-                   prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
-                   skip(1)
-                   prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
-                   skip(1)
-                   prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
-                   skip(1)
-                   prouts(_("  THIS-PROGRAM-MUST?- MUST ? - SUR? ? -?  VI"))
-                   skip(2)
-                   prout(_("Now you can retire and write your own Star Trek game!"))
-                   skip(1)
-               elif game.skill >= SKILL_EXPERT:
-                   if game.thawed and not game.idebug:
-                       prout(_("You cannot get a citation, so..."))
-                   else:
-                       proutn(_("Do you want your Commodore Emeritus Citation printed? "))
-                       scanner.chew()
-                       if ja():
-                           igotit = True
-           # Only grant long life if alive (original didn't!)
-           skip(1)
-           prout(_("LIVE LONG AND PROSPER."))
-       score()
-       if igotit:
-           plaque()        
-       return
-    elif ifin == FDEPLETE: # Federation Resources Depleted
-       prout(_("Your time has run out and the Federation has been"))
-       prout(_("conquered.  Your starship is now Klingon property,"))
-       prout(_("and you are put on trial as a war criminal.  On the"))
-       proutn(_("basis of your record, you are "))
-       if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)*3.0 > (game.inkling + game.incom + game.inscom):
-           prout(_("acquitted."))
-           skip(1)
-           prout(_("LIVE LONG AND PROSPER."))
-       else:
-           prout(_("found guilty and"))
-           prout(_("sentenced to death by slow torture."))
-           game.alive = False
-       score()
-       return
-    elif ifin == FLIFESUP:
-       prout(_("Your life support reserves have run out, and"))
-       prout(_("you die of thirst, starvation, and asphyxiation."))
-       prout(_("Your starship is a derelict in space."))
-    elif ifin == FNRG:
-       prout(_("Your energy supply is exhausted."))
-       skip(1)
-       prout(_("Your starship is a derelict in space."))
-    elif ifin == FBATTLE:
-       prout(_("The %s has been destroyed in battle.") % crmshp())
-       skip(1)
-       prout(_("Dulce et decorum est pro patria mori."))
+                skip(1)
+                prout(_("In fact, you have done so well that Starfleet Command"))
+                if game.skill == SKILL_NOVICE:
+                    prout(_("promotes you one step in rank from \"Novice\" to \"Fair\"."))
+                elif game.skill == SKILL_FAIR:
+                    prout(_("promotes you one step in rank from \"Fair\" to \"Good\"."))
+                elif game.skill == SKILL_GOOD:
+                    prout(_("promotes you one step in rank from \"Good\" to \"Expert\"."))
+                elif game.skill == SKILL_EXPERT:
+                    prout(_("promotes you to Commodore Emeritus."))
+                    skip(1)
+                    prout(_("Now that you think you're really good, try playing"))
+                    prout(_("the \"Emeritus\" game. It will splatter your ego."))
+                elif game.skill == SKILL_EMERITUS:
+                    skip(1)
+                    proutn(_("Computer-  "))
+                    prouts(_("ERROR-ERROR-ERROR-ERROR"))
+                    skip(2)
+                    prouts(_("  YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM"))
+                    skip(1)
+                    prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
+                    skip(1)
+                    prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
+                    skip(1)
+                    prouts(_("  THIS-PROGRAM-MUST-SURVIVE"))
+                    skip(1)
+                    prouts(_("  THIS-PROGRAM-MUST?- MUST ? - SUR? ? -?  VI"))
+                    skip(2)
+                    prout(_("Now you can retire and write your own Star Trek game!"))
+                    skip(1)
+                elif game.skill >= SKILL_EXPERT:
+                    if game.thawed and not game.idebug:
+                        prout(_("You cannot get a citation, so..."))
+                    else:
+                        proutn(_("Do you want your Commodore Emeritus Citation printed? "))
+                        scanner.chew()
+                        if ja():
+                            igotit = True
+            # Only grant long life if alive (original didn't!)
+            skip(1)
+            prout(_("LIVE LONG AND PROSPER."))
+        score()
+        if igotit:
+            plaque()            
+        return
+    elif ifin == FDEPLETE: # Federation Resources Depleted
+        prout(_("Your time has run out and the Federation has been"))
+        prout(_("conquered.  Your starship is now Klingon property,"))
+        prout(_("and you are put on trial as a war criminal.  On the"))
+        proutn(_("basis of your record, you are "))
+        if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)*3.0 > (game.inkling + game.incom + game.inscom):
+            prout(_("acquitted."))
+            skip(1)
+            prout(_("LIVE LONG AND PROSPER."))
+        else:
+            prout(_("found guilty and"))
+            prout(_("sentenced to death by slow torture."))
+            game.alive = False
+        score()
+        return
+    elif ifin == FLIFESUP:
+        prout(_("Your life support reserves have run out, and"))
+        prout(_("you die of thirst, starvation, and asphyxiation."))
+        prout(_("Your starship is a derelict in space."))
+    elif ifin == FNRG:
+        prout(_("Your energy supply is exhausted."))
+        skip(1)
+        prout(_("Your starship is a derelict in space."))
+    elif ifin == FBATTLE:
+        prout(_("The %s has been destroyed in battle.") % crmshp())
+        skip(1)
+        prout(_("Dulce et decorum est pro patria mori."))
     elif ifin == FNEG3:
     elif ifin == FNEG3:
-       prout(_("You have made three attempts to cross the negative energy"))
-       prout(_("barrier which surrounds the galaxy."))
-       skip(1)
-       prout(_("Your navigation is abominable."))
-       score()
+        prout(_("You have made three attempts to cross the negative energy"))
+        prout(_("barrier which surrounds the galaxy."))
+        skip(1)
+        prout(_("Your navigation is abominable."))
+        score()
     elif ifin == FNOVA:
     elif ifin == FNOVA:
-       prout(_("Your starship has been destroyed by a nova."))
-       prout(_("That was a great shot."))
-       skip(1)
+        prout(_("Your starship has been destroyed by a nova."))
+        prout(_("That was a great shot."))
+        skip(1)
     elif ifin == FSNOVAED:
     elif ifin == FSNOVAED:
-       prout(_("The %s has been fried by a supernova.") % crmshp())
-       prout(_("...Not even cinders remain..."))
+        prout(_("The %s has been fried by a supernova.") % crmshp())
+        prout(_("...Not even cinders remain..."))
     elif ifin == FABANDN:
     elif ifin == FABANDN:
-       prout(_("You have been captured by the Klingons. If you still"))
-       prout(_("had a starbase to be returned to, you would have been"))
-       prout(_("repatriated and given another chance. Since you have"))
-       prout(_("no starbases, you will be mercilessly tortured to death."))
+        prout(_("You have been captured by the Klingons. If you still"))
+        prout(_("had a starbase to be returned to, you would have been"))
+        prout(_("repatriated and given another chance. Since you have"))
+        prout(_("no starbases, you will be mercilessly tortured to death."))
     elif ifin == FDILITHIUM:
     elif ifin == FDILITHIUM:
-       prout(_("Your starship is now an expanding cloud of subatomic particles"))
+        prout(_("Your starship is now an expanding cloud of subatomic particles"))
     elif ifin == FMATERIALIZE:
     elif ifin == FMATERIALIZE:
-       prout(_("Starbase was unable to re-materialize your starship."))
-       prout(_("Sic transit gloria mundi"))
+        prout(_("Starbase was unable to re-materialize your starship."))
+        prout(_("Sic transit gloria mundi"))
     elif ifin == FPHASER:
     elif ifin == FPHASER:
-       prout(_("The %s has been cremated by its own phasers.") % crmshp())
+        prout(_("The %s has been cremated by its own phasers.") % crmshp())
     elif ifin == FLOST:
     elif ifin == FLOST:
-       prout(_("You and your landing party have been"))
-       prout(_("converted to energy, disipating through space."))
+        prout(_("You and your landing party have been"))
+        prout(_("converted to energy, disipating through space."))
     elif ifin == FMINING:
     elif ifin == FMINING:
-       prout(_("You are left with your landing party on"))
-       prout(_("a wild jungle planet inhabited by primitive cannibals."))
-       skip(1)
-       prout(_("They are very fond of \"Captain Kirk\" soup."))
-       skip(1)
-       prout(_("Without your leadership, the %s is destroyed.") % crmshp())
+        prout(_("You are left with your landing party on"))
+        prout(_("a wild jungle planet inhabited by primitive cannibals."))
+        skip(1)
+        prout(_("They are very fond of \"Captain Kirk\" soup."))
+        skip(1)
+        prout(_("Without your leadership, the %s is destroyed.") % crmshp())
     elif ifin == FDPLANET:
     elif ifin == FDPLANET:
-       prout(_("You and your mining party perish."))
-       skip(1)
-       prout(_("That was a great shot."))
-       skip(1)
+        prout(_("You and your mining party perish."))
+        skip(1)
+        prout(_("That was a great shot."))
+        skip(1)
     elif ifin == FSSC:
     elif ifin == FSSC:
-       prout(_("The Galileo is instantly annihilated by the supernova."))
-       prout(_("You and your mining party are atomized."))
-       skip(1)
-       prout(_("Mr. Spock takes command of the %s and") % crmshp())
-       prout(_("joins the Romulans, wreaking terror on the Federation."))
+        prout(_("The Galileo is instantly annihilated by the supernova."))
+        prout(_("You and your mining party are atomized."))
+        skip(1)
+        prout(_("Mr. Spock takes command of the %s and") % crmshp())
+        prout(_("joins the Romulans, wreaking terror on the Federation."))
     elif ifin == FPNOVA:
     elif ifin == FPNOVA:
-       prout(_("You and your mining party are atomized."))
-       skip(1)
-       prout(_("Mr. Spock takes command of the %s and") % crmshp())
-       prout(_("joins the Romulans, wreaking terror on the Federation."))
+        prout(_("You and your mining party are atomized."))
+        skip(1)
+        prout(_("Mr. Spock takes command of the %s and") % crmshp())
+        prout(_("joins the Romulans, wreaking terror on the Federation."))
     elif ifin == FSTRACTOR:
     elif ifin == FSTRACTOR:
-       prout(_("The shuttle craft Galileo is also caught,"))
-       prout(_("and breaks up under the strain."))
-       skip(1)
-       prout(_("Your debris is scattered for millions of miles."))
-       prout(_("Without your leadership, the %s is destroyed.") % crmshp())
+        prout(_("The shuttle craft Galileo is also caught,"))
+        prout(_("and breaks up under the strain."))
+        skip(1)
+        prout(_("Your debris is scattered for millions of miles."))
+        prout(_("Without your leadership, the %s is destroyed.") % crmshp())
     elif ifin == FDRAY:
     elif ifin == FDRAY:
-       prout(_("The mutants attack and kill Spock."))
-       prout(_("Your ship is captured by Klingons, and"))
-       prout(_("your crew is put on display in a Klingon zoo."))
+        prout(_("The mutants attack and kill Spock."))
+        prout(_("Your ship is captured by Klingons, and"))
+        prout(_("your crew is put on display in a Klingon zoo."))
     elif ifin == FTRIBBLE:
     elif ifin == FTRIBBLE:
-       prout(_("Tribbles consume all remaining water,"))
-       prout(_("food, and oxygen on your ship."))
-       skip(1)
-       prout(_("You die of thirst, starvation, and asphyxiation."))
-       prout(_("Your starship is a derelict in space."))
+        prout(_("Tribbles consume all remaining water,"))
+        prout(_("food, and oxygen on your ship."))
+        skip(1)
+        prout(_("You die of thirst, starvation, and asphyxiation."))
+        prout(_("Your starship is a derelict in space."))
     elif ifin == FHOLE:
     elif ifin == FHOLE:
-       prout(_("Your ship is drawn to the center of the black hole."))
-       prout(_("You are crushed into extremely dense matter."))
+        prout(_("Your ship is drawn to the center of the black hole."))
+        prout(_("You are crushed into extremely dense matter."))
     elif ifin == FCREW:
     elif ifin == FCREW:
-       prout(_("Your last crew member has died."))
+        prout(_("Your last crew member has died."))
     if game.ship == 'F':
     if game.ship == 'F':
-       game.ship = None
+        game.ship = None
     elif game.ship == 'E':
     elif game.ship == 'E':
-       game.ship = 'F'
+        game.ship = 'F'
     game.alive = False
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0:
     game.alive = False
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0:
-       goodies = game.state.remres/game.inresor
-       baddies = (game.state.remkl + 2.0*len(game.state.kcmdr))/(game.inkling+2.0*game.incom)
-       if goodies/baddies >= randreal(1.0, 1.5):
-           prout(_("As a result of your actions, a treaty with the Klingon"))
-           prout(_("Empire has been signed. The terms of the treaty are"))
-           if goodies/baddies >= randreal(3.0):
-               prout(_("favorable to the Federation."))
-               skip(1)
-               prout(_("Congratulations!"))
-           else:
-               prout(_("highly unfavorable to the Federation."))
-       else:
-           prout(_("The Federation will be destroyed."))
+        goodies = game.state.remres/game.inresor
+        baddies = (game.state.remkl + 2.0*len(game.state.kcmdr))/(game.inkling+2.0*game.incom)
+        if goodies/baddies >= randreal(1.0, 1.5):
+            prout(_("As a result of your actions, a treaty with the Klingon"))
+            prout(_("Empire has been signed. The terms of the treaty are"))
+            if goodies/baddies >= randreal(3.0):
+                prout(_("favorable to the Federation."))
+                skip(1)
+                prout(_("Congratulations!"))
+            else:
+                prout(_("highly unfavorable to the Federation."))
+        else:
+            prout(_("The Federation will be destroyed."))
     else:
     else:
-       prout(_("Since you took the last Klingon with you, you are a"))
-       prout(_("martyr and a hero. Someday maybe they'll erect a"))
-       prout(_("statue in your memory. Rest in peace, and try not"))
-       prout(_("to think about pigeons."))
-       game.gamewon = True
+        prout(_("Since you took the last Klingon with you, you are a"))
+        prout(_("martyr and a hero. Someday maybe they'll erect a"))
+        prout(_("statue in your memory. Rest in peace, and try not"))
+        prout(_("to think about pigeons."))
+        game.gamewon = True
     score()
 
 def score():
     "Compute player's score."
     timused = game.state.date - game.indate
     if (timused == 0 or (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0) and timused < 5.0:
     score()
 
 def score():
     "Compute player's score."
     timused = game.state.date - game.indate
     if (timused == 0 or (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0) and timused < 5.0:
-       timused = 5.0
+        timused = 5.0
     game.perdate = killrate()
     ithperd = 500*game.perdate + 0.5
     iwon = 0
     if game.gamewon:
     game.perdate = killrate()
     ithperd = 500*game.perdate + 0.5
     iwon = 0
     if game.gamewon:
-       iwon = 100*game.skill
+        iwon = 100*game.skill
     if game.ship == 'E': 
     if game.ship == 'E': 
-       klship = 0
+        klship = 0
     elif game.ship == 'F': 
     elif game.ship == 'F': 
-       klship = 1
+        klship = 1
     else:
     else:
-       klship = 2
+        klship = 2
     game.score = 10*(game.inkling - game.state.remkl) \
              + 50*(game.incom - len(game.state.kcmdr)) \
              + ithperd + iwon \
              + 20*(game.inrom - game.state.nromrem) \
              + 200*(game.inscom - game.state.nscrem) \
     game.score = 10*(game.inkling - game.state.remkl) \
              + 50*(game.incom - len(game.state.kcmdr)) \
              + ithperd + iwon \
              + 20*(game.inrom - game.state.nromrem) \
              + 200*(game.inscom - game.state.nscrem) \
-            - game.state.nromrem \
+                 - game.state.nromrem \
              - badpoints()
     if not game.alive:
              - badpoints()
     if not game.alive:
-       game.score -= 200
+        game.score -= 200
     skip(2)
     prout(_("Your score --"))
     if game.inrom - game.state.nromrem:
     skip(2)
     prout(_("Your score --"))
     if game.inrom - game.state.nromrem:
-       prout(_("%6d Romulans destroyed                 %5d") %
-             (game.inrom - game.state.nromrem, 20*(game.inrom - game.state.nromrem)))
+        prout(_("%6d Romulans destroyed                 %5d") %
+              (game.inrom - game.state.nromrem, 20*(game.inrom - game.state.nromrem)))
     if game.state.nromrem and game.gamewon:
     if game.state.nromrem and game.gamewon:
-       prout(_("%6d Romulans captured                  %5d") %
-             (game.state.nromrem, game.state.nromrem))
+        prout(_("%6d Romulans captured                  %5d") %
+              (game.state.nromrem, game.state.nromrem))
     if game.inkling - game.state.remkl:
     if game.inkling - game.state.remkl:
-       prout(_("%6d ordinary Klingons destroyed        %5d") %
-             (game.inkling - game.state.remkl, 10*(game.inkling - game.state.remkl)))
+        prout(_("%6d ordinary Klingons destroyed        %5d") %
+              (game.inkling - game.state.remkl, 10*(game.inkling - game.state.remkl)))
     if game.incom - len(game.state.kcmdr):
     if game.incom - len(game.state.kcmdr):
-       prout(_("%6d Klingon commanders destroyed       %5d") %
-             (game.incom - len(game.state.kcmdr), 50*(game.incom - len(game.state.kcmdr))))
+        prout(_("%6d Klingon commanders destroyed       %5d") %
+              (game.incom - len(game.state.kcmdr), 50*(game.incom - len(game.state.kcmdr))))
     if game.inscom - game.state.nscrem:
     if game.inscom - game.state.nscrem:
-       prout(_("%6d Super-Commander destroyed          %5d") %
-             (game.inscom - game.state.nscrem, 200*(game.inscom - game.state.nscrem)))
+        prout(_("%6d Super-Commander destroyed          %5d") %
+              (game.inscom - game.state.nscrem, 200*(game.inscom - game.state.nscrem)))
     if ithperd:
     if ithperd:
-       prout(_("%6.2f Klingons per stardate              %5d") %
-             (game.perdate, ithperd))
+        prout(_("%6.2f Klingons per stardate              %5d") %
+              (game.perdate, ithperd))
     if game.state.starkl:
     if game.state.starkl:
-       prout(_("%6d stars destroyed by your action     %5d") %
-             (game.state.starkl, -5*game.state.starkl))
+        prout(_("%6d stars destroyed by your action     %5d") %
+              (game.state.starkl, -5*game.state.starkl))
     if game.state.nplankl:
     if game.state.nplankl:
-       prout(_("%6d planets destroyed by your action   %5d") %
-             (game.state.nplankl, -10*game.state.nplankl))
+        prout(_("%6d planets destroyed by your action   %5d") %
+              (game.state.nplankl, -10*game.state.nplankl))
     if (game.options & OPTION_WORLDS) and game.state.nworldkl:
     if (game.options & OPTION_WORLDS) and game.state.nworldkl:
-       prout(_("%6d inhabited planets destroyed by your action   %5d") %
-             (game.state.nworldkl, -300*game.state.nworldkl))
+        prout(_("%6d inhabited planets destroyed by your action   %5d") %
+              (game.state.nworldkl, -300*game.state.nworldkl))
     if game.state.basekl:
     if game.state.basekl:
-       prout(_("%6d bases destroyed by your action     %5d") %
-             (game.state.basekl, -100*game.state.basekl))
+        prout(_("%6d bases destroyed by your action     %5d") %
+              (game.state.basekl, -100*game.state.basekl))
     if game.nhelp:
     if game.nhelp:
-       prout(_("%6d calls for help from starbase       %5d") %
-             (game.nhelp, -45*game.nhelp))
+        prout(_("%6d calls for help from starbase       %5d") %
+              (game.nhelp, -45*game.nhelp))
     if game.casual:
     if game.casual:
-       prout(_("%6d casualties incurred                %5d") %
-             (game.casual, -game.casual))
+        prout(_("%6d casualties incurred                %5d") %
+              (game.casual, -game.casual))
     if game.abandoned:
     if game.abandoned:
-       prout(_("%6d crew abandoned in space            %5d") %
-             (game.abandoned, -3*game.abandoned))
+        prout(_("%6d crew abandoned in space            %5d") %
+              (game.abandoned, -3*game.abandoned))
     if klship:
     if klship:
-       prout(_("%6d ship(s) lost or destroyed          %5d") %
-             (klship, -100*klship))
+        prout(_("%6d ship(s) lost or destroyed          %5d") %
+              (klship, -100*klship))
     if not game.alive:
     if not game.alive:
-       prout(_("Penalty for getting yourself killed        -200"))
+        prout(_("Penalty for getting yourself killed        -200"))
     if game.gamewon:
     if game.gamewon:
-       proutn(_("Bonus for winning "))
-       if game.skill   == SKILL_NOVICE:        proutn(_("Novice game  "))
-       elif game.skill == SKILL_FAIR:          proutn(_("Fair game    "))
-       elif game.skill ==  SKILL_GOOD:         proutn(_("Good game    "))
-       elif game.skill ==  SKILL_EXPERT:       proutn(_("Expert game  "))
-       elif game.skill ==  SKILL_EMERITUS:     proutn(_("Emeritus game"))
-       prout("           %5d" % iwon)
+        proutn(_("Bonus for winning "))
+        if game.skill   == SKILL_NOVICE:        proutn(_("Novice game  "))
+        elif game.skill == SKILL_FAIR:          proutn(_("Fair game    "))
+        elif game.skill ==  SKILL_GOOD:         proutn(_("Good game    "))
+        elif game.skill ==  SKILL_EXPERT:        proutn(_("Expert game  "))
+        elif game.skill ==  SKILL_EMERITUS:        proutn(_("Emeritus game"))
+        prout("           %5d" % iwon)
     skip(1)
     prout(_("TOTAL SCORE                               %5d") % game.score)
 
     skip(1)
     prout(_("TOTAL SCORE                               %5d") % game.score)
 
@@ -3110,16 +3117,16 @@ def plaque():
 
 # Code from io.c begins here
 
 
 # Code from io.c begins here
 
-rows = linecount = 0   # for paging 
+rows = linecount = 0        # for paging 
 stdscr = None
 replayfp = None
 fullscreen_window = None
 stdscr = None
 replayfp = None
 fullscreen_window = None
-srscan_window     = None
-report_window     = None
-status_window     = None
-lrscan_window     = None
-message_window    = None
-prompt_window     = None
+srscan_window     = None   # Short range scan
+report_window     = None   # Report legends for status window
+status_window     = None   # The status window itself
+lrscan_window     = None   # Long range scan
+message_window    = None   # Main window for scrolling text
+prompt_window     = None   # Prompt window at bottom of display
 curwnd = None
 
 def iostart():
 curwnd = None
 
 def iostart():
@@ -3128,21 +3135,21 @@ def iostart():
     "for the older ones we probably need to set C locale, and the python3"
     "has no problems at all"
     if sys.version_info[0] < 3:
     "for the older ones we probably need to set C locale, and the python3"
     "has no problems at all"
     if sys.version_info[0] < 3:
-       import locale
-       locale.setlocale(locale.LC_ALL, "")
+        import locale
+        locale.setlocale(locale.LC_ALL, "")
     gettext.bindtextdomain("sst", "/usr/local/share/locale")
     gettext.textdomain("sst")
     if not (game.options & OPTION_CURSES):
     gettext.bindtextdomain("sst", "/usr/local/share/locale")
     gettext.textdomain("sst")
     if not (game.options & OPTION_CURSES):
-       ln_env = os.getenv("LINES")
+        ln_env = os.getenv("LINES")
         if ln_env:
             rows = ln_env
         else:
             rows = 25
     else:
         if ln_env:
             rows = ln_env
         else:
             rows = 25
     else:
-       stdscr = curses.initscr()
-       stdscr.keypad(True)
-       curses.nonl()
-       curses.cbreak()
+        stdscr = curses.initscr()
+        stdscr.keypad(True)
+        curses.nonl()
+        curses.cbreak()
         if game.options & OPTION_COLOR:
             curses.start_color()
             curses.use_default_colors()
         if game.options & OPTION_COLOR:
             curses.start_color()
             curses.use_default_colors()
@@ -3157,15 +3164,15 @@ def iostart():
         global fullscreen_window, srscan_window, report_window, status_window
         global lrscan_window, message_window, prompt_window
         (rows, columns)   = stdscr.getmaxyx()
         global fullscreen_window, srscan_window, report_window, status_window
         global lrscan_window, message_window, prompt_window
         (rows, columns)   = stdscr.getmaxyx()
-       fullscreen_window = stdscr
-       srscan_window     = curses.newwin(12, 25, 0,       0)
-       report_window     = curses.newwin(11, 0,  1,       25)
-       status_window     = curses.newwin(10, 0,  1,       39)
-       lrscan_window     = curses.newwin(5,  0,  0,       64) 
-       message_window    = curses.newwin(0,  0,  12,      0)
-       prompt_window     = curses.newwin(1,  0,  rows-2,  0) 
-       message_window.scrollok(True)
-       setwnd(fullscreen_window)
+        fullscreen_window = stdscr
+        srscan_window     = curses.newwin(12, 25, 0,       0)
+        report_window     = curses.newwin(11, 0,  1,       25)
+        status_window     = curses.newwin(10, 0,  1,       39)
+        lrscan_window     = curses.newwin(5,  0,  0,       64) 
+        message_window    = curses.newwin(0,  0,  12,      0)
+        prompt_window     = curses.newwin(1,  0,  rows-2,  0) 
+        message_window.scrollok(True)
+        setwnd(fullscreen_window)
 
 def ioend():
     "Wrap up I/O."
 
 def ioend():
     "Wrap up I/O."
@@ -3178,7 +3185,7 @@ def ioend():
 def waitfor():
     "Wait for user action -- OK to do nothing if on a TTY"
     if game.options & OPTION_CURSES:
 def waitfor():
     "Wait for user action -- OK to do nothing if on a TTY"
     if game.options & OPTION_CURSES:
-       stdscr.getch()
+        stdscr.getch()
 
 def announce():
     skip(1)
 
 def announce():
     skip(1)
@@ -3205,42 +3212,42 @@ def pause_game():
         sys.stdout.write('\n')
         proutn(prompt)
         if not replayfp:
         sys.stdout.write('\n')
         proutn(prompt)
         if not replayfp:
-            raw_input()
+            input()
         sys.stdout.write('\n' * rows)
         linecount = 0
 
 def skip(i):
     "Skip i lines.  Pause game if this would cause a scrolling event."
     for dummy in range(i):
         sys.stdout.write('\n' * rows)
         linecount = 0
 
 def skip(i):
     "Skip i lines.  Pause game if this would cause a scrolling event."
     for dummy in range(i):
-       if game.options & OPTION_CURSES:
-           (y, x) = curwnd.getyx()
-           try:
-               curwnd.move(y+1, 0)
-           except curses.error:
-               pass
-       else:
+        if game.options & OPTION_CURSES:
+            (y, x) = curwnd.getyx()
+            try:
+                curwnd.move(y+1, 0)
+            except curses.error:
+                pass
+        else:
             global linecount
             global linecount
-           linecount += 1
-           if rows and linecount >= rows:
-               pause_game()
-           else:
-               sys.stdout.write('\n')
+            linecount += 1
+            if rows and linecount >= rows:
+                pause_game()
+            else:
+                sys.stdout.write('\n')
 
 def proutn(line):
     "Utter a line with no following line feed."
     if game.options & OPTION_CURSES:
 
 def proutn(line):
     "Utter a line with no following line feed."
     if game.options & OPTION_CURSES:
-       (y, x) = curwnd.getyx()
-       (my, mx) = curwnd.getmaxyx()
-       if curwnd == message_window and y >= my - 2:
-           pause_game()
-           clrscr()
+        (y, x) = curwnd.getyx()
+        (my, mx) = curwnd.getmaxyx()
+        if curwnd == message_window and y >= my - 2:
+            pause_game()
+            clrscr()
         # Uncomment this to debug curses problems
         if logfp:
             logfp.write("#curses: at %s proutn(%s)\n" % ((y, x), repr(line)))
         # Uncomment this to debug curses problems
         if logfp:
             logfp.write("#curses: at %s proutn(%s)\n" % ((y, x), repr(line)))
-       curwnd.addstr(line)
-       curwnd.refresh()
+        curwnd.addstr(line)
+        curwnd.refresh()
     else:
     else:
-       sys.stdout.write(line)
+        sys.stdout.write(line)
         sys.stdout.flush()
 
 def prout(line):
         sys.stdout.flush()
 
 def prout(line):
@@ -3250,23 +3257,23 @@ def prout(line):
 def prouts(line):
     "Emit slowly!" 
     for c in line:
 def prouts(line):
     "Emit slowly!" 
     for c in line:
-        if not replayfp or replayfp.closed:    # Don't slow down replays
+        if not replayfp or replayfp.closed:        # Don't slow down replays
             time.sleep(0.03)
             time.sleep(0.03)
-       proutn(c)
-       if game.options & OPTION_CURSES:
-           curwnd.refresh()
-       else:
-           sys.stdout.flush()
+        proutn(c)
+        if game.options & OPTION_CURSES:
+            curwnd.refresh()
+        else:
+            sys.stdout.flush()
     if not replayfp or replayfp.closed:
         time.sleep(0.03)
 
 def cgetline():
     "Get a line of input."
     if game.options & OPTION_CURSES:
     if not replayfp or replayfp.closed:
         time.sleep(0.03)
 
 def cgetline():
     "Get a line of input."
     if game.options & OPTION_CURSES:
-       line = curwnd.getstr() + "\n"
-       curwnd.refresh()
+        line = curwnd.getstr() + "\n"
+        curwnd.refresh()
     else:
     else:
-       if replayfp and not replayfp.closed:
+        if replayfp and not replayfp.closed:
             while True:
                 line = replayfp.readline()
                 proutn(line)
             while True:
                 line = replayfp.readline()
                 proutn(line)
@@ -3276,10 +3283,10 @@ def cgetline():
                     break
                 elif line[0] != "#":
                     break
                     break
                 elif line[0] != "#":
                     break
-       else:
-           line = input() + "\n"
+        else:
+            line = eval(input()) + "\n"
     if logfp:
     if logfp:
-       logfp.write(line)
+        logfp.write(line)
     return line
 
 def setwnd(wnd):
     return line
 
 def setwnd(wnd):
@@ -3329,40 +3336,40 @@ def clrscr():
 
 def textcolor(color=DEFAULT):
     if game.options & OPTION_COLOR:
 
 def textcolor(color=DEFAULT):
     if game.options & OPTION_COLOR:
-       if color == DEFAULT: 
-           curwnd.attrset(0)
-       elif color ==  BLACK: 
-           curwnd.attron(curses.color_pair(curses.COLOR_BLACK))
-       elif color ==  BLUE: 
-           curwnd.attron(curses.color_pair(curses.COLOR_BLUE))
-       elif color ==  GREEN: 
-           curwnd.attron(curses.color_pair(curses.COLOR_GREEN))
-       elif color ==  CYAN: 
-           curwnd.attron(curses.color_pair(curses.COLOR_CYAN))
-       elif color ==  RED: 
-           curwnd.attron(curses.color_pair(curses.COLOR_RED))
-       elif color ==  MAGENTA: 
-           curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA))
-       elif color ==  BROWN: 
-           curwnd.attron(curses.color_pair(curses.COLOR_YELLOW))
-       elif color ==  LIGHTGRAY: 
-           curwnd.attron(curses.color_pair(curses.COLOR_WHITE))
-       elif color ==  DARKGRAY: 
-           curwnd.attron(curses.color_pair(curses.COLOR_BLACK) | curses.A_BOLD)
-       elif color ==  LIGHTBLUE: 
-           curwnd.attron(curses.color_pair(curses.COLOR_BLUE) | curses.A_BOLD)
-       elif color ==  LIGHTGREEN: 
-           curwnd.attron(curses.color_pair(curses.COLOR_GREEN) | curses.A_BOLD)
-       elif color ==  LIGHTCYAN: 
-           curwnd.attron(curses.color_pair(curses.COLOR_CYAN) | curses.A_BOLD)
-       elif color ==  LIGHTRED: 
-           curwnd.attron(curses.color_pair(curses.COLOR_RED) | curses.A_BOLD)
-       elif color ==  LIGHTMAGENTA: 
-           curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA) | curses.A_BOLD)
-       elif color ==  YELLOW: 
-           curwnd.attron(curses.color_pair(curses.COLOR_YELLOW) | curses.A_BOLD)
-       elif color ==  WHITE:
-           curwnd.attron(curses.color_pair(curses.COLOR_WHITE) | curses.A_BOLD)
+        if color == DEFAULT: 
+            curwnd.attrset(0)
+        elif color ==  BLACK: 
+            curwnd.attron(curses.color_pair(curses.COLOR_BLACK))
+        elif color ==  BLUE: 
+            curwnd.attron(curses.color_pair(curses.COLOR_BLUE))
+        elif color ==  GREEN: 
+            curwnd.attron(curses.color_pair(curses.COLOR_GREEN))
+        elif color ==  CYAN: 
+            curwnd.attron(curses.color_pair(curses.COLOR_CYAN))
+        elif color ==  RED: 
+            curwnd.attron(curses.color_pair(curses.COLOR_RED))
+        elif color ==  MAGENTA: 
+            curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA))
+        elif color ==  BROWN: 
+            curwnd.attron(curses.color_pair(curses.COLOR_YELLOW))
+        elif color ==  LIGHTGRAY: 
+            curwnd.attron(curses.color_pair(curses.COLOR_WHITE))
+        elif color ==  DARKGRAY: 
+            curwnd.attron(curses.color_pair(curses.COLOR_BLACK) | curses.A_BOLD)
+        elif color ==  LIGHTBLUE: 
+            curwnd.attron(curses.color_pair(curses.COLOR_BLUE) | curses.A_BOLD)
+        elif color ==  LIGHTGREEN: 
+            curwnd.attron(curses.color_pair(curses.COLOR_GREEN) | curses.A_BOLD)
+        elif color ==  LIGHTCYAN: 
+            curwnd.attron(curses.color_pair(curses.COLOR_CYAN) | curses.A_BOLD)
+        elif color ==  LIGHTRED: 
+            curwnd.attron(curses.color_pair(curses.COLOR_RED) | curses.A_BOLD)
+        elif color ==  LIGHTMAGENTA: 
+            curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA) | curses.A_BOLD)
+        elif color ==  YELLOW: 
+            curwnd.attron(curses.color_pair(curses.COLOR_YELLOW) | curses.A_BOLD)
+        elif color ==  WHITE:
+            curwnd.attron(curses.color_pair(curses.COLOR_WHITE) | curses.A_BOLD)
 
 def highvideo():
     if game.options & OPTION_COLOR:
 
 def highvideo():
     if game.options & OPTION_COLOR:
@@ -3375,23 +3382,23 @@ def highvideo():
 def drawmaps(mode):
     "Hook to be called after moving to redraw maps."
     if game.options & OPTION_CURSES:
 def drawmaps(mode):
     "Hook to be called after moving to redraw maps."
     if game.options & OPTION_CURSES:
-       if mode == 1:
-           sensor()
+        if mode == 1:
+            sensor()
         setwnd(srscan_window)
         curwnd.move(0, 0)
         srscan()
         setwnd(srscan_window)
         curwnd.move(0, 0)
         srscan()
-       if mode != 2:
-           setwnd(status_window)
-           status_window.clear()
-           status_window.move(0, 0)
-           setwnd(report_window)
-           report_window.clear()
-           report_window.move(0, 0)
-           status()
-           setwnd(lrscan_window)
-           lrscan_window.clear()
-           lrscan_window.move(0, 0)
-           lrscan(silent=False)
+        if mode != 2:
+            setwnd(status_window)
+            status_window.clear()
+            status_window.move(0, 0)
+            setwnd(report_window)
+            report_window.clear()
+            report_window.move(0, 0)
+            status()
+            setwnd(lrscan_window)
+            lrscan_window.clear()
+            lrscan_window.move(0, 0)
+            lrscan(silent=False)
 
 def put_srscan_sym(w, sym):
     "Emit symbol for short-range scan."
 
 def put_srscan_sym(w, sym):
     "Emit symbol for short-range scan."
@@ -3402,87 +3409,87 @@ def put_srscan_sym(w, sym):
 def boom(w):
     "Enemy fall down, go boom."  
     if game.options & OPTION_CURSES:
 def boom(w):
     "Enemy fall down, go boom."  
     if game.options & OPTION_CURSES:
-       drawmaps(2)
-       setwnd(srscan_window)
-       srscan_window.attron(curses.A_REVERSE)
-       put_srscan_sym(w, game.quad[w.i][w.j])
-       #sound(500)
-       #time.sleep(1.0)
-       #nosound()
-       srscan_window.attroff(curses.A_REVERSE)
-       put_srscan_sym(w, game.quad[w.i][w.j])
-       curses.delay_output(500)
-       setwnd(message_window) 
+        drawmaps(2)
+        setwnd(srscan_window)
+        srscan_window.attron(curses.A_REVERSE)
+        put_srscan_sym(w, game.quad[w.i][w.j])
+        #sound(500)
+        #time.sleep(1.0)
+        #nosound()
+        srscan_window.attroff(curses.A_REVERSE)
+        put_srscan_sym(w, game.quad[w.i][w.j])
+        curses.delay_output(500)
+        setwnd(message_window) 
 
 def warble():
     "Sound and visual effects for teleportation."
     if game.options & OPTION_CURSES:
 
 def warble():
     "Sound and visual effects for teleportation."
     if game.options & OPTION_CURSES:
-       drawmaps(2)
-       setwnd(message_window)
-       #sound(50)
+        drawmaps(2)
+        setwnd(message_window)
+        #sound(50)
     prouts("     . . . . .     ")
     if game.options & OPTION_CURSES:
     prouts("     . . . . .     ")
     if game.options & OPTION_CURSES:
-       #curses.delay_output(1000)
-       #nosound()
+        #curses.delay_output(1000)
+        #nosound()
         pass
 
 def tracktorpedo(w, step, i, n, iquad):
     "Torpedo-track animation." 
     if not game.options & OPTION_CURSES:
         pass
 
 def tracktorpedo(w, step, i, n, iquad):
     "Torpedo-track animation." 
     if not game.options & OPTION_CURSES:
-       if step == 1:
-           if n != 1:
-               skip(1)
-               proutn(_("Track for torpedo number %d-  ") % (i+1))
-           else:
-               skip(1)
-               proutn(_("Torpedo track- "))
-       elif step==4 or step==9: 
-           skip(1)
-       proutn("%s   " % w)
+        if step == 1:
+            if n != 1:
+                skip(1)
+                proutn(_("Track for torpedo number %d-  ") % (i+1))
+            else:
+                skip(1)
+                proutn(_("Torpedo track- "))
+        elif step==4 or step==9: 
+            skip(1)
+        proutn("%s   " % w)
     else:
     else:
-       if not damaged(DSRSENS) or game.condition=="docked":
-           if i != 0 and step == 1:
-               drawmaps(2)
-               time.sleep(0.4)
-           if (iquad=='.') or (iquad==' '):
-               put_srscan_sym(w, '+')
-               #sound(step*10)
-               #time.sleep(0.1)
-               #nosound()
-               put_srscan_sym(w, iquad)
-           else:
-               curwnd.attron(curses.A_REVERSE)
-               put_srscan_sym(w, iquad)
-               #sound(500)
-               #time.sleep(1.0)
-               #nosound()
-               curwnd.attroff(curses.A_REVERSE)
-               put_srscan_sym(w, iquad)
-       else:
-           proutn("%s   " % w)
+        if not damaged(DSRSENS) or game.condition=="docked":
+            if i != 0 and step == 1:
+                drawmaps(2)
+                time.sleep(0.4)
+            if (iquad=='.') or (iquad==' '):
+                put_srscan_sym(w, '+')
+                #sound(step*10)
+                #time.sleep(0.1)
+                #nosound()
+                put_srscan_sym(w, iquad)
+            else:
+                curwnd.attron(curses.A_REVERSE)
+                put_srscan_sym(w, iquad)
+                #sound(500)
+                #time.sleep(1.0)
+                #nosound()
+                curwnd.attroff(curses.A_REVERSE)
+                put_srscan_sym(w, iquad)
+        else:
+            proutn("%s   " % w)
 
 def makechart():
     "Display the current galaxy chart."
     if game.options & OPTION_CURSES:
 
 def makechart():
     "Display the current galaxy chart."
     if game.options & OPTION_CURSES:
-       setwnd(message_window)
-       message_window.clear()
+        setwnd(message_window)
+        message_window.clear()
     chart()
     if game.options & OPTION_TTY:
     chart()
     if game.options & OPTION_TTY:
-       skip(1)
+        skip(1)
 
 
-NSYM   = 14
+NSYM        = 14
 
 def prstat(txt, data):
     proutn(txt)
     if game.options & OPTION_CURSES:
 
 def prstat(txt, data):
     proutn(txt)
     if game.options & OPTION_CURSES:
-       skip(1)
-       setwnd(status_window)
+        skip(1)
+        setwnd(status_window)
     else:
         proutn(" " * (NSYM - len(txt)))
     proutn(data)
     skip(1)
     if game.options & OPTION_CURSES:
     else:
         proutn(" " * (NSYM - len(txt)))
     proutn(data)
     skip(1)
     if game.options & OPTION_CURSES:
-       setwnd(report_window)
+        setwnd(report_window)
 
 # Code from moving.c begins here
 
 
 # Code from moving.c begins here
 
@@ -3595,14 +3602,14 @@ def imove(icourse=None, noattack=False):
 
     trbeam = False
     if game.inorbit:
 
     trbeam = False
     if game.inorbit:
-       prout(_("Helmsman Sulu- \"Leaving standard orbit.\""))
-       game.inorbit = False
+        prout(_("Helmsman Sulu- \"Leaving standard orbit.\""))
+        game.inorbit = False
     # If tractor beam is to occur, don't move full distance 
     if game.state.date+game.optime >= scheduled(FTBEAM):
     # If tractor beam is to occur, don't move full distance 
     if game.state.date+game.optime >= scheduled(FTBEAM):
-       trbeam = True
-       game.condition = "red"
-       icourse.distance = icourse.distance*(scheduled(FTBEAM)-game.state.date)/game.optime + 0.1
-       game.optime = scheduled(FTBEAM) - game.state.date + 1e-5
+        trbeam = True
+        game.condition = "red"
+        icourse.distance = icourse.distance*(scheduled(FTBEAM)-game.state.date)/game.optime + 0.1
+        game.optime = scheduled(FTBEAM) - game.state.date + 1e-5
     # Move out
     game.quad[game.sector.i][game.sector.j] = '.'
     for m in range(icourse.moves):
     # Move out
     game.quad[game.sector.i][game.sector.j] = '.'
     for m in range(icourse.moves):
@@ -3637,30 +3644,30 @@ def dock(verbose):
     "Dock our ship at a starbase."
     scanner.chew()
     if game.condition == "docked" and verbose:
     "Dock our ship at a starbase."
     scanner.chew()
     if game.condition == "docked" and verbose:
-       prout(_("Already docked."))
-       return
+        prout(_("Already docked."))
+        return
     if game.inorbit:
     if game.inorbit:
-       prout(_("You must first leave standard orbit."))
-       return
+        prout(_("You must first leave standard orbit."))
+        return
     if not game.base.is_valid() or abs(game.sector.i-game.base.i) > 1 or abs(game.sector.j-game.base.j) > 1:
     if not game.base.is_valid() or abs(game.sector.i-game.base.i) > 1 or abs(game.sector.j-game.base.j) > 1:
-       prout(crmshp() + _(" not adjacent to base."))
-       return
+        prout(crmshp() + _(" not adjacent to base."))
+        return
     game.condition = "docked"
     if "verbose":
     game.condition = "docked"
     if "verbose":
-       prout(_("Docked."))
+        prout(_("Docked."))
     game.ididit = True
     if game.energy < game.inenrg:
     game.ididit = True
     if game.energy < game.inenrg:
-       game.energy = game.inenrg
+        game.energy = game.inenrg
     game.shield = game.inshld
     game.torps = game.intorps
     game.lsupres = game.inlsr
     game.state.crew = FULLCREW
     if not damaged(DRADIO) and \
     game.shield = game.inshld
     game.torps = game.intorps
     game.lsupres = game.inlsr
     game.state.crew = FULLCREW
     if not damaged(DRADIO) and \
-       ((is_scheduled(FCDBAS) or game.isatb == 1) and not game.iseenit):
-       # get attack report from base 
-       prout(_("Lt. Uhura- \"Captain, an important message from the starbase:\""))
-       attackreport(False)
-       game.iseenit = True
+        ((is_scheduled(FCDBAS) or game.isatb == 1) and not game.iseenit):
+        # get attack report from base 
+        prout(_("Lt. Uhura- \"Captain, an important message from the starbase:\""))
+        attackreport(False)
+        game.iseenit = True
 
 def cartesian(loc1=None, loc2=None):
     if loc1 is None:
 
 def cartesian(loc1=None, loc2=None):
     if loc1 is None:
@@ -3679,125 +3686,125 @@ def getcourse(isprobe):
     dsect = Coord()
     iprompt = False
     if game.landed and not isprobe:
     dsect = Coord()
     iprompt = False
     if game.landed and not isprobe:
-       prout(_("Dummy! You can't leave standard orbit until you"))
-       proutn(_("are back aboard the ship."))
-       scanner.chew()
-       raise TrekError
+        prout(_("Dummy! You can't leave standard orbit until you"))
+        proutn(_("are back aboard the ship."))
+        scanner.chew()
+        raise TrekError
     while navmode == "unspecified":
     while navmode == "unspecified":
-       if damaged(DNAVSYS):
-           if isprobe:
-               prout(_("Computer damaged; manual navigation only"))
-           else:
-               prout(_("Computer damaged; manual movement only"))
-           scanner.chew()
-           navmode = "manual"
-           key = "IHEOL"
-           break
+        if damaged(DNAVSYS):
+            if isprobe:
+                prout(_("Computer damaged; manual navigation only"))
+            else:
+                prout(_("Computer damaged; manual movement only"))
+            scanner.chew()
+            navmode = "manual"
+            key = "IHEOL"
+            break
         key = scanner.nexttok()
         key = scanner.nexttok()
-       if key == "IHEOL":
-           proutn(_("Manual or automatic- "))
-           iprompt = True
-           scanner.chew()
-       elif key == "IHALPHA":
+        if key == "IHEOL":
+            proutn(_("Manual or automatic- "))
+            iprompt = True
+            scanner.chew()
+        elif key == "IHALPHA":
             if scanner.sees("manual"):
             if scanner.sees("manual"):
-               navmode = "manual"
-               key = scanner.nexttok()
-               break
+                navmode = "manual"
+                key = scanner.nexttok()
+                break
             elif scanner.sees("automatic"):
             elif scanner.sees("automatic"):
-               navmode = "automatic"
-               key = scanner.nexttok()
-               break
-           else:
-               huh()
-               scanner.chew()
-               raise TrekError
-       else: # numeric 
-           if isprobe:
-               prout(_("(Manual navigation assumed.)"))
-           else:
-               prout(_("(Manual movement assumed.)"))
-           navmode = "manual"
-           break
+                navmode = "automatic"
+                key = scanner.nexttok()
+                break
+            else:
+                huh()
+                scanner.chew()
+                raise TrekError
+        else: # numeric 
+            if isprobe:
+                prout(_("(Manual navigation assumed.)"))
+            else:
+                prout(_("(Manual movement assumed.)"))
+            navmode = "manual"
+            break
     delta = Coord()
     if navmode == "automatic":
     delta = Coord()
     if navmode == "automatic":
-       while key == "IHEOL":
-           if isprobe:
-               proutn(_("Target quadrant or quadrant&sector- "))
-           else:
-               proutn(_("Destination sector or quadrant&sector- "))
-           scanner.chew()
-           iprompt = True
-           key = scanner.nexttok()
-       if key != "IHREAL":
-           huh()
-           raise TrekError
-       xi = int(round(scanner.real))-1
-       key = scanner.nexttok()
-       if key != "IHREAL":
-           huh()
-           raise TrekError
-       xj = int(round(scanner.real))-1
-       key = scanner.nexttok()
-       if key == "IHREAL":
-           # both quadrant and sector specified 
-           xk = int(round(scanner.real))-1
-           key = scanner.nexttok()
-           if key != "IHREAL":
-               huh()
-               raise TrekError
-           xl = int(round(scanner.real))-1
-           dquad.i = xi
-           dquad.j = xj
-           dsect.i = xk
-           dsect.j = xl
-       else:
+        while key == "IHEOL":
+            if isprobe:
+                proutn(_("Target quadrant or quadrant&sector- "))
+            else:
+                proutn(_("Destination sector or quadrant&sector- "))
+            scanner.chew()
+            iprompt = True
+            key = scanner.nexttok()
+        if key != "IHREAL":
+            huh()
+            raise TrekError
+        xi = int(round(scanner.real))-1
+        key = scanner.nexttok()
+        if key != "IHREAL":
+            huh()
+            raise TrekError
+        xj = int(round(scanner.real))-1
+        key = scanner.nexttok()
+        if key == "IHREAL":
+            # both quadrant and sector specified 
+            xk = int(round(scanner.real))-1
+            key = scanner.nexttok()
+            if key != "IHREAL":
+                huh()
+                raise TrekError
+            xl = int(round(scanner.real))-1
+            dquad.i = xi
+            dquad.j = xj
+            dsect.i = xk
+            dsect.j = xl
+        else:
             # only one pair of numbers was specified
             # only one pair of numbers was specified
-           if isprobe:
-               # only quadrant specified -- go to center of dest quad 
-               dquad.i = xi
-               dquad.j = xj
-               dsect.j = dsect.i = 4   # preserves 1-origin behavior
-           else:
+            if isprobe:
+                # only quadrant specified -- go to center of dest quad 
+                dquad.i = xi
+                dquad.j = xj
+                dsect.j = dsect.i = 4        # preserves 1-origin behavior
+            else:
                 # only sector specified
                 # only sector specified
-               dsect.i = xi
-               dsect.j = xj
-           itemp = "normal"
-       if not dquad.valid_quadrant() or not dsect.valid_sector():
-           huh()
-           raise TrekError
-       skip(1)
-       if not isprobe:
-           if itemp > "curt":
-               if iprompt:
-                   prout(_("Helmsman Sulu- \"Course locked in for Sector %s.\"") % dsect)
-           else:
-               prout(_("Ensign Chekov- \"Course laid in, Captain.\""))
+                dsect.i = xi
+                dsect.j = xj
+            itemp = "normal"
+        if not dquad.valid_quadrant() or not dsect.valid_sector():
+            huh()
+            raise TrekError
+        skip(1)
+        if not isprobe:
+            if itemp > "curt":
+                if iprompt:
+                    prout(_("Helmsman Sulu- \"Course locked in for Sector %s.\"") % dsect)
+            else:
+                prout(_("Ensign Chekov- \"Course laid in, Captain.\""))
         # the actual deltas get computed here
         # the actual deltas get computed here
-       delta.j = dquad.j-game.quadrant.j + (dsect.j-game.sector.j)/(QUADSIZE*1.0)
-       delta.i = game.quadrant.i-dquad.i + (game.sector.i-dsect.i)/(QUADSIZE*1.0)
+        delta.j = dquad.j-game.quadrant.j + (dsect.j-game.sector.j)/(QUADSIZE*1.0)
+        delta.i = game.quadrant.i-dquad.i + (game.sector.i-dsect.i)/(QUADSIZE*1.0)
     else: # manual 
     else: # manual 
-       while key == "IHEOL":
-           proutn(_("X and Y displacements- "))
-           scanner.chew()
-           iprompt = True
-           key = scanner.nexttok()
-       itemp = "verbose"
-       if key != "IHREAL":
-           huh()
-           raise TrekError
-       delta.j = scanner.real
-       key = scanner.nexttok()
-       if key != "IHREAL":
-           huh()
-           raise TrekError
-       delta.i = scanner.real
+        while key == "IHEOL":
+            proutn(_("X and Y displacements- "))
+            scanner.chew()
+            iprompt = True
+            key = scanner.nexttok()
+        itemp = "verbose"
+        if key != "IHREAL":
+            huh()
+            raise TrekError
+        delta.j = scanner.real
+        key = scanner.nexttok()
+        if key != "IHREAL":
+            huh()
+            raise TrekError
+        delta.i = scanner.real
     # Check for zero movement 
     if delta.i == 0 and delta.j == 0:
     # Check for zero movement 
     if delta.i == 0 and delta.j == 0:
-       scanner.chew()
-       raise TrekError
+        scanner.chew()
+        raise TrekError
     if itemp == "verbose" and not isprobe:
     if itemp == "verbose" and not isprobe:
-       skip(1)
-       prout(_("Helmsman Sulu- \"Aye, Sir.\""))
+        skip(1)
+        prout(_("Helmsman Sulu- \"Aye, Sir.\""))
     scanner.chew()
     return course(bearing=delta.bearing(), distance=delta.distance())
 
     scanner.chew()
     return course(bearing=delta.bearing(), distance=delta.distance())
 
@@ -3841,7 +3848,7 @@ class course:
     def sector(self):
         return self.location.sector()
     def power(self, warp):
     def sector(self):
         return self.location.sector()
     def power(self, warp):
-       return self.distance*(warp**3)*(game.shldup+1)
+        return self.distance*(warp**3)*(game.shldup+1)
     def time(self, warp):
         return 10.0*self.distance/warp**2
 
     def time(self, warp):
         return 10.0*self.distance/warp**2
 
@@ -3849,127 +3856,127 @@ def impulse():
     "Move under impulse power."
     game.ididit = False
     if damaged(DIMPULS):
     "Move under impulse power."
     game.ididit = False
     if damaged(DIMPULS):
-       scanner.chew()
-       skip(1)
-       prout(_("Engineer Scott- \"The impulse engines are damaged, Sir.\""))
-       return
+        scanner.chew()
+        skip(1)
+        prout(_("Engineer Scott- \"The impulse engines are damaged, Sir.\""))
+        return
     if game.energy > 30.0:
         try:
             course = getcourse(isprobe=False)
         except TrekError:
     if game.energy > 30.0:
         try:
             course = getcourse(isprobe=False)
         except TrekError:
-           return
-       power = 20.0 + 100.0*course.distance
+            return
+        power = 20.0 + 100.0*course.distance
     else:
     else:
-       power = 30.0
+        power = 30.0
     if power >= game.energy:
     if power >= game.energy:
-       # Insufficient power for trip 
-       skip(1)
-       prout(_("First Officer Spock- \"Captain, the impulse engines"))
-       prout(_("require 20.0 units to engage, plus 100.0 units per"))
-       if game.energy > 30:
-           proutn(_("quadrant.  We can go, therefore, a maximum of %d") %
+        # Insufficient power for trip 
+        skip(1)
+        prout(_("First Officer Spock- \"Captain, the impulse engines"))
+        prout(_("require 20.0 units to engage, plus 100.0 units per"))
+        if game.energy > 30:
+            proutn(_("quadrant.  We can go, therefore, a maximum of %d") %
                      int(0.01 * (game.energy-20.0)-0.05))
                      int(0.01 * (game.energy-20.0)-0.05))
-           prout(_(" quadrants.\""))
-       else:
-           prout(_("quadrant.  They are, therefore, useless.\""))
-       scanner.chew()
-       return
+            prout(_(" quadrants.\""))
+        else:
+            prout(_("quadrant.  They are, therefore, useless.\""))
+        scanner.chew()
+        return
     # Make sure enough time is left for the trip 
     game.optime = course.distance/0.095
     if game.optime >= game.state.remtime:
     # Make sure enough time is left for the trip 
     game.optime = course.distance/0.095
     if game.optime >= game.state.remtime:
-       prout(_("First Officer Spock- \"Captain, our speed under impulse"))
-       prout(_("power is only 0.95 sectors per stardate. Are you sure"))
-       proutn(_("we dare spend the time?\" "))
-       if not ja():
-           return
+        prout(_("First Officer Spock- \"Captain, our speed under impulse"))
+        prout(_("power is only 0.95 sectors per stardate. Are you sure"))
+        proutn(_("we dare spend the time?\" "))
+        if not ja():
+            return
     # Activate impulse engines and pay the cost 
     imove(course, noattack=False)
     game.ididit = True
     if game.alldone:
     # Activate impulse engines and pay the cost 
     imove(course, noattack=False)
     game.ididit = True
     if game.alldone:
-       return
+        return
     power = 20.0 + 100.0*course.distance
     game.energy -= power
     game.optime = course.distance/0.095
     if game.energy <= 0:
     power = 20.0 + 100.0*course.distance
     game.energy -= power
     game.optime = course.distance/0.095
     if game.energy <= 0:
-       finish(FNRG)
+        finish(FNRG)
     return
 
 def warp(wcourse, involuntary):
     "ove under warp drive."
     blooey = False; twarp = False
     if not involuntary: # Not WARPX entry 
     return
 
 def warp(wcourse, involuntary):
     "ove under warp drive."
     blooey = False; twarp = False
     if not involuntary: # Not WARPX entry 
-       game.ididit = False
-       if game.damage[DWARPEN] > 10.0:
-           scanner.chew()
-           skip(1)
-           prout(_("Engineer Scott- \"The warp engines are damaged, Sir.\""))
-           return
-       if damaged(DWARPEN) and game.warpfac > 4.0:
-           scanner.chew()
-           skip(1)
-           prout(_("Engineer Scott- \"Sorry, Captain. Until this damage"))
-           prout(_("  is repaired, I can only give you warp 4.\""))
-           return
-               # Read in course and distance
+        game.ididit = False
+        if game.damage[DWARPEN] > 10.0:
+            scanner.chew()
+            skip(1)
+            prout(_("Engineer Scott- \"The warp engines are damaged, Sir.\""))
+            return
+        if damaged(DWARPEN) and game.warpfac > 4.0:
+            scanner.chew()
+            skip(1)
+            prout(_("Engineer Scott- \"Sorry, Captain. Until this damage"))
+            prout(_("  is repaired, I can only give you warp 4.\""))
+            return
+               # Read in course and distance
         if wcourse==None:
             try:
                 wcourse = getcourse(isprobe=False)
             except TrekError:
                 return
         if wcourse==None:
             try:
                 wcourse = getcourse(isprobe=False)
             except TrekError:
                 return
-       # Make sure starship has enough energy for the trip
+        # Make sure starship has enough energy for the trip
         # Note: this formula is slightly different from the C version,
         # and lets you skate a bit closer to the edge.
         # Note: this formula is slightly different from the C version,
         # and lets you skate a bit closer to the edge.
-       if wcourse.power(game.warpfac) >= game.energy:
-           # Insufficient power for trip 
-           game.ididit = False
-           skip(1)
-           prout(_("Engineering to bridge--"))
-           if not game.shldup or 0.5*wcourse.power(game.warpfac) > game.energy:
-               iwarp = (game.energy/(wcourse.distance+0.05)) ** 0.333333333
-               if iwarp <= 0:
-                   prout(_("We can't do it, Captain. We don't have enough energy."))
-               else:
-                   proutn(_("We don't have enough energy, but we could do it at warp %d") % iwarp)
-                   if game.shldup:
-                       prout(",")
-                       prout(_("if you'll lower the shields."))
-                   else:
-                       prout(".")
-           else:
-               prout(_("We haven't the energy to go that far with the shields up."))
-           return                              
-       # Make sure enough time is left for the trip 
-       game.optime = wcourse.time(game.warpfac)
-       if game.optime >= 0.8*game.state.remtime:
-           skip(1)
-           prout(_("First Officer Spock- \"Captain, I compute that such"))
-           proutn(_("  a trip would require approximately %2.0f") %
-                  (100.0*game.optime/game.state.remtime))
-           prout(_(" percent of our"))
-           proutn(_("  remaining time.  Are you sure this is wise?\" "))
-           if not ja():
-               game.ididit = False
-               game.optime=0 
-               return
+        if wcourse.power(game.warpfac) >= game.energy:
+            # Insufficient power for trip 
+            game.ididit = False
+            skip(1)
+            prout(_("Engineering to bridge--"))
+            if not game.shldup or 0.5*wcourse.power(game.warpfac) > game.energy:
+                iwarp = (game.energy/(wcourse.distance+0.05)) ** 0.333333333
+                if iwarp <= 0:
+                    prout(_("We can't do it, Captain. We don't have enough energy."))
+                else:
+                    proutn(_("We don't have enough energy, but we could do it at warp %d") % iwarp)
+                    if game.shldup:
+                        prout(",")
+                        prout(_("if you'll lower the shields."))
+                    else:
+                        prout(".")
+            else:
+                prout(_("We haven't the energy to go that far with the shields up."))
+            return                                
+        # Make sure enough time is left for the trip 
+        game.optime = wcourse.time(game.warpfac)
+        if game.optime >= 0.8*game.state.remtime:
+            skip(1)
+            prout(_("First Officer Spock- \"Captain, I compute that such"))
+            proutn(_("  a trip would require approximately %2.0f") %
+                   (100.0*game.optime/game.state.remtime))
+            prout(_(" percent of our"))
+            proutn(_("  remaining time.  Are you sure this is wise?\" "))
+            if not ja():
+                game.ididit = False
+                game.optime=0 
+                return
     # Entry WARPX 
     if game.warpfac > 6.0:
     # Entry WARPX 
     if game.warpfac > 6.0:
-       # Decide if engine damage will occur
+        # Decide if engine damage will occur
         # ESR: Seems wrong. Probability of damage goes *down* with distance? 
         # ESR: Seems wrong. Probability of damage goes *down* with distance? 
-       prob = wcourse.distance*(6.0-game.warpfac)**2/66.666666666
-       if prob > randreal():
-           blooey = True
-           wcourse.distance = randreal(wcourse.distance)
-       # Decide if time warp will occur 
-       if 0.5*wcourse.distance*math.pow(7.0,game.warpfac-10.0) > randreal():
-           twarp = True
-       if game.idebug and game.warpfac==10 and not twarp:
-           blooey = False
-           proutn("=== Force time warp? ")
-           if ja():
-               twarp = True
-       if blooey or twarp:
-           # If time warp or engine damage, check path 
-           # If it is obstructed, don't do warp or damage
+        prob = wcourse.distance*(6.0-game.warpfac)**2/66.666666666
+        if prob > randreal():
+            blooey = True
+            wcourse.distance = randreal(wcourse.distance)
+        # Decide if time warp will occur 
+        if 0.5*wcourse.distance*math.pow(7.0,game.warpfac-10.0) > randreal():
+            twarp = True
+        if game.idebug and game.warpfac==10 and not twarp:
+            blooey = False
+            proutn("=== Force time warp? ")
+            if ja():
+                twarp = True
+        if blooey or twarp:
+            # If time warp or engine damage, check path 
+            # If it is obstructed, don't do warp or damage
             look = wcourse.moves
             while look > 0:
                 look -= 1
             look = wcourse.moves
             while look > 0:
                 look -= 1
@@ -3977,26 +3984,26 @@ def warp(wcourse, involuntary):
                 w = wcourse.sector()
                 if not w.valid_sector():
                     break
                 w = wcourse.sector()
                 if not w.valid_sector():
                     break
-               if game.quad[w.i][w.j] != '.':
-                   blooey = False
-                   twarp = False
+                if game.quad[w.i][w.j] != '.':
+                    blooey = False
+                    twarp = False
             wcourse.reset()
     # Activate Warp Engines and pay the cost 
     imove(wcourse, noattack=False)
     if game.alldone:
             wcourse.reset()
     # Activate Warp Engines and pay the cost 
     imove(wcourse, noattack=False)
     if game.alldone:
-       return
+        return
     game.energy -= wcourse.power(game.warpfac)
     if game.energy <= 0:
     game.energy -= wcourse.power(game.warpfac)
     if game.energy <= 0:
-       finish(FNRG)
+        finish(FNRG)
     game.optime = wcourse.time(game.warpfac)
     if twarp:
     game.optime = wcourse.time(game.warpfac)
     if twarp:
-       timwrp()
+        timwrp()
     if blooey:
     if blooey:
-       game.damage[DWARPEN] = game.damfac * randreal(1.0, 4.0)
-       skip(1)
-       prout(_("Engineering to bridge--"))
-       prout(_("  Scott here.  The warp engines are damaged."))
-       prout(_("  We'll have to reduce speed to warp 4."))
+        game.damage[DWARPEN] = game.damfac * randreal(1.0, 4.0)
+        skip(1)
+        prout(_("Engineering to bridge--"))
+        prout(_("  Scott here.  The warp engines are damaged."))
+        prout(_("  We'll have to reduce speed to warp 4."))
     game.ididit = True
     return
 
     game.ididit = True
     return
 
@@ -4006,36 +4013,36 @@ def setwarp():
         key=scanner.nexttok()
         if key != "IHEOL":
             break
         key=scanner.nexttok()
         if key != "IHEOL":
             break
-       scanner.chew()
-       proutn(_("Warp factor- "))
+        scanner.chew()
+        proutn(_("Warp factor- "))
     if key != "IHREAL":
     if key != "IHREAL":
-       huh()
-       return
+        huh()
+        return
     if game.damage[DWARPEN] > 10.0:
     if game.damage[DWARPEN] > 10.0:
-       prout(_("Warp engines inoperative."))
-       return
+        prout(_("Warp engines inoperative."))
+        return
     if damaged(DWARPEN) and scanner.real > 4.0:
     if damaged(DWARPEN) and scanner.real > 4.0:
-       prout(_("Engineer Scott- \"I'm doing my best, Captain,"))
-       prout(_("  but right now we can only go warp 4.\""))
-       return
+        prout(_("Engineer Scott- \"I'm doing my best, Captain,"))
+        prout(_("  but right now we can only go warp 4.\""))
+        return
     if scanner.real > 10.0:
     if scanner.real > 10.0:
-       prout(_("Helmsman Sulu- \"Our top speed is warp 10, Captain.\""))
-       return
+        prout(_("Helmsman Sulu- \"Our top speed is warp 10, Captain.\""))
+        return
     if scanner.real < 1.0:
     if scanner.real < 1.0:
-       prout(_("Helmsman Sulu- \"We can't go below warp 1, Captain.\""))
-       return
+        prout(_("Helmsman Sulu- \"We can't go below warp 1, Captain.\""))
+        return
     oldfac = game.warpfac
     game.warpfac = scanner.real
     if game.warpfac <= oldfac or game.warpfac <= 6.0:
     oldfac = game.warpfac
     game.warpfac = scanner.real
     if game.warpfac <= oldfac or game.warpfac <= 6.0:
-       prout(_("Helmsman Sulu- \"Warp factor %d, Captain.\"") %
-              int(game.warpfac))
-       return
+        prout(_("Helmsman Sulu- \"Warp factor %d, Captain.\"") %
+               int(game.warpfac))
+        return
     if game.warpfac < 8.00:
     if game.warpfac < 8.00:
-       prout(_("Engineer Scott- \"Aye, but our maximum safe speed is warp 6.\""))
-       return
+        prout(_("Engineer Scott- \"Aye, but our maximum safe speed is warp 6.\""))
+        return
     if game.warpfac == 10.0:
     if game.warpfac == 10.0:
-       prout(_("Engineer Scott- \"Aye, Captain, we'll try it.\""))
-       return
+        prout(_("Engineer Scott- \"Aye, Captain, we'll try it.\""))
+        return
     prout(_("Engineer Scott- \"Aye, Captain, but our engines may not take it.\""))
     return
 
     prout(_("Engineer Scott- \"Aye, Captain, but our engines may not take it.\""))
     return
 
@@ -4044,168 +4051,168 @@ def atover(igrab):
     scanner.chew()
     # is captain on planet? 
     if game.landed:
     scanner.chew()
     # is captain on planet? 
     if game.landed:
-       if damaged(DTRANSP):
-           finish(FPNOVA)
-           return
-       prout(_("Scotty rushes to the transporter controls."))
-       if game.shldup:
-           prout(_("But with the shields up it's hopeless."))
-           finish(FPNOVA)
-       prouts(_("His desperate attempt to rescue you . . ."))
-       if withprob(0.5):
-           prout(_("fails."))
-           finish(FPNOVA)
-           return
-       prout(_("SUCCEEDS!"))
-       if game.imine:
-           game.imine = False
-           proutn(_("The crystals mined were "))
-           if withprob(0.25):
-               prout(_("lost."))
-           else:
-               prout(_("saved."))
-               game.icrystl = True
+        if damaged(DTRANSP):
+            finish(FPNOVA)
+            return
+        prout(_("Scotty rushes to the transporter controls."))
+        if game.shldup:
+            prout(_("But with the shields up it's hopeless."))
+            finish(FPNOVA)
+        prouts(_("His desperate attempt to rescue you . . ."))
+        if withprob(0.5):
+            prout(_("fails."))
+            finish(FPNOVA)
+            return
+        prout(_("SUCCEEDS!"))
+        if game.imine:
+            game.imine = False
+            proutn(_("The crystals mined were "))
+            if withprob(0.25):
+                prout(_("lost."))
+            else:
+                prout(_("saved."))
+                game.icrystl = True
     if igrab:
     if igrab:
-       return
+        return
     # Check to see if captain in shuttle craft 
     if game.icraft:
     # Check to see if captain in shuttle craft 
     if game.icraft:
-       finish(FSTRACTOR)
+        finish(FSTRACTOR)
     if game.alldone:
     if game.alldone:
-       return
+        return
     # Inform captain of attempt to reach safety 
     skip(1)
     while True:
     # Inform captain of attempt to reach safety 
     skip(1)
     while True:
-       if game.justin:
-           prouts(_("***RED ALERT!  RED ALERT!"))
-           skip(1)
-           proutn(_("The %s has stopped in a quadrant containing") % crmshp())
-           prouts(_("   a supernova."))
-           skip(2)
-       prout(_("***Emergency automatic override attempts to hurl ")+crmshp())
-       prout(_("safely out of quadrant."))
-       if not damaged(DRADIO):
-           game.state.galaxy[game.quadrant.i][game.quadrant.j].charted = True
-       # Try to use warp engines 
-       if damaged(DWARPEN):
-           skip(1)
-           prout(_("Warp engines damaged."))
-           finish(FSNOVAED)
-           return
-       game.warpfac = randreal(6.0, 8.0)
-       prout(_("Warp factor set to %d") % int(game.warpfac))
-       power = 0.75*game.energy
-       dist = power/(game.warpfac*game.warpfac*game.warpfac*(game.shldup+1))
-       dist = max(dist, randreal(math.sqrt(2)))
-        bugout = course(bearing=randreal(12), distance=dist)   # How dumb!
-       game.optime = bugout.time(game.warpfac)
-       game.justin = False
-       game.inorbit = False
-       warp(bugout, involuntary=True)
-       if not game.justin:
-           # This is bad news, we didn't leave quadrant. 
-           if game.alldone:
-               return
-           skip(1)
-           prout(_("Insufficient energy to leave quadrant."))
-           finish(FSNOVAED)
-           return
-       # Repeat if another snova
+        if game.justin:
+            prouts(_("***RED ALERT!  RED ALERT!"))
+            skip(1)
+            proutn(_("The %s has stopped in a quadrant containing") % crmshp())
+            prouts(_("   a supernova."))
+            skip(2)
+        prout(_("***Emergency automatic override attempts to hurl ")+crmshp())
+        prout(_("safely out of quadrant."))
+        if not damaged(DRADIO):
+            game.state.galaxy[game.quadrant.i][game.quadrant.j].charted = True
+        # Try to use warp engines 
+        if damaged(DWARPEN):
+            skip(1)
+            prout(_("Warp engines damaged."))
+            finish(FSNOVAED)
+            return
+        game.warpfac = randreal(6.0, 8.0)
+        prout(_("Warp factor set to %d") % int(game.warpfac))
+        power = 0.75*game.energy
+        dist = power/(game.warpfac*game.warpfac*game.warpfac*(game.shldup+1))
+        dist = max(dist, randreal(math.sqrt(2)))
+        bugout = course(bearing=randreal(12), distance=dist)        # How dumb!
+        game.optime = bugout.time(game.warpfac)
+        game.justin = False
+        game.inorbit = False
+        warp(bugout, involuntary=True)
+        if not game.justin:
+            # This is bad news, we didn't leave quadrant. 
+            if game.alldone:
+                return
+            skip(1)
+            prout(_("Insufficient energy to leave quadrant."))
+            finish(FSNOVAED)
+            return
+        # Repeat if another snova
         if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
             break
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0: 
         if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
             break
     if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0: 
-       finish(FWON) # Snova killed remaining enemy. 
+        finish(FWON) # Snova killed remaining enemy. 
 
 def timwrp():
     "Let's do the time warp again."
     prout(_("***TIME WARP ENTERED."))
     if game.state.snap and withprob(0.5):
 
 def timwrp():
     "Let's do the time warp again."
     prout(_("***TIME WARP ENTERED."))
     if game.state.snap and withprob(0.5):
-       # Go back in time 
-       prout(_("You are traveling backwards in time %d stardates.") %
-             int(game.state.date-game.snapsht.date))
-       game.state = game.snapsht
-       game.state.snap = False
-       if len(game.state.kcmdr):
-           schedule(FTBEAM, expran(game.intime/len(game.state.kcmdr)))
-           schedule(FBATTAK, expran(0.3*game.intime))
-       schedule(FSNOVA, expran(0.5*game.intime))
-       # next snapshot will be sooner 
-       schedule(FSNAP, expran(0.25*game.state.remtime))
-                               
-       if game.state.nscrem:
-           schedule(FSCMOVE, 0.2777)       
-       game.isatb = 0
-       unschedule(FCDBAS)
-       unschedule(FSCDBAS)
-       game.battle.invalidate()
-       # Make sure Galileo is consistant -- Snapshot may have been taken
+        # Go back in time 
+        prout(_("You are traveling backwards in time %d stardates.") %
+              int(game.state.date-game.snapsht.date))
+        game.state = game.snapsht
+        game.state.snap = False
+        if len(game.state.kcmdr):
+            schedule(FTBEAM, expran(game.intime/len(game.state.kcmdr)))
+            schedule(FBATTAK, expran(0.3*game.intime))
+        schedule(FSNOVA, expran(0.5*game.intime))
+        # next snapshot will be sooner 
+        schedule(FSNAP, expran(0.25*game.state.remtime))
+                                
+        if game.state.nscrem:
+            schedule(FSCMOVE, 0.2777)            
+        game.isatb = 0
+        unschedule(FCDBAS)
+        unschedule(FSCDBAS)
+        game.battle.invalidate()
+        # Make sure Galileo is consistant -- Snapshot may have been taken
         # when on planet, which would give us two Galileos! 
         # when on planet, which would give us two Galileos! 
-       gotit = False
-       for l in range(game.inplan):
-           if game.state.planets[l].known == "shuttle_down":
-               gotit = True
-               if game.iscraft == "onship" and game.ship=='E':
-                   prout(_("Chekov-  \"Security reports the Galileo has disappeared, Sir!"))
-                   game.iscraft = "offship"
-       # Likewise, if in the original time the Galileo was abandoned, but
-       # was on ship earlier, it would have vanished -- let's restore it.
-       if game.iscraft == "offship" and not gotit and game.damage[DSHUTTL] >= 0.0:
-           prout(_("Chekov-  \"Security reports the Galileo has reappeared in the dock!\""))
-           game.iscraft = "onship"
+        gotit = False
+        for l in range(game.inplan):
+            if game.state.planets[l].known == "shuttle_down":
+                gotit = True
+                if game.iscraft == "onship" and game.ship=='E':
+                    prout(_("Chekov-  \"Security reports the Galileo has disappeared, Sir!"))
+                    game.iscraft = "offship"
+        # Likewise, if in the original time the Galileo was abandoned, but
+        # was on ship earlier, it would have vanished -- let's restore it.
+        if game.iscraft == "offship" and not gotit and game.damage[DSHUTTL] >= 0.0:
+            prout(_("Chekov-  \"Security reports the Galileo has reappeared in the dock!\""))
+            game.iscraft = "onship"
         # There used to be code to do the actual reconstrction here,
         # but the starchart is now part of the snapshotted galaxy state.
         # There used to be code to do the actual reconstrction here,
         # but the starchart is now part of the snapshotted galaxy state.
-       prout(_("Spock has reconstructed a correct star chart from memory"))
+        prout(_("Spock has reconstructed a correct star chart from memory"))
     else:
     else:
-       # Go forward in time 
-       game.optime = expran(0.5*game.intime)
-       prout(_("You are traveling forward in time %d stardates.") % int(game.optime))
-       # cheat to make sure no tractor beams occur during time warp 
-       postpone(FTBEAM, game.optime)
-       game.damage[DRADIO] += game.optime
+        # Go forward in time 
+        game.optime = expran(0.5*game.intime)
+        prout(_("You are traveling forward in time %d stardates.") % int(game.optime))
+        # cheat to make sure no tractor beams occur during time warp 
+        postpone(FTBEAM, game.optime)
+        game.damage[DRADIO] += game.optime
     newqad()
     newqad()
-    events()   # Stas Sergeev added this -- do pending events 
+    events()        # Stas Sergeev added this -- do pending events 
 
 def probe():
     "Launch deep-space probe." 
     # New code to launch a deep space probe 
     if game.nprobes == 0:
 
 def probe():
     "Launch deep-space probe." 
     # New code to launch a deep space probe 
     if game.nprobes == 0:
-       scanner.chew()
-       skip(1)
-       if game.ship == 'E': 
-           prout(_("Engineer Scott- \"We have no more deep space probes, Sir.\""))
-       else:
-           prout(_("Ye Faerie Queene has no deep space probes."))
-       return
+        scanner.chew()
+        skip(1)
+        if game.ship == 'E': 
+            prout(_("Engineer Scott- \"We have no more deep space probes, Sir.\""))
+        else:
+            prout(_("Ye Faerie Queene has no deep space probes."))
+        return
     if damaged(DDSP):
     if damaged(DDSP):
-       scanner.chew()
-       skip(1)
-       prout(_("Engineer Scott- \"The probe launcher is damaged, Sir.\""))
-       return
+        scanner.chew()
+        skip(1)
+        prout(_("Engineer Scott- \"The probe launcher is damaged, Sir.\""))
+        return
     if is_scheduled(FDSPROB):
     if is_scheduled(FDSPROB):
-       scanner.chew()
-       skip(1)
-       if damaged(DRADIO) and game.condition != "docked":
-           prout(_("Spock-  \"Records show the previous probe has not yet"))
-           prout(_("   reached its destination.\""))
-       else:
-           prout(_("Uhura- \"The previous probe is still reporting data, Sir.\""))
-       return
+        scanner.chew()
+        skip(1)
+        if damaged(DRADIO) and game.condition != "docked":
+            prout(_("Spock-  \"Records show the previous probe has not yet"))
+            prout(_("   reached its destination.\""))
+        else:
+            prout(_("Uhura- \"The previous probe is still reporting data, Sir.\""))
+        return
     key = scanner.nexttok()
     if key == "IHEOL":
         if game.nprobes == 1:
             prout(_("1 probe left."))
         else:
             prout(_("%d probes left") % game.nprobes)
     key = scanner.nexttok()
     if key == "IHEOL":
         if game.nprobes == 1:
             prout(_("1 probe left."))
         else:
             prout(_("%d probes left") % game.nprobes)
-       proutn(_("Are you sure you want to fire a probe? "))
-       if not ja():
-           return
+        proutn(_("Are you sure you want to fire a probe? "))
+        if not ja():
+            return
     game.isarmed = False
     if key == "IHALPHA" and scanner.token == "armed":
     game.isarmed = False
     if key == "IHALPHA" and scanner.token == "armed":
-       game.isarmed = True
-       key = scanner.nexttok()
+        game.isarmed = True
+        key = scanner.nexttok()
     elif key == "IHEOL":
     elif key == "IHEOL":
-       proutn(_("Arm NOVAMAX warhead? "))
-       game.isarmed = ja()
-    elif key == "IHREAL":              # first element of course
+        proutn(_("Arm NOVAMAX warhead? "))
+        game.isarmed = ja()
+    elif key == "IHREAL":                # first element of course
         scanner.push(scanner.token)
     try:
         game.probe = getcourse(isprobe=True)
         scanner.push(scanner.token)
     try:
         game.probe = getcourse(isprobe=True)
@@ -4223,31 +4230,31 @@ def mayday():
     scanner.chew()
     # Test for conditions which prevent calling for help 
     if game.condition == "docked":
     scanner.chew()
     # Test for conditions which prevent calling for help 
     if game.condition == "docked":
-       prout(_("Lt. Uhura-  \"But Captain, we're already docked.\""))
-       return
+        prout(_("Lt. Uhura-  \"But Captain, we're already docked.\""))
+        return
     if damaged(DRADIO):
     if damaged(DRADIO):
-       prout(_("Subspace radio damaged."))
-       return
+        prout(_("Subspace radio damaged."))
+        return
     if not game.state.baseq:
     if not game.state.baseq:
-       prout(_("Lt. Uhura-  \"Captain, I'm not getting any response from Starbase.\""))
-       return
+        prout(_("Lt. Uhura-  \"Captain, I'm not getting any response from Starbase.\""))
+        return
     if game.landed:
     if game.landed:
-       prout(_("You must be aboard the %s.") % crmshp())
-       return
+        prout(_("You must be aboard the %s.") % crmshp())
+        return
     # OK -- call for help from nearest starbase 
     game.nhelp += 1
     if game.base.i!=0:
     # OK -- call for help from nearest starbase 
     game.nhelp += 1
     if game.base.i!=0:
-       # There's one in this quadrant 
-       ddist = (game.base - game.sector).distance()
+        # There's one in this quadrant 
+        ddist = (game.base - game.sector).distance()
     else:
     else:
-       ddist = FOREVER
+        ddist = FOREVER
         for ibq in game.state.baseq:
         for ibq in game.state.baseq:
-           xdist = QUADSIZE * (ibq - game.quadrant).distance()
-           if xdist < ddist:
-               ddist = xdist
-       # Since starbase not in quadrant, set up new quadrant 
-       game.quadrant = ibq
-       newqad()
+            xdist = QUADSIZE * (ibq - game.quadrant).distance()
+            if xdist < ddist:
+                ddist = xdist
+        # Since starbase not in quadrant, set up new quadrant 
+        game.quadrant = ibq
+        newqad()
     # dematerialize starship 
     game.quad[game.sector.i][game.sector.j]='.'
     proutn(_("Starbase in Quadrant %s responds--%s dematerializes") \
     # dematerialize starship 
     game.quad[game.sector.i][game.sector.j]='.'
     proutn(_("Starbase in Quadrant %s responds--%s dematerializes") \
@@ -4255,36 +4262,36 @@ def mayday():
     game.sector.invalidate()
     for m in range(1, 5+1):
         w = game.base.scatter() 
     game.sector.invalidate()
     for m in range(1, 5+1):
         w = game.base.scatter() 
-       if w.valid_sector() and game.quad[w.i][w.j]=='.':
-           # found one -- finish up 
+        if w.valid_sector() and game.quad[w.i][w.j]=='.':
+            # found one -- finish up 
             game.sector = w
             game.sector = w
-           break
+            break
     if not game.sector.is_valid():
     if not game.sector.is_valid():
-       prout(_("You have been lost in space..."))
-       finish(FMATERIALIZE)
-       return
+        prout(_("You have been lost in space..."))
+        finish(FMATERIALIZE)
+        return
     # Give starbase three chances to rematerialize starship 
     probf = math.pow((1.0 - math.pow(0.98,ddist)), 0.33333333)
     for m in range(1, 3+1):
     # Give starbase three chances to rematerialize starship 
     probf = math.pow((1.0 - math.pow(0.98,ddist)), 0.33333333)
     for m in range(1, 3+1):
-       if m == 1: proutn(_("1st"))
-       elif m == 2: proutn(_("2nd"))
-       elif m == 3: proutn(_("3rd"))
-       proutn(_(" attempt to re-materialize ") + crmshp())
-       game.quad[game.sector.i][game.sector.j]=('-','o','O')[m-1]
+        if m == 1: proutn(_("1st"))
+        elif m == 2: proutn(_("2nd"))
+        elif m == 3: proutn(_("3rd"))
+        proutn(_(" attempt to re-materialize ") + crmshp())
+        game.quad[game.sector.i][game.sector.j]=('-','o','O')[m-1]
         textcolor(RED)
         textcolor(RED)
-       warble()
-       if randreal() > probf:
-           break
-       prout(_("fails."))
+        warble()
+        if randreal() > probf:
+            break
+        prout(_("fails."))
         textcolor(DEFAULT)
         textcolor(DEFAULT)
-       curses.delay_output(500)
+        curses.delay_output(500)
     if m > 3:
     if m > 3:
-       game.quad[game.sector.i][game.sector.j]='?'
-       game.alive = False
-       drawmaps(1)
-       setwnd(message_window)
-       finish(FMATERIALIZE)
-       return
+        game.quad[game.sector.i][game.sector.j]='?'
+        game.alive = False
+        drawmaps(1)
+        setwnd(message_window)
+        finish(FMATERIALIZE)
+        return
     game.quad[game.sector.i][game.sector.j]=game.ship
     textcolor(GREEN)
     prout(_("succeeds."))
     game.quad[game.sector.i][game.sector.j]=game.ship
     textcolor(GREEN)
     prout(_("succeeds."))
@@ -4297,75 +4304,75 @@ def abandon():
     "Abandon ship."
     scanner.chew()
     if game.condition=="docked":
     "Abandon ship."
     scanner.chew()
     if game.condition=="docked":
-       if game.ship!='E':
-           prout(_("You cannot abandon Ye Faerie Queene."))
-           return
+        if game.ship!='E':
+            prout(_("You cannot abandon Ye Faerie Queene."))
+            return
     else:
     else:
-       # Must take shuttle craft to exit 
-       if game.damage[DSHUTTL]==-1:
-           prout(_("Ye Faerie Queene has no shuttle craft."))
-           return
-       if game.damage[DSHUTTL]<0:
-           prout(_("Shuttle craft now serving Big Macs."))
-           return
-       if game.damage[DSHUTTL]>0:
-           prout(_("Shuttle craft damaged."))
-           return
-       if game.landed:
-           prout(_("You must be aboard the ship."))
-           return
-       if game.iscraft != "onship":
-           prout(_("Shuttle craft not currently available."))
-           return
-       # Emit abandon ship messages 
-       skip(1)
-       prouts(_("***ABANDON SHIP!  ABANDON SHIP!"))
-       skip(1)
-       prouts(_("***ALL HANDS ABANDON SHIP!"))
-       skip(2)
-       prout(_("Captain and crew escape in shuttle craft."))
-       if not game.state.baseq:
-           # Oops! no place to go... 
-           finish(FABANDN)
-           return
-       q = game.state.galaxy[game.quadrant.i][game.quadrant.j]
-       # Dispose of crew 
-       if not (game.options & OPTION_WORLDS) and not damaged(DTRANSP):
-           prout(_("Remainder of ship's complement beam down"))
-           prout(_("to nearest habitable planet."))
-       elif q.planet != None and not damaged(DTRANSP):
-           prout(_("Remainder of ship's complement beam down to %s.") %
-                   q.planet)
-       else:
-           prout(_("Entire crew of %d left to die in outer space.") %
-                   game.state.crew)
-           game.casual += game.state.crew
-           game.abandoned += game.state.crew
-       # If at least one base left, give 'em the Faerie Queene 
-       skip(1)
-       game.icrystl = False # crystals are lost 
-       game.nprobes = 0 # No probes 
-       prout(_("You are captured by Klingons and released to"))
-       prout(_("the Federation in a prisoner-of-war exchange."))
-       nb = randrange(len(game.state.baseq))
-       # Set up quadrant and position FQ adjacient to base 
-       if not game.quadrant == game.state.baseq[nb]:
-           game.quadrant = game.state.baseq[nb]
-           game.sector.i = game.sector.j = 5
-           newqad()
-       while True:
-           # position next to base by trial and error 
-           game.quad[game.sector.i][game.sector.j] = '.'
-           for l in range(QUADSIZE):
-               game.sector = game.base.scatter()
-               if game.sector.valid_sector() and \
+        # Must take shuttle craft to exit 
+        if game.damage[DSHUTTL]==-1:
+            prout(_("Ye Faerie Queene has no shuttle craft."))
+            return
+        if game.damage[DSHUTTL]<0:
+            prout(_("Shuttle craft now serving Big Macs."))
+            return
+        if game.damage[DSHUTTL]>0:
+            prout(_("Shuttle craft damaged."))
+            return
+        if game.landed:
+            prout(_("You must be aboard the ship."))
+            return
+        if game.iscraft != "onship":
+            prout(_("Shuttle craft not currently available."))
+            return
+        # Emit abandon ship messages 
+        skip(1)
+        prouts(_("***ABANDON SHIP!  ABANDON SHIP!"))
+        skip(1)
+        prouts(_("***ALL HANDS ABANDON SHIP!"))
+        skip(2)
+        prout(_("Captain and crew escape in shuttle craft."))
+        if not game.state.baseq:
+            # Oops! no place to go... 
+            finish(FABANDN)
+            return
+        q = game.state.galaxy[game.quadrant.i][game.quadrant.j]
+        # Dispose of crew 
+        if not (game.options & OPTION_WORLDS) and not damaged(DTRANSP):
+            prout(_("Remainder of ship's complement beam down"))
+            prout(_("to nearest habitable planet."))
+        elif q.planet != None and not damaged(DTRANSP):
+            prout(_("Remainder of ship's complement beam down to %s.") %
+                    q.planet)
+        else:
+            prout(_("Entire crew of %d left to die in outer space.") %
+                    game.state.crew)
+            game.casual += game.state.crew
+            game.abandoned += game.state.crew
+        # If at least one base left, give 'em the Faerie Queene 
+        skip(1)
+        game.icrystl = False # crystals are lost 
+        game.nprobes = 0 # No probes 
+        prout(_("You are captured by Klingons and released to"))
+        prout(_("the Federation in a prisoner-of-war exchange."))
+        nb = randrange(len(game.state.baseq))
+        # Set up quadrant and position FQ adjacient to base 
+        if not game.quadrant == game.state.baseq[nb]:
+            game.quadrant = game.state.baseq[nb]
+            game.sector.i = game.sector.j = 5
+            newqad()
+        while True:
+            # position next to base by trial and error 
+            game.quad[game.sector.i][game.sector.j] = '.'
+            for l in range(QUADSIZE):
+                game.sector = game.base.scatter()
+                if game.sector.valid_sector() and \
                        game.quad[game.sector.i][game.sector.j] == '.':
                     break
                        game.quad[game.sector.i][game.sector.j] == '.':
                     break
-           if l < QUADSIZE+1:
-               break # found a spot 
-           game.sector.i=QUADSIZE/2
-           game.sector.j=QUADSIZE/2
-           newqad()
+            if l < QUADSIZE+1:
+                break # found a spot 
+            game.sector.i=QUADSIZE/2
+            game.sector.j=QUADSIZE/2
+            newqad()
     # Get new commission 
     game.quad[game.sector.i][game.sector.j] = game.ship = 'F'
     game.state.crew = FULLCREW
     # Get new commission 
     game.quad[game.sector.i][game.sector.j] = game.ship = 'F'
     game.state.crew = FULLCREW
@@ -4373,13 +4380,13 @@ def abandon():
     prout(_("the Faerie Queene, which is antiquated but,"))
     prout(_("still useable."))
     if game.icrystl:
     prout(_("the Faerie Queene, which is antiquated but,"))
     prout(_("still useable."))
     if game.icrystl:
-       prout(_("The dilithium crystals have been moved."))
+        prout(_("The dilithium crystals have been moved."))
     game.imine = False
     game.iscraft = "offship" # Galileo disappears 
     # Resupply ship 
     game.condition="docked"
     for l in range(NDEVICES): 
     game.imine = False
     game.iscraft = "offship" # Galileo disappears 
     # Resupply ship 
     game.condition="docked"
     for l in range(NDEVICES): 
-       game.damage[l] = 0.0
+        game.damage[l] = 0.0
     game.damage[DSHUTTL] = -1
     game.energy = game.inenrg = 3000.0
     game.shield = game.inshld = 1250.0
     game.damage[DSHUTTL] = -1
     game.energy = game.inenrg = 3000.0
     game.shield = game.inshld = 1250.0
@@ -4396,7 +4403,7 @@ def consumeTime():
     game.ididit = True
     events()
     if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.justin: 
     game.ididit = True
     events()
     if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.justin: 
-       return True
+        return True
     return False
 
 def survey():
     return False
 
 def survey():
@@ -4407,48 +4414,48 @@ def survey():
     prout(_("Spock-  \"Planet report follows, Captain.\""))
     skip(1)
     for i in range(game.inplan):
     prout(_("Spock-  \"Planet report follows, Captain.\""))
     skip(1)
     for i in range(game.inplan):
-       if game.state.planets[i].pclass == "destroyed":
-           continue
-       if (game.state.planets[i].known != "unknown" \
+        if game.state.planets[i].pclass == "destroyed":
+            continue
+        if (game.state.planets[i].known != "unknown" \
             and not game.state.planets[i].inhabited) \
             or game.idebug:
             and not game.state.planets[i].inhabited) \
             or game.idebug:
-           iknow = True
-           if game.idebug and game.state.planets[i].known=="unknown":
-               proutn("(Unknown) ")
-           proutn(_("Quadrant %s") % game.state.planets[i].quadrant)
-           proutn(_("   class "))
-           proutn(game.state.planets[i].pclass)
-           proutn("   ")
-           if game.state.planets[i].crystals != "present":
-               proutn(_("no "))
-           prout(_("dilithium crystals present."))
-           if game.state.planets[i].known=="shuttle_down": 
-               prout(_("    Shuttle Craft Galileo on surface."))
+            iknow = True
+            if game.idebug and game.state.planets[i].known=="unknown":
+                proutn("(Unknown) ")
+            proutn(_("Quadrant %s") % game.state.planets[i].quadrant)
+            proutn(_("   class "))
+            proutn(game.state.planets[i].pclass)
+            proutn("   ")
+            if game.state.planets[i].crystals != "present":
+                proutn(_("no "))
+            prout(_("dilithium crystals present."))
+            if game.state.planets[i].known=="shuttle_down": 
+                prout(_("    Shuttle Craft Galileo on surface."))
     if not iknow:
     if not iknow:
-       prout(_("No information available."))
+        prout(_("No information available."))
 
 def orbit():
     "Enter standard orbit." 
     skip(1)
     scanner.chew()
     if game.inorbit:
 
 def orbit():
     "Enter standard orbit." 
     skip(1)
     scanner.chew()
     if game.inorbit:
-       prout(_("Already in standard orbit."))
-       return
+        prout(_("Already in standard orbit."))
+        return
     if damaged(DWARPEN) and damaged(DIMPULS):
     if damaged(DWARPEN) and damaged(DIMPULS):
-       prout(_("Both warp and impulse engines damaged."))
-       return
+        prout(_("Both warp and impulse engines damaged."))
+        return
     if not game.plnet.is_valid():
         prout("There is no planet in this sector.")
         return
     if abs(game.sector.i-game.plnet.i)>1 or abs(game.sector.j-game.plnet.j)>1:
     if not game.plnet.is_valid():
         prout("There is no planet in this sector.")
         return
     if abs(game.sector.i-game.plnet.i)>1 or abs(game.sector.j-game.plnet.j)>1:
-       prout(crmshp() + _(" not adjacent to planet."))
-       skip(1)
-       return
+        prout(crmshp() + _(" not adjacent to planet."))
+        skip(1)
+        return
     game.optime = randreal(0.02, 0.05)
     prout(_("Helmsman Sulu-  \"Entering standard orbit, Sir.\""))
     newcnd()
     if consumeTime():
     game.optime = randreal(0.02, 0.05)
     prout(_("Helmsman Sulu-  \"Entering standard orbit, Sir.\""))
     newcnd()
     if consumeTime():
-       return
+        return
     game.height = randreal(1400, 8600)
     prout(_("Sulu-  \"Entered orbit at altitude %.2f kilometers.\"") % game.height)
     game.inorbit = True
     game.height = randreal(1400, 8600)
     prout(_("Sulu-  \"Entered orbit at altitude %.2f kilometers.\"") % game.height)
     game.inorbit = True
@@ -4457,26 +4464,26 @@ def orbit():
 def sensor():
     "Examine planets in this quadrant."
     if damaged(DSRSENS):
 def sensor():
     "Examine planets in this quadrant."
     if damaged(DSRSENS):
-       if game.options & OPTION_TTY:
-           prout(_("Short range sensors damaged."))
-       return
+        if game.options & OPTION_TTY:
+            prout(_("Short range sensors damaged."))
+        return
     if game.iplnet == None:
     if game.iplnet == None:
-       if game.options & OPTION_TTY:
-           prout(_("Spock- \"No planet in this quadrant, Captain.\""))
-       return
+        if game.options & OPTION_TTY:
+            prout(_("Spock- \"No planet in this quadrant, Captain.\""))
+        return
     if game.iplnet.known == "unknown":
     if game.iplnet.known == "unknown":
-       prout(_("Spock-  \"Sensor scan for Quadrant %s-") % game.quadrant)
-       skip(1)
-       prout(_("         Planet at Sector %s is of class %s.") %
-             (game.plnet, game.iplnet.pclass))
-       if game.iplnet.known=="shuttle_down": 
-           prout(_("         Sensors show Galileo still on surface."))
-       proutn(_("         Readings indicate"))
-       if game.iplnet.crystals != "present":
-           proutn(_(" no"))
-       prout(_(" dilithium crystals present.\""))
-       if game.iplnet.known == "unknown":
-           game.iplnet.known = "known"
+        prout(_("Spock-  \"Sensor scan for Quadrant %s-") % game.quadrant)
+        skip(1)
+        prout(_("         Planet at Sector %s is of class %s.") %
+              (game.plnet, game.iplnet.pclass))
+        if game.iplnet.known=="shuttle_down": 
+            prout(_("         Sensors show Galileo still on surface."))
+        proutn(_("         Readings indicate"))
+        if game.iplnet.crystals != "present":
+            proutn(_(" no"))
+        prout(_(" dilithium crystals present.\""))
+        if game.iplnet.known == "unknown":
+            game.iplnet.known = "known"
     elif game.iplnet.inhabited:
         prout(_("Spock-  \"The inhabited planet %s ") % game.iplnet.name)
         prout(_("        is located at Sector %s, Captain.\"") % game.plnet)
     elif game.iplnet.inhabited:
         prout(_("Spock-  \"The inhabited planet %s ") % game.iplnet.name)
         prout(_("        is located at Sector %s, Captain.\"") % game.plnet)
@@ -4487,88 +4494,88 @@ def beam():
     scanner.chew()
     skip(1)
     if damaged(DTRANSP):
     scanner.chew()
     skip(1)
     if damaged(DTRANSP):
-       prout(_("Transporter damaged."))
-       if not damaged(DSHUTTL) and (game.iplnet.known=="shuttle_down" or game.iscraft == "onship"):
-           skip(1)
-           proutn(_("Spock-  \"May I suggest the shuttle craft, Sir?\" "))
+        prout(_("Transporter damaged."))
+        if not damaged(DSHUTTL) and (game.iplnet.known=="shuttle_down" or game.iscraft == "onship"):
+            skip(1)
+            proutn(_("Spock-  \"May I suggest the shuttle craft, Sir?\" "))
             if ja():
             if ja():
-               shuttle()
-       return
+                shuttle()
+        return
     if not game.inorbit:
     if not game.inorbit:
-       prout(crmshp() + _(" not in standard orbit."))
-       return
+        prout(crmshp() + _(" not in standard orbit."))
+        return
     if game.shldup:
     if game.shldup:
-       prout(_("Impossible to transport through shields."))
-       return
+        prout(_("Impossible to transport through shields."))
+        return
     if game.iplnet.known=="unknown":
     if game.iplnet.known=="unknown":
-       prout(_("Spock-  \"Captain, we have no information on this planet"))
-       prout(_("  and Starfleet Regulations clearly state that in this situation"))
-       prout(_("  you may not go down.\""))
-       return
+        prout(_("Spock-  \"Captain, we have no information on this planet"))
+        prout(_("  and Starfleet Regulations clearly state that in this situation"))
+        prout(_("  you may not go down.\""))
+        return
     if not game.landed and game.iplnet.crystals=="absent":
     if not game.landed and game.iplnet.crystals=="absent":
-       prout(_("Spock-  \"Captain, I fail to see the logic in"))
-       prout(_("  exploring a planet with no dilithium crystals."))
-       proutn(_("  Are you sure this is wise?\" "))
-       if not ja():
-           scanner.chew()
-           return
+        prout(_("Spock-  \"Captain, I fail to see the logic in"))
+        prout(_("  exploring a planet with no dilithium crystals."))
+        proutn(_("  Are you sure this is wise?\" "))
+        if not ja():
+            scanner.chew()
+            return
     if not (game.options & OPTION_PLAIN):
     if not (game.options & OPTION_PLAIN):
-       nrgneed = 50 * game.skill + game.height / 100.0
-       if nrgneed > game.energy:
-           prout(_("Engineering to bridge--"))
-           prout(_("  Captain, we don't have enough energy for transportation."))
-           return
-       if not game.landed and nrgneed * 2 > game.energy:
-           prout(_("Engineering to bridge--"))
-           prout(_("  Captain, we have enough energy only to transport you down to"))
-           prout(_("  the planet, but there wouldn't be an energy for the trip back."))
-           if game.iplnet.known == "shuttle_down":
-               prout(_("  Although the Galileo shuttle craft may still be on a surface."))
-           proutn(_("  Are you sure this is wise?\" "))
-           if not ja():
-               scanner.chew()
-               return
+        nrgneed = 50 * game.skill + game.height / 100.0
+        if nrgneed > game.energy:
+            prout(_("Engineering to bridge--"))
+            prout(_("  Captain, we don't have enough energy for transportation."))
+            return
+        if not game.landed and nrgneed * 2 > game.energy:
+            prout(_("Engineering to bridge--"))
+            prout(_("  Captain, we have enough energy only to transport you down to"))
+            prout(_("  the planet, but there wouldn't be an energy for the trip back."))
+            if game.iplnet.known == "shuttle_down":
+                prout(_("  Although the Galileo shuttle craft may still be on a surface."))
+            proutn(_("  Are you sure this is wise?\" "))
+            if not ja():
+                scanner.chew()
+                return
     if game.landed:
     if game.landed:
-       # Coming from planet 
-       if game.iplnet.known=="shuttle_down":
-           proutn(_("Spock-  \"Wouldn't you rather take the Galileo?\" "))
-           if ja():
-               scanner.chew()
-               return
-           prout(_("Your crew hides the Galileo to prevent capture by aliens."))
-       prout(_("Landing party assembled, ready to beam up."))
-       skip(1)
-       prout(_("Kirk whips out communicator..."))
-       prouts(_("BEEP  BEEP  BEEP"))
-       skip(2)
-       prout(_("\"Kirk to enterprise-  Lock on coordinates...energize.\""))
+        # Coming from planet 
+        if game.iplnet.known=="shuttle_down":
+            proutn(_("Spock-  \"Wouldn't you rather take the Galileo?\" "))
+            if ja():
+                scanner.chew()
+                return
+            prout(_("Your crew hides the Galileo to prevent capture by aliens."))
+        prout(_("Landing party assembled, ready to beam up."))
+        skip(1)
+        prout(_("Kirk whips out communicator..."))
+        prouts(_("BEEP  BEEP  BEEP"))
+        skip(2)
+        prout(_("\"Kirk to enterprise-  Lock on coordinates...energize.\""))
     else:
     else:
-       # Going to planet 
-       prout(_("Scotty-  \"Transporter room ready, Sir.\""))
-       skip(1)
-       prout(_("Kirk and landing party prepare to beam down to planet surface."))
-       skip(1)
-       prout(_("Kirk-  \"Energize.\""))
+        # Going to planet 
+        prout(_("Scotty-  \"Transporter room ready, Sir.\""))
+        skip(1)
+        prout(_("Kirk and landing party prepare to beam down to planet surface."))
+        skip(1)
+        prout(_("Kirk-  \"Energize.\""))
     game.ididit = True
     skip(1)
     prouts("WWHOOOIIIIIRRRRREEEE.E.E.  .  .  .  .   .    .")
     skip(2)
     if not withprob(0.98):
     game.ididit = True
     skip(1)
     prouts("WWHOOOIIIIIRRRRREEEE.E.E.  .  .  .  .   .    .")
     skip(2)
     if not withprob(0.98):
-       prouts("BOOOIIIOOOIIOOOOIIIOIING . . .")
-       skip(2)
-       prout(_("Scotty-  \"Oh my God!  I've lost them.\""))
-       finish(FLOST)
-       return
+        prouts("BOOOIIIOOOIIOOOOIIIOIING . . .")
+        skip(2)
+        prout(_("Scotty-  \"Oh my God!  I've lost them.\""))
+        finish(FLOST)
+        return
     prouts(".    .   .  .  .  .  .E.E.EEEERRRRRIIIIIOOOHWW")
     game.landed = not game.landed
     game.energy -= nrgneed
     skip(2)
     prout(_("Transport complete."))
     if game.landed and game.iplnet.known=="shuttle_down":
     prouts(".    .   .  .  .  .  .E.E.EEEERRRRRIIIIIOOOHWW")
     game.landed = not game.landed
     game.energy -= nrgneed
     skip(2)
     prout(_("Transport complete."))
     if game.landed and game.iplnet.known=="shuttle_down":
-       prout(_("The shuttle craft Galileo is here!"))
+        prout(_("The shuttle craft Galileo is here!"))
     if not game.landed and game.imine:
     if not game.landed and game.imine:
-       game.icrystl = True
-       game.cryprob = 0.05
+        game.icrystl = True
+        game.cryprob = 0.05
     game.imine = False
     return
 
     game.imine = False
     return
 
@@ -4577,24 +4584,24 @@ def mine():
     skip(1)
     scanner.chew()
     if not game.landed:
     skip(1)
     scanner.chew()
     if not game.landed:
-       prout(_("Mining party not on planet."))
-       return
+        prout(_("Mining party not on planet."))
+        return
     if game.iplnet.crystals == "mined":
     if game.iplnet.crystals == "mined":
-       prout(_("This planet has already been strip-mined for dilithium."))
-       return
+        prout(_("This planet has already been strip-mined for dilithium."))
+        return
     elif game.iplnet.crystals == "absent":
     elif game.iplnet.crystals == "absent":
-       prout(_("No dilithium crystals on this planet."))
-       return
+        prout(_("No dilithium crystals on this planet."))
+        return
     if game.imine:
     if game.imine:
-       prout(_("You've already mined enough crystals for this trip."))
-       return
+        prout(_("You've already mined enough crystals for this trip."))
+        return
     if game.icrystl and game.cryprob == 0.05:
     if game.icrystl and game.cryprob == 0.05:
-       prout(_("With all those fresh crystals aboard the ") + crmshp())
-       prout(_("there's no reason to mine more at this time."))
-       return
+        prout(_("With all those fresh crystals aboard the ") + crmshp())
+        prout(_("there's no reason to mine more at this time."))
+        return
     game.optime = randreal(0.1, 0.3)*(ord(game.iplnet.pclass)-ord("L"))
     if consumeTime():
     game.optime = randreal(0.1, 0.3)*(ord(game.iplnet.pclass)-ord("L"))
     if consumeTime():
-       return
+        return
     prout(_("Mining operation complete."))
     game.iplnet.crystals = "mined"
     game.imine = game.ididit = True
     prout(_("Mining operation complete."))
     game.iplnet.crystals = "mined"
     game.imine = game.ididit = True
@@ -4605,19 +4612,19 @@ def usecrystals():
     skip(1)
     scanner.chew()
     if not game.icrystl:
     skip(1)
     scanner.chew()
     if not game.icrystl:
-       prout(_("No dilithium crystals available."))
-       return
+        prout(_("No dilithium crystals available."))
+        return
     if game.energy >= 1000:
     if game.energy >= 1000:
-       prout(_("Spock-  \"Captain, Starfleet Regulations prohibit such an operation"))
-       prout(_("  except when Condition Yellow exists."))
-       return
+        prout(_("Spock-  \"Captain, Starfleet Regulations prohibit such an operation"))
+        prout(_("  except when Condition Yellow exists."))
+        return
     prout(_("Spock- \"Captain, I must warn you that loading"))
     prout(_("  raw dilithium crystals into the ship's power"))
     prout(_("  system may risk a severe explosion."))
     proutn(_("  Are you sure this is wise?\" "))
     if not ja():
     prout(_("Spock- \"Captain, I must warn you that loading"))
     prout(_("  raw dilithium crystals into the ship's power"))
     prout(_("  system may risk a severe explosion."))
     proutn(_("  Are you sure this is wise?\" "))
     if not ja():
-       scanner.chew()
-       return
+        scanner.chew()
+        return
     skip(1)
     prout(_("Engineering Officer Scott-  \"(GULP) Aye Sir."))
     prout(_("  Mr. Spock and I will try it.\""))
     skip(1)
     prout(_("Engineering Officer Scott-  \"(GULP) Aye Sir."))
     prout(_("  Mr. Spock and I will try it.\""))
@@ -4628,15 +4635,15 @@ def usecrystals():
     prouts(_("Scotty-  \"Keep your fingers crossed, Sir!\""))
     skip(1)
     if withprob(game.cryprob):
     prouts(_("Scotty-  \"Keep your fingers crossed, Sir!\""))
     skip(1)
     if withprob(game.cryprob):
-       prouts(_("  \"Activating now! - - No good!  It's***"))
-       skip(2)
-       prouts(_("***RED ALERT!  RED A*L********************************"))
-       skip(1)
-       stars()
-       prouts(_("******************   KA-BOOM!!!!   *******************"))
-       skip(1)
-       kaboom()
-       return
+        prouts(_("  \"Activating now! - - No good!  It's***"))
+        skip(2)
+        prouts(_("***RED ALERT!  RED A*L********************************"))
+        skip(1)
+        stars()
+        prouts(_("******************   KA-BOOM!!!!   *******************"))
+        skip(1)
+        kaboom()
+        return
     game.energy += randreal(5000.0, 5500.0)
     prouts(_("  \"Activating now! - - "))
     prout(_("The instruments"))
     game.energy += randreal(5000.0, 5500.0)
     prouts(_("  \"Activating now! - - "))
     prout(_("The instruments"))
@@ -4650,100 +4657,100 @@ def shuttle():
     scanner.chew()
     skip(1)
     if damaged(DSHUTTL):
     scanner.chew()
     skip(1)
     if damaged(DSHUTTL):
-       if game.damage[DSHUTTL] == -1.0:
-           if game.inorbit and game.iplnet.known == "shuttle_down":
-               prout(_("Ye Faerie Queene has no shuttle craft bay to dock it at."))
-           else:
-               prout(_("Ye Faerie Queene had no shuttle craft."))
-       elif game.damage[DSHUTTL] > 0:
-           prout(_("The Galileo is damaged."))
-       else: # game.damage[DSHUTTL] < 0  
-           prout(_("Shuttle craft is now serving Big Macs."))
-       return
+        if game.damage[DSHUTTL] == -1.0:
+            if game.inorbit and game.iplnet.known == "shuttle_down":
+                prout(_("Ye Faerie Queene has no shuttle craft bay to dock it at."))
+            else:
+                prout(_("Ye Faerie Queene had no shuttle craft."))
+        elif game.damage[DSHUTTL] > 0:
+            prout(_("The Galileo is damaged."))
+        else: # game.damage[DSHUTTL] < 0  
+            prout(_("Shuttle craft is now serving Big Macs."))
+        return
     if not game.inorbit:
     if not game.inorbit:
-       prout(crmshp() + _(" not in standard orbit."))
-       return
+        prout(crmshp() + _(" not in standard orbit."))
+        return
     if (game.iplnet.known != "shuttle_down") and game.iscraft != "onship":
     if (game.iplnet.known != "shuttle_down") and game.iscraft != "onship":
-       prout(_("Shuttle craft not currently available."))
-       return
+        prout(_("Shuttle craft not currently available."))
+        return
     if not game.landed and game.iplnet.known=="shuttle_down":
     if not game.landed and game.iplnet.known=="shuttle_down":
-       prout(_("You will have to beam down to retrieve the shuttle craft."))
-       return
+        prout(_("You will have to beam down to retrieve the shuttle craft."))
+        return
     if game.shldup or game.condition == "docked":
     if game.shldup or game.condition == "docked":
-       prout(_("Shuttle craft cannot pass through shields."))
-       return
+        prout(_("Shuttle craft cannot pass through shields."))
+        return
     if game.iplnet.known=="unknown":
     if game.iplnet.known=="unknown":
-       prout(_("Spock-  \"Captain, we have no information on this planet"))
-       prout(_("  and Starfleet Regulations clearly state that in this situation"))
-       prout(_("  you may not fly down.\""))
-       return
+        prout(_("Spock-  \"Captain, we have no information on this planet"))
+        prout(_("  and Starfleet Regulations clearly state that in this situation"))
+        prout(_("  you may not fly down.\""))
+        return
     game.optime = 3.0e-5*game.height
     if game.optime >= 0.8*game.state.remtime:
     game.optime = 3.0e-5*game.height
     if game.optime >= 0.8*game.state.remtime:
-       prout(_("First Officer Spock-  \"Captain, I compute that such"))
-       proutn(_("  a maneuver would require approximately %2d%% of our") % \
-              int(100*game.optime/game.state.remtime))
-       prout(_("remaining time."))
-       proutn(_("Are you sure this is wise?\" "))
-       if not ja():
-           game.optime = 0.0
-           return
+        prout(_("First Officer Spock-  \"Captain, I compute that such"))
+        proutn(_("  a maneuver would require approximately %2d%% of our") % \
+               int(100*game.optime/game.state.remtime))
+        prout(_("remaining time."))
+        proutn(_("Are you sure this is wise?\" "))
+        if not ja():
+            game.optime = 0.0
+            return
     if game.landed:
     if game.landed:
-       # Kirk on planet 
-       if game.iscraft == "onship":
-           # Galileo on ship! 
-           if not damaged(DTRANSP):
-               proutn(_("Spock-  \"Would you rather use the transporter?\" "))
-               if ja():
-                   beam()
-                   return
-               proutn(_("Shuttle crew"))
-           else:
-               proutn(_("Rescue party"))
-           prout(_(" boards Galileo and swoops toward planet surface."))
-           game.iscraft = "offship"
-           skip(1)
-           if consumeTime():
-               return
-           game.iplnet.known="shuttle_down"
-           prout(_("Trip complete."))
-           return
-       else:
-           # Ready to go back to ship 
-           prout(_("You and your mining party board the"))
-           prout(_("shuttle craft for the trip back to the Enterprise."))
-           skip(1)
-           prouts(_("The short hop begins . . ."))
-           skip(1)
-           game.iplnet.known="known"
-           game.icraft = True
-           skip(1)
-           game.landed = False
-           if consumeTime():
-               return
-           game.iscraft = "onship"
-           game.icraft = False
-           if game.imine:
-               game.icrystl = True
-               game.cryprob = 0.05
-           game.imine = False
-           prout(_("Trip complete."))
-           return
+        # Kirk on planet 
+        if game.iscraft == "onship":
+            # Galileo on ship! 
+            if not damaged(DTRANSP):
+                proutn(_("Spock-  \"Would you rather use the transporter?\" "))
+                if ja():
+                    beam()
+                    return
+                proutn(_("Shuttle crew"))
+            else:
+                proutn(_("Rescue party"))
+            prout(_(" boards Galileo and swoops toward planet surface."))
+            game.iscraft = "offship"
+            skip(1)
+            if consumeTime():
+                return
+            game.iplnet.known="shuttle_down"
+            prout(_("Trip complete."))
+            return
+        else:
+            # Ready to go back to ship 
+            prout(_("You and your mining party board the"))
+            prout(_("shuttle craft for the trip back to the Enterprise."))
+            skip(1)
+            prouts(_("The short hop begins . . ."))
+            skip(1)
+            game.iplnet.known="known"
+            game.icraft = True
+            skip(1)
+            game.landed = False
+            if consumeTime():
+                return
+            game.iscraft = "onship"
+            game.icraft = False
+            if game.imine:
+                game.icrystl = True
+                game.cryprob = 0.05
+            game.imine = False
+            prout(_("Trip complete."))
+            return
     else:
     else:
-       # Kirk on ship and so is Galileo 
-       prout(_("Mining party assembles in the hangar deck,"))
-       prout(_("ready to board the shuttle craft \"Galileo\"."))
-       skip(1)
-       prouts(_("The hangar doors open; the trip begins."))
-       skip(1)
-       game.icraft = True
-       game.iscraft = "offship"
-       if consumeTime():
-           return
-       game.iplnet.known = "shuttle_down"
-       game.landed = True
-       game.icraft = False
-       prout(_("Trip complete."))
-       return
+        # Kirk on ship and so is Galileo 
+        prout(_("Mining party assembles in the hangar deck,"))
+        prout(_("ready to board the shuttle craft \"Galileo\"."))
+        skip(1)
+        prouts(_("The hangar doors open; the trip begins."))
+        skip(1)
+        game.icraft = True
+        game.iscraft = "offship"
+        if consumeTime():
+            return
+        game.iplnet.known = "shuttle_down"
+        game.landed = True
+        game.icraft = False
+        prout(_("Trip complete."))
+        return
 
 def deathray():
     "Use the big zapper."
 
 def deathray():
     "Use the big zapper."
@@ -4751,19 +4758,19 @@ def deathray():
     skip(1)
     scanner.chew()
     if game.ship != 'E':
     skip(1)
     scanner.chew()
     if game.ship != 'E':
-       prout(_("Ye Faerie Queene has no death ray."))
-       return
+        prout(_("Ye Faerie Queene has no death ray."))
+        return
     if len(game.enemies)==0:
     if len(game.enemies)==0:
-       prout(_("Sulu-  \"But Sir, there are no enemies in this quadrant.\""))
-       return
+        prout(_("Sulu-  \"But Sir, there are no enemies in this quadrant.\""))
+        return
     if damaged(DDRAY):
     if damaged(DDRAY):
-       prout(_("Death Ray is damaged."))
-       return
+        prout(_("Death Ray is damaged."))
+        return
     prout(_("Spock-  \"Captain, the 'Experimental Death Ray'"))
     prout(_("  is highly unpredictible.  Considering the alternatives,"))
     proutn(_("  are you sure this is wise?\" "))
     if not ja():
     prout(_("Spock-  \"Captain, the 'Experimental Death Ray'"))
     prout(_("  is highly unpredictible.  Considering the alternatives,"))
     proutn(_("  are you sure this is wise?\" "))
     if not ja():
-       return
+        return
     prout(_("Spock-  \"Acknowledged.\""))
     skip(1)
     game.ididit = True
     prout(_("Spock-  \"Acknowledged.\""))
     skip(1)
     game.ididit = True
@@ -4780,66 +4787,66 @@ def deathray():
     skip(1)
     dprob = 0.30
     if game.options & OPTION_PLAIN:
     skip(1)
     dprob = 0.30
     if game.options & OPTION_PLAIN:
-       dprob = 0.5
+        dprob = 0.5
     r = randreal()
     if r > dprob:
     r = randreal()
     if r > dprob:
-       prouts(_("Sulu- \"Captain!  It's working!\""))
-       skip(2)
-       while len(game.enemies) > 0:
-           deadkl(game.enemies[1].location, game.quad[game.enemies[1].location.i][game.enemies[1].location.j],game.enemies[1].location)
-       prout(_("Ensign Chekov-  \"Congratulations, Captain!\""))
-       if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
-           finish(FWON)    
-       if (game.options & OPTION_PLAIN) == 0:
-           prout(_("Spock-  \"Captain, I believe the `Experimental Death Ray'"))
-           if withprob(0.05):
-               prout(_("   is still operational.\""))
-           else:
-               prout(_("   has been rendered nonfunctional.\""))
-               game.damage[DDRAY] = 39.95
-       return
-    r = randreal()     # Pick failure method 
+        prouts(_("Sulu- \"Captain!  It's working!\""))
+        skip(2)
+        while len(game.enemies) > 0:
+            deadkl(game.enemies[1].location, game.quad[game.enemies[1].location.i][game.enemies[1].location.j],game.enemies[1].location)
+        prout(_("Ensign Chekov-  \"Congratulations, Captain!\""))
+        if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) == 0:
+            finish(FWON)    
+        if (game.options & OPTION_PLAIN) == 0:
+            prout(_("Spock-  \"Captain, I believe the `Experimental Death Ray'"))
+            if withprob(0.05):
+                prout(_("   is still operational.\""))
+            else:
+                prout(_("   has been rendered nonfunctional.\""))
+                game.damage[DDRAY] = 39.95
+        return
+    r = randreal()        # Pick failure method 
     if r <= 0.30:
     if r <= 0.30:
-       prouts(_("Sulu- \"Captain!  It's working!\""))
-       skip(1)
-       prouts(_("***RED ALERT!  RED ALERT!"))
-       skip(1)
-       prout(_("***MATTER-ANTIMATTER IMPLOSION IMMINENT!"))
-       skip(1)
-       prouts(_("***RED ALERT!  RED A*L********************************"))
-       skip(1)
-       stars()
-       prouts(_("******************   KA-BOOM!!!!   *******************"))
-       skip(1)
-       kaboom()
-       return
+        prouts(_("Sulu- \"Captain!  It's working!\""))
+        skip(1)
+        prouts(_("***RED ALERT!  RED ALERT!"))
+        skip(1)
+        prout(_("***MATTER-ANTIMATTER IMPLOSION IMMINENT!"))
+        skip(1)
+        prouts(_("***RED ALERT!  RED A*L********************************"))
+        skip(1)
+        stars()
+        prouts(_("******************   KA-BOOM!!!!   *******************"))
+        skip(1)
+        kaboom()
+        return
     if r <= 0.55:
     if r <= 0.55:
-       prouts(_("Sulu- \"Captain!  Yagabandaghangrapl, brachriigringlanbla!\""))
-       skip(1)
-       prout(_("Lt. Uhura-  \"Graaeek!  Graaeek!\""))
-       skip(1)
-       prout(_("Spock-  \"Fascinating!  . . . All humans aboard"))
-       prout(_("  have apparently been transformed into strange mutations."))
-       prout(_("  Vulcans do not seem to be affected."))
-       skip(1)
-       prout(_("Kirk-  \"Raauch!  Raauch!\""))
-       finish(FDRAY)
-       return
+        prouts(_("Sulu- \"Captain!  Yagabandaghangrapl, brachriigringlanbla!\""))
+        skip(1)
+        prout(_("Lt. Uhura-  \"Graaeek!  Graaeek!\""))
+        skip(1)
+        prout(_("Spock-  \"Fascinating!  . . . All humans aboard"))
+        prout(_("  have apparently been transformed into strange mutations."))
+        prout(_("  Vulcans do not seem to be affected."))
+        skip(1)
+        prout(_("Kirk-  \"Raauch!  Raauch!\""))
+        finish(FDRAY)
+        return
     if r <= 0.75:
     if r <= 0.75:
-       prouts(_("Sulu- \"Captain!  It's   --WHAT?!?!\""))
-       skip(2)
-       proutn(_("Spock-  \"I believe the word is"))
-       prouts(_(" *ASTONISHING*"))
-       prout(_(" Mr. Sulu."))
-       for i in range(QUADSIZE):
-           for j in range(QUADSIZE):
-               if game.quad[i][j] == '.':
-                   game.quad[i][j] = '?'
-       prout(_("  Captain, our quadrant is now infested with"))
-       prouts(_(" - - - - - -  *THINGS*."))
-       skip(1)
-       prout(_("  I have no logical explanation.\""))
-       return
+        prouts(_("Sulu- \"Captain!  It's   --WHAT?!?!\""))
+        skip(2)
+        proutn(_("Spock-  \"I believe the word is"))
+        prouts(_(" *ASTONISHING*"))
+        prout(_(" Mr. Sulu."))
+        for i in range(QUADSIZE):
+            for j in range(QUADSIZE):
+                if game.quad[i][j] == '.':
+                    game.quad[i][j] = '?'
+        prout(_("  Captain, our quadrant is now infested with"))
+        prouts(_(" - - - - - -  *THINGS*."))
+        skip(1)
+        prout(_("  I have no logical explanation.\""))
+        return
     prouts(_("Sulu- \"Captain!  The Death Ray is creating tribbles!\""))
     skip(1)
     prout(_("Scotty-  \"There are so many tribbles down here"))
     prouts(_("Sulu- \"Captain!  The Death Ray is creating tribbles!\""))
     skip(1)
     prout(_("Scotty-  \"There are so many tribbles down here"))
@@ -4852,20 +4859,20 @@ def deathray():
 def attackreport(curt):
     "eport status of bases under attack."
     if not curt:
 def attackreport(curt):
     "eport status of bases under attack."
     if not curt:
-       if is_scheduled(FCDBAS):
-           prout(_("Starbase in Quadrant %s is currently under Commander attack.") % game.battle)
-           prout(_("It can hold out until Stardate %d.") % int(scheduled(FCDBAS)))
-       elif game.isatb == 1:
-           prout(_("Starbase in Quadrant %s is under Super-commander attack.") % game.state.kscmdr)
-           prout(_("It can hold out until Stardate %d.") % int(scheduled(FSCDBAS)))
-       else:
-           prout(_("No Starbase is currently under attack."))
+        if is_scheduled(FCDBAS):
+            prout(_("Starbase in Quadrant %s is currently under Commander attack.") % game.battle)
+            prout(_("It can hold out until Stardate %d.") % int(scheduled(FCDBAS)))
+        elif game.isatb == 1:
+            prout(_("Starbase in Quadrant %s is under Super-commander attack.") % game.state.kscmdr)
+            prout(_("It can hold out until Stardate %d.") % int(scheduled(FSCDBAS)))
+        else:
+            prout(_("No Starbase is currently under attack."))
     else:
         if is_scheduled(FCDBAS):
     else:
         if is_scheduled(FCDBAS):
-           proutn(_("Base in %s attacked by C. Alive until %.1f") % (game.battle, scheduled(FCDBAS)))
+            proutn(_("Base in %s attacked by C. Alive until %.1f") % (game.battle, scheduled(FCDBAS)))
         if game.isatb:
         if game.isatb:
-           proutn(_("Base in %s attacked by S. Alive until %.1f") % (game.state.kscmdr, scheduled(FSCDBAS)))
-       clreol()
+            proutn(_("Base in %s attacked by S. Alive until %.1f") % (game.state.kscmdr, scheduled(FSCDBAS)))
+        clreol()
 
 def report():
     # report on general game status 
 
 def report():
     # report on general game status 
@@ -4876,124 +4883,124 @@ def report():
           _("good"), _("expert"), _("emeritus"))[game.skill]
     prout(_("You %s a %s%s %s game.") % ((_("were playing"), _("are playing"))[game.alldone], s1, s2, s3))
     if game.skill>SKILL_GOOD and game.thawed and not game.alldone:
           _("good"), _("expert"), _("emeritus"))[game.skill]
     prout(_("You %s a %s%s %s game.") % ((_("were playing"), _("are playing"))[game.alldone], s1, s2, s3))
     if game.skill>SKILL_GOOD and game.thawed and not game.alldone:
-       prout(_("No plaque is allowed."))
+        prout(_("No plaque is allowed."))
     if game.tourn:
     if game.tourn:
-       prout(_("This is tournament game %d.") % game.tourn)
+        prout(_("This is tournament game %d.") % game.tourn)
     prout(_("Your secret password is \"%s\"") % game.passwd)
     proutn(_("%d of %d Klingons have been killed") % (((game.inkling + game.incom + game.inscom) - (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)), 
     prout(_("Your secret password is \"%s\"") % game.passwd)
     proutn(_("%d of %d Klingons have been killed") % (((game.inkling + game.incom + game.inscom) - (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)), 
-          (game.inkling + game.incom + game.inscom)))
+           (game.inkling + game.incom + game.inscom)))
     if game.incom - len(game.state.kcmdr):
     if game.incom - len(game.state.kcmdr):
-       prout(_(", including %d Commander%s.") % (game.incom - len(game.state.kcmdr), (_("s"), "")[(game.incom - len(game.state.kcmdr))==1]))
+        prout(_(", including %d Commander%s.") % (game.incom - len(game.state.kcmdr), (_("s"), "")[(game.incom - len(game.state.kcmdr))==1]))
     elif game.inkling - game.state.remkl + (game.inscom - game.state.nscrem) > 0:
     elif game.inkling - game.state.remkl + (game.inscom - game.state.nscrem) > 0:
-       prout(_(", but no Commanders."))
+        prout(_(", but no Commanders."))
     else:
     else:
-       prout(".")
+        prout(".")
     if game.skill > SKILL_FAIR:
     if game.skill > SKILL_FAIR:
-       prout(_("The Super Commander has %sbeen destroyed.") % ("", _("not "))[game.state.nscrem])
+        prout(_("The Super Commander has %sbeen destroyed.") % ("", _("not "))[game.state.nscrem])
     if len(game.state.baseq) != game.inbase:
     if len(game.state.baseq) != game.inbase:
-       proutn(_("There "))
-       if game.inbase-len(game.state.baseq)==1:
-           proutn(_("has been 1 base"))
-       else:
-           proutn(_("have been %d bases") % (game.inbase-len(game.state.baseq)))
-       prout(_(" destroyed, %d remaining.") % len(game.state.baseq))
+        proutn(_("There "))
+        if game.inbase-len(game.state.baseq)==1:
+            proutn(_("has been 1 base"))
+        else:
+            proutn(_("have been %d bases") % (game.inbase-len(game.state.baseq)))
+        prout(_(" destroyed, %d remaining.") % len(game.state.baseq))
     else:
     else:
-       prout(_("There are %d bases.") % game.inbase)
+        prout(_("There are %d bases.") % game.inbase)
     if communicating() or game.iseenit:
     if communicating() or game.iseenit:
-       # Don't report this if not seen and
-       # either the radio is dead or not at base!
-       attackreport(False)
-       game.iseenit = True
+        # Don't report this if not seen and
+        # either the radio is dead or not at base!
+        attackreport(False)
+        game.iseenit = True
     if game.casual: 
     if game.casual: 
-       prout(_("%d casualt%s suffered so far.") % (game.casual, ("y", "ies")[game.casual!=1]))
+        prout(_("%d casualt%s suffered so far.") % (game.casual, ("y", "ies")[game.casual!=1]))
     if game.nhelp:
     if game.nhelp:
-       prout(_("There were %d call%s for help.") % (game.nhelp,  ("" , _("s"))[game.nhelp!=1]))
+        prout(_("There were %d call%s for help.") % (game.nhelp,  ("" , _("s"))[game.nhelp!=1]))
     if game.ship == 'E':
     if game.ship == 'E':
-       proutn(_("You have "))
-       if game.nprobes:
-           proutn("%d" % (game.nprobes))
-       else:
-           proutn(_("no"))
-       proutn(_(" deep space probe"))
-       if game.nprobes!=1:
-           proutn(_("s"))
-       prout(".")
+        proutn(_("You have "))
+        if game.nprobes:
+            proutn("%d" % (game.nprobes))
+        else:
+            proutn(_("no"))
+        proutn(_(" deep space probe"))
+        if game.nprobes!=1:
+            proutn(_("s"))
+        prout(".")
     if communicating() and is_scheduled(FDSPROB):
     if communicating() and is_scheduled(FDSPROB):
-       if game.isarmed: 
-           proutn(_("An armed deep space probe is in "))
-       else:
-           proutn(_("A deep space probe is in "))
-       prout("Quadrant %s." % game.probec)
+        if game.isarmed: 
+            proutn(_("An armed deep space probe is in "))
+        else:
+            proutn(_("A deep space probe is in "))
+        prout("Quadrant %s." % game.probec)
     if game.icrystl:
     if game.icrystl:
-       if game.cryprob <= .05:
-           prout(_("Dilithium crystals aboard ship... not yet used."))
-       else:
-           i=0
-           ai = 0.05
-           while game.cryprob > ai:
-               ai *= 2.0
-               i += 1
-           prout(_("Dilithium crystals have been used %d time%s.") % \
+        if game.cryprob <= .05:
+            prout(_("Dilithium crystals aboard ship... not yet used."))
+        else:
+            i=0
+            ai = 0.05
+            while game.cryprob > ai:
+                ai *= 2.0
+                i += 1
+            prout(_("Dilithium crystals have been used %d time%s.") % \
                   (i, (_("s"), "")[i==1]))
     skip(1)
                   (i, (_("s"), "")[i==1]))
     skip(1)
-       
+        
 def lrscan(silent):
     "Long-range sensor scan."
     if damaged(DLRSENS):
 def lrscan(silent):
     "Long-range sensor scan."
     if damaged(DLRSENS):
-       # Now allow base's sensors if docked 
-       if game.condition != "docked":
+        # Now allow base's sensors if docked 
+        if game.condition != "docked":
             if not silent:
                 prout(_("LONG-RANGE SENSORS DAMAGED."))
             if not silent:
                 prout(_("LONG-RANGE SENSORS DAMAGED."))
-           return
+            return
         if not silent:
             prout(_("Starbase's long-range scan"))
     elif not silent:
         if not silent:
             prout(_("Starbase's long-range scan"))
     elif not silent:
-       prout(_("Long-range scan"))
+        prout(_("Long-range scan"))
     for x in range(game.quadrant.i-1, game.quadrant.i+2):
         if not silent:
             proutn(" ")
         for y in range(game.quadrant.j-1, game.quadrant.j+2):
     for x in range(game.quadrant.i-1, game.quadrant.i+2):
         if not silent:
             proutn(" ")
         for y in range(game.quadrant.j-1, game.quadrant.j+2):
-           if not Coord(x, y).valid_quadrant():
+            if not Coord(x, y).valid_quadrant():
                 if not silent:
                     proutn("  -1")
                 if not silent:
                     proutn("  -1")
-           else:
-               if not damaged(DRADIO):
-                   game.state.galaxy[x][y].charted = True
-               game.state.chart[x][y].klingons = game.state.galaxy[x][y].klingons
-               game.state.chart[x][y].starbase = game.state.galaxy[x][y].starbase
-               game.state.chart[x][y].stars = game.state.galaxy[x][y].stars
-               if not silent and game.state.galaxy[x][y].supernova: 
-                   proutn(" ***")
-               elif not silent:
-                   proutn(" %3d" % (game.state.chart[x][y].klingons*100 + game.state.chart[x][y].starbase * 10 + game.state.chart[x][y].stars))
-       if not silent:
-           prout(" ")
+            else:
+                if not damaged(DRADIO):
+                    game.state.galaxy[x][y].charted = True
+                game.state.chart[x][y].klingons = game.state.galaxy[x][y].klingons
+                game.state.chart[x][y].starbase = game.state.galaxy[x][y].starbase
+                game.state.chart[x][y].stars = game.state.galaxy[x][y].stars
+                if not silent and game.state.galaxy[x][y].supernova: 
+                    proutn(" ***")
+                elif not silent:
+                    proutn(" %3d" % (game.state.chart[x][y].klingons*100 + game.state.chart[x][y].starbase * 10 + game.state.chart[x][y].stars))
+        if not silent:
+            prout(" ")
 
 def damagereport():
     "Damage report."
     jdam = False
     scanner.chew()
     for i in range(NDEVICES):
 
 def damagereport():
     "Damage report."
     jdam = False
     scanner.chew()
     for i in range(NDEVICES):
-       if damaged(i):
-           if not jdam:
-               prout(_("\tDEVICE\t\t\t-REPAIR TIMES-"))
-               prout(_("\t\t\tIN FLIGHT\t\tDOCKED"))
-               jdam = True
-           prout("  %-26s\t%8.2f\t\t%8.2f" % (device[i],
+        if damaged(i):
+            if not jdam:
+                prout(_("\tDEVICE\t\t\t-REPAIR TIMES-"))
+                prout(_("\t\t\tIN FLIGHT\t\tDOCKED"))
+                jdam = True
+            prout("  %-26s\t%8.2f\t\t%8.2f" % (device[i],
                                                game.damage[i]+0.05,
                                                DOCKFAC*game.damage[i]+0.005))
     if not jdam:
                                                game.damage[i]+0.05,
                                                DOCKFAC*game.damage[i]+0.005))
     if not jdam:
-       prout(_("All devices functional."))
+        prout(_("All devices functional."))
 
 def rechart():
     "Update the chart in the Enterprise's computer from galaxy data."
     game.lastchart = game.state.date
     for i in range(GALSIZE):
 
 def rechart():
     "Update the chart in the Enterprise's computer from galaxy data."
     game.lastchart = game.state.date
     for i in range(GALSIZE):
-       for j in range(GALSIZE):
-           if game.state.galaxy[i][j].charted:
-               game.state.chart[i][j].klingons = game.state.galaxy[i][j].klingons
-               game.state.chart[i][j].starbase = game.state.galaxy[i][j].starbase
-               game.state.chart[i][j].stars = game.state.galaxy[i][j].stars
+        for j in range(GALSIZE):
+            if game.state.galaxy[i][j].charted:
+                game.state.chart[i][j].klingons = game.state.galaxy[i][j].klingons
+                game.state.chart[i][j].starbase = game.state.galaxy[i][j].starbase
+                game.state.chart[i][j].stars = game.state.galaxy[i][j].stars
 
 def chart():
     "Display the star chart."
 
 def chart():
     "Display the star chart."
@@ -5001,37 +5008,37 @@ def chart():
     if (game.options & OPTION_AUTOSCAN):
         lrscan(silent=True)
     if not damaged(DRADIO):
     if (game.options & OPTION_AUTOSCAN):
         lrscan(silent=True)
     if not damaged(DRADIO):
-       rechart()
+        rechart()
     if game.lastchart < game.state.date and game.condition == "docked":
     if game.lastchart < game.state.date and game.condition == "docked":
-       prout(_("Spock-  \"I revised the Star Chart from the starbase's records.\""))
-       rechart()
+        prout(_("Spock-  \"I revised the Star Chart from the starbase's records.\""))
+        rechart()
     prout(_("       STAR CHART FOR THE KNOWN GALAXY"))
     if game.state.date > game.lastchart:
     prout(_("       STAR CHART FOR THE KNOWN GALAXY"))
     if game.state.date > game.lastchart:
-       prout(_("(Last surveillance update %d stardates ago).") % ((int)(game.state.date-game.lastchart)))
+        prout(_("(Last surveillance update %d stardates ago).") % ((int)(game.state.date-game.lastchart)))
     prout("      1    2    3    4    5    6    7    8")
     for i in range(GALSIZE):
     prout("      1    2    3    4    5    6    7    8")
     for i in range(GALSIZE):
-       proutn("%d |" % (i+1))
-       for j in range(GALSIZE):
-           if (game.options & OPTION_SHOWME) and i == game.quadrant.i and j == game.quadrant.j:
-               proutn("<")
-           else:
-               proutn(" ")
-           if game.state.galaxy[i][j].supernova:
-               show = "***"
-           elif not game.state.galaxy[i][j].charted and game.state.galaxy[i][j].starbase:
-               show = ".1."
-           elif game.state.galaxy[i][j].charted:
-               show = "%3d" % (game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars)
-           else:
-               show = "..."
-           proutn(show)
-           if (game.options & OPTION_SHOWME) and i == game.quadrant.i and j == game.quadrant.j:
-               proutn(">")
-           else:
-               proutn(" ")
-       proutn("  |")
-       if i<GALSIZE:
-           skip(1)
+        proutn("%d |" % (i+1))
+        for j in range(GALSIZE):
+            if (game.options & OPTION_SHOWME) and i == game.quadrant.i and j == game.quadrant.j:
+                proutn("<")
+            else:
+                proutn(" ")
+            if game.state.galaxy[i][j].supernova:
+                show = "***"
+            elif not game.state.galaxy[i][j].charted and game.state.galaxy[i][j].starbase:
+                show = ".1."
+            elif game.state.galaxy[i][j].charted:
+                show = "%3d" % (game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars)
+            else:
+                show = "..."
+            proutn(show)
+            if (game.options & OPTION_SHOWME) and i == game.quadrant.i and j == game.quadrant.j:
+                proutn(">")
+            else:
+                proutn(" ")
+        proutn("  |")
+        if i<GALSIZE:
+            skip(1)
 
 def sectscan(goodScan, i, j):
     "Light up an individual dot in a sector."
 
 def sectscan(goodScan, i, j):
     "Light up an individual dot in a sector."
@@ -5043,224 +5050,224 @@ def sectscan(goodScan, i, j):
                    "dead":BROWN}[game.condition]) 
         if game.quad[i][j] != game.ship: 
             highvideo()
                    "dead":BROWN}[game.condition]) 
         if game.quad[i][j] != game.ship: 
             highvideo()
-       proutn("%c " % game.quad[i][j])
+        proutn("%c " % game.quad[i][j])
         textcolor(DEFAULT)
     else:
         textcolor(DEFAULT)
     else:
-       proutn("- ")
+        proutn("- ")
 
 def status(req=0):
     "Emit status report lines"
     if not req or req == 1:
 
 def status(req=0):
     "Emit status report lines"
     if not req or req == 1:
-       prstat(_("Stardate"), _("%.1f, Time Left %.2f") \
+        prstat(_("Stardate"), _("%.1f, Time Left %.2f") \
                % (game.state.date, game.state.remtime))
     if not req or req == 2:
                % (game.state.date, game.state.remtime))
     if not req or req == 2:
-       if game.condition != "docked":
-           newcnd()
-       prstat(_("Condition"), _("%s, %i DAMAGES") % \
-               (game.condition.upper(), sum(map(lambda x: x > 0, game.damage))))
+        if game.condition != "docked":
+            newcnd()
+        prstat(_("Condition"), _("%s, %i DAMAGES") % \
+               (game.condition.upper(), sum([x > 0 for x in game.damage])))
     if not req or req == 3:
     if not req or req == 3:
-       prstat(_("Position"), "%s , %s" % (game.quadrant, game.sector))
+        prstat(_("Position"), "%s , %s" % (game.quadrant, game.sector))
     if not req or req == 4:
     if not req or req == 4:
-       if damaged(DLIFSUP):
-           if game.condition == "docked":
-               s = _("DAMAGED, Base provides")
-           else:
-               s = _("DAMAGED, reserves=%4.2f") % game.lsupres
-       else:
-           s = _("ACTIVE")
-       prstat(_("Life Support"), s)
+        if damaged(DLIFSUP):
+            if game.condition == "docked":
+                s = _("DAMAGED, Base provides")
+            else:
+                s = _("DAMAGED, reserves=%4.2f") % game.lsupres
+        else:
+            s = _("ACTIVE")
+        prstat(_("Life Support"), s)
     if not req or req == 5:
     if not req or req == 5:
-       prstat(_("Warp Factor"), "%.1f" % game.warpfac)
+        prstat(_("Warp Factor"), "%.1f" % game.warpfac)
     if not req or req == 6:
         extra = ""
         if game.icrystl and (game.options & OPTION_SHOWME):
             extra = _(" (have crystals)")
     if not req or req == 6:
         extra = ""
         if game.icrystl and (game.options & OPTION_SHOWME):
             extra = _(" (have crystals)")
-       prstat(_("Energy"), "%.2f%s" % (game.energy, extra))
+        prstat(_("Energy"), "%.2f%s" % (game.energy, extra))
     if not req or req == 7:
     if not req or req == 7:
-       prstat(_("Torpedoes"), "%d" % (game.torps))
+        prstat(_("Torpedoes"), "%d" % (game.torps))
     if not req or req == 8:
     if not req or req == 8:
-       if damaged(DSHIELD):
-           s = _("DAMAGED,")
-       elif game.shldup:
-           s = _("UP,")
-       else:
-           s = _("DOWN,")
-       data = _(" %d%% %.1f units") \
+        if damaged(DSHIELD):
+            s = _("DAMAGED,")
+        elif game.shldup:
+            s = _("UP,")
+        else:
+            s = _("DOWN,")
+        data = _(" %d%% %.1f units") \
                % (int((100.0*game.shield)/game.inshld + 0.5), game.shield)
                % (int((100.0*game.shield)/game.inshld + 0.5), game.shield)
-       prstat(_("Shields"), s+data)
+        prstat(_("Shields"), s+data)
     if not req or req == 9:
         prstat(_("Klingons Left"), "%d" \
                % (game.state.remkl+len(game.state.kcmdr)+game.state.nscrem))
     if not req or req == 10:
     if not req or req == 9:
         prstat(_("Klingons Left"), "%d" \
                % (game.state.remkl+len(game.state.kcmdr)+game.state.nscrem))
     if not req or req == 10:
-       if game.options & OPTION_WORLDS:
-           plnet = game.state.galaxy[game.quadrant.i][game.quadrant.j].planet
-           if plnet and plnet.inhabited:
-               prstat(_("Major system"), plnet.name)
-           else:
-               prout(_("Sector is uninhabited"))
+        if game.options & OPTION_WORLDS:
+            plnet = game.state.galaxy[game.quadrant.i][game.quadrant.j].planet
+            if plnet and plnet.inhabited:
+                prstat(_("Major system"), plnet.name)
+            else:
+                prout(_("Sector is uninhabited"))
     elif not req or req == 11:
     elif not req or req == 11:
-       attackreport(not req)
+        attackreport(not req)
 
 def request():
     "Request specified status data, a historical relic from slow TTYs."
     requests = ("da","co","po","ls","wa","en","to","sh","kl","sy", "ti")
     while scanner.nexttok() == "IHEOL":
 
 def request():
     "Request specified status data, a historical relic from slow TTYs."
     requests = ("da","co","po","ls","wa","en","to","sh","kl","sy", "ti")
     while scanner.nexttok() == "IHEOL":
-       proutn(_("Information desired? "))
+        proutn(_("Information desired? "))
     scanner.chew()
     if scanner.token in requests:
         status(requests.index(scanner.token))
     else:
     scanner.chew()
     if scanner.token in requests:
         status(requests.index(scanner.token))
     else:
-       prout(_("UNRECOGNIZED REQUEST. Legal requests are:"))
-       prout(("  date, condition, position, lsupport, warpfactor,"))
-       prout(("  energy, torpedoes, shields, klingons, system, time."))
-               
+        prout(_("UNRECOGNIZED REQUEST. Legal requests are:"))
+        prout(("  date, condition, position, lsupport, warpfactor,"))
+        prout(("  energy, torpedoes, shields, klingons, system, time."))
+                
 def srscan():
     "Short-range scan." 
     goodScan=True
     if damaged(DSRSENS):
 def srscan():
     "Short-range scan." 
     goodScan=True
     if damaged(DSRSENS):
-       # Allow base's sensors if docked 
-       if game.condition != "docked":
-           prout(_("   S.R. SENSORS DAMAGED!"))
-           goodScan=False
-       else:
-           prout(_("  [Using Base's sensors]"))
+        # Allow base's sensors if docked 
+        if game.condition != "docked":
+            prout(_("   S.R. SENSORS DAMAGED!"))
+            goodScan=False
+        else:
+            prout(_("  [Using Base's sensors]"))
     else:
     else:
-       prout(_("     Short-range scan"))
+        prout(_("     Short-range scan"))
     if goodScan and not damaged(DRADIO): 
     if goodScan and not damaged(DRADIO): 
-       game.state.chart[game.quadrant.i][game.quadrant.j].klingons = game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons
-       game.state.chart[game.quadrant.i][game.quadrant.j].starbase = game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase
-       game.state.chart[game.quadrant.i][game.quadrant.j].stars = game.state.galaxy[game.quadrant.i][game.quadrant.j].stars
-       game.state.galaxy[game.quadrant.i][game.quadrant.j].charted = True
+        game.state.chart[game.quadrant.i][game.quadrant.j].klingons = game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons
+        game.state.chart[game.quadrant.i][game.quadrant.j].starbase = game.state.galaxy[game.quadrant.i][game.quadrant.j].starbase
+        game.state.chart[game.quadrant.i][game.quadrant.j].stars = game.state.galaxy[game.quadrant.i][game.quadrant.j].stars
+        game.state.galaxy[game.quadrant.i][game.quadrant.j].charted = True
     prout("    1 2 3 4 5 6 7 8 9 10")
     if game.condition != "docked":
     prout("    1 2 3 4 5 6 7 8 9 10")
     if game.condition != "docked":
-       newcnd()
+        newcnd()
     for i in range(QUADSIZE):
     for i in range(QUADSIZE):
-       proutn("%2d  " % (i+1))
-       for j in range(QUADSIZE):
-           sectscan(goodScan, i, j)
-       skip(1)
-               
+        proutn("%2d  " % (i+1))
+        for j in range(QUADSIZE):
+            sectscan(goodScan, i, j)
+        skip(1)
+                
 def eta():
     "Use computer to get estimated time of arrival for a warp jump."
     w1 = Coord(); w2 = Coord()
     prompt = False
     if damaged(DCOMPTR):
 def eta():
     "Use computer to get estimated time of arrival for a warp jump."
     w1 = Coord(); w2 = Coord()
     prompt = False
     if damaged(DCOMPTR):
-       prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR."))
-       skip(1)
-       return
+        prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR."))
+        skip(1)
+        return
     if scanner.nexttok() != "IHREAL":
     if scanner.nexttok() != "IHREAL":
-       prompt = True
-       scanner.chew()
-       proutn(_("Destination quadrant and/or sector? "))
-       if scanner.nexttok()!="IHREAL":
-           huh()
-           return
+        prompt = True
+        scanner.chew()
+        proutn(_("Destination quadrant and/or sector? "))
+        if scanner.nexttok()!="IHREAL":
+            huh()
+            return
     w1.j = int(scanner.real-0.5)
     if scanner.nexttok() != "IHREAL":
     w1.j = int(scanner.real-0.5)
     if scanner.nexttok() != "IHREAL":
-       huh()
-       return
+        huh()
+        return
     w1.i = int(scanner.real-0.5)
     if scanner.nexttok() == "IHREAL":
     w1.i = int(scanner.real-0.5)
     if scanner.nexttok() == "IHREAL":
-       w2.j = int(scanner.real-0.5)
-       if scanner.nexttok() != "IHREAL":
-           huh()
-           return
-       w2.i = int(scanner.real-0.5)
+        w2.j = int(scanner.real-0.5)
+        if scanner.nexttok() != "IHREAL":
+            huh()
+            return
+        w2.i = int(scanner.real-0.5)
     else:
     else:
-       if game.quadrant.j>w1.i:
-           w2.i = 0
-       else:
-           w2.i=QUADSIZE-1
-       if game.quadrant.i>w1.j:
-           w2.j = 0
-       else:
-           w2.j=QUADSIZE-1
+        if game.quadrant.j>w1.i:
+            w2.i = 0
+        else:
+            w2.i=QUADSIZE-1
+        if game.quadrant.i>w1.j:
+            w2.j = 0
+        else:
+            w2.j=QUADSIZE-1
     if not w1.valid_quadrant() or not w2.valid_sector():
     if not w1.valid_quadrant() or not w2.valid_sector():
-       huh()
-       return
+        huh()
+        return
     dist = math.sqrt((w1.j-game.quadrant.j+(w2.j-game.sector.j)/(QUADSIZE*1.0))**2+
     dist = math.sqrt((w1.j-game.quadrant.j+(w2.j-game.sector.j)/(QUADSIZE*1.0))**2+
-               (w1.i-game.quadrant.i+(w2.i-game.sector.i)/(QUADSIZE*1.0))**2)
+                (w1.i-game.quadrant.i+(w2.i-game.sector.i)/(QUADSIZE*1.0))**2)
     wfl = False
     if prompt:
     wfl = False
     if prompt:
-       prout(_("Answer \"no\" if you don't know the value:"))
+        prout(_("Answer \"no\" if you don't know the value:"))
     while True:
     while True:
-       scanner.chew()
-       proutn(_("Time or arrival date? "))
-       if scanner.nexttok()=="IHREAL":
-           ttime = scanner.real
-           if ttime > game.state.date:
-               ttime -= game.state.date # Actually a star date
+        scanner.chew()
+        proutn(_("Time or arrival date? "))
+        if scanner.nexttok()=="IHREAL":
+            ttime = scanner.real
+            if ttime > game.state.date:
+                ttime -= game.state.date # Actually a star date
             twarp=(math.floor(math.sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0
             if ttime <= 1e-10 or twarp > 10:
             twarp=(math.floor(math.sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0
             if ttime <= 1e-10 or twarp > 10:
-               prout(_("We'll never make it, sir."))
-               scanner.chew()
-               return
-           if twarp < 1.0:
-               twarp = 1.0
-           break
-       scanner.chew()
-       proutn(_("Warp factor? "))
-       if scanner.nexttok()== "IHREAL":
-           wfl = True
-           twarp = scanner.real
-           if twarp<1.0 or twarp > 10.0:
-               huh()
-               return
-           break
-       prout(_("Captain, certainly you can give me one of these."))
+                prout(_("We'll never make it, sir."))
+                scanner.chew()
+                return
+            if twarp < 1.0:
+                twarp = 1.0
+            break
+        scanner.chew()
+        proutn(_("Warp factor? "))
+        if scanner.nexttok()== "IHREAL":
+            wfl = True
+            twarp = scanner.real
+            if twarp<1.0 or twarp > 10.0:
+                huh()
+                return
+            break
+        prout(_("Captain, certainly you can give me one of these."))
     while True:
     while True:
-       scanner.chew()
-       ttime = (10.0*dist)/twarp**2
-       tpower = dist*twarp*twarp*twarp*(game.shldup+1)
-       if tpower >= game.energy:
-           prout(_("Insufficient energy, sir."))
-           if not game.shldup or tpower > game.energy*2.0:
-               if not wfl:
-                   return
-               proutn(_("New warp factor to try? "))
-               if scanner.nexttok() == "IHREAL":
-                   wfl = True
-                   twarp = scanner.real
-                   if twarp<1.0 or twarp > 10.0:
-                       huh()
-                       return
-                   continue
-               else:
-                   scanner.chew()
-                   skip(1)
-                   return
-           prout(_("But if you lower your shields,"))
-           proutn(_("remaining"))
-           tpower /= 2
-       else:
-           proutn(_("Remaining"))
-       prout(_(" energy will be %.2f.") % (game.energy-tpower))
-       if wfl:
-           prout(_("And we will arrive at stardate %.2f.") % (game.state.date+ttime))
-       elif twarp==1.0:
-           prout(_("Any warp speed is adequate."))
-       else:
-           prout(_("Minimum warp needed is %.2f,") % (twarp))
-           prout(_("and we will arrive at stardate %.2f.") % (game.state.date+ttime))
-       if game.state.remtime < ttime:
-           prout(_("Unfortunately, the Federation will be destroyed by then."))
-       if twarp > 6.0:
-           prout(_("You'll be taking risks at that speed, Captain"))
-       if (game.isatb==1 and game.state.kscmdr == w1 and \
-            scheduled(FSCDBAS)< ttime+game.state.date) or \
-           (scheduled(FCDBAS)<ttime+game.state.date and game.battle == w1):
-           prout(_("The starbase there will be destroyed by then."))
-       proutn(_("New warp factor to try? "))
-       if scanner.nexttok() == "IHREAL":
-           wfl = True
-           twarp = scanner.real
-           if twarp<1.0 or twarp > 10.0:
-               huh()
-               return
-       else:
-           scanner.chew()
-           skip(1)
-           return
+        scanner.chew()
+        ttime = (10.0*dist)/twarp**2
+        tpower = dist*twarp*twarp*twarp*(game.shldup+1)
+        if tpower >= game.energy:
+            prout(_("Insufficient energy, sir."))
+            if not game.shldup or tpower > game.energy*2.0:
+                if not wfl:
+                    return
+                proutn(_("New warp factor to try? "))
+                if scanner.nexttok() == "IHREAL":
+                    wfl = True
+                    twarp = scanner.real
+                    if twarp<1.0 or twarp > 10.0:
+                        huh()
+                        return
+                    continue
+                else:
+                    scanner.chew()
+                    skip(1)
+                    return
+            prout(_("But if you lower your shields,"))
+            proutn(_("remaining"))
+            tpower /= 2
+        else:
+            proutn(_("Remaining"))
+        prout(_(" energy will be %.2f.") % (game.energy-tpower))
+        if wfl:
+            prout(_("And we will arrive at stardate %.2f.") % (game.state.date+ttime))
+        elif twarp==1.0:
+            prout(_("Any warp speed is adequate."))
+        else:
+            prout(_("Minimum warp needed is %.2f,") % (twarp))
+            prout(_("and we will arrive at stardate %.2f.") % (game.state.date+ttime))
+        if game.state.remtime < ttime:
+            prout(_("Unfortunately, the Federation will be destroyed by then."))
+        if twarp > 6.0:
+            prout(_("You'll be taking risks at that speed, Captain"))
+        if (game.isatb==1 and game.state.kscmdr == w1 and \
+             scheduled(FSCDBAS)< ttime+game.state.date) or \
+            (scheduled(FCDBAS)<ttime+game.state.date and game.battle == w1):
+            prout(_("The starbase there will be destroyed by then."))
+        proutn(_("New warp factor to try? "))
+        if scanner.nexttok() == "IHREAL":
+            wfl = True
+            twarp = scanner.real
+            if twarp<1.0 or twarp > 10.0:
+                huh()
+                return
+        else:
+            scanner.chew()
+            skip(1)
+            return
 
 # Code from setup.c begins here
 
 
 # Code from setup.c begins here
 
@@ -5276,7 +5283,7 @@ def prelim():
 def freeze(boss):
     "Save game."
     if boss:
 def freeze(boss):
     "Save game."
     if boss:
-       scanner.push("emsave.trk")
+        scanner.push("emsave.trk")
     key = scanner.nexttok()
     if key == "IHEOL":
         proutn(_("File name: "))
     key = scanner.nexttok()
     if key == "IHEOL":
         proutn(_("File name: "))
@@ -5289,8 +5296,8 @@ def freeze(boss):
     try:
         fp = open(scanner.token, "wb")
     except IOError:
     try:
         fp = open(scanner.token, "wb")
     except IOError:
-       prout(_("Can't freeze game as file %s") % scanner.token)
-       return
+        prout(_("Can't freeze game as file %s") % scanner.token)
+        return
     pickle.dump(game, fp)
     fp.close()
     scanner.chew()
     pickle.dump(game, fp)
     fp.close()
     scanner.chew()
@@ -5301,18 +5308,18 @@ def thaw():
     game.passwd = None
     key = scanner.nexttok()
     if key == "IHEOL":
     game.passwd = None
     key = scanner.nexttok()
     if key == "IHEOL":
-       proutn(_("File name: "))
-       key = scanner.nexttok()
+        proutn(_("File name: "))
+        key = scanner.nexttok()
     if key != "IHALPHA":
     if key != "IHALPHA":
-       huh()
-       return True
+        huh()
+        return True
     if '.' not in scanner.token:
         scanner.token += ".trk"
     try:
         fp = open(scanner.token, "rb")
     except IOError:
     if '.' not in scanner.token:
         scanner.token += ".trk"
     try:
         fp = open(scanner.token, "rb")
     except IOError:
-       prout(_("Can't thaw game in %s") % scanner.token)
-       return
+        prout(_("Can't thaw game in %s") % scanner.token)
+        return
     game = pickle.load(fp)
     fp.close()
     scanner.chew()
     game = pickle.load(fp)
     fp.close()
     scanner.chew()
@@ -5326,67 +5333,67 @@ def thaw():
 # because of the way planets are generated. This is a known bug.
 systnames = (
     # Federation Worlds 
 # because of the way planets are generated. This is a known bug.
 systnames = (
     # Federation Worlds 
-    _("Andoria (Fesoan)"),     # several episodes 
-    _("Tellar Prime (Miracht)"),       # TOS: "Journey to Babel" 
-    _("Vulcan (T'Khasi)"),     # many episodes 
-    _("Medusa"),               # TOS: "Is There in Truth No Beauty?" 
-    _("Argelius II (Nelphia)"),        # TOS: "Wolf in the Fold" ("IV" in BSD) 
-    _("Ardana"),               # TOS: "The Cloud Minders" 
-    _("Catulla (Cendo-Prae)"), # TOS: "The Way to Eden" 
-    _("Gideon"),               # TOS: "The Mark of Gideon" 
-    _("Aldebaran III"),                # TOS: "The Deadly Years" 
-    _("Alpha Majoris I"),      # TOS: "Wolf in the Fold" 
-    _("Altair IV"),            # TOS: "Amok Time 
-    _("Ariannus"),             # TOS: "Let That Be Your Last Battlefield" 
-    _("Benecia"),              # TOS: "The Conscience of the King" 
-    _("Beta Niobe I (Sarpeidon)"),     # TOS: "All Our Yesterdays" 
-    _("Alpha Carinae II"),     # TOS: "The Ultimate Computer" 
-    _("Capella IV (Kohath)"),  # TOS: "Friday's Child" (Class G) 
-    _("Daran V"),              # TOS: "For the World is Hollow and I Have Touched the Sky" 
-    _("Deneb II"),             # TOS: "Wolf in the Fold" ("IV" in BSD) 
-    _("Eminiar VII"),          # TOS: "A Taste of Armageddon" 
-    _("Gamma Canaris IV"),     # TOS: "Metamorphosis" 
-    _("Gamma Tranguli VI (Vaalel)"),   # TOS: "The Apple" 
-    _("Ingraham B"),           # TOS: "Operation: Annihilate" 
-    _("Janus IV"),             # TOS: "The Devil in the Dark" 
-    _("Makus III"),            # TOS: "The Galileo Seven" 
-    _("Marcos XII"),           # TOS: "And the Children Shall Lead", 
-    _("Omega IV"),             # TOS: "The Omega Glory" 
-    _("Regulus V"),            # TOS: "Amok Time 
-    _("Deneva"),               # TOS: "Operation -- Annihilate!" 
+    _("Andoria (Fesoan)"),        # several episodes 
+    _("Tellar Prime (Miracht)"),        # TOS: "Journey to Babel" 
+    _("Vulcan (T'Khasi)"),        # many episodes 
+    _("Medusa"),                # TOS: "Is There in Truth No Beauty?" 
+    _("Argelius II (Nelphia)"),        # TOS: "Wolf in the Fold" ("IV" in BSD) 
+    _("Ardana"),                # TOS: "The Cloud Minders" 
+    _("Catulla (Cendo-Prae)"),        # TOS: "The Way to Eden" 
+    _("Gideon"),                # TOS: "The Mark of Gideon" 
+    _("Aldebaran III"),                # TOS: "The Deadly Years" 
+    _("Alpha Majoris I"),        # TOS: "Wolf in the Fold" 
+    _("Altair IV"),                # TOS: "Amok Time 
+    _("Ariannus"),                # TOS: "Let That Be Your Last Battlefield" 
+    _("Benecia"),                # TOS: "The Conscience of the King" 
+    _("Beta Niobe I (Sarpeidon)"),        # TOS: "All Our Yesterdays" 
+    _("Alpha Carinae II"),        # TOS: "The Ultimate Computer" 
+    _("Capella IV (Kohath)"),        # TOS: "Friday's Child" (Class G) 
+    _("Daran V"),                # TOS: "For the World is Hollow and I Have Touched the Sky" 
+    _("Deneb II"),                # TOS: "Wolf in the Fold" ("IV" in BSD) 
+    _("Eminiar VII"),                # TOS: "A Taste of Armageddon" 
+    _("Gamma Canaris IV"),        # TOS: "Metamorphosis" 
+    _("Gamma Tranguli VI (Vaalel)"),        # TOS: "The Apple" 
+    _("Ingraham B"),                # TOS: "Operation: Annihilate" 
+    _("Janus IV"),                # TOS: "The Devil in the Dark" 
+    _("Makus III"),                # TOS: "The Galileo Seven" 
+    _("Marcos XII"),                # TOS: "And the Children Shall Lead", 
+    _("Omega IV"),                # TOS: "The Omega Glory" 
+    _("Regulus V"),                # TOS: "Amok Time 
+    _("Deneva"),                # TOS: "Operation -- Annihilate!" 
     # Worlds from BSD Trek 
     # Worlds from BSD Trek 
-    _("Rigel II"),             # TOS: "Shore Leave" ("III" in BSD) 
-    _("Beta III"),             # TOS: "The Return of the Archons" 
-    _("Triacus"),              # TOS: "And the Children Shall Lead", 
-    _("Exo III"),              # TOS: "What Are Little Girls Made Of?" (Class P) 
-#      # Others 
-#    _("Hansen's Planet"),     # TOS: "The Galileo Seven" 
-#    _("Taurus IV"),           # TOS: "The Galileo Seven" (class G) 
-#    _("Antos IV (Doraphane)"),        # TOS: "Whom Gods Destroy", "Who Mourns for Adonais?" 
-#    _("Izar"),                        # TOS: "Whom Gods Destroy" 
-#    _("Tiburon"),             # TOS: "The Way to Eden" 
-#    _("Merak II"),            # TOS: "The Cloud Minders" 
-#    _("Coridan (Desotriana)"),        # TOS: "Journey to Babel" 
-#    _("Iotia"),               # TOS: "A Piece of the Action" 
+    _("Rigel II"),                # TOS: "Shore Leave" ("III" in BSD) 
+    _("Beta III"),                # TOS: "The Return of the Archons" 
+    _("Triacus"),                # TOS: "And the Children Shall Lead", 
+    _("Exo III"),                # TOS: "What Are Little Girls Made Of?" (Class P) 
+#        # Others 
+#    _("Hansen's Planet"),        # TOS: "The Galileo Seven" 
+#    _("Taurus IV"),                # TOS: "The Galileo Seven" (class G) 
+#    _("Antos IV (Doraphane)"),        # TOS: "Whom Gods Destroy", "Who Mourns for Adonais?" 
+#    _("Izar"),                        # TOS: "Whom Gods Destroy" 
+#    _("Tiburon"),                # TOS: "The Way to Eden" 
+#    _("Merak II"),                # TOS: "The Cloud Minders" 
+#    _("Coridan (Desotriana)"),        # TOS: "Journey to Babel" 
+#    _("Iotia"),                # TOS: "A Piece of the Action" 
 )
 
 device = (
 )
 
 device = (
-       _("S. R. Sensors"), \
-       _("L. R. Sensors"), \
-       _("Phasers"), \
-       _("Photon Tubes"), \
-       _("Life Support"), \
-       _("Warp Engines"), \
-       _("Impulse Engines"), \
-       _("Shields"), \
-       _("Subspace Radio"), \
-       _("Shuttle Craft"), \
-       _("Computer"), \
-       _("Navigation System"), \
-       _("Transporter"), \
-       _("Shield Control"), \
-       _("Death Ray"), \
-       _("D. S. Probe"), \
+        _("S. R. Sensors"), \
+        _("L. R. Sensors"), \
+        _("Phasers"), \
+        _("Photon Tubes"), \
+        _("Life Support"), \
+        _("Warp Engines"), \
+        _("Impulse Engines"), \
+        _("Shields"), \
+        _("Subspace Radio"), \
+        _("Shuttle Craft"), \
+        _("Computer"), \
+        _("Navigation System"), \
+        _("Transporter"), \
+        _("Shield Control"), \
+        _("Death Ray"), \
+        _("D. S. Probe"), \
 )
 
 def setup():
 )
 
 def setup():
@@ -5394,7 +5401,7 @@ def setup():
     w = Coord()
     #  Decide how many of everything
     if choose():
     w = Coord()
     #  Decide how many of everything
     if choose():
-       return # frozen game
+        return # frozen game
     # Prepare the Enterprise
     game.alldone = game.gamewon = game.shldchg = game.shldup = False
     game.ship = 'E'
     # Prepare the Enterprise
     game.alldone = game.gamewon = game.shldchg = game.shldup = False
     game.ship = 'E'
@@ -5409,7 +5416,7 @@ def setup():
     game.nprobes = randrange(2, 5)
     game.warpfac = 5.0
     for i in range(NDEVICES): 
     game.nprobes = randrange(2, 5)
     game.warpfac = 5.0
     for i in range(NDEVICES): 
-       game.damage[i] = 0.0
+        game.damage[i] = 0.0
     # Set up assorted game parameters
     game.battle = Coord()
     game.state.date = game.indate = 100.0 * randreal(20, 51)
     # Set up assorted game parameters
     game.battle = Coord()
     game.state.date = game.indate = 100.0 * randreal(20, 51)
@@ -5436,12 +5443,12 @@ def setup():
     # Put stars in the galaxy
     game.instar = 0
     for i in range(GALSIZE):
     # Put stars in the galaxy
     game.instar = 0
     for i in range(GALSIZE):
-       for j in range(GALSIZE):
+        for j in range(GALSIZE):
             # Can't have more stars per quadrant than fit in one decimal digit,
             # if we do the chart representation will break. 
             # Can't have more stars per quadrant than fit in one decimal digit,
             # if we do the chart representation will break. 
-           k = randrange(1, min(10, QUADSIZE**2/10))
-           game.instar += k
-           game.state.galaxy[i][j].stars = k
+            k = randrange(1, min(10, QUADSIZE**2/10))
+            game.instar += k
+            game.state.galaxy[i][j].stars = k
     # Locate star bases in galaxy
     if game.idebug:
         prout("=== Allocating %d bases" % game.inbase)
     # Locate star bases in galaxy
     if game.idebug:
         prout("=== Allocating %d bases" % game.inbase)
@@ -5451,43 +5458,43 @@ def setup():
                 w = randplace(GALSIZE)
                 if not game.state.galaxy[w.i][w.j].starbase:
                     break
                 w = randplace(GALSIZE)
                 if not game.state.galaxy[w.i][w.j].starbase:
                     break
-           contflag = False
+            contflag = False
             # C version: for (j = i-1; j > 0; j--)
             # so it did them in the opposite order.
             for j in range(1, i):
             # C version: for (j = i-1; j > 0; j--)
             # so it did them in the opposite order.
             for j in range(1, i):
-               # Improved placement algorithm to spread out bases
-               distq = (w - game.state.baseq[j]).distance()
-               if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
-                   contflag = True
-                   if game.idebug:
-                       prout("=== Abandoning base #%d at %s" % (i, w))
-                   break
-               elif distq < 6.0 * (BASEMAX+1-game.inbase):
-                   if game.idebug:
-                       prout("=== Saving base #%d, close to #%d" % (i, j))
+                # Improved placement algorithm to spread out bases
+                distq = (w - game.state.baseq[j]).distance()
+                if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
+                    contflag = True
+                    if game.idebug:
+                        prout("=== Abandoning base #%d at %s" % (i, w))
+                    break
+                elif distq < 6.0 * (BASEMAX+1-game.inbase):
+                    if game.idebug:
+                        prout("=== Saving base #%d, close to #%d" % (i, j))
             if not contflag:
                 break
         if game.idebug:
             prout("=== Placing base #%d in quadrant %s" % (i, w))
             if not contflag:
                 break
         if game.idebug:
             prout("=== Placing base #%d in quadrant %s" % (i, w))
-       game.state.baseq.append(w)
-       game.state.galaxy[w.i][w.j].starbase = game.state.chart[w.i][w.j].starbase = True
+        game.state.baseq.append(w)
+        game.state.galaxy[w.i][w.j].starbase = game.state.chart[w.i][w.j].starbase = True
     # Position ordinary Klingon Battle Cruisers
     krem = game.inkling
     klumper = 0.25*game.skill*(9.0-game.length)+1.0
     if klumper > MAXKLQUAD: 
     # Position ordinary Klingon Battle Cruisers
     krem = game.inkling
     klumper = 0.25*game.skill*(9.0-game.length)+1.0
     if klumper > MAXKLQUAD: 
-       klumper = MAXKLQUAD
+        klumper = MAXKLQUAD
     while True:
     while True:
-       r = randreal()
-       klump = (1.0 - r*r)*klumper
-       if klump > krem:
-           klump = krem
-       krem -= klump
+        r = randreal()
+        klump = (1.0 - r*r)*klumper
+        if klump > krem:
+            klump = krem
+        krem -= klump
         while True:
             w = randplace(GALSIZE)
             if not game.state.galaxy[w.i][w.j].supernova and \
                game.state.galaxy[w.i][w.j].klingons + klump <= MAXKLQUAD:
                 break
         while True:
             w = randplace(GALSIZE)
             if not game.state.galaxy[w.i][w.j].supernova and \
                game.state.galaxy[w.i][w.j].klingons + klump <= MAXKLQUAD:
                 break
-       game.state.galaxy[w.i][w.j].klingons += int(klump)
+        game.state.galaxy[w.i][w.j].klingons += int(klump)
         if krem <= 0:
             break
     # Position Klingon Commander Ships
         if krem <= 0:
             break
     # Position Klingon Commander Ships
@@ -5498,8 +5505,8 @@ def setup():
                 continue
             if (game.state.galaxy[w.i][w.j].klingons or withprob(0.25)):
                 break
                 continue
             if (game.state.galaxy[w.i][w.j].klingons or withprob(0.25)):
                 break
-       game.state.galaxy[w.i][w.j].klingons += 1
-       game.state.kcmdr.append(w)
+        game.state.galaxy[w.i][w.j].klingons += 1
+        game.state.kcmdr.append(w)
     # Locate planets in galaxy
     for i in range(game.inplan):
         while True:
     # Locate planets in galaxy
     for i in range(game.inplan):
         while True:
@@ -5507,34 +5514,34 @@ def setup():
             if game.state.galaxy[w.i][w.j].planet == None:
                 break
         new = Planet()
             if game.state.galaxy[w.i][w.j].planet == None:
                 break
         new = Planet()
-       new.quadrant = w
+        new.quadrant = w
         new.crystals = "absent"
         new.crystals = "absent"
-       if (game.options & OPTION_WORLDS) and i < NINHAB:
-           new.pclass = "M"    # All inhabited planets are class M
-           new.crystals = "absent"
-           new.known = "known"
+        if (game.options & OPTION_WORLDS) and i < NINHAB:
+            new.pclass = "M"        # All inhabited planets are class M
+            new.crystals = "absent"
+            new.known = "known"
             new.name = systnames[i]
             new.name = systnames[i]
-           new.inhabited = True
-       else:
-           new.pclass = ("M", "N", "O")[randrange(0, 3)]
+            new.inhabited = True
+        else:
+            new.pclass = ("M", "N", "O")[randrange(0, 3)]
             if withprob(0.33):
                 new.crystals = "present"
             if withprob(0.33):
                 new.crystals = "present"
-           new.known = "unknown"
-           new.inhabited = False
-       game.state.galaxy[w.i][w.j].planet = new
+            new.known = "unknown"
+            new.inhabited = False
+        game.state.galaxy[w.i][w.j].planet = new
         game.state.planets.append(new)
     # Locate Romulans
     for i in range(game.state.nromrem):
         game.state.planets.append(new)
     # Locate Romulans
     for i in range(game.state.nromrem):
-       w = randplace(GALSIZE)
-       game.state.galaxy[w.i][w.j].romulans += 1
+        w = randplace(GALSIZE)
+        game.state.galaxy[w.i][w.j].romulans += 1
     # Place the Super-Commander if needed
     if game.state.nscrem > 0:
         while True:
             w = randplace(GALSIZE)
             if welcoming(w):
                 break
     # Place the Super-Commander if needed
     if game.state.nscrem > 0:
         while True:
             w = randplace(GALSIZE)
             if welcoming(w):
                 break
-       game.state.kscmdr = w
-       game.state.galaxy[w.i][w.j].klingons += 1
+        game.state.kscmdr = w
+        game.state.galaxy[w.i][w.j].klingons += 1
     # Initialize times for extraneous events
     schedule(FSNOVA, expran(0.5 * game.intime))
     schedule(FTBEAM, expran(1.5 * (game.intime / len(game.state.kcmdr))))
     # Initialize times for extraneous events
     schedule(FSNOVA, expran(0.5 * game.intime))
     schedule(FTBEAM, expran(1.5 * (game.intime / len(game.state.kcmdr))))
@@ -5542,15 +5549,15 @@ def setup():
     schedule(FBATTAK, expran(0.3*game.intime))
     unschedule(FCDBAS)
     if game.state.nscrem:
     schedule(FBATTAK, expran(0.3*game.intime))
     unschedule(FCDBAS)
     if game.state.nscrem:
-       schedule(FSCMOVE, 0.2777)
+        schedule(FSCMOVE, 0.2777)
     else:
     else:
-       unschedule(FSCMOVE)
+        unschedule(FSCMOVE)
     unschedule(FSCDBAS)
     unschedule(FDSPROB)
     if (game.options & OPTION_WORLDS) and game.skill >= SKILL_GOOD:
     unschedule(FSCDBAS)
     unschedule(FDSPROB)
     if (game.options & OPTION_WORLDS) and game.skill >= SKILL_GOOD:
-       schedule(FDISTR, expran(1.0 + game.intime))
+        schedule(FDISTR, expran(1.0 + game.intime))
     else:
     else:
-       unschedule(FDISTR)
+        unschedule(FDISTR)
     unschedule(FENSLV)
     unschedule(FREPRO)
     # Place thing (in tournament game, we don't want one!)
     unschedule(FENSLV)
     unschedule(FREPRO)
     # Place thing (in tournament game, we don't want one!)
@@ -5565,137 +5572,137 @@ def setup():
     skip(2)
     game.state.snap = False
     if game.skill == SKILL_NOVICE:
     skip(2)
     game.state.snap = False
     if game.skill == SKILL_NOVICE:
-       prout(_("It is stardate %d. The Federation is being attacked by") % int(game.state.date))
-       prout(_("a deadly Klingon invasion force. As captain of the United"))
-       prout(_("Starship U.S.S. Enterprise, it is your mission to seek out"))
-       prout(_("and destroy this invasion force of %d battle cruisers.") % ((game.inkling + game.incom + game.inscom)))
-       prout(_("You have an initial allotment of %d stardates to complete") % int(game.intime))
-       prout(_("your mission.  As you proceed you may be given more time."))
-       skip(1)
-       prout(_("You will have %d supporting starbases.") % (game.inbase))
-       proutn(_("Starbase locations-  "))
+        prout(_("It is stardate %d. The Federation is being attacked by") % int(game.state.date))
+        prout(_("a deadly Klingon invasion force. As captain of the United"))
+        prout(_("Starship U.S.S. Enterprise, it is your mission to seek out"))
+        prout(_("and destroy this invasion force of %d battle cruisers.") % ((game.inkling + game.incom + game.inscom)))
+        prout(_("You have an initial allotment of %d stardates to complete") % int(game.intime))
+        prout(_("your mission.  As you proceed you may be given more time."))
+        skip(1)
+        prout(_("You will have %d supporting starbases.") % (game.inbase))
+        proutn(_("Starbase locations-  "))
     else:
     else:
-       prout(_("Stardate %d.") % int(game.state.date))
-       skip(1)
-       prout(_("%d Klingons.") % (game.inkling + game.incom + game.inscom))
-       prout(_("An unknown number of Romulans."))
-       if game.state.nscrem:
-           prout(_("And one (GULP) Super-Commander."))
-       prout(_("%d stardates.") % int(game.intime))
-       proutn(_("%d starbases in ") % game.inbase)
+        prout(_("Stardate %d.") % int(game.state.date))
+        skip(1)
+        prout(_("%d Klingons.") % (game.inkling + game.incom + game.inscom))
+        prout(_("An unknown number of Romulans."))
+        if game.state.nscrem:
+            prout(_("And one (GULP) Super-Commander."))
+        prout(_("%d stardates.") % int(game.intime))
+        proutn(_("%d starbases in ") % game.inbase)
     for i in range(game.inbase):
     for i in range(game.inbase):
-       proutn(repr(game.state.baseq[i]))
-       proutn("  ")
+        proutn(repr(game.state.baseq[i]))
+        proutn("  ")
     skip(2)
     proutn(_("The Enterprise is currently in Quadrant %s") % game.quadrant)
     proutn(_(" Sector %s") % game.sector)
     skip(2)
     prout(_("Good Luck!"))
     if game.state.nscrem:
     skip(2)
     proutn(_("The Enterprise is currently in Quadrant %s") % game.quadrant)
     proutn(_(" Sector %s") % game.sector)
     skip(2)
     prout(_("Good Luck!"))
     if game.state.nscrem:
-       prout(_("  YOU'LL NEED IT."))
+        prout(_("  YOU'LL NEED IT."))
     waitfor()
     clrscr()
     setwnd(message_window)
     newqad()
     if len(game.enemies) - (thing == game.quadrant) - (game.tholian != None):
     waitfor()
     clrscr()
     setwnd(message_window)
     newqad()
     if len(game.enemies) - (thing == game.quadrant) - (game.tholian != None):
-       game.shldup = True
-    if game.neutz:     # bad luck to start in a Romulan Neutral Zone
-       attack(torps_ok=False)
+        game.shldup = True
+    if game.neutz:        # bad luck to start in a Romulan Neutral Zone
+        attack(torps_ok=False)
 
 def choose():
     "Choose your game type."
     while True:
 
 def choose():
     "Choose your game type."
     while True:
-       game.tourn = game.length = 0
-       game.thawed = False
-       game.skill = SKILL_NONE
-       scanner.chew()
-#      if not scanner.inqueue: # Can start with command line options 
-       proutn(_("Would you like a regular, tournament, or saved game? "))
+        game.tourn = game.length = 0
+        game.thawed = False
+        game.skill = SKILL_NONE
+        scanner.chew()
+#        if not scanner.inqueue: # Can start with command line options 
+        proutn(_("Would you like a regular, tournament, or saved game? "))
         scanner.nexttok()
         if scanner.sees("tournament"):
         scanner.nexttok()
         if scanner.sees("tournament"):
-           while scanner.nexttok() == "IHEOL":
-               proutn(_("Type in tournament number-"))
-           if scanner.real == 0:
-               scanner.chew()
-               continue # We don't want a blank entry
-           game.tourn = int(round(scanner.real))
-           random.seed(scanner.real)
+            while scanner.nexttok() == "IHEOL":
+                proutn(_("Type in tournament number-"))
+            if scanner.real == 0:
+                scanner.chew()
+                continue # We don't want a blank entry
+            game.tourn = int(round(scanner.real))
+            random.seed(scanner.real)
             if logfp:
                 logfp.write("# random.seed(%d)\n" % scanner.real)
             if logfp:
                 logfp.write("# random.seed(%d)\n" % scanner.real)
-           break
+            break
         if scanner.sees("saved") or scanner.sees("frozen"):
         if scanner.sees("saved") or scanner.sees("frozen"):
-           if thaw():
-               continue
-           scanner.chew()
-           if game.passwd == None:
-               continue
-           if not game.alldone:
-               game.thawed = True # No plaque if not finished
-           report()
-           waitfor()
-           return True
+            if thaw():
+                continue
+            scanner.chew()
+            if game.passwd == None:
+                continue
+            if not game.alldone:
+                game.thawed = True # No plaque if not finished
+            report()
+            waitfor()
+            return True
         if scanner.sees("regular"):
         if scanner.sees("regular"):
-           break
-       proutn(_("What is \"%s\"? ") % scanner.token)
-       scanner.chew()
+            break
+        proutn(_("What is \"%s\"? ") % scanner.token)
+        scanner.chew()
     while game.length==0 or game.skill==SKILL_NONE:
     while game.length==0 or game.skill==SKILL_NONE:
-       if scanner.nexttok() == "IHALPHA":
+        if scanner.nexttok() == "IHALPHA":
             if scanner.sees("short"):
             if scanner.sees("short"):
-               game.length = 1
-           elif scanner.sees("medium"):
-               game.length = 2
-           elif scanner.sees("long"):
-               game.length = 4
-           elif scanner.sees("novice"):
-               game.skill = SKILL_NOVICE
-           elif scanner.sees("fair"):
-               game.skill = SKILL_FAIR
-           elif scanner.sees("good"):
-               game.skill = SKILL_GOOD
-           elif scanner.sees("expert"):
-               game.skill = SKILL_EXPERT
-           elif scanner.sees("emeritus"):
-               game.skill = SKILL_EMERITUS
-           else:
-               proutn(_("What is \""))
-               proutn(scanner.token)
-               prout("\"?")
-       else:
-           scanner.chew()
-           if game.length==0:
-               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? "))
+                game.length = 1
+            elif scanner.sees("medium"):
+                game.length = 2
+            elif scanner.sees("long"):
+                game.length = 4
+            elif scanner.sees("novice"):
+                game.skill = SKILL_NOVICE
+            elif scanner.sees("fair"):
+                game.skill = SKILL_FAIR
+            elif scanner.sees("good"):
+                game.skill = SKILL_GOOD
+            elif scanner.sees("expert"):
+                game.skill = SKILL_EXPERT
+            elif scanner.sees("emeritus"):
+                game.skill = SKILL_EMERITUS
+            else:
+                proutn(_("What is \""))
+                proutn(scanner.token)
+                prout("\"?")
+        else:
+            scanner.chew()
+            if game.length==0:
+                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? "))
     # Choose game options -- added by ESR for SST2K
     if scanner.nexttok() != "IHALPHA":
     # Choose game options -- added by ESR for SST2K
     if scanner.nexttok() != "IHALPHA":
-       scanner.chew()
-       proutn(_("Choose your game style (plain, almy, fancy or just press enter): "))
-       scanner.nexttok()
+        scanner.chew()
+        proutn(_("Choose your game style (plain, almy, fancy or just press enter): "))
+        scanner.nexttok()
     if scanner.sees("plain"):
     if scanner.sees("plain"):
-       # Approximates the UT FORTRAN version.
-       game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS)
-       game.options |= OPTION_PLAIN
+        # Approximates the UT FORTRAN version.
+        game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS)
+        game.options |= OPTION_PLAIN
     elif scanner.sees("almy"):
     elif scanner.sees("almy"):
-       # Approximates Tom Almy's version.
-       game.options &=~ (OPTION_THINGY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS)
-       game.options |= OPTION_ALMY
+        # Approximates Tom Almy's version.
+        game.options &=~ (OPTION_THINGY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS)
+        game.options |= OPTION_ALMY
     elif scanner.sees("fancy") or scanner.sees("\n"):
     elif scanner.sees("fancy") or scanner.sees("\n"):
-       pass
+        pass
     elif len(scanner.token):
         proutn(_("What is \"%s\"?") % scanner.token)
     game.options &=~ OPTION_COLOR
     setpassword()
     if game.passwd == "debug":
     elif len(scanner.token):
         proutn(_("What is \"%s\"?") % scanner.token)
     game.options &=~ OPTION_COLOR
     setpassword()
     if game.passwd == "debug":
-       game.idebug = True
-       prout("=== Debug mode enabled.")
+        game.idebug = True
+        prout("=== Debug mode enabled.")
     # Use parameters to generate initial values of things
     game.damfac = 0.5 * game.skill
     game.inbase = randrange(BASEMIN, BASEMAX+1)
     game.inplan = 0
     if game.options & OPTION_PLANETS:
     # Use parameters to generate initial values of things
     game.damfac = 0.5 * game.skill
     game.inbase = randrange(BASEMIN, BASEMAX+1)
     game.inplan = 0
     if game.options & OPTION_PLANETS:
-       game.inplan += randrange(MAXUNINHAB/2, MAXUNINHAB+1)
+        game.inplan += randrange(MAXUNINHAB/2, MAXUNINHAB+1)
     if game.options & OPTION_WORLDS:
     if game.options & OPTION_WORLDS:
-       game.inplan += int(NINHAB)
+        game.inplan += int(NINHAB)
     game.state.nromrem = game.inrom = randrange(2 *game.skill)
     game.state.nscrem = game.inscom = (game.skill > SKILL_FAIR)
     game.state.remtime = 7.0 * game.length
     game.state.nromrem = game.inrom = randrange(2 *game.skill)
     game.state.nscrem = game.inscom = (game.skill > SKILL_FAIR)
     game.state.remtime = 7.0 * game.length
@@ -5705,7 +5712,7 @@ def choose():
     game.state.remres = (game.inkling+4*game.incom)*game.intime
     game.inresor = game.state.remres
     if game.inkling > 50:
     game.state.remres = (game.inkling+4*game.incom)*game.intime
     game.inresor = game.state.remres
     if game.inkling > 50:
-        game.state.inbase += 1
+        game.inbase += 1
     return False
 
 def dropin(iquad=None):
     return False
 
 def dropin(iquad=None):
@@ -5722,11 +5729,11 @@ def newcnd():
     "Update our alert status."
     game.condition = "green"
     if game.energy < 1000.0:
     "Update our alert status."
     game.condition = "green"
     if game.energy < 1000.0:
-       game.condition = "yellow"
+        game.condition = "yellow"
     if game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons or game.state.galaxy[game.quadrant.i][game.quadrant.j].romulans:
     if game.state.galaxy[game.quadrant.i][game.quadrant.j].klingons or game.state.galaxy[game.quadrant.i][game.quadrant.j].romulans:
-       game.condition = "red"
+        game.condition = "red"
     if not game.alive:
     if not game.alive:
-       game.condition="dead"
+        game.condition="dead"
 
 def newkling():
     "Drop new Klingon into current quadrant."
 
 def newkling():
     "Drop new Klingon into current quadrant."
@@ -5734,7 +5741,7 @@ def newkling():
 
 def sortenemies():
     "Sort enemies by distance so 'nearest' is meaningful."
 
 def sortenemies():
     "Sort enemies by distance so 'nearest' is meaningful."
-    game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist))
+    game.enemies.sort(key=lambda x: x.kdist)
 
 def newqad():
     "Set up a new state of quadrant, for when we enter or re-enter it."
 
 def newqad():
     "Set up a new state of quadrant, for when we enter or re-enter it."
@@ -5745,60 +5752,60 @@ def newqad():
     # Create a blank quadrant
     game.quad = fill2d(QUADSIZE, lambda i, j: '.')
     if game.iscate:
     # Create a blank quadrant
     game.quad = fill2d(QUADSIZE, lambda i, j: '.')
     if game.iscate:
-       # Attempt to escape Super-commander, so tbeam back!
-       game.iscate = False
-       game.ientesc = True
+        # Attempt to escape Super-commander, so tbeam back!
+        game.iscate = False
+        game.ientesc = True
     q = game.state.galaxy[game.quadrant.i][game.quadrant.j]
     # cope with supernova
     if q.supernova:
     q = game.state.galaxy[game.quadrant.i][game.quadrant.j]
     # cope with supernova
     if q.supernova:
-       return
+        return
     game.klhere = q.klingons
     game.irhere = q.romulans
     # Position Starship
     game.quad[game.sector.i][game.sector.j] = game.ship
     game.enemies = []
     if q.klingons:
     game.klhere = q.klingons
     game.irhere = q.romulans
     # Position Starship
     game.quad[game.sector.i][game.sector.j] = game.ship
     game.enemies = []
     if q.klingons:
-       # Position ordinary Klingons
-       for i in range(game.klhere):
+        # Position ordinary Klingons
+        for i in range(game.klhere):
             newkling()
             newkling()
-       # If we need a commander, promote a Klingon
+        # If we need a commander, promote a Klingon
         for cmdr in game.state.kcmdr:
         for cmdr in game.state.kcmdr:
-           if cmdr == game.quadrant:
+            if cmdr == game.quadrant:
                 e = game.enemies[game.klhere-1]
                 game.quad[e.location.i][e.location.j] = 'C'
                 e.power = randreal(950,1350) + 50.0*game.skill
                 e = game.enemies[game.klhere-1]
                 game.quad[e.location.i][e.location.j] = 'C'
                 e.power = randreal(950,1350) + 50.0*game.skill
-               break   
-       # If we need a super-commander, promote a Klingon
-       if game.quadrant == game.state.kscmdr:
+                break        
+        # If we need a super-commander, promote a Klingon
+        if game.quadrant == game.state.kscmdr:
             e = game.enemies[0]
             e = game.enemies[0]
-           game.quad[e.location.i][e.location.j] = 'S'
-           e.power = randreal(1175.0,  1575.0) + 125.0*game.skill
-           game.iscate = (game.state.remkl > 1)
+            game.quad[e.location.i][e.location.j] = 'S'
+            e.power = randreal(1175.0,  1575.0) + 125.0*game.skill
+            game.iscate = (game.state.remkl > 1)
     # Put in Romulans if needed
     for i in range(q.romulans):
         Enemy('R', loc=dropin(), power=randreal(400.0,850.0)+50.0*game.skill)
     # If quadrant needs a starbase, put it in
     if q.starbase:
     # Put in Romulans if needed
     for i in range(q.romulans):
         Enemy('R', loc=dropin(), power=randreal(400.0,850.0)+50.0*game.skill)
     # If quadrant needs a starbase, put it in
     if q.starbase:
-       game.base = dropin('B')
+        game.base = dropin('B')
     # If quadrant needs a planet, put it in
     if q.planet:
     # If quadrant needs a planet, put it in
     if q.planet:
-       game.iplnet = q.planet
-       if not q.planet.inhabited:
-           game.plnet = dropin('P')
-       else:
-           game.plnet = dropin('@')
+        game.iplnet = q.planet
+        if not q.planet.inhabited:
+            game.plnet = dropin('P')
+        else:
+            game.plnet = dropin('@')
     # Check for condition
     newcnd()
     # Check for RNZ
     if game.irhere > 0 and game.klhere == 0:
     # Check for condition
     newcnd()
     # Check for RNZ
     if game.irhere > 0 and game.klhere == 0:
-       game.neutz = True
-       if not damaged(DRADIO):
-           skip(1)
-           prout(_("LT. Uhura- \"Captain, an urgent message."))
-           prout(_("  I'll put it on audio.\"  CLICK"))
-           skip(1)
-           prout(_("INTRUDER! YOU HAVE VIOLATED THE ROMULAN NEUTRAL ZONE."))
-           prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"))
+        game.neutz = True
+        if not damaged(DRADIO):
+            skip(1)
+            prout(_("LT. Uhura- \"Captain, an urgent message."))
+            prout(_("  I'll put it on audio.\"  CLICK"))
+            skip(1)
+            prout(_("INTRUDER! YOU HAVE VIOLATED THE ROMULAN NEUTRAL ZONE."))
+            prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"))
     # Put in THING if needed
     if thing == game.quadrant:
         Enemy(etype='?', loc=dropin(),
     # Put in THING if needed
     if thing == game.quadrant:
         Enemy(etype='?', loc=dropin(),
@@ -5809,55 +5816,55 @@ def newqad():
             prout(_("    Please examine your short-range scan.\""))
     # Decide if quadrant needs a Tholian; lighten up if skill is low 
     if game.options & OPTION_THOLIAN:
             prout(_("    Please examine your short-range scan.\""))
     # Decide if quadrant needs a Tholian; lighten up if skill is low 
     if game.options & OPTION_THOLIAN:
-       if (game.skill < SKILL_GOOD and withprob(0.02)) or \
-           (game.skill == SKILL_GOOD and withprob(0.05)) or \
+        if (game.skill < SKILL_GOOD and withprob(0.02)) or \
+            (game.skill == SKILL_GOOD and withprob(0.05)) or \
             (game.skill > SKILL_GOOD and withprob(0.08)):
             w = Coord()
             while True:
             (game.skill > SKILL_GOOD and withprob(0.08)):
             w = Coord()
             while True:
-               w.i = withprob(0.5) * (QUADSIZE-1)
-               w.j = withprob(0.5) * (QUADSIZE-1)
+                w.i = withprob(0.5) * (QUADSIZE-1)
+                w.j = withprob(0.5) * (QUADSIZE-1)
                 if game.quad[w.i][w.j] == '.':
                     break
             game.tholian = Enemy(etype='T', loc=w,
                                  power=randrange(100, 500) + 25.0*game.skill)
                 if game.quad[w.i][w.j] == '.':
                     break
             game.tholian = Enemy(etype='T', loc=w,
                                  power=randrange(100, 500) + 25.0*game.skill)
-           # Reserve unoccupied corners 
-           if game.quad[0][0]=='.':
-               game.quad[0][0] = 'X'
-           if game.quad[0][QUADSIZE-1]=='.':
-               game.quad[0][QUADSIZE-1] = 'X'
-           if game.quad[QUADSIZE-1][0]=='.':
-               game.quad[QUADSIZE-1][0] = 'X'
-           if game.quad[QUADSIZE-1][QUADSIZE-1]=='.':
-               game.quad[QUADSIZE-1][QUADSIZE-1] = 'X'
+            # Reserve unoccupied corners 
+            if game.quad[0][0]=='.':
+                game.quad[0][0] = 'X'
+            if game.quad[0][QUADSIZE-1]=='.':
+                game.quad[0][QUADSIZE-1] = 'X'
+            if game.quad[QUADSIZE-1][0]=='.':
+                game.quad[QUADSIZE-1][0] = 'X'
+            if game.quad[QUADSIZE-1][QUADSIZE-1]=='.':
+                game.quad[QUADSIZE-1][QUADSIZE-1] = 'X'
     sortenemies()
     # And finally the stars
     for i in range(q.stars):
     sortenemies()
     # And finally the stars
     for i in range(q.stars):
-       dropin('*')
+        dropin('*')
     # Put in a few black holes
     for i in range(1, 3+1):
     # Put in a few black holes
     for i in range(1, 3+1):
-       if withprob(0.5): 
-           dropin(' ')
+        if withprob(0.5): 
+            dropin(' ')
     # Take out X's in corners if Tholian present
     if game.tholian:
     # Take out X's in corners if Tholian present
     if game.tholian:
-       if game.quad[0][0]=='X':
-           game.quad[0][0] = '.'
-       if game.quad[0][QUADSIZE-1]=='X':
-           game.quad[0][QUADSIZE-1] = '.'
-       if game.quad[QUADSIZE-1][0]=='X':
-           game.quad[QUADSIZE-1][0] = '.'
-       if game.quad[QUADSIZE-1][QUADSIZE-1]=='X':
-           game.quad[QUADSIZE-1][QUADSIZE-1] = '.'
+        if game.quad[0][0]=='X':
+            game.quad[0][0] = '.'
+        if game.quad[0][QUADSIZE-1]=='X':
+            game.quad[0][QUADSIZE-1] = '.'
+        if game.quad[QUADSIZE-1][0]=='X':
+            game.quad[QUADSIZE-1][0] = '.'
+        if game.quad[QUADSIZE-1][QUADSIZE-1]=='X':
+            game.quad[QUADSIZE-1][QUADSIZE-1] = '.'
 
 def setpassword():
     "Set the self-destruct password."
     if game.options & OPTION_PLAIN:
 
 def setpassword():
     "Set the self-destruct password."
     if game.options & OPTION_PLAIN:
-       while True:
-           scanner.chew()
-           proutn(_("Please type in a secret password- "))
-           scanner.nexttok()
-           game.passwd = scanner.token
-           if game.passwd != None:
-               break
+        while True:
+            scanner.chew()
+            proutn(_("Please type in a secret password- "))
+            scanner.nexttok()
+            game.passwd = scanner.token
+            if game.passwd != None:
+                break
     else:
         game.passwd = ""
         game.passwd += chr(ord('a')+randrange(26))
     else:
         game.passwd = ""
         game.passwd += chr(ord('a')+randrange(26))
@@ -5867,46 +5874,46 @@ def setpassword():
 # Code from sst.c begins here
 
 commands = [
 # 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),
-    ("",               0),
+    ("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():
 ]
 
 def listCommands():
@@ -5914,7 +5921,7 @@ def listCommands():
     prout(_("LEGAL COMMANDS ARE:"))
     emitted = 0
     for (key, opt) in commands:
     prout(_("LEGAL COMMANDS ARE:"))
     emitted = 0
     for (key, opt) in commands:
-       if not opt or (opt & game.options):
+        if not opt or (opt & game.options):
             proutn("%-12s " % key)
             emitted += 1
             if emitted % 5 == 4:
             proutn("%-12s " % key)
             emitted += 1
             if emitted % 5 == 4:
@@ -5925,21 +5932,21 @@ def helpme():
     "Browse on-line help."
     key = scanner.nexttok()
     while True:
     "Browse on-line help."
     key = scanner.nexttok()
     while True:
-       if key == "IHEOL":
-           setwnd(prompt_window)
-           proutn(_("Help on what command? "))
-           key = scanner.nexttok()
-       setwnd(message_window)
-       if key == "IHEOL":
-           return
-       cmds = map(lambda x: x[0], commands)
-       if scanner.token.upper() in cmds or scanner.token.upper() == "ABBREV":
-           break
-       skip(1)
-       listCommands()
-       key = "IHEOL"
-       scanner.chew()
-       skip(1)
+        if key == "IHEOL":
+            setwnd(prompt_window)
+            proutn(_("Help on what command? "))
+            key = scanner.nexttok()
+        setwnd(message_window)
+        if key == "IHEOL":
+            return
+        cmds = [x[0] for x in commands]
+        if scanner.token.upper() in cmds or scanner.token.upper() == "ABBREV":
+            break
+        skip(1)
+        listCommands()
+        key = "IHEOL"
+        scanner.chew()
+        skip(1)
     cmd = scanner.token.upper()
     for directory in docpath:
         try:
     cmd = scanner.token.upper()
     for directory in docpath:
         try:
@@ -5957,181 +5964,183 @@ def helpme():
         return
     while True:
         linebuf = fp.readline()
         return
     while True:
         linebuf = fp.readline()
-       if linebuf == '':
-           prout(_("Spock- \"Captain, there is no information on that command.\""))
-           fp.close()
-           return
-       if linebuf[0] == '%' and linebuf[1] == '%' and linebuf[2] == ' ':
+        if linebuf == '':
+            prout(_("Spock- \"Captain, there is no information on that command.\""))
+            fp.close()
+            return
+        if linebuf[0] == '%' and linebuf[1] == '%' and linebuf[2] == ' ':
             linebuf = linebuf[3:].strip()
             if cmd.upper() == linebuf:
             linebuf = linebuf[3:].strip()
             if cmd.upper() == linebuf:
-               break
+                break
     skip(1)
     prout(_("Spock- \"Captain, I've found the following information:\""))
     skip(1)
     while True:
         linebuf = fp.readline()
         if "******" in linebuf:
     skip(1)
     prout(_("Spock- \"Captain, I've found the following information:\""))
     skip(1)
     while True:
         linebuf = fp.readline()
         if "******" in linebuf:
-           break
-       proutn(linebuf)
+            break
+        proutn(linebuf)
     fp.close()
 
 def makemoves():
     "Command-interpretation loop."
     fp.close()
 
 def makemoves():
     "Command-interpretation loop."
-    while True:        # command loop 
-       drawmaps(1)
-        while True:    # get a command 
-           hitme = False
-           game.optime = game.justin = False
-           scanner.chew()
-           setwnd(prompt_window)
-           clrscr()
-           proutn("COMMAND> ")
-           if scanner.nexttok() == "IHEOL":
-               if game.options & OPTION_CURSES:
-                   makechart()
-               continue
+    while True:         # command loop 
+        drawmaps(1)
+        while True:        # get a command 
+            hitme = False
+            game.optime = game.justin = False
+            scanner.chew()
+            setwnd(prompt_window)
+            clrscr()
+            proutn("COMMAND> ")
+            if scanner.nexttok() == "IHEOL":
+                if game.options & OPTION_CURSES:
+                    makechart()
+                continue
             elif scanner.token == "":
                 continue
             elif scanner.token == "":
                 continue
-           game.ididit = False
-           clrscr()
-           setwnd(message_window)
-           clrscr()
-           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 == "":
+            game.ididit = False
+            clrscr()
+            setwnd(message_window)
+            clrscr()
+            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
                 listCommands()
                 continue
+            elif opt and not (opt & game.options):
+                huh()
             else:
             else:
-               break
-       if cmd == "SRSCAN":             # srscan
-           srscan()
-       elif cmd == "STATUS":           # status
-           status()
-       elif cmd == "REQUEST":          # status request 
-           request()
-       elif cmd == "LRSCAN":           # long range scan
-           lrscan(silent=False)
-       elif cmd == "PHASERS":          # phasers
-           phasers()
-           if game.ididit:
-               hitme = True
-       elif cmd in ("TORPEDO", "PHOTONS"):     # photon torpedos
-           torps()
-           if game.ididit:
-               hitme = True
-       elif cmd == "MOVE":             # move under warp
-           warp(wcourse=None, involuntary=False)
-       elif cmd == "SHIELDS":          # shields
-           doshield(shraise=False)
-           if game.ididit:
-               hitme = True
-               game.shldchg = False
-       elif cmd == "DOCK":             # dock at starbase
-           dock(True)
-           if game.ididit:
-               attack(torps_ok=False)          
-       elif cmd == "DAMAGES":          # damage reports
-           damagereport()
-       elif cmd == "CHART":            # chart
-           makechart()
-       elif cmd == "IMPULSE":          # impulse
-           impulse()
-       elif cmd == "REST":             # rest
-           wait()
-           if game.ididit:
-               hitme = True
-       elif cmd == "WARP":             # warp
-           setwarp()
-       elif cmd == "SCORE":            # score
-           score()
-       elif cmd == "SENSORS":          # sensors
-           sensor()
-       elif cmd == "ORBIT":            # orbit
-           orbit()
-           if game.ididit:
-               hitme = True
-       elif cmd == "TRANSPORT":                # transport "beam"
-           beam()
-       elif cmd == "MINE":             # mine
-           mine()
-           if game.ididit:
-               hitme = True
-       elif cmd == "CRYSTALS":         # crystals
-           usecrystals()
-           if game.ididit:
-               hitme = True
-       elif cmd == "SHUTTLE":          # shuttle
-           shuttle()
-           if game.ididit:
-               hitme = True
-       elif cmd == "PLANETS":          # Planet list
-           survey()
-       elif cmd == "REPORT":           # Game Report 
-           report()
-       elif cmd == "COMPUTER":         # use COMPUTER!
-           eta()
-       elif cmd == "COMMANDS":
-           listCommands()
-       elif cmd == "EMEXIT":           # Emergency exit
-           clrscr()                    # Hide screen
-           freeze(True)                # forced save
-           raise SystemExit(1)         # And quick exit
-       elif cmd == "PROBE":
-           probe()                     # Launch probe
-           if game.ididit:
-               hitme = True
-       elif cmd == "ABANDON":          # Abandon Ship
-           abandon()
-       elif cmd == "DESTRUCT":         # Self Destruct
-           selfdestruct()
-       elif cmd == "SAVE":             # Save Game
-           freeze(False)
-           clrscr()
-           if game.skill > SKILL_GOOD:
-               prout(_("WARNING--Saved games produce no plaques!"))
-       elif cmd == "DEATHRAY":         # Try a desparation measure
-           deathray()
-           if game.ididit:
-               hitme = True
-       elif cmd == "DEBUGCMD":         # What do we want for debug???
-           debugme()
-       elif cmd == "MAYDAY":           # Call for help
-           mayday()
-           if game.ididit:
-               hitme = True
-       elif cmd == "QUIT":
-           game.alldone = True         # quit the game
-       elif cmd == "HELP":
-           helpme()                    # get help
-       while True:
-           if game.alldone:
-               break           # Game has ended
-           if game.optime != 0.0:
-               events()
-               if game.alldone:
-                   break       # Events did us in
-           if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
-               atover(False)
-               continue
-           if hitme and not game.justin:
-               attack(torps_ok=True)
-               if game.alldone:
-                   break
-               if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
-                   atover(False)
-                   hitme = True
-                   continue
-           break
-       if game.alldone:
-           break
+                break
+        if cmd == "SRSCAN":                # srscan
+            srscan()
+        elif cmd == "STATUS":                # status
+            status()
+        elif cmd == "REQUEST":                # status request 
+            request()
+        elif cmd == "LRSCAN":                # long range scan
+            lrscan(silent=False)
+        elif cmd == "PHASERS":                # phasers
+            phasers()
+            if game.ididit:
+                hitme = True
+        elif cmd in ("TORPEDO", "PHOTONS"):        # photon torpedos
+            torps()
+            if game.ididit:
+                hitme = True
+        elif cmd == "MOVE":                # move under warp
+            warp(wcourse=None, involuntary=False)
+        elif cmd == "SHIELDS":                # shields
+            doshield(shraise=False)
+            if game.ididit:
+                hitme = True
+                game.shldchg = False
+        elif cmd == "DOCK":                # dock at starbase
+            dock(True)
+            if game.ididit:
+                attack(torps_ok=False)                
+        elif cmd == "DAMAGES":                # damage reports
+            damagereport()
+        elif cmd == "CHART":                # chart
+            makechart()
+        elif cmd == "IMPULSE":                # impulse
+            impulse()
+        elif cmd == "REST":                # rest
+            wait()
+            if game.ididit:
+                hitme = True
+        elif cmd == "WARP":                # warp
+            setwarp()
+        elif cmd == "SCORE":                # score
+            score()
+        elif cmd == "SENSORS":                # sensors
+            sensor()
+        elif cmd == "ORBIT":                # orbit
+            orbit()
+            if game.ididit:
+                hitme = True
+        elif cmd == "TRANSPORT":                # transport "beam"
+            beam()
+        elif cmd == "MINE":                # mine
+            mine()
+            if game.ididit:
+                hitme = True
+        elif cmd == "CRYSTALS":                # crystals
+            usecrystals()
+            if game.ididit:
+                hitme = True
+        elif cmd == "SHUTTLE":                # shuttle
+            shuttle()
+            if game.ididit:
+                hitme = True
+        elif cmd == "PLANETS":                # Planet list
+            survey()
+        elif cmd == "REPORT":                # Game Report 
+            report()
+        elif cmd == "COMPUTER":                # use COMPUTER!
+            eta()
+        elif cmd == "COMMANDS":
+            listCommands()
+        elif cmd == "EMEXIT":                # Emergency exit
+            clrscr()                        # Hide screen
+            freeze(True)                # forced save
+            raise SystemExit(1)                # And quick exit
+        elif cmd == "PROBE":
+            probe()                        # Launch probe
+            if game.ididit:
+                hitme = True
+        elif cmd == "ABANDON":                # Abandon Ship
+            abandon()
+        elif cmd == "DESTRUCT":                # Self Destruct
+            selfdestruct()
+        elif cmd == "SAVE":                # Save Game
+            freeze(False)
+            clrscr()
+            if game.skill > SKILL_GOOD:
+                prout(_("WARNING--Saved games produce no plaques!"))
+        elif cmd == "DEATHRAY":                # Try a desparation measure
+            deathray()
+            if game.ididit:
+                hitme = True
+        elif cmd == "DEBUGCMD":                # What do we want for debug???
+            debugme()
+        elif cmd == "MAYDAY":                # Call for help
+            mayday()
+            if game.ididit:
+                hitme = True
+        elif cmd == "QUIT":
+            game.alldone = True                # quit the game
+        elif cmd == "HELP":
+            helpme()                        # get help
+        while True:
+            if game.alldone:
+                break                # Game has ended
+            if game.optime != 0.0:
+                events()
+                if game.alldone:
+                    break        # Events did us in
+            if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
+                atover(False)
+                continue
+            if hitme and not game.justin:
+                attack(torps_ok=True)
+                if game.alldone:
+                    break
+                if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
+                    atover(False)
+                    hitme = True
+                    continue
+            break
+        if game.alldone:
+            break
     if game.idebug:
     if game.idebug:
-       prout("=== Ending")
+        prout("=== Ending")
 
 def cramen(type):
     "Emit the name of an enemy or feature." 
 
 def cramen(type):
     "Emit the name of an enemy or feature." 
@@ -6154,12 +6163,12 @@ def crmena(stars, enemy, loctype, w):
     "Emit the name of an enemy and his location."
     buf = ""
     if stars:
     "Emit the name of an enemy and his location."
     buf = ""
     if stars:
-       buf += "***"
+        buf += "***"
     buf += cramen(enemy) + _(" at ")
     if loctype == "quadrant":
     buf += cramen(enemy) + _(" at ")
     if loctype == "quadrant":
-       buf += _("Quadrant ")
+        buf += _("Quadrant ")
     elif loctype == "sector":
     elif loctype == "sector":
-       buf += _("Sector ")
+        buf += _("Sector ")
     return buf + repr(w)
 
 def crmshp():
     return buf + repr(w)
 
 def crmshp():
@@ -6239,15 +6248,15 @@ class sstscanner:
     def getcoord(self):
         s = Coord()
         scanner.nexttok()
     def getcoord(self):
         s = Coord()
         scanner.nexttok()
-       if scanner.type != "IHREAL":
-           huh()
-           return None
-       s.i = scanner.int()-1
+        if scanner.type != "IHREAL":
+            huh()
+            return None
+        s.i = scanner.int()-1
         scanner.nexttok()
         scanner.nexttok()
-       if scanner.type != "IHREAL":
-           huh()
-           return None
-       s.j = scanner.int()-1
+        if scanner.type != "IHREAL":
+            huh()
+            return None
+        s.j = scanner.int()-1
         return s
     def __repr__(self):
         return "<sstcanner: token=%s, type=%s, queue=%s>" % (scanner.token, scanner.type, scanner.inqueue)
         return s
     def __repr__(self):
         return "<sstcanner: token=%s, type=%s, queue=%s>" % (scanner.token, scanner.type, scanner.inqueue)
@@ -6256,13 +6265,13 @@ def ja():
     "Yes-or-no confirmation."
     scanner.chew()
     while True:
     "Yes-or-no confirmation."
     scanner.chew()
     while True:
-       scanner.nexttok()
-       if scanner.token == 'y':
-           return True
-       if scanner.token == 'n':
-           return False
-       scanner.chew()
-       proutn(_("Please answer with \"y\" or \"n\": "))
+        scanner.nexttok()
+        if scanner.token == 'y':
+            return True
+        if scanner.token == 'n':
+            return False
+        scanner.chew()
+        proutn(_("Please answer with \"y\" or \"n\": "))
 
 def huh():
     "Complain about unparseable input."
 
 def huh():
     "Complain about unparseable input."
@@ -6274,35 +6283,35 @@ def debugme():
     "Access to the internals for debugging."
     proutn("Reset levels? ")
     if ja():
     "Access to the internals for debugging."
     proutn("Reset levels? ")
     if ja():
-       if game.energy < game.inenrg:
-           game.energy = game.inenrg
-       game.shield = game.inshld
-       game.torps = game.intorps
-       game.lsupres = game.inlsr
+        if game.energy < game.inenrg:
+            game.energy = game.inenrg
+        game.shield = game.inshld
+        game.torps = game.intorps
+        game.lsupres = game.inlsr
     proutn("Reset damage? ")
     if ja():
     proutn("Reset damage? ")
     if ja():
-       for i in range(NDEVICES): 
-           if game.damage[i] > 0.0: 
-               game.damage[i] = 0.0
+        for i in range(NDEVICES): 
+            if game.damage[i] > 0.0: 
+                game.damage[i] = 0.0
     proutn("Toggle debug flag? ")
     if ja():
     proutn("Toggle debug flag? ")
     if ja():
-       game.idebug = not game.idebug
-       if game.idebug:
-           prout("Debug output ON")        
-       else:
-           prout("Debug output OFF")
+        game.idebug = not game.idebug
+        if game.idebug:
+            prout("Debug output ON")            
+        else:
+            prout("Debug output OFF")
     proutn("Cause selective damage? ")
     if ja():
     proutn("Cause selective damage? ")
     if ja():
-       for i in range(NDEVICES):
-           proutn("Kill %s?" % device[i])
-           scanner.chew()
-           key = scanner.nexttok()
+        for i in range(NDEVICES):
+            proutn("Kill %s?" % device[i])
+            scanner.chew()
+            key = scanner.nexttok()
             if key == "IHALPHA" and scanner.sees("y"):
             if key == "IHALPHA" and scanner.sees("y"):
-               game.damage[i] = 10.0
+                game.damage[i] = 10.0
     proutn("Examine/change events? ")
     if ja():
     proutn("Examine/change events? ")
     if ja():
-       ev = Event()
-       w = Coord()
+        ev = Event()
+        w = Coord()
         legends = {
             FSNOVA:  "Supernova       ",
             FTBEAM:  "T Beam          ",
         legends = {
             FSNOVA:  "Supernova       ",
             FTBEAM:  "T Beam          ",
@@ -6316,46 +6325,46 @@ def debugme():
             FENSLV:  "Enslavement     ",
             FREPRO:  "Klingon Build   ",
         }
             FENSLV:  "Enslavement     ",
             FREPRO:  "Klingon Build   ",
         }
-       for i in range(1, NEVENTS):
+        for i in range(1, NEVENTS):
             proutn(legends[i])
             proutn(legends[i])
-           if is_scheduled(i):
-               proutn("%.2f" % (scheduled(i)-game.state.date))
-               if i == FENSLV or i == FREPRO:
-                   ev = findevent(i)
-                   proutn(" in %s" % ev.quadrant)
-           else:
-               proutn("never")
-           proutn("? ")
-           scanner.chew()
-           key = scanner.nexttok()
-           if key == 'n':
-               unschedule(i)
-               scanner.chew()
-           elif key == "IHREAL":
-               ev = schedule(i, scanner.real)
-               if i == FENSLV or i == FREPRO:
-                   scanner.chew()
-                   proutn("In quadrant- ")
-                   key = scanner.nexttok()
-                   # "IHEOL" says to leave coordinates as they are 
-                   if key != "IHEOL":
-                       if key != "IHREAL":
-                           prout("Event %d canceled, no x coordinate." % (i))
-                           unschedule(i)
-                           continue
-                       w.i = int(round(scanner.real))
-                       key = scanner.nexttok()
-                       if key != "IHREAL":
-                           prout("Event %d canceled, no y coordinate." % (i))
-                           unschedule(i)
-                           continue
-                       w.j = int(round(scanner.real))
-                       ev.quadrant = w
-       scanner.chew()
+            if is_scheduled(i):
+                proutn("%.2f" % (scheduled(i)-game.state.date))
+                if i == FENSLV or i == FREPRO:
+                    ev = findevent(i)
+                    proutn(" in %s" % ev.quadrant)
+            else:
+                proutn("never")
+            proutn("? ")
+            scanner.chew()
+            key = scanner.nexttok()
+            if key == 'n':
+                unschedule(i)
+                scanner.chew()
+            elif key == "IHREAL":
+                ev = schedule(i, scanner.real)
+                if i == FENSLV or i == FREPRO:
+                    scanner.chew()
+                    proutn("In quadrant- ")
+                    key = scanner.nexttok()
+                    # "IHEOL" says to leave coordinates as they are 
+                    if key != "IHEOL":
+                        if key != "IHREAL":
+                            prout("Event %d canceled, no x coordinate." % (i))
+                            unschedule(i)
+                            continue
+                        w.i = int(round(scanner.real))
+                        key = scanner.nexttok()
+                        if key != "IHREAL":
+                            prout("Event %d canceled, no y coordinate." % (i))
+                            unschedule(i)
+                            continue
+                        w.j = int(round(scanner.real))
+                        ev.quadrant = w
+        scanner.chew()
     proutn("Induce supernova here? ")
     if ja():
     proutn("Induce supernova here? ")
     if ja():
-       game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova = True
-       atover(True)
+        game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova = True
+        atover(True)
 
 if __name__ == '__main__':
     import getopt, socket
 
 if __name__ == '__main__':
     import getopt, socket
@@ -6423,7 +6432,8 @@ if __name__ == '__main__':
                     (getpass.getuser(),socket.gethostname(),time.ctime()))
         random.seed(seed)
         scanner = sstscanner()
                     (getpass.getuser(),socket.gethostname(),time.ctime()))
         random.seed(seed)
         scanner = sstscanner()
-        map(scanner.append, arguments)
+        for arg in arguments:
+            scanner.append(arg)
         try:
             iostart()
             while True: # Play a game 
         try:
             iostart()
             while True: # Play a game