@@ -12301,8 +12301,13 @@ bool in_autoaim_fov(ship *shipp, int bank_to_fire, object *obj)
1230112301 int weapon_idx = swp->primary_bank_weapons[bank_to_fire];
1230212302 weapon_info* winfo_p = &Weapon_info[weapon_idx];
1230312303
12304- has_converging_autoaim = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim_convergence] || winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim_convergence] || (The_mission.ai_profile->player_autoaim_fov[Game_skill_level] > 0.0f && !( Game_mode & GM_MULTIPLAYER ))) && aip->target_objnum != -1);
12305- has_autoaim = ((has_converging_autoaim || (sip->aiming_flags[Object::Aiming_Flags::Autoaim]) || winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim] || (sip->bank_autoaim_fov[bank_to_fire] > 0.0f)) && aip->target_objnum != -1);
12304+ // First check our ship/weapon flags
12305+ const bool autoaim_flagged = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim]));
12306+ const bool autoaim_convergence_flagged = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim_convergence]));
12307+
12308+ // Now check that we have a target and an FOV value
12309+ has_converging_autoaim = ((autoaim_convergence_flagged || (The_mission.ai_profile->player_autoaim_fov[Game_skill_level] > 0.0f && !( Game_mode & GM_MULTIPLAYER ))) && aip->target_objnum != -1);
12310+ has_autoaim = ((autoaim_flagged || has_converging_autoaim || (sip->bank_autoaim_fov[bank_to_fire] > 0.0f)) && aip->target_objnum != -1);
1230612311
1230712312 if (!has_autoaim) {
1230812313 return false;
@@ -12458,9 +12463,17 @@ int ship_fire_primary(object * obj, int force, bool rollback_shot)
1245812463
1245912464 // lets start gun convergence / autoaim code from here - Wanderer
1246012465 // in order to do this per weapon, this needs to be moved here from above -Mjn
12461- has_converging_autoaim = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim_convergence] || winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim_convergence] || (The_mission.ai_profile->player_autoaim_fov[Game_skill_level] > 0.0f && !( Game_mode & GM_MULTIPLAYER ))) && aip->target_objnum != -1);
12462- has_autoaim = ((has_converging_autoaim || (sip->aiming_flags[Object::Aiming_Flags::Autoaim]) || winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim] || (sip->bank_autoaim_fov[bank_to_fire] > 0.0f)) && aip->target_objnum != -1);
12463- needs_target_pos = ((has_autoaim || has_converging_autoaim) && aip->target_objnum != -1); // This change needs some scrutiny but it seems right?
12466+
12467+ // This logic is getting a little unweildy.. so let's break it down slightly for readability.
12468+ // First check our ship/weapon flags
12469+ const bool autoaim_flagged = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim]));
12470+ const bool autoaim_convergence_flagged = ((sip->aiming_flags[Object::Aiming_Flags::Autoaim_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Autoaim_convergence]));
12471+ const bool auto_convergence_flagged = ((sip->aiming_flags[Object::Aiming_Flags::Auto_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Auto_convergence]));
12472+
12473+ // Now add in other checks like difficulty and game mode as appropriate. Also make sure we have a target and an FOV if necessary.
12474+ has_converging_autoaim = ((autoaim_convergence_flagged || (The_mission.ai_profile->player_autoaim_fov[Game_skill_level] > 0.0f && !( Game_mode & GM_MULTIPLAYER ))) && aip->target_objnum != -1);
12475+ has_autoaim = ((autoaim_flagged || has_converging_autoaim || (sip->bank_autoaim_fov[bank_to_fire] > 0.0f)) && aip->target_objnum != -1);
12476+ needs_target_pos = ((auto_convergence_flagged || has_autoaim) && aip->target_objnum != -1);
1246412477
1246512478 if (needs_target_pos) {
1246612479 if (has_autoaim) {
@@ -12925,11 +12938,10 @@ int ship_fire_primary(object * obj, int force, bool rollback_shot)
1292512938 V SIF convergence
1292612939 no convergence or autoaim
1292712940 */
12928- const bool do_convergence = (sip->aiming_flags[Object::Aiming_Flags::Std_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Std_convergence]);
12941+ const bool std_convergence_flagged = (sip->aiming_flags[Object::Aiming_Flags::Std_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Std_convergence]);
1292912942
1293012943 //Must have the auto convergence flag and a valid target
12931- const bool do_auto_convergence = (aip->target_objnum != -1) &&
12932- ((sip->aiming_flags[Object::Aiming_Flags::Auto_convergence]) || (winfo_p->aiming_flags[Object::Aiming_Flags::Auto_convergence]));
12944+ const bool do_auto_convergence = (aip->target_objnum != -1) && auto_convergence_flagged;
1293312945
1293412946 if (has_autoaim && in_automatic_aim_fov) {
1293512947 vec3d firing_vec;
@@ -12943,7 +12955,7 @@ int ship_fire_primary(object * obj, int force, bool rollback_shot)
1294312955 }
1294412956
1294512957 vm_vector_2_matrix(&firing_orient, &firing_vec, NULL, NULL);
12946- } else if (do_convergence || do_auto_convergence) {
12958+ } else if (std_convergence_flagged || do_auto_convergence) {
1294712959 // std & auto convergence
1294812960 vec3d target_vec, firing_vec, convergence_offset;
1294912961
0 commit comments