X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=f2b0bd0ec2bf70eb6ae6e6c6eb65013a58cff59c;hp=bd01149621a1f10e24d6386883d9e0f3dbab4b13;hb=ec0c6c4b54b2eac3f1de1768dd342d2ed1390f6f;hpb=31cf20ac304a2737e17dbe87b1f3933b1b2f0ad7 diff --git a/src/sst.py b/src/sst.py index bd01149..f2b0bd0 100644 --- a/src/sst.py +++ b/src/sst.py @@ -1267,12 +1267,12 @@ def torpedo(origin, bearing, dispersion, number, nburst): setwnd(srscan_window) else: setwnd(message_window) - shoved = False 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)) - jw = coord(0, 0) + bumpto = coord(0, 0) # Loop to move a single torpedo + setwnd(message_window) for step in range(1, QUADSIZE*2): track.next() w = track.sector() @@ -1283,16 +1283,14 @@ def torpedo(origin, bearing, dispersion, number, nburst): if iquad==IHDOT: continue # hit something - setwnd(message_window) if damaged(DSRSENS) and not game.condition=="docked": skip(1); # start new line after text track if iquad in (IHE, IHF): # Hit our ship skip(1) prout(_("Torpedo hits %s.") % crmshp()) hit = 700.0 + randreal(100) - \ - 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-angle)) + 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-track.angle)) newcnd(); # we're blown out of dock - # We may be displaced. if game.landed or game.condition=="docked": return hit # Cheat if on a planet ang = track.angle + 2.5*(randreal()-0.5) @@ -1301,19 +1299,25 @@ def torpedo(origin, bearing, dispersion, number, nburst): temp = math.fabs(math.cos(ang)) xx = -math.sin(ang)/temp yy = math.cos(ang)/temp - jw.i = int(w.i+xx+0.5) - jw.j = int(w.j+yy+0.5) - if not jw.valid_sector(): + bumpto.i = int(w.i+xx+0.5) + bumpto.j = int(w.j+yy+0.5) + if not bumpto.valid_sector(): return hit - if game.quad[jw.i][jw.j]==IHBLANK: + if game.quad[bumpto.i][bumpto.j]==IHBLANK: finish(FHOLE) return hit - if game.quad[jw.i][jw.j]!=IHDOT: + if game.quad[bumpto.i][bumpto.j]!=IHDOT: # can't move into object return hit - game.sector = jw + game.sector = bumpto proutn(crmshp()) - shoved = True + game.quad[w.i][w.j]=IHDOT + game.quad[bumpto.i][bumpto.j]=iquad + prout(_(" displaced by blast to Sector %s ") % bumpto) + for enemy in game.enemies: + enemy.kdist = enemy.kavgd = (game.sector-enemy.kloc).distance() + game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)) + return None elif iquad in (IHC, IHS, IHR, IHK): # Hit a regular enemy # find the enemy if iquad in (IHC, IHS) and withprob(0.05): @@ -1344,22 +1348,28 @@ def torpedo(origin, bearing, dispersion, number, nburst): temp = math.fabs(math.cos(ang)) xx = -math.sin(ang)/temp yy = math.cos(ang)/temp - jw.i = int(w.i+xx+0.5) - jw.j = int(w.j+yy+0.5) - if not jw.valid_sector(): + bumpto.i = int(w.i+xx+0.5) + bumpto.j = int(w.j+yy+0.5) + if not bumpto.valid_sector(): prout(_(" damaged but not destroyed.")) return - if game.quad[jw.i][jw.j]==IHBLANK: + if game.quad[bumpto.i][bumpto.j] == IHBLANK: prout(_(" buffeted into black hole.")) - deadkl(w, iquad, jw) + deadkl(w, iquad, bumpto) return None - if game.quad[jw.i][jw.j]!=IHDOT: + if game.quad[bumpto.i][bumpto.j] != IHDOT: # can't move into object prout(_(" damaged but not destroyed.")) return None proutn(_(" damaged--")) - enemy.kloc = jw - shoved = True + enemy.kloc = bumpto + game.quad[w.i][w.j]=IHDOT + game.quad[bumpto.i][bumpto.j]=iquad + prout(_(" displaced by blast to Sector %s ") % bumpto) + for enemy in game.enemies: + enemy.kdist = enemy.kavgd = (game.sector-enemy.kloc).distance() + game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)) + return None break elif iquad == IHB: # Hit a base skip(1) @@ -1456,16 +1466,6 @@ def torpedo(origin, bearing, dispersion, number, nburst): skip(1) return None break - if curwnd!=message_window: - setwnd(message_window) - if shoved: - game.quad[w.i][w.j]=IHDOT - game.quad[jw.i][jw.j]=iquad - prout(_(" displaced by blast to Sector %s ") % jw) - for ll in range(len(game.enemies)): - game.enemies[ll].kdist = game.enemies[ll].kavgd = (game.sector-game.enemies[ll].kloc).distance() - game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist)) - return None skip(1) prout(_("Torpedo missed.")) return None;