1 /*
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)destruct.c 8.1 (Berkeley) 05/31/93";
10 #endif /* not lint */
11
12 # include "trek.h"
13
14 /*
15 ** Self Destruct Sequence
16 **
17 ** The computer starts up the self destruct sequence. Obviously,
18 ** if the computer is out nothing can happen. You get a countdown
19 ** and a request for password. This must match the password that
20 ** you entered at the start of the game.
21 **
22 ** You get to destroy things when you blow up; hence, it is
23 ** possible to win the game by destructing if you take the last
24 ** Klingon with you.
25 **
26 ** By the way, the \032 in the message is a ^Z, which is because
27 ** the terminal in my office is an ADM-3, which uses that char-
28 ** acter to clear the screen. I also stick in a \014 (form feed)
29 ** because that clears some other screens.
30 **
31 ** Uses trace flag 41
32 */
33
destruct()34 destruct()
35 {
36 char checkpass[15];
37 register int i, j;
38 double zap;
39
40 if (damaged(COMPUTER))
41 return (out(COMPUTER));
42 printf("\n\07 --- WORKING ---\07\n");
43 sleep(3);
44 /* output the count 10 9 8 7 6 */
45 for (i = 10; i > 5; i--)
46 {
47 for (j = 10; j > i; j--)
48 printf(" ");
49 printf("%d\n", i);
50 sleep(1);
51 }
52 /* check for password on new line only */
53 skiptonl(0);
54 getstrpar("Enter password verification", checkpass, 14, 0);
55 sleep(2);
56 if (!sequal(checkpass, Game.passwd))
57 return (printf("Self destruct sequence aborted\n"));
58 printf("Password verified; self destruct sequence continues:\n");
59 sleep(2);
60 /* output count 5 4 3 2 1 0 */
61 for (i = 5; i >= 0; i--)
62 {
63 sleep(1);
64 for (j = 5; j > i; j--)
65 printf(" ");
66 printf("%d\n", i);
67 }
68 sleep(2);
69 printf("\032\014***** %s destroyed *****\n", Ship.shipname);
70 Game.killed = 1;
71 /* let's see what we can blow up!!!! */
72 zap = 20.0 * Ship.energy;
73 Game.deaths += Ship.crew;
74 for (i = 0; i < Etc.nkling; )
75 {
76 if (Etc.klingon[i].power * Etc.klingon[i].dist <= zap)
77 killk(Etc.klingon[i].x, Etc.klingon[i].y);
78 else
79 i++;
80 }
81 /* if we didn't kill the last Klingon (detected by killk), */
82 /* then we lose.... */
83 lose(L_DSTRCT);
84 }
85