X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Fsst.py;h=fe29b948d11870230dff7c043789bc50e9474b44;hp=9eaf77dc990a98fab700f7eb927dc613f1298a3c;hb=8daf76bb73f4194657e8c215f542a14ea162eeda;hpb=fcc0982757ef9c87939a9bff808e93064a28f688 diff --git a/src/sst.py b/src/sst.py index 9eaf77d..fe29b94 100644 --- a/src/sst.py +++ b/src/sst.py @@ -33,6 +33,24 @@ MINCMDR = 10 # Minimum number of Klingon commanders DOCKFAC = 0.25 # Repair faster when docked PHASEFAC = 2.0 # Unclear what this is, it was in the C version +DEFAULT = -1 +BLACK = 0 +BLUE = 1 +GREEN = 2 +CYAN = 3 +RED = 4 +MAGENTA = 5 +BROWN = 6 +LIGHTGRAY = 7 +DARKGRAY = 8 +LIGHTBLUE = 9 +LIGHTGREEN = 10 +LIGHTCYAN = 11 +LIGHTRED = 12 +LIGHTMAGENTA = 13 +YELLOW = 14 +WHITE = 15 + class TrekError: pass @@ -183,6 +201,7 @@ OPTION_WORLDS = 0x00000800 # logic for inhabited worlds (ESR, 2006) OPTION_AUTOSCAN = 0x00001000 # automatic LRSCAN before CHART (ESR, 2006) OPTION_PLAIN = 0x01000000 # user chose plain game OPTION_ALMY = 0x02000000 # user chose Almy variant +OPTION_COLOR = 0x04000000 # enable color display (experimental, ESR, 2010) # Define devices DSRSENS = 0 @@ -319,7 +338,7 @@ class gamestate: self.iplnet = None # planet # in quadrant self.inplan = 0 # initial planets self.irhere = 0 # Romulans in quadrant - self.isatb = 0 # =1 if super commander is attacking base + self.isatb = 0 # =2 if super commander is attacking base self.tourn = None # tournament number self.nprobes = 0 # number of probes available self.inresor = 0.0 # initial resources @@ -649,7 +668,7 @@ def movescom(iq, avoid): game.state.kscmdr = iq game.state.galaxy[game.state.kscmdr.i][game.state.kscmdr.j].klingons += 1 if game.state.kscmdr==game.quadrant: - # SC has scooted, Remove him from current quadrant + # SC has scooted, remove him from current quadrant game.iscate=False game.isatb=0 game.ientesc = False @@ -970,11 +989,12 @@ def randdevice(): 15, # DCOMPTR: computer 1.5% 20, # NAVCOMP: navigation system 2.0% 75, # DTRANSP: transporter 7.5% - 20, # DSHCTRL: high-speed shield controller 2.0% + 20, # DSHCTRL: high-speed shield controller 2.0% 10, # DDRAY: death ray 1.0% 30, # DDSP: deep-space probes 3.0% ) - idx = randrange(1000) # weights must sum to 1000 + assert(sum(weights) == 1000) + idx = randrange(1000) sum = 0 for (i, w) in enumerate(weights): sum += w @@ -3057,6 +3077,17 @@ def iostart(): stdscr.keypad(True) curses.nonl() curses.cbreak() + if game.options & OPTION_COLOR: + curses.start_color(); + curses.use_default_colors() + curses.init_pair(curses.COLOR_BLACK, curses.COLOR_BLACK, -1); + curses.init_pair(curses.COLOR_GREEN, curses.COLOR_GREEN, -1); + curses.init_pair(curses.COLOR_RED, curses.COLOR_RED, -1); + curses.init_pair(curses.COLOR_CYAN, curses.COLOR_CYAN, -1); + curses.init_pair(curses.COLOR_WHITE, curses.COLOR_WHITE, -1); + curses.init_pair(curses.COLOR_MAGENTA, curses.COLOR_MAGENTA, -1); + curses.init_pair(curses.COLOR_BLUE, curses.COLOR_BLUE, -1); + curses.init_pair(curses.COLOR_YELLOW, curses.COLOR_YELLOW, -1); global fullscreen_window, srscan_window, report_window, status_window global lrscan_window, message_window, prompt_window (rows, columns) = stdscr.getmaxyx() @@ -3203,7 +3234,48 @@ def clrscr(): curwnd.move(0, 0) curwnd.refresh() linecount = 0 - + +def textcolor(color=DEFAULT): + if game.options & OPTION_COLOR: + if color == DEFAULT: + curwnd.attrset(0); + elif color == BLACK: + curwnd.attron(curses.color_pair(curses.COLOR_BLACK)); + elif color == BLUE: + curwnd.attron(curses.color_pair(curses.COLOR_BLUE)); + elif color == GREEN: + curwnd.attron(curses.color_pair(curses.COLOR_GREEN)); + elif color == CYAN: + curwnd.attron(curses.color_pair(curses.COLOR_CYAN)); + elif color == RED: + curwnd.attron(curses.color_pair(curses.COLOR_RED)); + elif color == MAGENTA: + curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA)); + elif color == BROWN: + curwnd.attron(curses.color_pair(curses.COLOR_YELLOW)); + elif color == LIGHTGRAY: + curwnd.attron(curses.color_pair(curses.COLOR_WHITE)); + elif color == DARKGRAY: + curwnd.attron(curses.color_pair(curses.COLOR_BLACK) | curses.A_BOLD); + elif color == LIGHTBLUE: + curwnd.attron(curses.color_pair(curses.COLOR_BLUE) | curses.A_BOLD); + elif color == LIGHTGREEN: + curwnd.attron(curses.color_pair(curses.COLOR_GREEN) | curses.A_BOLD); + elif color == LIGHTCYAN: + curwnd.attron(curses.color_pair(curses.COLOR_CYAN) | curses.A_BOLD); + elif color == LIGHTRED: + curwnd.attron(curses.color_pair(curses.COLOR_RED) | curses.A_BOLD); + elif color == LIGHTMAGENTA: + curwnd.attron(curses.color_pair(curses.COLOR_MAGENTA) | curses.A_BOLD); + elif color == YELLOW: + curwnd.attron(curses.color_pair(curses.COLOR_YELLOW) | curses.A_BOLD); + elif color == WHITE: + curwnd.attron(curses.color_pair(curses.COLOR_WHITE) | curses.A_BOLD); + +def highvideo(): + if game.options & OPTION_COLOR: + curwnd.attron(curses.A_REVERSE) + # # Things past this point have policy implications. # @@ -4106,10 +4178,12 @@ def mayday(): elif m == 3: proutn(_("3rd")) proutn(_(" attempt to re-materialize ") + crmshp()) game.quad[ix][iy]=('-','o','O')[m-1] + textcolor(RED) warble() if randreal() > probf: break prout(_("fails.")) + textcolor(DEFAULT) curses.delay_output(500) if m > 3: game.quad[ix][iy]='?' @@ -4119,7 +4193,9 @@ def mayday(): finish(FMATERIALIZE) return game.quad[ix][iy]=game.ship + textcolor(GREEN); prout(_("succeeds.")) + textcolor(DEFAULT); dock(False) skip(1) prout(_("Lt. Uhura- \"Captain, we made it!\"")) @@ -4458,7 +4534,7 @@ def usecrystals(): skip(1) prouts(_("Scotty- \"Keep your fingers crossed, Sir!\"")) skip(1) - if with(game.cryprob): + if withprob(game.cryprob): prouts(_(" \"Activating now! - - No good! It's***")) skip(2) prouts(_("***RED ALERT! RED A*L********************************")) @@ -4867,7 +4943,15 @@ def chart(): 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): + textcolor({"green":GREEN, + "yellow":YELLOW, + "red":RED, + "docked":CYAN, + "dead":BROWN}[game.condition]) + if game.quad[i][j] != game.ship: + highvideo(); proutn("%c " % game.quad[i][j]) + textcolor(DEFAULT) else: proutn("- ") @@ -5485,6 +5569,7 @@ def choose(): pass elif len(scanner.token): proutn(_("What is \"%s\"?") % scanner.token) + game.options &=~ OPTION_COLOR setpassword() if game.passwd == "debug": idebug = True