ON4ZQE4HSC2FJXEQZ5FAASYDAD46SD6FMHBCGL2KKDF34DFMVFHAC RGO2JV5HFKZFXO7KJWDXGDMNBR6NIAOMJW34NHRTLLVN2N7XGW7QC YGPAMROCZY2O2N4PJONW6NMFUNOFHAGT5ZA4APCXKFXQUHLEIN2AC ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC ICVDXXH2Z5MV7BLYVWQNLQSV63THIB4E6NVORIDBB7D6TBEHBXOAC 2EBEWIV4YHXXAFR4GG2GMZJ2K77NK762HNQ77CZLHI3LDVGX7RJAC 5IB2YSN5CPEWGGKAWRH52576TKVRJKMNAJT2QP6NGNRZRV5B2MDQC PGGTIZ45TMBWXSPYBPHTR4QW7B66WC2MQ7S4LEFMFSOFCEFLMT5AC for (int x = 0; x <= LOS_MAX_RANGE; ++x)for (int y = 0; y <= LOS_MAX_RANGE; ++y){full_los_blockrays[x][y] = new bit_array(num_cellrays);los_blockrays[x][y] = new bit_array(num_nondupe_rays);}
for (quadrant_iterator qi; qi; qi++){full_los_blockrays(*qi) = new bit_array(num_cellrays);los_blockrays(*qi) = new bit_array(num_nondupe_rays);}
for (int x = 0; x <= LOS_MAX_RANGE; ++x)for (int y = 0; y <= LOS_MAX_RANGE; ++y)for (int i = 0; i < num_nondupe_rays; ++i)los_blockrays[x][y]->set(i,full_los_blockrays[x][y]->get(nondupe_cellrays[i]));
for (quadrant_iterator qi; qi; qi++)for (int i = 0; i < num_nondupe_rays; ++i)los_blockrays(*qi)->set(i, full_los_blockrays(*qi)->get(nondupe_cellrays[i]));
coord_def p = coord_def(sx*x, sy*y);if (!dat.los_bounds(p))continue;// if this cell is opaque...switch (dat.opacity(p)){case OPC_OPAQUE:// then block the appropriate rays*dead_rays |= *los_blockrays[x][y];break;case OPC_HALF:// block rays which have already seen a cloud*dead_rays |= (*smoke_rays & *los_blockrays[x][y]);*smoke_rays |= *los_blockrays[x][y];break;default:break;}
case OPC_OPAQUE:// then block the appropriate rays*dead_rays |= *los_blockrays(*qi);break;case OPC_HALF:// block rays which have already seen a cloud*dead_rays |= (*smoke_rays & *los_blockrays(*qi));*smoke_rays |= *los_blockrays(*qi);break;default:break;