X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=ce058ef970db6e2fdc9221b7ffc20812e3aedf74;hp=6636aa6d2c8114b7fafb27de7bf3505815103fd7;hb=1e0e43b6390d3608233996167248eadd5c3ac535;hpb=721f7f97aa9700158bf74e637cc26fac0651e8dc diff --git a/src/sst.py b/src/sst.py index 6636aa6..ce058ef 100644 --- a/src/sst.py +++ b/src/sst.py @@ -1196,8 +1196,7 @@ def doshield(shraise): return def randdevice(): - # choose a device to damage, at random. - # + "Choose a device to damage, at random." # Quoth Eric Allman in the code of BSD-Trek: # "Under certain conditions you can get a critical hit. This # sort of hit damages devices. The probability that a given @@ -1220,7 +1219,6 @@ def randdevice(): # We don't have a cloaking device. The shuttle got the allocation # for the cloaking device, then we shaved a half-percent off # everything to have some weight to give DSHCTRL/DDRAY/DDSP. - # weights = ( 105, # DSRSENS: short range scanners 10.5% 105, # DLRSENS: long range scanners 10.5% @@ -1270,11 +1268,9 @@ def collision(rammed, enemy): prout(_("***Sickbay reports %d casualties"), icas) game.casual += icas game.state.crew -= icas - # # In the pre-SST2K version, all devices got equiprobably damaged, # which was silly. Instead, pick up to half the devices at # random according to our weighting table, - # ncrits = randrange(NDEVICES/2) for m in range(ncrits): dev = randdevice() @@ -1457,11 +1453,9 @@ def torpedo(course, dispersion, origin, number, nburst): skip(1) deadkl(w, iquad, w) else: - # # Stas Sergeev added the possibility that # you can shove the Thingy and piss it off. # It then becomes an enemy and may fire at you. - # thing.angry = True shoved = True return None @@ -1546,12 +1540,12 @@ def fry(hit): def attack(torps_ok): # bad guy attacks us # torps_ok == False forces use of phasers in an attack - attempt = False; ihurt = False; - hitmax=0.0; hittot=0.0; chgfac=1.0 - where = "neither" # game could be over at this point, check if game.alldone: return + attempt = False; ihurt = False; + hitmax=0.0; hittot=0.0; chgfac=1.0 + where = "neither" if idebug: prout("=== ATTACK!") # Tholian gets to move before attacking @@ -2128,8 +2122,7 @@ def phasers(): else: proutn("??") proutn(") ") - proutn(_("units to fire at %s- ") % crmena(False, ienm, "sector", aim)) - + proutn(_("units to fire at %s- ") % crmena(False, ienm, "sector", aim)) key = scanner.next() if key == IHALPHA and scanner.sees("no"): no = True @@ -2273,7 +2266,7 @@ def events(): game.shldchg = False else: prout(_("(Shields not currently useable.)")) - newqad(False) + newqad() # Adjust finish time to time of tractor beaming fintim = game.state.date+game.optime attack(torps_ok=False) @@ -2608,8 +2601,7 @@ def events(): else: continue # search for eligible quadrant failed except "FOUNDIT": - w.x = i - w.y = j + w.x = i; w.y = j # deliver the child game.state.remkl += 1 q.klingons += 1 @@ -3424,10 +3416,7 @@ def waitfor(): def announce(): skip(1) - if game.skill > SKILL_FAIR: - prouts(_("[ANOUNCEMENT ARRIVING...]")) - else: - prouts(_("[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]")) + prouts(_("[ANOUNCEMENT ARRIVING...]")) skip(1) def pause_game(): @@ -3779,7 +3768,7 @@ def imove(novapush): skip(1) prout(_("Entering Quadrant %s.") % game.quadrant) game.quad[game.sector.x][game.sector.y] = game.ship - newqad(False) + newqad() if game.skill>SKILL_NOVICE: attack(torps_ok=False) return @@ -4147,7 +4136,6 @@ def warp(timewarp): bigger = math.fabs(deltax) else: bigger = math.fabs(deltay) - deltax /= bigger deltay /= bigger n = 10.0 * game.dist * bigger +0.5 @@ -4350,7 +4338,7 @@ def timwrp(): # cheat to make sure no tractor beams occur during time warp postpone(FTBEAM, game.optime) game.damage[DRADIO] += game.optime - newqad(False) + newqad() events() # Stas Sergeev added this -- do pending events def probe(): @@ -4463,7 +4451,7 @@ def mayday(): ddist = xdist # Since starbase not in quadrant, set up new quadrant game.quadrant = ibq - newqad(True) + newqad() # dematerialize starship game.quad[game.sector.x][game.sector.y]=IHDOT proutn(_("Starbase in Quadrant %s responds--%s dematerializes") \ @@ -4575,7 +4563,6 @@ def abandon(): game.state.crew) game.casual += game.state.crew game.abandoned += game.state.crew - # If at least one base left, give 'em the Faerie Queene skip(1) game.icrystl = False # crystals are lost @@ -4587,7 +4574,7 @@ def abandon(): if not game.quadrant == game.state.baseq[nb]: game.quadrant = game.state.baseq[nb] game.sector.x = game.sector.y = 5 - newqad(True) + newqad() while True: # position next to base by trial and error game.quad[game.sector.x][game.sector.y] = IHDOT @@ -4600,7 +4587,7 @@ def abandon(): break # found a spot game.sector.x=QUADSIZE/2 game.sector.y=QUADSIZE/2 - newqad(True) + newqad() # Get new commission game.quad[game.sector.x][game.sector.y] = game.ship = IHF game.state.crew = FULLCREW @@ -5502,7 +5489,6 @@ def eta(): scanner.chew() skip(1) return - # Code from setup.c begins here @@ -5783,9 +5769,14 @@ def setup(): unschedule(FENSLV) unschedule(FREPRO) # Place thing (in tournament game, we don't want one!) + # New in SST2K: never place the Thing near a starbase. + # This makes sense and avoids a special case in the old code. global thing if game.tourn is None: - thing = randplace(GALSIZE) + while True: + thing = randplace(GALSIZE) + if thing not in game.state.baseq: + break skip(2) game.state.snap = False if game.skill == SKILL_NOVICE: @@ -5818,7 +5809,7 @@ def setup(): if game.state.nscrem: prout(_(" YOU'LL NEED IT.")) waitfor() - newqad(False) + newqad() if len(game.enemies) - (thing == game.quadrant) - (game.tholian != None): game.shldup = True if game.neutz: # bad luck to start in a Romulan Neutral Zone @@ -5934,7 +5925,6 @@ def choose(): def dropin(iquad=None): "Drop a feature on a random dot in the current quadrant." - w = coord() while True: w = randplace(QUADSIZE) if game.quad[w.x][w.y] == IHDOT: @@ -5957,18 +5947,12 @@ def newkling(): "Drop new Klingon into current quadrant." return enemy(IHK, loc=dropin(), power=randreal(300,450)+25.0*game.skill) -def newqad(shutup): +def newqad(): "Set up a new state of quadrant, for when we enter or re-enter it." - w = coord() game.justin = True - game.klhere = 0 - game.irhere = 0 - game.iplnet = 0 - game.neutz = False - game.inorbit = False - game.landed = False - game.ientesc = False - game.iseenit = False + game.iplnet = None + game.neutz = game.inorbit = game.landed = False + game.ientesc = game.iseenit = False # Create a blank quadrant game.quad = fill2d(QUADSIZE, lambda i, j: IHDOT) if game.iscate: @@ -6026,15 +6010,14 @@ def newqad(shutup): skip(1) prout(_("INTRUDER! YOU HAVE VIOLATED THE ROMULAN NEUTRAL ZONE.")) prout(_("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!")) - if shutup==0: - # Put in THING if needed - if thing == game.quadrant: - enemy(type=IHQUEST, loc=dropin(), - power=randreal(6000,6500.0)+250.0*game.skill) - if not damaged(DSRSENS): - skip(1) - prout(_("Mr. Spock- \"Captain, this is most unusual.")) - prout(_(" Please examine your short-range scan.\"")) + # Put in THING if needed + if thing == game.quadrant: + enemy(type=IHQUEST, loc=dropin(), + power=randreal(6000,6500.0)+250.0*game.skill) + if not damaged(DSRSENS): + skip(1) + prout(_("Mr. Spock- \"Captain, this is most unusual.")) + prout(_(" Please examine your short-range scan.\"")) # Decide if quadrant needs a Tholian; lighten up if skill is low if game.options & OPTION_THOLIAN: if (game.skill < SKILL_GOOD and withprob(0.02)) or \ @@ -6135,18 +6118,14 @@ commands = { "HELP": 0, } -def ACCEPT(cmd): return (not commands[cmd] or (commands[cmd] & game.options)) - def listCommands(): "Generate a list of legal commands." - k = 0 proutn(_("LEGAL COMMANDS ARE:")) - for key in commands: - if ACCEPT(key): + for (k, key) in enumerate(commands): + if not commands[cmd] or (commands[key] & game.options): if k % 5 == 0: skip(1) proutn("%-12s " % key) - k += 1 skip(1) def helpme(): @@ -6207,7 +6186,6 @@ def helpme(): def makemoves(): "Command-interpretation loop." - v = 0 clrscr() setwnd(message_window) while True: # command loop @@ -6395,13 +6373,7 @@ def crmena(stars, enemy, loctype, w): def crmshp(): "Emit our ship name." - if game.ship == IHE: - s = _("Enterprise") - elif game.ship == IHF: - s = _("Faerie Queene") - else: - s = "Ship???" - return s + return{IHE:_("Enterprise"),IHF:_("Faerie Queene")}.get(game.ship,"Ship???") def stars(): "Emit a line of stars" @@ -6533,9 +6505,7 @@ def debugme(): proutn("Cause selective damage? ") if ja() == True: for i in range(NDEVICES): - proutn("Kill ") - proutn(device[i]) - proutn("? ") + proutn("Kill %s?" % device[i]) scanner.chew() key = scanner.next() if key == IHALPHA and scanner.sees("y"):