summaryrefslogtreecommitdiff
path: root/games/larn/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/larn/object.c')
-rw-r--r--games/larn/object.c1934
1 files changed, 1242 insertions, 692 deletions
diff --git a/games/larn/object.c b/games/larn/object.c
index 57af4a98204..754cae70ce7 100644
--- a/games/larn/object.c
+++ b/games/larn/object.c
@@ -1,812 +1,1362 @@
-#ifndef lint
-static char rcsid[] = "$NetBSD: object.c,v 1.6 1995/04/22 07:34:09 cgd Exp $";
-#endif /* not lint */
+/* $OpenBSD: object.c,v 1.3 1998/09/15 05:12:32 pjanzen Exp $ */
+/* $NetBSD: object.c,v 1.8 1997/10/18 20:03:38 christos Exp $ */
+
+/* object.c Larn is copyrighted 1986 by Noah Morgan. */
-/* object.c Larn is copyrighted 1986 by Noah Morgan. */
+#include <sys/cdefs.h>
+#ifndef lint
+static char rcsid[] = "$OpenBSD: object.c,v 1.3 1998/09/15 05:12:32 pjanzen Exp $";
+#endif /* not lint */
#include "header.h"
+#include "extern.h"
/*
- ***************
- LOOK_FOR_OBJECT
- ***************
-
- subroutine to look for an object and give the player his options
- if an object was found.
+ * ***************
+ * LOOK_FOR_OBJECT
+ * ***************
+ *
+ * subroutine to look for an object and give the player his options
+ * if an object was found.
*/
+void
lookforobject()
{
-register int i,j;
-if (c[TIMESTOP]) return; /* can't find objects is time is stopped */
-i=item[playerx][playery]; if (i==0) return;
-showcell(playerx,playery); cursors(); yrepcount=0;
-switch(i)
- {
- case OGOLDPILE: case OMAXGOLD:
- case OKGOLD: case ODGOLD: lprcat("\n\nYou have found some gold!"); ogold(i); break;
-
- case OPOTION: lprcat("\n\nYou have found a magic potion");
- i = iarg[playerx][playery];
- if (potionname[i][0]!=0) lprintf(" of%s", potionname[i]);
- opotion(i); break;
-
- case OSCROLL: lprcat("\n\nYou have found a magic scroll");
- i = iarg[playerx][playery];
- if (scrollname[i][0]!=0) lprintf(" of%s", scrollname[i]);
- oscroll(i); break;
-
- case OALTAR: if (nearbymonst()) return;
- lprcat("\n\nThere is a Holy Altar here!"); oaltar(); break;
-
- case OBOOK: lprcat("\n\nYou have found a book."); obook(); break;
-
- case OCOOKIE: lprcat("\n\nYou have found a fortune cookie."); ocookie(); break;
-
- case OTHRONE: if (nearbymonst()) return;
- lprintf("\n\nThere is %s here!",objectname[i]); othrone(0); break;
-
- case OTHRONE2: if (nearbymonst()) return;
- lprintf("\n\nThere is %s here!",objectname[i]); othrone(1); break;
-
- case ODEADTHRONE: lprintf("\n\nThere is %s here!",objectname[i]); odeadthrone(); break;
-
- case OORB: lprcat("\n\nYou have found the Orb!!!!!"); oorb(); break;
-
- case OPIT: lprcat("\n\nYou're standing at the top of a pit."); opit(); break;
-
- case OSTAIRSUP: lprcat("\n\nThere is a circular staircase here"); ostairs(1); /* up */ break;
-
- case OELEVATORUP: lprcat("\n\nYou feel heavy for a moment, but the feeling disappears");
- oelevator(1); /* up */ break;
-
- case OFOUNTAIN: if (nearbymonst()) return;
- lprcat("\n\nThere is a fountain here"); ofountain(); break;
-
- case OSTATUE: if (nearbymonst()) return;
- lprcat("\n\nYou are standing in front of a statue"); ostatue(); break;
-
- case OCHEST: lprcat("\n\nThere is a chest here"); ochest(); break;
-
- case OIVTELETRAP: if (rnd(11)<6) return;
- item[playerx][playery] = OTELEPORTER;
- know[playerx][playery] = 1;
-
- case OTELEPORTER: lprcat("\nZaaaappp! You've been teleported!\n");
- beep(); nap(3000); oteleport(0);
- break;
-
- case OSCHOOL: if (nearbymonst()) return;
- lprcat("\n\nYou have found the College of Larn.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g') { oschool(); /* the college of larn */ }
- else lprcat(" stay here");
- break;
-
- case OMIRROR: if (nearbymonst()) return;
- lprcat("\n\nThere is a mirror here"); omirror(); break;
+ int i, j;
+
+ if (c[TIMESTOP])
+ return; /* can't find objects if time is stopped */
+ i = item[playerx][playery];
+ if (i == 0)
+ return;
+ showcell(playerx, playery);
+ cursors();
+ yrepcount = 0;
+ switch (i) {
+ case OGOLDPILE:
+ case OMAXGOLD:
+ case OKGOLD:
+ case ODGOLD:
+ lprcat("\n\nYou have found some gold!");
+ ogold(i);
+ break;
+
+ case OPOTION:
+ lprcat("\n\nYou have found a magic potion");
+ i = iarg[playerx][playery];
+ if (potionname[i][0] != 0)
+ lprintf(" of%s", potionname[i]);
+ opotion(i);
+ break;
+
+ case OSCROLL:
+ lprcat("\n\nYou have found a magic scroll");
+ i = iarg[playerx][playery];
+ if (scrollname[i][0] != 0)
+ lprintf(" of%s", scrollname[i]);
+ oscroll(i);
+ break;
+
+ case OALTAR:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is a Holy Altar here!");
+ oaltar();
+ break;
+
+ case OBOOK:
+ lprcat("\n\nYou have found a book.");
+ obook();
+ break;
+
+ case OCOOKIE:
+ lprcat("\n\nYou have found a fortune cookie.");
+ ocookie();
+ break;
+
+ case OTHRONE:
+ if (nearbymonst())
+ return;
+ lprintf("\n\nThere is %s here!", objectname[i]);
+ othrone(0);
+ break;
+
+ case OTHRONE2:
+ if (nearbymonst())
+ return;
+ lprintf("\n\nThere is %s here!", objectname[i]);
+ othrone(1);
+ break;
+
+ case ODEADTHRONE:
+ lprintf("\n\nThere is %s here!", objectname[i]);
+ odeadthrone();
+ break;
+
+ case OORB:
+ lprcat("\n\nYou have found the Orb!!!!!");
+ oorb();
+ break;
+
+ case OPIT:
+ lprcat("\n\nYou're standing at the top of a pit.");
+ opit();
+ break;
+
+ case OSTAIRSUP:
+ lprcat("\n\nThere is a circular staircase here");
+ ostairs(1); /* up */
+ break;
+
+ case OELEVATORUP:
+ lprcat("\n\nYou feel heavy for a moment, but the feeling disappears");
+ oelevator(1); /* up */
+ break;
+
+ case OFOUNTAIN:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is a fountain here");
+ ofountain();
+ break;
+
+ case OSTATUE:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nYou are standing in front of a statue");
+ ostatue();
+ break;
+
+ case OCHEST:
+ lprcat("\n\nThere is a chest here");
+ ochest();
+ break;
+
+ case OIVTELETRAP:
+ if (rnd(11) < 6)
+ return;
+ item[playerx][playery] = OTELEPORTER;
+ know[playerx][playery] = 1;
+
+ case OTELEPORTER:
+ lprcat("\nZaaaappp! You've been teleported!\n");
+ lbeep();
+ nap(3000);
+ oteleport(0);
+ break;
+
+ case OSCHOOL:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nYou have found the College of Larn.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g') {
+ oschool(); /* the college of larn */
+ } else
+ lprcat(" stay here");
+ break;
+
+ case OMIRROR:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is a mirror here");
+ omirror();
+ break;
case OBANK2:
- case OBANK: if (nearbymonst()) return;
- if (i==OBANK) lprcat("\n\nYou have found the bank of Larn.");
- else lprcat("\n\nYou have found a branch office of the bank of Larn.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- j=0; while ((j!='g') && (j!='i') && (j!='\33')) j=getchar();
- if (j == 'g') { if (i==OBANK) obank(); else obank2(); /* the bank of larn */ }
- else lprcat(" stay here");
- break;
-
- case ODEADFOUNTAIN: if (nearbymonst()) return;
- lprcat("\n\nThere is a dead fountain here"); break;
-
- case ODNDSTORE: if (nearbymonst()) return;
- lprcat("\n\nThere is a DND store here.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g')
- dndstore(); /* the dnd adventurers store */
- else lprcat(" stay here");
+ case OBANK:
+ if (nearbymonst())
+ return;
+ if (i == OBANK)
+ lprcat("\n\nYou have found the bank of Larn.");
+ else
+ lprcat("\n\nYou have found a branch office of the bank of Larn.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ j = 0;
+ while ((j != 'g') && (j != 'i') && (j != '\33'))
+ j = lgetchar();
+ if (j == 'g') {
+ if (i == OBANK)
+ obank();
+ else
+ obank2(); /* the bank of larn */
+ } else
+ lprcat(" stay here");
+ break;
+
+ case ODEADFOUNTAIN:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is a dead fountain here");
+ break;
+
+ case ODNDSTORE:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is a DND store here.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g')
+ dndstore(); /* the dnd adventurers store */
+ else
+ lprcat(" stay here");
+ break;
+
+ case OSTAIRSDOWN:
+ lprcat("\n\nThere is a circular staircase here");
+ ostairs(-1); /* down */
+ break;
+
+ case OELEVATORDOWN:
+ lprcat("\n\nYou feel light for a moment, but the feeling disappears");
+ oelevator(-1); /* down */
+ break;
+
+ case OOPENDOOR:
+ lprintf("\n\nYou have found %s", objectname[i]);
+ lprcat("\nDo you (c) close it");
+ iopts();
+ i = 0;
+ while ((i != 'c') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if ((i == '\33') || (i == 'i')) {
+ ignore();
+ break;
+ }
+ lprcat("close");
+ forget();
+ item[playerx][playery] = OCLOSEDDOOR;
+ iarg[playerx][playery] = 0;
+ playerx = lastpx;
+ playery = lastpy;
+ break;
+
+ case OCLOSEDDOOR:
+ lprintf("\n\nYou have found %s", objectname[i]);
+ lprcat("\nDo you (o) try to open it");
+ iopts();
+ i = 0;
+ while ((i != 'o') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if ((i == '\33') || (i == 'i')) {
+ ignore();
+ playerx = lastpx;
+ playery = lastpy;
+ break;
+ } else {
+ lprcat("open");
+ if (rnd(11) < 7) {
+ switch (iarg[playerx][playery]) {
+ case 6:
+ c[AGGRAVATE] += rnd(400);
break;
- case OSTAIRSDOWN: lprcat("\n\nThere is a circular staircase here"); ostairs(-1); /* down */ break;
-
- case OELEVATORDOWN: lprcat("\n\nYou feel light for a moment, but the feeling disappears");
- oelevator(-1); /* down */
- break;
-
- case OOPENDOOR: lprintf("\n\nYou have found %s",objectname[i]);
- lprcat("\nDo you (c) close it"); iopts();
- i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
- if ((i=='\33') || (i=='i')) { ignore(); break; }
- lprcat("close"); forget();
- item[playerx][playery]=OCLOSEDDOOR;
- iarg[playerx][playery]=0;
- playerx = lastpx; playery = lastpy;
- break;
-
- case OCLOSEDDOOR: lprintf("\n\nYou have found %s",objectname[i]);
- lprcat("\nDo you (o) try to open it"); iopts();
- i=0; while ((i!='o') && (i!='i') && (i!='\33')) i=getchar();
- if ((i=='\33') || (i=='i'))
- { ignore(); playerx = lastpx;
- playery = lastpy; break; }
- else
- {
- lprcat("open");
- if (rnd(11)<7)
- {
- switch(iarg[playerx][playery])
- {
- case 6: c[AGGRAVATE] += rnd(400); break;
-
- case 7: lprcat("\nYou are jolted by an electric shock ");
- lastnum=274; losehp(rnd(20)); bottomline(); break;
-
- case 8: loselevel(); break;
-
- case 9: lprcat("\nYou suddenly feel weaker ");
- if (c[STRENGTH]>3) c[STRENGTH]--;
- bottomline(); break;
-
- default: break;
- }
- playerx = lastpx; playery = lastpy;
- }
- else
- {
- forget(); item[playerx][playery]=OOPENDOOR;
- }
- }
- break;
-
- case OENTRANCE: lprcat("\nYou have found "); lprcat(objectname[OENTRANCE]);
- lprcat("\nDo you (g) go inside"); iopts();
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g')
- {
- newcavelevel(1); playerx=33; playery=MAXY-2;
- item[33][MAXY-1]=know[33][MAXY-1]=mitem[33][MAXY-1]=0;
- draws(0,MAXX,0,MAXY); bot_linex(); return;
- }
- else ignore();
+ case 7:
+ lprcat("\nYou are jolted by an electric shock ");
+ lastnum = 274;
+ losehp(rnd(20));
+ bottomline();
break;
- case OVOLDOWN: lprcat("\nYou have found "); lprcat(objectname[OVOLDOWN]);
- lprcat("\nDo you (c) climb down"); iopts();
- i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
- if ((i=='\33') || (i=='i')) { ignore(); break; }
- if (level!=0) { lprcat("\nThe shaft only extends 5 feet downward!"); return; }
- if (packweight() > 45+3*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
- lastnum=275; losehp(30+rnd(20)); bottomhp(); }
-
- else lprcat("climb down"); nap(3000); newcavelevel(MAXLEVEL);
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++) /* put player near volcano shaft */
- if (item[j][i]==OVOLUP) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
- draws(0,MAXX,0,MAXY); bot_linex(); return;
-
- case OVOLUP: lprcat("\nYou have found "); lprcat(objectname[OVOLUP]);
- lprcat("\nDo you (c) climb up"); iopts();
- i=0; while ((i!='c') && (i!='i') && (i!='\33')) i=getchar();
- if ((i=='\33') || (i=='i')) { ignore(); break; }
- if (level!=11) { lprcat("\nThe shaft only extends 8 feet upwards before you find a blockage!"); return; }
- if (packweight() > 45+5*(c[STRENGTH]+c[STREXTRA])) { lprcat("\nYou slip and fall down the shaft"); beep();
- lastnum=275; losehp(15+rnd(20)); bottomhp(); return; }
- lprcat("climb up"); lflush(); nap(3000); newcavelevel(0);
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++) /* put player near volcano shaft */
- if (item[j][i]==OVOLDOWN) { playerx=j; playery=i; j=MAXX; i=MAXY; positionplayer(); }
- draws(0,MAXX,0,MAXY); bot_linex(); return;
-
- case OTRAPARROWIV: if (rnd(17)<13) return; /* for an arrow trap */
- item[playerx][playery] = OTRAPARROW;
- know[playerx][playery] = 0;
-
- case OTRAPARROW: lprcat("\nYou are hit by an arrow"); beep(); /* for an arrow trap */
- lastnum=259; losehp(rnd(10)+level);
- bottomhp(); return;
-
- case OIVDARTRAP: if (rnd(17)<13) return; /* for a dart trap */
- item[playerx][playery] = ODARTRAP;
- know[playerx][playery] = 0;
-
- case ODARTRAP: lprcat("\nYou are hit by a dart"); beep(); /* for a dart trap */
- lastnum=260; losehp(rnd(5));
- if ((--c[STRENGTH]) < 3) c[STRENGTH] = 3;
- bottomline(); return;
-
- case OIVTRAPDOOR: if (rnd(17)<13) return; /* for a trap door */
- item[playerx][playery] = OTRAPDOOR;
- know[playerx][playery] = 1;
-
- case OTRAPDOOR: lastnum = 272; /* a trap door */
- if ((level==MAXLEVEL-1) || (level==MAXLEVEL+MAXVLEVEL-1))
- { lprcat("\nYou fell through a bottomless trap door!"); beep(); nap(3000); died(271); }
- lprcat("\nYou fall through a trap door!"); beep(); /* for a trap door */
- losehp(rnd(5+level));
- nap(2000); newcavelevel(level+1); draws(0,MAXX,0,MAXY); bot_linex();
- return;
-
-
- case OTRADEPOST: if (nearbymonst()) return;
- lprcat("\nYou have found the Larn trading Post.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g') otradepost(); else lprcat("stay here");
- return;
-
- case OHOME: if (nearbymonst()) return;
- lprcat("\nYou have found your way home.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g') ohome(); else lprcat("stay here");
- return;
-
- case OWALL: break;
+ case 8:
+ loselevel();
+ break;
- case OANNIHILATION: died(283); return; /* annihilated by sphere of annihilation */
+ case 9:
+ lprcat("\nYou suddenly feel weaker ");
+ if (c[STRENGTH] > 3)
+ c[STRENGTH]--;
+ bottomline();
+ break;
- case OLRS: if (nearbymonst()) return;
- lprcat("\n\nThere is an LRS office here.");
- lprcat("\nDo you (g) go inside, or (i) stay here? ");
- i=0; while ((i!='g') && (i!='i') && (i!='\33')) i=getchar();
- if (i == 'g')
- olrs(); /* the larn revenue service */
- else lprcat(" stay here");
- break;
+ default:
+ break;
+ }
+ playerx = lastpx;
+ playery = lastpy;
+ } else {
+ forget();
+ item[playerx][playery] = OOPENDOOR;
+ }
+ }
+ break;
+
+ case OENTRANCE:
+ lprcat("\nYou have found ");
+ lprcat(objectname[OENTRANCE]);
+ lprcat("\nDo you (g) go inside");
+ iopts();
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g') {
+ newcavelevel(1);
+ playerx = 33;
+ playery = MAXY - 2;
+ item[33][MAXY - 1] = know[33][MAXY - 1] = mitem[33][MAXY - 1] = 0;
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ return;
+ } else
+ ignore();
+ break;
+
+ case OVOLDOWN:
+ lprcat("\nYou have found ");
+ lprcat(objectname[OVOLDOWN]);
+ lprcat("\nDo you (c) climb down");
+ iopts();
+ i = 0;
+ while ((i != 'c') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if ((i == '\33') || (i == 'i')) {
+ ignore();
+ break;
+ }
+ if (level != 0) {
+ lprcat("\nThe shaft only extends 5 feet downward!");
+ return;
+ }
+ if (packweight() > 45 + 3 * (c[STRENGTH] + c[STREXTRA])) {
+ lprcat("\nYou slip and fall down the shaft");
+ lbeep();
+ lastnum = 275;
+ losehp(30 + rnd(20));
+ bottomhp();
+ } else
+ lprcat("climb down");
+ nap(3000);
+ newcavelevel(MAXLEVEL);
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++) /* put player near
+ * volcano shaft */
+ if (item[j][i] == OVOLUP) {
+ playerx = j;
+ playery = i;
+ j = MAXX;
+ i = MAXY;
+ positionplayer();
+ }
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ return;
+
+ case OVOLUP:
+ lprcat("\nYou have found ");
+ lprcat(objectname[OVOLUP]);
+ lprcat("\nDo you (c) climb up");
+ iopts();
+ i = 0;
+ while ((i != 'c') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if ((i == '\33') || (i == 'i')) {
+ ignore();
+ break;
+ }
+ if (level != 11) {
+ lprcat("\nThe shaft only extends 8 feet upwards before you find a blockage!");
+ return;
+ }
+ if (packweight() > 45 + 5 * (c[STRENGTH] + c[STREXTRA])) {
+ lprcat("\nYou slip and fall down the shaft");
+ lbeep();
+ lastnum = 275;
+ losehp(15 + rnd(20));
+ bottomhp();
+ return;
+ }
+ lprcat("climb up");
+ lflush();
+ nap(3000);
+ newcavelevel(0);
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++) /* put player near
+ * volcano shaft */
+ if (item[j][i] == OVOLDOWN) {
+ playerx = j;
+ playery = i;
+ j = MAXX;
+ i = MAXY;
+ positionplayer();
+ }
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ return;
+
+ case OTRAPARROWIV:
+ if (rnd(17) < 13)
+ return; /* for an arrow trap */
+ item[playerx][playery] = OTRAPARROW;
+ know[playerx][playery] = 0;
+
+ case OTRAPARROW:
+ lprcat("\nYou are hit by an arrow");
+ lbeep(); /* for an arrow trap */
+ lastnum = 259;
+ losehp(rnd(10) + level);
+ bottomhp();
+ return;
+
+ case OIVDARTRAP:
+ if (rnd(17) < 13)
+ return; /* for a dart trap */
+ item[playerx][playery] = ODARTRAP;
+ know[playerx][playery] = 0;
+
+ case ODARTRAP:
+ lprcat("\nYou are hit by a dart");
+ lbeep(); /* for a dart trap */
+ lastnum = 260;
+ losehp(rnd(5));
+ if ((--c[STRENGTH]) < 3)
+ c[STRENGTH] = 3;
+ bottomline();
+ return;
+
+ case OIVTRAPDOOR:
+ if (rnd(17) < 13)
+ return; /* for a trap door */
+ item[playerx][playery] = OTRAPDOOR;
+ know[playerx][playery] = 1;
+
+ case OTRAPDOOR:
+ lastnum = 272; /* a trap door */
+ if ((level == MAXLEVEL - 1) || (level == MAXLEVEL + MAXVLEVEL - 1)) {
+ lprcat("\nYou fell through a bottomless trap door!");
+ lbeep();
+ nap(3000);
+ died(271);
+ }
+ lprcat("\nYou fall through a trap door!");
+ lbeep(); /* for a trap door */
+ losehp(rnd(5 + level));
+ nap(2000);
+ newcavelevel(level + 1);
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ return;
+
+
+ case OTRADEPOST:
+ if (nearbymonst())
+ return;
+ lprcat("\nYou have found the Larn trading Post.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g')
+ otradepost();
+ else
+ lprcat("stay here");
+ return;
+
+ case OHOME:
+ if (nearbymonst())
+ return;
+ lprcat("\nYou have found your way home.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g')
+ ohome();
+ else
+ lprcat("stay here");
+ return;
+
+ case OWALL:
+ break;
+
+ case OANNIHILATION:
+ died(283);
+ return; /* annihilated by sphere of annihilation */
+
+ case OLRS:
+ if (nearbymonst())
+ return;
+ lprcat("\n\nThere is an LRS office here.");
+ lprcat("\nDo you (g) go inside, or (i) stay here? ");
+ i = 0;
+ while ((i != 'g') && (i != 'i') && (i != '\33'))
+ i = lgetchar();
+ if (i == 'g')
+ olrs(); /* the larn revenue service */
+ else
+ lprcat(" stay here");
+ break;
- default: finditem(i); break;
+ default:
+ finditem(i);
+ break;
};
}
/*
- function to say what object we found and ask if player wants to take it
+ * function to say what object we found and ask if player wants to take it
*/
+void
finditem(itm)
- int itm;
- {
- int tmp,i;
- lprintf("\n\nYou have found %s ",objectname[itm]);
- tmp=iarg[playerx][playery];
- switch(itm)
- {
- case ODIAMOND: case ORUBY: case OEMERALD:
- case OSAPPHIRE: case OSPIRITSCARAB: case OORBOFDRAGON:
- case OCUBEofUNDEAD: case ONOTHEFT: break;
-
- default:
- if (tmp>0) lprintf("+ %d",(long)tmp); else if (tmp<0) lprintf(" %d",(long)tmp);
- }
- lprcat("\nDo you want to (t) take it"); iopts();
- i=0; while (i!='t' && i!='i' && i!='\33') i=getchar();
- if (i == 't')
- { lprcat("take"); if (take(itm,tmp)==0) forget(); return; }
- ignore();
+ int itm;
+{
+ int tmp, i;
+
+ lprintf("\n\nYou have found %s ", objectname[itm]);
+ tmp = iarg[playerx][playery];
+ switch (itm) {
+ case ODIAMOND:
+ case ORUBY:
+ case OEMERALD:
+ case OSAPPHIRE:
+ case OSPIRITSCARAB:
+ case OORBOFDRAGON:
+ case OCUBEofUNDEAD:
+ case ONOTHEFT:
+ break;
+
+ default:
+ if (tmp > 0)
+ lprintf("+ %d", (long) tmp);
+ else if (tmp < 0)
+ lprintf(" %d", (long) tmp);
+ }
+ lprcat("\nDo you want to (t) take it");
+ iopts();
+ i = 0;
+ while (i != 't' && i != 'i' && i != '\33')
+ i = lgetchar();
+ if (i == 't') {
+ lprcat("take");
+ if (take(itm, tmp) == 0)
+ forget();
+ return;
}
+ ignore();
+}
+
-
-/*
- *******
- OSTAIRS
- *******
- subroutine to process the stair cases
- if dir > 0 the up else down
+/*
+ * *******
+ * OSTAIRS
+ * *******
+ *
+ * subroutine to process the stair cases
+ * if dir > 0 the up else down
*/
+void
ostairs(dir)
- int dir;
- {
- register int k;
+ int dir;
+{
+ int k;
+
lprcat("\nDo you (s) stay here ");
- if (dir > 0) lprcat("(u) go up "); else lprcat("(d) go down ");
+ if (dir > 0)
+ lprcat("(u) go up ");
+ else
+ lprcat("(d) go down ");
lprcat("or (f) kick stairs? ");
- while (1) switch(getchar())
- {
+ while (1)
+ switch (lgetchar()) {
case '\33':
- case 's': case 'i': lprcat("stay here"); return;
-
- case 'f': lprcat("kick stairs");
- if (rnd(2) == 1)
- lprcat("\nI hope you feel better. Showing anger rids you of frustration.");
- else
- {
- k=rnd((level+1)<<1);
- lprintf("\nYou hurt your foot dumb dumb! You suffer %d hit points",(long)k);
- lastnum=276; losehp(k); bottomline();
- }
- return;
-
- case 'u': lprcat("go up");
- if (dir < 0) lprcat("\nThe stairs don't go up!");
- else
- if (level>=2 && level!=11)
- {
- k = level; newcavelevel(level-1);
- draws(0,MAXX,0,MAXY); bot_linex();
- }
- else lprcat("\nThe stairs lead to a dead end!");
- return;
-
- case 'd': lprcat("go down");
- if (dir > 0) lprcat("\nThe stairs don't go down!");
- else
- if (level!=0 && level!=10 && level!=13)
- {
- k = level; newcavelevel(level+1);
- draws(0,MAXX,0,MAXY); bot_linex();
- }
- else lprcat("\nThe stairs lead to a dead end!");
- return;
+ case 's':
+ case 'i':
+ lprcat("stay here");
+ return;
+
+ case 'f':
+ lprcat("kick stairs");
+ if (rnd(2) == 1)
+ lprcat("\nI hope you feel better. Showing anger rids you of frustration.");
+ else {
+ k = rnd((level + 1) << 1);
+ lprintf("\nYou hurt your foot dumb dumb! You suffer %d hit points", (long) k);
+ lastnum = 276;
+ losehp(k);
+ bottomline();
+ }
+ return;
+
+ case 'u':
+ lprcat("go up");
+ if (dir < 0)
+ lprcat("\nThe stairs don't go up!");
+ else if (level >= 2 && level != 11) {
+ k = level;
+ newcavelevel(level - 1);
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ } else
+ lprcat("\nThe stairs lead to a dead end!");
+ return;
+
+ case 'd':
+ lprcat("go down");
+ if (dir > 0)
+ lprcat("\nThe stairs don't go down!");
+ else if (level != 0 && level != 10 && level != 13) {
+ k = level;
+ newcavelevel(level + 1);
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+ } else
+ lprcat("\nThe stairs lead to a dead end!");
+ return;
};
- }
+}
-
-/*
- *********
- OTELEPORTER
- *********
- subroutine to handle a teleport trap +/- 1 level maximum
+
+/*
+ * *********
+ * OTELEPORTER
+ * *********
+ *
+ * subroutine to handle a teleport trap +/- 1 level maximum
*/
+void
oteleport(err)
- int err;
- {
- register int tmp;
- if (err) if (rnd(151)<3) died(264); /* stuck in a rock */
- c[TELEFLAG]=1; /* show ?? on bottomline if been teleported */
- if (level==0) tmp=0;
- else if (level < MAXLEVEL)
- { tmp=rnd(5)+level-3; if (tmp>=MAXLEVEL) tmp=MAXLEVEL-1;
- if (tmp<1) tmp=1; }
- else
- { tmp=rnd(3)+level-2; if (tmp>=MAXLEVEL+MAXVLEVEL) tmp=MAXLEVEL+MAXVLEVEL-1;
- if (tmp<MAXLEVEL) tmp=MAXLEVEL; }
- playerx = rnd(MAXX-2); playery = rnd(MAXY-2);
- if (level != tmp) newcavelevel(tmp); positionplayer();
- draws(0,MAXX,0,MAXY); bot_linex();
+ int err;
+{
+ int tmp;
+
+ if (err)
+ if (rnd(151) < 3)
+ died(264); /* stuck in a rock */
+ c[TELEFLAG] = 1; /* show ?? on bottomline if been teleported */
+ if (level == 0)
+ tmp = 0;
+ else if (level < MAXLEVEL) {
+ tmp = rnd(5) + level - 3;
+ if (tmp >= MAXLEVEL)
+ tmp = MAXLEVEL - 1;
+ if (tmp < 1)
+ tmp = 1;
+ } else {
+ tmp = rnd(3) + level - 2;
+ if (tmp >= MAXLEVEL + MAXVLEVEL)
+ tmp = MAXLEVEL + MAXVLEVEL - 1;
+ if (tmp < MAXLEVEL)
+ tmp = MAXLEVEL;
}
-
-/*
- *******
- OPOTION
- *******
+ playerx = rnd(MAXX - 2);
+ playery = rnd(MAXY - 2);
+ if (level != tmp)
+ newcavelevel(tmp);
+ positionplayer();
+ draws(0, MAXX, 0, MAXY);
+ bot_linex();
+}
+
- function to process a potion
+/*
+ * *******
+ * OPOTION
+ * *******
+ *
+ * function to process a potion
*/
+void
opotion(pot)
- int pot;
- {
- lprcat("\nDo you (d) drink it, (t) take it"); iopts();
- while (1) switch(getchar())
- {
+ int pot;
+{
+ lprcat("\nDo you (d) drink it, (t) take it");
+ iopts();
+ while (1)
+ switch (lgetchar()) {
case '\33':
- case 'i': ignore(); return;
-
- case 'd': lprcat("drink\n"); forget(); /* destroy potion */
- quaffpotion(pot); return;
-
- case 't': lprcat("take\n"); if (take(OPOTION,pot)==0) forget();
- return;
+ case 'i':
+ ignore();
+ return;
+
+ case 'd':
+ lprcat("drink\n");
+ forget(); /* destroy potion */
+ quaffpotion(pot);
+ return;
+
+ case 't':
+ lprcat("take\n");
+ if (take(OPOTION, pot) == 0)
+ forget();
+ return;
};
- }
-
+}
+
/*
- function to drink a potion
+ * function to drink a potion
*/
+void
quaffpotion(pot)
- int pot;
- {
- register int i,j,k;
- if (pot<0 || pot>=MAXPOTION) return; /* check for within bounds */
- potionname[pot] = potionhide[pot];
- switch(pot)
- {
- case 9: lprcat("\nYou feel greedy . . ."); nap(2000);
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)
- if ((item[j][i]==OGOLDPILE) || (item[j][i]==OMAXGOLD))
- {
- know[j][i]=1; show1cell(j,i);
- }
- showplayer(); return;
-
- case 19: lprcat("\nYou feel greedy . . ."); nap(2000);
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)
- {
- k=item[j][i];
- if ((k==ODIAMOND) || (k==ORUBY) || (k==OEMERALD) || (k==OMAXGOLD)
- || (k==OSAPPHIRE) || (k==OLARNEYE) || (k==OGOLDPILE))
- {
- know[j][i]=1; show1cell(j,i);
- }
- }
- showplayer(); return;
-
- case 20: c[HP] = c[HPMAX]; break; /* instant healing */
-
- case 1: lprcat("\nYou feel better");
- if (c[HP] == c[HPMAX]) raisemhp(1);
- else if ((c[HP] += rnd(20)+20+c[LEVEL]) > c[HPMAX]) c[HP]=c[HPMAX]; break;
-
- case 2: lprcat("\nSuddenly, you feel much more skillful!");
- raiselevel(); raisemhp(1); return;
-
- case 3: lprcat("\nYou feel strange for a moment");
- c[rund(6)]++; break;
-
- case 4: lprcat("\nYou feel more self confident!");
- c[WISDOM] += rnd(2); break;
-
- case 5: lprcat("\nWow! You feel great!");
- if (c[STRENGTH]<12) c[STRENGTH]=12; else c[STRENGTH]++; break;
-
- case 6: lprcat("\nYour charm went up by one!"); c[CHARISMA]++; break;
-
- case 8: lprcat("\nYour intelligence went up by one!");
- c[INTELLIGENCE]++; break;
-
- case 10: for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)
- if (mitem[j][i])
- {
- know[j][i]=1; show1cell(j,i);
- }
- /* monster detection */ return;
-
- case 12: lprcat("\nThis potion has no taste to it"); return;
-
- case 15: lprcat("\nWOW!!! You feel Super-fantastic!!!");
- if (c[HERO]==0) for (i=0; i<6; i++) c[i] += 11;
- c[HERO] += 250; break;
-
- case 16: lprcat("\nYou have a greater intestinal constitude!");
- c[CONSTITUTION]++; break;
-
- case 17: lprcat("\nYou now have incredibly bulging muscles!!!");
- if (c[GIANTSTR]==0) c[STREXTRA] += 21;
- c[GIANTSTR] += 700; break;
-
- case 18: lprcat("\nYou feel a chill run up your spine!");
- c[FIRERESISTANCE] += 1000; break;
-
- case 0: lprcat("\nYou fall asleep. . .");
- i=rnd(11)-(c[CONSTITUTION]>>2)+2; while(--i>0) { parse2(); nap(1000); }
- cursors(); lprcat("\nYou woke up!"); return;
-
- case 7: lprcat("\nYou become dizzy!");
- if (--c[STRENGTH] < 3) c[STRENGTH]=3; break;
-
- case 11: lprcat("\nYou stagger for a moment . .");
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)
- know[j][i]=0;
- nap(2000); draws(0,MAXX,0,MAXY); /* potion of forgetfulness */ return;
-
- case 13: lprcat("\nYou can't see anything!"); /* blindness */
- c[BLINDCOUNT]+=500; return;
-
- case 14: lprcat("\nYou feel confused"); c[CONFUSE]+= 20+rnd(9); return;
+ int pot;
+{
+ int i, j, k;
- case 21: lprcat("\nYou don't seem to be affected"); return; /* cure dianthroritis */
+ if (pot < 0 || pot >= MAXPOTION)
+ return; /* check for within bounds */
+ potionname[pot] = potionhide[pot];
+ switch (pot) {
+ case 9:
+ lprcat("\nYou feel greedy . . .");
+ nap(2000);
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++)
+ if ((item[j][i] == OGOLDPILE) || (item[j][i] == OMAXGOLD)) {
+ know[j][i] = 1;
+ show1cell(j, i);
+ }
+ showplayer();
+ return;
+
+ case 19:
+ lprcat("\nYou feel greedy . . .");
+ nap(2000);
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++) {
+ k = item[j][i];
+ if ((k == ODIAMOND) || (k == ORUBY) || (k == OEMERALD) || (k == OMAXGOLD)
+ || (k == OSAPPHIRE) || (k == OLARNEYE) || (k == OGOLDPILE)) {
+ know[j][i] = 1;
+ show1cell(j, i);
+ }
+ }
+ showplayer();
+ return;
+
+ case 20:
+ c[HP] = c[HPMAX];
+ break; /* instant healing */
+
+ case 1:
+ lprcat("\nYou feel better");
+ if (c[HP] == c[HPMAX])
+ raisemhp(1);
+ else if ((c[HP] += rnd(20) + 20 + c[LEVEL]) > c[HPMAX])
+ c[HP] = c[HPMAX];
+ break;
+
+ case 2:
+ lprcat("\nSuddenly, you feel much more skillful!");
+ raiselevel();
+ raisemhp(1);
+ return;
+
+ case 3:
+ lprcat("\nYou feel strange for a moment");
+ c[rund(6)]++;
+ break;
+
+ case 4:
+ lprcat("\nYou feel more self confident!");
+ c[WISDOM] += rnd(2);
+ break;
+
+ case 5:
+ lprcat("\nWow! You feel great!");
+ if (c[STRENGTH] < 12)
+ c[STRENGTH] = 12;
+ else
+ c[STRENGTH]++;
+ break;
+
+ case 6:
+ lprcat("\nYour charm went up by one!");
+ c[CHARISMA]++;
+ break;
+
+ case 8:
+ lprcat("\nYour intelligence went up by one!");
+ c[INTELLIGENCE]++;
+ break;
+
+ case 10:
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++)
+ if (mitem[j][i]) {
+ know[j][i] = 1;
+ show1cell(j, i);
+ }
+ /* monster detection */ return;
+
+ case 12:
+ lprcat("\nThis potion has no taste to it");
+ return;
+
+ case 15:
+ lprcat("\nWOW!!! You feel Super-fantastic!!!");
+ if (c[HERO] == 0)
+ for (i = 0; i < 6; i++)
+ c[i] += 11;
+ c[HERO] += 250;
+ break;
+
+ case 16:
+ lprcat("\nYou have a greater intestinal constitude!");
+ c[CONSTITUTION]++;
+ break;
+
+ case 17:
+ lprcat("\nYou now have incredibly bulging muscles!!!");
+ if (c[GIANTSTR] == 0)
+ c[STREXTRA] += 21;
+ c[GIANTSTR] += 700;
+ break;
+
+ case 18:
+ lprcat("\nYou feel a chill run up your spine!");
+ c[FIRERESISTANCE] += 1000;
+ break;
+
+ case 0:
+ lprcat("\nYou fall asleep. . .");
+ i = rnd(11) - (c[CONSTITUTION] >> 2) + 2;
+ while (--i > 0) {
+ parse2();
+ nap(1000);
+ }
+ cursors();
+ lprcat("\nYou woke up!");
+ return;
+
+ case 7:
+ lprcat("\nYou become dizzy!");
+ if (--c[STRENGTH] < 3)
+ c[STRENGTH] = 3;
+ break;
+
+ case 11:
+ lprcat("\nYou stagger for a moment . .");
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++)
+ know[j][i] = 0;
+ nap(2000);
+ draws(0, MAXX, 0, MAXY); /* potion of forgetfulness */
+ return;
+
+ case 13:
+ lprcat("\nYou can't see anything!"); /* blindness */
+ c[BLINDCOUNT] += 500;
+ return;
+
+ case 14:
+ lprcat("\nYou feel confused");
+ c[CONFUSE] += 20 + rnd(9);
+ return;
+
+ case 21:
+ lprcat("\nYou don't seem to be affected");
+ return; /* cure dianthroritis */
+
+ case 22:
+ lprcat("\nYou feel a sickness engulf you"); /* poison */
+ c[HALFDAM] += 200 + rnd(200);
+ return;
+
+ case 23:
+ lprcat("\nYou feel your vision sharpen"); /* see invisible */
+ c[SEEINVISIBLE] += rnd(1000) + 400;
+ monstnamelist[INVISIBLESTALKER] = 'I';
+ return;
+ };
+ bottomline(); /* show new stats */
+ return;
+}
- case 22: lprcat("\nYou feel a sickness engulf you"); /* poison */
- c[HALFDAM] += 200 + rnd(200); return;
- case 23: lprcat("\nYou feel your vision sharpen"); /* see invisible */
- c[SEEINVISIBLE] += rnd(1000)+400;
- monstnamelist[INVISIBLESTALKER] = 'I'; return;
- };
- bottomline(); /* show new stats */ return;
- }
-
/*
- *******
- OSCROLL
- *******
-
- function to process a magic scroll
+ * *******
+ * OSCROLL
+ * *******
+ *
+ * function to process a magic scroll
*/
+void
oscroll(typ)
- int typ;
- {
+ int typ;
+{
lprcat("\nDo you ");
- if (c[BLINDCOUNT]==0) lprcat("(r) read it, "); lprcat("(t) take it"); iopts();
- while (1) switch(getchar())
- {
+ if (c[BLINDCOUNT] == 0)
+ lprcat("(r) read it, ");
+ lprcat("(t) take it");
+ iopts();
+ while (1)
+ switch (lgetchar()) {
case '\33':
- case 'i': ignore(); return;
-
- case 'r': if (c[BLINDCOUNT]) break;
- lprcat("read"); forget();
- if (typ==2 || typ==15) { show1cell(playerx,playery); cursors(); }
- /* destroy it */ read_scroll(typ); return;
+ case 'i':
+ ignore();
+ return;
- case 't': lprcat("take"); if (take(OSCROLL,typ)==0) forget(); /* destroy it */
- return;
+ case 'r':
+ if (c[BLINDCOUNT])
+ break;
+ lprcat("read");
+ forget();
+ if (typ == 2 || typ == 15) {
+ show1cell(playerx, playery);
+ cursors();
+ }
+ /* destroy it */ read_scroll(typ);
+ return;
+
+ case 't':
+ lprcat("take");
+ if (take(OSCROLL, typ) == 0)
+ forget(); /* destroy it */
+ return;
};
- }
+}
/*
- data for the function to read a scroll
+ * data for the function to read a scroll
*/
-static int xh,yh,yl,xl;
-static char curse[] = { BLINDCOUNT, CONFUSE, AGGRAVATE, HASTEMONST, ITCHING,
- LAUGHING, DRAINSTRENGTH, CLUMSINESS, INFEEBLEMENT, HALFDAM };
-static char exten[] = { PROTECTIONTIME, DEXCOUNT, STRCOUNT, CHARMCOUNT,
- INVISIBILITY, CANCELLATION, HASTESELF, GLOBE, SCAREMONST, HOLDMONST, TIMESTOP };
-char time_change[] = { HASTESELF,HERO,ALTPRO,PROTECTIONTIME,DEXCOUNT,
- STRCOUNT,GIANTSTR,CHARMCOUNT,INVISIBILITY,CANCELLATION,
- HASTESELF,AGGRAVATE,SCAREMONST,STEALTH,AWARENESS,HOLDMONST,HASTEMONST,
- FIRERESISTANCE,GLOBE,SPIRITPRO,UNDEADPRO,HALFDAM,SEEINVISIBLE,
- ITCHING,CLUMSINESS, WTW };
+static int xh, yh, yl, xl;
+static u_char curse[] = {
+ BLINDCOUNT, CONFUSE, AGGRAVATE, HASTEMONST, ITCHING,
+ LAUGHING, DRAINSTRENGTH, CLUMSINESS, INFEEBLEMENT, HALFDAM
+};
+
+static u_char exten[] = {
+ PROTECTIONTIME, DEXCOUNT, STRCNT, CHARMCOUNT, INVISIBILITY,
+ CANCELLATION, HASTESELF, GLOBE, SCAREMONST, HOLDMONST, TIMESTOP
+};
+
+u_char time_change[] = {
+ HASTESELF, HERO, ALTPRO, PROTECTIONTIME, DEXCOUNT, STRCNT,
+ GIANTSTR, CHARMCOUNT, INVISIBILITY, CANCELLATION, HASTESELF,
+ AGGRAVATE, SCAREMONST, STEALTH, AWARENESS, HOLDMONST,
+ HASTEMONST, FIRERESISTANCE, GLOBE, SPIRITPRO, UNDEADPRO,
+ HALFDAM, SEEINVISIBLE, ITCHING, CLUMSINESS, WTW
+};
+
/*
* function to adjust time when time warping and taking courses in school
*/
-adjtime(tim)
- register long tim;
- {
- register int j;
- for (j=0; j<26; j++) /* adjust time related parameters */
+void
+adjusttime(tim)
+ long tim;
+{
+ int j;
+
+ for (j = 0; j < 26; j++)/* adjust time related parameters */
if (c[time_change[j]])
- if ((c[time_change[j]] -= tim) < 1) c[time_change[j]]=1;
+ if ((c[time_change[j]] -= tim) < 1)
+ c[time_change[j]] = 1;
regen();
- }
+}
/*
- function to read a scroll
+ * function to read a scroll
*/
+void
read_scroll(typ)
- int typ;
- {
- register int i,j;
- if (typ<0 || typ>=MAXSCROLL) return; /* be sure we are within bounds */
- scrollname[typ] = scrollhide[typ];
- switch(typ)
- {
- case 0: lprcat("\nYour armor glows for a moment"); enchantarmor(); return;
-
- case 1: lprcat("\nYour weapon glows for a moment"); enchweapon(); return; /* enchant weapon */
-
- case 2: lprcat("\nYou have been granted enlightenment!");
- yh = min(playery+7,MAXY); xh = min(playerx+25,MAXX);
- yl = max(playery-7,0); xl = max(playerx-25,0);
- for (i=yl; i<yh; i++) for (j=xl; j<xh; j++) know[j][i]=1;
- nap(2000); draws(xl,xh,yl,yh); return;
-
- case 3: lprcat("\nThis scroll seems to be blank"); return;
-
- case 4: createmonster(makemonst(level+1)); return; /* this one creates a monster */
-
- case 5: something(level); /* create artifact */ return;
-
- case 6: c[AGGRAVATE]+=800; return; /* aggravate monsters */
-
- case 7: gltime += (i = rnd(1000) - 850); /* time warp */
- if (i>=0) lprintf("\nYou went forward in time by %d mobuls",(long)((i+99)/100));
- else lprintf("\nYou went backward in time by %d mobuls",(long)(-(i+99)/100));
- adjtime((long)i); /* adjust time for time warping */
- return;
-
- case 8: oteleport(0); return; /* teleportation */
-
- case 9: c[AWARENESS] += 1800; return; /* expanded awareness */
-
- case 10: c[HASTEMONST] += rnd(55)+12; return; /* haste monster */
-
- case 11: for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++)
- if (mitem[j][i])
- hitp[j][i] = monster[mitem[j][i]].hitpoints;
- return; /* monster healing */
- case 12: c[SPIRITPRO] += 300 + rnd(200); bottomline(); return; /* spirit protection */
-
- case 13: c[UNDEADPRO] += 300 + rnd(200); bottomline(); return; /* undead protection */
-
- case 14: c[STEALTH] += 250 + rnd(250); bottomline(); return; /* stealth */
-
- case 15: lprcat("\nYou have been granted enlightenment!"); /* magic mapping */
- for (i=0; i<MAXY; i++) for (j=0; j<MAXX; j++) know[j][i]=1;
- nap(2000); draws(0,MAXX,0,MAXY); return;
-
- case 16: c[HOLDMONST] += 30; bottomline(); return; /* hold monster */
-
- case 17: for (i=0; i<26; i++) /* gem perfection */
- switch(iven[i])
- {
- case ODIAMOND: case ORUBY:
- case OEMERALD: case OSAPPHIRE:
- j = ivenarg[i]; j &= 255; j <<= 1;
- if (j > 255) j=255; /* double value */
- ivenarg[i] = j; break;
- }
- break;
-
- case 18: for (i=0; i<11; i++) c[exten[i]] <<= 1; /* spell extension */
- break;
-
- case 19: for (i=0; i<26; i++) /* identify */
- {
- if (iven[i]==OPOTION) potionname[ivenarg[i]] = potionhide[ivenarg[i]];
- if (iven[i]==OSCROLL) scrollname[ivenarg[i]] = scrollhide[ivenarg[i]];
- }
- break;
+ int typ;
+{
+ int i, j;
- case 20: for (i=0; i<10; i++) /* remove curse */
- if (c[curse[i]]) c[curse[i]] = 1;
+ if (typ < 0 || typ >= MAXSCROLL)
+ return; /* be sure we are within bounds */
+ scrollname[typ] = scrollhide[typ];
+ switch (typ) {
+ case 0:
+ lprcat("\nYour armor glows for a moment");
+ enchantarmor();
+ return;
+
+ case 1:
+ lprcat("\nYour weapon glows for a moment");
+ enchweapon();
+ return; /* enchant weapon */
+
+ case 2:
+ lprcat("\nYou have been granted enlightenment!");
+ yh = min(playery + 7, MAXY);
+ xh = min(playerx + 25, MAXX);
+ yl = max(playery - 7, 0);
+ xl = max(playerx - 25, 0);
+ for (i = yl; i < yh; i++)
+ for (j = xl; j < xh; j++)
+ know[j][i] = 1;
+ nap(2000);
+ draws(xl, xh, yl, yh);
+ return;
+
+ case 3:
+ lprcat("\nThis scroll seems to be blank");
+ return;
+
+ case 4:
+ createmonster(makemonst(level + 1));
+ return; /* this one creates a monster */
+
+ case 5:
+ something(level); /* create artifact */
+ return;
+
+ case 6:
+ c[AGGRAVATE] += 800;
+ return; /* aggravate monsters */
+
+ case 7:
+ gltime += (i = rnd(1000) - 850); /* time warp */
+ if (i >= 0)
+ lprintf("\nYou went forward in time by %d mobuls", (long) ((i + 99) / 100));
+ else
+ lprintf("\nYou went backward in time by %d mobuls", (long) (-(i + 99) / 100));
+ adjusttime((long) i); /* adjust time for time warping */
+ return;
+
+ case 8:
+ oteleport(0);
+ return; /* teleportation */
+
+ case 9:
+ c[AWARENESS] += 1800;
+ return; /* expanded awareness */
+
+ case 10:
+ c[HASTEMONST] += rnd(55) + 12;
+ return; /* haste monster */
+
+ case 11:
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++)
+ if (mitem[j][i])
+ hitp[j][i] = monster[mitem[j][i]].hitpoints;
+ return; /* monster healing */
+ case 12:
+ c[SPIRITPRO] += 300 + rnd(200);
+ bottomline();
+ return; /* spirit protection */
+
+ case 13:
+ c[UNDEADPRO] += 300 + rnd(200);
+ bottomline();
+ return; /* undead protection */
+
+ case 14:
+ c[STEALTH] += 250 + rnd(250);
+ bottomline();
+ return; /* stealth */
+
+ case 15:
+ lprcat("\nYou have been granted enlightenment!"); /* magic mapping */
+ for (i = 0; i < MAXY; i++)
+ for (j = 0; j < MAXX; j++)
+ know[j][i] = 1;
+ nap(2000);
+ draws(0, MAXX, 0, MAXY);
+ return;
+
+ case 16:
+ c[HOLDMONST] += 30;
+ bottomline();
+ return; /* hold monster */
+
+ case 17:
+ for (i = 0; i < 26; i++) /* gem perfection */
+ switch (iven[i]) {
+ case ODIAMOND:
+ case ORUBY:
+ case OEMERALD:
+ case OSAPPHIRE:
+ j = ivenarg[i];
+ j &= 255;
+ j <<= 1;
+ if (j > 255)
+ j = 255; /* double value */
+ ivenarg[i] = j;
break;
+ }
+ break;
+
+ case 18:
+ for (i = 0; i < 11; i++)
+ c[exten[i]] <<= 1; /* spell extension */
+ break;
+
+ case 19:
+ for (i = 0; i < 26; i++) { /* identify */
+ if (iven[i] == OPOTION)
+ potionname[ivenarg[i]] = potionhide[ivenarg[i]];
+ if (iven[i] == OSCROLL)
+ scrollname[ivenarg[i]] = scrollhide[ivenarg[i]];
+ }
+ break;
+
+ case 20:
+ for (i = 0; i < 10; i++) /* remove curse */
+ if (c[curse[i]])
+ c[curse[i]] = 1;
+ break;
+
+ case 21:
+ annihilate();
+ break; /* scroll of annihilation */
+
+ case 22:
+ godirect(22, 150, "The ray hits the %s", 0, ' '); /* pulverization */
+ break;
+ case 23:
+ c[LIFEPROT]++;
+ break; /* life protection */
+ };
+}
- case 21: annihilate(); break; /* scroll of annihilation */
- case 22: godirect(22,150,"The ray hits the %s",0,' '); /* pulverization */
- break;
- case 23: c[LIFEPROT]++; break; /* life protection */
- };
- }
-
+void
oorb()
- {
- }
+{
+}
+void
opit()
- {
- register int i;
- if (rnd(101)<81)
- if (rnd(70) > 9*c[DEXTERITY]-packweight() || rnd(101)<5)
- if (level==MAXLEVEL-1) obottomless(); else
- if (level==MAXLEVEL+MAXVLEVEL-1) obottomless(); else
- {
- if (rnd(101)<20)
- {
- i=0; lprcat("\nYou fell into a pit! Your fall is cushioned by an unknown force\n");
- }
- else
- {
- i = rnd(level*3+3);
- lprintf("\nYou fell into a pit! You suffer %d hit points damage",(long)i);
- lastnum=261; /* if he dies scoreboard will say so */
+{
+ int i;
+
+ if (rnd(101) < 81) {
+ if (rnd(70) > 9 * c[DEXTERITY] - packweight() || rnd(101) < 5) {
+ if (level == MAXLEVEL - 1)
+ obottomless();
+ else if (level == MAXLEVEL + MAXVLEVEL - 1)
+ obottomless();
+ else {
+ if (rnd(101) < 20) {
+ i = 0;
+ lprcat("\nYou fell into a pit! Your fall is cushioned by an unknown force\n");
+ } else {
+ i = rnd(level * 3 + 3);
+ lprintf("\nYou fell into a pit! You suffer %d hit points damage", (long) i);
+ lastnum = 261; /* if he dies scoreboard
+ * will say so */
}
- losehp(i); nap(2000); newcavelevel(level+1); draws(0,MAXX,0,MAXY);
+ losehp(i);
+ nap(2000);
+ newcavelevel(level + 1);
+ draws(0, MAXX, 0, MAXY);
}
+ }
}
+}
+void
obottomless()
- {
- lprcat("\nYou fell into a bottomless pit!"); beep(); nap(3000); died(262);
- }
+{
+ lprcat("\nYou fell into a bottomless pit!");
+ lbeep();
+ nap(3000);
+ died(262);
+}
+
+void
oelevator(dir)
- int dir;
- {
+ int dir;
+{
#ifdef lint
- int x;
- x=dir;
- dir=x;
-#endif lint
- }
+ int x;
+ x = dir;
+ dir = x;
+#endif /* lint */
+}
+void
ostatue()
- {
- }
+{
+}
+void
omirror()
- {
- }
+{
+}
+void
obook()
- {
+{
lprcat("\nDo you ");
- if (c[BLINDCOUNT]==0) lprcat("(r) read it, "); lprcat("(t) take it"); iopts();
- while (1) switch(getchar())
- {
+ if (c[BLINDCOUNT] == 0)
+ lprcat("(r) read it, ");
+ lprcat("(t) take it");
+ iopts();
+ while (1)
+ switch (lgetchar()) {
case '\33':
- case 'i': ignore(); return;
+ case 'i':
+ ignore();
+ return;
- case 'r': if (c[BLINDCOUNT]) break;
- lprcat("read");
- /* no more book */ readbook(iarg[playerx][playery]); forget(); return;
-
- case 't': lprcat("take"); if (take(OBOOK,iarg[playerx][playery])==0) forget(); /* no more book */
- return;
+ case 'r':
+ if (c[BLINDCOUNT])
+ break;
+ lprcat("read");
+ /* no more book */ readbook(iarg[playerx][playery]);
+ forget();
+ return;
+
+ case 't':
+ lprcat("take");
+ if (take(OBOOK, iarg[playerx][playery]) == 0)
+ forget(); /* no more book */
+ return;
};
- }
+}
/*
- function to read a book
+ * function to read a book
*/
+void
readbook(lev)
- register int lev;
- {
- register int i,tmp;
- if (lev<=3) i = rund((tmp=splev[lev])?tmp:1); else
- i = rnd((tmp=splev[lev]-9)?tmp:1) + 9;
- spelknow[i]=1;
- lprintf("\nSpell \"%s\": %s\n%s",spelcode[i],spelname[i],speldescript[i]);
- if (rnd(10)==4)
- { lprcat("\nYour int went up by one!"); c[INTELLIGENCE]++; bottomline(); }
+ int lev;
+{
+ int i, tmp;
+
+ if (lev <= 3)
+ i = rund((tmp = splev[lev]) ? tmp : 1);
+ else
+ i = rnd((tmp = splev[lev] - 9) ? tmp : 1) + 9;
+ spelknow[i] = 1;
+ lprintf("\nSpell \"%s\": %s\n%s", spelcode[i], spelname[i], speldescript[i]);
+ if (rnd(10) == 4) {
+ lprcat("\nYour int went up by one!");
+ c[INTELLIGENCE]++;
+ bottomline();
}
+}
+void
ocookie()
- {
- char *p;
- lprcat("\nDo you (e) eat it, (t) take it"); iopts();
- while (1) switch(getchar())
- {
- case '\33':
- case 'i': ignore(); return;
-
- case 'e': lprcat("eat\nThe cookie tasted good.");
- forget(); /* no more cookie */
- if (c[BLINDCOUNT]) return;
- if (!(p=fortune())) return;
- lprcat(" A message inside the cookie reads:\n"); lprcat(p);
- return;
+{
+ char *p;
- case 't': lprcat("take"); if (take(OCOOKIE,0)==0) forget(); /* no more book */
- return;
+ lprcat("\nDo you (e) eat it, (t) take it");
+ iopts();
+ while (1)
+ switch (lgetchar()) {
+ case '\33':
+ case 'i':
+ ignore();
+ return;
+
+ case 'e':
+ lprcat("eat\nThe cookie tasted good.");
+ forget(); /* no more cookie */
+ if (c[BLINDCOUNT])
+ return;
+ if (!(p = fortune()))
+ return;
+ lprcat(" A message inside the cookie reads:\n");
+ lprcat(p);
+ return;
+
+ case 't':
+ lprcat("take");
+ if (take(OCOOKIE, 0) == 0)
+ forget(); /* no more book */
+ return;
};
- }
+}
-/* routine to pick up some gold -- if arg==OMAXGOLD then the pile is worth 100* the argument */
+/*
+ * routine to pick up some gold -- if arg==OMAXGOLD then the pile is worth
+ * 100* the argument
+ */
+void
ogold(arg)
- int arg;
- {
- register long i;
+ int arg;
+{
+ long i;
+
i = iarg[playerx][playery];
- if (arg==OMAXGOLD) i *= 100;
- else if (arg==OKGOLD) i *= 1000;
- else if (arg==ODGOLD) i *= 10;
- lprintf("\nIt is worth %d!",(long)i); c[GOLD] += i; bottomgold();
- item[playerx][playery] = know[playerx][playery] = 0; /* destroy gold */
- }
+ if (arg == OMAXGOLD)
+ i *= 100;
+ else if (arg == OKGOLD)
+ i *= 1000;
+ else if (arg == ODGOLD)
+ i *= 10;
+ lprintf("\nIt is worth %d!", (long) i);
+ c[GOLD] += i;
+ bottomgold();
+ item[playerx][playery] = know[playerx][playery] = 0; /* destroy gold */
+}
+void
ohome()
- {
- register int i;
- nosignal = 1; /* disable signals */
- for (i=0; i<26; i++) if (iven[i]==OPOTION) if (ivenarg[i]==21)
- {
- iven[i]=0; /* remove the potion of cure dianthroritis from inventory */
- clear(); lprcat("Congratulations. You found a potion of cure dianthroritis.\n");
- lprcat("\nFrankly, No one thought you could do it. Boy! Did you surprise them!\n");
- if (gltime>TIMELIMIT)
- {
- lprcat("\nThe doctor has the sad duty to inform you that your daughter died!\n");
- lprcat("You didn't make it in time. In your agony, you kill the doctor,\nyour wife, and yourself! Too bad!\n");
- nap(5000); died(269);
- }
- else
- {
- lprcat("\nThe doctor is now administering the potion, and in a few moments\n");
- lprcat("Your daughter should be well on her way to recovery.\n");
- nap(6000);
- lprcat("\nThe potion is"); nap(3000); lprcat(" working! The doctor thinks that\n");
- lprcat("your daughter will recover in a few days. Congratulations!\n");
- beep(); nap(5000); died(263);
+{
+ int i;
+
+ nosignal = 1; /* disable signals */
+ for (i = 0; i < 26; i++)
+ if (iven[i] == OPOTION)
+ if (ivenarg[i] == 21) {
+ iven[i] = 0; /* remove the potion of cure
+ * dianthroritis from
+ * inventory */
+ clear();
+ lprcat("Congratulations. You found a potion of cure dianthroritis.\n");
+ lprcat("\nFrankly, No one thought you could do it. Boy! Did you surprise them!\n");
+ if (gltime > TIMELIMIT) {
+ lprcat("\nThe doctor has the sad duty to inform you that your daughter died!\n");
+ lprcat("You didn't make it in time. In your agony, you kill the doctor,\nyour wife, and yourself! Too bad!\n");
+ nap(5000);
+ died(269);
+ } else {
+ lprcat("\nThe doctor is now administering the potion, and in a few moments\n");
+ lprcat("Your daughter should be well on her way to recovery.\n");
+ nap(6000);
+ lprcat("\nThe potion is");
+ nap(3000);
+ lprcat(" working! The doctor thinks that\n");
+ lprcat("your daughter will recover in a few days. Congratulations!\n");
+ lbeep();
+ nap(5000);
+ died(263);
+ }
}
- }
-
- while (1)
- {
- clear(); lprintf("Welcome home %s. Latest word from the doctor is not good.\n",logname);
+ while (1) {
+ clear();
+ lprintf("Welcome home %s. Latest word from the doctor is not good.\n", logname);
- if (gltime>TIMELIMIT)
- {
+ if (gltime > TIMELIMIT) {
lprcat("\nThe doctor has the sad duty to inform you that your daughter died!\n");
lprcat("You didn't make it in time. In your agony, you kill the doctor,\nyour wife, and yourself! Too bad!\n");
- nap(5000); died(269);
- }
-
+ nap(5000);
+ died(269);
+ }
lprcat("\nThe diagnosis is confirmed as dianthroritis. He guesses that\n");
- lprintf("your daughter has only %d mobuls left in this world. It's up to you,\n",(long)((TIMELIMIT-gltime+99)/100));
- lprintf("%s, to find the only hope for your daughter, the very rare\n",logname);
+ lprintf("your daughter has only %d mobuls left in this world. It's up to you,\n", (long) ((TIMELIMIT - gltime + 99) / 100));
+ lprintf("%s, to find the only hope for your daughter, the very rare\n", logname);
lprcat("potion of cure dianthroritis. It is rumored that only deep in the\n");
lprcat("depths of the caves can this potion be found.\n\n\n");
- lprcat("\n ----- press "); standout("return");
- lprcat(" to continue, "); standout("escape");
+ lprcat("\n ----- press ");
+ lstandout("return");
+ lprcat(" to continue, ");
+ lstandout("escape");
lprcat(" to leave ----- ");
- i=getchar(); while (i!='\33' && i!='\n') i=getchar();
- if (i=='\33') { drawscreen(); nosignal = 0; /* enable signals */ return; }
+ i = lgetchar();
+ while (i != '\33' && i != '\n')
+ i = lgetchar();
+ if (i == '\33') {
+ drawscreen();
+ nosignal = 0; /* enable signals */
+ return;
}
}
+}
-/* routine to save program space */
+/* routine to save program space */
+void
iopts()
- { lprcat(", or (i) ignore it? "); }
-ignore()
- { lprcat("ignore\n"); }
+{
+ lprcat(", or (i) ignore it? ");
+}
+void
+ignore()
+{
+ lprcat("ignore\n");
+}