X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=sst.py;h=0b99af03b120071aa807c496700777e0bc7a693a;hp=ee6b58a2347e7f2999c26a10795c15598a5dcc6d;hb=22fe003b558eef0e7ed6be42bb9207ab4567f55c;hpb=c36101676b6d3eff229ca7fe7fcba2729a2791e0 diff --git a/sst.py b/sst.py index ee6b58a..0b99af0 100755 --- a/sst.py +++ b/sst.py @@ -273,6 +273,8 @@ class Enemy: 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 @@ -379,6 +381,7 @@ class Gamestate: 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 ? @@ -698,8 +701,7 @@ def movescom(iq, avoid): 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() @@ -1140,40 +1142,43 @@ def torpedo(origin, bearing, dispersion, number, nburst): 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) @@ -1269,6 +1274,7 @@ def torpedo(origin, bearing, dispersion, number, nburst): return None break skip(1) + setwnd(message_window) prout(_("Torpedo missed.")) return None @@ -1663,7 +1669,8 @@ def hittem(hits): "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) @@ -2048,8 +2055,8 @@ def events(): 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) @@ -3185,7 +3192,8 @@ def pause_game(): global linecount sys.stdout.write('\n') proutn(prompt) - raw_input() + if not replayfp: + raw_input() sys.stdout.write('\n' * rows) linecount = 0 @@ -3286,7 +3294,11 @@ def setwnd(wnd): 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"