summaryrefslogtreecommitdiffstats
path: root/larn/global.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/global.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/global.c')
-rw-r--r--larn/global.c1096
1 files changed, 709 insertions, 387 deletions
diff --git a/larn/global.c b/larn/global.c
index 80736170..90e41823 100644
--- a/larn/global.c
+++ b/larn/global.c
@@ -1,37 +1,44 @@
-#ifndef lint
-static char rcsid[] = "$NetBSD: global.c,v 1.5 1997/03/29 20:42:19 thorpej Exp $";
-#endif /* not lint */
+/* $NetBSD: global.c,v 1.6 1997/10/18 20:03:20 christos Exp $ */
-/* global.c Larn is copyrighted 1986 by Noah Morgan.
- *
- * raiselevel() subroutine to raise the player one level
- * loselevel() subroutine to lower the player by one level
- * raiseexperience(x) subroutine to increase experience points
- * loseexperience(x) subroutine to lose experience points
- * losehp(x) subroutine to remove hit points from the player
- * losemhp(x) subroutine to remove max # hit points from the player
- * raisehp(x) subroutine to gain hit points
- * raisemhp(x) subroutine to gain maximum hit points
- * losespells(x) subroutine to lose spells
- * losemspells(x) subroutine to lose maximum spells
- * raisespells(x) subroutine to gain spells
- * raisemspells(x) subroutine to gain maximum spells
- * recalc() function to recalculate the armor class of the player
- * makemonst(lev) function to return monster number for a randomly selected monster
- * positionplayer() function to be sure player is not in a wall
- * quit() subroutine to ask if the player really wants to quit
+/*
+ * global.c Larn is copyrighted 1986 by Noah Morgan.
+ *
+ * raiselevel() subroutine to raise the player one level
+ * loselevel() subroutine to lower the player by one level
+ * raiseexperience(x) subroutine to increase experience points
+ * loseexperience(x) subroutine to lose experience points
+ * losehp(x) subroutine to remove hit points from the player
+ * losemhp(x) subroutine to remove max # hit points from the player
+ * raisehp(x) subroutine to gain hit points
+ * raisemhp(x) subroutine to gain maximum hit points
+ * losespells(x) subroutine to lose spells
+ * losemspells(x) subroutine to lose maximum spells
+ * raisespells(x) subroutine to gain spells
+ * raisemspells(x) subroutine to gain maximum spells
+ * recalc() function to recalculate the armor class of the player
+ * makemonst(lev) function to return monster number for a randomly
+ * selected monster
+ * positionplayer() function to be sure player is not in a wall
+ * quit() subroutine to ask if the player really wants to quit
*/
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: global.c,v 1.6 1997/10/18 20:03:20 christos Exp $");
+#endif /* not lint */
-#include "header.h"
#include <string.h>
-extern int score[],srcount,dropflag;
-extern int random;/* the random number seed */
-extern short playerx,playery,lastnum,level;
-extern char cheat,monstnamelist[];
-extern char lastmonst[],*what[],*who[];
-extern char winner[];
-extern char logname[],monstlevel[];
-extern char sciv[SCORESIZE+1][26][2],*potionname[],*scrollname[];
+#include <unistd.h>
+#include "header.h"
+#include "extern.h"
+extern int score[], srcount, dropflag;
+extern int random; /* the random number seed */
+extern short playerx, playery, lastnum, level;
+extern u_char cheat;
+extern char monstnamelist[], logname[];
+extern char lastmonst[], *what[], *who[];
+extern char winner[];
+extern u_char monstlevel[];
+extern char sciv[SCORESIZE + 1][26][2], *potionname[], *scrollname[];
/*
***********
RAISE LEVEL
@@ -42,10 +49,12 @@ extern char sciv[SCORESIZE+1][26][2],*potionname[],*scrollname[];
uses the skill[] array to find level boundarys
uses c[EXPERIENCE] c[LEVEL]
*/
+void
raiselevel()
- {
- if (c[LEVEL] < MAXPLEVEL) raiseexperience((long)(skill[c[LEVEL]]-c[EXPERIENCE]));
- }
+{
+ if (c[LEVEL] < MAXPLEVEL)
+ raiseexperience((long) (skill[c[LEVEL]] - c[EXPERIENCE]));
+}
/*
***********
@@ -55,10 +64,12 @@ raiselevel()
subroutine to lower the players character level by one
*/
+void
loselevel()
- {
- if (c[LEVEL] > 1) loseexperience((long)(c[EXPERIENCE] - skill[c[LEVEL]-1] + 1));
- }
+{
+ if (c[LEVEL] > 1)
+ loseexperience((long) (c[EXPERIENCE] - skill[c[LEVEL] - 1] + 1));
+}
/*
****************
@@ -68,25 +79,28 @@ loselevel()
subroutine to increase experience points
*/
+void
raiseexperience(x)
- register long x;
- {
- register int i,tmp;
- i=c[LEVEL]; c[EXPERIENCE]+=x;
- while (c[EXPERIENCE] >= skill[c[LEVEL]] && (c[LEVEL] < MAXPLEVEL))
- {
- tmp = (c[CONSTITUTION]-c[HARDGAME])>>1;
- c[LEVEL]++; raisemhp((int)(rnd(3)+rnd((tmp>0)?tmp:1)));
- raisemspells((int)rund(3));
- if (c[LEVEL] < 7-c[HARDGAME]) raisemhp((int)(c[CONSTITUTION]>>2));
- }
- if (c[LEVEL] != i)
- {
+ long x;
+{
+ int i, tmp;
+ i = c[LEVEL];
+ c[EXPERIENCE] += x;
+ while (c[EXPERIENCE] >= skill[c[LEVEL]] && (c[LEVEL] < MAXPLEVEL)) {
+ tmp = (c[CONSTITUTION] - c[HARDGAME]) >> 1;
+ c[LEVEL]++;
+ raisemhp((int) (rnd(3) + rnd((tmp > 0) ? tmp : 1)));
+ raisemspells((int) rund(3));
+ if (c[LEVEL] < 7 - c[HARDGAME])
+ raisemhp((int) (c[CONSTITUTION] >> 2));
+ }
+ if (c[LEVEL] != i) {
cursors();
- beep(); lprintf("\nWelcome to level %d",(long)c[LEVEL]); /* if we changed levels */
- }
- bottomline();
+ beep();
+ lprintf("\nWelcome to level %d", (long) c[LEVEL]); /* if we changed levels */
}
+ bottomline();
+}
/*
****************
@@ -96,27 +110,31 @@ raiseexperience(x)
subroutine to lose experience points
*/
+void
loseexperience(x)
- register long x;
- {
- register int i,tmp;
- i=c[LEVEL]; c[EXPERIENCE]-=x;
- if (c[EXPERIENCE] < 0) c[EXPERIENCE]=0;
- while (c[EXPERIENCE] < skill[c[LEVEL]-1])
- {
- if (--c[LEVEL] <= 1) c[LEVEL]=1; /* down one level */
- tmp = (c[CONSTITUTION]-c[HARDGAME])>>1; /* lose hpoints */
- losemhp((int)rnd((tmp>0)?tmp:1)); /* lose hpoints */
- if (c[LEVEL] < 7-c[HARDGAME]) losemhp((int)(c[CONSTITUTION]>>2));
- losemspells((int)rund(3)); /* lose spells */
- }
- if (i!=c[LEVEL])
- {
+ long x;
+{
+ int i, tmp;
+ i = c[LEVEL];
+ c[EXPERIENCE] -= x;
+ if (c[EXPERIENCE] < 0)
+ c[EXPERIENCE] = 0;
+ while (c[EXPERIENCE] < skill[c[LEVEL] - 1]) {
+ if (--c[LEVEL] <= 1)
+ c[LEVEL] = 1; /* down one level */
+ tmp = (c[CONSTITUTION] - c[HARDGAME]) >> 1; /* lose hpoints */
+ losemhp((int) rnd((tmp > 0) ? tmp : 1)); /* lose hpoints */
+ if (c[LEVEL] < 7 - c[HARDGAME])
+ losemhp((int) (c[CONSTITUTION] >> 2));
+ losemspells((int) rund(3)); /* lose spells */
+ }
+ if (i != c[LEVEL]) {
cursors();
- beep(); lprintf("\nYou went down to level %d!",(long)c[LEVEL]);
- }
- bottomline();
+ beep();
+ lprintf("\nYou went down to level %d!", (long) c[LEVEL]);
}
+ bottomline();
+}
/*
********
@@ -128,21 +146,29 @@ loseexperience(x)
subroutine to remove hit points from the player
warning -- will kill player if hp goes to zero
*/
+void
losehp(x)
- register int x;
- {
- if ((c[HP] -= x) <= 0)
- {
- beep(); lprcat("\n"); nap(3000); died(lastnum);
- }
+ int x;
+{
+ if ((c[HP] -= x) <= 0) {
+ beep();
+ lprcat("\n");
+ nap(3000);
+ died(lastnum);
}
+}
+void
losemhp(x)
- register int x;
- {
- c[HP] -= x; if (c[HP] < 1) c[HP]=1;
- c[HPMAX] -= x; if (c[HPMAX] < 1) c[HPMAX]=1;
- }
+ int x;
+{
+ c[HP] -= x;
+ if (c[HP] < 1)
+ c[HP] = 1;
+ c[HPMAX] -= x;
+ if (c[HPMAX] < 1)
+ c[HPMAX] = 1;
+}
/*
********
@@ -153,17 +179,21 @@ losemhp(x)
subroutine to gain maximum hit points
*/
+void
raisehp(x)
- register int x;
- {
- if ((c[HP] += x) > c[HPMAX]) c[HP] = c[HPMAX];
- }
+ int x;
+{
+ if ((c[HP] += x) > c[HPMAX])
+ c[HP] = c[HPMAX];
+}
+void
raisemhp(x)
- register int x;
- {
- c[HPMAX] += x; c[HP] += x;
- }
+ int x;
+{
+ c[HPMAX] += x;
+ c[HP] += x;
+}
/*
************
@@ -174,17 +204,21 @@ raisemhp(x)
subroutine to gain maximum spells
*/
+void
raisespells(x)
- register int x;
- {
- if ((c[SPELLS] += x) > c[SPELLMAX]) c[SPELLS] = c[SPELLMAX];
- }
+ int x;
+{
+ if ((c[SPELLS] += x) > c[SPELLMAX])
+ c[SPELLS] = c[SPELLMAX];
+}
+void
raisemspells(x)
- register int x;
- {
- c[SPELLMAX]+=x; c[SPELLS]+=x;
- }
+ int x;
+{
+ c[SPELLMAX] += x;
+ c[SPELLS] += x;
+}
/*
************
@@ -195,121 +229,197 @@ raisemspells(x)
subroutine to lose maximum spells
*/
+void
losespells(x)
- register int x;
- {
- if ((c[SPELLS] -= x) < 0) c[SPELLS]=0;
- }
+ int x;
+{
+ if ((c[SPELLS] -= x) < 0)
+ c[SPELLS] = 0;
+}
+void
losemspells(x)
- register int x;
- {
- if ((c[SPELLMAX] -= x) < 0) c[SPELLMAX]=0;
- if ((c[SPELLS] -= x) < 0) c[SPELLS]=0;
- }
+ int x;
+{
+ if ((c[SPELLMAX] -= x) < 0)
+ c[SPELLMAX] = 0;
+ if ((c[SPELLS] -= x) < 0)
+ c[SPELLS] = 0;
+}
/*
makemonst(lev)
int lev;
function to return monster number for a randomly selected monster
- for the given cave level
+ for the given cave level
*/
+int
makemonst(lev)
- register int lev;
- {
- register int tmp,x;
- if (lev < 1) lev = 1; if (lev > 12) lev = 12;
- tmp=WATERLORD;
+ int lev;
+{
+ int tmp, x;
+ if (lev < 1)
+ lev = 1;
+ if (lev > 12)
+ lev = 12;
+ tmp = WATERLORD;
if (lev < 5)
- while (tmp==WATERLORD) tmp=rnd((x=monstlevel[lev-1])?x:1);
- else while (tmp==WATERLORD)
- tmp=rnd((x=monstlevel[lev-1]-monstlevel[lev-4])?x:1)+monstlevel[lev-4];
+ while (tmp == WATERLORD)
+ tmp = rnd((x = monstlevel[lev - 1]) ? x : 1);
+ else
+ while (tmp == WATERLORD)
+ tmp = rnd((x = monstlevel[lev - 1] - monstlevel[lev - 4]) ? x : 1) + monstlevel[lev - 4];
- while (monster[tmp].genocided && tmp<MAXMONST) tmp++; /* genocided? */
- return(tmp);
- }
+ while (monster[tmp].genocided && tmp < MAXMONST)
+ tmp++; /* genocided? */
+ return (tmp);
+}
/*
positionplayer()
function to be sure player is not in a wall
*/
+void
positionplayer()
- {
- int try;
+{
+ int try;
try = 2;
while ((item[playerx][playery] || mitem[playerx][playery]) && (try))
- if (++playerx >= MAXX-1)
- {
+ if (++playerx >= MAXX - 1) {
playerx = 1;
- if (++playery >= MAXY-1)
- { playery = 1; --try; }
+ if (++playery >= MAXY - 1) {
+ playery = 1;
+ --try;
}
- if (try==0) lprcat("Failure in positionplayer\n");
- }
+ }
+ if (try == 0)
+ lprcat("Failure in positionplayer\n");
+}
/*
recalc() function to recalculate the armor class of the player
*/
+void
recalc()
- {
- register int i,j,k;
+{
+ int i, j, k;
c[AC] = c[MOREDEFENSES];
- if (c[WEAR] >= 0)
- switch(iven[c[WEAR]])
- {
- case OSHIELD: c[AC] += 2 + ivenarg[c[WEAR]]; break;
- case OLEATHER: c[AC] += 2 + ivenarg[c[WEAR]]; break;
- case OSTUDLEATHER: c[AC] += 3 + ivenarg[c[WEAR]]; break;
- case ORING: c[AC] += 5 + ivenarg[c[WEAR]]; break;
- case OCHAIN: c[AC] += 6 + ivenarg[c[WEAR]]; break;
- case OSPLINT: c[AC] += 7 + ivenarg[c[WEAR]]; break;
- case OPLATE: c[AC] += 9 + ivenarg[c[WEAR]]; break;
- case OPLATEARMOR: c[AC] += 10 + ivenarg[c[WEAR]]; break;
- case OSSPLATE: c[AC] += 12 + ivenarg[c[WEAR]]; break;
- }
+ if (c[WEAR] >= 0)
+ switch (iven[c[WEAR]]) {
+ case OSHIELD:
+ c[AC] += 2 + ivenarg[c[WEAR]];
+ break;
+ case OLEATHER:
+ c[AC] += 2 + ivenarg[c[WEAR]];
+ break;
+ case OSTUDLEATHER:
+ c[AC] += 3 + ivenarg[c[WEAR]];
+ break;
+ case ORING:
+ c[AC] += 5 + ivenarg[c[WEAR]];
+ break;
+ case OCHAIN:
+ c[AC] += 6 + ivenarg[c[WEAR]];
+ break;
+ case OSPLINT:
+ c[AC] += 7 + ivenarg[c[WEAR]];
+ break;
+ case OPLATE:
+ c[AC] += 9 + ivenarg[c[WEAR]];
+ break;
+ case OPLATEARMOR:
+ c[AC] += 10 + ivenarg[c[WEAR]];
+ break;
+ case OSSPLATE:
+ c[AC] += 12 + ivenarg[c[WEAR]];
+ break;
+ }
- if (c[SHIELD] >= 0) if (iven[c[SHIELD]] == OSHIELD) c[AC] += 2 + ivenarg[c[SHIELD]];
- if (c[WIELD] < 0) c[WCLASS] = 0; else
- {
+ if (c[SHIELD] >= 0)
+ if (iven[c[SHIELD]] == OSHIELD)
+ c[AC] += 2 + ivenarg[c[SHIELD]];
+ if (c[WIELD] < 0)
+ c[WCLASS] = 0;
+ else {
i = ivenarg[c[WIELD]];
- switch(iven[c[WIELD]])
- {
- case ODAGGER: c[WCLASS] = 3 + i; break;
- case OBELT: c[WCLASS] = 7 + i; break;
- case OSHIELD: c[WCLASS] = 8 + i; break;
- case OSPEAR: c[WCLASS] = 10 + i; break;
- case OFLAIL: c[WCLASS] = 14 + i; break;
- case OBATTLEAXE: c[WCLASS] = 17 + i; break;
- case OLANCE: c[WCLASS] = 19 + i; break;
- case OLONGSWORD: c[WCLASS] = 22 + i; break;
- case O2SWORD: c[WCLASS] = 26 + i; break;
- case OSWORD: c[WCLASS] = 32 + i; break;
- case OSWORDofSLASHING: c[WCLASS] = 30 + i; break;
- case OHAMMER: c[WCLASS] = 35 + i; break;
- default: c[WCLASS] = 0;
- }
+ switch (iven[c[WIELD]]) {
+ case ODAGGER:
+ c[WCLASS] = 3 + i;
+ break;
+ case OBELT:
+ c[WCLASS] = 7 + i;
+ break;
+ case OSHIELD:
+ c[WCLASS] = 8 + i;
+ break;
+ case OSPEAR:
+ c[WCLASS] = 10 + i;
+ break;
+ case OFLAIL:
+ c[WCLASS] = 14 + i;
+ break;
+ case OBATTLEAXE:
+ c[WCLASS] = 17 + i;
+ break;
+ case OLANCE:
+ c[WCLASS] = 19 + i;
+ break;
+ case OLONGSWORD:
+ c[WCLASS] = 22 + i;
+ break;
+ case O2SWORD:
+ c[WCLASS] = 26 + i;
+ break;
+ case OSWORD:
+ c[WCLASS] = 32 + i;
+ break;
+ case OSWORDofSLASHING:
+ c[WCLASS] = 30 + i;
+ break;
+ case OHAMMER:
+ c[WCLASS] = 35 + i;
+ break;
+ default:
+ c[WCLASS] = 0;
}
+ }
c[WCLASS] += c[MOREDAM];
-/* now for regeneration abilities based on rings */
- c[REGEN]=1; c[ENERGY]=0;
- j=0; for (k=25; k>0; k--) if (iven[k]) {j=k; k=0; }
- for (i=0; i<=j; i++)
- {
- switch(iven[i])
- {
- case OPROTRING: c[AC] += ivenarg[i] + 1; break;
- case ODAMRING: c[WCLASS] += ivenarg[i] + 1; break;
- case OBELT: c[WCLASS] += ((ivenarg[i]<<1)) + 2; break;
-
- case OREGENRING: c[REGEN] += ivenarg[i] + 1; break;
- case ORINGOFEXTRA: c[REGEN] += 5 * (ivenarg[i]+1); break;
- case OENERGYRING: c[ENERGY] += ivenarg[i] + 1; break;
- }
+ /* now for regeneration abilities based on rings */
+ c[REGEN] = 1;
+ c[ENERGY] = 0;
+ j = 0;
+ for (k = 25; k > 0; k--)
+ if (iven[k]) {
+ j = k;
+ k = 0;
+ }
+ for (i = 0; i <= j; i++) {
+ switch (iven[i]) {
+ case OPROTRING:
+ c[AC] += ivenarg[i] + 1;
+ break;
+ case ODAMRING:
+ c[WCLASS] += ivenarg[i] + 1;
+ break;
+ case OBELT:
+ c[WCLASS] += ((ivenarg[i] << 1)) + 2;
+ break;
+
+ case OREGENRING:
+ c[REGEN] += ivenarg[i] + 1;
+ break;
+ case ORINGOFEXTRA:
+ c[REGEN] += 5 * (ivenarg[i] + 1);
+ break;
+ case OENERGYRING:
+ c[ENERGY] += ivenarg[i] + 1;
+ break;
}
}
+}
/*
@@ -317,310 +427,522 @@ recalc()
subroutine to ask if the player really wants to quit
*/
+void
quit()
- {
- register int i;
- cursors(); strcpy(lastmonst,"");
+{
+ int i;
+ cursors();
+ strcpy(lastmonst, "");
lprcat("\n\nDo you really want to quit?");
- while (1)
- {
- i=getchar();
- if (i == 'y') { died(300); return; }
- if ((i == 'n') || (i == '\33')) { lprcat(" no"); lflush(); return; }
- lprcat("\n"); setbold(); lprcat("Yes"); resetbold(); lprcat(" or ");
- setbold(); lprcat("No"); resetbold(); lprcat(" please? Do you want to quit? ");
- }
- }
+ while (1) {
+ i = getchar();
+ if (i == 'y') {
+ died(300);
+ return;
+ }
+ if ((i == 'n') || (i == '\33')) {
+ lprcat(" no");
+ lflush();
+ return;
+ }
+ lprcat("\n");
+ setbold();
+ lprcat("Yes");
+ resetbold();
+ lprcat(" or ");
+ setbold();
+ lprcat("No");
+ resetbold();
+ lprcat(" please? Do you want to quit? ");
+ }
+}
/*
function to ask --more-- then the user must enter a space
*/
+void
more()
- {
- lprcat("\n --- press "); standout("space"); lprcat(" to continue --- ");
+{
+ lprcat("\n --- press ");
+ standout("space");
+ lprcat(" to continue --- ");
while (getchar() != ' ');
- }
+}
/*
function to put something in the players inventory
returns 0 if success, 1 if a failure
*/
-take(itm,arg)
- int itm,arg;
- {
- register int i,limit;
-/* cursors(); */
- if ((limit = 15+(c[LEVEL]>>1)) > 26) limit=26;
- for (i=0; i<limit; i++)
- if (iven[i]==0)
- {
- iven[i] = itm; ivenarg[i] = arg; limit=0;
- switch(itm)
- {
- case OPROTRING: case ODAMRING: case OBELT: limit=1; break;
- case ODEXRING: c[DEXTERITY] += ivenarg[i]+1; limit=1; break;
- case OSTRRING: c[STREXTRA] += ivenarg[i]+1; limit=1; break;
- case OCLEVERRING: c[INTELLIGENCE] += ivenarg[i]+1; limit=1; break;
- case OHAMMER: c[DEXTERITY] += 10; c[STREXTRA]+=10;
- c[INTELLIGENCE]-=10; limit=1; break;
-
- case OORBOFDRAGON: c[SLAYING]++; break;
- case OSPIRITSCARAB: c[NEGATESPIRIT]++; break;
- case OCUBEofUNDEAD: c[CUBEofUNDEAD]++; break;
- case ONOTHEFT: c[NOTHEFT]++; break;
- case OSWORDofSLASHING: c[DEXTERITY] +=5; limit=1; break;
- };
- lprcat("\nYou pick up:"); srcount=0; show3(i);
- if (limit) bottomline(); return(0);
- }
- lprcat("\nYou can't carry anything else"); return(1);
- }
+int
+take(itm, arg)
+ int itm, arg;
+{
+ int i, limit;
+ /* cursors(); */
+ if ((limit = 15 + (c[LEVEL] >> 1)) > 26)
+ limit = 26;
+ for (i = 0; i < limit; i++)
+ if (iven[i] == 0) {
+ iven[i] = itm;
+ ivenarg[i] = arg;
+ limit = 0;
+ switch (itm) {
+ case OPROTRING:
+ case ODAMRING:
+ case OBELT:
+ limit = 1;
+ break;
+ case ODEXRING:
+ c[DEXTERITY] += ivenarg[i] + 1;
+ limit = 1;
+ break;
+ case OSTRRING:
+ c[STREXTRA] += ivenarg[i] + 1;
+ limit = 1;
+ break;
+ case OCLEVERRING:
+ c[INTELLIGENCE] += ivenarg[i] + 1;
+ limit = 1;
+ break;
+ case OHAMMER:
+ c[DEXTERITY] += 10;
+ c[STREXTRA] += 10;
+ c[INTELLIGENCE] -= 10;
+ limit = 1;
+ break;
+
+ case OORBOFDRAGON:
+ c[SLAYING]++;
+ break;
+ case OSPIRITSCARAB:
+ c[NEGATESPIRIT]++;
+ break;
+ case OCUBEofUNDEAD:
+ c[CUBEofUNDEAD]++;
+ break;
+ case ONOTHEFT:
+ c[NOTHEFT]++;
+ break;
+ case OSWORDofSLASHING:
+ c[DEXTERITY] += 5;
+ limit = 1;
+ break;
+ };
+ lprcat("\nYou pick up:");
+ srcount = 0;
+ show3(i);
+ if (limit)
+ bottomline();
+ return (0);
+ }
+ lprcat("\nYou can't carry anything else");
+ return (1);
+}
/*
- subroutine to drop an object returns 1 if something there already else 0
+ subroutine to drop an object
+ returns 1 if something there already else 0
*/
+int
drop_object(k)
- int k;
- {
- int itm;
- if ((k<0) || (k>25)) return(0);
- itm = iven[k]; cursors();
- if (itm==0) { lprintf("\nYou don't have item %c! ",k+'a'); return(1); }
- if (item[playerx][playery])
- { beep(); lprcat("\nThere's something here already"); return(1); }
- if (playery==MAXY-1 && playerx==33) return(1); /* not in entrance */
+ int k;
+{
+ int itm;
+ if ((k < 0) || (k > 25))
+ return (0);
+ itm = iven[k];
+ cursors();
+ if (itm == 0) {
+ lprintf("\nYou don't have item %c! ", k + 'a');
+ return (1);
+ }
+ if (item[playerx][playery]) {
+ beep();
+ lprcat("\nThere's something here already");
+ return (1);
+ }
+ if (playery == MAXY - 1 && playerx == 33)
+ return (1); /* not in entrance */
item[playerx][playery] = itm;
iarg[playerx][playery] = ivenarg[k];
- srcount=0; lprcat("\n You drop:"); show3(k); /* show what item you dropped*/
- know[playerx][playery] = 0; iven[k]=0;
- if (c[WIELD]==k) c[WIELD]= -1; if (c[WEAR]==k) c[WEAR] = -1;
- if (c[SHIELD]==k) c[SHIELD]= -1;
- adjustcvalues(itm,ivenarg[k]);
- dropflag=1; /* say dropped an item so wont ask to pick it up right away */
- return(0);
- }
+ srcount = 0;
+ lprcat("\n You drop:");
+ show3(k); /* show what item you dropped */
+ know[playerx][playery] = 0;
+ iven[k] = 0;
+ if (c[WIELD] == k)
+ c[WIELD] = -1;
+ if (c[WEAR] == k)
+ c[WEAR] = -1;
+ if (c[SHIELD] == k)
+ c[SHIELD] = -1;
+ adjustcvalues(itm, ivenarg[k]);
+ dropflag = 1; /* say dropped an item so wont ask to pick it
+ * up right away */
+ return (0);
+}
/*
function to enchant armor player is currently wearing
*/
+void
enchantarmor()
- {
- register int tmp;
- if (c[WEAR]<0) { if (c[SHIELD] < 0)
- { cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; }
- else { tmp=iven[c[SHIELD]]; if (tmp != OSCROLL) if (tmp != OPOTION) { ivenarg[c[SHIELD]]++; bottomline(); } } }
- tmp = iven[c[WEAR]];
- if (tmp!=OSCROLL) if (tmp!=OPOTION) { ivenarg[c[WEAR]]++; bottomline(); }
+{
+ int tmp;
+ if (c[WEAR] < 0) {
+ if (c[SHIELD] < 0) {
+ cursors();
+ beep();
+ lprcat("\nYou feel a sense of loss");
+ return;
+ } else {
+ tmp = iven[c[SHIELD]];
+ if (tmp != OSCROLL)
+ if (tmp != OPOTION) {
+ ivenarg[c[SHIELD]]++;
+ bottomline();
+ }
+ }
}
+ tmp = iven[c[WEAR]];
+ if (tmp != OSCROLL)
+ if (tmp != OPOTION) {
+ ivenarg[c[WEAR]]++;
+ bottomline();
+ }
+}
/*
function to enchant a weapon presently being wielded
*/
+void
enchweapon()
- {
- register int tmp;
- if (c[WIELD]<0)
- { cursors(); beep(); lprcat("\nYou feel a sense of loss"); return; }
- tmp = iven[c[WIELD]];
- if (tmp!=OSCROLL) if (tmp!=OPOTION)
- { ivenarg[c[WIELD]]++;
- if (tmp==OCLEVERRING) c[INTELLIGENCE]++; else
- if (tmp==OSTRRING) c[STREXTRA]++; else
- if (tmp==ODEXRING) c[DEXTERITY]++; bottomline(); }
+{
+ int tmp;
+ if (c[WIELD] < 0) {
+ cursors();
+ beep();
+ lprcat("\nYou feel a sense of loss");
+ return;
}
+ tmp = iven[c[WIELD]];
+ if (tmp != OSCROLL)
+ if (tmp != OPOTION) {
+ ivenarg[c[WIELD]]++;
+ if (tmp == OCLEVERRING)
+ c[INTELLIGENCE]++;
+ else if (tmp == OSTRRING)
+ c[STREXTRA]++;
+ else if (tmp == ODEXRING)
+ c[DEXTERITY]++;
+ bottomline();
+ }
+}
/*
routine to tell if player can carry one more thing
returns 1 if pockets are full, else 0
*/
+int
pocketfull()
- {
- register int i,limit;
- if ((limit = 15+(c[LEVEL]>>1)) > 26) limit=26;
- for (i=0; i<limit; i++) if (iven[i]==0) return(0);
- return(1);
- }
+{
+ int i, limit;
+ if ((limit = 15 + (c[LEVEL] >> 1)) > 26)
+ limit = 26;
+ for (i = 0; i < limit; i++)
+ if (iven[i] == 0)
+ return (0);
+ return (1);
+}
/*
function to return 1 if a monster is next to the player else returns 0
*/
+int
nearbymonst()
- {
- register int tmp,tmp2;
- for (tmp=playerx-1; tmp<playerx+2; tmp++)
- for (tmp2=playery-1; tmp2<playery+2; tmp2++)
- if (mitem[tmp][tmp2]) return(1); /* if monster nearby */
- return(0);
- }
+{
+ int tmp, tmp2;
+ for (tmp = playerx - 1; tmp < playerx + 2; tmp++)
+ for (tmp2 = playery - 1; tmp2 < playery + 2; tmp2++)
+ if (mitem[tmp][tmp2])
+ return (1); /* if monster nearby */
+ return (0);
+}
/*
function to steal an item from the players pockets
returns 1 if steals something else returns 0
*/
+int
stealsomething()
- {
- register int i,j;
- j=100;
- while (1)
- {
- i=rund(26);
- if (iven[i]) if (c[WEAR]!=i) if (c[WIELD]!=i) if (c[SHIELD]!=i)
- {
- srcount=0; show3(i);
- adjustcvalues(iven[i],ivenarg[i]); iven[i]=0; return(1);
- }
- if (--j <= 0) return(0);
- }
- }
+{
+ int i, j;
+ j = 100;
+ while (1) {
+ i = rund(26);
+ if (iven[i])
+ if (c[WEAR] != i)
+ if (c[WIELD] != i)
+ if (c[SHIELD] != i) {
+ srcount = 0;
+ show3(i);
+ adjustcvalues(iven[i], ivenarg[i]);
+ iven[i] = 0;
+ return (1);
+ }
+ if (--j <= 0)
+ return (0);
+ }
+}
/*
function to return 1 is player carrys nothing else return 0
*/
+int
emptyhanded()
- {
- register int i;
- for (i=0; i<26; i++)
- if (iven[i]) if (i!=c[WIELD]) if (i!=c[WEAR]) if (i!=c[SHIELD]) return(0);
- return(1);
- }
+{
+ int i;
+ for (i = 0; i < 26; i++)
+ if (iven[i])
+ if (i != c[WIELD])
+ if (i != c[WEAR])
+ if (i != c[SHIELD])
+ return (0);
+ return (1);
+}
/*
function to create a gem on a square near the player
*/
+void
creategem()
- {
- register int i,j;
- switch(rnd(4))
- {
- case 1: i=ODIAMOND; j=50; break;
- case 2: i=ORUBY; j=40; break;
- case 3: i=OEMERALD; j=30; break;
- default: i=OSAPPHIRE; j=20; break;
- };
- createitem(i,rnd(j)+j/10);
- }
+{
+ int i, j;
+ switch (rnd(4)) {
+ case 1:
+ i = ODIAMOND;
+ j = 50;
+ break;
+ case 2:
+ i = ORUBY;
+ j = 40;
+ break;
+ case 3:
+ i = OEMERALD;
+ j = 30;
+ break;
+ default:
+ i = OSAPPHIRE;
+ j = 20;
+ break;
+ };
+ createitem(i, rnd(j) + j / 10);
+}
/*
function to change character levels as needed when dropping an object
that affects these characteristics
*/
-adjustcvalues(itm,arg)
- int itm,arg;
- {
- register int flag;
- flag=0;
- switch(itm)
- {
- case ODEXRING: c[DEXTERITY] -= arg+1; flag=1; break;
- case OSTRRING: c[STREXTRA] -= arg+1; flag=1; break;
- case OCLEVERRING: c[INTELLIGENCE] -= arg+1; flag=1; break;
- case OHAMMER: c[DEXTERITY] -= 10; c[STREXTRA] -= 10;
- c[INTELLIGENCE] += 10; flag=1; break;
- case OSWORDofSLASHING: c[DEXTERITY] -= 5; flag=1; break;
- case OORBOFDRAGON: --c[SLAYING]; return;
- case OSPIRITSCARAB: --c[NEGATESPIRIT]; return;
- case OCUBEofUNDEAD: --c[CUBEofUNDEAD]; return;
- case ONOTHEFT: --c[NOTHEFT]; return;
- case OLANCE: c[LANCEDEATH]=0; return;
- case OPOTION: case OSCROLL: return;
-
- default: flag=1;
- };
- if (flag) bottomline();
- }
+void
+adjustcvalues(itm, arg)
+ int itm, arg;
+{
+ int flag;
+ flag = 0;
+ switch (itm) {
+ case ODEXRING:
+ c[DEXTERITY] -= arg + 1;
+ flag = 1;
+ break;
+ case OSTRRING:
+ c[STREXTRA] -= arg + 1;
+ flag = 1;
+ break;
+ case OCLEVERRING:
+ c[INTELLIGENCE] -= arg + 1;
+ flag = 1;
+ break;
+ case OHAMMER:
+ c[DEXTERITY] -= 10;
+ c[STREXTRA] -= 10;
+ c[INTELLIGENCE] += 10;
+ flag = 1;
+ break;
+ case OSWORDofSLASHING:
+ c[DEXTERITY] -= 5;
+ flag = 1;
+ break;
+ case OORBOFDRAGON:
+ --c[SLAYING];
+ return;
+ case OSPIRITSCARAB:
+ --c[NEGATESPIRIT];
+ return;
+ case OCUBEofUNDEAD:
+ --c[CUBEofUNDEAD];
+ return;
+ case ONOTHEFT:
+ --c[NOTHEFT];
+ return;
+ case OLANCE:
+ c[LANCEDEATH] = 0;
+ return;
+ case OPOTION:
+ case OSCROLL:
+ return;
+
+ default:
+ flag = 1;
+ };
+ if (flag)
+ bottomline();
+}
/*
function to read a string from token input "string"
returns a pointer to the string
*/
+void
gettokstr(str)
- register char *str;
- {
- register int i,j;
- i=50;
+ char *str;
+{
+ int i, j;
+ i = 50;
while ((getchar() != '"') && (--i > 0));
- i=36;
- while (--i > 0)
- {
- if ((j=getchar()) != '"') *str++ = j; else i=0;
- }
- *str = 0;
- i=50;
- if (j != '"') while ((getchar() != '"') && (--i > 0)); /* if end due to too long, then find closing quote */
+ i = 36;
+ while (--i > 0) {
+ if ((j = getchar()) != '"')
+ *str++ = j;
+ else
+ i = 0;
}
+ *str = 0;
+ i = 50;
+ if (j != '"')
+ /* if end due to too long, then find closing quote */
+ while ((getchar() != '"') && (--i > 0));
+}
/*
function to ask user for a password (no echo)
returns 1 if entered correctly, 0 if not
*/
-static char gpwbuf[33];
+static char gpwbuf[33];
+int
getpassword()
- {
- register int i,j;
- register char *gpwp;
- extern char *password;
- scbr(); /* system("stty -echo cbreak"); */
- gpwp = gpwbuf; lprcat("\nEnter Password: "); lflush();
+{
+ int i, j;
+ char *gpwp;
+ extern char *password;
+ scbr(); /* system("stty -echo cbreak"); */
+ gpwp = gpwbuf;
+ lprcat("\nEnter Password: ");
+ lflush();
i = strlen(password);
- for (j=0; j<i; j++) read(0,gpwp++,1); gpwbuf[i]=0;
- sncbr(); /* system("stty echo -cbreak"); */
- if (strcmp(gpwbuf,password) != 0)
- { lprcat("\nSorry\n"); lflush(); return(0); }
- else return(1);
- }
+ for (j = 0; j < i; j++)
+ read(0, gpwp++, 1);
+ gpwbuf[i] = 0;
+ sncbr(); /* system("stty echo -cbreak"); */
+ if (strcmp(gpwbuf, password) != 0) {
+ lprcat("\nSorry\n");
+ lflush();
+ return (0);
+ } else
+ return (1);
+}
/*
subroutine to get a yes or no response from the user
returns y or n
*/
+int
getyn()
- {
- register int i;
- i=0; while (i!='y' && i!='n' && i!='\33') i=getchar();
- return(i);
- }
+{
+ int i;
+ i = 0;
+ while (i != 'y' && i != 'n' && i != '\33')
+ i = getchar();
+ return (i);
+}
/*
function to calculate the pack weight of the player
returns the number of pounds the player is carrying
*/
+int
packweight()
- {
- register int i,j,k;
- k=c[GOLD]/1000; j=25; while ((iven[j]==0) && (j>0)) --j;
- for (i=0; i<=j; i++)
- switch(iven[i])
- {
- case 0: break;
- case OSSPLATE: case OPLATEARMOR: k += 40; break;
- case OPLATE: k += 35; break;
- case OHAMMER: k += 30; break;
- case OSPLINT: k += 26; break;
- case OSWORDofSLASHING: case OCHAIN:
- case OBATTLEAXE: case O2SWORD: k += 23; break;
- case OLONGSWORD: case OSWORD:
- case ORING: case OFLAIL: k += 20; break;
- case OLANCE: case OSTUDLEATHER: k += 15; break;
- case OLEATHER: case OSPEAR: k += 8; break;
- case OORBOFDRAGON: case OBELT: k += 4; break;
- case OSHIELD: k += 7; break;
- case OCHEST: k += 30 + ivenarg[i]; break;
- default: k++;
- };
- return(k);
- }
+{
+ int i, j, k;
+ k = c[GOLD] / 1000;
+ j = 25;
+ while ((iven[j] == 0) && (j > 0))
+ --j;
+ for (i = 0; i <= j; i++)
+ switch (iven[i]) {
+ case 0:
+ break;
+ case OSSPLATE:
+ case OPLATEARMOR:
+ k += 40;
+ break;
+ case OPLATE:
+ k += 35;
+ break;
+ case OHAMMER:
+ k += 30;
+ break;
+ case OSPLINT:
+ k += 26;
+ break;
+ case OSWORDofSLASHING:
+ case OCHAIN:
+ case OBATTLEAXE:
+ case O2SWORD:
+ k += 23;
+ break;
+ case OLONGSWORD:
+ case OSWORD:
+ case ORING:
+ case OFLAIL:
+ k += 20;
+ break;
+ case OLANCE:
+ case OSTUDLEATHER:
+ k += 15;
+ break;
+ case OLEATHER:
+ case OSPEAR:
+ k += 8;
+ break;
+ case OORBOFDRAGON:
+ case OBELT:
+ k += 4;
+ break;
+ case OSHIELD:
+ k += 7;
+ break;
+ case OCHEST:
+ k += 30 + ivenarg[i];
+ break;
+ default:
+ k++;
+ };
+ return (k);
+}
#ifndef MACRORND
- /* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */
+/* macros to generate random numbers 1<=rnd(N)<=N 0<=rund(N)<=N-1 */
+int
rnd(x)
- int x;
- {
- return((((randx=randx*1103515245+12345)>>7)%(x))+1);
- }
+ int x;
+{
+ return ((((randx = randx * 1103515245 + 12345) >> 7) % (x)) + 1);
+}
+int
rund(x)
- int x;
- {
- return((((randx=randx*1103515245+12345)>>7)%(x)) );
- }
-#endif MACRORND
+ int x;
+{
+ return ((((randx = randx * 1103515245 + 12345) >> 7) % (x)));
+}
+#endif /* MACRORND */