summaryrefslogtreecommitdiffstats
path: root/hack/hack.search.c
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /hack/hack.search.c
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'hack/hack.search.c')
-rw-r--r--hack/hack.search.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/hack/hack.search.c b/hack/hack.search.c
new file mode 100644
index 00000000..c0ef9932
--- /dev/null
+++ b/hack/hack.search.c
@@ -0,0 +1,133 @@
+/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/* hack.search.c - version 1.0.3 */
+
+#include "hack.h"
+
+extern struct monst *makemon();
+
+findit() /* returns number of things found */
+{
+ int num;
+ register xchar zx,zy;
+ register struct trap *ttmp;
+ register struct monst *mtmp;
+ xchar lx,hx,ly,hy;
+
+ if(u.uswallow) return(0);
+ for(lx = u.ux; (num = levl[lx-1][u.uy].typ) && num != CORR; lx--) ;
+ for(hx = u.ux; (num = levl[hx+1][u.uy].typ) && num != CORR; hx++) ;
+ for(ly = u.uy; (num = levl[u.ux][ly-1].typ) && num != CORR; ly--) ;
+ for(hy = u.uy; (num = levl[u.ux][hy+1].typ) && num != CORR; hy++) ;
+ num = 0;
+ for(zy = ly; zy <= hy; zy++)
+ for(zx = lx; zx <= hx; zx++) {
+ if(levl[zx][zy].typ == SDOOR) {
+ levl[zx][zy].typ = DOOR;
+ atl(zx, zy, '+');
+ num++;
+ } else if(levl[zx][zy].typ == SCORR) {
+ levl[zx][zy].typ = CORR;
+ atl(zx, zy, CORR_SYM);
+ num++;
+ } else if(ttmp = t_at(zx, zy)) {
+ if(ttmp->ttyp == PIERC){
+ (void) makemon(PM_PIERCER, zx, zy);
+ num++;
+ deltrap(ttmp);
+ } else if(!ttmp->tseen) {
+ ttmp->tseen = 1;
+ if(!vism_at(zx, zy))
+ atl(zx,zy,'^');
+ num++;
+ }
+ } else if(mtmp = m_at(zx,zy)) if(mtmp->mimic){
+ seemimic(mtmp);
+ num++;
+ }
+ }
+ return(num);
+}
+
+dosearch()
+{
+ register xchar x,y;
+ register struct trap *trap;
+ register struct monst *mtmp;
+
+ if(u.uswallow)
+ pline("What are you looking for? The exit?");
+ else
+ for(x = u.ux-1; x < u.ux+2; x++)
+ for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) {
+ if(levl[x][y].typ == SDOOR) {
+ if(rn2(7)) continue;
+ levl[x][y].typ = DOOR;
+ levl[x][y].seen = 0; /* force prl */
+ prl(x,y);
+ nomul(0);
+ } else if(levl[x][y].typ == SCORR) {
+ if(rn2(7)) continue;
+ levl[x][y].typ = CORR;
+ levl[x][y].seen = 0; /* force prl */
+ prl(x,y);
+ nomul(0);
+ } else {
+ /* Be careful not to find anything in an SCORR or SDOOR */
+ if(mtmp = m_at(x,y)) if(mtmp->mimic){
+ seemimic(mtmp);
+ pline("You find a mimic.");
+ return(1);
+ }
+ for(trap = ftrap; trap; trap = trap->ntrap)
+ if(trap->tx == x && trap->ty == y &&
+ !trap->tseen && !rn2(8)) {
+ nomul(0);
+ pline("You find a%s.", traps[trap->ttyp]);
+ if(trap->ttyp == PIERC) {
+ deltrap(trap);
+ (void) makemon(PM_PIERCER,x,y);
+ return(1);
+ }
+ trap->tseen = 1;
+ if(!vism_at(x,y)) atl(x,y,'^');
+ }
+ }
+ }
+ return(1);
+}
+
+doidtrap() {
+register struct trap *trap;
+register int x,y;
+ if(!getdir(1)) return(0);
+ x = u.ux + u.dx;
+ y = u.uy + u.dy;
+ for(trap = ftrap; trap; trap = trap->ntrap)
+ if(trap->tx == x && trap->ty == y && trap->tseen) {
+ if(u.dz)
+ if((u.dz < 0) != (!xdnstair && trap->ttyp == TRAPDOOR))
+ continue;
+ pline("That is a%s.", traps[trap->ttyp]);
+ return(0);
+ }
+ pline("I can't see a trap there.");
+ return(0);
+}
+
+wakeup(mtmp)
+register struct monst *mtmp;
+{
+ mtmp->msleep = 0;
+ setmangry(mtmp);
+ if(mtmp->mimic) seemimic(mtmp);
+}
+
+/* NOTE: we must check if(mtmp->mimic) before calling this routine */
+seemimic(mtmp)
+register struct monst *mtmp;
+{
+ mtmp->mimic = 0;
+ mtmp->mappearance = 0;
+ unpmon(mtmp);
+ pmon(mtmp);
+}