X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=sst.c;h=e27f7fb125a0d2348235f5893cd16e33e88ae708;hp=65c79ac6c35e48618e8ae03acf5af0b9779bcf58;hb=c5b4cba0782b02223a1064273a782b845ce089aa;hpb=5db6160de8bad4de189d3b54dd54011260c7a34f diff --git a/sst.c b/sst.c index 65c79ac..e27f7fb 100644 --- a/sst.c +++ b/sst.c @@ -82,7 +82,7 @@ Here are Stas Sergeev's changes: chasing SCom can take an eternity). 5. Probe target you enter is now the destination quadrant. Before I don't - remember what it was, but it was something I had difficulty using) + remember what it was, but it was something I had difficulty using. 6. Secret password is now autogenerated. @@ -107,17 +107,15 @@ Here are Stas Sergeev's changes: Eric Raymond's changes: - Mainly, I translated this C code out of FORTRAN into C -- created #defines - for a lot of magic numbers and refactored the heck out of it. +Mainly, I translated this C code out of FORTRAN into C -- created #defines +for a lot of magic numbers and refactored the heck out of it. 1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good. 2. Status report now indicates when dilithium crystals are on board. - 3. Can now report starbases left in scrscan. - - 4. Per Dave Matuszek's remarks, Thingy state is not saved across games. - */ + 3. Per Dave Matuszek's remarks, Thingy state is not saved across games. +*/ /* the input queue */ static char line[128], *linep = line; @@ -197,8 +195,8 @@ commands[] = { {"DEBUG", DEBUGCMD, 0}, #define MAYDAY 32 {"MAYDAY", MAYDAY, 0}, - {"SOS", MAYDAY, 0}, - {"CALL", MAYDAY, 0}, + //{"SOS", MAYDAY, 0}, + //{"CALL", MAYDAY, 0}, #define QUIT 33 {"QUIT", QUIT, 0}, #define HELP 34 @@ -206,12 +204,13 @@ commands[] = { }; #define NUMCOMMANDS sizeof(commands)/sizeof(commands[0]) +#define ACCEPT(i) (!commands[i].option || (commands[i].option & game.options)) static void listCommands(void) { int i, k = 0; proutn("LEGAL COMMANDS ARE:"); for (i = 0; i < NUMCOMMANDS; i++) { - if (commands[i].option && !(commands[i].option & game.options)) + if (!ACCEPT(i)) continue; if (k % 5 == 0) skip(1); @@ -239,7 +238,7 @@ static void helpme(void) setwnd(message_window); if (key == IHEOL) return; for (i = 0; i < NUMCOMMANDS; i++) { - if (strcasecmp(commands[i].name, citem)==0) { + if (ACCEPT(i) && strcasecmp(commands[i].name, citem)==0) { i = commands[i].value; break; } @@ -327,14 +326,14 @@ static void makemoves(void) setwnd(message_window); clrscr(); for (i=0; i < ABANDON; i++) - if (isit(commands[i].name)) { + if (ACCEPT(i) && isit(commands[i].name)) { v = commands[i].value; break; } if (i < ABANDON && (!commands[i].option || (commands[i].option & game.options))) break; for (; i < NUMCOMMANDS; i++) - if (strcasecmp(commands[i].name, citem) == 0) { + if (ACCEPT(i) && strcasecmp(commands[i].name, citem) == 0) { v = commands[i].value; break; } @@ -387,18 +386,18 @@ static void makemoves(void) case IMPULSE: // impulse impuls(); break; - case REST: // rest + case REST: // rest wait(); if (ididit) hitme = TRUE; break; - case WARP: // warp + case WARP: // warp setwrp(); break; - case SCORE: // score + case SCORE: // score score(); break; case SENSORS: // sensors - sensor(TRUE); + sensor(); break; case ORBIT: // orbit orbit(); @@ -431,13 +430,13 @@ static void makemoves(void) case COMMANDS: listCommands(); break; - case EMEXIT: // Emergency exit - clrscr(); // Hide screen - freeze(TRUE); // forced save - exit(1); // And quick exit + case EMEXIT: // Emergency exit + clrscr(); // Hide screen + freeze(TRUE); // forced save + exit(1); // And quick exit break; case PROBE: - probe(); // Launch probe + probe(); // Launch probe if (ididit) hitme = TRUE; break; case ABANDON: // Abandon Ship @@ -452,21 +451,21 @@ static void makemoves(void) if (skill > SKILL_GOOD) prout("WARNING--Saved games produce no plaques!"); break; - case DEATHRAY: // Try a desparation measure + case DEATHRAY: // Try a desparation measure deathray(); if (ididit) hitme = TRUE; break; - case DEBUGCMD: // What do we want for debug??? + case DEBUGCMD: // What do we want for debug??? #ifdef DEBUG debugme(); #endif break; - case MAYDAY: // Call for help + case MAYDAY: // Call for help help(); if (ididit) hitme = TRUE; break; case QUIT: - alldone = 1; // quit the game + alldone = 1; // quit the game #ifdef DEBUG if (idebug) score(); #endif @@ -483,16 +482,16 @@ static void makemoves(void) #endif if (Time != 0.0) { events(); - if (alldone) break; // Events did us in + if (alldone) break; // Events did us in } - if (game.state.galaxy[quadx][quady] == SUPERNOVA_PLACE) { // Galaxy went Nova! + if (game.state.galaxy[quadx][quady].supernova) { // Galaxy went Nova! atover(0); continue; } if (hitme && justin==0) { attack(2); if (alldone) break; - if (game.state.galaxy[quadx][quady] == SUPERNOVA_PLACE) { // went NOVA! + if (game.state.galaxy[quadx][quady].supernova) { // went NOVA! atover(0); hitme = TRUE; continue; @@ -509,9 +508,9 @@ int main(int argc, char **argv) { int i, option; - game.options = OPTION_ALL &~ OPTION_IOMODES; + game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_SHOWME); if (getenv("TERM")) - game.options |= OPTION_CURSES; + game.options |= OPTION_CURSES | OPTION_SHOWME; else game.options |= OPTION_TTY; @@ -538,7 +537,7 @@ int main(int argc, char **argv) while (TRUE) { /* Play a game */ setwnd(fullscreen_window); #ifdef DEBUG - prout("INITIAL OPTIONS: %0lx\n", game.options); + prout("INITIAL OPTIONS: %0lx", game.options); #endif /* DEBUG */ clrscr(); prelim(); @@ -752,7 +751,6 @@ void debugme(void) for (i=0; i < NDEVICES; i++) if (game.damage[i] > 0.0) game.damage[i] = 0.0; - stdamtim = 1e30; } proutn("Toggle idebug? "); if (ja() != 0) { @@ -771,7 +769,6 @@ void debugme(void) key = scan(); if (key == IHALPHA && isit("y")) { game.damage[i] = 10.0; - if (i == DRADIO) stdamtim = game.state.date; } } } @@ -780,7 +777,7 @@ void debugme(void) int i; for (i = 1; i < NEVENTS; i++) { int key; - if (game.future[i] == 1e30) continue; + if (game.future[i] == FOREVER) continue; switch (i) { case FSNOVA: proutn("Supernova "); break; case FTBEAM: proutn("T Beam "); break; @@ -800,5 +797,10 @@ void debugme(void) } chew(); } + proutn("Induce supernova here? "); + if (ja() != 0) { + game.state.galaxy[quadx][quady].supernova = TRUE; + atover(1); + } } #endif