1 1.10 dholland /* $NetBSD: done.c,v 1.10 2009/08/25 06:56:52 dholland Exp $ */ 2 1.2 cgd 3 1.1 jtc /*- 4 1.1 jtc * Copyright (c) 1991, 1993 5 1.1 jtc * The Regents of the University of California. All rights reserved. 6 1.1 jtc * 7 1.1 jtc * The game adventure was originally written in Fortran by Will Crowther 8 1.1 jtc * and Don Woods. It was later translated to C and enhanced by Jim 9 1.1 jtc * Gillogly. This code is derived from software contributed to Berkeley 10 1.1 jtc * by Jim Gillogly at The Rand Corporation. 11 1.1 jtc * 12 1.1 jtc * Redistribution and use in source and binary forms, with or without 13 1.1 jtc * modification, are permitted provided that the following conditions 14 1.1 jtc * are met: 15 1.1 jtc * 1. Redistributions of source code must retain the above copyright 16 1.1 jtc * notice, this list of conditions and the following disclaimer. 17 1.1 jtc * 2. Redistributions in binary form must reproduce the above copyright 18 1.1 jtc * notice, this list of conditions and the following disclaimer in the 19 1.1 jtc * documentation and/or other materials provided with the distribution. 20 1.8 agc * 3. Neither the name of the University nor the names of its contributors 21 1.1 jtc * may be used to endorse or promote products derived from this software 22 1.1 jtc * without specific prior written permission. 23 1.1 jtc * 24 1.1 jtc * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 1.1 jtc * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 1.1 jtc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 1.1 jtc * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 1.1 jtc * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 1.1 jtc * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 1.1 jtc * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 1.1 jtc * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 1.1 jtc * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 1.1 jtc * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 1.1 jtc * SUCH DAMAGE. 35 1.1 jtc */ 36 1.1 jtc 37 1.3 christos #include <sys/cdefs.h> 38 1.1 jtc #ifndef lint 39 1.2 cgd #if 0 40 1.1 jtc static char sccsid[] = "@(#)done.c 8.1 (Berkeley) 5/31/93"; 41 1.2 cgd #else 42 1.10 dholland __RCSID("$NetBSD: done.c,v 1.10 2009/08/25 06:56:52 dholland Exp $"); 43 1.2 cgd #endif 44 1.1 jtc #endif /* not lint */ 45 1.1 jtc 46 1.5 lukem /* Re-coding of advent in C: termination routines */ 47 1.1 jtc 48 1.3 christos #include <stdio.h> 49 1.7 matt #include <stdlib.h> 50 1.1 jtc #include "hdr.h" 51 1.3 christos #include "extern.h" 52 1.1 jtc 53 1.3 christos int 54 1.9 jmc score(void) 55 1.5 lukem { /* sort of like 20000 */ 56 1.10 dholland int myscore, i; 57 1.10 dholland 58 1.10 dholland maxscore = myscore = 0; 59 1.5 lukem for (i = 50; i <= maxtrs; i++) { 60 1.5 lukem if (ptext[i].txtlen == 0) 61 1.5 lukem continue; 62 1.5 lukem k = 12; 63 1.5 lukem if (i == chest) 64 1.5 lukem k = 14; 65 1.5 lukem if (i > chest) 66 1.5 lukem k = 16; 67 1.5 lukem if (prop[i] >= 0) 68 1.10 dholland myscore += 2; 69 1.5 lukem if (place[i] == 3 && prop[i] == 0) 70 1.10 dholland myscore += k - 2; 71 1.10 dholland maxscore += k; 72 1.1 jtc } 73 1.10 dholland myscore += (maxdie - numdie) * 10; 74 1.10 dholland maxscore += maxdie * 10; 75 1.10 dholland if (!(scoring || gaveup)) 76 1.10 dholland myscore += 4; 77 1.10 dholland maxscore += 4; 78 1.5 lukem if (dflag != 0) 79 1.10 dholland myscore += 25; 80 1.10 dholland maxscore += 25; 81 1.10 dholland if (isclosing) 82 1.10 dholland myscore += 25; 83 1.10 dholland maxscore += 25; 84 1.5 lukem if (closed) { 85 1.5 lukem if (bonus == 0) 86 1.10 dholland myscore += 10; 87 1.5 lukem if (bonus == 135) 88 1.10 dholland myscore += 25; 89 1.5 lukem if (bonus == 134) 90 1.10 dholland myscore += 30; 91 1.5 lukem if (bonus == 133) 92 1.10 dholland myscore += 45; 93 1.1 jtc } 94 1.10 dholland maxscore += 45; 95 1.10 dholland if (place[magazine] == 108) 96 1.10 dholland myscore++; 97 1.10 dholland maxscore++; 98 1.10 dholland myscore += 2; 99 1.10 dholland maxscore += 2; 100 1.10 dholland for (i = 1; i <= hintmax; i++) 101 1.5 lukem if (hinted[i]) 102 1.10 dholland myscore -= hints[i][2]; 103 1.10 dholland return myscore; 104 1.1 jtc } 105 1.1 jtc 106 1.9 jmc /* entry=1 means goto 13000 */ /* game is over */ 107 1.9 jmc /* entry=2 means goto 20000 */ /* 3=19000 */ 108 1.3 christos void 109 1.9 jmc done(int entry) 110 1.5 lukem { 111 1.5 lukem int i, sc; 112 1.5 lukem if (entry == 1) 113 1.5 lukem mspeak(1); 114 1.5 lukem if (entry == 3) 115 1.5 lukem rspeak(136); 116 1.5 lukem printf("\n\n\nYou scored %d out of a ", (sc = score())); 117 1.10 dholland printf("possible %d using %d turns.\n", maxscore, turns); 118 1.10 dholland for (i = 1; i <= classes; i++) 119 1.5 lukem if (cval[i] >= sc) { 120 1.5 lukem speak(&ctext[i]); 121 1.10 dholland if (i == classes - 1) { 122 1.5 lukem printf("To achieve the next higher rating"); 123 1.1 jtc printf(" would be a neat trick!\n\n"); 124 1.1 jtc printf("Congratulations!!\n"); 125 1.1 jtc exit(0); 126 1.1 jtc } 127 1.5 lukem k = cval[i] + 1 - sc; 128 1.1 jtc printf("To achieve the next higher rating, you need"); 129 1.5 lukem printf(" %d more point", k); 130 1.5 lukem if (k == 1) 131 1.5 lukem printf(".\n"); 132 1.5 lukem else 133 1.5 lukem printf("s.\n"); 134 1.1 jtc exit(0); 135 1.1 jtc } 136 1.1 jtc printf("You just went off my scale!!!\n"); 137 1.1 jtc exit(0); 138 1.1 jtc } 139 1.1 jtc 140 1.9 jmc /* label 90 */ 141 1.6 hubertf void 142 1.9 jmc die(int entry) 143 1.5 lukem { 144 1.5 lukem int i; 145 1.5 lukem if (entry != 99) { 146 1.5 lukem rspeak(23); 147 1.10 dholland oldloc2 = loc; 148 1.1 jtc } 149 1.10 dholland if (isclosing) { /* 99 */ 150 1.5 lukem rspeak(131); 151 1.1 jtc numdie++; 152 1.1 jtc done(2); 153 1.1 jtc } 154 1.5 lukem yea = yes(81 + numdie * 2, 82 + numdie * 2, 54); 155 1.1 jtc numdie++; 156 1.5 lukem if (numdie == maxdie || !yea) 157 1.5 lukem done(2); 158 1.5 lukem place[water] = 0; 159 1.5 lukem place[oil] = 0; 160 1.5 lukem if (toting(lamp)) 161 1.5 lukem prop[lamp] = 0; 162 1.5 lukem for (i = 100; i >= 1; i--) { 163 1.5 lukem if (!toting(i)) 164 1.5 lukem continue; 165 1.10 dholland k = oldloc2; 166 1.5 lukem if (i == lamp) 167 1.5 lukem k = 1; 168 1.5 lukem drop(i, k); 169 1.1 jtc } 170 1.5 lukem loc = 3; 171 1.5 lukem oldloc = loc; 172 1.1 jtc } 173