summaryrefslogtreecommitdiffstats
path: root/adventure/done.c
diff options
context:
space:
mode:
authorjtc <jtc@NetBSD.org>1994-10-21 20:51:44 +0000
committerjtc <jtc@NetBSD.org>1994-10-21 20:51:44 +0000
commita861bdee374ea33fbbe20e45cd8d3f644374c835 (patch)
tree20f77e0423e6294672f4d175bc7a787ca87ddebf /adventure/done.c
parentfb73c52b499ea55b081fc042440f4524842c68b6 (diff)
downloadbsdgames-darwin-a861bdee374ea33fbbe20e45cd8d3f644374c835.tar.gz
bsdgames-darwin-a861bdee374ea33fbbe20e45cd8d3f644374c835.tar.zst
bsdgames-darwin-a861bdee374ea33fbbe20e45cd8d3f644374c835.zip
adventure(6), from 44lite
Diffstat (limited to 'adventure/done.c')
-rw-r--r--adventure/done.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/adventure/done.c b/adventure/done.c
new file mode 100644
index 00000000..fd286fd2
--- /dev/null
+++ b/adventure/done.c
@@ -0,0 +1,138 @@
+/*-
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * The game adventure was originally written in Fortran by Will Crowther
+ * and Don Woods. It was later translated to C and enhanced by Jim
+ * Gillogly. This code is derived from software contributed to Berkeley
+ * by Jim Gillogly at The Rand Corporation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)done.c 8.1 (Berkeley) 5/31/93";
+#endif /* not lint */
+
+/* Re-coding of advent in C: termination routines */
+
+#include "hdr.h"
+
+score() /* sort of like 20000 */
+{ register int scor,i;
+ mxscor=scor=0;
+ for (i=50; i<=maxtrs; i++)
+ { if (ptext[i].txtlen==0) continue;
+ k=12;
+ if (i==chest) k=14;
+ if (i>chest) k=16;
+ if (prop[i]>=0) scor += 2;
+ if (place[i]==3&&prop[i]==0) scor += k-2;
+ mxscor += k;
+ }
+ scor += (maxdie-numdie)*10;
+ mxscor += maxdie*10;
+ if (!(scorng||gaveup)) scor += 4;
+ mxscor += 4;
+ if (dflag!=0) scor += 25;
+ mxscor += 25;
+ if (closng) scor += 25;
+ mxscor += 25;
+ if (closed)
+ { if (bonus==0) scor += 10;
+ if (bonus==135) scor += 25;
+ if (bonus==134) scor += 30;
+ if (bonus==133) scor += 45;
+ }
+ mxscor += 45;
+ if (place[magzin]==108) scor++;
+ mxscor++;
+ scor += 2;
+ mxscor += 2;
+ for (i=1; i<=hntmax; i++)
+ if (hinted[i]) scor -= hints[i][2];
+ return(scor);
+}
+
+done(entry) /* entry=1 means goto 13000 */ /* game is over */
+int entry; /* entry=2 means goto 20000 */ /* 3=19000 */
+{ register int i,sc;
+ if (entry==1) mspeak(1);
+ if (entry==3) rspeak(136);
+ printf("\n\n\nYou scored %d out of a ",(sc=score()));
+ printf("possible %d using %d turns.\n",mxscor,turns);
+ for (i=1; i<=clsses; i++)
+ if (cval[i]>=sc)
+ { speak(&ctext[i]);
+ if (i==clsses-1)
+ { printf("To achieve the next higher rating");
+ printf(" would be a neat trick!\n\n");
+ printf("Congratulations!!\n");
+ exit(0);
+ }
+ k=cval[i]+1-sc;
+ printf("To achieve the next higher rating, you need");
+ printf(" %d more point",k);
+ if (k==1) printf(".\n");
+ else printf("s.\n");
+ exit(0);
+ }
+ printf("You just went off my scale!!!\n");
+ exit(0);
+}
+
+
+die(entry) /* label 90 */
+int entry;
+{ register int i;
+ if (entry != 99)
+ { rspeak(23);
+ oldlc2=loc;
+ }
+ if (closng) /* 99 */
+ { rspeak(131);
+ numdie++;
+ done(2);
+ }
+ yea=yes(81+numdie*2,82+numdie*2,54);
+ numdie++;
+ if (numdie==maxdie || !yea) done(2);
+ place[water]=0;
+ place[oil]=0;
+ if (toting(lamp)) prop[lamp]=0;
+ for (i=100; i>=1; i--)
+ { if (!toting(i)) continue;
+ k=oldlc2;
+ if (i==lamp) k=1;
+ drop(i,k);
+ }
+ loc=3;
+ oldloc=loc;
+ return(2000);
+}