summaryrefslogtreecommitdiffstats
path: root/larn/moreobj.c
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>1997-10-18 20:03:05 +0000
committerchristos <christos@NetBSD.org>1997-10-18 20:03:05 +0000
commitf73f1009084e75624e3bc00fef9cf4749de80dcc (patch)
tree10cc39737f667f056c5537c3fba7cf4d2a832c9d /larn/moreobj.c
parent39d5db4411fe42946cd3d94eb7d275f3f453d6aa (diff)
downloadbsdgames-darwin-f73f1009084e75624e3bc00fef9cf4749de80dcc.tar.gz
bsdgames-darwin-f73f1009084e75624e3bc00fef9cf4749de80dcc.tar.zst
bsdgames-darwin-f73f1009084e75624e3bc00fef9cf4749de80dcc.zip
Tons of changes; re-indent, use termios, fix warnings, add prototypes...
Games is almost clean; only hack is left...
Diffstat (limited to 'larn/moreobj.c')
-rw-r--r--larn/moreobj.c689
1 files changed, 399 insertions, 290 deletions
diff --git a/larn/moreobj.c b/larn/moreobj.c
index 737154f2..7c6766f7 100644
--- a/larn/moreobj.c
+++ b/larn/moreobj.c
@@ -1,19 +1,24 @@
-#ifndef lint
-static char rcsid[] = "$NetBSD: moreobj.c,v 1.3 1995/03/23 08:33:54 cgd Exp $";
-#endif /* not lint */
+/* $NetBSD: moreobj.c,v 1.4 1997/10/18 20:03:32 christos Exp $ */
-/* moreobj.c Larn is copyrighted 1986 by Noah Morgan.
- *
- * Routines in this file:
- *
- * oaltar()
- * othrone()
- * ochest()
- * ofountain()
+/*
+ * moreobj.c Larn is copyrighted 1986 by Noah Morgan.
+ *
+ * Routines in this file:
+ *
+ * oaltar() othrone() ochest() ofountain()
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: moreobj.c,v 1.4 1997/10/18 20:03:32 christos Exp $");
+#endif /* not lint */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
#include "header.h"
+#include "extern.h"
-static void ohear();
+static void ohear __P((void));
+static void fch __P((int, long *));
/*
* ******
@@ -22,96 +27,115 @@ static void ohear();
*
* subroutine to process an altar object
*/
+void
oaltar()
- {
- unsigned long k;
+{
+ unsigned long k;
- lprcat("\nDo you (p) pray (d) desecrate"); iopts();
- while (1)
- {
- while (1) switch(getchar())
- {
- case 'p': lprcat(" pray\nDo you (m) give money or (j) just pray? ");
- while (1) switch(getchar())
- {
- case 'j': if (rnd(100)<75)
- lprcat("\nnothing happens");
- else if (rnd(13)<4) ohear();
- else if (rnd(43) == 10)
- {
- if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment");
- enchantarmor(); return;
- }
- else if (rnd(43) == 10)
- {
- if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment");
- enchweapon(); return;
- }
- else createmonster(makemonst(level+1));
- return;
-
- case 'm': lprcat("\n\n"); cursor(1,24); cltoeoln();
- cursor(1,23); cltoeoln();
- lprcat("how much do you donate? ");
- k = readnum((long)c[GOLD]);
- if (c[GOLD]<k)
- {
- lprcat("\nYou don't have that much!");
- return;
- }
- c[GOLD] -= k;
- if (k < c[GOLD]/10 || k<rnd(50))
- { createmonster(makemonst(level+1)); c[AGGRAVATE] += 200; }
- else if (rnd(101) > 50) { ohear(); return; }
- else if (rnd(43) == 5)
- {
- if (c[WEAR]) lprcat("\nYou feel your armor vibrate for a moment");
- enchantarmor(); return;
- }
- else if (rnd(43) == 8)
- {
- if (c[WIELD]) lprcat("\nYou feel your weapon vibrate for a moment");
- enchweapon(); return;
- }
- else lprcat("\nThank You.");
- bottomline(); return;
-
- case '\33': return;
- };
-
- case 'd': lprcat(" desecrate");
- if (rnd(100)<60)
- { createmonster(makemonst(level+2)+8); c[AGGRAVATE] += 2500; }
- else
- if (rnd(101)<30)
- {
- lprcat("\nThe altar crumbles into a pile of dust before your eyes");
- forget(); /* remember to destroy the altar */
+ lprcat("\nDo you (p) pray (d) desecrate");
+ iopts();
+ while (1) {
+ while (1)
+ switch (getchar()) {
+ case 'p':
+ lprcat(" pray\nDo you (m) give money or (j) just pray? ");
+ while (1)
+ switch (getchar()) {
+ case 'j':
+ if (rnd(100) < 75)
+ lprcat("\nnothing happens");
+ else if (rnd(13) < 4)
+ ohear();
+ else if (rnd(43) == 10) {
+ if (c[WEAR])
+ lprcat("\nYou feel your armor vibrate for a moment");
+ enchantarmor();
+ return;
+ } else if (rnd(43) == 10) {
+ if (c[WIELD])
+ lprcat("\nYou feel your weapon vibrate for a moment");
+ enchweapon();
+ return;
+ } else
+ createmonster(makemonst(level + 1));
+ return;
+
+ case 'm':
+ lprcat("\n\n");
+ cursor(1, 24);
+ cltoeoln();
+ cursor(1, 23);
+ cltoeoln();
+ lprcat("how much do you donate? ");
+ k = readnum((long) c[GOLD]);
+ if (c[GOLD] < k) {
+ lprcat("\nYou don't have that much!");
+ return;
}
- else
- lprcat("\nnothing happens");
- return;
+ c[GOLD] -= k;
+ if (k < c[GOLD] / 10 || k < rnd(50)) {
+ createmonster(makemonst(level + 1));
+ c[AGGRAVATE] += 200;
+ } else if (rnd(101) > 50) {
+ ohear();
+ return;
+ } else if (rnd(43) == 5) {
+ if (c[WEAR])
+ lprcat("\nYou feel your armor vibrate for a moment");
+ enchantarmor();
+ return;
+ } else if (rnd(43) == 8) {
+ if (c[WIELD])
+ lprcat("\nYou feel your weapon vibrate for a moment");
+ enchweapon();
+ return;
+ } else
+ lprcat("\nThank You.");
+ bottomline();
+ return;
- case 'i':
- case '\33': ignore();
- if (rnd(100)<30) { createmonster(makemonst(level+1)); c[AGGRAVATE] += rnd(450); }
- else lprcat("\nnothing happens");
- return;
- };
- }
+ case '\33':
+ return;
+ };
+
+ case 'd':
+ lprcat(" desecrate");
+ if (rnd(100) < 60) {
+ createmonster(makemonst(level + 2) + 8);
+ c[AGGRAVATE] += 2500;
+ } else if (rnd(101) < 30) {
+ lprcat("\nThe altar crumbles into a pile of dust before your eyes");
+ forget(); /* remember to destroy
+ * the altar */
+ } else
+ lprcat("\nnothing happens");
+ return;
+
+ case 'i':
+ case '\33':
+ ignore();
+ if (rnd(100) < 30) {
+ createmonster(makemonst(level + 1));
+ c[AGGRAVATE] += rnd(450);
+ } else
+ lprcat("\nnothing happens");
+ return;
+ };
}
+}
/*
function to cast a +3 protection on the player
*/
static void
ohear()
- {
+{
lprcat("\nYou have been heard!");
- if (c[ALTPRO]==0) c[MOREDEFENSES]+=3;
+ if (c[ALTPRO] == 0)
+ c[MOREDEFENSES] += 3;
c[ALTPRO] += 500; /* protection field */
bottomline();
- }
+}
/*
*******
@@ -120,68 +144,85 @@ ohear()
subroutine to process a throne object
*/
+void
othrone(arg)
- int arg;
- {
- register int i,k;
+ int arg;
+{
+ int i, k;
- lprcat("\nDo you (p) pry off jewels, (s) sit down"); iopts();
- while (1)
- {
- while (1) switch(getchar())
- {
- case 'p': lprcat(" pry off"); k=rnd(101);
- if (k<25)
- {
- for (i=0; i<rnd(4); i++) creategem(); /* gems pop off the throne */
- item[playerx][playery]=ODEADTHRONE;
- know[playerx][playery]=0;
- }
- else if (k<40 && arg==0)
- {
- createmonster(GNOMEKING);
- item[playerx][playery]=OTHRONE2;
- know[playerx][playery]=0;
- }
- else lprcat("\nnothing happens");
- return;
-
- case 's': lprcat(" sit down"); k=rnd(101);
- if (k<30 && arg==0)
- {
- createmonster(GNOMEKING);
- item[playerx][playery]=OTHRONE2;
- know[playerx][playery]=0;
- }
- else if (k<35) { lprcat("\nZaaaappp! You've been teleported!\n"); beep(); oteleport(0); }
- else lprcat("\nnothing happens");
- return;
+ lprcat("\nDo you (p) pry off jewels, (s) sit down");
+ iopts();
+ while (1) {
+ while (1)
+ switch (getchar()) {
+ case 'p':
+ lprcat(" pry off");
+ k = rnd(101);
+ if (k < 25) {
+ for (i = 0; i < rnd(4); i++)
+ creategem(); /* gems pop off the
+ * throne */
+ item[playerx][playery] = ODEADTHRONE;
+ know[playerx][playery] = 0;
+ } else if (k < 40 && arg == 0) {
+ createmonster(GNOMEKING);
+ item[playerx][playery] = OTHRONE2;
+ know[playerx][playery] = 0;
+ } else
+ lprcat("\nnothing happens");
+ return;
- case 'i':
- case '\33': ignore(); return;
- };
- }
+ case 's':
+ lprcat(" sit down");
+ k = rnd(101);
+ if (k < 30 && arg == 0) {
+ createmonster(GNOMEKING);
+ item[playerx][playery] = OTHRONE2;
+ know[playerx][playery] = 0;
+ } else if (k < 35) {
+ lprcat("\nZaaaappp! You've been teleported!\n");
+ beep();
+ oteleport(0);
+ } else
+ lprcat("\nnothing happens");
+ return;
+
+ case 'i':
+ case '\33':
+ ignore();
+ return;
+ };
}
+}
+void
odeadthrone()
- {
- register int k;
+{
+ int k;
- lprcat("\nDo you (s) sit down"); iopts();
- while (1)
- {
- while (1) switch(getchar())
- {
- case 's': lprcat(" sit down"); k=rnd(101);
- if (k<35) { lprcat("\nZaaaappp! You've been teleported!\n"); beep(); oteleport(0); }
- else lprcat("\nnothing happens");
- return;
+ lprcat("\nDo you (s) sit down");
+ iopts();
+ while (1) {
+ while (1)
+ switch (getchar()) {
+ case 's':
+ lprcat(" sit down");
+ k = rnd(101);
+ if (k < 35) {
+ lprcat("\nZaaaappp! You've been teleported!\n");
+ beep();
+ oteleport(0);
+ } else
+ lprcat("\nnothing happens");
+ return;
- case 'i':
- case '\33': ignore(); return;
- };
- }
+ case 'i':
+ case '\33':
+ ignore();
+ return;
+ };
}
+}
/*
******
@@ -190,55 +231,68 @@ odeadthrone()
subroutine to process a throne object
*/
+void
ochest()
- {
- register int i,k;
- lprcat("\nDo you (t) take it, (o) try to open it"); iopts();
- while (1)
- {
- while (1) switch(getchar())
- {
- case 'o': lprcat(" open it"); k=rnd(101);
- if (k<40)
- {
- lprcat("\nThe chest explodes as you open it"); beep();
- i = rnd(10); lastnum=281; /* in case he dies */
- lprintf("\nYou suffer %d hit points damage!",(long)i);
- checkloss(i);
- switch(rnd(10)) /* see if he gets a curse */
- {
- case 1: c[ITCHING]+= rnd(1000)+100;
- lprcat("\nYou feel an irritation spread over your skin!");
- beep();
- break;
-
- case 2: c[CLUMSINESS]+= rnd(1600)+200;
- lprcat("\nYou begin to lose hand to eye coordination!");
- beep();
- break;
-
- case 3: c[HALFDAM]+= rnd(1600)+200;
- beep();
- lprcat("\nA sickness engulfs you!"); break;
- };
- item[playerx][playery]=know[playerx][playery]=0;
- if (rnd(100)<69) creategem(); /* gems from the chest */
- dropgold(rnd(110*iarg[playerx][playery]+200));
- for (i=0; i<rnd(4); i++) something(iarg[playerx][playery]+2);
- }
- else lprcat("\nnothing happens");
- return;
+{
+ int i, k;
+ lprcat("\nDo you (t) take it, (o) try to open it");
+ iopts();
+ while (1) {
+ while (1)
+ switch (getchar()) {
+ case 'o':
+ lprcat(" open it");
+ k = rnd(101);
+ if (k < 40) {
+ lprcat("\nThe chest explodes as you open it");
+ beep();
+ i = rnd(10);
+ lastnum = 281; /* in case he dies */
+ lprintf("\nYou suffer %d hit points damage!", (long) i);
+ checkloss(i);
+ switch (rnd(10)) { /* see if he gets a
+ * curse */
+ case 1:
+ c[ITCHING] += rnd(1000) + 100;
+ lprcat("\nYou feel an irritation spread over your skin!");
+ beep();
+ break;
- case 't': lprcat(" take");
- if (take(OCHEST,iarg[playerx][playery])==0)
- item[playerx][playery]=know[playerx][playery]=0;
- return;
+ case 2:
+ c[CLUMSINESS] += rnd(1600) + 200;
+ lprcat("\nYou begin to lose hand to eye coordination!");
+ beep();
+ break;
- case 'i':
- case '\33': ignore(); return;
- };
- }
+ case 3:
+ c[HALFDAM] += rnd(1600) + 200;
+ beep();
+ lprcat("\nA sickness engulfs you!");
+ break;
+ };
+ item[playerx][playery] = know[playerx][playery] = 0;
+ if (rnd(100) < 69)
+ creategem(); /* gems from the chest */
+ dropgold(rnd(110 * iarg[playerx][playery] + 200));
+ for (i = 0; i < rnd(4); i++)
+ something(iarg[playerx][playery] + 2);
+ } else
+ lprcat("\nnothing happens");
+ return;
+
+ case 't':
+ lprcat(" take");
+ if (take(OCHEST, iarg[playerx][playery]) == 0)
+ item[playerx][playery] = know[playerx][playery] = 0;
+ return;
+
+ case 'i':
+ case '\33':
+ ignore();
+ return;
+ };
}
+}
/*
*********
@@ -246,64 +300,70 @@ ochest()
*********
*/
+void
ofountain()
- {
- register int x;
+{
+ int x;
cursors();
- lprcat("\nDo you (d) drink, (w) wash yourself"); iopts();
- while (1) switch(getchar())
- {
- case 'd': lprcat("drink");
- if (rnd(1501)<2)
- {
- lprcat("\nOops! You seem to have caught the dreadful sleep!");
- beep(); lflush(); sleep(3); died(280); return;
- }
- x = rnd(100);
- if (x<7)
- {
- c[HALFDAM] += 200+rnd(200);
- lprcat("\nYou feel a sickness coming on");
- }
- else if (x<13) quaffpotion(23); /* see invisible */
- else if (x < 45)
- lprcat("\nnothing seems to have happened");
- else if (rnd(3) != 2)
- fntchange(1); /* change char levels upward */
- else
- fntchange(-1); /* change char levels downward */
- if (rnd(12)<3)
- {
- lprcat("\nThe fountains bubbling slowly quiets");
- item[playerx][playery]=ODEADFOUNTAIN; /* dead fountain */
- know[playerx][playery]=0;
- }
- return;
+ lprcat("\nDo you (d) drink, (w) wash yourself");
+ iopts();
+ while (1)
+ switch (getchar()) {
+ case 'd':
+ lprcat("drink");
+ if (rnd(1501) < 2) {
+ lprcat("\nOops! You seem to have caught the dreadful sleep!");
+ beep();
+ lflush();
+ sleep(3);
+ died(280);
+ return;
+ }
+ x = rnd(100);
+ if (x < 7) {
+ c[HALFDAM] += 200 + rnd(200);
+ lprcat("\nYou feel a sickness coming on");
+ } else if (x < 13)
+ quaffpotion(23); /* see invisible */
+ else if (x < 45)
+ lprcat("\nnothing seems to have happened");
+ else if (rnd(3) != 2)
+ fntchange(1); /* change char levels upward */
+ else
+ fntchange(-1); /* change char levels
+ * downward */
+ if (rnd(12) < 3) {
+ lprcat("\nThe fountains bubbling slowly quiets");
+ item[playerx][playery] = ODEADFOUNTAIN; /* dead fountain */
+ know[playerx][playery] = 0;
+ }
+ return;
case '\33':
- case 'i': ignore(); return;
-
- case 'w': lprcat("wash yourself");
- if (rnd(100) < 11)
- {
- x=rnd((level<<2)+2);
- lprintf("\nOh no! The water was foul! You suffer %d hit points!",(long)x);
- lastnum=273; losehp(x); bottomline(); cursors();
- }
- else
- if (rnd(100) < 29)
- lprcat("\nYou got the dirt off!");
- else
- if (rnd(100) < 31)
- lprcat("\nThis water seems to be hard water! The dirt didn't come off!");
- else
- if (rnd(100) < 34)
- createmonster(WATERLORD); /* make water lord */
- else
- lprcat("\nnothing seems to have happened");
- return;
+ case 'i':
+ ignore();
+ return;
+
+ case 'w':
+ lprcat("wash yourself");
+ if (rnd(100) < 11) {
+ x = rnd((level << 2) + 2);
+ lprintf("\nOh no! The water was foul! You suffer %d hit points!", (long) x);
+ lastnum = 273;
+ losehp(x);
+ bottomline();
+ cursors();
+ } else if (rnd(100) < 29)
+ lprcat("\nYou got the dirt off!");
+ else if (rnd(100) < 31)
+ lprcat("\nThis water seems to be hard water! The dirt didn't come off!");
+ else if (rnd(100) < 34)
+ createmonster(WATERLORD); /* make water lord */
+ else
+ lprcat("\nnothing seems to have happened");
+ return;
}
- }
+}
/*
***
@@ -313,64 +373,113 @@ ofountain()
subroutine to process an up/down of a character attribute for ofountain
*/
static void
-fch(how,x)
- int how;
- long *x;
- {
- if (how < 0) { lprcat(" went down by one!"); --(*x); }
- else { lprcat(" went up by one!"); (*x)++; }
- bottomline();
+fch(how, x)
+ int how;
+ long *x;
+{
+ if (how < 0) {
+ lprcat(" went down by one!");
+ --(*x);
+ } else {
+ lprcat(" went up by one!");
+ (*x)++;
}
+ bottomline();
+}
/*
a subroutine to raise or lower character levels
if x > 0 they are raised if x < 0 they are lowered
*/
+void
fntchange(how)
- int how;
- {
- register long j;
+ int how;
+{
+ long j;
lprc('\n');
- switch(rnd(9))
- {
- case 1: lprcat("Your strength"); fch(how,&c[0]); break;
- case 2: lprcat("Your intelligence"); fch(how,&c[1]); break;
- case 3: lprcat("Your wisdom"); fch(how,&c[2]); break;
- case 4: lprcat("Your constitution"); fch(how,&c[3]); break;
- case 5: lprcat("Your dexterity"); fch(how,&c[4]); break;
- case 6: lprcat("Your charm"); fch(how,&c[5]); break;
- case 7: j=rnd(level+1);
- if (how < 0)
- { lprintf("You lose %d hit point",(long)j); if (j>1) lprcat("s!"); else lprc('!'); losemhp((int)j); }
- else
- { lprintf("You gain %d hit point",(long)j); if (j>1) lprcat("s!"); else lprc('!'); raisemhp((int)j); }
- bottomline(); break;
-
- case 8: j=rnd(level+1);
- if (how > 0)
- {
- lprintf("You just gained %d spell",(long)j); raisemspells((int)j);
- if (j>1) lprcat("s!"); else lprc('!');
- }
- else
- {
- lprintf("You just lost %d spell",(long)j); losemspells((int)j);
- if (j>1) lprcat("s!"); else lprc('!');
- }
- bottomline(); break;
-
- case 9: j = 5*rnd((level+1)*(level+1));
- if (how < 0)
- {
- lprintf("You just lost %d experience point",(long)j);
- if (j>1) lprcat("s!"); else lprc('!'); loseexperience((long)j);
- }
- else
- {
- lprintf("You just gained %d experience point",(long)j);
- if (j>1) lprcat("s!"); else lprc('!'); raiseexperience((long)j);
- }
- break;
+ switch (rnd(9)) {
+ case 1:
+ lprcat("Your strength");
+ fch(how, &c[0]);
+ break;
+ case 2:
+ lprcat("Your intelligence");
+ fch(how, &c[1]);
+ break;
+ case 3:
+ lprcat("Your wisdom");
+ fch(how, &c[2]);
+ break;
+ case 4:
+ lprcat("Your constitution");
+ fch(how, &c[3]);
+ break;
+ case 5:
+ lprcat("Your dexterity");
+ fch(how, &c[4]);
+ break;
+ case 6:
+ lprcat("Your charm");
+ fch(how, &c[5]);
+ break;
+ case 7:
+ j = rnd(level + 1);
+ if (how < 0) {
+ lprintf("You lose %d hit point", (long) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ losemhp((int) j);
+ } else {
+ lprintf("You gain %d hit point", (long) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ raisemhp((int) j);
}
- cursors();
+ bottomline();
+ break;
+
+ case 8:
+ j = rnd(level + 1);
+ if (how > 0) {
+ lprintf("You just gained %d spell", (long) j);
+ raisemspells((int) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ } else {
+ lprintf("You just lost %d spell", (long) j);
+ losemspells((int) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ }
+ bottomline();
+ break;
+
+ case 9:
+ j = 5 * rnd((level + 1) * (level + 1));
+ if (how < 0) {
+ lprintf("You just lost %d experience point", (long) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ loseexperience((long) j);
+ } else {
+ lprintf("You just gained %d experience point", (long) j);
+ if (j > 1)
+ lprcat("s!");
+ else
+ lprc('!');
+ raiseexperience((long) j);
+ }
+ break;
}
+ cursors();
+}