projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Input capture to 'sst-input.log' now happens automatically when idebug is on.
[super-star-trek.git]
/
src
/
sst.c
diff --git
a/src/sst.c
b/src/sst.c
index 32208d8cf557d1ba37798ebcdade5b36e0741bd4..5d34a0dd43c58caee73dfeb6c61c8584c5c92162 100644
(file)
--- a/
src/sst.c
+++ b/
src/sst.c
@@
-164,11
+164,16
@@
for a lot of magic numbers and refactored the heck out of it.
static char line[128], *linep = line;
struct game game;
static char line[128], *linep = line;
struct game game;
-int thingx, thingy, iqhere, iqengry;
-int iscore, iskill; // Common PLAQ
+coord thing;
+int iqhere, iqengry;
+int iscore, iskill; // Common PLAQ
double aaitem;
double perdate;
char citem[10];
double aaitem;
double perdate;
char citem[10];
+int seed; // the random-number seed
+bool idebug; // debug mode
+bool randready; // Has the random-number generator initialized?
+FILE *logfp;
char *device[NDEVICES] = {
"S. R. Sensors",
char *device[NDEVICES] = {
"S. R. Sensors",
@@
-297,7
+302,7
@@
static void helpme(void)
/* Give help on commands */
int key;
key = scan();
/* Give help on commands */
int key;
key = scan();
-
while (TRUE
) {
+
for(;;
) {
if (key == IHEOL) {
setwnd(prompt_window);
proutn("Help on what command? ");
if (key == IHEOL) {
setwnd(prompt_window);
proutn("Help on what command? ");
@@
-374,13
+379,14
@@
void enqueue(char *s)
static void makemoves(void)
{
static void makemoves(void)
{
- int i, v = 0, hitme;
+ int i, v = 0;
+ bool hitme;
clrscr();
setwnd(message_window);
clrscr();
setwnd(message_window);
-
while (TRUE
) { /* command loop */
+
for(;;
) { /* command loop */
drawmaps(1);
drawmaps(1);
-
while (TRUE
) { /* get a command */
- hitme =
FALSE
;
+
for(;;
) { /* get a command */
+ hitme =
false
;
game.justin = 0;
game.optime = 0.0;
i = -1;
game.justin = 0;
game.optime = 0.0;
i = -1;
@@
-412,7
+418,7
@@
static void makemoves(void)
break;
listCommands();
}
break;
listCommands();
}
- commandhook(commands[i].name,
TRUE
);
+ commandhook(commands[i].name,
true
);
switch (v) { /* command switch */
case SRSCAN: // srscan
srscan(SCAN_FULL);
switch (v) { /* command switch */
case SRSCAN: // srscan
srscan(SCAN_FULL);
@@
-428,11
+434,11
@@
static void makemoves(void)
break;
case PHASERS: // phasers
phasers();
break;
case PHASERS: // phasers
phasers();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case TORPEDO: // photons
photon();
break;
case TORPEDO: // photons
photon();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case MOVE: // move
warp(1);
break;
case MOVE: // move
warp(1);
@@
-440,7
+446,7
@@
static void makemoves(void)
case SHIELDS: // shields
doshield(1);
if (game.ididit) {
case SHIELDS: // shields
doshield(1);
if (game.ididit) {
- hitme=
TRUE
;
+ hitme=
true
;
game.shldchg = 0;
}
break;
game.shldchg = 0;
}
break;
@@
-459,7
+465,7
@@
static void makemoves(void)
break;
case REST: // rest
wait();
break;
case REST: // rest
wait();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case WARP: // warp
setwrp();
break;
case WARP: // warp
setwrp();
@@
-472,22
+478,22
@@
static void makemoves(void)
break;
case ORBIT: // orbit
orbit();
break;
case ORBIT: // orbit
orbit();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case TRANSPORT: // transport "beam"
beam();
break;
case MINE: // mine
mine();
break;
case TRANSPORT: // transport "beam"
beam();
break;
case MINE: // mine
mine();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case CRYSTALS: // crystals
usecrystals();
break;
case CRYSTALS: // crystals
usecrystals();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case SHUTTLE: // shuttle
shuttle();
break;
case SHUTTLE: // shuttle
shuttle();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case PLANETS: // Planet list
preport();
break;
case PLANETS: // Planet list
preport();
@@
-503,12
+509,12
@@
static void makemoves(void)
break;
case EMEXIT: // Emergency exit
clrscr(); // Hide screen
break;
case EMEXIT: // Emergency exit
clrscr(); // Hide screen
- freeze(
TRUE
); // forced save
+ freeze(
true
); // forced save
exit(1); // And quick exit
break;
case PROBE:
probe(); // Launch probe
exit(1); // And quick exit
break;
case PROBE:
probe(); // Launch probe
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case ABANDON: // Abandon Ship
abandn();
break;
case ABANDON: // Abandon Ship
abandn();
@@
-517,54
+523,46
@@
static void makemoves(void)
dstrct();
break;
case SAVE: // Save Game
dstrct();
break;
case SAVE: // Save Game
- freeze(
FALSE
);
+ freeze(
false
);
clrscr();
if (game.skill > SKILL_GOOD)
prout("WARNING--Saved games produce no plaques!");
break;
case DEATHRAY: // Try a desparation measure
deathray();
clrscr();
if (game.skill > SKILL_GOOD)
prout("WARNING--Saved games produce no plaques!");
break;
case DEATHRAY: // Try a desparation measure
deathray();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case DEBUGCMD: // What do we want for debug???
break;
case DEBUGCMD: // What do we want for debug???
-#ifdef DEBUG
debugme();
debugme();
-#endif
break;
case MAYDAY: // Call for help
mayday();
break;
case MAYDAY: // Call for help
mayday();
- if (game.ididit) hitme =
TRUE
;
+ if (game.ididit) hitme =
true
;
break;
case QUIT:
game.alldone = 1; // quit the game
break;
case QUIT:
game.alldone = 1; // quit the game
-#ifdef DEBUG
- if (game.idebug) score();
-#endif
break;
case HELP:
helpme(); // get help
break;
}
break;
case HELP:
helpme(); // get help
break;
}
- commandhook(commands[i].name,
FALSE
);
+ commandhook(commands[i].name,
false
);
for (;;) {
if (game.alldone) break; // Game has ended
for (;;) {
if (game.alldone) break; // Game has ended
-#ifdef DEBUG
- if (game.idebug) prout("2500");
-#endif
if (game.optime != 0.0) {
events();
if (game.alldone) break; // Events did us in
}
if (game.optime != 0.0) {
events();
if (game.alldone) break; // Events did us in
}
- if (game.state.galaxy[game.quad
x][game.quad
y].supernova) { // Galaxy went Nova!
+ if (game.state.galaxy[game.quad
rant.x][game.quadrant.
y].supernova) { // Galaxy went Nova!
atover(0);
continue;
}
if (hitme && game.justin==0) {
attack(2);
if (game.alldone) break;
atover(0);
continue;
}
if (hitme && game.justin==0) {
attack(2);
if (game.alldone) break;
- if (game.state.galaxy[game.quad
x][game.quady].supernova) {
// went NOVA!
+ if (game.state.galaxy[game.quad
rant.x][game.quadrant.y].supernova) {
// went NOVA!
atover(0);
atover(0);
- hitme =
TRUE
;
+ hitme =
true
;
continue;
}
}
continue;
}
}
@@
-572,6
+570,7
@@
static void makemoves(void)
}
if (game.alldone) break;
}
}
if (game.alldone) break;
}
+ if (idebug) prout("=== Ending");
}
}
@@
-585,14
+584,17
@@
int main(int argc, char **argv)
else
game.options |= OPTION_TTY;
else
game.options |= OPTION_TTY;
- while ((option = getopt(argc, argv, "t")) != -1) {
+ while ((option = getopt(argc, argv, "t
x
")) != -1) {
switch (option) {
case 't':
game.options |= OPTION_TTY;
game.options &=~ OPTION_CURSES;
break;
switch (option) {
case 't':
game.options |= OPTION_TTY;
game.options &=~ OPTION_CURSES;
break;
+ case 'x':
+ idebug = true;
+ break;
default:
default:
- fprintf(stderr, "usage: sst [-t] [startcommand...].\n");
+ fprintf(stderr, "usage: sst [-t] [
-x] [
startcommand...].\n");
exit(0);
}
}
exit(0);
}
}
@@
-605,11
+607,8
@@
int main(int argc, char **argv)
strcat(line, argv[i]);
strcat(line, " ");
}
strcat(line, argv[i]);
strcat(line, " ");
}
-
while (TRUE
) { /* Play a game */
+
for(;;
) { /* Play a game */
setwnd(fullscreen_window);
setwnd(fullscreen_window);
-#ifdef DEBUG
- prout("INITIAL OPTIONS: %0lx", game.options);
-#endif /* DEBUG */
clrscr();
prelim();
setup(line[0] == '\0');
clrscr();
prelim();
setup(line[0] == '\0');
@@
-626,7
+625,7
@@
int main(int argc, char **argv)
proutn("Do you want your score recorded?");
if (ja()) {
chew2();
proutn("Do you want your score recorded?");
if (ja()) {
chew2();
- freeze(
FALSE
);
+ freeze(
false
);
}
}
proutn("Do you want to play again? ");
}
}
proutn("Do you want to play again? ");
@@
-660,22
+659,22
@@
void cramen(int i)
proutn(s);
}
proutn(s);
}
-char *cramlc(enum loctype key,
int x, int y
)
+char *cramlc(enum loctype key,
coord w
)
{
static char buf[32];
buf[0] = '\0';
if (key == quadrant) strcpy(buf, "Quadrant ");
else if (key == sector) strcpy(buf, "Sector ");
{
static char buf[32];
buf[0] = '\0';
if (key == quadrant) strcpy(buf, "Quadrant ");
else if (key == sector) strcpy(buf, "Sector ");
- sprintf(buf+strlen(buf), "%d - %d",
x,
y);
+ sprintf(buf+strlen(buf), "%d - %d",
w.x, w.
y);
return buf;
}
return buf;
}
-void crmena(int i, int enemy, int key,
int x, int y
)
+void crmena(int i, int enemy, int key,
coord w
)
{
if (i == 1) proutn("***");
cramen(enemy);
proutn(" at ");
{
if (i == 1) proutn("***");
cramen(enemy);
proutn(" at ");
- proutn(cramlc(key,
x, y
));
+ proutn(cramlc(key,
w
));
}
void crmshp(void)
}
void crmshp(void)
@@
-700,8
+699,17
@@
double expran(double avrage)
return -avrage*log(1e-7 + Rand());
}
return -avrage*log(1e-7 + Rand());
}
-double Rand(void) {
- return rand()/(1.0 + (double)RAND_MAX);
+double Rand(void)
+{
+ if (!randready) {
+ if (seed == 0)
+ seed = (unsigned)time(NULL);
+ if (idebug)
+ fprintf(logfp, "seed %d\n", seed);
+ srand(seed);
+ randready = true;
+ }
+ return rand()/(1.0 + (double)RAND_MAX);
}
void iran(int size, int *i, int *j)
}
void iran(int size, int *i, int *j)
@@
-778,14
+786,14
@@
int scan(void)
return IHALPHA;
}
return IHALPHA;
}
-
int
ja(void)
+
bool
ja(void)
{
chew();
{
chew();
-
while (TRUE
) {
+
for(;;
) {
scan();
chew();
scan();
chew();
- if (*citem == 'y') return
TRUE
;
- if (*citem == 'n') return
FALSE
;
+ if (*citem == 'y') return
true
;
+ if (*citem == 'n') return
false
;
proutn("Please answer with \"Y\" or \"N\": ");
}
}
proutn("Please answer with \"Y\" or \"N\": ");
}
}
@@
-806,14
+814,13
@@
int isit(char *s)
}
}
-#ifdef DEBUG
void debugme(void)
{
proutn("Reset levels? ");
if (ja() != 0) {
void debugme(void)
{
proutn("Reset levels? ");
if (ja() != 0) {
- if (
energy < game.inenrg)
energy = game.inenrg;
- shield = game.inshld;
- torps = game.intorps;
+ if (
game.energy < game.inenrg) game.
energy = game.inenrg;
+
game.
shield = game.inshld;
+
game.
torps = game.intorps;
game.lsupres = game.inlsr;
}
proutn("Reset damage? ");
game.lsupres = game.inlsr;
}
proutn("Reset damage? ");
@@
-825,8
+832,8
@@
void debugme(void)
}
proutn("Toggle game.idebug? ");
if (ja() != 0) {
}
proutn("Toggle game.idebug? ");
if (ja() != 0) {
-
game.idebug = !game.
idebug;
- if (
game.
idebug) prout("Debug output ON");
+
idebug = !
idebug;
+ if (idebug) prout("Debug output ON");
else prout("Debug output OFF");
}
proutn("Cause selective damage? ");
else prout("Debug output OFF");
}
proutn("Cause selective damage? ");
@@
-870,8
+877,7
@@
void debugme(void)
}
proutn("Induce supernova here? ");
if (ja() != 0) {
}
proutn("Induce supernova here? ");
if (ja() != 0) {
- game.state.galaxy[game.quad
x][game.quady].supernova = TRUE
;
+ game.state.galaxy[game.quad
rant.x][game.quadrant.y].supernova = true
;
atover(1);
}
}
atover(1);
}
}
-#endif