projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Typo fix.
[super-star-trek.git]
/
sst.py
diff --git
a/sst.py
b/sst.py
index 9b3628570761e78fa487414e9484f475216e7c8b..966795cf654b93d490dc529fe57ab63760065feb 100755
(executable)
--- a/
sst.py
+++ b/
sst.py
@@
-52,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
@@
-72,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:
@@
-109,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
@@
-119,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"
@@
-130,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
@@
-141,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
@@
-156,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
@@
-173,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
@@
-253,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
@@
-274,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
@@
-358,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 ?
@@
-414,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):
@@
-437,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
@@
-456,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
@@
-500,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:
@@
-539,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:
@@
-558,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
@@
-567,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:
@@
-591,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
@@
-607,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
@@
-655,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."
@@
-681,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 \
@@
-699,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 \
@@
-720,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
@@
-800,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):
@@
-820,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)
@@
-889,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()
@@
-996,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
@@
-1021,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
@@
-1055,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):
@@
-1064,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
@@
-1098,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
@@
-1141,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)
@@
-1201,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)
@@
-1213,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] = '.'
@@
-1249,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
@@
-1280,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:
@@
-1331,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):
@@
-1340,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:
@@
-1352,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
@@
-1414,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):
@@
-1471,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"))
@@
-1486,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."))
@@
-1530,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:
@@
-1549,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
@@
-1574,7
+1583,7
@@
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.state.remkl + len(game.state.kcmdr) + game.state.nscrem)<=0:
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:
@@
-1626,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:
@@
-1950,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
@@
-1961,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."
@@
-2043,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 ")
@@
-2072,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
@@
-2168,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
@@
-2270,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
@@
-2315,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
@@
-2327,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
@@
-2367,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
@@
-2403,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)
@@
-2418,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):
@@
-2484,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
@@
-2495,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
@@
-2517,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):
@@
-2538,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
@@
-2552,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)
@@
-2563,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):
@@
-2768,12
+2777,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)
@@
-2911,11
+2920,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
@@
-2925,7
+2933,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) \
@@
-2933,7
+2941,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:
@@
-2953,7
+2961,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))
@@
-2989,7
+2997,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."
@@
-3045,8
+3053,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
@@
-3146,8
+3154,7
@@
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):
linecount = 0
def skip(i):
@@
-3341,7
+3348,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:
@@
-3401,9
+3408,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
@@
-3424,17
+3431,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
@@
-3453,8
+3460,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
@@
-3466,7
+3473,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:
@@
-3516,17
+3523,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:
@@
-3538,7
+3545,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:
@@
-3591,7
+3598,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"))
@@
-3633,7
+3640,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:
@@
-3733,7
+3740,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))
@@
-3795,7
+3802,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)
@@
-3809,7
+3816,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
@@
-3826,21
+3833,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:
@@
-3854,7
+3861,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"))
@@
-3862,7
+3869,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
@@
-3870,38
+3877,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:
@@
-4109,7
+4118,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":
@@
-4183,7
+4192,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:
@@
-4192,13
+4201,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);
@@
-4324,15
+4333,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":
@@
-4404,7
+4413,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:
@@
-4422,7
+4431,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):
@@
-4438,14
+4447,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."))
@@
-4528,7
+4537,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)
@@
-4597,7
+4606,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:
@@
-4606,7
+4615,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"))
@@
-4675,7
+4684,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)
@@
-4739,7
+4748,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"))
@@
-4784,7
+4792,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]
@@
-4867,7
+4875,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:
@@
-5056,7
+5064,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."))
@@
-5210,7
+5218,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":
@@
-5304,7
+5313,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
@@
-5324,7
+5333,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
@@
-5357,11
+5366,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
@@
-5402,7
+5411,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:
@@
-5579,7
+5588,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
@@
-5623,7
+5632,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."
@@
-5665,7
+5678,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')
@@
-5690,7
+5703,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)
@@
-5701,13
+5714,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]=='.':
@@
-5718,7
+5731,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('*')
@@
-5749,8
+5762,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
@@
-5911,7
+5925,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:
@@
-5966,7
+5980,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:
@@
-6015,7
+6029,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):
@@
-6061,7
+6075,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
@@
-6122,7
+6136,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()
@@
-6134,7
+6148,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():
@@
-6158,26
+6172,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()
@@
-6185,9
+6199,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 ",
@@
-6238,19
+6252,18
@@
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
game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_PLAIN | OPTION_ALMY)
if os.getenv("TERM"):
game.options |= OPTION_CURSES
@@
-6283,7
+6296,7
@@
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
elif switch == '-V':
print "SST2K", version
raise SystemExit, 0
@@
-6325,7
+6338,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)