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 code so collisions can actually happen.
[super-star-trek.git]
/
sst
diff --git
a/sst
b/sst
index 6bb244fb66b2b4c686931b20d2b61a178096a499..b9d9a6acf9c3467a64676c7bcca2962f8450dbc0 100755
(executable)
--- a/
sst
+++ b/
sst
@@
-18,7
+18,7
@@
on how to modify (and how not to modify!) this code.
# pylint: disable=multiple-imports
import os, sys, math, curses, time, pickle, copy, gettext, getpass
# pylint: disable=multiple-imports
import os, sys, math, curses, time, pickle, copy, gettext, getpass
-import getopt, socket, locale
, getpass
+import getopt, socket, locale
import codecs
# This import only works on Unixes. The intention is to enable
import codecs
# This import only works on Unixes. The intention is to enable
@@
-26,7
+26,7
@@
import codecs
try:
# pylint: disable=unused-import
import readline
try:
# pylint: disable=unused-import
import readline
-except ImportError:
+except ImportError:
# pragma: no cover
pass
version = "2.7"
pass
version = "2.7"
@@
-101,7
+101,7
@@
FOREVER = 1e30 # Time for the indefinite future
MAXBURST = 3 # Max # of torps you can launch in one turn
MINCMDR = 10 # Minimum number of Klingon commanders
DOCKFAC = 0.25 # Repair faster when docked
MAXBURST = 3 # Max # of torps you can launch in one turn
MINCMDR = 10 # Minimum number of Klingon commanders
DOCKFAC = 0.25 # Repair faster when docked
-PHASEFAC = 2.0 #
Unclear what this is, it was in the C version
+PHASEFAC = 2.0 #
Phaser attenuation factor
ALGERON = 2311 # Date of the Treaty of Algeron
ALGERON = 2311 # Date of the Treaty of Algeron
@@
-155,17
+155,17
@@
class Coord:
return Coord(self.i*other, self.j*other)
def __rmul__(self, other):
return Coord(self.i*other, self.j*other)
return Coord(self.i*other, self.j*other)
def __rmul__(self, other):
return Coord(self.i*other, self.j*other)
- def __div__(self, other):
+ def __div__(self, other):
# pragma: no cover
return Coord(self.i/other, self.j/other)
return Coord(self.i/other, self.j/other)
- def __truediv__(self, other):
+ def __truediv__(self, other):
# pragma: no cover
return Coord(self.i/other, self.j/other)
return Coord(self.i/other, self.j/other)
- def __floordiv__(self, other):
+ def __floordiv__(self, other):
# pragma: no cover
return Coord(self.i//other, self.j//other)
def __mod__(self, other):
return Coord(self.i % other, self.j % other)
return Coord(self.i//other, self.j//other)
def __mod__(self, other):
return Coord(self.i % other, self.j % other)
- def __rtruediv__(self, other):
+ def __rtruediv__(self, other):
# pragma: no cover
return Coord(self.i/other, self.j/other)
return Coord(self.i/other, self.j/other)
- def __rfloordiv__(self, other):
+ def __rfloordiv__(self, other):
# pragma: no cover
return Coord(self.i//other, self.j//other)
def roundtogrid(self):
return Coord(int(round(self.i)), int(round(self.j)))
return Coord(self.i//other, self.j//other)
def roundtogrid(self):
return Coord(int(round(self.i)), int(round(self.j)))
@@
-202,7
+202,7
@@
class Coord:
return s
def __str__(self):
if self.i is None or self.j is None:
return s
def __str__(self):
if self.i is None or self.j is None:
- return "Nowhere"
+ return "Nowhere"
# pragma: no cover
if (game.options & OPTION_ALPHAMERIC):
return letterize(self.i + 1) + str(self.j + 1)
return "%s - %s" % (self.i+1, self.j+1)
if (game.options & OPTION_ALPHAMERIC):
return letterize(self.i + 1) + str(self.j + 1)
return "%s - %s" % (self.i+1, self.j+1)
@@
-240,7
+240,7
@@
class Quadrant:
self.charted = False
self.status = "secure" # Could be "secure", "distressed", "enslaved"
def __str__(self):
self.charted = False
self.status = "secure" # Could be "secure", "distressed", "enslaved"
def __str__(self):
- return "<Quadrant: %(klingons)d>" % self.__dict__
+ return "<Quadrant: %(klingons)d>" % self.__dict__
# pragma: no cover
__repr__ = __str__
class Page:
__repr__ = __str__
class Page:
@@
-249,7
+249,7
@@
class Page:
self.starbase = False
self.klingons = None
def __repr__(self):
self.starbase = False
self.klingons = None
def __repr__(self):
- return "<%s,%s,%s>" % (self.klingons, self.starbase, self.stars)
+ return "<%s,%s,%s>" % (self.klingons, self.starbase, self.stars)
# pragma: no cover
def fill2d(size, fillfun):
"Fill an empty list in 2D."
def fill2d(size, fillfun):
"Fill an empty list in 2D."
@@
-388,7
+388,7
@@
NEVENTS = 12
# Abstract out the event handling -- underlying data structures will change
# when we implement stateful events
# Abstract out the event handling -- underlying data structures will change
# when we implement stateful events
-def findevent(evtype):
+def findevent(evtype):
# pragma: no cover
return game.future[evtype]
class Enemy:
return game.future[evtype]
class Enemy:
@@
-421,7
+421,7
@@
class Enemy:
game.enemies.remove(self)
return motion
def __repr__(self):
game.enemies.remove(self)
return motion
def __repr__(self):
- return "<%s,%s
.%f>" % (self.type, self.location, self.power) # For debugging
+ return "<%s,%s
,%f>" % (self.type, self.location, self.power) # pragma: no cover
class Gamestate:
def __init__(self):
class Gamestate:
def __init__(self):
@@
-773,7
+773,7
@@
def movebaddy(enemy):
def moveklings():
"Sequence Klingon tactical movement."
if game.idebug:
def moveklings():
"Sequence Klingon tactical movement."
if game.idebug:
- prout("== MOVCOM")
+ prout("== MOVCOM")
# pragma: no cover
# Figure out which Klingon is the commander (or Supercommander)
# and do move
tacmoves = []
# Figure out which Klingon is the commander (or Supercommander)
# and do move
tacmoves = []
@@
-973,7
+973,7
@@
def movetholian():
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
tid.i = 0
tid.j = 0
elif game.tholian.location.i == QUADSIZE-1 and game.tholian.location.j == 0:
tid.i = 0
tid.j = 0
- else:
+ else:
# pragma: no cover
# something is wrong!
game.tholian.move(None)
prout("***Internal error: Tholian in a bad spot.")
# something is wrong!
game.tholian.move(None)
prout("***Internal error: Tholian in a bad spot.")
@@
-1226,10
+1226,10
@@
def randdevice():
wsum += w
if idx < wsum:
return i
wsum += w
if idx < wsum:
return i
- return None
# we should never get here
+ return None
# pragma: no cover
def collision(rammed, enemy):
def collision(rammed, enemy):
- "Collision handling for ramm
o
ng events."
+ "Collision handling for ramm
i
ng events."
prouts(_("***RED ALERT! RED ALERT!"))
skip(1)
prout(_("***COLLISION IMMINENT."))
prouts(_("***RED ALERT! RED ALERT!"))
skip(1)
prout(_("***COLLISION IMMINENT."))
@@
-1246,12
+1246,12
@@
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)
- prout
n
("***" + crmshp() + " heavily damaged.")
+ prout("***" + crmshp() + " heavily damaged.")
icas = rnd.integer(10, 30)
prout(_("***Sickbay reports %d casualties") % icas)
game.casual += icas
game.state.crew -= icas
icas = rnd.integer(10, 30)
prout(_("***Sickbay reports %d casualties") % icas)
game.casual += icas
game.state.crew -= icas
- # In the pre-SST2K version, all devices got equiprobably damaged,
+ # In the pre-SST2K version
s
, all devices got equiprobably damaged,
# which was silly. Instead, pick up to half the devices at
# random according to our weighting table,
ncrits = rnd.integer(NDEVICES//2)
# which was silly. Instead, pick up to half the devices at
# random according to our weighting table,
ncrits = rnd.integer(NDEVICES//2)
@@
-1370,7
+1370,7
@@
def torpedo(origin, bearing, dispersion, number, nburst):
tenemy.kdist = tenemy.kavgd = (game.sector-tenemy.location).distance()
sortenemies()
break
tenemy.kdist = tenemy.kavgd = (game.sector-tenemy.location).distance()
sortenemies()
break
- else:
+ else:
# pragma: no cover
prout("Internal error, no enemy where expected!")
raise SystemExit(1)
return None
prout("Internal error, no enemy where expected!")
raise SystemExit(1)
return None
@@
-1521,7
+1521,7
@@
def attack(torps_ok):
chgfac = 1.0
where = "neither"
if game.idebug:
chgfac = 1.0
where = "neither"
if game.idebug:
- prout("=== ATTACK!")
+ prout("=== ATTACK!")
# pragma: no cover
# Tholian gets to move before attacking
if game.tholian:
movetholian()
# Tholian gets to move before attacking
if game.tholian:
movetholian()
@@
-2375,7
+2375,7
@@
def events():
game.isatb = 0
else:
game.battle.invalidate()
game.isatb = 0
else:
game.battle.invalidate()
- if game.idebug:
+ if game.idebug:
# pragma: no cover
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 ")
@@
-2405,7
+2405,7
@@
def events():
if game.future[l].date < datemin:
evcode = l
if game.idebug:
if game.future[l].date < datemin:
evcode = l
if game.idebug:
- prout("== Event %d fires" % evcode)
+ prout("== Event %d fires" % evcode)
# pragma: no cover
datemin = game.future[l].date
xtime = datemin-game.state.date
if game.iscloaked:
datemin = game.future[l].date
xtime = datemin-game.state.date
if game.iscloaked:
@@
-2607,7
+2607,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 game.idebug:
+ if game.idebug:
# pragma: no cover
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
@@
-2893,7
+2893,7
@@
def supernova(w):
break
if num <=0:
break
break
if num <=0:
break
- if game.idebug:
+ if game.idebug:
# pragma: no cover
proutn("=== Super nova here?")
if ja():
nq = game.quadrant
proutn("=== Super nova here?")
if ja():
nq = game.quadrant
@@
-3172,13
+3172,14
@@
def finish(ifin):
prout(_("Your starship is now an expanding cloud of subatomic particles"))
elif ifin == FMATERIALIZE:
prout(_("Starbase was unable to re-materialize your starship."))
prout(_("Your starship is now an expanding cloud of subatomic particles"))
elif ifin == FMATERIALIZE:
prout(_("Starbase was unable to re-materialize your starship."))
- prout(_("Sic transit gloria mundi"))
+ prout(_("Sic transit gloria mundi
.
"))
elif ifin == FPHASER:
prout(_("The %s has been cremated by its own phasers.") % crmshp())
elif ifin == FLOST:
prout(_("You and your landing party have been"))
prout(_("converted to energy, dissipating through space."))
elif ifin == FMINING:
elif ifin == FPHASER:
prout(_("The %s has been cremated by its own phasers.") % crmshp())
elif ifin == FLOST:
prout(_("You and your landing party have been"))
prout(_("converted to energy, dissipating through space."))
elif ifin == FMINING:
+ # This does not seem to be reachable from any code path.
prout(_("You are left with your landing party on"))
prout(_("a wild jungle planet inhabited by primitive cannibals."))
skip(1)
prout(_("You are left with your landing party on"))
prout(_("a wild jungle planet inhabited by primitive cannibals."))
skip(1)
@@
-3191,6
+3192,7
@@
def finish(ifin):
prout(_("That was a great shot."))
skip(1)
elif ifin == FSSC:
prout(_("That was a great shot."))
skip(1)
elif ifin == FSSC:
+ # This does not seem to be reachable from any code path.
prout(_("The Galileo is instantly annihilated by the supernova."))
prout(_("You and your mining party are atomized."))
skip(1)
prout(_("The Galileo is instantly annihilated by the supernova."))
prout(_("You and your mining party are atomized."))
skip(1)
@@
-3841,11
+3843,11
@@
def imove(icourse=None, noattack=False):
stopegy = 50.0*icourse.distance/game.optime
if iquad in ('T', 'K', 'C', 'S', 'R', '?'):
for enemy in game.enemies:
stopegy = 50.0*icourse.distance/game.optime
if iquad in ('T', 'K', 'C', 'S', 'R', '?'):
for enemy in game.enemies:
- if enemy.location ==
game.sector
:
+ if enemy.location ==
h
:
collision(rammed=False, enemy=enemy)
return True
# This should not happen
collision(rammed=False, enemy=enemy)
return True
# This should not happen
- prout(_("Which way did he go?"))
+ prout(_("Which way did he go?"))
# pragma: no cover
return False
elif iquad == ' ':
skip(1)
return False
elif iquad == ' ':
skip(1)
@@
-5304,8
+5306,8
@@
def damagereport():
for i in range(NDEVICES):
if damaged(i):
if not jdam:
for i in range(NDEVICES):
if damaged(i):
if not jdam:
- prout(_("
\tDEVICE\t\t\t-REPAIR TIMES-
"))
- prout(_("
\t\t\tIN FLIGHT\t\t
DOCKED"))
+ prout(_("
DEVICE REPAIR TIMES
"))
+ prout(_("
IN FLIGHT
DOCKED"))
jdam = True
prout(" %-26s\t%8.2f\t\t%8.2f" % (device[i],
game.damage[i]+0.05,
jdam = True
prout(" %-26s\t%8.2f\t\t%8.2f" % (device[i],
game.damage[i]+0.05,
@@
-6066,7
+6068,7
@@
def choose():
elif len(scanner.token):
proutn(_("What is \"%s\"?") % scanner.token)
setpassword()
elif len(scanner.token):
proutn(_("What is \"%s\"?") % scanner.token)
setpassword()
- if game.passwd == "debug":
+ if game.passwd == "debug":
# pragma: no cover
game.idebug = True
prout("=== Debug mode enabled.")
# Use parameters to generate initial values of things
game.idebug = True
prout("=== Debug mode enabled.")
# Use parameters to generate initial values of things
@@
-6300,8
+6302,10
@@
commands = [
("", 0),
]
("", 0),
]
-def listCommands():
+def listCommands():
# pragma: no cover
"Generate a list of legal commands."
"Generate a list of legal commands."
+ # Coverage-disabled because testing for this is fragile
+ # in the presence of changes in the command set.
prout(_("LEGAL COMMANDS ARE:"))
emitted = 0
for (key, opt) in commands:
prout(_("LEGAL COMMANDS ARE:"))
emitted = 0
for (key, opt) in commands:
@@
-6402,7
+6406,7
@@
def makemoves():
if cmd == scanner.token.upper() or (not abandon_passed \
and cmd.startswith(scanner.token.upper())):
break
if cmd == scanner.token.upper() or (not abandon_passed \
and cmd.startswith(scanner.token.upper())):
break
- if cmd == "":
+ if cmd == "":
# pragma: no cover
listCommands()
continue
elif opt and not (opt & game.options):
listCommands()
continue
elif opt and not (opt & game.options):
@@
-6560,7
+6564,7
@@
def cramen(ch):
elif ch == '#': s = _("Tholian web")
elif ch == '?': s = _("Stranger")
elif ch == '@': s = _("Inhabited World")
elif ch == '#': s = _("Tholian web")
elif ch == '?': s = _("Stranger")
elif ch == '@': s = _("Inhabited World")
- else: s = "Unknown??"
+ else: s = "Unknown??"
# pragma: no cover
return s
def crmena(loud, enemy, loctype, w):
return s
def crmena(loud, enemy, loctype, w):
@@
-6671,7
+6675,7
@@
class sstscanner:
return None
s.j = self.int()-1
return s
return None
s.j = self.int()-1
return s
- def __repr__(self):
+ def __repr__(self):
# pragma: no cover
return "<sstcanner: token=%s, type=%s, queue=%s>" % (self.token, self.type, self.inqueue)
def ja():
return "<sstcanner: token=%s, type=%s, queue=%s>" % (self.token, self.type, self.inqueue)
def ja():
@@
-6692,7
+6696,7
@@
def huh():
skip(1)
prout(_("Beg your pardon, Captain?"))
skip(1)
prout(_("Beg your pardon, Captain?"))
-def debugme():
+def debugme():
# pragma: no cover
"Access to the internals for debugging."
proutn("Reset levels? ")
if ja():
"Access to the internals for debugging."
proutn("Reset levels? ")
if ja():
@@
-6810,34
+6814,34
@@
if __name__ == '__main__':
seed = eval(seed)
line = replayfp.readline().strip()
arguments += line.split()[2:]
seed = eval(seed)
line = replayfp.readline().strip()
arguments += line.split()[2:]
- except ValueError:
+ except ValueError:
# pragma: no cover
sys.stderr.write("sst: replay file %s is ill-formed\n"% val)
raise SystemExit(1)
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
sys.stderr.write("sst: replay file %s is ill-formed\n"% val)
raise SystemExit(1)
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
- elif switch == '-s':
+ elif switch == '-s':
# pragma: no cover
seed = int(val)
elif switch == '-t':
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
seed = int(val)
elif switch == '-t':
game.options |= OPTION_TTY
game.options &=~ OPTION_CURSES
- elif switch == '-x':
+ elif switch == '-x':
# pragma: no cover
game.idebug = True
elif switch == '-c': # Enable curses debugging - undocumented
game.cdebug = True
game.idebug = True
elif switch == '-c': # Enable curses debugging - undocumented
game.cdebug = True
- elif switch == '-V':
+ elif switch == '-V':
# pragma: no cover
print("SST2K", version)
raise SystemExit(0)
print("SST2K", version)
raise SystemExit(0)
- else:
+ else:
# pragma: no cover
sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n")
raise SystemExit(1)
# where to save the input in case of bugs
sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n")
raise SystemExit(1)
# where to save the input in case of bugs
- if "TMPDIR" in os.environ:
+ if "TMPDIR" in os.environ:
# pragma: no cover
tmpdir = os.environ['TMPDIR']
else:
tmpdir = "/tmp"
try:
logfp = open(os.path.join(tmpdir, "sst-input.log"), "w")
tmpdir = os.environ['TMPDIR']
else:
tmpdir = "/tmp"
try:
logfp = open(os.path.join(tmpdir, "sst-input.log"), "w")
- except IOError:
+ except IOError:
# pragma: no cover
sys.stderr.write("sst: warning, can't open logfile\n")
sys.exit(1)
if logfp:
sys.stderr.write("sst: warning, can't open logfile\n")
sys.exit(1)
if logfp:
@@
-6886,7
+6890,7
@@
if __name__ == '__main__':
finally:
ioend()
raise SystemExit(0)
finally:
ioend()
raise SystemExit(0)
- except KeyboardInterrupt:
+ except KeyboardInterrupt:
# pragma: no cover
if logfp:
logfp.close()
print("")
if logfp:
logfp.close()
print("")