From 47fee5d4f137aa407f8d846a804010a99541a3d3 Mon Sep 17 00:00:00 2001 From: Dethrace Labs <78985374+dethrace-labs@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:38:45 +1200 Subject: [PATCH] ProcessGetNearPlayer effectively matching --- src/DETHRACE/common/opponent.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/DETHRACE/common/opponent.c b/src/DETHRACE/common/opponent.c index 56997100..802e4adb 100644 --- a/src/DETHRACE/common/opponent.c +++ b/src/DETHRACE/common/opponent.c @@ -1428,21 +1428,26 @@ void ProcessGetNearPlayer(tOpponent_spec* pOpponent_spec, tProcess_objective_com int res; char str[256]; - if (pCommand == ePOC_start) { + initial_pos = &gProgram_state.initial_position; + car_actor = pOpponent_spec->car_spec->car_master_actor; + + switch (pCommand) { + case ePOC_start: dr_dprintf("%s: ProcessGetNearPlayer() - new objective started", pOpponent_spec->car_spec->driver_name); ClearOpponentsProjectedRoute(pOpponent_spec); CalcGetNearPlayerRoute(pOpponent_spec, &gProgram_state.current_car); ProcessFollowPath(pOpponent_spec, ePOC_start, 0, 0, 0); - return; - } - if (pCommand == ePOC_run) { - if ((pOpponent_spec->car_spec->car_ID & 0xff00) == 768 && pOpponent_spec->distance_from_home > 75.0) { + break; + + case ePOC_run: + + if ((pOpponent_spec->car_spec->car_ID & 0xffffff00) == (0x300 & 0xff00) && pOpponent_spec->distance_from_home > 75.0f) { dr_dprintf("%s: Completing get_near objective because I'm out of my precinct", pOpponent_spec->car_spec->driver_name); NewObjective(pOpponent_spec, eOOT_return_to_start); return; } if (pOpponent_spec->follow_path_data.section_no > 20000) { - if (pOpponent_spec->player_to_oppo_d < 10.0 || pOpponent_spec->follow_path_data.section_no == pOpponent_spec->players_section_when_last_calced_full_path) { + if (pOpponent_spec->player_to_oppo_d < 10.0f || pOpponent_spec->follow_path_data.section_no == pOpponent_spec->players_section_when_last_calced_full_path) { dr_dprintf("%s: ProcessGetNearPlayer() - giving up 'cos got to player's section", pOpponent_spec->car_spec->driver_name); ObjectiveComplete(pOpponent_spec); return; @@ -1456,14 +1461,20 @@ void ProcessGetNearPlayer(tOpponent_spec* pOpponent_spec, tProcess_objective_com res = ProcessFollowPath(pOpponent_spec, ePOC_run, 0, 0, 0); sprintf(str, "Get near: %d", GetOpponentsRealSection(pOpponent_spec, pOpponent_spec->follow_path_data.section_no)); - if (res == eFPR_given_up) { - NewObjective(pOpponent_spec, eOOT_pursue_and_twat, &gProgram_state.current_car); - } else if (res == eFPR_end_of_path) { - dr_dprintf("%s: Restarting get_near_player route because ran out of path!", pOpponent_spec->car_spec->driver_name); + if (res == eFPR_given_up || res == eFPR_end_of_path) { + if (res == eFPR_given_up) { + NewObjective(pOpponent_spec, eOOT_pursue_and_twat, &gProgram_state.current_car); + return; + } else { + dr_dprintf("%s: Restarting get_near_player route because ran out of path!", pOpponent_spec->car_spec->driver_name); + } ClearOpponentsProjectedRoute(pOpponent_spec); CalcGetNearPlayerRoute(pOpponent_spec, &gProgram_state.current_car); ProcessFollowPath(pOpponent_spec, ePOC_start, 0, 0, 0); } + + default: + break; } }