#include <string.h>
#include <time.h>
-void dstrct()
+void selfdestruct(void)
+/* self-destruct maneuver */
{
/* Finish with a BANG! */
chew();
- if (game.damage[DCOMPTR] != 0.0) {
+ if (damaged(DCOMPTR)) {
prout(_("Computer damaged; cannot execute destruct sequence."));
return;
}
void kaboom(void)
{
stars();
- if (game.ship==IHE) prouts("***");
+ if (game.ship==IHE)
+ prouts("***");
prouts(_("********* Entropy of "));
crmshp();
prouts(_(" maximized *********"));
int l=1;
while (l <= game.nenhere) {
if (game.kpower[l]*game.kdist[l] <= whammo)
- deadkl(game.ks[l], game.quad[game.ks[l].x][game.ks[l].y], game.ks[l].x, game.ks[l].y);
+ deadkl(game.ks[l], game.quad[game.ks[l].x][game.ks[l].y], game.ks[l]);
l++;
}
}
}
-void finish(FINTYPE ifin)
+void finish(FINTYPE ifin)
+/* end the game, with appropriate notfications */
{
- int igotit = 0;
- game.alldone = 1;
+ bool igotit = false;
+ game.alldone = true;
skip(3);
prout(_("It is stardate %.1f."), game.state.date);
skip(1);
prout(_("You have smashed the Klingon invasion fleet and saved"));
prout(_("the Federation."));
- game.gamewon=1;
+ game.gamewon = true;
if (game.alive) {
double badpt;
- badpt = 5.0*game.state.starkl + game.casual + 10.0*game.state.nplankl +
- 45.*game.nhelp+100.*game.state.basekl;
- if (game.ship == IHF) badpt += 100.0;
- else if (game.ship == 0) badpt += 200.0;
- if (badpt < 100.0) badpt = 0.0; // Close enough!
+ badpt = 5.0*game.state.starkl \
+ + game.casual \
+ + 10.0*game.state.nplankl \
+ + 300.0*game.state.nworldkl \
+ + 45.0*game.nhelp \
+ + 100.0*game.state.basekl \
+ + 3.0*game.abandoned;
+ if (game.ship == IHF)
+ badpt += 100.0;
+ else if (game.ship == 0)
+ badpt += 200.0;
+ if (badpt < 100.0)
+ badpt = 0.0; // Close enough!
if (game.state.date-game.indate < 5.0 ||
// killsPerDate >= RateMax
- KLINGKILLED/(game.state.date-game.indate) >=
+ ((game.inkling + game.incom + game.inscom) - (game.state.remkl + game.state.remcom + game.state.nscrem))/(game.state.date-game.indate) >=
0.1*game.skill*(game.skill+1.0) + 0.1 + 0.008*badpt) {
skip(1);
prout(_("In fact, you have done so well that Starfleet Command"));
switch (game.skill) {
+ case SKILL_NONE:
+ break; /* quiet gcc warning */
case SKILL_NOVICE:
prout(_("promotes you one step in rank from \"Novice\" to \"Fair\"."));
break;
break;
}
if (game.skill >= SKILL_EXPERT) {
- if (game.thawed
-#ifdef DEBUG
- && !game.idebug
-#endif
- )
+ if (game.thawed && !idebug)
prout(_("You cannot get a citation, so..."));
else {
proutn(_("Do you want your Commodore Emeritus Citation printed? "));
chew();
- if (ja()) {
- igotit = 1;
+ if (ja() == true) {
+ igotit = true;
}
}
}
prout(_("LIVE LONG AND PROSPER."));
}
score();
- if (igotit != 0) plaque();
+ if (igotit)
+ plaque();
return;
case FDEPLETE: // Federation Resources Depleted
prout(_("Your time has run out and the Federation has been"));
prout(_("conquered. Your starship is now Klingon property,"));
prout(_("and you are put on trial as a war criminal. On the"));
proutn(_("basis of your record, you are "));
- if (KLINGREM*3.0 > INKLINGTOT) {
+ if ((game.state.remkl + game.state.remcom + game.state.nscrem)*3.0 > (game.inkling + game.incom + game.inscom)) {
prout(_("acquitted."));
skip(1);
prout(_("LIVE LONG AND PROSPER."));
else {
prout(_("found guilty and"));
prout(_("sentenced to death by slow torture."));
- game.alive = 0;
+ game.alive = false;
}
score();
return;
break;
case FMATERIALIZE:
prout(_("Starbase was unable to re-materialize your starship."));
- prout(_("Sic transit gloria muntdi"));
+ prout(_("Sic transit gloria mundi"));
break;
case FPHASER:
proutn(_("The "));
prout(_("Your ship is drawn to the center of the black hole."));
prout(_("You are crushed into extremely dense matter."));
break;
+ case FCREW:
+ prout(_("Your last crew member has died."));
+ break;
}
- if (game.ship==IHF) game.ship= 0;
- else if (game.ship == IHE) game.ship = IHF;
- game.alive = 0;
- if (KLINGREM != 0) {
+ if (game.ship==IHF)
+ game.ship= 0;
+ else if (game.ship == IHE)
+ game.ship = IHF;
+ game.alive = false;
+ if ((game.state.remkl + game.state.remcom + game.state.nscrem) != 0) {
double goodies = game.state.remres/game.inresor;
double baddies = (game.state.remkl + 2.0*game.state.remcom)/(game.inkling+2.0*game.incom);
if (goodies/baddies >= 1.0+0.5*Rand()) {
prout(_("martyr and a hero. Someday maybe they'll erect a"));
prout(_("statue in your memory. Rest in peace, and try not"));
prout(_("to think about pigeons."));
- game.gamewon = 1;
+ game.gamewon = true;
}
score();
}
void score(void)
+/* compute player's score */
{
double timused = game.state.date - game.indate;
int ithperd, iwon, klship;
iskill = game.skill;
- if ((timused == 0 || KLINGREM != 0) && timused < 5.0) timused = 5.0;
- perdate = KLINGKILLED/timused;
+ if ((timused == 0 || (game.state.remkl + game.state.remcom + game.state.nscrem) != 0) && timused < 5.0)
+ timused = 5.0;
+ perdate = ((game.inkling + game.incom + game.inscom) - (game.state.remkl + game.state.remcom + game.state.nscrem))/timused;
ithperd = 500*perdate + 0.5;
iwon = 0;
- if (game.gamewon) iwon = 100*game.skill;
- if (game.ship == IHE) klship = 0;
- else if (game.ship == IHF) klship = 1;
- else klship = 2;
- if (game.gamewon == 0) game.state.nromrem = 0; // None captured if no win
- iscore = 10*NKILLK + 50*NKILLC + ithperd + iwon
+ if (game.gamewon)
+ iwon = 100*game.skill;
+ if (game.ship == IHE)
+ klship = 0;
+ else if (game.ship == IHF)
+ klship = 1;
+ else
+ klship = 2;
+ if (!game.gamewon)
+ game.state.nromrem = 0; // None captured if no win
+ iscore = 10*(game.inkling - game.state.remkl) + 50*(game.incom - game.state.remcom) + ithperd + iwon
- 100*game.state.basekl - 100*klship - 45*game.nhelp -5*game.state.starkl - game.casual
- + 20*NKILLROM + 200*NKILLSC - 10*game.state.nplankl + game.state.nromrem;
- if (game.alive == 0) iscore -= 200;
+ + 20*(game.inrom - game.state.nromrem) + 200*(game.inscom - game.state.nscrem) - 10*game.state.nplankl - 300*game.state.nworldkl + game.state.nromrem;
+ if (!game.alive)
+ iscore -= 200;
skip(2);
prout(_("Your score --"));
- if (NKILLROM)
+ if (game.inrom - game.state.nromrem)
prout(_("%6d Romulans destroyed %5d"),
- NKILLROM,20*NKILLROM);
+ game.inrom - game.state.nromrem, 20*(game.inrom - game.state.nromrem));
if (game.state.nromrem)
prout(_("%6d Romulans captured %5d"),
game.state.nromrem, game.state.nromrem);
- if (NKILLK)
+ if (game.inkling - game.state.remkl)
prout(_("%6d ordinary Klingons destroyed %5d"),
- NKILLK, 10*NKILLK);
- if (NKILLC)
+ game.inkling - game.state.remkl, 10*(game.inkling - game.state.remkl));
+ if (game.incom - game.state.remcom)
prout(_("%6d Klingon commanders destroyed %5d"),
- NKILLC, 50*NKILLC);
- if (NKILLSC)
+ game.incom - game.state.remcom, 50*(game.incom - game.state.remcom));
+ if (game.inscom - game.state.nscrem)
prout(_("%6d Super-Commander destroyed %5d"),
- NKILLSC, 200*NKILLSC);
+ game.inscom - game.state.nscrem, 200*(game.inscom - game.state.nscrem));
if (ithperd)
prout(_("%6.2f Klingons per stardate %5d"),
perdate, ithperd);
if (game.state.nplankl)
prout(_("%6d planets destroyed by your action %5d"),
game.state.nplankl, -10*game.state.nplankl);
+ if ((game.options & OPTION_WORLDS) && game.state.nworldkl)
+ prout(_("%6d inhabited planets destroyed by your action %5d"),
+ game.state.nplankl, -300*game.state.nworldkl);
if (game.state.basekl)
prout(_("%6d bases destroyed by your action %5d"),
game.state.basekl, -100*game.state.basekl);
if (game.casual)
prout(_("%6d casualties incurred %5d"),
game.casual, -game.casual);
+ if (game.abandoned)
+ prout(_("%6d crew abandoned in space %5d"),
+ game.abandoned, -3*game.abandoned);
if (klship)
prout(_("%6d ship(s) lost or destroyed %5d"),
klship, -100*klship);
- if (game.alive==0)
+ if (!game.alive)
prout(_("Penalty for getting yourself killed -200"));
if (game.gamewon) {
proutn(_("Bonus for winning "));
switch (game.skill) {
+ case SKILL_NONE: break; /* quiet gcc warning */
case SKILL_NOVICE: proutn(_("Novice game ")); break;
case SKILL_FAIR: proutn(_("Fair game ")); break;
case SKILL_GOOD: proutn(_("Good game ")); break;
prout(_("TOTAL SCORE %5d"), iscore);
}
-void plaque(void) {
+void plaque(void)
+/* emit winner's commemmorative plaque */
+{
FILE *fp=NULL;
time_t t;
char *timestring;
char winner[128];
skip(2);
-
while (fp == NULL) {
proutn(_("File or device name for your plaque: "));
cgetline(winner, sizeof(winner));