X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=sst.py;h=21fcb51e563dd732d06d69bb0e2a152e8895b7f1;hp=97e038796f9d44a20f9731c66ba12d420acdee78;hb=f191d16c0f9e986e76bccbd92354275fc403acc5;hpb=8c4de0c9b62320d0b1b9f1ce5b45fc4d3fe4fe7c diff --git a/sst.py b/sst.py index 97e0387..21fcb51 100755 --- a/sst.py +++ b/sst.py @@ -21,6 +21,13 @@ try: 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/") @@ -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)) + def unwon(self): + "Are there Klingons remaining?" + return self.state.remkl + len(self.state.kcmdr) + self.state.nscrem FWON = 0 FDEPLETE = 1 @@ -943,12 +953,12 @@ def cloak(): return else: if not game.iscloaked: - proutn(_("Switch cloaking device on?")) + proutn(_("Switch cloaking device on? ")) if not ja(): return action = "CLON" else: - proutn(_("Switch cloaking device off?")) + proutn(_("Switch cloaking device off? ")) if not ja(): return action = "CLOFF" @@ -961,7 +971,7 @@ def cloak(): if not ja(): return; prout("Engineer Scott- \"Aye, Sir.\""); - game.iscloaked = FALSE; + game.iscloaked = False; 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": - if damage(DCLOAK): + if damaged(DCLOAK): 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(_("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,")) - 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...\"")) @@ -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) - 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 @@ -1615,7 +1625,7 @@ def deadkl(w, etype, mv): 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 @@ -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 - if (game.state.remkl + len(game.state.kcmdr) + game.state.nscrem)<=0: + if game.unwon()<=0: finish(FWON) def overheat(rpow): @@ -1818,7 +1828,7 @@ def hittem(hits): 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 @@ -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'] - 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 @@ -2120,28 +2130,30 @@ def capture(): # 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 */ - #prout(_("Prob = %d (%.4f)\n", i, x)) + #prout(_("Prob = %.4f" % x)) # 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: - 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) - 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 */ - prout(_("Fat chance, captain!")) + prout(_("Fat chance, captain!")) # 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.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!")) @@ -2934,7 +2946,7 @@ def killrate(): 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(): @@ -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 ")) - 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.")) @@ -3135,7 +3147,7 @@ def finish(ifin): 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): @@ -3156,11 +3168,12 @@ def finish(ifin): 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 - 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 @@ -3403,7 +3416,7 @@ def pause_game(): sys.stdout.write('\n') proutn(prompt) if not replayfp: - input() + my_input() sys.stdout.write('\n' * rows) linecount = 0 @@ -3475,7 +3488,11 @@ def cgetline(): 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 @@ -3526,7 +3543,7 @@ def clrscr(): 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: @@ -3563,7 +3580,7 @@ def textcolor(color=DEFAULT): 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) # @@ -3600,7 +3617,7 @@ def put_srscan_sym(w, sym): 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]) @@ -3997,15 +4014,16 @@ def getcourse(isprobe): iprompt = True key = scanner.nexttok() itemp = "verbose" - if key != "IHREAL": + if key == "IHREAL": + delta.j = scanner.real + else: huh() raise TrekError - delta.j = scanner.real 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() @@ -4330,7 +4348,7 @@ def atover(igrab): # 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(): @@ -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!\"")) - 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'")) @@ -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) - 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])) @@ -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'): + if game.iscloaked: + highvideo() 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)) - if game.iscloaked: - highvideo() proutn("%c " % game.quad[i][j]) textcolor(DEFAULT) else: @@ -5856,9 +5874,9 @@ def choose(): 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": @@ -6359,6 +6377,8 @@ def makemoves(): 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