Still need to find out why off-level exclusions aren't updated after restore.
AUJG42P2TOWAVVU6HBT3D7USOSZCRPQS7FEUGV57HVNULEFDPTSQC XDACRDVLDEUFUBN4L7ES5WBD3YSLBHMRZ4Q5PXIUMOK44D3TLWSAC WUT3GMXCKAOUKQMOODQBZR7SWEVCSMX2UDNRM6DC37MD6VTBPRSQC 453NICOL4ZKH7YQAWQFKSZZRDJ53XECMTQC7VEMXWV2N4IEAL5VAC O5FEERJ3MQZMJUWU7D2ZE5UMM7GUMAGLNKXFTAWZYFO5QC3DXSMQC TAHSTXR7ROOMDFUSBUU4ZAIEWQLAS5CIRCTARLD4Q2BGNLSL7E5QC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC KCEQH65NZXFROENETT7U3XWM3VGONENEORO5G32SNEGR22D3FWJAC 75M6AVUSS3G5EJECJJRB67V5UYDOIV26FZNB2FFCMBZ33EK7FVIQC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC ZNMT5CZHP2FC4HTLNA7KYEDGFBXSCUE5QHJOALVPE6RDPHSEDXRQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC 45OFFQNRRS46LXSPQ3SPNP2OXMBECE22A6NWQPITDEOXLRKYSQKAC XP3TQISCLEST3ZNTF6OZ6FYMHIIPMVTNVBIIG47LA5PS7J234SQAC HIPFIMUOA7DFOFV3DQ55YZJVGNU2GNDYFUCB4MRPUR5DTYDO5YMAC GWGKGHFGBLVPDSSDWYFORHZHMWOR3SFC5PJNF732V7FEKWWJKPOAC RS2Q66UPKG2NLNBE6UMX273UEVNGTNLVEITB2PCRVHZWTS2WXTAQC T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC BSIG3VLGTR2XVKBNM3QGJA4WNRXCCAR5MJ7XB47SDHQCCVIAAVJAC LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC HBPUTW5HDHUEPB62DMJ6GGP2D2GLZB53O5VRTWDLQ4Z53NWB3MKQC AA5RRYINGLYJHZNRSQUHI6K4GIT4KZBFRFZ43EJJPOMJAMXWULMAC R25VQ2MUGGDTO5UZR2DPO5XUYSA3LB6RIEBGLJ6CD75T2GED2ZNAC PPUOTH5Z7TV4OLVIFYAXNAXXH2WUMJNFDOZK2QN6B6WJYTFBMNOAC JEWGBHOQGDSWMLT4FZTQWUKTBJJWY5CSRAQQUOWIZ7U4QBJ6ZLBQC los_param_excl(const coord_def& c) : los_param_trans(c) {}
int radius_sq;los_param_excl(const coord_def& c, int r): los_param_trans(c), radius_sq(r){}bool los_bounds(const coord_def& p) const{return (p.abs() <= radius_sq &&los_param_trans::los_bounds(p));}
if (!curr_excludes[i].uptodate&& (curr_excludes[i].pos - p).abs() <= LOS_RADIUS * LOS_RADIUS + 1){
curr_excludes[i].uptodate = curr_excludes[i].uptodate &&(curr_excludes[i].pos - p).abs() <= curr_excludes[i].radius_sq();}void _update_exclusion_los(){for (unsigned int i = 0; i < curr_excludes.size(); i++)if (!curr_excludes[i].uptodate)
void mark_all_excludes_non_updated()
/** Update exclusions' LOS to reflect changes within their range.* "changed" is a list of coordinates that have been changed.* Only exclusions that might have one of the changed points* in view are updated.*/void update_exclusion_los(std::vector<coord_def> changed)
static void _exclude_update(){if (can_travel_interlevel()){LevelInfo &li = travel_cache.get_level_info(level_id::current());li.update();}set_level_exclusion_annotation(get_exclusion_desc());}static void _exclude_update(const coord_def &p){#ifdef USE_TILE_tile_exclude_gmap_update(p);#endif_exclude_update();}
if (can_travel_interlevel()){LevelInfo &li = travel_cache.get_level_info(level_id::current());li.update();}
_exclude_update();
int &curr_radius = exc->radius;switch (curr_radius){case LOS_RADIUS: curr_radius = 1; break;case 1 : set_exclude(p, 0); break;}#ifdef USE_TILE_tile_exclude_gmap_update(p);#endifif (can_travel_interlevel())
if (exc->radius == LOS_RADIUS)set_exclude(p, 0);else
if (is_exclude_root(p))set_exclude(p, 0);elseset_exclude(p, LOS_RADIUS, autoexcl);#ifdef USE_TILE_tile_exclude_gmap_update(p);#endifset_level_exclusion_annotation(get_exclusion_desc());
for (unsigned int i = 0; i < curr_excludes.size(); ++i)if (curr_excludes[i].pos == p){curr_excludes.erase(curr_excludes.begin() + i);break;}_exclude_update(p);
for (int i = 0, count = curr_excludes.size(); i < count; ++i){if (curr_excludes[i].pos == p){if (!radius){curr_excludes.erase( curr_excludes.begin() + i );break ;}else{curr_excludes[i].radius = radius;return;}}}
exc->radius = radius;exc->set_exclude_show();
if (can_travel_interlevel()){LevelInfo &li = travel_cache.get_level_info(level_id::current());li.update();}
_exclude_update(p);
if (curr_excludes[i].pos == p){if (curr_excludes[i].autoexclude){const monsters *m = monster_at(p);if (!m || !you.can_see(m) || m->type != curr_excludes[i].mon){set_exclude(p, 0);set_level_exclusion_annotation(get_exclusion_desc());}}break;}
const monsters *m = monster_at(p);if (exc->autoexclude && (!m || !you.can_see(m) || m->type != exc->mon))del_exclude(p);
if (!excludes.empty()){mark_all_excludes_non_updated();for (unsigned int i = 0; i < excludes.size(); ++i)update_exclusion_los(excludes[i]);}
update_exclusion_los(excludes);