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
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 ?
nbaddys = (((game.quadrant in game.state.kcmdr)*2 + (game.state.kscmdr==game.quadrant)*2+game.klhere*1.23+game.irhere*1.5)/2.0)
else:
nbaddys = (game.quadrant in game.state.kcmdr) + (game.state.kscmdr==game.quadrant)
- dist1 = enemy.kdist
- mdist = int(dist1 + 0.5) # Nearest integer distance
+ old_dist = enemy.kdist
+ mdist = int(old_dist + 0.5) # Nearest integer distance
# If SC, check with spy to see if should hi-tail it
if enemy.type == 'S' and \
(enemy.power <= 500.0 or (game.condition=="docked" and not damaged(DPHOTON))):
motion = ((forces + randreal(200))/150.0) - 5.0
else:
if forces > 1000.0: # Very strong -- move in for kill
- motion = (1.0 - randreal())**2 * dist1 + 1.0
+ motion = (1.0 - randreal())**2 * old_dist + 1.0
if game.condition == "docked" and (game.options & OPTION_BASE): # protected by base -- back off !
motion -= game.skill*(2.0-randreal()**2)
if game.idebug:
break # done early
if game.idebug:
skip(1)
- if enemy.move(goto):
- if not damaged(DSRSENS) or game.condition == "docked":
- proutn(_("*** %s from Sector %s") % (cramen(enemy.type), enemy.location))
- if enemy.kdist < dist1:
- proutn(_(" advances to "))
- else:
- proutn(_(" retreats to "))
- prout("Sector %s." % goto)
+ return (enemy, old_dist, goto)
def moveklings():
"Sequence Klingon tactical movement."
prout("== MOVCOM")
# Figure out which Klingon is the commander (or Supercommander)
# and do move
+ tacmoves = []
if game.quadrant in game.state.kcmdr:
for enemy in game.enemies:
if enemy.type == 'C':
- movebaddy(enemy)
+ tacmoves.append(movebaddy(enemy))
if game.state.kscmdr == game.quadrant:
for enemy in game.enemies:
if enemy.type == 'S':
- movebaddy(enemy)
+ tacmoves.append(movebaddy(enemy))
break
# If skill level is high, move other Klingons and Romulans too!
# Move these last so they can base their actions on what the
if game.skill >= SKILL_EXPERT and (game.options & OPTION_MVBADDY):
for enemy in game.enemies:
if enemy.type in ('K', 'R'):
- movebaddy(enemy)
- sortenemies()
+ tacmoves.append(movebaddy(enemy))
+ return tacmoves
def movescom(iq, avoid):
"Commander movement helper."
return None
break
skip(1)
+ setwnd(message_window)
prout(_("Torpedo missed."))
return None
# Select devices and cause damage
cdam = []
while ncrit > 0:
- ncrit -= 1
while True:
j = randdevice()
# Cheat to prevent shuttle damage unless on ship
cdam.append(j)
extradm = (hit*game.damfac)/(ncrit*randreal(75, 100))
game.damage[j] += extradm
+ ncrit -= 1
skipcount = 0
for (i, j) in enumerate(cdam):
proutn(device[j])
return
# commanders get a chance to tac-move towards you
if (((game.quadrant in game.state.kcmdr or game.state.kscmdr == game.quadrant) and not game.justin) or game.skill == SKILL_EMERITUS) and torps_ok:
- moveklings()
+ for (enemy, old_dist, goto) in moveklings():
+ if enemy.move(goto):
+ if not damaged(DSRSENS) or game.condition == "docked":
+ proutn(_("*** %s from Sector %s") % (cramen(enemy.type), enemy.location))
+ if enemy.kdist < old_dist:
+ proutn(_(" advances to "))
+ else:
+ proutn(_(" retreats to "))
+ prout("Sector %s." % goto)
+ sortenemies()
# if no enemies remain after movement, we're done
if len(game.enemies) == 0 or (len(game.enemies) == 1 and thing == game.quadrant and not thing.angered):
return
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)
scanner.chew()
return
# Make sure enough time is left for the trip
- game.optime = course.dist/0.095
+ game.optime = course.distance/0.095
if game.optime >= game.state.remtime:
prout(_("First Officer Spock- \"Captain, our speed under impulse"))
prout(_("power is only 0.95 sectors per stardate. Are you sure"))
game.ididit = True
if game.alldone:
return
- power = 20.0 + 100.0*course.dist
+ power = 20.0 + 100.0*course.distance
game.energy -= power
- game.optime = course.dist/0.095
+ game.optime = course.distance/0.095
if game.energy <= 0:
finish(FNRG)
return
skip(1)
prout(_("Engineering to bridge--"))
if not game.shldup or 0.5*wcourse.power(game.warpfac) > game.energy:
- iwarp = (game.energy/(wcourse.dist+0.05)) ** 0.333333333
+ iwarp = (game.energy/(wcourse.distance+0.05)) ** 0.333333333
if iwarp <= 0:
prout(_("We can't do it, Captain. We don't have enough energy."))
else:
prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"))
# Put in THING if needed
if thing == game.quadrant:
- Enemy(type='?', loc=dropin(),
+ Enemy(etype='?', loc=dropin(),
power=randreal(6000,6500.0)+250.0*game.skill)
if not damaged(DSRSENS):
skip(1)
w.j = withprob(0.5) * (QUADSIZE-1)
if game.quad[w.i][w.j] == '.':
break
- game.tholian = Enemy(type='T', loc=w,
+ game.tholian = Enemy(etype='T', loc=w,
power=randrange(100, 500) + 25.0*game.skill)
# Reserve unoccupied corners
if game.quad[0][0]=='.':
if logfp:
logfp.write("# seed %s\n" % seed)
logfp.write("# options %s\n" % " ".join(arguments))
+ logfp.write("# SST2K version %s\n" % version)
logfp.write("# recorded by %s@%s on %s\n" % \
(getpass.getuser(),socket.gethostname(),time.ctime()))
random.seed(seed)