def __init__(self, etype=None, loc=None, power=None):
self.type = etype
self.location = Coord()
+ self.kdist = None
+ self.kavgd = None
if loc:
self.move(loc)
self.power = power # enemy energy level
self.score = 0.0 # overall score
self.perdate = 0.0 # rate of kills
self.idebug = False # Debugging instrumentation enabled?
+ self.statekscmdr = None # No SuperCommander coordinates yet.
def recompute(self):
# Stas thinks this should be (C expression):
# game.state.remkl + len(game.state.kcmdr) > 0 ?
# He says the existing expression is prone to divide-by-zero errors
# after killing the last klingon when score is shown -- perhaps also
# if the only remaining klingon is SCOM.
- game.state.remtime = game.state.remres/(game.state.remkl + 4*len(game.state.kcmdr))
+ self.state.remtime = self.state.remres/(self.state.remkl + 4*len(self.state.kcmdr))
FWON = 0
FDEPLETE = 1
unschedule(FSCDBAS)
for enemy in game.enemies:
if enemy.type == 'S':
- break
- enemy.move(None)
+ enemy.move(None)
game.klhere -= 1
if game.condition != "docked":
newcnd()
if iquad == '.':
continue
# hit something
- if not damaged(DSRSENS) or game.condition == "docked":
+ setwnd(message_window)
+ if not damaged(DSRSENS) or game.condition == "docked":
skip(1) # start new line after text track
if iquad in ('E', 'F'): # Hit our ship
skip(1)
return None
for enemy in game.enemies:
if w == enemy.location:
- break
- kp = math.fabs(enemy.power)
- h1 = 700.0 + randrange(100) - \
- 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
- h1 = math.fabs(h1)
- if kp < h1:
- h1 = kp
- if enemy.power < 0:
- enemy.power -= -h1
- else:
- enemy.power -= h1
- if enemy.power == 0:
- deadkl(w, iquad, w)
- return None
- proutn(crmena(True, iquad, "sector", w))
- displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5)
- displacement.next()
- bumpto = displacement.sector()
- if not bumpto.valid_sector():
- prout(_(" damaged but not destroyed."))
- return
- if game.quad[bumpto.i][bumpto.j] == ' ':
- prout(_(" buffeted into black hole."))
- deadkl(w, iquad, bumpto)
- if game.quad[bumpto.i][bumpto.j] != '.':
- prout(_(" damaged but not destroyed."))
+ kp = math.fabs(enemy.power)
+ h1 = 700.0 + randrange(100) - \
+ 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle))
+ h1 = math.fabs(h1)
+ if kp < h1:
+ h1 = kp
+ if enemy.power < 0:
+ enemy.power -= -h1
+ else:
+ enemy.power -= h1
+ if enemy.power == 0:
+ deadkl(w, iquad, w)
+ return None
+ proutn(crmena(True, iquad, "sector", w))
+ displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5)
+ displacement.next()
+ bumpto = displacement.sector()
+ if not bumpto.valid_sector():
+ prout(_(" damaged but not destroyed."))
+ return
+ if game.quad[bumpto.i][bumpto.j] == ' ':
+ prout(_(" buffeted into black hole."))
+ deadkl(w, iquad, bumpto)
+ if game.quad[bumpto.i][bumpto.j] != '.':
+ prout(_(" damaged but not destroyed."))
+ else:
+ prout(_(" damaged-- displaced by blast to Sector %s ")%bumpto)
+ enemy.location = bumpto
+ game.quad[w.i][w.j] = '.'
+ game.quad[bumpto.i][bumpto.j] = iquad
+ for enemy in game.enemies:
+ enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
+ sortenemies()
+ break
else:
- prout(_(" damaged-- displaced by blast to Sector %s ")%bumpto)
- enemy.location = bumpto
- game.quad[w.i][w.j] = '.'
- game.quad[bumpto.i][bumpto.j] = iquad
- for enemy in game.enemies:
- enemy.kdist = enemy.kavgd = (game.sector-enemy.location).distance()
- sortenemies()
+ prout("Internal error, no enemy where expected!")
+ raise SystemExit, 1
return None
elif iquad == 'B': # Hit a base
skip(1)
"Register a phaser hit on Klingons and Romulans."
w = Coord()
skip(1)
- for (kk, wham) in enumerate(hits):
+ kk = 0
+ for wham in hits:
if wham == 0:
continue
dustfac = randreal(0.9, 1.0)
else:
prout(_("(Shields not currently useable.)"))
newqad()
- # Adjust finish time to time of tractor beaming
- fintim = game.state.date+game.optime
+ # Adjust finish time to time of tractor beaming?
+ # fintim = game.state.date+game.optime
attack(torps_ok=False)
if not game.state.kcmdr:
unschedule(FTBEAM)
if iquad == 'P':
game.state.nplankl += 1
else:
- game.state.worldkl += 1
+ game.state.nworldkl += 1
prout(crmena(True, 'B', "sector", neighbor) + _(" destroyed."))
game.iplnet.pclass = "destroyed"
game.iplnet = None
global linecount
sys.stdout.write('\n')
proutn(prompt)
- raw_input()
+ if not replayfp:
+ raw_input()
sys.stdout.write('\n' * rows)
linecount = 0
if curwnd == message_window and y >= my - 2:
pause_game()
clrscr()
+ # Uncomment this to debug curses problems
+ if logfp:
+ logfp.write("#curses: at %s proutn(%s)\n" % ((y, x), repr(line)))
curwnd.addstr(line)
curwnd.refresh()
else:
"Change windows -- OK for this to be a no-op in tty mode."
global curwnd
if game.options & OPTION_CURSES:
+ # Uncomment this to debug curses problems
+ if logfp:
+ if wnd == fullscreen_window:
+ legend = "fullscreen"
+ elif wnd == srscan_window:
+ legend = "srscan"
+ elif wnd == report_window:
+ legend = "report"
+ elif wnd == status_window:
+ legend = "status"
+ elif wnd == lrscan_window:
+ legend = "lrscan"
+ elif wnd == message_window:
+ legend = "message"
+ elif wnd == prompt_window:
+ legend = "prompt"
+ else:
+ legend = "unknown"
+ logfp.write("#curses: setwnd(%s)\n" % legend)
curwnd = wnd
- curses.curs_set(wnd == fullscreen_window or wnd == message_window or wnd == prompt_window)
+ # Some curses implementations get confused when you try this.
+ try:
+ curses.curs_set(wnd in (fullscreen_window, message_window, prompt_window))
+ except curses.error:
+ pass
def clreol():
"Clear to end of line -- can be a no-op in tty mode"
game.options |= OPTION_TTY
seed = int(time.time())
(options, arguments) = getopt.getopt(sys.argv[1:], "r:s:txV")
+ replay = False
for (switch, val) in options:
if switch == '-r':
try:
raise SystemExit, 1
try:
line = replayfp.readline().strip()
- (leader, key, seed) = line.split()
+ (leader, __, seed) = line.split()
seed = eval(seed)
sys.stderr.write("sst2k: seed set to %s\n" % seed)
line = replayfp.readline().strip()
arguments += line.split()[2:]
+ replay = True
except ValueError:
sys.stderr.write("sst: replay file %s is ill-formed\n"% val)
raise SystemExit(1)
game.alldone = False
else:
makemoves()
+ if replay:
+ break
skip(1)
stars()
skip(1)