diff options
author | Robert Vollmert <rvollmert@gmx.net> | 2010-07-20 17:00:36 +0200 |
---|---|---|
committer | Robert Vollmert <rvollmert@gmx.net> | 2010-07-20 17:21:56 +0200 |
commit | 09226ac0c680bbbb99986534e466f4e87a902ba8 (patch) | |
tree | 315479263c8f25e3ad4ac73fa647e555bf7783fb /crawl-ref/source/actor-los.cc | |
parent | ef7bc03388e190b9942fe4e50f756bed8260eb2f (diff) | |
download | crawl-ref-09226ac0c680bbbb99986534e466f4e87a902ba8.tar.gz crawl-ref-09226ac0c680bbbb99986534e466f4e87a902ba8.zip |
Wizard mode xray vision (Ctrl-V).
It would be nice to expose the whole viewed area, but
LOS code assumes circular bounds in a few places.
Diffstat (limited to 'crawl-ref/source/actor-los.cc')
-rw-r--r-- | crawl-ref/source/actor-los.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/crawl-ref/source/actor-los.cc b/crawl-ref/source/actor-los.cc index 0b865759b3..74e34a52cd 100644 --- a/crawl-ref/source/actor-los.cc +++ b/crawl-ref/source/actor-los.cc @@ -26,7 +26,10 @@ bool player::see_cell(const coord_def &p) const { if (crawl_state.game_is_arena() && this == &you) return (true); - +#ifdef WIZARD + else if (xray_vision) + return (grid_distance(pos(), p) <= LOS_MAX_RANGE); +#endif return (actor::see_cell(p)); } @@ -60,6 +63,14 @@ const los_base* player::get_los() circle_def(LOS_MAX_RANGE, C_SQUARE)); return (&los); } +#ifdef WIZARD + else if (xray_vision) + { + los = los_glob(pos(), LOS_ARENA, + circle_def(LOS_MAX_RANGE, C_SQUARE)); + return (&los); + } +#endif else return (actor::get_los()); } @@ -74,6 +85,10 @@ bool player::can_see(const actor* a) const { if (crawl_state.game_is_arena() || crawl_state.arena_suspended) return (see_cell(a->pos())); +#ifdef WIZARD + else if (xray_vision) + return(see_cell(a->pos())); +#endif else return (actor::can_see(a)); } |