Commit | Line | Data |
---|---|---|
0c6f9358 RH |
1 | # |
2 | /* Re-coding of advent in C: termination routines */ | |
3 | ||
01eb5674 | 4 | static char sccsid[] = " done.c 4.1 82/05/11 "; |
0c6f9358 RH |
5 | |
6 | ||
7 | # include "hdr.h" | |
8 | ||
9 | score() /* sort of like 20000 */ | |
10 | { register int scor,i; | |
11 | mxscor=scor=0; | |
12 | for (i=50; i<=maxtrs; i++) | |
13 | { if (ptext[i].txtlen==0) continue; | |
14 | k=12; | |
15 | if (i==chest) k=14; | |
16 | if (i>chest) k=16; | |
17 | if (prop[i]>=0) scor += 2; | |
18 | if (place[i]==3&&prop[i]==0) scor += k-2; | |
19 | mxscor += k; | |
20 | } | |
21 | scor += (maxdie-numdie)*10; | |
22 | mxscor += maxdie*10; | |
23 | if (!(scorng||gaveup)) scor += 4; | |
24 | mxscor += 4; | |
25 | if (dflag!=0) scor += 25; | |
26 | mxscor += 25; | |
27 | if (closng) scor += 25; | |
28 | mxscor += 25; | |
29 | if (closed) | |
30 | { if (bonus==0) scor += 10; | |
31 | if (bonus==135) scor += 25; | |
32 | if (bonus==134) scor += 30; | |
33 | if (bonus==133) scor += 45; | |
34 | } | |
35 | mxscor += 45; | |
36 | if (place[magzin]==108) scor++; | |
37 | mxscor++; | |
38 | scor += 2; | |
39 | mxscor += 2; | |
40 | for (i=1; i<=hntmax; i++) | |
41 | if (hinted[i]) scor -= hints[i][2]; | |
42 | return(scor); | |
43 | } | |
44 | ||
45 | done(entry) /* entry=1 means goto 13000 */ /* game is over */ | |
46 | int entry; /* entry=2 means goto 20000 */ /* 3=19000 */ | |
47 | { register int i,sc; | |
48 | if (entry==1) mspeak(1); | |
49 | if (entry==3) rspeak(136); | |
50 | printf("\n\n\nYou scored %d out of a ",(sc=score())); | |
51 | printf("possible %d using %d turns.\n",mxscor,turns); | |
52 | for (i=1; i<=clsses; i++) | |
53 | if (cval[i]>=sc) | |
54 | { speak(&ctext[i]); | |
55 | if (i==clsses-1) | |
56 | { printf("To achieve the next higher rating"); | |
57 | printf(" would be a neat trick!\n\n"); | |
58 | printf("Congratulations!!\n"); | |
59 | exit(0); | |
60 | } | |
61 | k=cval[i]+1-sc; | |
62 | printf("To achieve the next higher rating, you need"); | |
63 | printf(" %d more point",k); | |
64 | if (k==1) printf(".\n"); | |
65 | else printf("s.\n"); | |
66 | exit(0); | |
67 | } | |
68 | printf("You just went off my scale!!!\n"); | |
69 | exit(0); | |
70 | } | |
71 | ||
72 | ||
73 | die(entry) /* label 90 */ | |
74 | int entry; | |
75 | { register int i; | |
76 | if (entry != 99) | |
77 | { rspeak(23); | |
78 | oldlc2=loc; | |
79 | } | |
80 | if (closng) /* 99 */ | |
81 | { rspeak(131); | |
82 | numdie++; | |
83 | done(2); | |
84 | } | |
85 | yea=yes(81+numdie*2,82+numdie*2,54); | |
86 | numdie++; | |
87 | if (numdie==maxdie || !yea) done(2); | |
88 | place[water]=0; | |
89 | place[oil]=0; | |
90 | if (toting(lamp)) prop[lamp]=0; | |
91 | for (i=100; i>=1; i--) | |
92 | { if (!toting(i)) continue; | |
93 | k=oldlc2; | |
94 | if (i==lamp) k=1; | |
95 | drop(i,k); | |
96 | } | |
97 | loc=3; | |
98 | oldloc=loc; | |
99 | return(2000); | |
100 | } | |
101 |