X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=src%2Ffinish.c;fp=src%2Ffinish.c;h=0000000000000000000000000000000000000000;hp=90b23fc2dcbd39551428d7dc6c260d8f12026afe;hb=1dc3e2e56bd836aa1c9d45417222b4fed6d34c0e;hpb=16a5bbd86d12644c1a613e61e990f76b16a567f0 diff --git a/src/finish.c b/src/finish.c deleted file mode 100644 index 90b23fc..0000000 --- a/src/finish.c +++ /dev/null @@ -1,489 +0,0 @@ -#include "sst.h" -#include -#include - -void selfdestruct(void) -/* self-destruct maneuver */ -{ - /* Finish with a BANG! */ - chew(); - if (damaged(DCOMPTR)) { - prout(_("Computer damaged; cannot execute destruct sequence.")); - return; - } - prouts(_("---WORKING---")); skip(1); - prouts(_("SELF-DESTRUCT-SEQUENCE-ACTIVATED")); skip(1); - prouts(" 10"); skip(1); - prouts(" 9"); skip(1); - prouts(" 8"); skip(1); - prouts(" 7"); skip(1); - prouts(" 6"); skip(1); - skip(1); - prout(_("ENTER-CORRECT-PASSWORD-TO-CONTINUE-")); - skip(1); - prout(_("SELF-DESTRUCT-SEQUENCE-OTHERWISE-")); - skip(1); - prout(_("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED")); - skip(1); - scan(); - chew(); - if (strcmp(game.passwd, citem) != 0) { - prouts(_("PASSWORD-REJECTED;")); - skip(1); - prouts(_("CONTINUITY-EFFECTED")); - skip(2); - return; - } - prouts(_("PASSWORD-ACCEPTED")); skip(1); - prouts(" 5"); skip(1); - prouts(" 4"); skip(1); - prouts(" 3"); skip(1); - prouts(" 2"); skip(1); - prouts(" 1"); skip(1); - if (Rand() < 0.15) { - prouts(_("GOODBYE-CRUEL-WORLD")); - skip(1); - } - kaboom(); -} - -void kaboom(void) -{ - stars(); - if (game.ship==IHE) - prouts("***"); - prouts(_("********* Entropy of ")); - crmshp(); - prouts(_(" maximized *********")); - skip(1); - stars(); - skip(1); - if (game.nenhere != 0) { - double whammo = 25.0 * game.energy; - 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]); - l++; - } - } - finish(FDILITHIUM); -} - - -void finish(FINTYPE ifin) -/* end the game, with appropriate notfications */ -{ - bool igotit = false; - game.alldone = true; - skip(3); - prout(_("It is stardate %.1f."), game.state.date); - skip(1); - switch (ifin) { - case FWON: // Game has been won - if (game.state.nromrem != 0) - prout(_("The remaining %d Romulans surrender to Starfleet Command."), - game.state.nromrem); - - prout(_("You have smashed the Klingon invasion fleet and saved")); - prout(_("the Federation.")); - game.gamewon = true; - if (game.alive) { - double badpt; - 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 - ((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; - case SKILL_FAIR: - prout(_("promotes you one step in rank from \"Fair\" to \"Good\".")); - break; - case SKILL_GOOD: - prout(_("promotes you one step in rank from \"Good\" to \"Expert\".")); - break; - case SKILL_EXPERT: - prout(_("promotes you to Commodore Emeritus.")); - skip(1); - prout(_("Now that you think you're really good, try playing")); - prout(_("the \"Emeritus\" game. It will splatter your ego.")); - break; - case SKILL_EMERITUS: - skip(1); - proutn(_("Computer- ")); - prouts(_("ERROR-ERROR-ERROR-ERROR")); - skip(2); - prouts(_(" YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM")); - skip(1); - prouts(_(" THIS-PROGRAM-MUST-SURVIVE")); - skip(1); - prouts(_(" THIS-PROGRAM-MUST-SURVIVE")); - skip(1); - prouts(_(" THIS-PROGRAM-MUST-SURVIVE")); - skip(1); - prouts(_(" THIS-PROGRAM-MUST?- MUST ? - SUR? ? -? VI")); - skip(2); - prout(_("Now you can retire and write your own Star Trek game!")); - skip(1); - break; - } - if (game.skill >= SKILL_EXPERT) { - if (game.thawed && !idebug) - prout(_("You cannot get a citation, so...")); - else { - proutn(_("Do you want your Commodore Emeritus Citation printed? ")); - chew(); - if (ja() == true) { - igotit = true; - } - } - } - } - // Only grant long life if alive (original didn't!) - skip(1); - prout(_("LIVE LONG AND PROSPER.")); - } - score(); - 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 ((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 = false; - } - score(); - return; - case FLIFESUP: - prout(_("Your life support reserves have run out, and")); - prout(_("you die of thirst, starvation, and asphyxiation.")); - prout(_("Your starship is a derelict in space.")); - break; - case FNRG: - prout(_("Your energy supply is exhausted.")); - skip(1); - prout(_("Your starship is a derelict in space.")); - break; - case FBATTLE: - proutn(_("The ")); - crmshp(); - prout(_("has been destroyed in battle.")); - skip(1); - prout(_("Dulce et decorum est pro patria mori.")); - break; - case FNEG3: - prout(_("You have made three attempts to cross the negative energy")); - prout(_("barrier which surrounds the galaxy.")); - skip(1); - prout(_("Your navigation is abominable.")); - score(); - return; - case FNOVA: - prout(_("Your starship has been destroyed by a nova.")); - prout(_("That was a great shot.")); - skip(1); - break; - case FSNOVAED: - proutn(_("The ")); - crmshp(); - prout(_(" has been fried by a supernova.")); - prout(_("...Not even cinders remain...")); - break; - case FABANDN: - prout(_("You have been captured by the Klingons. If you still")); - prout(_("had a starbase to be returned to, you would have been")); - prout(_("repatriated and given another chance. Since you have")); - prout(_("no starbases, you will be mercilessly tortured to death.")); - break; - case FDILITHIUM: - prout(_("Your starship is now an expanding cloud of subatomic particles")); - break; - case FMATERIALIZE: - prout(_("Starbase was unable to re-materialize your starship.")); - prout(_("Sic transit gloria mundi")); - break; - case FPHASER: - proutn(_("The ")); - crmshp(); - prout(_(" has been cremated by its own phasers.")); - break; - case FLOST: - prout(_("You and your landing party have been")); - prout(_("converted to energy, disipating through space.")); - break; - case FMINING: - prout(_("You are left with your landing party on")); - prout(_("a wild jungle planet inhabited by primitive cannibals.")); - skip(1); - prout(_("They are very fond of \"Captain Kirk\" soup.")); - skip(1); - proutn(_("Without your leadership, the ")); - crmshp(); - prout(_(" is destroyed.")); - break; - case FDPLANET: - prout(_("You and your mining party perish.")); - skip(1); - prout(_("That was a great shot.")); - skip(1); - break; - case FSSC: - prout(_("The Galileo is instantly annihilated by the supernova.")); - // no break; - case FPNOVA: - prout(_("You and your mining party are atomized.")); - skip(1); - proutn(_("Mr. Spock takes command of the ")); - crmshp(); - prout(_(" and")); - prout(_("joins the Romulans, reigning terror on the Federation.")); - break; - case FSTRACTOR: - prout(_("The shuttle craft Galileo is also caught,")); - prout(_("and breaks up under the strain.")); - skip(1); - prout(_("Your debris is scattered for millions of miles.")); - proutn(_("Without your leadership, the ")); - crmshp(); - prout(_(" is destroyed.")); - break; - case FDRAY: - prout(_("The mutants attack and kill Spock.")); - prout(_("Your ship is captured by Klingons, and")); - prout(_("your crew is put on display in a Klingon zoo.")); - break; - case FTRIBBLE: - prout(_("Tribbles consume all remaining water,")); - prout(_("food, and oxygen on your ship.")); - skip(1); - prout(_("You die of thirst, starvation, and asphyxiation.")); - prout(_("Your starship is a derelict in space.")); - break; - case FHOLE: - 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 = 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(_("As a result of your actions, a treaty with the Klingon")); - prout(_("Empire has been signed. The terms of the treaty are")); - if (goodies/baddies >= 3.0+Rand()) { - prout(_("favorable to the Federation.")); - skip(1); - prout(_("Congratulations!")); - } - else - prout(_("highly unfavorable to the Federation.")); - } - else - prout(_("The Federation will be destroyed.")); - } - else { - prout(_("Since you took the last Klingon with you, you are a")); - 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 = true; - } - score(); -} - -static void score_item(const char *str, int num, int score) -{ - if (num) { - prout(str, num, score); - iscore += score; - } -} - -static void score_item1(const char *str, int score) -{ - prout(str, score); - iscore += score; -} - -static void score_itemf(const char *str, float num, int score) -{ - if (num > 0) { - prout(str, num, score); - iscore += score; - } -} - -void score(void) -/* compute player's score */ -{ - double timused = game.state.date - game.indate; - int iwon, klship, num; - - iskill = game.skill; - if ((timused == 0 || (game.state.remkl + game.state.remcom + game.state.nscrem) != 0) && timused < 5.0) - timused = 5.0; - 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; - iscore = 0; - skip(2); - prout(_("Your score --")); - num = game.inrom - game.state.nromrem; - score_item(_("%6d Romulans destroyed %5d"), num, 20 * num); - if (game.gamewon) - score_item(_("%6d Romulans captured %5d"), - game.state.nromrem, game.state.nromrem); - num = game.inkling - game.state.remkl; - score_item(_("%6d ordinary Klingons destroyed %5d"), num, 10 * num); - num = game.incom - game.state.remcom; - score_item(_("%6d Klingon commanders destroyed %5d"), num, 50 * num); - num = game.inscom - game.state.nscrem; - score_item(_("%6d Super-Commander destroyed %5d"), num, 200 * num); - perdate = ((game.inkling + game.incom + game.inscom) - - (game.state.remkl + game.state.remcom + game.state.nscrem))/timused; - score_itemf(_("%6.2f Klingons per stardate %5d"), perdate, - 500 * perdate + 0.5); - score_item(_("%6d stars destroyed by your action %5d"), - game.state.starkl, -5*game.state.starkl); - score_item(_("%6d planets destroyed by your action %5d"), - game.state.nplankl, -10*game.state.nplankl); - if (game.options & OPTION_WORLDS) - score_item(_("%6d inhabited planets destroyed by your action %5d"), - game.state.nworldkl, -300*game.state.nworldkl); - score_item(_("%6d bases destroyed by your action %5d"), - game.state.basekl, -100*game.state.basekl); - score_item(_("%6d calls for help from starbase %5d"), - game.nhelp, -45*game.nhelp); - score_item(_("%6d casualties incurred %5d"), - game.casual, -game.casual); - score_item(_("%6d crew abandoned in space %5d"), - game.abandoned, -3*game.abandoned); - score_item(_("%6d ship(s) lost or destroyed %5d"), - klship, -100*klship); - if (!game.alive) - score_item1(_("Penalty for getting yourself killed %5d"), -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; - case SKILL_EXPERT: proutn(_("Expert game ")); break; - case SKILL_EMERITUS: proutn(_("Emeritus game")); break; - } - prout(" %5d", iwon); - } - skip(1); - prout(_("TOTAL SCORE %5d"), iscore); -} - -void plaque(void) -/* emit winner's commemmorative plaque */ -{ - FILE *fp=NULL; - time_t t; - char *timestring; - int nskip; - char winner[128]; - - skip(2); - while (fp == NULL) { - proutn(_("File or device name for your plaque: ")); - cgetline(winner, sizeof(winner)); - fp = fopen(winner, "w"); - if (fp==NULL) { - prout(_("Invalid name.")); - } - } - - proutn(_("Enter name to go on plaque (up to 30 characters): ")); - cgetline(winner, sizeof(winner)); - /* The 38 below must be 64 for 132-column paper */ - nskip = 38 - strlen(winner)/2; - - fprintf(fp,"\n\n\n\n"); - /* --------DRAW ENTERPRISE PICTURE. */ - fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n" ); - fprintf(fp, " EEE E : : : E\n" ); - fprintf(fp, " EE EEE E : : NCC-1701 : E\n"); - fprintf(fp, "EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEE : : : E\n"); - fprintf(fp, " E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n"); - fprintf(fp, " EEEEEEEEE EEEEEEEEEEEEE E E\n"); - fprintf(fp, " EEEEEEE EEEEE E E E E\n"); - fprintf(fp, " EEE E E E E\n"); - fprintf(fp, " E E E E\n"); - fprintf(fp, " EEEEEEEEEEEEE E E\n"); - fprintf(fp, " EEE : EEEEEEE EEEEEEEE\n"); - fprintf(fp, " :E : EEEE E\n"); - fprintf(fp, " .-E -:----- E\n"); - fprintf(fp, " :E : E\n"); - fprintf(fp, " EE : EEEEEEEE\n"); - fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEE\n"); - fprintf(fp, "\n\n\n"); - fprintf(fp, _(" U. S. S. ENTERPRISE\n")); - fprintf(fp, "\n\n\n\n"); - fprintf(fp, _(" For demonstrating outstanding ability as a starship captain\n")); - fprintf(fp, "\n"); - fprintf(fp, _(" Starfleet Command bestows to you\n")); - fprintf(fp, "\n"); - fprintf(fp,"%*s%s\n\n", nskip, "", winner); - fprintf(fp, _(" the rank of\n\n")); - fprintf(fp, _(" \"Commodore Emeritus\"\n\n")); - fprintf(fp, " "); - switch (iskill) { - case SKILL_EXPERT: fprintf(fp,_(" Expert level\n\n")); break; - case SKILL_EMERITUS: fprintf(fp,_("Emeritus level\n\n")); break; - default: fprintf(fp,_(" Cheat level\n\n")); break; - } - t = time(NULL); - timestring = ctime(&t); - fprintf(fp, _(" This day of %.6s %.4s, %.8s\n\n"), - timestring+4, timestring+20, timestring+11); - fprintf(fp,_(" Your score: %d\n\n"), iscore); - fprintf(fp,_(" Klingons per stardate: %.2f\n"), perdate); - fclose(fp); -}