projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix array index overrun
[super-star-trek.git]
/
sst.py
diff --git
a/sst.py
b/sst.py
old mode 100644
(file)
new mode 100755
(executable)
index
0ceee43
..
4b3fdfa
--- a/
sst.py
+++ b/
sst.py
@@
-13,6
+13,8
@@
on how to modify (and how not to modify!) this code.
"""
import os, sys, math, curses, time, readline, cPickle, random, copy, gettext, getpass
"""
import os, sys, math, curses, time, readline, cPickle, random, copy, gettext, getpass
+version="2.0"
+
docpath = (".", "../doc", "/usr/share/doc/sst")
def _(str): return gettext.gettext(str)
docpath = (".", "../doc", "/usr/share/doc/sst")
def _(str): return gettext.gettext(str)
@@
-50,10
+52,13
@@
LIGHTMAGENTA = 13
YELLOW = 14
WHITE = 15
YELLOW = 14
WHITE = 15
-class TrekError:
+class TrekError
(Exception)
:
pass
pass
-class coord:
+class JumpOut(Exception):
+ pass
+
+class Coord:
def __init__(self, x=None, y=None):
self.i = x
self.j = y
def __init__(self, x=None, y=None):
self.i = x
self.j = y
@@
-70,28
+75,28
@@
class coord:
def __ne__(self, other):
return other == None or self.i != other.i or self.j != other.j
def __add__(self, other):
def __ne__(self, other):
return other == None or self.i != other.i or self.j != other.j
def __add__(self, other):
- return
c
oord(self.i+other.i, self.j+other.j)
+ return
C
oord(self.i+other.i, self.j+other.j)
def __sub__(self, other):
def __sub__(self, other):
- return
c
oord(self.i-other.i, self.j-other.j)
+ return
C
oord(self.i-other.i, self.j-other.j)
def __mul__(self, other):
def __mul__(self, other):
- return
c
oord(self.i*other, self.j*other)
+ return
C
oord(self.i*other, self.j*other)
def __rmul__(self, other):
def __rmul__(self, other):
- return
c
oord(self.i*other, self.j*other)
+ return
C
oord(self.i*other, self.j*other)
def __div__(self, other):
def __div__(self, other):
- return
c
oord(self.i/other, self.j/other)
+ return
C
oord(self.i/other, self.j/other)
def __mod__(self, other):
def __mod__(self, other):
- return
c
oord(self.i % other, self.j % other)
+ return
C
oord(self.i % other, self.j % other)
def __rdiv__(self, other):
def __rdiv__(self, other):
- return
c
oord(self.i/other, self.j/other)
+ return
C
oord(self.i/other, self.j/other)
def roundtogrid(self):
def roundtogrid(self):
- return
c
oord(int(round(self.i)), int(round(self.j)))
+ return
C
oord(int(round(self.i)), int(round(self.j)))
def distance(self, other=None):
def distance(self, other=None):
- if not other: other =
c
oord(0, 0)
+ if not other: other =
C
oord(0, 0)
return math.sqrt((self.i - other.i)**2 + (self.j - other.j)**2)
def bearing(self):
return 1.90985*math.atan2(self.j, self.i)
def sgn(self):
return math.sqrt((self.i - other.i)**2 + (self.j - other.j)**2)
def bearing(self):
return 1.90985*math.atan2(self.j, self.i)
def sgn(self):
- s =
c
oord()
+ s =
C
oord()
if self.i == 0:
s.i = 0
else:
if self.i == 0:
s.i = 0
else:
@@
-107,7
+112,7
@@
class coord:
def sector(self):
return self.roundtogrid() % QUADSIZE
def scatter(self):
def sector(self):
return self.roundtogrid() % QUADSIZE
def scatter(self):
- s =
c
oord()
+ s =
C
oord()
s.i = self.i + randrange(-1, 2)
s.j = self.j + randrange(-1, 2)
return s
s.i = self.i + randrange(-1, 2)
s.j = self.j + randrange(-1, 2)
return s
@@
-117,10
+122,10
@@
class coord:
return "%s - %s" % (self.i+1, self.j+1)
__repr__ = __str__
return "%s - %s" % (self.i+1, self.j+1)
__repr__ = __str__
-class
p
lanet:
+class
P
lanet:
def __init__(self):
self.name = None # string-valued if inhabited
def __init__(self):
self.name = None # string-valued if inhabited
- self.quadrant =
c
oord() # quadrant located
+ self.quadrant =
C
oord() # quadrant located
self.pclass = None # could be ""M", "N", "O", or "destroyed"
self.crystals = "absent"# could be "mined", "present", "absent"
self.known = "unknown" # could be "unknown", "known", "shuttle_down"
self.pclass = None # could be ""M", "N", "O", or "destroyed"
self.crystals = "absent"# could be "mined", "present", "absent"
self.known = "unknown" # could be "unknown", "known", "shuttle_down"
@@
-128,7
+133,7
@@
class planet:
def __str__(self):
return self.name
def __str__(self):
return self.name
-class
q
uadrant:
+class
Q
uadrant:
def __init__(self):
self.stars = 0
self.planet = None
def __init__(self):
self.stars = 0
self.planet = None
@@
-139,7
+144,7
@@
class quadrant:
self.charted = False
self.status = "secure" # Could be "secure", "distressed", "enslaved"
self.charted = False
self.status = "secure" # Could be "secure", "distressed", "enslaved"
-class
p
age:
+class
P
age:
def __init__(self):
self.stars = None
self.starbase = None
def __init__(self):
self.stars = None
self.starbase = None
@@
-154,7
+159,7
@@
def fill2d(size, fillfun):
lst[i].append(fillfun(i, j))
return lst
lst[i].append(fillfun(i, j))
return lst
-class
s
napshot:
+class
S
napshot:
def __init__(self):
self.snap = False # snapshot taken
self.crew = 0 # crew complement
def __init__(self):
self.snap = False # snapshot taken
self.crew = 0 # crew complement
@@
-171,13
+176,13
@@
class snapshot:
self.remtime = 0 # remaining time
self.baseq = [] # Base quadrant coordinates
self.kcmdr = [] # Commander quadrant coordinates
self.remtime = 0 # remaining time
self.baseq = [] # Base quadrant coordinates
self.kcmdr = [] # Commander quadrant coordinates
- self.kscmdr =
c
oord() # Supercommander quadrant coordinates
+ self.kscmdr =
C
oord() # Supercommander quadrant coordinates
# the galaxy
# the galaxy
- self.galaxy = fill2d(GALSIZE, lambda i
, j: q
uadrant())
+ self.galaxy = fill2d(GALSIZE, lambda i
_unused, j_unused: Q
uadrant())
# the starchart
# the starchart
- self.chart = fill2d(GALSIZE, lambda i
, j: p
age())
+ self.chart = fill2d(GALSIZE, lambda i
_unused, j_unused: P
age())
-class
e
vent:
+class
E
vent:
def __init__(self):
self.date = None # A real number
self.quadrant = None # A coord structure
def __init__(self):
self.date = None # A real number
self.quadrant = None # A coord structure
@@
-251,10
+256,10
@@
NEVENTS = 12
# when we implement stateful events
def findevent(evtype): return game.future[evtype]
# when we implement stateful events
def findevent(evtype): return game.future[evtype]
-class
e
nemy:
+class
E
nemy:
def __init__(self, type=None, loc=None, power=None):
self.type = type
def __init__(self, type=None, loc=None, power=None):
self.type = type
- self.location =
c
oord()
+ self.location =
C
oord()
if loc:
self.move(loc)
self.power = power # enemy energy level
if loc:
self.move(loc)
self.power = power # enemy energy level
@@
-272,23
+277,25
@@
class enemy:
game.quad[self.location.i][self.location.j] = self.type
self.kdist = self.kavgd = (game.sector - loc).distance()
else:
game.quad[self.location.i][self.location.j] = self.type
self.kdist = self.kavgd = (game.sector - loc).distance()
else:
- self.location =
c
oord()
+ self.location =
C
oord()
self.kdist = self.kavgd = None
game.enemies.remove(self)
return motion
def __repr__(self):
return "<%s,%s.%f>" % (self.type, self.location, self.power) # For debugging
self.kdist = self.kavgd = None
game.enemies.remove(self)
return motion
def __repr__(self):
return "<%s,%s.%f>" % (self.type, self.location, self.power) # For debugging
-class
g
amestate:
+class
G
amestate:
def __init__(self):
self.options = None # Game options
def __init__(self):
self.options = None # Game options
- self.state =
s
napshot() # A snapshot structure
- self.snapsht =
s
napshot() # Last snapshot taken for time-travel purposes
+ self.state =
S
napshot() # A snapshot structure
+ self.snapsht =
S
napshot() # Last snapshot taken for time-travel purposes
self.quad = None # contents of our quadrant
self.damage = [0.0] * NDEVICES # damage encountered
self.quad = None # contents of our quadrant
self.damage = [0.0] * NDEVICES # damage encountered
- self.future = [] # future events
- for i in range(NEVENTS):
- self.future.append(event())
+ self.future = [] # future events
+ i = NEVENTS
+ while i > 0:
+ i -= 1
+ self.future.append(Event())
self.passwd = None; # Self Destruct password
self.enemies = []
self.quadrant = None # where we are in the large
self.passwd = None; # Self Destruct password
self.enemies = []
self.quadrant = None # where we are in the large
@@
-356,6
+363,9
@@
class gamestate:
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.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?
def recompute(self):
# Stas thinks this should be (C expression):
# game.state.remkl + len(game.state.kcmdr) > 0 ?
def recompute(self):
# Stas thinks this should be (C expression):
# game.state.remkl + len(game.state.kcmdr) > 0 ?
@@
-412,7
+422,7
@@
def welcoming(iq):
def tryexit(enemy, look, irun):
"A bad guy attempts to bug out."
def tryexit(enemy, look, irun):
"A bad guy attempts to bug out."
- iq =
c
oord()
+ iq =
C
oord()
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):
@@
-435,7
+445,7
@@
def tryexit(enemy, look, irun):
if not damaged(DSRSENS) or not damaged(DLRSENS) or \
game.condition == "docked":
prout(crmena(True, enemy.type, "sector", enemy.location) + \
if not damaged(DSRSENS) or not damaged(DLRSENS) or \
game.condition == "docked":
prout(crmena(True, enemy.type, "sector", enemy.location) + \
- (_(" escapes to Quadrant %s (and regains strength).") % q))
+ (_(" escapes to Quadrant %s (and regains strength).") %
i
q))
# handle local matters related to escape
enemy.move(None)
game.klhere -= 1
# handle local matters related to escape
enemy.move(None)
game.klhere -= 1
@@
-454,7
+464,7
@@
def tryexit(enemy, look, irun):
else:
for cmdr in game.state.kcmdr:
if cmdr == game.quadrant:
else:
for cmdr in game.state.kcmdr:
if cmdr == game.quadrant:
- game.state.kcmdr
[n] = iq
+ game.state.kcmdr
.append(iq)
break
return True; # success
break
return True; # success
@@
-498,7
+508,7
@@
def tryexit(enemy, look, irun):
def movebaddy(enemy):
"Tactical movement for the bad guys."
def movebaddy(enemy):
"Tactical movement for the bad guys."
-
next = coord(); look = c
oord()
+
goto = Coord(); look = C
oord()
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:
@@
-537,7
+547,7
@@
def movebaddy(enemy):
motion = (1.0 - randreal())**2 * dist1 + 1.0
if game.condition=="docked" and (game.options & OPTION_BASE): # protected by base -- back off !
motion -= game.skill*(2.0-randreal()**2)
motion = (1.0 - randreal())**2 * dist1 + 1.0
if game.condition=="docked" and (game.options & OPTION_BASE): # protected by base -- back off !
motion -= game.skill*(2.0-randreal()**2)
- if idebug:
+ if
game.
idebug:
proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
# don't move if no motion
if motion==0:
proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
# don't move if no motion
if motion==0:
@@
-556,7
+566,7
@@
def movebaddy(enemy):
nsteps = QUADSIZE; # This shouldn't be necessary
if nsteps < 1:
nsteps = 1; # This shouldn't be necessary
nsteps = QUADSIZE; # This shouldn't be necessary
if nsteps < 1:
nsteps = 1; # This shouldn't be necessary
- if idebug:
+ if
game.
idebug:
proutn("NSTEPS = %d:" % nsteps)
# Compute preferred values of delta X and Y
m = game.sector - enemy.location
proutn("NSTEPS = %d:" % nsteps)
# Compute preferred values of delta X and Y
m = game.sector - enemy.location
@@
-565,13
+575,13
@@
def movebaddy(enemy):
if 2.0 * abs(m.j) < abs(game.sector.i-enemy.location.i):
m.j = 0
m = (motion * m).sgn()
if 2.0 * abs(m.j) < abs(game.sector.i-enemy.location.i):
m.j = 0
m = (motion * m).sgn()
-
next
= enemy.location
+
goto
= enemy.location
# main move loop
for ll in range(nsteps):
# main move loop
for ll in range(nsteps):
- if idebug:
+ if
game.
idebug:
proutn(" %d" % (ll+1))
# Check if preferred position available
proutn(" %d" % (ll+1))
# Check if preferred position available
- look =
next
+ m
+ look =
goto
+ m
if m.i < 0:
krawli = 1
else:
if m.i < 0:
krawli = 1
else:
@@
-589,14
+599,14
@@
def movebaddy(enemy):
return
if krawli == m.i or m.j == 0:
break
return
if krawli == m.i or m.j == 0:
break
- look.i =
next
.i + krawli
+ look.i =
goto
.i + krawli
krawli = -krawli
elif look.j < 0 or look.j >= QUADSIZE:
if motion < 0 and tryexit(enemy, look, irun):
return
if krawlj == m.j or m.i == 0:
break
krawli = -krawli
elif look.j < 0 or look.j >= QUADSIZE:
if motion < 0 and tryexit(enemy, look, irun):
return
if krawlj == m.j or m.i == 0:
break
- look.j =
next
.j + krawlj
+ 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
krawlj = -krawlj
elif (game.options & OPTION_RAMMING) and game.quad[look.i][look.j] != '.':
# See if enemy should ram ship
@@
-605,35
+615,35
@@
def movebaddy(enemy):
collision(rammed=True, enemy=enemy)
return
if krawli != m.i and m.j != 0:
collision(rammed=True, enemy=enemy)
return
if krawli != m.i and m.j != 0:
- look.i =
next
.i + krawli
+ look.i =
goto
.i + krawli
krawli = -krawli
elif krawlj != m.j and m.i != 0:
krawli = -krawli
elif krawlj != m.j and m.i != 0:
- look.j =
next
.j + krawlj
+ look.j =
goto
.j + krawlj
krawlj = -krawlj
else:
break; # we have failed
else:
success = True
if success:
krawlj = -krawlj
else:
break; # we have failed
else:
success = True
if success:
-
next
= look
- if idebug:
- proutn(`
next
`)
+
goto
= look
+ if
game.
idebug:
+ proutn(`
goto
`)
else:
break; # done early
else:
break; # done early
- if idebug:
+ if
game.
idebug:
skip(1)
skip(1)
- if enemy.move(
next
):
+ if enemy.move(
goto
):
if not damaged(DSRSENS) or game.condition == "docked":
proutn(_("*** %s from Sector %s") % (cramen(enemy.type), enemy.location))
if enemy.kdist < dist1:
proutn(_(" advances to "))
else:
proutn(_(" retreats to "))
if not damaged(DSRSENS) or game.condition == "docked":
proutn(_("*** %s from Sector %s") % (cramen(enemy.type), enemy.location))
if enemy.kdist < dist1:
proutn(_(" advances to "))
else:
proutn(_(" retreats to "))
- prout("Sector %s." %
next
)
+ prout("Sector %s." %
goto
)
def moveklings():
"Sequence Klingon tactical movement."
def moveklings():
"Sequence Klingon tactical movement."
- if idebug:
+ if
game.
idebug:
prout("== MOVCOM")
# Figure out which Klingon is the commander (or Supercommander)
# and do move
prout("== MOVCOM")
# Figure out which Klingon is the commander (or Supercommander)
# and do move
@@
-653,7
+663,7
@@
def moveklings():
for enemy in game.enemies:
if enemy.type in ('K', 'R'):
movebaddy(enemy)
for enemy in game.enemies:
if enemy.type in ('K', 'R'):
movebaddy(enemy)
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
def movescom(iq, avoid):
"Commander movement helper."
def movescom(iq, avoid):
"Commander movement helper."
@@
-679,7
+689,7
@@
def movescom(iq, avoid):
game.klhere -= 1
if game.condition != "docked":
newcnd()
game.klhere -= 1
if game.condition != "docked":
newcnd()
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
# check for a helpful planet
for i in range(game.inplan):
if game.state.planets[i].quadrant == game.state.kscmdr and \
# check for a helpful planet
for i in range(game.inplan):
if game.state.planets[i].quadrant == game.state.kscmdr and \
@@
-697,9
+707,9
@@
def movescom(iq, avoid):
def supercommander():
"Move the Super Commander."
def supercommander():
"Move the Super Commander."
- iq =
coord(); sc = coord(); ibq = coord(); idelta = c
oord()
+ iq =
Coord(); sc = Coord(); ibq = Coord(); idelta = C
oord()
basetbl = []
basetbl = []
- if idebug:
+ if
game.
idebug:
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 \
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 \
@@
-718,10
+728,10
@@
def supercommander():
unschedule(FSCMOVE)
return
sc = game.state.kscmdr
unschedule(FSCMOVE)
return
sc = game.state.kscmdr
- for
base in game.state.baseq
:
+ for
(i, base) in enumerate(game.state.baseq)
:
basetbl.append((i, (base - sc).distance()))
if game.state.baseq > 1:
basetbl.append((i, (base - sc).distance()))
if game.state.baseq > 1:
- basetbl.sort(lambda x, y: cmp(x[1]
.
y[1]))
+ basetbl.sort(lambda x, y: cmp(x[1]
,
y[1]))
# look for nearest base without a commander, no Enterprise, and
# without too many Klingons, and not already under attack.
ifindit = iwhichb = 0
# look for nearest base without a commander, no Enterprise, and
# without too many Klingons, and not already under attack.
ifindit = iwhichb = 0
@@
-798,13
+808,13
@@
def supercommander():
if not game.resting:
return
prout(_("Mr. Spock- \"Captain, shall we cancel the rest period?\""))
if not game.resting:
return
prout(_("Mr. Spock- \"Captain, shall we cancel the rest period?\""))
- if
ja() == False
:
+ if
not ja()
:
return
game.resting = False
game.optime = 0.0; # actually finished
return
# Check for intelligence report
return
game.resting = False
game.optime = 0.0; # actually finished
return
# Check for intelligence report
- if not idebug and \
+ 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):
(withprob(0.8) or \
(not communicating()) or \
not game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].charted):
@@
-818,32
+828,32
@@
def movetholian():
"Move the Tholian."
if not game.tholian or game.justin:
return
"Move the Tholian."
if not game.tholian or game.justin:
return
-
id = c
oord()
+
tid = C
oord()
if game.tholian.location.i == 0 and game.tholian.location.j == 0:
if game.tholian.location.i == 0 and game.tholian.location.j == 0:
-
id.i = 0;
id.j = QUADSIZE-1
+
tid.i = 0; t
id.j = QUADSIZE-1
elif game.tholian.location.i == 0 and game.tholian.location.j == QUADSIZE-1:
elif game.tholian.location.i == 0 and game.tholian.location.j == QUADSIZE-1:
-
id.i = QUADSIZE-1;
id.j = QUADSIZE-1
+
tid.i = QUADSIZE-1; t
id.j = QUADSIZE-1
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == QUADSIZE-1:
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == QUADSIZE-1:
-
id.i = QUADSIZE-1;
id.j = 0
+
tid.i = QUADSIZE-1; t
id.j = 0
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
-
id.i = 0;
id.j = 0
+
tid.i = 0; t
id.j = 0
else:
# something is wrong!
game.tholian.move(None)
prout("***Internal error: Tholian in a bad spot.")
return
# do nothing if we are blocked
else:
# something is wrong!
game.tholian.move(None)
prout("***Internal error: Tholian in a bad spot.")
return
# do nothing if we are blocked
- if game.quad[
id.i][
id.j] not in ('.', '#'):
+ if game.quad[
tid.i][t
id.j] not in ('.', '#'):
return
here = copy.copy(game.tholian.location)
return
here = copy.copy(game.tholian.location)
- delta = (id - game.tholian.location).sgn()
+ delta = (
t
id - game.tholian.location).sgn()
# move in x axis
# move in x axis
- while here.i != id.i:
+ while here.i !=
t
id.i:
here.i += delta.i
if game.quad[here.i][here.j]=='.':
game.tholian.move(here)
# move in y axis
here.i += delta.i
if game.quad[here.i][here.j]=='.':
game.tholian.move(here)
# move in y axis
- while here.j != id.j:
+ while here.j !=
t
id.j:
here.j += delta.j
if game.quad[here.i][here.j]=='.':
game.tholian.move(here)
here.j += delta.j
if game.quad[here.i][here.j]=='.':
game.tholian.move(here)
@@
-887,21
+897,21
@@
def doshield(shraise):
action = "SHDN"
if action=="NONE":
proutn(_("Do you wish to change shield energy? "))
action = "SHDN"
if action=="NONE":
proutn(_("Do you wish to change shield energy? "))
- if ja()
== True
:
+ 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? "))
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()
== True
:
+ if ja():
action = "SHDN"
else:
scanner.chew()
return
else:
proutn(_("Shields are down. Do you want them up? "))
action = "SHDN"
else:
scanner.chew()
return
else:
proutn(_("Shields are down. Do you want them up? "))
- if ja()
== True
:
+ if ja():
action = "SHUP"
else:
scanner.chew()
action = "SHUP"
else:
scanner.chew()
@@
-994,10
+1004,10
@@
def randdevice():
)
assert(sum(weights) == 1000)
idx = randrange(1000)
)
assert(sum(weights) == 1000)
idx = randrange(1000)
- sum = 0
+
w
sum = 0
for (i, w) in enumerate(weights):
for (i, w) in enumerate(weights):
- sum += w
- if idx < sum:
+
w
sum += w
+ if idx <
w
sum:
return i
return None; # we should never get here
return i
return None; # we should never get here
@@
-1019,16
+1029,17
@@
def collision(rammed, enemy):
proutn(_(" (original position)"))
skip(1)
deadkl(enemy.location, enemy.type, game.sector)
proutn(_(" (original position)"))
skip(1)
deadkl(enemy.location, enemy.type, game.sector)
- proutn("***" + crmsh
i
p() + " heavily damaged.")
+ proutn("***" + crmshp() + " heavily damaged.")
icas = randrange(10, 30)
icas = randrange(10, 30)
- prout(_("***Sickbay reports %d casualties")
,
icas)
+ prout(_("***Sickbay reports %d casualties")
%
icas)
game.casual += icas
game.state.crew -= icas
# In the pre-SST2K version, all devices got equiprobably damaged,
# which was silly. Instead, pick up to half the devices at
# random according to our weighting table,
ncrits = randrange(NDEVICES/2)
game.casual += icas
game.state.crew -= icas
# In the pre-SST2K version, all devices got equiprobably damaged,
# which was silly. Instead, pick up to half the devices at
# random according to our weighting table,
ncrits = randrange(NDEVICES/2)
- for m in range(ncrits):
+ while ncrits > 0:
+ ncrits -= 1
dev = randdevice()
if game.damage[dev] < 0:
continue
dev = randdevice()
if game.damage[dev] < 0:
continue
@@
-1053,7
+1064,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
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))
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 =
c
oord(0, 0)
+ bumpto =
C
oord(0, 0)
# Loop to move a single torpedo
setwnd(message_window)
for step in range(1, QUADSIZE*2):
# Loop to move a single torpedo
setwnd(message_window)
for step in range(1, QUADSIZE*2):
@@
-1062,7
+1073,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
if not w.valid_sector():
break
iquad=game.quad[w.i][w.j]
if not w.valid_sector():
break
iquad=game.quad[w.i][w.j]
- tracktorpedo(
origin,
w, step, number, nburst, iquad)
+ tracktorpedo(w, step, number, nburst, iquad)
if iquad=='.':
continue
# hit something
if iquad=='.':
continue
# hit something
@@
-1096,7
+1107,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
prout(_(" displaced by blast to Sector %s ") % bumpto)
for enemy in game.enemies:
enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
prout(_(" displaced by blast to Sector %s ") % bumpto)
for enemy in game.enemies:
enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
return None
elif iquad in ('C', 'S', 'R', 'K'): # Hit a regular enemy
# find the enemy
return None
elif iquad in ('C', 'S', 'R', 'K'): # Hit a regular enemy
# find the enemy
@@
-1139,7
+1150,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
game.quad[bumpto.i][bumpto.j]=iquad
for enemy in game.enemies:
enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
game.quad[bumpto.i][bumpto.j]=iquad
for enemy in game.enemies:
enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
return None
elif iquad == 'B': # Hit a base
skip(1)
return None
elif iquad == 'B': # Hit a base
skip(1)
@@
-1199,7
+1210,6
@@
def torpedo(origin, bearing, dispersion, number, nburst):
# you can shove the Thingy and piss it off.
# It then becomes an enemy and may fire at you.
thing.angry = True
# you can shove the Thingy and piss it off.
# It then becomes an enemy and may fire at you.
thing.angry = True
- shoved = True
return None
elif iquad == ' ': # Black hole
skip(1)
return None
elif iquad == ' ': # Black hole
skip(1)
@@
-1211,7
+1221,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
return None
elif iquad == 'T': # Hit a Tholian
h1 = 700.0 + randrange(100) - \
return None
elif iquad == 'T': # Hit a Tholian
h1 = 700.0 + randrange(100) - \
- 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-angle))
+ 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] = '.'
h1 = math.fabs(h1)
if h1 >= 600:
game.quad[w.i][w.j] = '.'
@@
-1247,7
+1257,8
@@
def fry(hit):
proutn(_("***CRITICAL HIT--"))
# Select devices and cause damage
cdam = []
proutn(_("***CRITICAL HIT--"))
# Select devices and cause damage
cdam = []
- for loop1 in range(ncrit):
+ while ncrit > 0:
+ ncrit -= 1
while True:
j = randdevice()
# Cheat to prevent shuttle damage unless on ship
while True:
j = randdevice()
# Cheat to prevent shuttle damage unless on ship
@@
-1278,7
+1289,7
@@
def attack(torps_ok):
attempt = False; ihurt = False;
hitmax=0.0; hittot=0.0; chgfac=1.0
where = "neither"
attempt = False; ihurt = False;
hitmax=0.0; hittot=0.0; chgfac=1.0
where = "neither"
- if idebug:
+ if
game.
idebug:
prout("=== ATTACK!")
# Tholian gets to move before attacking
if game.tholian:
prout("=== ATTACK!")
# Tholian gets to move before attacking
if game.tholian:
@@
-1329,7
+1340,7
@@
def attack(torps_ok):
enemy.power *= 0.75
else: # Enemy uses photon torpedo
# We should be able to make the bearing() method work here
enemy.power *= 0.75
else: # Enemy uses photon torpedo
# We should be able to make the bearing() method work here
- course = 1.90985*math.atan2(game.sector.j-enemy.location.j, enemy.location.i-game.sector.i)
+
p
course = 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):
hit = 0
proutn(_("***TORPEDO INCOMING"))
if not damaged(DSRSENS):
@@
-1338,7
+1349,7
@@
def attack(torps_ok):
prout(" ")
dispersion = (randreal()+randreal())*0.5 - 0.5
dispersion += 0.002*enemy.power*dispersion
prout(" ")
dispersion = (randreal()+randreal())*0.5 - 0.5
dispersion += 0.002*enemy.power*dispersion
- hit = torpedo(enemy.location, course, dispersion, number=1, nburst=1)
+ hit = torpedo(enemy.location,
p
course, 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:
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:
@@
-1350,7
+1361,7
@@
def attack(torps_ok):
# shields will take hits
propor = pfac * game.shield
if game.condition =="docked":
# shields will take hits
propor = pfac * game.shield
if game.condition =="docked":
- propr *= 2.1
+ prop
o
r *= 2.1
if propor < 0.1:
propor = 0.1
hitsh = propor*chgfac*hit+1.0
if propor < 0.1:
propor = 0.1
hitsh = propor*chgfac*hit+1.0
@@
-1412,7
+1423,7
@@
def attack(torps_ok):
# After attack, reset average distance to enemies
for enemy in game.enemies:
enemy.kavgd = enemy.kdist
# After attack, reset average distance to enemies
for enemy in game.enemies:
enemy.kavgd = enemy.kdist
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
return
def deadkl(w, type, mv):
return
def deadkl(w, type, mv):
@@
-1469,11
+1480,11
@@
def targetcheck(w):
if not w.valid_sector():
huh()
return None
if not w.valid_sector():
huh()
return None
- delta =
c
oord()
+ delta =
C
oord()
# FIXME: 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);
# FIXME: 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 ==
c
oord(0, 0):
+ if delta ==
C
oord(0, 0):
skip(1)
prout(_("Spock- \"Bridge to sickbay. Dr. McCoy,"))
prout(_(" I recommend an immediate review of"))
skip(1)
prout(_("Spock- \"Bridge to sickbay. Dr. McCoy,"))
prout(_(" I recommend an immediate review of"))
@@
-1484,7
+1495,7
@@
def targetcheck(w):
def torps():
"Launch photon torpedo salvo."
def torps():
"Launch photon torpedo salvo."
- course = []
+
t
course = []
game.ididit = False
if damaged(DPHOTON):
prout(_("Photon tubes damaged."))
game.ididit = False
if damaged(DPHOTON):
prout(_("Photon tubes damaged."))
@@
-1528,15
+1539,15
@@
def torps():
# direct all torpedoes at one target
while i < n:
target.append(target[0])
# direct all torpedoes at one target
while i < n:
target.append(target[0])
-
course.append(
course[0])
+
tcourse.append(t
course[0])
i += 1
break
scanner.push(scanner.token)
target.append(scanner.getcoord())
if target[-1] == None:
return
i += 1
break
scanner.push(scanner.token)
target.append(scanner.getcoord())
if target[-1] == None:
return
- course.append(targetcheck(target[-1]))
- if course[-1] == None:
+
t
course.append(targetcheck(target[-1]))
+ if
t
course[-1] == None:
return
scanner.chew()
if len(target) == 0:
return
scanner.chew()
if len(target) == 0:
@@
-1547,8
+1558,8
@@
def torps():
target.append(scanner.getcoord())
if target[-1] == None:
return
target.append(scanner.getcoord())
if target[-1] == None:
return
- course.append(targetcheck(target[-1]))
- if course[-1] == None:
+
t
course.append(targetcheck(target[-1]))
+ if
t
course[-1] == None:
return
game.ididit = True
# Loop for moving <n> torpedoes
return
game.ididit = True
# Loop for moving <n> torpedoes
@@
-1572,10
+1583,10
@@
def torps():
break
if game.shldup or game.condition == "docked":
dispersion *= 1.0 + 0.0001*game.shield
break
if game.shldup or game.condition == "docked":
dispersion *= 1.0 + 0.0001*game.shield
- torpedo(game.sector, course[i], dispersion, number=i, nburst=n)
+ torpedo(game.sector,
t
course[i], dispersion, number=i, nburst=n)
if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
return
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);
def overheat(rpow):
finish(FWON);
def overheat(rpow):
@@
-1624,8
+1635,8
@@
def checkshctrl(rpow):
def hittem(hits):
"Register a phaser hit on Klingons and Romulans."
def hittem(hits):
"Register a phaser hit on Klingons and Romulans."
-
nenhr2 = len(game.enemies); kk=
0
- w =
c
oord()
+
kk =
0
+ w =
C
oord()
skip(1)
for (k, wham) in enumerate(hits):
if wham==0:
skip(1)
for (k, wham) in enumerate(hits):
if wham==0:
@@
-1948,7
+1959,7
@@
def cancelrest():
if game.resting:
skip(1)
proutn(_("Mr. Spock- \"Captain, shall we cancel the rest period?\""))
if game.resting:
skip(1)
proutn(_("Mr. Spock- \"Captain, shall we cancel the rest period?\""))
- if ja()
== True
:
+ if ja():
game.resting = False
game.optime = 0.0
return True
game.resting = False
game.optime = 0.0
return True
@@
-1959,8
+1970,8
@@
def events():
i=0
fintim = game.state.date + game.optime; yank=0
ictbeam = False; istract = False
i=0
fintim = game.state.date + game.optime; yank=0
ictbeam = False; istract = False
- w =
coord(); hold = c
oord()
- ev =
event(); ev2 = e
vent()
+ w =
Coord(); hold = C
oord()
+ ev =
Event(); ev2 = E
vent()
def tractorbeam(yank):
"Tractor-beaming cases merge here."
def tractorbeam(yank):
"Tractor-beaming cases merge here."
@@
-2041,7
+2052,7
@@
def events():
game.isatb = 0
else:
game.battle.invalidate()
game.isatb = 0
else:
game.battle.invalidate()
- if idebug:
+ if
game.
idebug:
prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
for i in range(1, NEVENTS):
if i == FSNOVA: proutn("=== Supernova ")
prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
for i in range(1, NEVENTS):
if i == FSNOVA: proutn("=== Supernova ")
@@
-2070,7
+2081,7
@@
def events():
for l in range(1, NEVENTS):
if game.future[l].date < datemin:
evcode = l
for l in range(1, NEVENTS):
if game.future[l].date < datemin:
evcode = l
- if idebug:
+ if
game.
idebug:
prout("== Event %d fires" % evcode)
datemin = game.future[l].date
xtime = datemin-game.state.date
prout("== Event %d fires" % evcode)
datemin = game.future[l].date
xtime = datemin-game.state.date
@@
-2166,13
+2177,13
@@
def events():
for ibq in game.state.baseq:
for cmdr in game.state.kcmdr:
if ibq == cmdr and ibq != game.quadrant and ibq != game.state.kscmdr:
for ibq in game.state.baseq:
for cmdr in game.state.kcmdr:
if ibq == cmdr and ibq != game.quadrant and ibq != game.state.kscmdr:
- raise
ibq
+ raise
JumpOut
else:
# no match found -- try later
schedule(FBATTAK, expran(0.3*game.intime))
unschedule(FCDBAS)
continue
else:
# no match found -- try later
schedule(FBATTAK, expran(0.3*game.intime))
unschedule(FCDBAS)
continue
- except
coord
:
+ except
JumpOut
:
pass
# commander + starbase combination found -- launch attack
game.battle = ibq
pass
# commander + starbase combination found -- launch attack
game.battle = ibq
@@
-2268,7
+2279,7
@@
def events():
break
else:
# can't seem to find one; ignore this call
break
else:
# can't seem to find one; ignore this call
- if idebug:
+ if
game.
idebug:
prout("=== Couldn't find location for distress event.")
continue
# got one!! Schedule its enslavement
prout("=== Couldn't find location for distress event.")
continue
# got one!! Schedule its enslavement
@@
-2313,7
+2324,7
@@
def events():
continue # full right now
# reproduce one Klingon
w = ev.quadrant
continue # full right now
# reproduce one Klingon
w = ev.quadrant
- m =
c
oord()
+ m =
C
oord()
if game.klhere >= MAXKLQUAD:
try:
# this quadrant not ok, pick an adjacent one
if game.klhere >= MAXKLQUAD:
try:
# this quadrant not ok, pick an adjacent one
@@
-2325,10
+2336,10
@@
def events():
# check for this quad ok (not full & no snova)
if q.klingons >= MAXKLQUAD or q.supernova:
continue
# check for this quad ok (not full & no snova)
if q.klingons >= MAXKLQUAD or q.supernova:
continue
- raise
"FOUNDIT"
+ raise
JumpOut
else:
continue # search for eligible quadrant failed
else:
continue # search for eligible quadrant failed
- except
"FOUNDIT"
:
+ except
JumpOut
:
w = m
# deliver the child
game.state.remkl += 1
w = m
# deliver the child
game.state.remkl += 1
@@
-2365,7
+2376,7
@@
def wait():
return
if delay >= game.state.remtime or len(game.enemies) != 0:
proutn(_("Are you sure? "))
return
if delay >= game.state.remtime or len(game.enemies) != 0:
proutn(_("Are you sure? "))
- if
ja() == False
:
+ if
not ja()
:
return
# Alternate resting periods (events) with attacks
game.resting = True
return
# Alternate resting periods (events) with attacks
game.resting = True
@@
-2401,8
+2412,8
@@
def wait():
def nova(nov):
"Star goes nova."
def nova(nov):
"Star goes nova."
- course = (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 = c
oord(0, 0)
+
n
course = (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 = C
oord(0, 0)
if withprob(0.05):
# Wow! We've supernova'ed
supernova(game.quadrant)
if withprob(0.05):
# Wow! We've supernova'ed
supernova(game.quadrant)
@@
-2416,7
+2427,7
@@
def nova(nov):
hits = [nov]
kount = 0
while hits:
hits = [nov]
kount = 0
while hits:
- offset =
c
oord()
+ offset =
C
oord()
start = hits.pop()
for offset.i in range(-1, 1+1):
for offset.j in range(-1, 1+1):
start = hits.pop()
for offset.i in range(-1, 1+1):
for offset.j in range(-1, 1+1):
@@
-2482,7
+2493,7
@@
def nova(nov):
finish(FNOVA)
return
# add in course nova contributes to kicking starship
finish(FNOVA)
return
# add in course nova contributes to kicking starship
- bump += (game.sector-hits[
mm
]).sgn()
+ bump += (game.sector-hits[
-1
]).sgn()
elif iquad == 'K': # kill klingon
deadkl(neighbor, iquad, neighbor)
elif iquad in ('C','S','R'): # Damage/destroy big enemies
elif iquad == 'K': # kill klingon
deadkl(neighbor, iquad, neighbor)
elif iquad in ('C','S','R'): # Damage/destroy big enemies
@@
-2493,7
+2504,7
@@
def nova(nov):
if game.enemies[ll].power <= 0.0:
deadkl(neighbor, iquad, neighbor)
break
if game.enemies[ll].power <= 0.0:
deadkl(neighbor, iquad, neighbor)
break
- newc = neighbor + neighbor - hits[
mm
]
+ newc = neighbor + neighbor - hits[
-1
]
proutn(crmena(True, iquad, "sector", neighbor) + _(" damaged"))
if not newc.valid_sector():
# can't leave quadrant
proutn(crmena(True, iquad, "sector", neighbor) + _(" damaged"))
if not newc.valid_sector():
# can't leave quadrant
@@
-2515,17
+2526,17
@@
def nova(nov):
game.enemies[ll].move(newc)
# Starship affected by nova -- kick it away.
dist = kount*0.1
game.enemies[ll].move(newc)
# Starship affected by nova -- kick it away.
dist = kount*0.1
- direc = course[3*(bump.i+1)+bump.j+2]
+ direc =
n
course[3*(bump.i+1)+bump.j+2]
if direc == 0.0:
dist = 0.0
if dist == 0.0:
return
if direc == 0.0:
dist = 0.0
if dist == 0.0:
return
- course = course(bearing=direc, distance=dist)
- game.optime = course.time(warp=4)
+
s
course = course(bearing=direc, distance=dist)
+ game.optime =
s
course.time(warp=4)
skip(1)
prout(_("Force of nova displaces starship."))
skip(1)
prout(_("Force of nova displaces starship."))
- imove(course, noattack=True)
- game.optime = course.time(warp=4)
+ imove(
s
course, noattack=True)
+ game.optime =
s
course.time(warp=4)
return
def supernova(w):
return
def supernova(w):
@@
-2536,7
+2547,7
@@
def supernova(w):
else:
# Scheduled supernova -- select star at random.
stars = 0
else:
# Scheduled supernova -- select star at random.
stars = 0
- nq =
c
oord()
+ nq =
C
oord()
for nq.i in range(GALSIZE):
for nq.j in range(GALSIZE):
stars += game.state.galaxy[nq.i][nq.j].stars
for nq.i in range(GALSIZE):
for nq.j in range(GALSIZE):
stars += game.state.galaxy[nq.i][nq.j].stars
@@
-2550,9
+2561,9
@@
def supernova(w):
break
if num <=0:
break
break
if num <=0:
break
- if idebug:
+ if
game.
idebug:
proutn("=== Super nova here?")
proutn("=== Super nova here?")
- if ja()
== True
:
+ if ja():
nq = game.quadrant
if not nq == game.quadrant or game.justin:
# it isn't here, or we just entered (treat as enroute)
nq = game.quadrant
if not nq == game.quadrant or game.justin:
# it isn't here, or we just entered (treat as enroute)
@@
-2561,7
+2572,7
@@
def supernova(w):
prout(_("Message from Starfleet Command Stardate %.2f") % game.state.date)
prout(_(" Supernova in Quadrant %s; caution advised.") % nq)
else:
prout(_("Message from Starfleet Command Stardate %.2f") % game.state.date)
prout(_(" Supernova in Quadrant %s; caution advised.") % nq)
else:
- ns =
c
oord()
+ ns =
C
oord()
# we are in the quadrant!
num = randrange(game.state.galaxy[nq.i][nq.j].stars) + 1
for ns.i in range(QUADSIZE):
# we are in the quadrant!
num = randrange(game.state.galaxy[nq.i][nq.j].stars) + 1
for ns.i in range(QUADSIZE):
@@
-2681,11
+2692,9
@@
def kaboom():
skip(1)
if len(game.enemies) != 0:
whammo = 25.0 * game.energy
skip(1)
if len(game.enemies) != 0:
whammo = 25.0 * game.energy
- l=1
- while l <= len(game.enemies):
+ 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)
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)
- l += 1
finish(FDILITHIUM)
def killrate():
finish(FDILITHIUM)
def killrate():
@@
-2766,12
+2775,12
@@
def finish(ifin):
prout(_("Now you can retire and write your own Star Trek game!"))
skip(1)
elif game.skill >= SKILL_EXPERT:
prout(_("Now you can retire and write your own Star Trek game!"))
skip(1)
elif game.skill >= SKILL_EXPERT:
- if game.thawed and not idebug:
+ 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()
prout(_("You cannot get a citation, so..."))
else:
proutn(_("Do you want your Commodore Emeritus Citation printed? "))
scanner.chew()
- if ja()
== True
:
+ if ja():
igotit = True
# Only grant long life if alive (original didn't!)
skip(1)
igotit = True
# Only grant long life if alive (original didn't!)
skip(1)
@@
-2909,11
+2918,10
@@
def finish(ifin):
def score():
"Compute player's score."
timused = game.state.date - game.indate
def score():
"Compute player's score."
timused = game.state.date - game.indate
- iskill = game.skill
if (timused == 0 or (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0) and timused < 5.0:
timused = 5.0
if (timused == 0 or (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem) != 0) and timused < 5.0:
timused = 5.0
- perdate = killrate()
- ithperd = 500*perdate + 0.5
+
game.
perdate = killrate()
+ ithperd = 500*
game.
perdate + 0.5
iwon = 0
if game.gamewon:
iwon = 100*game.skill
iwon = 0
if game.gamewon:
iwon = 100*game.skill
@@
-2923,7
+2931,7
@@
def score():
klship = 1
else:
klship = 2
klship = 1
else:
klship = 2
-
i
score = 10*(game.inkling - game.state.remkl) \
+
game.
score = 10*(game.inkling - game.state.remkl) \
+ 50*(game.incom - len(game.state.kcmdr)) \
+ ithperd + iwon \
+ 20*(game.inrom - game.state.nromrem) \
+ 50*(game.incom - len(game.state.kcmdr)) \
+ ithperd + iwon \
+ 20*(game.inrom - game.state.nromrem) \
@@
-2931,7
+2939,7
@@
def score():
- game.state.nromrem \
- badpoints()
if not game.alive:
- game.state.nromrem \
- badpoints()
if not game.alive:
-
i
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:
@@
-2951,7
+2959,7
@@
def score():
(game.inscom - game.state.nscrem, 200*(game.inscom - game.state.nscrem)))
if ithperd:
prout(_("%6.2f Klingons per stardate %5d") %
(game.inscom - game.state.nscrem, 200*(game.inscom - game.state.nscrem)))
if ithperd:
prout(_("%6.2f Klingons per stardate %5d") %
- (perdate, ithperd))
+ (
game.
perdate, ithperd))
if game.state.starkl:
prout(_("%6d stars destroyed by your action %5d") %
(game.state.starkl, -5*game.state.starkl))
if game.state.starkl:
prout(_("%6d stars destroyed by your action %5d") %
(game.state.starkl, -5*game.state.starkl))
@@
-2987,7
+2995,7
@@
def score():
elif game.skill == SKILL_EMERITUS: proutn(_("Emeritus game"))
prout(" %5d" % iwon)
skip(1)
elif game.skill == SKILL_EMERITUS: proutn(_("Emeritus game"))
prout(" %5d" % iwon)
skip(1)
- prout(_("TOTAL SCORE %5d") %
i
score)
+ prout(_("TOTAL SCORE %5d") %
game.
score)
def plaque():
"Emit winner's commemmorative plaque."
def plaque():
"Emit winner's commemmorative plaque."
@@
-3043,8
+3051,8
@@
def plaque():
timestring = time.ctime()
fp.write(_(" This day of %.6s %.4s, %.8s\n\n") %
(timestring+4, timestring+20, timestring+11))
timestring = time.ctime()
fp.write(_(" This day of %.6s %.4s, %.8s\n\n") %
(timestring+4, timestring+20, timestring+11))
- fp.write(_(" Your score: %d\n\n") %
i
score)
- fp.write(_(" Klingons per stardate: %.2f\n") % perdate)
+ fp.write(_(" Your score: %d\n\n") %
game.
score)
+ fp.write(_(" Klingons per stardate: %.2f\n") %
game.
perdate)
fp.close()
# Code from io.c begins here
fp.close()
# Code from io.c begins here
@@
-3066,7
+3074,7
@@
def iostart():
"for some recent versions of python2, the following enables UTF8"
"for the older ones we probably need to set C locale, and the python3"
"has no problems at all"
"for some recent versions of python2, the following enables UTF8"
"for the older ones we probably need to set C locale, and the python3"
"has no problems at all"
- if sys.version_info
.major
< 3:
+ if sys.version_info
[0]
< 3:
import locale
locale.setlocale(locale.LC_ALL, "")
gettext.bindtextdomain("sst", "/usr/local/share/locale")
import locale
locale.setlocale(locale.LC_ALL, "")
gettext.bindtextdomain("sst", "/usr/local/share/locale")
@@
-3144,24
+3152,18
@@
def pause_game():
sys.stdout.write('\n')
proutn(prompt)
raw_input()
sys.stdout.write('\n')
proutn(prompt)
raw_input()
- for j in range(rows):
- sys.stdout.write('\n')
+ 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:
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()
- (my, mx) = curwnd.getmaxyx()
- if curwnd == message_window and y >= my - 2:
- pause_game()
- clrscr()
- else:
- try:
- curwnd.move(y+1, 0)
- except curses.error:
- pass
+ (y, x) = curwnd.getyx()
+ try:
+ curwnd.move(y+1, 0)
+ except curses.error:
+ pass
else:
global linecount
linecount += 1
else:
global linecount
linecount += 1
@@
-3173,6
+3175,11
@@
def skip(i):
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()
curwnd.addstr(line)
curwnd.refresh()
else:
curwnd.addstr(line)
curwnd.refresh()
else:
@@
-3339,7
+3346,7
@@
def warble():
#nosound()
pass
#nosound()
pass
-def tracktorpedo(
origin,
w, step, i, n, iquad):
+def tracktorpedo(w, step, i, n, iquad):
"Torpedo-track animation."
if not game.options & OPTION_CURSES:
if step == 1:
"Torpedo-track animation."
if not game.options & OPTION_CURSES:
if step == 1:
@@
-3399,9
+3406,9
@@
def prstat(txt, data):
# Code from moving.c begins here
# Code from moving.c begins here
-def imove(course=None, noattack=False):
+def imove(
i
course=None, noattack=False):
"Movement execution for warp, impulse, supernova, and tractor-beam events."
"Movement execution for warp, impulse, supernova, and tractor-beam events."
- w =
c
oord()
+ w =
C
oord()
def newquadrant(noattack):
# Leaving quadrant -- allow final enemy attack
def newquadrant(noattack):
# Leaving quadrant -- allow final enemy attack
@@
-3422,17
+3429,17
@@
def imove(course=None, noattack=False):
kinks = 0
while True:
kink = False
kinks = 0
while True:
kink = False
- if course.final.i < 0:
-
course.final.i = -
course.final.i
+ if
i
course.final.i < 0:
+
icourse.final.i = -i
course.final.i
kink = True
kink = True
- if course.final.j < 0:
-
course.final.j = -
course.final.j
+ if
i
course.final.j < 0:
+
icourse.final.j = -i
course.final.j
kink = True
kink = True
- if course.final.i >= GALSIZE*QUADSIZE:
-
course.final.i = (GALSIZE*QUADSIZE*2) -
course.final.i
+ if
i
course.final.i >= GALSIZE*QUADSIZE:
+
icourse.final.i = (GALSIZE*QUADSIZE*2) - i
course.final.i
kink = True
kink = True
- if course.final.j >= GALSIZE*QUADSIZE:
-
course.final.j = (GALSIZE*QUADSIZE*2) -
course.final.j
+ if
i
course.final.j >= GALSIZE*QUADSIZE:
+
icourse.final.j = (GALSIZE*QUADSIZE*2) - i
course.final.j
kink = True
if kink:
kinks += 1
kink = True
if kink:
kinks += 1
@@
-3451,8
+3458,8
@@
def imove(course=None, noattack=False):
# Compute final position in new quadrant
if trbeam: # Don't bother if we are to be beamed
return
# Compute final position in new quadrant
if trbeam: # Don't bother if we are to be beamed
return
- game.quadrant = course.final.quadrant()
- game.sector = course.final.sector()
+ game.quadrant =
i
course.final.quadrant()
+ game.sector =
i
course.final.sector()
skip(1)
prout(_("Entering Quadrant %s.") % game.quadrant)
game.quad[game.sector.i][game.sector.j] = game.ship
skip(1)
prout(_("Entering Quadrant %s.") % game.quadrant)
game.quad[game.sector.i][game.sector.j] = game.ship
@@
-3464,7
+3471,7
@@
def imove(course=None, noattack=False):
iquad = game.quad[h.i][h.j]
if iquad != '.':
# object encountered in flight path
iquad = game.quad[h.i][h.j]
if iquad != '.':
# object encountered in flight path
- stopegy = 50.0*course.distance/game.optime
+ stopegy = 50.0*
i
course.distance/game.optime
if iquad in ('T', 'K', 'C', 'S', 'R', '?'):
for enemy in game.enemies:
if enemy.location == game.sector:
if iquad in ('T', 'K', 'C', 'S', 'R', '?'):
for enemy in game.enemies:
if enemy.location == game.sector:
@@
-3514,17
+3521,17
@@
def imove(course=None, noattack=False):
if game.state.date+game.optime >= scheduled(FTBEAM):
trbeam = True
game.condition = "red"
if game.state.date+game.optime >= scheduled(FTBEAM):
trbeam = True
game.condition = "red"
-
course.distance =
course.distance*(scheduled(FTBEAM)-game.state.date)/game.optime + 0.1
+
icourse.distance = i
course.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] = '.'
game.optime = scheduled(FTBEAM) - game.state.date + 1e-5
# Move out
game.quad[game.sector.i][game.sector.j] = '.'
- for m in range(course.moves):
- course.next()
- w = course.sector()
- if
course.origin.quadrant() !=
course.location.quadrant():
+ for m in range(
i
course.moves):
+
i
course.next()
+ w =
i
course.sector()
+ if
icourse.origin.quadrant() != i
course.location.quadrant():
newquadrant(noattack)
break
newquadrant(noattack)
break
- elif check_collision(w):
+ elif check_collision(
icourse,
w):
print "Collision detected"
break
else:
print "Collision detected"
break
else:
@@
-3536,7
+3543,7
@@
def imove(course=None, noattack=False):
finald = (w-enemy.location).distance()
enemy.kavgd = 0.5 * (finald + enemy.kdist)
enemy.kdist = finald
finald = (w-enemy.location).distance()
enemy.kavgd = 0.5 * (finald + enemy.kdist)
enemy.kdist = finald
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
attack(torps_ok=False)
for enemy in game.enemies:
if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
attack(torps_ok=False)
for enemy in game.enemies:
@@
-3589,7
+3596,7
@@
def getcourse(isprobe):
dquad = copy.copy(game.quadrant)
navmode = "unspecified"
itemp = "curt"
dquad = copy.copy(game.quadrant)
navmode = "unspecified"
itemp = "curt"
- dsect =
c
oord()
+ dsect =
C
oord()
iprompt = False
if game.landed and not isprobe:
prout(_("Dummy! You can't leave standard orbit until you"))
iprompt = False
if game.landed and not isprobe:
prout(_("Dummy! You can't leave standard orbit until you"))
@@
-3631,7
+3638,7
@@
def getcourse(isprobe):
prout(_("(Manual movement assumed.)"))
navmode = "manual"
break
prout(_("(Manual movement assumed.)"))
navmode = "manual"
break
- delta =
c
oord()
+ delta =
C
oord()
if navmode == "automatic":
while key == "IHEOL":
if isprobe:
if navmode == "automatic":
while key == "IHEOL":
if isprobe:
@@
-3731,7
+3738,7
@@
class course:
self.origin = cartesian(game.quadrant, game.sector)
else:
self.origin = cartesian(game.quadrant, origin)
self.origin = cartesian(game.quadrant, game.sector)
else:
self.origin = cartesian(game.quadrant, origin)
- self.increment =
c
oord(-math.sin(self.angle), math.cos(self.angle))
+ self.increment =
C
oord(-math.sin(self.angle), math.cos(self.angle))
bigger = max(abs(self.increment.i), abs(self.increment.j))
self.increment /= bigger
self.moves = int(round(10*self.distance*bigger))
bigger = max(abs(self.increment.i), abs(self.increment.j))
self.increment /= bigger
self.moves = int(round(10*self.distance*bigger))
@@
-3793,7
+3800,7
@@
def impulse():
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?\" "))
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
ja() == False
:
+ if
not ja()
:
return
# Activate impulse engines and pay the cost
imove(course, noattack=False)
return
# Activate impulse engines and pay the cost
imove(course, noattack=False)
@@
-3807,7
+3814,7
@@
def impulse():
finish(FNRG)
return
finish(FNRG)
return
-def warp(course, involuntary):
+def warp(
w
course, involuntary):
"ove under warp drive."
blooey = False; twarp = False
if not involuntary: # Not WARPX entry
"ove under warp drive."
blooey = False; twarp = False
if not involuntary: # Not WARPX entry
@@
-3824,21
+3831,21
@@
def warp(course, involuntary):
prout(_(" is repaired, I can only give you warp 4.\""))
return
# Read in course and distance
prout(_(" is repaired, I can only give you warp 4.\""))
return
# Read in course and distance
- if course==None:
+ if
w
course==None:
try:
try:
- course = getcourse(isprobe=False)
+
w
course = getcourse(isprobe=False)
except TrekError:
return
# 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.
except TrekError:
return
# 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.
- if course.power(game.warpfac) >= game.energy:
+ if
w
course.power(game.warpfac) >= game.energy:
# Insufficient power for trip
game.ididit = False
skip(1)
prout(_("Engineering to bridge--"))
# Insufficient power for trip
game.ididit = False
skip(1)
prout(_("Engineering to bridge--"))
- if not game.shldup or 0.5*
power
> game.energy:
- iwarp = (game.energy/(course.dist+0.05)) ** 0.333333333
+ if not game.shldup or 0.5*
wcourse.power(game.warpfac)
> game.energy:
+ iwarp = (game.energy/(
w
course.dist+0.05)) ** 0.333333333
if iwarp <= 0:
prout(_("We can't do it, Captain. We don't have enough energy."))
else:
if iwarp <= 0:
prout(_("We can't do it, Captain. We don't have enough energy."))
else:
@@
-3852,7
+3859,7
@@
def warp(course, involuntary):
prout(_("We haven't the energy to go that far with the shields up."))
return
# Make sure enough time is left for the trip
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 = course.time(game.warpfac)
+ game.optime =
w
course.time(game.warpfac)
if game.optime >= 0.8*game.state.remtime:
skip(1)
prout(_("First Officer Spock- \"Captain, I compute that such"))
if game.optime >= 0.8*game.state.remtime:
skip(1)
prout(_("First Officer Spock- \"Captain, I compute that such"))
@@
-3860,7
+3867,7
@@
def warp(course, involuntary):
(100.0*game.optime/game.state.remtime))
prout(_(" percent of our"))
proutn(_(" remaining time. Are you sure this is wise?\" "))
(100.0*game.optime/game.state.remtime))
prout(_(" percent of our"))
proutn(_(" remaining time. Are you sure this is wise?\" "))
- if
ja() == False
:
+ if
not ja()
:
game.ididit = False
game.optime=0
return
game.ididit = False
game.optime=0
return
@@
-3868,38
+3875,40
@@
def warp(course, involuntary):
if game.warpfac > 6.0:
# Decide if engine damage will occur
# ESR: Seems wrong. Probability of damage goes *down* with distance?
if game.warpfac > 6.0:
# Decide if engine damage will occur
# ESR: Seems wrong. Probability of damage goes *down* with distance?
- prob = course.distance*(6.0-game.warpfac)**2/66.666666666
+ prob =
w
course.distance*(6.0-game.warpfac)**2/66.666666666
if prob > randreal():
blooey = True
if prob > randreal():
blooey = True
-
course.distance = randreal(
course.distance)
+
wcourse.distance = randreal(w
course.distance)
# Decide if time warp will occur
# Decide if time warp will occur
- if 0.5*course.distance*math.pow(7.0,game.warpfac-10.0) > randreal():
+ if 0.5*
w
course.distance*math.pow(7.0,game.warpfac-10.0) > randreal():
twarp = True
twarp = True
- if idebug and game.warpfac==10 and not twarp:
+ if
game.
idebug and game.warpfac==10 and not twarp:
blooey = False
proutn("=== Force time warp? ")
blooey = False
proutn("=== Force time warp? ")
- if ja()
== True
:
+ if ja():
twarp = True
if blooey or twarp:
# If time warp or engine damage, check path
twarp = True
if blooey or twarp:
# If time warp or engine damage, check path
- # If it is obstructed, don't do warp or damage
- for m in range(course.moves):
- course.next()
- w = course.sector()
+ # If it is obstructed, don't do warp or damage
+ look = wcourse.moves
+ while look > 0:
+ look -= 1
+ wcourse.next()
+ w = wcourse.sector()
if not w.valid_sector():
break
if game.quad[w.i][w.j] != '.':
blooey = False
twarp = False
if not w.valid_sector():
break
if game.quad[w.i][w.j] != '.':
blooey = False
twarp = False
- course.reset()
+
w
course.reset()
# Activate Warp Engines and pay the cost
imove(course, noattack=False)
if game.alldone:
return
# Activate Warp Engines and pay the cost
imove(course, noattack=False)
if game.alldone:
return
- game.energy -= course.power(game.warpfac)
+ game.energy -=
w
course.power(game.warpfac)
if game.energy <= 0:
finish(FNRG)
if game.energy <= 0:
finish(FNRG)
- game.optime = course.time(game.warpfac)
+ game.optime =
w
course.time(game.warpfac)
if twarp:
timwrp()
if blooey:
if twarp:
timwrp()
if blooey:
@@
-4107,7
+4116,7
@@
def probe():
else:
prout(_("%d probes left") % game.nprobes)
proutn(_("Are you sure you want to fire a probe? "))
else:
prout(_("%d probes left") % game.nprobes)
proutn(_("Are you sure you want to fire a probe? "))
- if
ja() == False
:
+ if
not ja()
:
return
game.isarmed = False
if key == "IHALPHA" and scanner.token == "armed":
return
game.isarmed = False
if key == "IHALPHA" and scanner.token == "armed":
@@
-4181,7
+4190,7
@@
def mayday():
elif m == 2: proutn(_("2nd"))
elif m == 3: proutn(_("3rd"))
proutn(_(" attempt to re-materialize ") + crmshp())
elif m == 2: proutn(_("2nd"))
elif m == 3: proutn(_("3rd"))
proutn(_(" attempt to re-materialize ") + crmshp())
- game.quad[
ix][iy
]=('-','o','O')[m-1]
+ game.quad[
game.sector.i][game.sector.j
]=('-','o','O')[m-1]
textcolor(RED)
warble()
if randreal() > probf:
textcolor(RED)
warble()
if randreal() > probf:
@@
-4190,13
+4199,13
@@
def mayday():
textcolor(DEFAULT)
curses.delay_output(500)
if m > 3:
textcolor(DEFAULT)
curses.delay_output(500)
if m > 3:
- game.quad[
ix][iy
]='?'
+ game.quad[
game.sector.i][game.sector.j
]='?'
game.alive = False
drawmaps(1)
setwnd(message_window)
finish(FMATERIALIZE)
return
game.alive = False
drawmaps(1)
setwnd(message_window)
finish(FMATERIALIZE)
return
- game.quad[
ix][iy
]=game.ship
+ game.quad[
game.sector.i][game.sector.j
]=game.ship
textcolor(GREEN);
prout(_("succeeds."))
textcolor(DEFAULT);
textcolor(GREEN);
prout(_("succeeds."))
textcolor(DEFAULT);
@@
-4322,15
+4331,15
@@
def survey():
continue
if (game.state.planets[i].known != "unknown" \
and not game.state.planets[i].inhabited) \
continue
if (game.state.planets[i].known != "unknown" \
and not game.state.planets[i].inhabited) \
- or idebug:
+ or
game.
idebug:
iknow = True
iknow = True
- if idebug and game.state.planets[i].known=="unknown":
+ 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(" ")
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
:
+ if game.state.planets[i].crystals !=
"present"
:
proutn(_("no "))
prout(_("dilithium crystals present."))
if game.state.planets[i].known=="shuttle_down":
proutn(_("no "))
prout(_("dilithium crystals present."))
if game.state.planets[i].known=="shuttle_down":
@@
-4402,7
+4411,7
@@
def beam():
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 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() == True
:
+
if ja()
:
shuttle()
return
if not game.inorbit:
shuttle()
return
if not game.inorbit:
@@
-4420,7
+4429,7
@@
def beam():
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?\" "))
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
ja() == False
:
+ if
not ja()
:
scanner.chew()
return
if not (game.options & OPTION_PLAIN):
scanner.chew()
return
if not (game.options & OPTION_PLAIN):
@@
-4436,14
+4445,14
@@
def beam():
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 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
ja() == False
:
+ if
not ja()
:
scanner.chew()
return
if game.landed:
# Coming from planet
if game.iplnet.known=="shuttle_down":
proutn(_("Spock- \"Wouldn't you rather take the Galileo?\" "))
scanner.chew()
return
if game.landed:
# Coming from planet
if game.iplnet.known=="shuttle_down":
proutn(_("Spock- \"Wouldn't you rather take the Galileo?\" "))
- if ja()
== True
:
+ if ja():
scanner.chew()
return
prout(_("Your crew hides the Galileo to prevent capture by aliens."))
scanner.chew()
return
prout(_("Your crew hides the Galileo to prevent capture by aliens."))
@@
-4526,7
+4535,7
@@
def usecrystals():
prout(_(" raw dilithium crystals into the ship's power"))
prout(_(" system may risk a severe explosion."))
proutn(_(" Are you sure this is wise?\" "))
prout(_(" raw dilithium crystals into the ship's power"))
prout(_(" system may risk a severe explosion."))
proutn(_(" Are you sure this is wise?\" "))
- if
ja() == False
:
+ if
not ja()
:
scanner.chew()
return
skip(1)
scanner.chew()
return
skip(1)
@@
-4595,7
+4604,7
@@
def shuttle():
int(100*game.optime/game.state.remtime))
prout(_("remaining time."))
proutn(_("Are you sure this is wise?\" "))
int(100*game.optime/game.state.remtime))
prout(_("remaining time."))
proutn(_("Are you sure this is wise?\" "))
- if
ja() == False
:
+ if
not ja()
:
game.optime = 0.0
return
if game.landed:
game.optime = 0.0
return
if game.landed:
@@
-4604,7
+4613,7
@@
def shuttle():
# Galileo on ship!
if not damaged(DTRANSP):
proutn(_("Spock- \"Would you rather use the transporter?\" "))
# Galileo on ship!
if not damaged(DTRANSP):
proutn(_("Spock- \"Would you rather use the transporter?\" "))
- if ja()
== True
:
+ if ja():
beam()
return
proutn(_("Shuttle crew"))
beam()
return
proutn(_("Shuttle crew"))
@@
-4673,7
+4682,7
@@
def deathray():
prout(_("Spock- \"Captain, the 'Experimental Death Ray'"))
prout(_(" is highly unpredictible. Considering the alternatives,"))
proutn(_(" are you sure this is wise?\" "))
prout(_("Spock- \"Captain, the 'Experimental Death Ray'"))
prout(_(" is highly unpredictible. Considering the alternatives,"))
proutn(_(" are you sure this is wise?\" "))
- if
ja() == False
:
+ if
not ja()
:
return
prout(_("Spock- \"Acknowledged.\""))
skip(1)
return
prout(_("Spock- \"Acknowledged.\""))
skip(1)
@@
-4737,7
+4746,6
@@
def deathray():
finish(FDRAY)
return
if r <= 0.75:
finish(FDRAY)
return
if r <= 0.75:
- intj
prouts(_("Sulu- \"Captain! It's --WHAT?!?!\""))
skip(2)
proutn(_("Spock- \"I believe the word is"))
prouts(_("Sulu- \"Captain! It's --WHAT?!?!\""))
skip(2)
proutn(_("Spock- \"I believe the word is"))
@@
-4782,7
+4790,7
@@
def attackreport(curt):
def report():
# report on general game status
scanner.chew()
def report():
# report on general game status
scanner.chew()
- s1 =
"" and game.thawed and _("thawed ")
+ s1 =
(game.thawed and _("thawed ")) or ""
s2 = {1:"short", 2:"medium", 4:"long"}[game.length]
s3 = (None, _("novice"), _("fair"),
_("good"), _("expert"), _("emeritus"))[game.skill]
s2 = {1:"short", 2:"medium", 4:"long"}[game.length]
s3 = (None, _("novice"), _("fair"),
_("good"), _("expert"), _("emeritus"))[game.skill]
@@
-4865,7
+4873,7
@@
def lrscan(silent):
if not silent:
proutn(" ")
for y in range(game.quadrant.j-1, game.quadrant.j+2):
if not silent:
proutn(" ")
for y in range(game.quadrant.j-1, game.quadrant.j+2):
- if not
c
oord(x, y).valid_quadrant():
+ if not
C
oord(x, y).valid_quadrant():
if not silent:
proutn(" -1")
else:
if not silent:
proutn(" -1")
else:
@@
-5054,7
+5062,7
@@
def srscan():
def eta():
"Use computer to get estimated time of arrival for a warp jump."
def eta():
"Use computer to get estimated time of arrival for a warp jump."
- w1 =
coord(); w2 = c
oord()
+ w1 =
Coord(); w2 = C
oord()
prompt = False
if damaged(DCOMPTR):
prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR."))
prompt = False
if damaged(DCOMPTR):
prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR."))
@@
-5208,7
+5216,8
@@
def freeze(boss):
fp.close()
def thaw():
fp.close()
def thaw():
- "Retrieve saved game."
+ "Retrieve saved game."
+ global game
game.passwd[0] = '\0'
key = scanner.next()
if key == "IHEOL":
game.passwd[0] = '\0'
key = scanner.next()
if key == "IHEOL":
@@
-5302,7
+5311,7
@@
device = (
def setup():
"Prepare to play, set up cosmos."
def setup():
"Prepare to play, set up cosmos."
- w =
c
oord()
+ w =
C
oord()
# Decide how many of everything
if choose():
return # frozen game
# Decide how many of everything
if choose():
return # frozen game
@@
-5322,7
+5331,7
@@
def setup():
for i in range(NDEVICES):
game.damage[i] = 0.0
# Set up assorted game parameters
for i in range(NDEVICES):
game.damage[i] = 0.0
# Set up assorted game parameters
- game.battle =
c
oord()
+ game.battle =
C
oord()
game.state.date = game.indate = 100.0 * randreal(20, 51)
game.nkinks = game.nhelp = game.casual = game.abandoned = 0
game.iscate = game.resting = game.imine = game.icrystl = game.icraft = False
game.state.date = game.indate = 100.0 * randreal(20, 51)
game.nkinks = game.nhelp = game.casual = game.abandoned = 0
game.iscate = game.resting = game.imine = game.icrystl = game.icraft = False
@@
-5355,11
+5364,11
@@
def setup():
distq = (w - game.state.baseq[j]).distance()
if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
contflag = True
distq = (w - game.state.baseq[j]).distance()
if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
contflag = True
- if idebug:
+ if
game.
idebug:
prout("=== Abandoning base #%d at %s" % (i, w))
break
elif distq < 6.0 * (BASEMAX+1-game.inbase):
prout("=== Abandoning base #%d at %s" % (i, w))
break
elif distq < 6.0 * (BASEMAX+1-game.inbase):
- if idebug:
+ if
game.
idebug:
prout("=== Saving base #%d, close to #%d" % (i, j))
if not contflag:
break
prout("=== Saving base #%d, close to #%d" % (i, j))
if not contflag:
break
@@
-5400,7
+5409,7
@@
def setup():
w = randplace(GALSIZE)
if game.state.galaxy[w.i][w.j].planet == None:
break
w = randplace(GALSIZE)
if game.state.galaxy[w.i][w.j].planet == None:
break
- new =
p
lanet()
+ new =
P
lanet()
new.quadrant = w
new.crystals = "absent"
if (game.options & OPTION_WORLDS) and i < NINHAB:
new.quadrant = w
new.crystals = "absent"
if (game.options & OPTION_WORLDS) and i < NINHAB:
@@
-5577,7
+5586,7
@@
def choose():
game.options &=~ OPTION_COLOR
setpassword()
if game.passwd == "debug":
game.options &=~ OPTION_COLOR
setpassword()
if game.passwd == "debug":
- idebug = True
+
game.
idebug = True
prout("=== Debug mode enabled.")
# Use parameters to generate initial values of things
game.damfac = 0.5 * game.skill
prout("=== Debug mode enabled.")
# Use parameters to generate initial values of things
game.damfac = 0.5 * game.skill
@@
-5621,7
+5630,11
@@
def newcnd():
def newkling():
"Drop new Klingon into current quadrant."
def newkling():
"Drop new Klingon into current quadrant."
- return enemy('K', loc=dropin(), power=randreal(300,450)+25.0*game.skill)
+ return Enemy('K', loc=dropin(), power=randreal(300,450)+25.0*game.skill)
+
+def sortenemies():
+ "Sort enemies by distance so 'nearest' is meaningful."
+ game.enemies.sort(lambda x, y: cmp(x.kdist, y.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."
@@
-5663,7
+5676,7
@@
def newqad():
game.iscate = (game.state.remkl > 1)
# Put in Romulans if needed
for i in range(q.romulans):
game.iscate = (game.state.remkl > 1)
# Put in Romulans if needed
for i in range(q.romulans):
-
e
nemy('R', loc=dropin(), power=randreal(400.0,850.0)+50.0*game.skill)
+
E
nemy('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')
# If quadrant needs a starbase, put it in
if q.starbase:
game.base = dropin('B')
@@
-5688,7
+5701,7
@@
def newqad():
prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"))
# Put in THING if needed
if thing == game.quadrant:
prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"))
# Put in THING if needed
if thing == game.quadrant:
-
e
nemy(type='?', loc=dropin(),
+
E
nemy(type='?', loc=dropin(),
power=randreal(6000,6500.0)+250.0*game.skill)
if not damaged(DSRSENS):
skip(1)
power=randreal(6000,6500.0)+250.0*game.skill)
if not damaged(DSRSENS):
skip(1)
@@
-5699,13
+5712,13
@@
def newqad():
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)):
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 =
c
oord()
+ w =
C
oord()
while True:
w.i = withprob(0.5) * (QUADSIZE-1)
w.j = withprob(0.5) * (QUADSIZE-1)
if game.quad[w.i][w.j] == '.':
break
while True:
w.i = withprob(0.5) * (QUADSIZE-1)
w.j = withprob(0.5) * (QUADSIZE-1)
if game.quad[w.i][w.j] == '.':
break
- game.tholian =
e
nemy(type='T', loc=w,
+ game.tholian =
E
nemy(type='T', loc=w,
power=randrange(100, 500) + 25.0*game.skill)
# Reserve unoccupied corners
if game.quad[0][0]=='.':
power=randrange(100, 500) + 25.0*game.skill)
# Reserve unoccupied corners
if game.quad[0][0]=='.':
@@
-5716,7
+5729,7
@@
def newqad():
game.quad[QUADSIZE-1][0] = 'X'
if game.quad[QUADSIZE-1][QUADSIZE-1]=='.':
game.quad[QUADSIZE-1][QUADSIZE-1] = 'X'
game.quad[QUADSIZE-1][0] = 'X'
if game.quad[QUADSIZE-1][QUADSIZE-1]=='.':
game.quad[QUADSIZE-1][QUADSIZE-1] = 'X'
-
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)
)
+
sortenemies(
)
# And finally the stars
for i in range(q.stars):
dropin('*')
# And finally the stars
for i in range(q.stars):
dropin('*')
@@
-5747,8
+5760,9
@@
def setpassword():
break
else:
game.passwd = ""
break
else:
game.passwd = ""
- for i in range(3):
- game.passwd += chr(ord('a')+randrange(26))
+ game.passwd += chr(ord('a')+randrange(26))
+ game.passwd += chr(ord('a')+randrange(26))
+ game.passwd += chr(ord('a')+randrange(26))
# Code from sst.c begins here
# Code from sst.c begins here
@@
-5909,7
+5923,7
@@
def makemoves():
if game.ididit:
hitme = True
elif cmd == "MOVE": # move under warp
if game.ididit:
hitme = True
elif cmd == "MOVE": # move under warp
- warp(course=None, involuntary=False)
+ warp(
w
course=None, involuntary=False)
elif cmd == "SHIELDS": # shields
doshield(shraise=False)
if game.ididit:
elif cmd == "SHIELDS": # shields
doshield(shraise=False)
if game.ididit:
@@
-5964,7
+5978,7
@@
def makemoves():
elif cmd == "EMEXIT": # Emergency exit
clrscr() # Hide screen
freeze(True) # forced save
elif cmd == "EMEXIT": # Emergency exit
clrscr() # Hide screen
freeze(True) # forced save
- raise Sys
Exit,1
# And quick exit
+ raise Sys
temExit,1
# And quick exit
elif cmd == "PROBE":
probe() # Launch probe
if game.ididit:
elif cmd == "PROBE":
probe() # Launch probe
if game.ididit:
@@
-6013,7
+6027,7
@@
def makemoves():
break
if game.alldone:
break
break
if game.alldone:
break
- if idebug:
+ if
game.
idebug:
prout("=== Ending")
def cramen(type):
prout("=== Ending")
def cramen(type):
@@
-6059,7
+6073,7
@@
def expran(avrage):
def randplace(size):
"Choose a random location."
def randplace(size):
"Choose a random location."
- w =
c
oord()
+ w =
C
oord()
w.i = randrange(size)
w.j = randrange(size)
return w
w.i = randrange(size)
w.j = randrange(size)
return w
@@
-6120,7
+6134,7
@@
class sstscanner:
# Round token value to nearest integer
return int(round(scanner.real))
def getcoord(self):
# Round token value to nearest integer
return int(round(scanner.real))
def getcoord(self):
- s =
c
oord()
+ s =
C
oord()
scanner.next()
if scanner.type != "IHREAL":
huh()
scanner.next()
if scanner.type != "IHREAL":
huh()
@@
-6132,7
+6146,7
@@
class sstscanner:
return None
s.j = scanner.int()-1
return s
return None
s.j = scanner.int()-1
return s
- def __repr__(s
tr
):
+ def __repr__(s
elf
):
return "<sstcanner: token=%s, type=%s, queue=%s>" % (scanner.token, scanner.type, scanner.inqueue)
def ja():
return "<sstcanner: token=%s, type=%s, queue=%s>" % (scanner.token, scanner.type, scanner.inqueue)
def ja():
@@
-6156,26
+6170,26
@@
def huh():
def debugme():
"Access to the internals for debugging."
proutn("Reset levels? ")
def debugme():
"Access to the internals for debugging."
proutn("Reset levels? ")
- if ja()
== True
:
+ if ja():
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 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()
== True
:
+ if ja():
for i in range(NDEVICES):
if game.damage[i] > 0.0:
game.damage[i] = 0.0
proutn("Toggle debug flag? ")
for i in range(NDEVICES):
if game.damage[i] > 0.0:
game.damage[i] = 0.0
proutn("Toggle debug flag? ")
- if ja()
== True
:
-
idebug = not
idebug
- if idebug:
+ if ja():
+
game.idebug = not game.
idebug
+ if
game.
idebug:
prout("Debug output ON")
else:
prout("Debug output OFF")
proutn("Cause selective damage? ")
prout("Debug output ON")
else:
prout("Debug output OFF")
proutn("Cause selective damage? ")
- if ja()
== True
:
+ if ja():
for i in range(NDEVICES):
proutn("Kill %s?" % device[i])
scanner.chew()
for i in range(NDEVICES):
proutn("Kill %s?" % device[i])
scanner.chew()
@@
-6183,9
+6197,9
@@
def debugme():
if key == "IHALPHA" and scanner.sees("y"):
game.damage[i] = 10.0
proutn("Examine/change events? ")
if key == "IHALPHA" and scanner.sees("y"):
game.damage[i] = 10.0
proutn("Examine/change events? ")
- if ja()
== True
:
- ev =
e
vent()
- w =
c
oord()
+ if ja():
+ ev =
E
vent()
+ w =
C
oord()
legends = {
FSNOVA: "Supernova ",
FTBEAM: "T Beam ",
legends = {
FSNOVA: "Supernova ",
FTBEAM: "T Beam ",
@@
-6236,26
+6250,25
@@
def debugme():
ev.quadrant = w
scanner.chew()
proutn("Induce supernova here? ")
ev.quadrant = w
scanner.chew()
proutn("Induce supernova here? ")
- if ja()
== True
:
+ if ja():
game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova = True
atover(True)
if __name__ == '__main__':
import getopt, socket
try:
game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova = True
atover(True)
if __name__ == '__main__':
import getopt, socket
try:
- global line, thing, game
, idebug
+ global line, thing, game
game = None
game = None
- thing =
c
oord()
+ thing =
C
oord()
thing.angry = False
thing.angry = False
- game = gamestate()
- idebug = 0
+ game = Gamestate()
game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_PLAIN | OPTION_ALMY)
if os.getenv("TERM"):
game.options |= OPTION_CURSES
else:
game.options |= OPTION_TTY
seed = int(time.time())
game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_PLAIN | OPTION_ALMY)
if os.getenv("TERM"):
game.options |= OPTION_CURSES
else:
game.options |= OPTION_TTY
seed = int(time.time())
- (options, arguments) = getopt.getopt(sys.argv[1:], "r:s:tx")
+ (options, arguments) = getopt.getopt(sys.argv[1:], "r:s:tx
V
")
for (switch, val) in options:
if switch == '-r':
try:
for (switch, val) in options:
if switch == '-r':
try:
@@
-6281,7
+6294,10
@@
if __name__ == '__main__':
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
elif switch == '-x':
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
elif switch == '-x':
- idebug = True
+ game.idebug = True
+ elif switch == '-V':
+ print "SST2K", version
+ raise SystemExit, 0
else:
sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n")
raise SystemExit, 1
else:
sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n")
raise SystemExit, 1
@@
-6320,7
+6336,7
@@
if __name__ == '__main__':
skip(1)
if game.tourn and game.alldone:
proutn(_("Do you want your score recorded?"))
skip(1)
if game.tourn and game.alldone:
proutn(_("Do you want your score recorded?"))
- if ja()
== True
:
+ if ja():
scanner.chew()
scanner.push("\n")
freeze(False)
scanner.chew()
scanner.push("\n")
freeze(False)