From 65b649bc7549c1ce29631412899ffd6926280a63 Mon Sep 17 00:00:00 2001 From: Kp Date: Fri, 28 Oct 2016 03:39:41 +0000 Subject: [PATCH] Pass player_info to ai_do_actual_firing_stuff --- similar/main/ai.cpp | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/similar/main/ai.cpp b/similar/main/ai.cpp index ee69808e7..e8820c746 100644 --- a/similar/main/ai.cpp +++ b/similar/main/ai.cpp @@ -2551,7 +2551,7 @@ static int maybe_ai_do_actual_firing_stuff(const vobjptr_t obj, ai_static *aip) } #if defined(DXX_BUILD_DESCENT_I) -static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai_local *ailp, const robot_info *robptr, const vms_vector &vec_to_player, fix dist_to_player, const vms_vector &gun_point, int player_visibility, int object_animates, int) +static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai_local *ailp, const robot_info *robptr, const vms_vector &vec_to_player, fix dist_to_player, const vms_vector &gun_point, int player_visibility, int object_animates, const player_info &player_info, int) { fix dot; @@ -2579,7 +2579,6 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai } else { if (!ai_multiplayer_awareness(obj, ROBOT_FIRE_AGITATION)) return; - auto &player_info = get_local_plrobj().ctype.player_info; ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, 0); } } @@ -2605,7 +2604,6 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai && (vm_vec_dist_quick(Hit_pos, obj->pos) > F1_0*40)) { if (!ai_multiplayer_awareness(obj, ROBOT_FIRE_AGITATION)) return; - auto &player_info = get_local_plrobj().ctype.player_info; ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, 0); aip->GOAL_STATE = AIS_RECO; @@ -2628,7 +2626,7 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai // -------------------------------------------------------------------------------------------------------------------- // If fire_anyway, fire even if player is not visible. We're firing near where we believe him to be. Perhaps he's // lurking behind a corner. -static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai_local *ailp, const robot_info *robptr, const vms_vector &vec_to_player, fix dist_to_player, vms_vector &gun_point, int player_visibility, int object_animates, int gun_num) +static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai_local *ailp, const robot_info *robptr, const vms_vector &vec_to_player, fix dist_to_player, vms_vector &gun_point, int player_visibility, int object_animates, const player_info &player_info, int gun_num) { fix dot; @@ -2666,7 +2664,6 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai if (!ai_multiplayer_awareness(obj, ROBOT_FIRE_AGITATION)) return; // New, multi-weapon-type system, 06/05/95 (life is slipping away...) - auto &player_info = get_local_plrobj().ctype.player_info; if (ready_to_fire_weapon1(ailp, 0)) { ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, gun_num, fire_pos); Last_fired_upon_player_pos = fire_pos; @@ -2712,7 +2709,6 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai && (vm_vec_dist_quick(Hit_pos, obj->pos) > F1_0*40)) { if (!ai_multiplayer_awareness(obj, ROBOT_FIRE_AGITATION)) return; - auto &player_info = get_local_plrobj().ctype.player_info; ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, gun_num, Believed_player_pos); aip->GOAL_STATE = AIS_RECO; @@ -2755,14 +2751,12 @@ static void ai_do_actual_firing_stuff(const vobjptridx_t obj, ai_static *aip, ai // New, multi-weapon-type system, 06/05/95 (life is slipping away...) if (ready_to_fire_weapon1(ailp, 0)) { - auto &player_info = get_local_plrobj().ctype.player_info; ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, gun_num, Last_fired_upon_player_pos); } if (gun_num != 0) { if (ready_to_fire_weapon2(robptr, ailp, 0)) { calc_gun_point(gun_point, obj, 0); - auto &player_info = get_local_plrobj().ctype.player_info; ai_fire_laser_at_player(obj, player_info.powerup_flags, gun_point, 0, Last_fired_upon_player_pos); } } @@ -3514,7 +3508,7 @@ _exit_cheat: if ((player_visibility < 2) && (previous_visibility == 2)) { // this is redundant: mk, 01/15/95: && (ailp->mode == ai_mode::AIM_CHASE_OBJECT)) if (!ai_multiplayer_awareness(obj, 53)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } create_path_to_player(obj, 8, 1); @@ -3555,7 +3549,7 @@ _exit_cheat: if (!ai_multiplayer_awareness(obj, 64)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } #if defined(DXX_BUILD_DESCENT_I) @@ -3565,7 +3559,7 @@ _exit_cheat: } else if ((aip->CURRENT_STATE != AIS_REST) && (aip->GOAL_STATE != AIS_REST)) { if (!ai_multiplayer_awareness(obj, 70)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } ai_move_relative_to_player(obj, ailp, dist_to_player, vec_to_player, circle_distance, 0, player_visibility, player_info); @@ -3671,7 +3665,7 @@ _exit_cheat: if (!ai_multiplayer_awareness(obj, anger_level)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) { compute_vis_and_vec(obj, player_info.powerup_flags, vis_vec_pos, ailp, vec_to_player, &player_visibility, robptr, &visibility_and_vec_computed); - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); } return; } @@ -3736,7 +3730,7 @@ _exit_cheat: if (!ai_multiplayer_awareness(obj, 71)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) { compute_vis_and_vec(obj, player_info.powerup_flags, vis_vec_pos, ailp, vec_to_player, &player_visibility, robptr, &visibility_and_vec_computed); - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); } return; } @@ -3768,7 +3762,7 @@ _exit_cheat: const auto vec_to_goal = vm_vec_normalized_quick(vm_vec_sub(goal_point, obj->pos)); move_towards_vector(obj, vec_to_goal, 0); ai_turn_towards_vector(vec_to_player, obj, robptr->turn_time[Difficulty_level]); - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); } #endif @@ -3794,7 +3788,7 @@ _exit_cheat: { if (!ai_multiplayer_awareness(obj, 71)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } ai_turn_towards_vector(vec_to_player, obj, robptr->turn_time[Difficulty_level]); @@ -3812,7 +3806,7 @@ _exit_cheat: aip->behavior = ai_behavior::AIB_NORMAL; if (!ai_multiplayer_awareness(obj, 80)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } ai_move_relative_to_player(obj, ailp, dist_to_player, vec_to_player, 0, 0, player_visibility, player_info); @@ -3821,7 +3815,7 @@ _exit_cheat: // Robots in hover mode are allowed to evade at half normal speed. if (!ai_multiplayer_awareness(obj, 81)) { if (maybe_ai_do_actual_firing_stuff(obj, aip)) - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } ai_move_relative_to_player(obj, ailp, dist_to_player, vec_to_player, 0, 1, player_visibility, player_info); @@ -3872,7 +3866,7 @@ _exit_cheat: case ai_mode::AIM_SNIPE_ATTACK: case ai_mode::AIM_SNIPE_FIRE: if (ai_multiplayer_awareness(obj, 53)) { - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); if (robot_is_thief(robptr)) ai_move_relative_to_player(obj, ailp, dist_to_player, vec_to_player, 0, 0, player_visibility, player_info); break; @@ -4022,7 +4016,7 @@ _exit_cheat: if (!ai_multiplayer_awareness(obj, (ROBOT_FIRE_AGITATION-1))) { if (Game_mode & GM_MULTI) { - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, 0); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, 0); return; } } @@ -4035,7 +4029,7 @@ _exit_cheat: if (player_visibility == 2) { if (!ai_multiplayer_awareness(obj, (ROBOT_FIRE_AGITATION-1))) { if (Game_mode & GM_MULTI) { - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); return; } } @@ -4045,7 +4039,7 @@ _exit_cheat: #endif // Fire at player, if appropriate. - ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, aip->CURRENT_GUN); + ai_do_actual_firing_stuff(obj, aip, ailp, robptr, vec_to_player, dist_to_player, gun_point, player_visibility, object_animates, player_info, aip->CURRENT_GUN); break; case AIS_RECO: