6. Perhaps cloaking to be added later? BSD version
-Here are Stas Sergeev's changes (controlled by the proprocessor symbol
-SERGEEV, not yet completely merged):
+Here are Stas Sergeev's changes:
1. The Space Thingy can be shoved, if you it ram, and can fire back if
fired upon.
- 1 The Tholian can be hit with phasers
+ 2. The Tholian can be hit with phasers
- 2. When you are docked, base covers you with an almost invincible shields
+ 3. When you are docked, base covers you with an almost invincible shields
(a commander can still ram you, or a Romulan can destroy the base,
or a SCom can even succeed with direct attack IIRC, but this rarely
happens).
- 3. SCom can't escape from you if no more enemies remain (without this,
- chasing SCom can take an eternity).
+ 4. SCom can't escape from you if no more enemies remain (without this,
+ chasing SCom can take an eternity).
- 4. 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)
+ 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)
- 5. Secret password is now autogenerated.
+ 6. Secret password is now autogenerated.
- 6. "Plaque" is adjusted for A4 paper:)
+ 7. "Plaque" is adjusted for A4 paper :-)
- 7. Phasers now tells you how much energy needed, but only if the computer
+ 8. Phasers now tells you how much energy needed, but only if the computer
is alive.
- 8. Planets are auto-scanned when you enter the quadrant.
+ 9. Planets are auto-scanned when you enter the quadrant.
- 9. Mining or using crystals in presense of enemy now yields an attack.
+ 10. Mining or using crystals in presense of enemy now yields an attack.
There are other minor adjustments to what yields an attack
and what does not.
- 10. Ramming a black hole is no longer instant death. There is a
- chance you might get timewarped instead.
+ 11. Ramming a black hole is no longer instant death. There is a
+ chance you might get timewarped instead.
- 11. "freeze" command reverts to "save", most people will understand this
+ 12. "freeze" command reverts to "save", most people will understand this
better anyway.
+ 13. Screen-oriented interface, with sensor scans always up.
+
Eric Raymond's changes:
- 1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good.
+ 1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good.
*/
int value;
}
commands[] = {
-#ifndef SERGEEV
#define SRSCAN 1
{"SRSCAN", SRSCAN},
{"STATUS", SRSCAN},
#define LRSCAN 2
{"LRSCAN", LRSCAN},
-#endif /* SERGEEV */
#define PHASERS 3
{"PHASERS", PHASERS},
#define TORPEDO 4
{"WARP", WARP},
#define SCORE 13
{"SCORE", SCORE},
-#ifndef SERGEEV
#define SENSORS 14
{"SENSORS", SENSORS},
-#endif /* SERGEEV */
#define ORBIT 15
{"ORBIT", ORBIT},
-#define TRANSPORT 17
+#define TRANSPORT 16
{"TRANSPORT", TRANSPORT},
-#define MINE 18
+#define MINE 17
{"MINE", MINE},
-#define CRYSTALS 19
+#define CRYSTALS 18
{"CRYSTALS", CRYSTALS},
-#define SHUTTLE 20
+#define SHUTTLE 19
{"SHUTTLE", SHUTTLE},
-#define PLANETS 21
+#define PLANETS 20
{"PLANETS", PLANETS},
-#ifdef SERGEEV
-#define REQUEST 22
- {"REQUEST", REQUEST},
-#endif /* SERGEEV */
-#define REPORT 23
+#define REPORT 21
{"REPORT", REPORT},
-#define COMPUTER 24
+#define COMPUTER 23
{"COMPUTER", COMPUTER},
-#define COMMANDS 25
+#define COMMANDS 24
{"COMMANDS", COMMANDS},
-#define EMEXIT 26
+#define EMEXIT 25
{"EMEXIT", EMEXIT},
-#define PROBE 27
+#define PROBE 26
{"PROBE", PROBE},
-#define SAVE 28
+#define SAVE 27
{"SAVE", SAVE},
{"FREEZE", SAVE},
-#define ABANDON 29
+#define ABANDON 28
{"ABANDON", ABANDON},
-#define DESTRUCT 30
+#define DESTRUCT 29
{"DESTRUCT", DESTRUCT},
-#define DEATHRAY 31
+#define DEATHRAY 30
{"DEATHRAY", DEATHRAY},
-#define DEBUGCMD 32
+#define DEBUGCMD 31
{"DEBUG", DEBUGCMD},
-#define MAYDAY 33
+#define MAYDAY 32
{"MAYDAY", MAYDAY},
{"SOS", MAYDAY},
{"CALL", MAYDAY},
-#define QUIT 34
+#define QUIT 33
{"QUIT", QUIT},
-#define HELP 35
+#define HELP 34
{"HELP", HELP},
};
-#ifdef SERGEEV
-wnd wnds[6]={{1,1,80,25},{1,1,25,12},{26,2,80,12},{65,1,80,10},{1,13,80,23},{1,24,80,25}};
-short curwnd;
-#endif /* SERGEEV */
-
#define NUMCOMMANDS sizeof(commands)/sizeof(commands[0])
static void listCommands(int x) {
key = scan();
while (TRUE) {
if (key == IHEOL) {
-#ifdef SERGEEV
- setwnd(5);
-#endif /* SERGEEV */
+ setwnd(BOTTOM_WINDOW);
proutn("Help on what command? ");
key = scan();
}
-#ifdef SERGEEV
- setwnd(4);
-#endif /* SERGEEV */
+ setwnd(LOWER_WINDOW);
if (key == IHEOL) return;
for (i = 0; i < NUMCOMMANDS; i++) {
if (strcasecmp(commands[i].name, citem)==0) {
fclose(fp);
}
-void drawmaps(short l) {
-/* hook to be called after moving to redraw maps */
-#ifdef SERGEEV
- _setcursortype(_NOCURSOR);
- if (l==1) sensor();
- if (l!=2) setwnd(1);
- gotoxy(1,1);
- strcpy(line,"s");
- srscan(1);
- if (l!=2){
- setwnd(2);
- clrscr();
- srscan(2);
- setwnd(3);
- clrscr();
- strcpy(line,"l");
- lrscan();
- _setcursortype(_NORMALCURSOR);
- }
-#endif /* SERGEEV */
-}
-
static void makemoves(void) {
int i, hitme;
-#ifdef SERGEEV
clrscr();
- setwnd(4);
-#endif /* SERGEEV */
+ setwnd(LOWER_WINDOW);
while (TRUE) { /* command loop */
drawmaps(1);
while (TRUE) { /* get a command */
Time = 0.0;
i = -1;
chew();
-#ifdef SERGEEV
- setwnd(5);
+ setwnd(BOTTOM_WINDOW);
clrscr();
-#endif /* SERGEEV */
proutn("COMMAND> ");
if (scan() == IHEOL) {
-#ifdef SERGEEV
- _setcursortype(_NOCURSOR);
- setwnd(4);
- clrscr();
- chart(0);
- _setcursortype(_NORMALCURSOR);
-#endif /* SERGEEV */
+ makechart();
continue;
}
-#ifdef SERGEEV
ididit=0;
clrscr();
- setwnd(4);
+ setwnd(LOWER_WINDOW);
clrscr();
-#endif /* SERGEEV */
for (i=0; i < ABANDON; i++)
if (isit(commands[i].name)) {
i = commands[i].value;
}
commandhook(commands[i].name, TRUE);
switch (i) { /* command switch */
-#ifndef SERGEEV
case SRSCAN: // srscan
srscan(1);
break;
case LRSCAN: // lrscan
lrscan();
break;
-#endif /* SERGEEV */
case PHASERS: // phasers
phasers();
if (ididit) hitme = TRUE;
case SCORE: // score
score();
break;
-#ifndef SERGEEV
case SENSORS: // sensors
sensor();
break;
-#endif /* SERGEEV */
case ORBIT: // orbit
orbit();
if (ididit) hitme = TRUE;
break;
case SAVE: // Save Game
freeze(FALSE);
-#ifdef SERGEEV
clrscr();
-#endif /* SERGEEV */
if (skill > 3)
prout("WARNING--Saved games produce no plaques!");
break;
}
}
-#ifndef SERGEEV
- iostart(usecurses);
-#else
randomize();
- textattr(7);
- clrscr();
- setwnd(0);
-#endif /* SERGEEV */
+ iostart(usecurses);
+
line[0] = '\0';
for (i = optind; i < argc; i++) {
strcat(line, argv[i]);
}
proutn("Do you want to play again? ");
if (!ja()) break;
-#ifdef SERGEEV
- setwnd(0);
+ setwnd(FULLSCREEN_WINDOW);
clrscr();
-#endif /* SERGEEV */
}
skip(1);
-#ifndef SERGEEV
ioend();
-#endif /* SERGEEV */
prout("May the Great Bird of the Galaxy roost upon your home planet.");
return 0;
}
chew();
return IHEOL;
}
- getline(line, sizeof(line));
-#ifdef SERGEEV
+ cgetline(line, sizeof(line));
fflush(stdin);
- if (curwnd==5){
+ if (curwnd==BOTTOM_WINDOW){
clrscr();
- setwnd(4);
+ setwnd(LOWER_WINDOW);
clrscr();
}
-#endif /* SERGEEV */
linep = line;
}
// Skip leading white space