static void wallify_vault(struct monst *grd) { int x, y, typ; int vlt = EGD(grd)->vroom; char tmp_viz; signed char lox = rooms[vlt].lx - 1, hix = rooms[vlt].hx + 1, loy = rooms[vlt].ly - 1, hiy = rooms[vlt].hy + 1; struct monst *mon; struct obj *gold; struct trap *trap; bool fixed = false; bool movedgold = false; for (x = lox; x <= hix; x++) { for (y = loy; y <= hiy; y++) { /* if not on the room boundary, skip ahead */ if (x != lox && x != hix && y != loy && y != hiy) continue; if (!IS_WALL(levl[x][y].typ) && !in_fcorridor(grd, x, y)) { if ((mon = m_at(x, y)) != 0 && mon != grd) { if (mon->mtame) yelp(mon); (void)rloc(mon, false); } if ((gold = g_at(x, y)) != 0) { move_gold(gold, EGD(grd)->vroom); movedgold = true; } if ((trap = t_at(x, y)) != 0) deltrap(trap); if (x == lox) typ = (y == loy) ? TLCORNER : (y == hiy) ? BLCORNER : VWALL; else if (x == hix) typ = (y == loy) ? TRCORNER : (y == hiy) ? BRCORNER : VWALL; else /* not left or right side, must be top or bottom */ typ = HWALL; levl[x][y].typ = typ; levl[x][y].flags = 0; /* * hack: player knows walls are restored because of the * message, below, so show this on the screen. */ tmp_viz = viz_array[y][x]; viz_array[y][x] = IN_SIGHT | COULD_SEE; newsym(x, y); viz_array[y][x] = tmp_viz; block_point(x, y); fixed = true; } } } if (movedgold || fixed) { if (in_fcorridor(grd, grd->mx, grd->my) || cansee(grd->mx, grd->my)) { char name[BUFSZ]; g_monnam(name, BUFSZ, grd); pline_The("%s whispers an incantation.", name); } else { You_hear("a distant chant."); } if (movedgold) pline("A mysterious force moves the gold into the vault."); if (fixed) pline_The("damaged vault's walls are magically restored!"); } }
static void wallify_vault(struct monst *grd) { int x, y, typ; int vlt = EGD(grd)->vroom; char tmp_viz; xchar lox = level->rooms[vlt].lx - 1, hix = level->rooms[vlt].hx + 1, loy = level->rooms[vlt].ly - 1, hiy = level->rooms[vlt].hy + 1; struct monst *mon; struct obj *gold; struct trap *trap; boolean fixed = FALSE; boolean movedgold = FALSE; for (x = lox; x <= hix; x++) for (y = loy; y <= hiy; y++) { /* if not on the room boundary, skip ahead */ if (x != lox && x != hix && y != loy && y != hiy) continue; if (!IS_WALL(level->locations[x][y].typ) && !in_fcorridor(grd, x, y)) { if ((mon = m_at(level, x, y)) != 0 && mon != grd) { if (mon->mtame) yelp(mon); rloc(mon, FALSE); } if ((gold = gold_at(level, x, y)) != 0) { move_gold(gold, EGD(grd)->vroom); movedgold = TRUE; } if ((trap = t_at(level, x, y)) != 0) deltrap(level, trap); if (x == lox) typ = (y == loy) ? TLCORNER : (y == hiy) ? BLCORNER : VWALL; else if (x == hix) typ = (y == loy) ? TRCORNER : (y == hiy) ? BRCORNER : VWALL; else /* not left or right side, must be top or bottom */ typ = HWALL; level->locations[x][y].typ = typ; level->locations[x][y].doormask = 0; /* * hack: player knows walls are restored because of the * message, below, so show this on the screen. */ tmp_viz = viz_array[y][x]; viz_array[y][x] = IN_SIGHT | COULD_SEE; newsym(x, y); viz_array[y][x] = tmp_viz; block_point(x, y); fixed = TRUE; } } if (movedgold || fixed) { if (mon_visible(grd)) pline("%s whispers an incantation.", Monnam(grd)); else You_hear("a %s chant.", in_fcorridor(grd, grd->mx, grd->my) ? "nearby" : "distant"); if (movedgold) pline("A mysterious force moves the gold into the vault."); if (fixed) pline("The damaged vault's walls are magically restored!"); } }