diff options
Diffstat (limited to 'crawl-ref/source/directn.cc')
-rw-r--r-- | crawl-ref/source/directn.cc | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc index 242befcd6e..58b2bae261 100644 --- a/crawl-ref/source/directn.cc +++ b/crawl-ref/source/directn.cc @@ -1054,24 +1054,32 @@ void direction(dist& moves, targeting_type restricts, bool target_unshifted = Options.target_unshifted_dirs; // Find a default target. - if (Options.default_target && (mode == TARG_ENEMY || mode == TARG_HOSTILE)) + if (Options.default_target) { - skip_iter = true; // Skip first iteration...XXX mega-hack - if (you.prev_targ != MHITNOT && you.prev_targ != MHITYOU) + if (restricts == DIR_TARGET_OBJECT) { - const monsters *montarget = &menv[you.prev_targ]; - if (you.can_see(montarget) - // not made friendly since then - && (mons_attitude(montarget) == ATT_HOSTILE - || mode == TARG_ENEMY && !mons_friendly(montarget)) - && _is_target_in_range(montarget->pos(), range)) + skip_iter = true; + found_autotarget = true; + } + else if (Options.default_target && (mode == TARG_ENEMY || mode == TARG_HOSTILE)) + { + skip_iter = true; // Skip first iteration...XXX mega-hack + if (you.prev_targ != MHITNOT && you.prev_targ != MHITYOU) { - found_autotarget = true; - moves.target = montarget->pos(); + const monsters *montarget = &menv[you.prev_targ]; + if (you.can_see(montarget) + // not made friendly since then + && (mons_attitude(montarget) == ATT_HOSTILE + || mode == TARG_ENEMY && !mons_friendly(montarget)) + && _is_target_in_range(montarget->pos(), range)) + { + found_autotarget = true; + moves.target = montarget->pos(); + } } } } - + bool show_prompt = true; bool moved_with_keys = true; @@ -1124,14 +1132,22 @@ void direction(dist& moves, targeting_type restricts, if (skip_iter) { - if (found_autotarget) + if (restricts == DIR_TARGET_OBJECT) + { + key_command = CMD_TARGET_OBJ_CYCLE_FORWARD; + } + else if (found_autotarget) + { key_command = CMD_NO_CMD; + } else + { key_command = CMD_TARGET_CYCLE_FORWARD; // Find closest target. + } } else { - key_command = beh->get_command(); + key_command = beh->get_command(); } #ifdef USE_TILE |