projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use object methods for vector calculations.
[super-star-trek.git]
/
src
/
sst.py
diff --git
a/src/sst.py
b/src/sst.py
index e4681e29b3331e42bee6e21551911d26d89f9149..c0a647c9924430a3bfae55c553fd8aeb31d7641a 100644
(file)
--- a/
src/sst.py
+++ b/
src/sst.py
@@
-206,11
+206,6
@@
MAXBURST = 3
def VALID_QUADRANT(x, y): return ((x)>=0 and (x)<GALSIZE and (y)>=0 and (y)<GALSIZE)
def VALID_SECTOR(x, y): return ((x)>=0 and (x)<QUADSIZE and (y)>=0 and (y)<QUADSIZE)
def VALID_QUADRANT(x, y): return ((x)>=0 and (x)<GALSIZE and (y)>=0 and (y)<GALSIZE)
def VALID_SECTOR(x, y): return ((x)>=0 and (x)<QUADSIZE and (y)>=0 and (y)<QUADSIZE)
-def square(i): return ((i)*(i))
-def distance(c1, c2): return math.sqrt(square(c1.x - c2.x) + square(c1.y - c2.y))
-def invalidate(w): w.x = w.y = 0
-def is_valid(w): return (w.x != 0 and w.y != 0)
-
# How to represent features
IHR = 'R',
IHK = 'K',
# How to represent features
IHR = 'R',
IHK = 'K',
@@
-249,7
+244,12
@@
class coord:
return coord(self.x+self.x, self.y+self.y)
def __sub__(self, other):
return coord(self.x-other.x, self.y-other.y)
return coord(self.x+self.x, self.y+self.y)
def __sub__(self, other):
return coord(self.x-other.x, self.y-other.y)
- def distance(self, other):
+ def __mul__(self, other):
+ return coord(self.x*other, self.y*other)
+ def __rmul__(self, other):
+ return coord(self.x*other, self.y*other)
+ def distance(self, other=None):
+ if not other: other = coord(0, 0)
return math.sqrt((self.x - other.x)**2 + (self.y - other.y)**2)
def sgn(self):
s = coord()
return math.sqrt((self.x - other.x)**2 + (self.y - other.y)**2)
def sgn(self):
s = coord()
@@
-262,6
+262,8
@@
class coord:
else:
s.y = self.y / abs(self.y)
return s
else:
s.y = self.y / abs(self.y)
return s
+ def course(self):
+ return 1.90985*math.atan2(self.y, self.x)
def scatter(self):
s = coord()
s.x = self.x + randrange(-1, 2)
def scatter(self):
s = coord()
s.x = self.x + randrange(-1, 2)
@@
-435,7
+437,7
@@
class enemy:
if loc:
self.kloc = copy.copy(loc)
game.quad[self.kloc.x][self.kloc.y] = self.type
if loc:
self.kloc = copy.copy(loc)
game.quad[self.kloc.x][self.kloc.y] = self.type
- self.kdist = self.kavgd =
distance(game.sector, loc
)
+ self.kdist = self.kavgd =
(game.sector - loc).distance(
)
else:
self.kloc = coord()
self.kdist = self.kavgd = None
else:
self.kloc = coord()
self.kdist = self.kavgd = None
@@
-602,9
+604,9
@@
def randrange(*args):
def randreal(*args):
v = random.random()
if len(args) == 1:
def randreal(*args):
v = random.random()
if len(args) == 1:
- v *= args[0] # returns from [0, a
1
)
+ v *= args[0] # returns from [0, a
rgs[0]
)
elif len(args) == 2:
elif len(args) == 2:
- v = args[0] + v*
args[1] # returns from [a1, a2
)
+ v = args[0] + v*
(args[1]-args[0]) # returns from [args[0], args[1]
)
#logfp.write("# randreal%s -> %s at %s\n" % (args, v, traceback.extract_stack()[-2][1:]))
return v
#logfp.write("# randreal%s -> %s at %s\n" % (args, v, traceback.extract_stack()[-2][1:]))
return v
@@
-741,9
+743,9
@@
def movebaddy(enemy):
motion = ((forces + randreal(200))/150.0) - 5.0
else:
if forces > 1000.0: # Very strong -- move in for kill
motion = ((forces + randreal(200))/150.0) - 5.0
else:
if forces > 1000.0: # Very strong -- move in for kill
- motion = (1.0
-square(randreal()))*
dist1 + 1.0
+ motion = (1.0
- randreal())**2 *
dist1 + 1.0
if game.condition=="docked" and (game.options & OPTION_BASE): # protected by base -- back off !
if game.condition=="docked" and (game.options & OPTION_BASE): # protected by base -- back off !
- motion -= game.skill*(2.0-
square(randreal())
)
+ motion -= game.skill*(2.0-
randreal()**2
)
if idebug:
proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
# don't move if no motion
if idebug:
proutn("=== MOTION = %d, FORCES = %1.2f, " % (motion, forces))
# don't move if no motion
@@
-947,7
+949,7
@@
def supercommander():
return
sc = game.state.kscmdr
for i in range(game.state.rembase):
return
sc = game.state.kscmdr
for i in range(game.state.rembase):
- basetbl.append((i,
distance(game.state.baseq[i], sc
)))
+ basetbl.append((i,
(game.state.baseq[i] - sc).distance(
)))
if game.state.rembase > 1:
basetbl.sort(lambda x, y: cmp(x[1]. y[1]))
# look for nearest base without a commander, no Enterprise, and
if game.state.rembase > 1:
basetbl.sort(lambda x, y: cmp(x[1]. y[1]))
# look for nearest base without a commander, no Enterprise, and
@@
-1073,7
+1075,7
@@
def movetholian():
while here.x != id.x:
#print "Moving in X", delta
here.x += delta.x
while here.x != id.x:
#print "Moving in X", delta
here.x += delta.x
- if game.quad[here.
kloc.
x][here.y]==IHDOT:
+ if game.quad[here.x][here.y]==IHDOT:
game.tholian.move(here)
# move in y axis
while here.y != id.y:
game.tholian.move(here)
# move in y axis
while here.y != id.y:
@@
-1114,7
+1116,6
@@
def doshield(shraise):
if scanner.sees("transfer"):
action = "NRG"
else:
if scanner.sees("transfer"):
action = "NRG"
else:
- scanner.chew()
if damaged(DSHIELD):
prout(_("Shields damaged and down."))
return
if damaged(DSHIELD):
prout(_("Shields damaged and down."))
return
@@
-1336,7
+1337,7
@@
def torpedo(course, dispersion, origin, number, nburst):
if not VALID_SECTOR(w.x, w.y):
break
iquad=game.quad[w.x][w.y]
if not VALID_SECTOR(w.x, w.y):
break
iquad=game.quad[w.x][w.y]
- tracktorpedo(w, step, number, nburst, iquad)
+ tracktorpedo(
origin,
w, step, number, nburst, iquad)
if iquad==IHDOT:
continue
# hit something
if iquad==IHDOT:
continue
# hit something
@@
-1349,7
+1350,7
@@
def torpedo(course, dispersion, origin, number, nburst):
crmshp()
prout(".")
hit = 700.0 + randreal(100) - \
crmshp()
prout(".")
hit = 700.0 + randreal(100) - \
- 1000.0 *
distance(w, origin
) * math.fabs(math.sin(bullseye-angle))
+ 1000.0 *
(w-origin).distance(
) * math.fabs(math.sin(bullseye-angle))
newcnd(); # we're blown out of dock
# We may be displaced.
if game.landed or game.condition=="docked":
newcnd(); # we're blown out of dock
# We may be displaced.
if game.landed or game.condition=="docked":
@@
-1386,7
+1387,7
@@
def torpedo(course, dispersion, origin, number, nburst):
break
kp = math.fabs(e.kpower)
h1 = 700.0 + randrange(100) - \
break
kp = math.fabs(e.kpower)
h1 = 700.0 + randrange(100) - \
- 1000.0 *
distance(w, origin
) * math.fabs(math.sin(bullseye-angle))
+ 1000.0 *
(w-origin).distance(
) * math.fabs(math.sin(bullseye-angle))
h1 = math.fabs(h1)
if kp < h1:
h1 = kp
h1 = math.fabs(h1)
if kp < h1:
h1 = kp
@@
-1444,7
+1445,7
@@
def torpedo(course, dispersion, origin, number, nburst):
game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None
game.iplnet.pclass = "destroyed"
game.iplnet = None
game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None
game.iplnet.pclass = "destroyed"
game.iplnet = None
-
invalidate(game.plnet
)
+
game.plnet.invalidate(
)
game.quad[w.x][w.y] = IHDOT
if game.landed:
# captain perishes on planet
game.quad[w.x][w.y] = IHDOT
if game.landed:
# captain perishes on planet
@@
-1457,7
+1458,7
@@
def torpedo(course, dispersion, origin, number, nburst):
game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None
game.iplnet.pclass = "destroyed"
game.iplnet = None
game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None
game.iplnet.pclass = "destroyed"
game.iplnet = None
-
invalidate(game.plnet
)
+
game.plnet.invalidate(
)
game.quad[w.x][w.y] = IHDOT
if game.landed:
# captain perishes on planet
game.quad[w.x][w.y] = IHDOT
if game.landed:
# captain perishes on planet
@@
-1503,7
+1504,7
@@
def torpedo(course, dispersion, origin, number, nburst):
return None
elif iquad == IHT: # Hit a Tholian
h1 = 700.0 + randrange(100) - \
return None
elif iquad == IHT: # Hit a Tholian
h1 = 700.0 + randrange(100) - \
- 1000.0 *
distance(w, origin
) * math.fabs(math.sin(bullseye-angle))
+ 1000.0 *
(w-origin).distance(
) * math.fabs(math.sin(bullseye-angle))
h1 = math.fabs(h1)
if h1 >= 600:
game.quad[w.x][w.y] = IHDOT
h1 = math.fabs(h1)
if h1 >= 600:
game.quad[w.x][w.y] = IHDOT
@@
-1534,7
+1535,7
@@
def torpedo(course, dispersion, origin, number, nburst):
game.quad[jw.x][jw.y]=iquad
prout(_(" displaced by blast to Sector %s ") % jw)
for ll in range(len(game.enemies)):
game.quad[jw.x][jw.y]=iquad
prout(_(" displaced by blast to Sector %s ") % jw)
for ll in range(len(game.enemies)):
- game.enemies[ll].kdist = game.enemies[ll].kavgd =
distance(game.sector,game.enemies[ll].kloc
)
+ 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)
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist))
return None
skip(1)
@@
-1562,7
+1563,7
@@
def fry(hit):
for (i, j) in enumerate(cdam):
proutn(device[j])
if skipcount % 3 == 2 and i < len(cdam)-1:
for (i, j) in enumerate(cdam):
proutn(device[j])
if skipcount % 3 == 2 and i < len(cdam)-1:
- skip()
+ skip(
1
)
skipcount += 1
if i < len(cdam)-1:
proutn(_(" and "))
skipcount += 1
if i < len(cdam)-1:
proutn(_(" and "))
@@
-1630,7
+1631,7
@@
def attack(torps_ok):
hit = enemy.kpower*math.pow(dustfac,enemy.kavgd)
enemy.kpower *= 0.75
else: # Enemy uses photon torpedo
hit = enemy.kpower*math.pow(dustfac,enemy.kavgd)
enemy.kpower *= 0.75
else: # Enemy uses photon torpedo
- course =
1.90985*math.atan2(game.sector.y-enemy.kloc.y, enemy.kloc.x-game.sector.x
)
+ course =
(enemy.kloc - game.sector).course(
)
hit = 0
proutn(_("***TORPEDO INCOMING"))
if not damaged(DSRSENS):
hit = 0
proutn(_("***TORPEDO INCOMING"))
if not damaged(DSRSENS):
@@
-1780,16
+1781,15
@@
def targetcheck(w):
if not VALID_SECTOR(w.x, w.y):
huh()
return None
if not VALID_SECTOR(w.x, w.y):
huh()
return None
- deltx = 0.1*(w.y - game.sector.y)
- delty = 0.1*(w.x - game.sector.x)
- if deltx==0 and delty== 0:
+ delt = 0.1*(w - game.sector)
+ if delt.x==0 and delt.y==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
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
1.90985932*math.atan2(deltx, delty
)
+ return
delt.course(
)
def photon():
# launch photon torpedo
def photon():
# launch photon torpedo
@@
-1844,17
+1844,17
@@
def photon():
if key != IHREAL:
huh()
return
if key != IHREAL:
huh()
return
- targ[i].x = scanner.
real
+ targ[i].x = scanner.
int()
key = scanner.next()
if key != IHREAL:
huh()
return
key = scanner.next()
if key != IHREAL:
huh()
return
- targ[i].y = scanner.
real
+ targ[i].y = scanner.
int()
course[i] = targetcheck(targ[i])
if course[i] == None:
return
scanner.chew()
course[i] = targetcheck(targ[i])
if course[i] == None:
return
scanner.chew()
- if i ==
1
and key == IHEOL:
+ if i ==
0
and key == IHEOL:
# prompt for each one
for i in range(n):
proutn(_("Target sector for torpedo number %d- ") % (i+1))
# prompt for each one
for i in range(n):
proutn(_("Target sector for torpedo number %d- ") % (i+1))
@@
-1862,12
+1862,12
@@
def photon():
if key != IHREAL:
huh()
return
if key != IHREAL:
huh()
return
- targ[i].x =
int(scanner.real-0.5
)
+ targ[i].x =
scanner.int(
)
key = scanner.next()
if key != IHREAL:
huh()
return
key = scanner.next()
if key != IHREAL:
huh()
return
- targ[i].y =
int(scanner.real-0.5
)
+ targ[i].y =
scanner.int(
)
scanner.chew()
course[i] = targetcheck(targ[i])
if course[i] == None:
scanner.chew()
course[i] = targetcheck(targ[i])
if course[i] == None:
@@
-1949,6
+1949,7
@@
def hittem(hits):
nenhr2 = len(game.enemies); kk=0
w = coord()
skip(1)
nenhr2 = len(game.enemies); kk=0
w = coord()
skip(1)
+ print "Hits are:", hits
for (k, wham) in enumerate(hits):
if wham==0:
continue
for (k, wham) in enumerate(hits):
if wham==0:
continue
@@
-2161,7
+2162,7
@@
def phasers():
msgflag = False
rpow = 0.0
if damaged(DSRSENS) and \
msgflag = False
rpow = 0.0
if damaged(DSRSENS) and \
-
not game.sector.distance(aim)<
2**0.5 and ienm in (IHC, IHS):
+
(aim-game.sector).distance()>
2**0.5 and ienm in (IHC, IHS):
cramen(ienm)
prout(_(" can't be located without short range scan."))
scanner.chew()
cramen(ienm)
prout(_(" can't be located without short range scan."))
scanner.chew()
@@
-2371,7
+2372,7
@@
def events():
game.battle = hold
game.isatb = 0
else:
game.battle = hold
game.isatb = 0
else:
-
invalidate(game.battle
)
+
game.battle.invalidate(
)
if idebug:
prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
if idebug:
prout("=== EVENTS from %.2f to %.2f:" % (game.state.date, fintim))
@@
-2468,7
+2469,7
@@
def events():
(game.torps < 5 or damaged(DPHOTON))):
# Tractor-beam her!
istract = ictbeam = True
(game.torps < 5 or damaged(DPHOTON))):
# Tractor-beam her!
istract = ictbeam = True
- tractorbeam(
distance(game.state.kscmdr, game.quadrant
))
+ tractorbeam(
(game.state.kscmdr-game.quadrant).distance(
))
else:
return
elif evcode == FTBEAM: # Tractor beam
else:
return
elif evcode == FTBEAM: # Tractor beam
@@
-2476,7
+2477,7
@@
def events():
unschedule(FTBEAM)
continue
i = randrange(game.state.remcom)
unschedule(FTBEAM)
continue
i = randrange(game.state.remcom)
- yank =
distance(game.state.kcmdr[i], game.quadrant
)
+ yank =
(game.state.kcmdr[i]-game.quadrant).distance(
)
if istract or game.condition == "docked" or yank == 0:
# Drats! Have to reschedule
schedule(FTBEAM,
if istract or game.condition == "docked" or yank == 0:
# Drats! Have to reschedule
schedule(FTBEAM,
@@
-2543,7
+2544,7
@@
def events():
if i > game.state.remcom or game.state.rembase == 0 or \
not game.state.galaxy[game.battle.x][game.battle.y].starbase:
# No action to take after all
if i > game.state.remcom or game.state.rembase == 0 or \
not game.state.galaxy[game.battle.x][game.battle.y].starbase:
# No action to take after all
-
invalidate(game.battle
)
+
game.battle.invalidate(
)
continue
destroybase()
elif evcode == FSCMOVE: # Supercommander moves
continue
destroybase()
elif evcode == FSCMOVE: # Supercommander moves
@@
-2803,7
+2804,7
@@
def nova(nov):
prout(_(" destroyed."))
game.iplnet.pclass = "destroyed"
game.iplnet = None
prout(_(" destroyed."))
game.iplnet.pclass = "destroyed"
game.iplnet = None
-
invalidate(game.plnet
)
+
game.plnet.invalidate(
)
if game.landed:
finish(FPNOVA)
return
if game.landed:
finish(FPNOVA)
return
@@
-2815,7
+2816,7
@@
def nova(nov):
break
game.state.baseq[i] = game.state.baseq[game.state.rembase]
game.state.rembase -= 1
break
game.state.baseq[i] = game.state.baseq[game.state.rembase]
game.state.rembase -= 1
-
invalidate(game.base
)
+
game.base.invalidate(
)
game.state.basekl += 1
newcnd()
crmena(True, IHB, "sector", neighbor)
game.state.basekl += 1
newcnd()
crmena(True, IHB, "sector", neighbor)
@@
-2936,13
+2937,12
@@
def supernova(induced, w=None):
prouts(_("***RED ALERT! RED ALERT!"))
skip(1)
prout(_("***Incipient supernova detected at Sector %s") % ns)
prouts(_("***RED ALERT! RED ALERT!"))
skip(1)
prout(_("***Incipient supernova detected at Sector %s") % ns)
- if
square(ns.x-game.sector.x) + square(ns.y-game.sector.y) <= 2.1
:
+ if
(ns-game - sector).distance() <= 2.1**0.5
:
proutn(_("Emergency override attempts t"))
prouts("***************")
skip(1)
stars()
game.alldone = True
proutn(_("Emergency override attempts t"))
prouts("***************")
skip(1)
stars()
game.alldone = True
-
# destroy any Klingons in supernovaed quadrant
kldead = game.state.galaxy[nq.x][nq.y].klingons
game.state.galaxy[nq.x][nq.y].klingons = 0
# destroy any Klingons in supernovaed quadrant
kldead = game.state.galaxy[nq.x][nq.y].klingons
game.state.galaxy[nq.x][nq.y].klingons = 0
@@
-2952,17
+2952,13
@@
def supernova(induced, w=None):
game.iscate = False
unschedule(FSCMOVE)
unschedule(FSCDBAS)
game.iscate = False
unschedule(FSCMOVE)
unschedule(FSCDBAS)
- if game.state.remcom:
- maxloop = game.state.remcom
- for l in range(maxloop):
- if game.state.kcmdr[l] == nq:
- game.state.kcmdr[l] = game.state.kcmdr[game.state.remcom]
- invalidate(game.state.kcmdr[game.state.remcom])
- game.state.remcom -= 1
- kldead -= 1
- if game.state.remcom==0:
- unschedule(FTBEAM)
- break
+ survivors = filter(lambda w: w != nq, game.state.kcmdr)
+ comkills = len(game.state.kcmdr) - len(survivors)
+ game.state.kcmdr = survivors
+ kldead -= comkills
+ game.state.remcom -= comkills
+ if game.state.remcom==0:
+ unschedule(FTBEAM)
game.state.remkl -= kldead
# destroy Romulans and planets in supernovaed quadrant
nrmdead = game.state.galaxy[nq.x][nq.y].romulans
game.state.remkl -= kldead
# destroy Romulans and planets in supernovaed quadrant
nrmdead = game.state.galaxy[nq.x][nq.y].romulans
@@
-2979,7
+2975,7
@@
def supernova(induced, w=None):
for loop in range(maxloop):
if game.state.baseq[loop] == nq:
game.state.baseq[loop] = game.state.baseq[game.state.rembase]
for loop in range(maxloop):
if game.state.baseq[loop] == nq:
game.state.baseq[loop] = game.state.baseq[game.state.rembase]
-
invalidate(game.state.baseq[game.state.rembase]
)
+
game.state.baseq[game.state.rembase].invalidate(
)
game.state.rembase -= 1
break
# If starship caused supernova, tally up destruction
game.state.rembase -= 1
break
# If starship caused supernova, tally up destruction
@@
-3707,13
+3703,13
@@
def warble():
#nosound()
pass
#nosound()
pass
-def tracktorpedo(w, step, i, n, iquad):
+def tracktorpedo(
origin,
w, step, i, n, iquad):
"Torpedo-track animation."
if not game.options & OPTION_CURSES:
if step == 1:
if n != 1:
skip(1)
"Torpedo-track animation."
if not game.options & OPTION_CURSES:
if step == 1:
if n != 1:
skip(1)
- proutn(_("Track for
torpedo number %d- ") % i
)
+ proutn(_("Track for
%s torpedo number %d- ") % (game.quad[origin.x][origin.y],i+1)
)
else:
skip(1)
proutn(_("Torpedo track- "))
else:
skip(1)
proutn(_("Torpedo track- "))
@@
-3775,16
+3771,16
@@
def imove(novapush):
def no_quad_change():
# No quadrant change -- compute new average enemy distances
game.quad[game.sector.x][game.sector.y] = game.ship
def no_quad_change():
# No quadrant change -- compute new average enemy distances
game.quad[game.sector.x][game.sector.y] = game.ship
- if
len(game.enemies)
:
- for
m in range(len(game.enemies))
:
- finald =
distance(w, game.enemies[m].kloc
)
-
game.enemies[m].kavgd = 0.5 * (finald+game.enemies[m]
.kdist)
-
game.enemies[m]
.kdist = finald
+ if
game.enemies
:
+ for
enemy in game.enemies
:
+ finald =
(w-game.enemy.kloc).distance(
)
+
enemy.kavgd = 0.5 * (finald + ememy
.kdist)
+
enemy
.kdist = finald
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist))
if not game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova:
attack(torps_ok=False)
game.enemies.sort(lambda x, y: cmp(x.kdist, y.kdist))
if not game.state.galaxy[game.quadrant.x][game.quadrant.y].supernova:
attack(torps_ok=False)
- for
m in range(len(game.enemies))
:
-
game.enemies[m].kavgd = game.enemies[m]
.kdist
+ for
enemy in game.enemies
:
+
enemy.kavgd = enemy
.kdist
newcnd()
drawmaps(0)
setwnd(message_window)
newcnd()
drawmaps(0)
setwnd(message_window)
@@
-3823,9
+3819,9
@@
def imove(novapush):
# Don't do it if being pushed by Nova
if len(game.enemies) != 0 and not novapush:
newcnd()
# Don't do it if being pushed by Nova
if len(game.enemies) != 0 and not novapush:
newcnd()
- for
m in range(len(game.enemies))
:
- finald =
distance(w, game.enemies[m].kloc
)
-
game.enemies[m].kavgd = 0.5 * (finald + game.enemies[m]
.kdist)
+ for
enemy in game.enemies
:
+ finald =
(w - enemy.kloc).distance(
)
+
enemy.kavgd = 0.5 * (finald + enemy
.kdist)
#
# Stas Sergeev added the condition
# that attacks only happen if Klingons
#
# Stas Sergeev added the condition
# that attacks only happen if Klingons
@@
-3888,7
+3884,7
@@
def imove(novapush):
if iquad != IHDOT:
# object encountered in flight path
stopegy = 50.0*game.dist/game.optime
if iquad != IHDOT:
# object encountered in flight path
stopegy = 50.0*game.dist/game.optime
- game.dist =
distance(game.sector, w
) / (QUADSIZE * 1.0)
+ game.dist =
(game.sector - w).distance(
) / (QUADSIZE * 1.0)
if iquad in (IHT, IHK, IHC, IHS, IHR, IHQUEST):
game.sector = w
for enemy in game.enemies:
if iquad in (IHT, IHK, IHC, IHS, IHR, IHQUEST):
game.sector = w
for enemy in game.enemies:
@@
-3953,7
+3949,7
@@
def dock(verbose):
if game.inorbit:
prout(_("You must first leave standard orbit."))
return
if game.inorbit:
prout(_("You must first leave standard orbit."))
return
- if not
is_valid(game.base
) or abs(game.sector.x-game.base.x) > 1 or abs(game.sector.y-game.base.y) > 1:
+ if not
game.base.is_valid(
) or abs(game.sector.x-game.base.x) > 1 or abs(game.sector.y-game.base.y) > 1:
crmshp()
prout(_(" not adjacent to base."))
return
crmshp()
prout(_(" not adjacent to base."))
return
@@
-4115,8
+4111,8
@@
def getcourse(isprobe, akey):
skip(1)
prout(_("Helmsman Sulu- \"Aye, Sir.\""))
# Course actually laid in.
skip(1)
prout(_("Helmsman Sulu- \"Aye, Sir.\""))
# Course actually laid in.
- game.dist =
math.sqrt(deltax*deltax + deltay*deltay
)
- game.direc =
math.atan2(deltax, deltay)*1.90985932
+ game.dist =
coord(deltax, deltay).distance(
)
+ game.direc =
coord(deltax, deltay).course()
if game.direc < 0.0:
game.direc += 12.0
scanner.chew()
if game.direc < 0.0:
game.direc += 12.0
scanner.chew()
@@
-4227,7
+4223,7
@@
def warp(timewarp):
if game.warpfac > 6.0:
# Decide if engine damage will occur
# ESR: Seems wrong. Probability of damage goes *down* with distance?
if game.warpfac > 6.0:
# Decide if engine damage will occur
# ESR: Seems wrong. Probability of damage goes *down* with distance?
- prob = game.dist*
square(6.0-game.warpfac)
/66.666666666
+ prob = game.dist*
(6.0-game.warpfac)**2
/66.666666666
if prob > randreal():
blooey = True
game.dist = randreal(game.dist)
if prob > randreal():
blooey = True
game.dist = randreal(game.dist)
@@
-4429,7
+4425,7
@@
def timwrp():
game.isatb = 0
unschedule(FCDBAS)
unschedule(FSCDBAS)
game.isatb = 0
unschedule(FCDBAS)
unschedule(FSCDBAS)
-
invalidate(game.battle
)
+
game.battle.invalidate(
)
# Make sure Galileo is consistant -- Snapshot may have been taken
# when on planet, which would give us two Galileos!
# Make sure Galileo is consistant -- Snapshot may have been taken
# when on planet, which would give us two Galileos!
@@
-4564,11
+4560,11
@@
def mayday():
game.nhelp += 1
if game.base.x!=0:
# There's one in this quadrant
game.nhelp += 1
if game.base.x!=0:
# There's one in this quadrant
- ddist =
distance(game.base, game.sector
)
+ ddist =
(game.base - game.sector).distance(
)
else:
ddist = FOREVER
for m in range(game.state.rembase):
else:
ddist = FOREVER
for m in range(game.state.rembase):
- xdist = QUADSIZE *
distance(game.state.baseq[m], game.quadrant
)
+ xdist = QUADSIZE *
(game.state.baseq[m] - game.quadrant).distance(
)
if xdist < ddist:
ddist = xdist
line = m
if xdist < ddist:
ddist = xdist
line = m
@@
-4587,7
+4583,7
@@
def mayday():
# found one -- finish up
game.sector = w
break
# found one -- finish up
game.sector = w
break
- if not
is_valid(game.sector
):
+ if not
game.sector.is_valid(
):
prout(_("You have been lost in space..."))
finish(FMATERIALIZE)
return
prout(_("You have been lost in space..."))
finish(FMATERIALIZE)
return
@@
-4786,7
+4782,7
@@
def orbit():
if damaged(DWARPEN) and damaged(DIMPULS):
prout(_("Both warp and impulse engines damaged."))
return
if damaged(DWARPEN) and damaged(DIMPULS):
prout(_("Both warp and impulse engines damaged."))
return
- if not
is_valid(game.plnet
) or abs(game.sector.x-game.plnet.x) > 1 or abs(game.sector.y-game.plnet.y) > 1:
+ if not
game.plnet.is_valid(
) or abs(game.sector.x-game.plnet.x) > 1 or abs(game.sector.y-game.plnet.y) > 1:
crmshp()
prout(_(" not adjacent to planet."))
skip(1)
crmshp()
prout(_(" not adjacent to planet."))
skip(1)
@@
-5536,8
+5532,7
@@
def eta():
if not VALID_QUADRANT(w1.x, w1.y) or not VALID_SECTOR(w2.x, w2.y):
huh()
return
if not VALID_QUADRANT(w1.x, w1.y) or not VALID_SECTOR(w2.x, w2.y):
huh()
return
- game.dist = math.sqrt(square(w1.y-game.quadrant.y+0.1*(w2.y-game.sector.y))+
- square(w1.x-game.quadrant.x+0.1*(w2.x-game.sector.x)))
+ game.dist = ((w1 - game.quadrant) + 0.1 * (w2 - game.sector)).distance()
wfl = False
if prompt:
prout(_("Answer \"no\" if you don't know the value:"))
wfl = False
if prompt:
prout(_("Answer \"no\" if you don't know the value:"))
@@
-5568,7
+5563,7
@@
def eta():
prout(_("Captain, certainly you can give me one of these."))
while True:
scanner.chew()
prout(_("Captain, certainly you can give me one of these."))
while True:
scanner.chew()
- ttime = (10.0*game.dist)/
square(twarp)
+ ttime = (10.0*game.dist)/
twarp**2
tpower = game.dist*twarp*twarp*twarp*(game.shldup+1)
if tpower >= game.energy:
prout(_("Insufficient energy, sir."))
tpower = game.dist*twarp*twarp*twarp*(game.shldup+1)
if tpower >= game.energy:
prout(_("Insufficient energy, sir."))
@@
-5832,7
+5827,7
@@
def setup():
# so it did them in the opposite order.
for j in range(1, i):
# Improved placement algorithm to spread out bases
# so it did them in the opposite order.
for j in range(1, i):
# Improved placement algorithm to spread out bases
- distq =
w.distance(game.state.baseq[j]
)
+ distq =
(w - game.state.baseq[j]).distance(
)
if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
contflag = True
if idebug:
if distq < 6.0*(BASEMAX+1-game.inbase) and withprob(0.75):
contflag = True
if idebug:
@@
-5990,7
+5985,7
@@
def choose():
return True
if scanner.sees("regular"):
break
return True
if scanner.sees("regular"):
break
- proutn(_("What is \"%s\"?")
,
scanner.token)
+ proutn(_("What is \"%s\"?")
%
scanner.token)
scanner.chew()
while game.length==0 or game.skill==SKILL_NONE:
if scanner.next() == IHALPHA:
scanner.chew()
while game.length==0 or game.skill==SKILL_NONE:
if scanner.next() == IHALPHA:
@@
-6571,7
+6566,7
@@
class sstscanner:
self.real = 0.0
self.token = ''
# Fill the token quue if nothing here
self.real = 0.0
self.token = ''
# Fill the token quue if nothing here
- while
self.inqueue == Non
e:
+ while
not self.inqueu
e:
line = cgetline()
if curwnd==prompt_window:
clrscr()
line = cgetline()
if curwnd==prompt_window:
clrscr()
@@
-6616,7
+6611,7
@@
class sstscanner:
return s.startswith(self.token)
def int(self):
# Round token value to nearest integer
return s.startswith(self.token)
def int(self):
# Round token value to nearest integer
- return int(round(scanner.real
+ 0.5
))
+ return int(round(scanner.real))
def ja():
# yes-or-no confirmation
def ja():
# yes-or-no confirmation