some targeted spells shouldn't shift screen onto enemies

This commit is contained in:
2025-03-17 20:36:10 -05:00
parent fd5c16647b
commit 01ad3c5622
3 changed files with 10 additions and 4 deletions

View File

@@ -4901,7 +4901,7 @@ void start_spell_targeting(eSpell num, bool freebie, int spell_range, eSpellPat
add_string_to_buf(" (Hit 'm' to cancel.)");
else add_string_to_buf(" (Hit 'p' to cancel.)");
current_spell_range = num == eSpell::NONE ? spell_range : (*num).range;
handle_target_mode(MODE_SPELL_TARGET, current_spell_range);
handle_target_mode(MODE_SPELL_TARGET, current_spell_range, num);
switch(num) { // Different spells have different messages and diff. target shapes
case eSpell::CLOUD_SLEEP:
@@ -4956,7 +4956,7 @@ void start_fancy_spell_targeting(eSpell num, bool freebie, int spell_range, eSpe
else add_string_to_buf(" (Hit 'p' to cancel.)");
add_string_to_buf(" (Hit space to cast.)");
current_spell_range = num == eSpell::NONE ? spell_range : (*num).range;
handle_target_mode(MODE_FANCY_TARGET, current_spell_range);
handle_target_mode(MODE_FANCY_TARGET, current_spell_range, num);
short bonus = univ.current_pc().stat_adj(eSkill::INTELLIGENCE);
short level = freebie ? store_item_spell_level : univ.current_pc().level;

View File

@@ -1041,10 +1041,16 @@ short scan_for_response(const char *str) {
return -1;
}
void handle_target_mode(eGameMode target_mode, int range) {
void handle_target_mode(eGameMode target_mode, int range, eSpell spell) {
overall_mode = target_mode;
// Lock on to enemies in range:
if(has_feature_flag("target-lock", "V1") && get_bool_pref("TargetLock", true)){
// Skip this for spells that don't target enemies
switch(spell){
case eSpell::DISPEL_SQUARE: case eSpell::DISPEL_BARRIER: case eSpell::DISPEL_SPHERE:
return;
}
location loc = univ.current_pc().combat_pos;
std::vector<location> enemy_locs_in_range;

View File

@@ -71,7 +71,7 @@ void draw_shop_graphics(bool item_pressed, bool item_help_pressed, rectangle cli
void refresh_shopping();
void click_talk_rect(word_rect_t word);
void place_talk_str(std::string str_to_place,std::string str_to_place2,short color,rectangle c_rect);
void handle_target_mode(eGameMode target_mode, int range);
void handle_target_mode(eGameMode target_mode, int range, eSpell spell = eSpell::NONE);
short scan_for_response(const char *str);
void refresh_talking();
graf_pos calc_item_rect(int num,rectangle& to_rect);