X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=0c47c96064bc3f6f0a8fe2195fe0a6160f679e9f;hp=5655c7e09c96f494b34e202c7767794863603e7a;hb=12e8e2c7e247de376ae698f617c23a7ad29444ea;hpb=c9c19fd8a8015004f01086c00b6b0ecea48833ac diff --git a/src/sst.py b/src/sst.py index 5655c7e..0c47c96 100644 --- a/src/sst.py +++ b/src/sst.py @@ -262,7 +262,6 @@ class planet: def __str__(self): return self.name -NOPLANET = None class quadrant: def __init__(self): self.stars = None @@ -454,7 +453,7 @@ class gamestate: self.casual = 0 # causalties self.nhelp = 0 # calls for help self.nkinks = 0 # count of energy-barrier crossings - self.iplnet = 0 # planet # in quadrant + self.iplnet = None # planet # in quadrant self.inplan = 0 # initial planets self.nenhere = 0 # number of enemies in quadrant self.irhere = 0 # Romulans in quadrant @@ -888,7 +887,7 @@ def movescom(iq, avoid): game.state.planets[i].crystals == "present": # destroy the planet game.state.planets[i].pclass = "destroyed" - game.state.galaxy[game.state.kscmdr.x][game.state.kscmdr.y].planet = NOPLANET + game.state.galaxy[game.state.kscmdr.x][game.state.kscmdr.y].planet = None if communicating(): announce() prout(_("Lt. Uhura- \"Captain, Starfleet Intelligence reports")) @@ -1420,9 +1419,9 @@ def torpedo(course, r, incoming, i, n): crmena(True, iquad, sector, w) prout(_(" destroyed.")) game.state.nplankl += 1 - game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET - game.state.planets[game.iplnet].pclass = destroyed - game.iplnet = 0 + game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None + game.iplnet.pclass = "destroyed" + game.iplnet = None invalidate(game.plnet) game.quad[w.x][w.y] = IHDOT if game.landed: @@ -1433,9 +1432,9 @@ def torpedo(course, r, incoming, i, n): crmena(True, iquad, sector, w) prout(_(" destroyed.")) game.state.nworldkl += 1 - game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET - game.state.planets[game.iplnet].pclass = destroyed - game.iplnet = 0 + game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None + game.iplnet.pclass = "destroyed" + game.iplnet = None invalidate(game.plnet) game.quad[w.x][w.y] = IHDOT if game.landed: @@ -1587,7 +1586,7 @@ def attack(torps_ok): moveklings() # if no enemies remain after movement, we're done - if game.nenhere==0 or (game.nenhere==1 and iqhere and not iqengry): + if game.nenhere==0 or (game.nenhere==1 and thing == game.quadrant and not iqengry): return # set up partial hits if attack happens during shield status change @@ -1737,8 +1736,8 @@ def deadkl(w, type, mv): game.ithere = False elif type == IHQUEST: # Killed a Thingy - global iqhere, iqengry - iqhere = iqengry = False + global iqengry + iqengry = False invalidate(thing) else: # Some type of a Klingon @@ -2627,8 +2626,8 @@ def events(): # supernova'ed, and which has some Klingons in it w = randplace(GALSIZE) q = game.state.galaxy[w.x][w.y] - if not (game.quadrant == w or q.planet == NOPLANET or \ - not game.state.planets[q.planet].inhabited or \ + if not (game.quadrant == w or q.planet == None or \ + not q.planet.inhabited or \ q.supernova or q.status!=secure or q.klingons<=0): break else: @@ -2711,7 +2710,7 @@ def events(): prout(_("launched a warship from %s.") % q.planet) else: prout(_("Uhura- Starfleet reports increased Klingon activity")) - if q.planet != NOPLANET: + if q.planet != None: proutn(_("near %s") % q.planet) prout(_("in Quadrant %s.") % w) @@ -2826,12 +2825,12 @@ def nova(nov): prout(_(" novas.")) game.quad[scratch.x][scratch.y] = IHDOT elif iquad == IHP: # Destroy planet - game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = NOPLANET + game.state.galaxy[game.quadrant.x][game.quadrant.y].planet = None game.state.nplankl += 1 crmena(True, IHP, sector, scratch) prout(_(" destroyed.")) - game.state.planets[game.iplnet].pclass = destroyed - game.iplnet = 0 + game.iplnet.pclass = "destroyed" + game.iplnet = None invalidate(game.plnet) if game.landed: finish(FPNOVA) @@ -3017,7 +3016,7 @@ def supernova(induced, w=None): # Destroy planets for loop in range(game.inplan): if game.state.planets[loop].w == nq: - game.state.planets[loop].pclass = destroyed + game.state.planets[loop].pclass = "destroyed" npdead += 1 # Destroy any base in supernovaed quadrant if game.state.rembase: @@ -3712,9 +3711,6 @@ def highvideo(): if game.options & OPTION_CURSES: curwnd.attron(curses.A_REVERSE) -def commandhook(cmd, before): - pass - # # Things past this point have policy implications. # @@ -3734,7 +3730,7 @@ def drawmaps(mode): setwnd(report_window) report_window.clear() report_window.move(0, 0) - status(0) + status() setwnd(lrscan_window) lrscan_window.clear() lrscan_window.move(0, 0) @@ -3825,8 +3821,8 @@ def prstat(txt, data): skip(1) setwnd(status_window) else: - proutn(" " * NSYM - len(tx)) - vproutn(data) + proutn(" " * (NSYM - len(txt))) + proutn(data) skip(1) if game.options & OPTION_CURSES: setwnd(report_window) @@ -4771,7 +4767,7 @@ def abandon(): if not (game.options & OPTION_WORLDS) and not damaged(DTRANSP): prout(_("Remainder of ship's complement beam down")) prout(_("to nearest habitable planet.")) - elif q.planet != NOPLANET and not damaged(DTRANSP): + elif q.planet != None and not damaged(DTRANSP): prout(_("Remainder of ship's complement beam down to %s.") % q.planet) else: @@ -4848,7 +4844,7 @@ def survey(): prout(_("Spock- \"Planet report follows, Captain.\"")) skip(1) for i in range(game.inplan): - if game.state.planets[i].pclass == destroyed: + if game.state.planets[i].pclass == "destroyed": continue if (game.state.planets[i].known != "unknown" \ and not game.state.planets[i].inhabited) \ @@ -4899,23 +4895,25 @@ def sensor(): if game.options & OPTION_TTY: prout(_("Short range sensors damaged.")) return - if not is_valid(game.plnet): + if game.iplnet == None: if game.options & OPTION_TTY: prout(_("Spock- \"No planet in this quadrant, Captain.\"")) return - if game.state.planets[game.iplnet].known == "unknown": + if game.iplnet.known == "unknown": prout(_("Spock- \"Sensor scan for Quadrant %s-") % game.quadrant) skip(1) prout(_(" Planet at Sector %s is of class %s.") % - (sector,game.plnet, game.state.planets[game.iplnet])) - if game.state.planets[game.iplnet].known=="shuttle_down": + (game.plnet, game.iplnet.pclass)) + if game.iplnet.known=="shuttle_down": prout(_(" Sensors show Galileo still on surface.")) proutn(_(" Readings indicate")) - if game.state.planets[game.iplnet].crystals != present: + if game.iplnet.crystals != present: proutn(_(" no")) prout(_(" dilithium crystals present.\"")) - if game.state.planets[game.iplnet].known == "unknown": - game.state.planets[game.iplnet].known = "known" + if game.iplnet.known == "unknown": + game.iplnet.known = "known" + elif game.iplnet.inhabited: + prout(_("Spock- \"The inhabited planet %s is located at Sector %s, Captain.\"") % (game.iplnet.name, game.plnet)) def beam(): # use the transporter @@ -4924,7 +4922,7 @@ def beam(): skip(1) if damaged(DTRANSP): prout(_("Transporter damaged.")) - if not damaged(DSHUTTL) and (game.state.planets[game.iplnet].known=="shuttle_down" or game.iscraft == "onship"): + if not damaged(DSHUTTL) and (game.iplnet.known=="shuttle_down" or game.iscraft == "onship"): skip(1) proutn(_("Spock- \"May I suggest the shuttle craft, Sir?\" ")) if ja() == True: @@ -4937,12 +4935,12 @@ def beam(): if game.shldup: prout(_("Impossible to transport through shields.")) return - if game.state.planets[game.iplnet].known=="unknown": + if game.iplnet.known=="unknown": prout(_("Spock- \"Captain, we have no information on this planet")) prout(_(" and Starfleet Regulations clearly state that in this situation")) prout(_(" you may not go down.\"")) return - if not game.landed and game.state.planets[game.iplnet].crystals==absent: + if not game.landed and game.iplnet.crystals=="absent": prout(_("Spock- \"Captain, I fail to see the logic in")) prout(_(" exploring a planet with no dilithium crystals.")) proutn(_(" Are you sure this is wise?\" ")) @@ -4959,7 +4957,7 @@ def beam(): prout(_("Engineering to bridge--")) prout(_(" Captain, we have enough energy only to transport you down to")) prout(_(" the planet, but there wouldn't be an energy for the trip back.")) - if game.state.planets[game.iplnet].known == "shuttle_down": + if game.iplnet.known == "shuttle_down": prout(_(" Although the Galileo shuttle craft may still be on a surface.")) proutn(_(" Are you sure this is wise?\" ")) if ja() == False: @@ -4967,7 +4965,7 @@ def beam(): return if game.landed: # Coming from planet - if game.state.planets[game.iplnet].known=="shuttle_down": + if game.iplnet.known=="shuttle_down": proutn(_("Spock- \"Wouldn't you rather take the Galileo?\" ")) if ja() == True: chew() @@ -5001,7 +4999,7 @@ def beam(): game.energy -= nrgneed skip(2) prout(_("Transport complete.")) - if game.landed and game.state.planets[game.iplnet].known=="shuttle_down": + if game.landed and game.iplnet.known=="shuttle_down": prout(_("The shuttle craft Galileo is here!")) if not game.landed and game.imine: game.icrystl = True @@ -5016,10 +5014,10 @@ def mine(): if not game.landed: prout(_("Mining party not on planet.")) return - if game.state.planets[game.iplnet].crystals == mined: + if game.iplnet.crystals == "mined": prout(_("This planet has already been strip-mined for dilithium.")) return - elif game.state.planets[game.iplnet].crystals == absent: + elif game.iplnet.crystals == "absent": prout(_("No dilithium crystals on this planet.")) return if game.imine: @@ -5031,11 +5029,11 @@ def mine(): skip(1) prout(_("there's no reason to mine more at this time.")) return - game.optime = (0.1+0.2*random.random())*game.state.planets[game.iplnet].pclass + game.optime = (0.1+0.2*random.random())*game.iplnet.pclass if consumeTime(): return prout(_("Mining operation complete.")) - game.state.planets[game.iplnet].crystals = mined + game.iplnet.crystals = "mined" game.imine = game.ididit = True def usecrystals(): @@ -5090,7 +5088,7 @@ def shuttle(): skip(1) if damaged(DSHUTTL): if game.damage[DSHUTTL] == -1.0: - if game.inorbit and game.state.planets[game.iplnet].known == "shuttle_down": + if game.inorbit and game.iplnet.known == "shuttle_down": prout(_("Ye Faerie Queene has no shuttle craft bay to dock it at.")) else: prout(_("Ye Faerie Queene had no shuttle craft.")) @@ -5103,16 +5101,16 @@ def shuttle(): crmshp() prout(_(" not in standard orbit.")) return - if (game.state.planets[game.iplnet].known != "shuttle_down") and game.iscraft != "onship": + if (game.iplnet.known != "shuttle_down") and game.iscraft != "onship": prout(_("Shuttle craft not currently available.")) return - if not game.landed and game.state.planets[game.iplnet].known=="shuttle_down": + if not game.landed and game.iplnet.known=="shuttle_down": prout(_("You will have to beam down to retrieve the shuttle craft.")) return if game.shldup or game.condition == "docked": prout(_("Shuttle craft cannot pass through shields.")) return - if game.state.planets[game.iplnet].known=="unknown": + if game.iplnet.known=="unknown": prout(_("Spock- \"Captain, we have no information on this planet")) prout(_(" and Starfleet Regulations clearly state that in this situation")) prout(_(" you may not fly down.\"")) @@ -5144,7 +5142,7 @@ def shuttle(): skip(1) if consumeTime(): return - game.state.planets[game.iplnet].known="shuttle_down" + game.iplnet.known="shuttle_down" prout(_("Trip complete.")) return else: @@ -5154,7 +5152,7 @@ def shuttle(): skip(1) prouts(_("The short hop begins . . .")) skip(1) - game.state.planets[game.iplnet].known="known" + game.iplnet.known="known" game.icraft = True skip(1) game.landed = False @@ -5180,7 +5178,7 @@ def shuttle(): game.iscraft = "offship" if consumeTime(): return - game.state.planets[game.iplnet].known = "shuttle_down" + game.iplnet.known = "shuttle_down" game.landed = True game.icraft = False prout(_("Trip complete.")) @@ -5455,14 +5453,14 @@ def chart(): else: proutn(" ") if game.state.galaxy[i][j].supernova: - strcpy(buf, "***") + show = "***" elif not game.state.galaxy[i][j].charted and game.state.galaxy[i][j].starbase: - strcpy(buf, ".1.") + show = ".1." elif game.state.galaxy[i][j].charted: - sprintf(buf, "%3d" % (game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars)) + show = "%3d" % (game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars) else: - strcpy(buf, "...") - proutn(buf) + show = "..." + proutn(show) if (game.options & OPTION_SHOWME) and i == game.quadrant.x and j == game.quadrant.y: proutn(">") else: @@ -5487,13 +5485,13 @@ def sectscan(goodScan, i, j): else: proutn("- ") -def status(req): +def status(req=0): # print status report lines if not req or req == 1: prstat(_("Stardate"), _("%.1f, Time Left %.2f") \ % (game.state.date, game.state.remtime)) - elif not req or req == 2: + if not req or req == 2: if game.condition != "docked": newcnd() dam = 0 @@ -5501,43 +5499,43 @@ def status(req): if game.damage[t]>0: dam += 1 prstat(_("Condition"), _("%s, %i DAMAGES") % (game.condition.upper(), dam)) - elif not req or req == 3: + if not req or req == 3: prstat(_("Position"), "%s , %s" % (game.quadrant, game.sector)) - elif not req or req == 4: + if not req or req == 4: if damaged(DLIFSUP): if game.condition == "docked": - sprintf(s, _("DAMAGED, Base provides")) + s = _("DAMAGED, Base provides") else: - sprintf(s, _("DAMAGED, reserves=%4.2f") % game.lsupres) + s = _("DAMAGED, reserves=%4.2f") % game.lsupres else: - sprintf(s, _("ACTIVE")) + s = _("ACTIVE") prstat(_("Life Support"), s) - elif not req or req == 5: - prstat(_("Warp Factor"), "%.1f" % (game.warpfac)) - elif not req or req == 6: + if not req or req == 5: + prstat(_("Warp Factor"), "%.1f" % game.warpfac) + if not req or req == 6: extra = "" if game.icrystl and (game.options & OPTION_SHOWME): extra = _(" (have crystals)") - prstat(_("Energy"), "%.2f%s" % game.energy, extra) - elif not req or req == 7: + prstat(_("Energy"), "%.2f%s" % (game.energy, extra)) + if not req or req == 7: prstat(_("Torpedoes"), "%d" % (game.torps)) - elif not req or req == 8: + if not req or req == 8: if damaged(DSHIELD): - strcpy(s, _("DAMAGED,")) + s = _("DAMAGED,") elif game.shldup: - strcpy(s, _("UP,")) + s = _("UP,") else: - strcpy(s, _("DOWN,")) + s = _("DOWN,") data = _(" %d%% %.1f units") \ % (int((100.0*game.shield)/game.inshld + 0.5), game.shield) - prstat(_("Shields"), s) - elif not req or req == 9: + prstat(_("Shields"), s+data) + if not req or req == 9: prstat(_("Klingons Left"), "%d" \ % (game.state.remkl + game.state.remcom + game.state.nscrem)) - elif not req or req == 10: + if not req or req == 10: if game.options & OPTION_WORLDS: plnet = game.state.galaxy[game.quadrant.x][game.quadrant.y].planet - if plnet != NOPLANET and game.state.planets[plnet].inhabited: + if plnet and plnet.inhabited: prstat(_("Major system"), plnet.name) else: prout(_("Sector is uninhabited")) @@ -5942,7 +5940,7 @@ def setup(needprompt): for j in range(GALSIZE): quad = game.state.galaxy[i][j] quad.charted = 0 - quad.planet = NOPLANET + quad.planet = None quad.romulans = 0 quad.klingons = 0 quad.starbase = False @@ -6017,7 +6015,7 @@ def setup(needprompt): if not game.state.galaxy[w.x][w.y].supernova and \ game.state.galaxy[w.x][w.y].klingons + klump <= MAXKLQUAD: break - game.state.galaxy[w.x][w.y].klingons += klump + game.state.galaxy[w.x][w.y].klingons += int(klump) if krem <= 0: break # Position Klingon Commander Ships @@ -6035,7 +6033,7 @@ def setup(needprompt): for i in range(game.inplan): while True: w = randplace(GALSIZE) - if game.state.galaxy[w.x][w.y].planet == NOPLANET: + if game.state.galaxy[w.x][w.y].planet == None: break new = planet() new.w = w @@ -6103,7 +6101,7 @@ def setup(needprompt): prout(_(" YOU'LL NEED IT.")) waitfor() newqad(False) - if game.nenhere - iqhere-game.ithere: + if game.nenhere - (thing == game.quadrant) - game.ithere: game.shldup = True if game.neutz: # bad luck to start in a Romulan Neutral Zone attack(False) @@ -6262,8 +6260,7 @@ def newqad(shutup): game.landed = False game.ientesc = False game.ithere = False - global iqhere, iqengry - iqhere = False + global iqengry iqengry = False game.iseenit = False if game.iscate: @@ -6313,7 +6310,7 @@ def newqad(shutup): game.base = dropin(IHB) # If quadrant needs a planet, put it in - if q.planet != NOPLANET: + if q.planet: game.iplnet = q.planet if not q.planet.inhabited: game.plnet = dropin(IHP) @@ -6343,8 +6340,6 @@ def newqad(shutup): w = dropin(IHQUEST) thing = randplace(GALSIZE) game.nenhere += 1 - global iqhere - iqhere = True game.ks[game.nenhere] = w game.kdist[game.nenhere] = game.kavgd[game.nenhere] = \ distance(game.sector, w) @@ -6401,7 +6396,7 @@ def newqad(shutup): def sortklings(): # sort Klingons by distance from us # The author liked bubble sort. So we will use it. :-( - if game.nenhere-iqhere-game.ithere < 2: + if game.nenhere-(thing==game.quadrant)-game.ithere < 2: return while True: sw = False @@ -6494,7 +6489,7 @@ def listCommands(): k = 0 proutn(_("LEGAL COMMANDS ARE:")) for key in commands: - if ACCEPT(cmd): + if ACCEPT(key): if k % 5 == 0: skip(1) proutn("%-12s " % key) @@ -6569,7 +6564,6 @@ def makemoves(): hitme = False game.justin = False game.optime = 0.0 - i = -1 chew() setwnd(prompt_window) clrscr() @@ -6582,15 +6576,20 @@ def makemoves(): clrscr() setwnd(message_window) clrscr() - cmd = citem.upper() - if cmd not in commands: + candidates = filter(lambda x: x.startswith(citem.upper()), + commands) + if len(candidates) == 1: + cmd = candidates[0] + break + elif candidates and not (game.options & OPTION_PLAIN): + prout("Commands with that prefix: " + " ".join(candidates)) + else: listCommands() continue - commandhook(commands[i].name, True) if cmd == "SRSCAN": # srscan srscan() elif cmd == "STATUS": # status - status(0) + status() elif cmd == "REQUEST": # status request request() elif cmd == "LRSCAN": # long range scan @@ -6695,7 +6694,6 @@ def makemoves(): # elif cmd == "VISUAL": # visual() # perform visual scan #endif - commandhook(commands[i].name, False) while True: if game.alldone: break # Game has ended @@ -6936,11 +6934,11 @@ def debugme(): atover(True) if __name__ == '__main__': - global line, thing, game, idebug, iqhere, iqengry + global line, thing, game, idebug, iqengry game = citem = aaitem = inqueue = None line = '' thing = coord() - iqhere = iqengry = False + iqengry = False game = gamestate() idebug = 0 @@ -6997,7 +6995,7 @@ if __name__ == '__main__': setwnd(fullscreen_window) clrscr() prelim() - setup(needprompt=not line) + setup(needprompt=not inqueue) if game.alldone: score() game.alldone = False