-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
sst.py -- Super Star Trek 2K
# Runs under Python 2 an Python 3. Preserve this property!
# SPDX-License-Identifier: BSD-2-clause
+# pylint: disable=line-too-long,superfluous-parens,too-many-lines,invalid-name,missing-function-docstring,missing-class-docstring,multiple-statements,too-many-branches,too-many-statements,too-many-locals,too-many-nested-blocks,too-many-return-statements,too-many-instance-attributes,global-statement,no-else-break,no-else-return,no-else-continue,too-few-public-methods,too-many-boolean-expressions,consider-using-f-string,consider-using-enumerate,consider-using-with,unspecified-encoding
+
+# pylint: disable=multiple-imports
import os, sys, math, curses, time, pickle, copy, gettext, getpass
import getopt, socket, locale
import codecs
# This import only works on Unixes. The intention is to enable
# Ctrl-P, Ctrl-N, and friends in Cmd.
try:
+ # pylint: disable=unused-import
import readline
except ImportError:
pass
except NameError:
my_input = input
-version = "2.5"
+version = "2.7"
docpath = (".", "doc/", "/usr/share/doc/sst/")
nsteps = abs(int(motion))
if motion > 0 and nsteps > mdist:
nsteps = mdist # don't overshoot
- if nsteps > QUADSIZE:
- nsteps = QUADSIZE # This shouldn't be necessary
- if nsteps < 1:
- nsteps = 1 # This shouldn't be necessary
+ nsteps = min(nsteps, QUADSIZE) # This shouldn't be necessary
+ nsteps = max(nsteps, 1) # This shouldn't be necessary
if game.idebug:
proutn("NSTEPS = %d:" % nsteps)
# Compute preferred values of delta X and Y
elif (game.options & OPTION_RAMMING) and game.quad[look.i][look.j] != '.':
# See if enemy should ram ship
if game.quad[look.i][look.j] == game.ship and \
- (enemy.type == 'C' or enemy.type == 'S'):
+ enemy.type in ('C', 'S'):
collision(rammed=True, enemy=enemy)
return []
if krawli != m.i and m.j != 0:
damagereport()
else:
finish(FWON)
- return
def torpedo(origin, bearing, dispersion, number, nburst):
"Let a photon torpedo fly"
bumpto = displacement.sector()
if not bumpto.valid_sector():
prout(_(" damaged but not destroyed."))
- return
+ return None
if game.quad[bumpto.i][bumpto.j] == ' ':
prout(_(" buffeted into black hole."))
deadkl(w, iquad, bumpto)
propor = pfac * game.shield
if game.condition == "docked":
propor *= 2.1
- if propor < 0.1:
- propor = 0.1
+ propor = max(propor, 0.1)
hitsh = propor*chgfac*hit+1.0
absorb = 0.8*hitsh
if absorb > game.shield:
return
continue
else: # decide whether or not to emasculate klingon
+ # pylint: disable=chained-comparison
if kpow > 0 and rnd.withprob(0.9) and kpow <= rnd.real(0.4, 0.8)*kpini:
prout(_("***Mr. Spock- \"Captain, the vessel at Sector %s")%w)
prout(_(" has just lost its firepower.\""))
for nq.i in range(GALSIZE):
for nq.j in range(GALSIZE):
nstars += game.state.galaxy[nq.i][nq.j].stars
- if stars == 0:
+ if nstars == 0:
return # nothing to supernova exists
num = rnd.integer(nstars) + 1
for nq.i in range(GALSIZE):
proutn("=== Super nova here?")
if ja():
nq = game.quadrant
- if not nq == game.quadrant or game.justin:
+ if nq != game.quadrant or game.justin:
# it isn't here, or we just entered (treat as enroute)
if communicating():
skip(1)
if game.quadrant == nq or communicating():
game.state.galaxy[nq.i][nq.j].supernova = True
# If supernova destroys last Klingons give special message
- if game.unwon()==0 and not nq == game.quadrant:
+ if game.unwon()==0 and nq != game.quadrant:
skip(2)
if w is None:
prout(_("Lucky you!"))
else:
skip(1)
proutn(_("Torpedo track- "))
- elif step==4 or step==9:
+ elif step in {4, 9}:
skip(1)
proutn("%s " % w)
else:
if i != 0 and step == 1:
drawmaps(2)
time.sleep(0.4)
- if (iquad=='.') or (iquad==' '):
+ if iquad in {'.', ' '}:
put_srscan_sym(w, '+')
#sound(step*10)
#time.sleep(0.1)
newcnd()
drawmaps(0)
setwnd(message_window)
- return
def dock(verbose):
"Dock our ship at a starbase."
def report():
# report on general game status
scanner.chew()
+ # pylint: disable=consider-using-ternary
s1 = (game.thawed and _("thawed ")) or ""
s2 = {1:"short", 2:"medium", 4:"long"}[game.length]
s3 = (None, _("novice"), _("fair"),
'T':LIGHTRED,
'@':LIGHTGREEN,
'P':LIGHTGREEN,
- '?':MAGENTA,
}.get(game.quad[i][j], DEFAULT))
proutn("%c " % game.quad[i][j])
textcolor(DEFAULT)
prout(_("We'll never make it, sir."))
scanner.chew()
return
- if twarp < 1.0:
- twarp = 1.0
+ twarp = max(twarp, 1.0)
break
scanner.chew()
proutn(_("Warp factor? "))
# Position ordinary Klingon Battle Cruisers
krem = game.inkling
klumper = 0.25*game.skill*(9.0-game.length)+1.0
- if klumper > MAXKLQUAD:
- klumper = MAXKLQUAD
+ klumper = min(klumper, MAXKLQUAD)
while True:
r = rnd.real()
klump = int((1.0 - r*r)*klumper)
- if klump > krem:
- klump = krem
+ klump = min(klump, krem)
krem -= klump
while True:
w = randplace(GALSIZE)
proutn(legends[i])
if is_scheduled(i):
proutn("%.2f" % (scheduled(i)-game.state.date))
- if i == FENSLV or i == FREPRO:
+ if i in {FENSLV, FREPRO}:
ev = findevent(i)
proutn(" in %s" % ev.quadrant)
else:
scanner.chew()
elif key == "IHREAL":
ev = schedule(i, scanner.real)
- if i == FENSLV or i == FREPRO:
+ if i in {FENSLV, FREPRO}:
scanner.chew()
proutn("In quadrant- ")
key = scanner.nexttok()
replay = False
for (switch, val) in options:
if switch == '-r':
+ # pylint: disable=raise-missing-from
try:
replayfp = open(val, "r")
except IOError:
sys.stderr.write("sst: can't open replay file %s\n" % val)
raise SystemExit(1)
+ # pylint: disable=raise-missing-from
try:
line = replayfp.readline().strip()
(leader, __, seed) = line.split()
+ # pylint: disable=eval-used
seed = eval(seed)
line = replayfp.readline().strip()
arguments += line.split()[2:]