diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-10-03 16:17:52 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-10-03 16:17:52 +0000 |
commit | 5511b48771d9a12e3e622e375220091cf94023dd (patch) | |
tree | e5c031833bd5c88b0fbeb120667d66fc05a5e83b /crawl-ref/source/spells3.cc | |
parent | ae0c5cb4ea464e174d3ff287532d316d32b9df24 (diff) | |
download | crawl-ref-5511b48771d9a12e3e622e375220091cf94023dd.tar.gz crawl-ref-5511b48771d9a12e3e622e375220091cf94023dd.zip |
* Make movement restrictions when beheld also apply to blinking and
controlled teleport.
* Highlight restricted grids when beheld (ASCII only):
- main screen: restricted grids in LOS are darkgrey
- X screen: unrestricted grids in view around the mermaid(s) are lightgrey
* switch xx command back to leaving examine mode
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7105 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spells3.cc')
-rw-r--r-- | crawl-ref/source/spells3.cc | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index 8d1f5d8410..3a00fd310d 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -1204,7 +1204,7 @@ bool cast_death_channel(int pow, god_type god) bool allow_control_teleport(bool quiet) { bool retval = !(testbits(env.level_flags, LFLAG_NO_TELE_CONTROL) - || testbits(get_branch_flags(), BFLAG_NO_TELE_CONTROL)); + || testbits(get_branch_flags(), BFLAG_NO_TELE_CONTROL)); // Tell the player why if they have teleport control. if (!quiet && !retval && player_control_teleport()) @@ -1281,14 +1281,42 @@ static bool _teleport_player( bool allow_control, bool new_abyss_area ) mpr("Expect minor deviation."); more(); - show_map(pos, false); - - redraw_screen(); + while (true) + { + show_map(pos, false); + redraw_screen(); #if DEBUG_DIAGNOSTICS - mprf(MSGCH_DIAGNOSTICS, "Target square (%d,%d)", pos.x, pos.y ); + mprf(MSGCH_DIAGNOSTICS, "Target square (%d,%d)", pos.x, pos.y ); #endif + if (you.duration[DUR_BEHELD]) + { + bool blocked_movement = false; + for (unsigned int i = 0; i < you.beheld_by.size(); i++) + { + monsters& mon = menv[you.beheld_by[i]]; + const int olddist = grid_distance(you.pos(), mon.pos()); + const int newdist = grid_distance(pos, mon.pos()); + + if (olddist < newdist) + { + mprf("You cannot teleport away from %s!", + mon.name(DESC_NOCAP_THE, true).c_str()); + mpr("Choose another destination (press '.' or delete to select)."); + more(); + + blocked_movement = true; + break; + } + } + + if (blocked_movement) + continue; + } + break; + } + pos.x += random2(3) - 1; pos.y += random2(3) - 1; |