From 66515f437d58cbfd58705b3af7dda70df5ea115b Mon Sep 17 00:00:00 2001 From: Dethrace Labs <78985374+dethrace-labs@users.noreply.github.com> Date: Tue, 23 Sep 2025 08:57:42 +1200 Subject: [PATCH] SearchForSection effectively matching --- src/DETHRACE/common/opponent.c | 58 +++++++++++++++------------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/src/DETHRACE/common/opponent.c b/src/DETHRACE/common/opponent.c index 4317516a..aeeb4747 100644 --- a/src/DETHRACE/common/opponent.c +++ b/src/DETHRACE/common/opponent.c @@ -662,9 +662,6 @@ int SearchForSection(tRoute_section* pTemp_store, tRoute_section* pPerm_store, i tS16 section_no_index; br_scalar distance_so_far; - // added by dethrace for readability (?) - tS16 section_no_dir_index; - gSFS_cycles_this_time++; if (pDepth == 1) { memset(gBit_per_node, 0, (gProgram_state.AI_vehicles.number_of_path_nodes + 7) / 8); @@ -682,42 +679,37 @@ int SearchForSection(tRoute_section* pTemp_store, tRoute_section* pPerm_store, i section_no = node_ptr->sections[section_no_index]; direction = gProgram_state.AI_vehicles.path_sections[section_no].node_indices[1] != node_no; - section_no_dir_index = gProgram_state.AI_vehicles.path_sections[section_no].node_indices[direction]; - // int b = BYTE4(v8); - // int y = (int)(((BYTE4(v8) ^ (((BYTE4(v8) ^ v8) - BYTE4(v8)) & 7)) - BYTE4(v8))); - // int val = valx(v8); - // LOG_DEBUG("val %d, b %d, y %d", val, b, y); - // int x = ((BYTE4(v8) ^ (((BYTE4(v8) ^ v8) - BYTE4(v8)) & 7)) - BYTE4(v8)); - // int x2 = v8 & 7; - // if (x != x2 || val != x) { - // TELL_ME_IF_WE_PASS_THIS_WAY(); - // } - if ((gBit_per_node[section_no_dir_index / 8] & (1 << (section_no_dir_index & 7))) == 0 - && (!gProgram_state.AI_vehicles.path_sections[section_no].one_way || direction) - && (pOpponent_spec->cheating || gProgram_state.AI_vehicles.path_sections[section_no].type != ePST_cheat_only)) { + if ((gBit_per_node[gProgram_state.AI_vehicles.path_sections[section_no].node_indices[direction] / 8] & (1 << (gProgram_state.AI_vehicles.path_sections[section_no].node_indices[direction] % 8))) != 0) { + continue; + } + if ((gProgram_state.AI_vehicles.path_sections[section_no].one_way && gProgram_state.AI_vehicles.path_sections[section_no].node_indices[1] == node_no)) { + continue; + } + if (!pOpponent_spec->cheating && gProgram_state.AI_vehicles.path_sections[section_no].type == ePST_cheat_only) { + continue; + } - pTemp_store[pDepth].section_no = section_no; - pTemp_store[pDepth].direction = direction; - distance_so_far = gProgram_state.AI_vehicles.path_sections[section_no].length + pDistance_so_far; + pTemp_store[pDepth].section_no = section_no; + pTemp_store[pDepth].direction = direction; + distance_so_far = gProgram_state.AI_vehicles.path_sections[section_no].length + pDistance_so_far; + if (pTarget_section == section_no && distance_so_far <= shortest_dist) { + shortest_dist = distance_so_far; + *pNum_of_perm_store_sections = pDepth + 1; + memcpy(pPerm_store, pTemp_store, sizeof(tRoute_section) * *pNum_of_perm_store_sections); - if (pTarget_section == section_no && distance_so_far < shortest_dist) { - shortest_dist = distance_so_far; - *pNum_of_perm_store_sections = pDepth + 1; - memcpy(pPerm_store, pTemp_store, sizeof(tRoute_section) * *pNum_of_perm_store_sections); - // dword_530DD4 = ++routes_found - routes_found++; - if (routes_found >= 2) { - return 1; - } - break; - } - - if (pDepth < 9 - && SearchForSection(pTemp_store, pPerm_store, pNum_of_perm_store_sections, pTarget_section, pDepth + 1, distance_so_far, pOpponent_spec)) { + gWanky_arse_tit_fuck = routes_found + 1; + routes_found++; + if (routes_found >= 2) { return 1; + } else { + gBit_per_node[node_no / 8] &= ~(1 << (node_no % 8)); + return 0; } } + if (pDepth < 9 && SearchForSection(pTemp_store, pPerm_store, pNum_of_perm_store_sections, pTarget_section, pDepth + 1, distance_so_far, pOpponent_spec)) { + return 1; + } } gBit_per_node[node_no / 8] &= ~(1 << (node_no % 8)); return 0;