X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=3b395ee1c7a9395e75ad6a74aa579d5be4fb52e0;hp=bfa8abce995372f78dac07a5b4b6efe91e76a8a8;hb=5fe77f21f31224ab85de2b6d553c9c1cc589915e;hpb=d380c90aaabc032207ce0f298186cfa7064cf100 diff --git a/src/sst.py b/src/sst.py index bfa8abc..3b395ee 100644 --- a/src/sst.py +++ b/src/sst.py @@ -2,10 +2,9 @@ """ sst.py =-- Super Star Trek in Python -This code is a Python translation of a C translation of a FORTRAN original. -The FORTRANness still shows in many ways, notably the use of a lot of -parallel arrays where a more modern language would use structures -or objects. (However, 1-origin array indexing was fixed.) +This code is a Python translation of a C translation of a FORTRAN +original dating back to 1973. Beautiful Python it is not. But it +works. Dave Matuszek says: @@ -46,11 +45,11 @@ however mine had some feature it didn't have. So I merged its features that I liked. I also took a peek at the DECUS version (a port, less sources, to the PDP-10), and some other variations. -1, Compared to the original UT version, I've changed the "help" command to -"call" and the "terminate" command to "quit" to better match -user expectations. The DECUS version apparently made those changes -as well as changing "freeze" to "save". However I like "freeze". -(Both "freeze" and "save" work in SST2K.) +1, Compared to the original UT version, I've changed the "help" +command to "call" and the "terminate" command to "quit" to better +match user expectations. The DECUS version apparently made those +changes as well as changing "freeze" to "save". However I like +"freeze". (Both "freeze" and "save" work in SST2K.) 2. The experimental deathray originally had only a 5% chance of success, but could be used repeatedly. I guess after a couple @@ -180,7 +179,7 @@ more: the LRSCAN command is no longer needed. (Controlled by OPTION_AUTOSCAN and turned off if game type is "plain" or "almy".) """ -import os,sys,math,curses,time,atexit,readline,cPickle,random,getopt,copy +import os, sys, math, curses, time, readline, cPickle, random, copy SSTDOC = "/usr/share/doc/sst/sst.doc" DOC_NAME = "sst.doc" @@ -1057,11 +1056,11 @@ def movetholian(): for i in range(QUADSIZE): if game.quad[0][i]!=IHWEB and game.quad[0][i]!=IHT: return - if game.quad[QUADSIZE][i]!=IHWEB and game.quad[QUADSIZE][i]!=IHT: + if game.quad[QUADSIZE-1][i]!=IHWEB and game.quad[QUADSIZE-1][i]!=IHT: return if game.quad[i][0]!=IHWEB and game.quad[i][0]!=IHT: return - if game.quad[i][QUADSIZE]!=IHWEB and game.quad[i][QUADSIZE]!=IHT: + if game.quad[i][QUADSIZE-1]!=IHWEB and game.quad[i][QUADSIZE-1]!=IHT: return # All plugged up -- Tholian splits game.quad[game.tholian.kloc.i][game.tholian.kloc.j]=IHWEB @@ -2653,13 +2652,6 @@ def wait(): game.resting = False game.optime = 0 -# A nova occurs. It is the result of having a star hit with a -# photon torpedo, or possibly of a probe warhead going off. -# Stars that go nova cause stars which surround them to undergo -# the same probabilistic process. Klingons next to them are -# destroyed. And if the starship is next to it, it gets zapped. -# If the zap is too much, it gets destroyed. - def nova(nov): "Star goes nova." course = (0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5) @@ -3432,7 +3424,7 @@ def prouts(line): time.sleep(0.03) proutn(c) if game.options & OPTION_CURSES: - wrefresh(curwnd) + curwnd.refresh() else: sys.stdout.flush() if not replayfp or replayfp.closed: @@ -4352,23 +4344,6 @@ def probe(): game.ididit = True return -# Here's how the mayday code works: -# -# First, the closest starbase is selected. If there is a a starbase -# in your own quadrant, you are in good shape. This distance takes -# quadrant distances into account only. -# -# A magic number is computed based on the distance which acts as the -# probability that you will be rematerialized. You get three tries. -# -# When it is determined that you should be able to be rematerialized -# (i.e., when the probability thing mentioned above comes up -# positive), you are put into that quadrant (anywhere). Then, we try -# to see if there is a spot adjacent to the star- base. If not, you -# can't be rematerialized!!! Otherwise, it drops you there. It only -# tries five times to find a spot to drop you. After that, it's your -# problem. - def mayday(): "Yell for help from nearest starbase." # There's more than one way to move in this game! @@ -4445,24 +4420,6 @@ def mayday(): skip(1) prout(_("Lt. Uhura- \"Captain, we made it!\"")) -# Abandon Ship (the BSD-Trek description) -# -# The ship is abandoned. If your current ship is the Faire -# Queene, or if your shuttlecraft is dead, you're out of -# luck. You need the shuttlecraft in order for the captain -# (that's you!!) to escape. -# -# Your crew can beam to an inhabited starsystem in the -# quadrant, if there is one and if the transporter is working. -# If there is no inhabited starsystem, or if the transporter -# is out, they are left to die in outer space. -# -# If there are no starbases left, you are captured by the -# Klingons, who torture you mercilessly. However, if there -# is at least one starbase, you are returned to the -# Federation in a prisoner of war exchange. Of course, this -# can't happen unless you have taken some prisoners. - def abandon(): "Abandon ship." scanner.chew() @@ -6517,6 +6474,7 @@ def debugme(): atover(True) if __name__ == '__main__': + import getopt, socket try: global line, thing, game, idebug game = None @@ -6568,6 +6526,8 @@ if __name__ == '__main__': if logfp: logfp.write("# seed %s\n" % seed) logfp.write("# options %s\n" % " ".join(arguments)) + logfp.write("# recorded by %s@%s on %s\n" % \ + (os.getenv("LOGNAME"),socket.gethostname(),time.ctime())) random.seed(seed) scanner = sstscanner() map(scanner.append, arguments)