int dosearch(void) { xchar x, y; struct trap *trap; 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)) != NULL) { 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; }
// ok, the SDOOR/SCORR part works. however, none of the rest is tested // (traps, mimics, swallowed, etc) void do_search() // was dosearch { Int8 x,y; trap_t *trap; monst_t *mtmp; UChar floor_type, tmp_type; if (you.uswallow) { message("What are you looking for? The exit?"); return; } for (x = you.ux - 1 ; x <= you.ux + 1 ; x++) for (y = you.uy - 1 ; y <= you.uy + 1 ; y++) { if (x == you.ux && y == you.uy) continue; floor_type = get_cell_type(floor_info[x][y]); if (floor_type == SDOOR || floor_type == SCORR) { if (rund(7)) continue; tmp_type = (floor_type == SDOOR) ? DOOR : CORR; set_cell_type(floor_info[x][y], tmp_type); floor_info[x][y] &= ~SEEN_CELL; /* force prl */ prl(x,y); nomul(0); } else { /* Be careful not to find anything in an SCORR or SDOOR */ mtmp = mon_at(x,y); if (mtmp && (mtmp->bitflags & M_IS_MIMIC)) { see_mimic(mtmp); message("You find a mimic."); return; } for (trap = ftrap ; trap ; trap = trap->ntrap) if (trap->tx == x && trap->ty == y && !(get_trap_seen(trap->trap_info)) && !rund(8)) { nomul(0); tmp_type = get_trap_type(trap->trap_info); StrPrintF(ScratchBuffer, "You find a%s.", traps[tmp_type]); message(ScratchBuffer); if (tmp_type == PIERC) { deltrap(trap); makemon(PM_PIERCER, x, y); return; } trap->trap_info |= SEEN_TRAP; if (!vism_at(x,y)) print(x, y, '^'); } } } }
Short findit() /* returns number of things found */ { Short num; UChar zx,zy; trap_t *ttmp; monst_t *mtmp; UChar lx,hx,ly,hy; if (you.uswallow) return false; for (lx = you.ux; (num = get_cell_type(floor_info[lx-1][you.uy])) && num != CORR; lx--) ; for (hx = you.ux; (num = get_cell_type(floor_info[hx+1][you.uy])) && num != CORR; hx++) ; for (ly = you.uy; (num = get_cell_type(floor_info[you.ux][ly-1])) && num != CORR; ly--) ; for (hy = you.uy; (num = get_cell_type(floor_info[you.ux][hy+1])) && num != CORR; hy++) ; num = 0; for (zy = ly; zy <= hy; zy++) { for (zx = lx; zx <= hx; zx++) { if (get_cell_type(floor_info[zx][zy]) == SDOOR) { set_cell_type(floor_info[zx][zy], DOOR); print(zx, zy, DOOR_SYM); num++; } else if (get_cell_type(floor_info[zx][zy]) == SCORR) { set_cell_type(floor_info[zx][zy], CORR); print(zx, zy, CORR_SYM); num++; } else if ((ttmp = trap_at(zx, zy))) { if (get_trap_type(ttmp->trap_info) == PIERC) { makemon(PM_PIERCER, zx, zy); num++; deltrap(ttmp); } else if (!get_trap_seen(ttmp->trap_info)) { ttmp->trap_info |= SEEN_TRAP; if (!vism_at(zx, zy)) print(zx,zy,'^'); num++; } } else if ((mtmp = mon_at(zx,zy)) && (mtmp->bitflags & M_IS_MIMIC)) { see_mimic(mtmp); num++; } } } return num; }
int findit(void) { // returns number of things found int num; xchar zx, zy; struct trap *ttmp; 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)) != NULL) { 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)) != NULL) if (mtmp->mimic) { seemimic(mtmp); num++; } } return num; }