projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More refactoring.
[super-star-trek.git]
/
sst.py
diff --git
a/sst.py
b/sst.py
index 97e038796f9d44a20f9731c66ba12d420acdee78..e79dd5b58d4d8ec3daa65b6eba15f84e808bfe75 100755
(executable)
--- a/
sst.py
+++ b/
sst.py
@@
-21,6
+21,13
@@
try:
except ImportError:
pass
except ImportError:
pass
+# Prevent lossage under Python 3
+try:
+ my_input = raw_input
+except NameError:
+ my_input = input
+
+
version = "2.1"
docpath = (".", "doc/", "/usr/share/doc/sst/")
version = "2.1"
docpath = (".", "doc/", "/usr/share/doc/sst/")
@@
-414,6
+421,9
@@
class Gamestate:
# after killing the last klingon when score is shown -- perhaps also
# if the only remaining klingon is SCOM.
self.state.remtime = self.state.remres/(self.state.remkl + 4*len(self.state.kcmdr))
# after killing the last klingon when score is shown -- perhaps also
# if the only remaining klingon is SCOM.
self.state.remtime = self.state.remres/(self.state.remkl + 4*len(self.state.kcmdr))
+ def unwon(self):
+ "Are there Klingons remaining?"
+ return self.state.remkl + len(self.state.kcmdr) + self.state.nscrem
FWON = 0
FDEPLETE = 1
FWON = 0
FDEPLETE = 1
@@
-943,12
+953,12
@@
def cloak():
return
else:
if not game.iscloaked:
return
else:
if not game.iscloaked:
- proutn(_("Switch cloaking device on?"))
+ proutn(_("Switch cloaking device on?
"))
if not ja():
return
action = "CLON"
else:
if not ja():
return
action = "CLON"
else:
- proutn(_("Switch cloaking device off?"))
+ proutn(_("Switch cloaking device off?
"))
if not ja():
return
action = "CLOFF"
if not ja():
return
action = "CLOFF"
@@
-961,7
+971,7
@@
def cloak():
if not ja():
return;
prout("Engineer Scott- \"Aye, Sir.\"");
if not ja():
return;
prout("Engineer Scott- \"Aye, Sir.\"");
- game.iscloaked = F
ALSE
;
+ game.iscloaked = F
alse
;
if game.irhere and game.state.date >= ALGERON and not game.isviolreported:
prout(_("The Romulan ship discovers you are breaking the Treaty of Algeron!"))
game.ncviol += 1
if game.irhere and game.state.date >= ALGERON and not game.isviolreported:
prout(_("The Romulan ship discovers you are breaking the Treaty of Algeron!"))
game.ncviol += 1
@@
-971,7
+981,7
@@
def cloak():
return;
if action == "CLON":
return;
if action == "CLON":
- if damage(DCLOAK):
+ if damage
d
(DCLOAK):
prout(_("Engineer Scott- \"The cloaking device is damaged, Sir.\""))
return;
prout(_("Engineer Scott- \"The cloaking device is damaged, Sir.\""))
return;
@@
-979,9
+989,9
@@
def cloak():
prout(_("You cannot cloak while docked."))
if game.state.date >= ALGERON and not game.isviolreported:
prout(_("You cannot cloak while docked."))
if game.state.date >= ALGERON and not game.isviolreported:
- prout(_("Spock- \"Captain, using the cloaking device is
be
a violation"))
+ prout(_("Spock- \"Captain, using the cloaking device is a violation"))
prout(_(" of the Treaty of Algeron. Considering the alternatives,"))
prout(_(" of the Treaty of Algeron. Considering the alternatives,"))
- proutn(
" are you sure this is wise?");
+ proutn(
_(" are you sure this is wise? "))
if not ja():
return
prout(_("Engineer Scott- \"Cloaking device has engaging, Sir...\""))
if not ja():
return
prout(_("Engineer Scott- \"Cloaking device has engaging, Sir...\""))
@@
-1500,7
+1510,7
@@
def attack(torps_ok):
dispersion = (randreal()+randreal())*0.5 - 0.5
dispersion += 0.002*enemy.power*dispersion
hit = torpedo(enemy.location, pcourse, dispersion, number=1, nburst=1)
dispersion = (randreal()+randreal())*0.5 - 0.5
dispersion += 0.002*enemy.power*dispersion
hit = torpedo(enemy.location, pcourse, dispersion, number=1, nburst=1)
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
) == 0:
+ if
game.unwon(
) == 0:
finish(FWON) # Klingons did themselves in!
if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.alldone:
return # Supernova or finished
finish(FWON) # Klingons did themselves in!
if game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova or game.alldone:
return # Supernova or finished
@@
-1615,7
+1625,7
@@
def deadkl(w, etype, mv):
unschedule(FSCDBAS)
# For each kind of enemy, finish message to player
prout(_(" destroyed."))
unschedule(FSCDBAS)
# For each kind of enemy, finish message to player
prout(_(" destroyed."))
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
) == 0:
+ if
game.unwon(
) == 0:
return
game.recompute()
# Remove enemy ship from arrays describing local conditions
return
game.recompute()
# Remove enemy ship from arrays describing local conditions
@@
-1738,7
+1748,7
@@
def torps():
torpedo(game.sector, tcourse[i], dispersion, number=i, nburst=n)
if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
return
torpedo(game.sector, tcourse[i], dispersion, number=i, nburst=n)
if game.alldone or game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
return
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)<=0:
+ if
game.unwon(
)<=0:
finish(FWON)
def overheat(rpow):
finish(FWON)
def overheat(rpow):
@@
-1818,7
+1828,7
@@
def hittem(hits):
skip(1)
if kpow == 0:
deadkl(w, ienm, w)
skip(1)
if kpow == 0:
deadkl(w, ienm, w)
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)==0:
+ if
game.unwon(
)==0:
finish(FWON)
if game.alldone:
return
finish(FWON)
if game.alldone:
return
@@
-2111,7
+2121,7
@@
def capture():
# Nah, just select the weakest one since it is most likely to
# surrender (Tom Almy mod)
klingons = [e for e in game.enemies if e.type == 'K']
# Nah, just select the weakest one since it is most likely to
# surrender (Tom Almy mod)
klingons = [e for e in game.enemies if e.type == 'K']
- weakest = sorted(klingons, key=lambda e: e.power)
+ weakest = sorted(klingons, key=lambda e: e.power)
[0]
game.optime = 0.05 # This action will take some time
game.ididit = True # So any others can strike back
game.optime = 0.05 # This action will take some time
game.ididit = True # So any others can strike back
@@
-2120,28
+2130,30
@@
def capture():
# intelligent design
# x = 300 + 25*skill;
x = game.energy / (weakest.power * len(klingons))
# intelligent design
# x = 300 + 25*skill;
x = game.energy / (weakest.power * len(klingons))
- x *= 2.5; # would originally have been equivalent of 1.4,
+ #prout(_("Stats: energy = %s, kpower = %s, klingons = %s")
+ # % (game.energy, weakest.power, len(klingons)))
+ x *= 2.5 # would originally have been equivalent of 1.4,
# but we want command to work more often, more humanely */
# but we want command to work more often, more humanely */
- #prout(_("Prob = %
d (%.4f)\n", i,
x))
+ #prout(_("Prob = %
.4f" %
x))
# x = 100; // For testing, of course!
# x = 100; // For testing, of course!
- if x
>
randreal(100):
+ if x
<
randreal(100):
# guess what, he surrendered!!! */
prout(_("Klingon captain at %s surrenders.") % weakest.location)
i = randreal(200)
if i > 0:
# guess what, he surrendered!!! */
prout(_("Klingon captain at %s surrenders.") % weakest.location)
i = randreal(200)
if i > 0:
- prout(_("%d Klingons commit suicide rather than be taken captive.") %
200 - i
)
- if i > brigfree:
- prout(_("%d Klingons die because there is no room for them in the brig.") %
i-brigfree
)
- i = brigfree
- brigfree -= i
+ prout(_("%d Klingons commit suicide rather than be taken captive.") %
(200 - i)
)
+ if i >
game.
brigfree:
+ prout(_("%d Klingons die because there is no room for them in the brig.") %
(i-brigfree)
)
+ i =
game.
brigfree
+
game.
brigfree -= i
prout(_("%d captives taken") % i)
deadkl(weakest.location, weakest.type, game.sector)
prout(_("%d captives taken") % i)
deadkl(weakest.location, weakest.type, game.sector)
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)<=0:
+ if
game.unwon(
)<=0:
finish(FWON)
return
# big surprise, he refuses to surrender */
finish(FWON)
return
# big surprise, he refuses to surrender */
-
prout(_("Fat chance, captain!"))
+ prout(_("Fat chance, captain!"))
# Code from events.c begins here.
# Code from events.c begins here.
@@
-2860,7
+2872,7
@@
def supernova(w):
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.quadrant == nq or communicating():
game.state.galaxy[nq.i][nq.j].supernova = True
# If supernova destroys last Klingons give special message
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)==0 and not nq == game.quadrant:
+ if
game.unwon(
)==0 and not nq == game.quadrant:
skip(2)
if w is None:
prout(_("Lucky you!"))
skip(2)
if w is None:
prout(_("Lucky you!"))
@@
-2934,7
+2946,7
@@
def killrate():
return 0
else:
starting = (game.inkling + game.incom + game.inscom)
return 0
else:
starting = (game.inkling + game.incom + game.inscom)
- remaining =
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)
+ remaining =
game.unwon(
)
return (starting - remaining)/elapsed
def badpoints():
return (starting - remaining)/elapsed
def badpoints():
@@
-3028,7
+3040,7
@@
def finish(ifin):
prout(_("conquered. Your starship is now Klingon property,"))
prout(_("and you are put on trial as a war criminal. On the"))
proutn(_("basis of your record, you are "))
prout(_("conquered. Your starship is now Klingon property,"))
prout(_("and you are put on trial as a war criminal. On the"))
proutn(_("basis of your record, you are "))
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)*3.0 > (game.inkling + game.incom + game.inscom):
+ if
game.unwon(
)*3.0 > (game.inkling + game.incom + game.inscom):
prout(_("acquitted."))
skip(1)
prout(_("LIVE LONG AND PROSPER."))
prout(_("acquitted."))
skip(1)
prout(_("LIVE LONG AND PROSPER."))
@@
-3135,7
+3147,7
@@
def finish(ifin):
elif game.ship == 'E':
game.ship = 'F'
game.alive = False
elif game.ship == 'E':
game.ship = 'F'
game.alive = False
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
) != 0:
+ if
game.unwon(
) != 0:
goodies = game.state.remres/game.inresor
baddies = (game.state.remkl + 2.0*len(game.state.kcmdr))/(game.inkling+2.0*game.incom)
if goodies/baddies >= randreal(1.0, 1.5):
goodies = game.state.remres/game.inresor
baddies = (game.state.remkl + 2.0*len(game.state.kcmdr))/(game.inkling+2.0*game.incom)
if goodies/baddies >= randreal(1.0, 1.5):
@@
-3156,11
+3168,12
@@
def finish(ifin):
prout(_("to think about pigeons."))
game.gamewon = True
score()
prout(_("to think about pigeons."))
game.gamewon = True
score()
+ scanner.chew() # Clean up leftovers
def score():
"Compute player's score."
timused = game.state.date - game.indate
def score():
"Compute player's score."
timused = game.state.date - game.indate
- if (timused == 0 or
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
) != 0) and timused < 5.0:
+ if (timused == 0 or
game.unwon(
) != 0) and timused < 5.0:
timused = 5.0
game.perdate = killrate()
ithperd = 500*game.perdate + 0.5
timused = 5.0
game.perdate = killrate()
ithperd = 500*game.perdate + 0.5
@@
-3403,7
+3416,7
@@
def pause_game():
sys.stdout.write('\n')
proutn(prompt)
if not replayfp:
sys.stdout.write('\n')
proutn(prompt)
if not replayfp:
- input()
+
my_
input()
sys.stdout.write('\n' * rows)
linecount = 0
sys.stdout.write('\n' * rows)
linecount = 0
@@
-3475,7
+3488,11
@@
def cgetline():
elif linein[0] != "#":
break
else:
elif linein[0] != "#":
break
else:
- linein = eval(input()) + "\n"
+ try:
+ linein = my_input() + "\n"
+ except EOFError:
+ prout("")
+ sys.exit(0)
if logfp:
logfp.write(linein)
return linein
if logfp:
logfp.write(linein)
return linein
@@
-3526,7
+3543,7
@@
def clrscr():
linecount = 0
def textcolor(color=DEFAULT):
linecount = 0
def textcolor(color=DEFAULT):
- if
game.options & OPTION_COLOR
:
+ if
(game.options & OPTION_COLOR) and (game.options & OPTION_CURSES)
:
if color == DEFAULT:
curwnd.attrset(0)
elif color == BLACK:
if color == DEFAULT:
curwnd.attrset(0)
elif color == BLACK:
@@
-3563,7
+3580,7
@@
def textcolor(color=DEFAULT):
curwnd.attron(curses.color_pair(curses.COLOR_WHITE) | curses.A_BOLD)
def highvideo():
curwnd.attron(curses.color_pair(curses.COLOR_WHITE) | curses.A_BOLD)
def highvideo():
- if
game.options & OPTION_COLOR
:
+ if
(game.options & OPTION_COLOR) and (game.options & OPTION_CURSES)
:
curwnd.attron(curses.A_REVERSE)
#
curwnd.attron(curses.A_REVERSE)
#
@@
-3600,7
+3617,7
@@
def put_srscan_sym(w, sym):
def boom(w):
"Enemy fall down, go boom."
if game.options & OPTION_CURSES:
def boom(w):
"Enemy fall down, go boom."
if game.options & OPTION_CURSES:
- drawmaps(
2
)
+ drawmaps(
0
)
setwnd(srscan_window)
srscan_window.attron(curses.A_REVERSE)
put_srscan_sym(w, game.quad[w.i][w.j])
setwnd(srscan_window)
srscan_window.attron(curses.A_REVERSE)
put_srscan_sym(w, game.quad[w.i][w.j])
@@
-3997,15
+4014,16
@@
def getcourse(isprobe):
iprompt = True
key = scanner.nexttok()
itemp = "verbose"
iprompt = True
key = scanner.nexttok()
itemp = "verbose"
- if key != "IHREAL":
+ if key == "IHREAL":
+ delta.j = scanner.real
+ else:
huh()
raise TrekError
huh()
raise TrekError
- delta.j = scanner.real
key = scanner.nexttok()
key = scanner.nexttok()
- if key
!
= "IHREAL":
- huh()
- raise TrekError
- delta.i = scanner.real
+ if key
=
= "IHREAL":
+ delta.i = scanner.real
+ else:
+ delta.i = 0
# Check for zero movement
if delta.i == 0 and delta.j == 0:
scanner.chew()
# Check for zero movement
if delta.i == 0 and delta.j == 0:
scanner.chew()
@@
-4330,7
+4348,7
@@
def atover(igrab):
# Repeat if another snova
if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
break
# Repeat if another snova
if not game.state.galaxy[game.quadrant.i][game.quadrant.j].supernova:
break
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)==0:
+ if
game.unwon(
)==0:
finish(FWON) # Snova killed remaining enemy.
def timwrp():
finish(FWON) # Snova killed remaining enemy.
def timwrp():
@@
-5012,7
+5030,7
@@
def deathray():
while len(game.enemies) > 0:
deadkl(game.enemies[1].location, game.quad[game.enemies[1].location.i][game.enemies[1].location.j],game.enemies[1].location)
prout(_("Ensign Chekov- \"Congratulations, Captain!\""))
while len(game.enemies) > 0:
deadkl(game.enemies[1].location, game.quad[game.enemies[1].location.i][game.enemies[1].location.j],game.enemies[1].location)
prout(_("Ensign Chekov- \"Congratulations, Captain!\""))
- if
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
) == 0:
+ if
game.unwon(
) == 0:
finish(FWON)
if (game.options & OPTION_PLAIN) == 0:
prout(_("Spock- \"Captain, I believe the `Experimental Death Ray'"))
finish(FWON)
if (game.options & OPTION_PLAIN) == 0:
prout(_("Spock- \"Captain, I believe the `Experimental Death Ray'"))
@@
-5104,7
+5122,7
@@
def report():
if game.tourn:
prout(_("This is tournament game %d.") % game.tourn)
prout(_("Your secret password is \"%s\"") % game.passwd)
if game.tourn:
prout(_("This is tournament game %d.") % game.tourn)
prout(_("Your secret password is \"%s\"") % game.passwd)
- proutn(_("%d of %d Klingons have been killed") % (((game.inkling + game.incom + game.inscom) -
(game.state.remkl + len(game.state.kcmdr) + game.state.nscrem
)),
+ proutn(_("%d of %d Klingons have been killed") % (((game.inkling + game.incom + game.inscom) -
game.unwon(
)),
(game.inkling + game.incom + game.inscom)))
if game.incom - len(game.state.kcmdr):
prout(_(", including %d Commander%s.") % (game.incom - len(game.state.kcmdr), (_("s"), "")[(game.incom - len(game.state.kcmdr))==1]))
(game.inkling + game.incom + game.inscom)))
if game.incom - len(game.state.kcmdr):
prout(_(", including %d Commander%s.") % (game.incom - len(game.state.kcmdr), (_("s"), "")[(game.incom - len(game.state.kcmdr))==1]))
@@
-5273,6
+5291,8
@@
def sectscan(goodScan, i, j):
"Light up an individual dot in a sector."
if goodScan or (abs(i-game.sector.i)<= 1 and abs(j-game.sector.j) <= 1):
if game.quad[i][j] in ('E', 'F'):
"Light up an individual dot in a sector."
if goodScan or (abs(i-game.sector.i)<= 1 and abs(j-game.sector.j) <= 1):
if game.quad[i][j] in ('E', 'F'):
+ if game.iscloaked:
+ highvideo()
textcolor({"green":GREEN,
"yellow":YELLOW,
"red":RED,
textcolor({"green":GREEN,
"yellow":YELLOW,
"red":RED,
@@
-5286,8
+5306,6
@@
def sectscan(goodScan, i, j):
'R':LIGHTRED,
'T':LIGHTRED,
}.get(game.quad[i][j], DEFAULT))
'R':LIGHTRED,
'T':LIGHTRED,
}.get(game.quad[i][j], DEFAULT))
- if game.iscloaked:
- highvideo()
proutn("%c " % game.quad[i][j])
textcolor(DEFAULT)
else:
proutn("%c " % game.quad[i][j])
textcolor(DEFAULT)
else:
@@
-5336,8
+5354,7
@@
def status(req=0):
% (int((100.0*game.shield)/game.inshld + 0.5), game.shield)
prstat(_("Shields"), s+data)
if not req or req == 9:
% (int((100.0*game.shield)/game.inshld + 0.5), game.shield)
prstat(_("Shields"), s+data)
if not req or req == 9:
- prstat(_("Klingons Left"), "%d" \
- % (game.state.remkl+len(game.state.kcmdr)+game.state.nscrem))
+ prstat(_("Klingons Left"), "%d" % game.unwon())
if not req or req == 10:
if game.options & OPTION_WORLDS:
plnet = game.state.galaxy[game.quadrant.i][game.quadrant.j].planet
if not req or req == 10:
if game.options & OPTION_WORLDS:
plnet = game.state.galaxy[game.quadrant.i][game.quadrant.j].planet
@@
-5856,9
+5873,9
@@
def choose():
game.tourn = game.length = 0
game.thawed = False
game.skill = SKILL_NONE
game.tourn = game.length = 0
game.thawed = False
game.skill = SKILL_NONE
- scanner.chew()
-
#
if not scanner.inqueue: # Can start with command line options
- proutn(_("Would you like a regular, tournament, or saved game? "))
+ # Do not chew here, we want to use command-line tokens
+ if not scanner.inqueue: # Can start with command line options
+
proutn(_("Would you like a regular, tournament, or saved game? "))
scanner.nexttok()
if scanner.sees("tournament"):
while scanner.nexttok() == "IHEOL":
scanner.nexttok()
if scanner.sees("tournament"):
while scanner.nexttok() == "IHEOL":
@@
-6359,6
+6376,8
@@
def makemoves():
hitme = True
elif cmd == "CAPTURE":
capture()
hitme = True
elif cmd == "CAPTURE":
capture()
+ elif cmd == "CLOAK":
+ cloak()
elif cmd == "DEBUGCMD": # What do we want for debug???
debugme()
elif cmd == "MAYDAY": # Call for help
elif cmd == "DEBUGCMD": # What do we want for debug???
debugme()
elif cmd == "MAYDAY": # Call for help