void spreadroomlight(int x, int y, int roomno) { if (inbounds(x,y) && !loc_statusp(x,y,LIT) && Level->site[x][y].roomnumber == roomno) { lightspot(x,y); spreadroomlight(x+1,y,roomno); spreadroomlight(x,y+1,roomno); spreadroomlight(x-1,y,roomno); spreadroomlight(x,y-1,roomno); } }
/* see whether room should be illuminated */ void roomcheck(void) { static int oldroomno = -1; #if defined(WIN32) static int oldlevel = -1; #else static plv oldlevel = NULL; #endif int roomno = Level->site[Player.x][Player.y].roomnumber; if ((roomno == RS_CAVERN) || (roomno == RS_SEWER_DUCT) || (roomno == RS_KITCHEN) || (roomno == RS_BATHROOM) || (roomno == RS_BEDROOM) || (roomno == RS_DININGROOM) || (roomno == RS_CLOSET) || (roomno > ROOMBASE)) if ((! loc_statusp(Player.x,Player.y,LIT)) && (! Player.status[BLINDED]) && (Player.status[ILLUMINATION] || (difficulty() < 6))) { showroom(Level->site[Player.x][Player.y].roomnumber); spreadroomlight(Player.x,Player.y,roomno); levelrefresh(); } if ((oldroomno != roomno) || #if defined(WIN32) (oldlevel != Level->depth)) { #else (oldlevel != Level)) { #endif showroom(roomno); oldroomno = roomno; #if defined(WIN32) oldlevel = Level->depth; #else oldlevel = Level; #endif } }