5 void selfdestruct(void)
6 /* self-destruct maneuver */
8 /* Finish with a BANG! */
10 if (damaged(DCOMPTR)) {
11 prout(_("Computer damaged; cannot execute destruct sequence."));
14 prouts(_("---WORKING---")); skip(1);
15 prouts(_("SELF-DESTRUCT-SEQUENCE-ACTIVATED")); skip(1);
16 prouts(" 10"); skip(1);
17 prouts(" 9"); skip(1);
18 prouts(" 8"); skip(1);
19 prouts(" 7"); skip(1);
20 prouts(" 6"); skip(1);
22 prout(_("ENTER-CORRECT-PASSWORD-TO-CONTINUE-"));
24 prout(_("SELF-DESTRUCT-SEQUENCE-OTHERWISE-"));
26 prout(_("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED"));
30 if (strcmp(game.passwd, citem) != 0) {
31 prouts(_("PASSWORD-REJECTED;"));
33 prouts(_("CONTINUITY-EFFECTED"));
37 prouts(_("PASSWORD-ACCEPTED")); skip(1);
38 prouts(" 5"); skip(1);
39 prouts(" 4"); skip(1);
40 prouts(" 3"); skip(1);
41 prouts(" 2"); skip(1);
42 prouts(" 1"); skip(1);
44 prouts(_("GOODBYE-CRUEL-WORLD"));
55 prouts(_("********* Entropy of "));
57 prouts(_(" maximized *********"));
61 if (game.nenhere != 0) {
62 double whammo = 25.0 * game.energy;
64 while (l <= game.nenhere) {
65 if (game.kpower[l]*game.kdist[l] <= whammo)
66 deadkl(game.ks[l], game.quad[game.ks[l].x][game.ks[l].y], game.ks[l]);
74 void finish(FINTYPE ifin)
75 /* end the game, with appropriate notfications */
80 prout(_("It is stardate %.1f."), game.state.date);
83 case FWON: // Game has been won
84 if (game.state.nromrem != 0)
85 prout(_("The remaining %d Romulans surrender to Starfleet Command."),
88 prout(_("You have smashed the Klingon invasion fleet and saved"));
89 prout(_("the Federation."));
93 badpt = 5.0*game.state.starkl \
95 + 10.0*game.state.nplankl \
96 + 300.0*game.state.nworldkl \
98 + 100.0*game.state.basekl \
100 if (game.ship == IHF)
102 else if (game.ship == 0)
105 badpt = 0.0; // Close enough!
106 if (game.state.date-game.indate < 5.0 ||
107 // killsPerDate >= RateMax
108 ((game.inkling + game.incom + game.inscom) - (game.state.remkl + game.state.remcom + game.state.nscrem))/(game.state.date-game.indate) >=
109 0.1*game.skill*(game.skill+1.0) + 0.1 + 0.008*badpt) {
111 prout(_("In fact, you have done so well that Starfleet Command"));
112 switch (game.skill) {
114 break; /* quiet gcc warning */
116 prout(_("promotes you one step in rank from \"Novice\" to \"Fair\"."));
119 prout(_("promotes you one step in rank from \"Fair\" to \"Good\"."));
122 prout(_("promotes you one step in rank from \"Good\" to \"Expert\"."));
125 prout(_("promotes you to Commodore Emeritus."));
127 prout(_("Now that you think you're really good, try playing"));
128 prout(_("the \"Emeritus\" game. It will splatter your ego."));
132 proutn(_("Computer- "));
133 prouts(_("ERROR-ERROR-ERROR-ERROR"));
135 prouts(_(" YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM"));
137 prouts(_(" THIS-PROGRAM-MUST-SURVIVE"));
139 prouts(_(" THIS-PROGRAM-MUST-SURVIVE"));
141 prouts(_(" THIS-PROGRAM-MUST-SURVIVE"));
143 prouts(_(" THIS-PROGRAM-MUST?- MUST ? - SUR? ? -? VI"));
145 prout(_("Now you can retire and write your own Star Trek game!"));
149 if (game.skill >= SKILL_EXPERT) {
150 if (game.thawed && !idebug)
151 prout(_("You cannot get a citation, so..."));
153 proutn(_("Do you want your Commodore Emeritus Citation printed? "));
161 // Only grant long life if alive (original didn't!)
163 prout(_("LIVE LONG AND PROSPER."));
169 case FDEPLETE: // Federation Resources Depleted
170 prout(_("Your time has run out and the Federation has been"));
171 prout(_("conquered. Your starship is now Klingon property,"));
172 prout(_("and you are put on trial as a war criminal. On the"));
173 proutn(_("basis of your record, you are "));
174 if ((game.state.remkl + game.state.remcom + game.state.nscrem)*3.0 > (game.inkling + game.incom + game.inscom)) {
175 prout(_("acquitted."));
177 prout(_("LIVE LONG AND PROSPER."));
180 prout(_("found guilty and"));
181 prout(_("sentenced to death by slow torture."));
187 prout(_("Your life support reserves have run out, and"));
188 prout(_("you die of thirst, starvation, and asphyxiation."));
189 prout(_("Your starship is a derelict in space."));
192 prout(_("Your energy supply is exhausted."));
194 prout(_("Your starship is a derelict in space."));
199 prout(_("has been destroyed in battle."));
201 prout(_("Dulce et decorum est pro patria mori."));
204 prout(_("You have made three attempts to cross the negative energy"));
205 prout(_("barrier which surrounds the galaxy."));
207 prout(_("Your navigation is abominable."));
211 prout(_("Your starship has been destroyed by a nova."));
212 prout(_("That was a great shot."));
218 prout(_(" has been fried by a supernova."));
219 prout(_("...Not even cinders remain..."));
222 prout(_("You have been captured by the Klingons. If you still"));
223 prout(_("had a starbase to be returned to, you would have been"));
224 prout(_("repatriated and given another chance. Since you have"));
225 prout(_("no starbases, you will be mercilessly tortured to death."));
228 prout(_("Your starship is now an expanding cloud of subatomic particles"));
231 prout(_("Starbase was unable to re-materialize your starship."));
232 prout(_("Sic transit gloria mundi"));
237 prout(_(" has been cremated by its own phasers."));
240 prout(_("You and your landing party have been"));
241 prout(_("converted to energy, disipating through space."));
244 prout(_("You are left with your landing party on"));
245 prout(_("a wild jungle planet inhabited by primitive cannibals."));
247 prout(_("They are very fond of \"Captain Kirk\" soup."));
249 proutn(_("Without your leadership, the "));
251 prout(_(" is destroyed."));
254 prout(_("You and your mining party perish."));
256 prout(_("That was a great shot."));
260 prout(_("The Galileo is instantly annihilated by the supernova."));
263 prout(_("You and your mining party are atomized."));
265 proutn(_("Mr. Spock takes command of the "));
268 prout(_("joins the Romulans, reigning terror on the Federation."));
271 prout(_("The shuttle craft Galileo is also caught,"));
272 prout(_("and breaks up under the strain."));
274 prout(_("Your debris is scattered for millions of miles."));
275 proutn(_("Without your leadership, the "));
277 prout(_(" is destroyed."));
280 prout(_("The mutants attack and kill Spock."));
281 prout(_("Your ship is captured by Klingons, and"));
282 prout(_("your crew is put on display in a Klingon zoo."));
285 prout(_("Tribbles consume all remaining water,"));
286 prout(_("food, and oxygen on your ship."));
288 prout(_("You die of thirst, starvation, and asphyxiation."));
289 prout(_("Your starship is a derelict in space."));
292 prout(_("Your ship is drawn to the center of the black hole."));
293 prout(_("You are crushed into extremely dense matter."));
296 prout(_("Your last crew member has died."));
301 else if (game.ship == IHE)
304 if ((game.state.remkl + game.state.remcom + game.state.nscrem) != 0) {
305 double goodies = game.state.remres/game.inresor;
306 double baddies = (game.state.remkl + 2.0*game.state.remcom)/(game.inkling+2.0*game.incom);
307 if (goodies/baddies >= 1.0+0.5*Rand()) {
308 prout(_("As a result of your actions, a treaty with the Klingon"));
309 prout(_("Empire has been signed. The terms of the treaty are"));
310 if (goodies/baddies >= 3.0+Rand()) {
311 prout(_("favorable to the Federation."));
313 prout(_("Congratulations!"));
316 prout(_("highly unfavorable to the Federation."));
319 prout(_("The Federation will be destroyed."));
322 prout(_("Since you took the last Klingon with you, you are a"));
323 prout(_("martyr and a hero. Someday maybe they'll erect a"));
324 prout(_("statue in your memory. Rest in peace, and try not"));
325 prout(_("to think about pigeons."));
331 static void score_item(const char *str, int num, int score)
334 prout(str, num, score);
339 static void score_item1(const char *str, int score)
345 static void score_itemf(const char *str, float num, int score)
348 prout(str, num, score);
354 /* compute player's score */
356 double timused = game.state.date - game.indate;
357 int iwon, klship, num;
360 if ((timused == 0 || (game.state.remkl + game.state.remcom + game.state.nscrem) != 0) && timused < 5.0)
364 iwon = 100*game.skill;
365 if (game.ship == IHE)
367 else if (game.ship == IHF)
373 prout(_("Your score --"));
374 num = game.inrom - game.state.nromrem;
375 score_item(_("%6d Romulans destroyed %5d"), num, 20 * num);
377 score_item(_("%6d Romulans captured %5d"),
378 game.state.nromrem, game.state.nromrem);
379 num = game.inkling - game.state.remkl;
380 score_item(_("%6d ordinary Klingons destroyed %5d"), num, 10 * num);
381 num = game.incom - game.state.remcom;
382 score_item(_("%6d Klingon commanders destroyed %5d"), num, 50 * num);
383 num = game.inscom - game.state.nscrem;
384 score_item(_("%6d Super-Commander destroyed %5d"), num, 200 * num);
385 perdate = ((game.inkling + game.incom + game.inscom) -
386 (game.state.remkl + game.state.remcom + game.state.nscrem))/timused;
387 score_itemf(_("%6.2f Klingons per stardate %5d"), perdate,
388 500 * perdate + 0.5);
389 score_item(_("%6d stars destroyed by your action %5d"),
390 game.state.starkl, -5*game.state.starkl);
391 score_item(_("%6d planets destroyed by your action %5d"),
392 game.state.nplankl, -10*game.state.nplankl);
393 if (game.options & OPTION_WORLDS)
394 score_item(_("%6d inhabited planets destroyed by your action %5d"),
395 game.state.nworldkl, -300*game.state.nworldkl);
396 score_item(_("%6d bases destroyed by your action %5d"),
397 game.state.basekl, -100*game.state.basekl);
398 score_item(_("%6d calls for help from starbase %5d"),
399 game.nhelp, -45*game.nhelp);
400 score_item(_("%6d casualties incurred %5d"),
401 game.casual, -game.casual);
402 score_item(_("%6d crew abandoned in space %5d"),
403 game.abandoned, -3*game.abandoned);
404 score_item(_("%6d ship(s) lost or destroyed %5d"),
405 klship, -100*klship);
407 score_item1(_("Penalty for getting yourself killed %5d"), -200);
409 proutn(_("Bonus for winning "));
410 switch (game.skill) {
411 case SKILL_NONE: break; /* quiet gcc warning */
412 case SKILL_NOVICE: proutn(_("Novice game ")); break;
413 case SKILL_FAIR: proutn(_("Fair game ")); break;
414 case SKILL_GOOD: proutn(_("Good game ")); break;
415 case SKILL_EXPERT: proutn(_("Expert game ")); break;
416 case SKILL_EMERITUS: proutn(_("Emeritus game")); break;
421 prout(_("TOTAL SCORE %5d"), iscore);
425 /* emit winner's commemmorative plaque */
435 proutn(_("File or device name for your plaque: "));
436 cgetline(winner, sizeof(winner));
437 fp = fopen(winner, "w");
439 prout(_("Invalid name."));
443 proutn(_("Enter name to go on plaque (up to 30 characters): "));
444 cgetline(winner, sizeof(winner));
445 /* The 38 below must be 64 for 132-column paper */
446 nskip = 38 - strlen(winner)/2;
448 fprintf(fp,"\n\n\n\n");
449 /* --------DRAW ENTERPRISE PICTURE. */
450 fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n" );
451 fprintf(fp, " EEE E : : : E\n" );
452 fprintf(fp, " EE EEE E : : NCC-1701 : E\n");
453 fprintf(fp, "EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEE : : : E\n");
454 fprintf(fp, " E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n");
455 fprintf(fp, " EEEEEEEEE EEEEEEEEEEEEE E E\n");
456 fprintf(fp, " EEEEEEE EEEEE E E E E\n");
457 fprintf(fp, " EEE E E E E\n");
458 fprintf(fp, " E E E E\n");
459 fprintf(fp, " EEEEEEEEEEEEE E E\n");
460 fprintf(fp, " EEE : EEEEEEE EEEEEEEE\n");
461 fprintf(fp, " :E : EEEE E\n");
462 fprintf(fp, " .-E -:----- E\n");
463 fprintf(fp, " :E : E\n");
464 fprintf(fp, " EE : EEEEEEEE\n");
465 fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEE\n");
466 fprintf(fp, "\n\n\n");
467 fprintf(fp, _(" U. S. S. ENTERPRISE\n"));
468 fprintf(fp, "\n\n\n\n");
469 fprintf(fp, _(" For demonstrating outstanding ability as a starship captain\n"));
471 fprintf(fp, _(" Starfleet Command bestows to you\n"));
473 fprintf(fp,"%*s%s\n\n", nskip, "", winner);
474 fprintf(fp, _(" the rank of\n\n"));
475 fprintf(fp, _(" \"Commodore Emeritus\"\n\n"));
478 case SKILL_EXPERT: fprintf(fp,_(" Expert level\n\n")); break;
479 case SKILL_EMERITUS: fprintf(fp,_("Emeritus level\n\n")); break;
480 default: fprintf(fp,_(" Cheat level\n\n")); break;
483 timestring = ctime(&t);
484 fprintf(fp, _(" This day of %.6s %.4s, %.8s\n\n"),
485 timestring+4, timestring+20, timestring+11);
486 fprintf(fp,_(" Your score: %d\n\n"), iscore);
487 fprintf(fp,_(" Klingons per stardate: %.2f\n"), perdate);