X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=51ad07b53cdf03fa18d9e7a55bad2bddfbb6c357;hp=ce058ef970db6e2fdc9221b7ffc20812e3aedf74;hb=8e7c8e784c1c049639c3c08d93e4c29d4cc4f012;hpb=1e0e43b6390d3608233996167248eadd5c3ac535 diff --git a/src/sst.py b/src/sst.py index ce058ef..51ad07b 100644 --- a/src/sst.py +++ b/src/sst.py @@ -240,9 +240,9 @@ class coord: def is_valid(self): return self.x != None and self.y != None def __eq__(self, other): - return other != None and self.x == other.y and self.x == other.y + return other != None and self.x == other.x and self.y == other.y def __add__(self, other): - return coord(self.x+self.x, self.y+self.y) + return coord(self.x+other.x, self.y+other.y) def __sub__(self, other): return coord(self.x-other.x, self.y-other.y) def __mul__(self, other): @@ -615,10 +615,9 @@ def randreal(*args): def welcoming(iq): "Would this quadrant welcome another Klingon?" return VALID_QUADRANT(iq.x,iq.y) and \ - not game.state.galaxy[iq.x][iq.y].supernova or \ + not game.state.galaxy[iq.x][iq.y].supernova and \ game.state.galaxy[iq.x][iq.y].klingons < MAXKLQUAD - def tryexit(enemy, look, irun): "A bad guy attempts to bug out." iq = coord() @@ -1288,30 +1287,26 @@ def collision(rammed, enemy): finish(FWON) return -def torpedo(course, dispersion, origin, number, nburst): +def torpedo(origin, course, dispersion, number, nburst): "Let a photon torpedo fly" - iquad = 0 shoved = False ac = course + 0.25*dispersion angle = (15.0-ac)*0.5235988 bullseye = (15.0 - course)*0.5235988 - deltax = -math.sin(angle); - deltay = math.cos(angle); + delta = coord(-math.sin(angle), math.cos(angle)) + bigger = max(abs(delta.x), abs(delta.y)) + delta /= bigger x = origin.x; y = origin.y w = coord(0, 0); jw = coord(0, 0) - bigger = max(math.fabs(deltax), math.fabs(deltay)) - deltax /= bigger - deltay /= bigger if not damaged(DSRSENS) or game.condition=="docked": setwnd(srscan_window) else: setwnd(message_window) # Loop to move a single torpedo for step in range(1, 15+1): - x += deltax - w.x = int(x + 0.5) - y += deltay - w.y = int(y + 0.5) + x += delta.x + y += delta.y + w = coord(x, y).snaptogrid() if not VALID_SECTOR(w.x, w.y): break iquad=game.quad[w.x][w.y] @@ -1358,9 +1353,9 @@ def torpedo(course, dispersion, origin, number, nburst): elif iquad in (IHR, IHK): # Hit a regular enemy # find the enemy for enemy in game.enemies: - if w == game.enemies[ll].kloc: + if w == enemy.kloc: break - kp = math.fabs(e.kpower) + kp = math.fabs(enemy.kpower) h1 = 700.0 + randrange(100) - \ 1000.0 * (w-origin).distance() * math.fabs(math.sin(bullseye-angle)) h1 = math.fabs(h1) @@ -1540,7 +1535,7 @@ def fry(hit): def attack(torps_ok): # bad guy attacks us # torps_ok == False forces use of phasers in an attack - # game could be over at this point, check + # game could be over at this point, check if game.alldone: return attempt = False; ihurt = False; @@ -1606,7 +1601,7 @@ def attack(torps_ok): prout(" ") dispersion = (randreal()+randreal())*0.5 - 0.5 dispersion += 0.002*enemy.kpower*dispersion - hit = torpedo(course, dispersion, origin=enemy.kloc, number=1, nburst=1) + hit = torpedo(enemy.kloc, 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.x][game.quadrant.y].supernova or game.alldone: @@ -1737,19 +1732,22 @@ def targetcheck(w): if not VALID_SECTOR(w.x, w.y): huh() return None - delta = 0.1*(w - game.sector) - if delta.x==0 and delta.y== 0: + delta = coord() + # FIXME: C code this was translated from is wacky -- why the sign reversal? + delta.y = (w.y - game.sector.y); + delta.x = (game.sector.x - w.x); + if delta == coord(0, 0): skip(1) prout(_("Spock- \"Bridge to sickbay. Dr. McCoy,")) prout(_(" I recommend an immediate review of")) prout(_(" the Captain's psychological profile.\"")) scanner.chew() return None - return delta.bearing() + return 1.90985932*math.atan2(delta.y, delta.x) def photon(): "Launch photon torpedo." - course = [0.0] * MAXBURST + course = [] game.ididit = False if damaged(DPHOTON): prout(_("Photon tubes damaged.")) @@ -1837,7 +1835,7 @@ def photon(): break if game.shldup or game.condition == "docked": dispersion *= 1.0 + 0.0001*game.shield - torpedo(course[i], dispersion, origin=game.sector, number=i, nburst=n) + torpedo(game.sector, course[i], dispersion, number=i, nburst=n) if game.alldone or game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova: return if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)==0: @@ -3988,12 +3986,12 @@ def getcourse(isprobe, akey): if key != IHREAL: huh() return False - delta.x = scanner.real + delta.y = scanner.real key = scanner.next() if key != IHREAL: huh() return False - delta.y = scanner.real + delta.x = scanner.real # Check for zero movement if delta.x == 0 and delta.y == 0: scanner.chew()