Annotation of 43BSDReno/games/hack/hack.search.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
                      2: /* hack.search.c - version 1.0.3 */
                      3: 
                      4: #include "hack.h"
                      5: 
                      6: extern struct monst *makemon();
                      7: 
                      8: findit()       /* returns number of things found */
                      9: {
                     10:        int num;
                     11:        register xchar zx,zy;
                     12:        register struct trap *ttmp;
                     13:        register struct monst *mtmp;
                     14:        xchar lx,hx,ly,hy;
                     15: 
                     16:        if(u.uswallow) return(0);
                     17:        for(lx = u.ux; (num = levl[lx-1][u.uy].typ) && num != CORR; lx--) ;
                     18:        for(hx = u.ux; (num = levl[hx+1][u.uy].typ) && num != CORR; hx++) ;
                     19:        for(ly = u.uy; (num = levl[u.ux][ly-1].typ) && num != CORR; ly--) ;
                     20:        for(hy = u.uy; (num = levl[u.ux][hy+1].typ) && num != CORR; hy++) ;
                     21:        num = 0;
                     22:        for(zy = ly; zy <= hy; zy++)
                     23:                for(zx = lx; zx <= hx; zx++) {
                     24:                        if(levl[zx][zy].typ == SDOOR) {
                     25:                                levl[zx][zy].typ = DOOR;
                     26:                                atl(zx, zy, '+');
                     27:                                num++;
                     28:                        } else if(levl[zx][zy].typ == SCORR) {
                     29:                                levl[zx][zy].typ = CORR;
                     30:                                atl(zx, zy, CORR_SYM);
                     31:                                num++;
                     32:                        } else if(ttmp = t_at(zx, zy)) {
                     33:                                if(ttmp->ttyp == PIERC){
                     34:                                        (void) makemon(PM_PIERCER, zx, zy);
                     35:                                        num++;
                     36:                                        deltrap(ttmp);
                     37:                                } else if(!ttmp->tseen) {
                     38:                                        ttmp->tseen = 1;
                     39:                                        if(!vism_at(zx, zy))
                     40:                                                atl(zx,zy,'^');
                     41:                                        num++;
                     42:                                }
                     43:                        } else if(mtmp = m_at(zx,zy)) if(mtmp->mimic){
                     44:                                seemimic(mtmp);
                     45:                                num++;
                     46:                        }
                     47:                }
                     48:        return(num);
                     49: }
                     50: 
                     51: dosearch()
                     52: {
                     53:        register xchar x,y;
                     54:        register struct trap *trap;
                     55:        register struct monst *mtmp;
                     56: 
                     57:        if(u.uswallow)
                     58:                pline("What are you looking for? The exit?");
                     59:        else
                     60:        for(x = u.ux-1; x < u.ux+2; x++)
                     61:        for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) {
                     62:                if(levl[x][y].typ == SDOOR) {
                     63:                        if(rn2(7)) continue;
                     64:                        levl[x][y].typ = DOOR;
                     65:                        levl[x][y].seen = 0;    /* force prl */
                     66:                        prl(x,y);
                     67:                        nomul(0);
                     68:                } else if(levl[x][y].typ == SCORR) {
                     69:                        if(rn2(7)) continue;
                     70:                        levl[x][y].typ = CORR;
                     71:                        levl[x][y].seen = 0;    /* force prl */
                     72:                        prl(x,y);
                     73:                        nomul(0);
                     74:                } else {
                     75:                /* Be careful not to find anything in an SCORR or SDOOR */
                     76:                        if(mtmp = m_at(x,y)) if(mtmp->mimic){
                     77:                                seemimic(mtmp);
                     78:                                pline("You find a mimic.");
                     79:                                return(1);
                     80:                        }
                     81:                        for(trap = ftrap; trap; trap = trap->ntrap)
                     82:                        if(trap->tx == x && trap->ty == y &&
                     83:                           !trap->tseen && !rn2(8)) {
                     84:                                nomul(0);
                     85:                                pline("You find a%s.", traps[trap->ttyp]);
                     86:                                if(trap->ttyp == PIERC) {
                     87:                                        deltrap(trap);
                     88:                                        (void) makemon(PM_PIERCER,x,y);
                     89:                                        return(1);
                     90:                                }
                     91:                                trap->tseen = 1;
                     92:                                if(!vism_at(x,y)) atl(x,y,'^');
                     93:                        }
                     94:                }
                     95:        }
                     96:        return(1);
                     97: }
                     98: 
                     99: doidtrap() {
                    100: register struct trap *trap;
                    101: register int x,y;
                    102:        if(!getdir(1)) return(0);
                    103:        x = u.ux + u.dx;
                    104:        y = u.uy + u.dy;
                    105:        for(trap = ftrap; trap; trap = trap->ntrap)
                    106:                if(trap->tx == x && trap->ty == y && trap->tseen) {
                    107:                    if(u.dz)
                    108:                        if((u.dz < 0) != (!xdnstair && trap->ttyp == TRAPDOOR))
                    109:                            continue;
                    110:                    pline("That is a%s.", traps[trap->ttyp]);
                    111:                    return(0);
                    112:                }
                    113:        pline("I can't see a trap there.");
                    114:        return(0);
                    115: }
                    116: 
                    117: wakeup(mtmp)
                    118: register struct monst *mtmp;
                    119: {
                    120:        mtmp->msleep = 0;
                    121:        setmangry(mtmp);
                    122:        if(mtmp->mimic) seemimic(mtmp);
                    123: }
                    124: 
                    125: /* NOTE: we must check if(mtmp->mimic) before calling this routine */
                    126: seemimic(mtmp)
                    127: register struct monst *mtmp;
                    128: {
                    129:                mtmp->mimic = 0;
                    130:                mtmp->mappearance = 0;
                    131:                unpmon(mtmp);
                    132:                pmon(mtmp);
                    133: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.