some changes

This commit is contained in:
jeefo 2025-01-22 20:14:11 +03:00
commit 003fd33d59
No known key found for this signature in database
GPG key ID: D696786B81B667C8
6 changed files with 18 additions and 26 deletions

View file

@ -61,12 +61,12 @@ if(GIT_FOUND)
target_compile_definitions(${PROJECT_NAME} PRIVATE VERSION_GENERATED)
endif()
if(NOT WIN32 AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" AND NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "arm" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^arm64")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)" AND NOT CMAKE_LIBRARY_ARCHITECTURE MATCHES "^(arm|aarch64|ppc)")
set(BUILD_X86 true)
endif()
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") AND NOT MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE -flto=auto -fno-exceptions -fno-rtti -fno-threadsafe-statics -pthread)
target_compile_options(${PROJECT_NAME} PRIVATE -DCR_NATIVE_BUILD -flto=auto -fno-exceptions -fno-rtti -fno-threadsafe-statics -pthread)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
target_compile_options(${PROJECT_NAME} PRIVATE -march=armv8-a+fp+simd)
@ -77,7 +77,7 @@ if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
target_compile_options(${PROJECT_NAME} PRIVATE -funroll-loops -fomit-frame-pointer -fno-stack-protector -fvisibility=hidden -fvisibility-inlines-hidden -fno-math-errno)
if(BUILD_X86)
if(NOT WIN32 AND BUILD_X86)
target_compile_options(${PROJECT_NAME} PRIVATE -fdata-sections -ffunction-sections -fcf-protection=none -fno-plt)
target_link_options(${PROJECT_NAME} PRIVATE -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/ext/ldscripts/version.lds -Wl,--gc-sections)

@ -1 +1 @@
Subproject commit 8e2acfd0f9a64043909769dc844c37b3023d2299
Subproject commit 2a521ddaaf8c5f60b9480dc36fadcdb0a139968e

View file

@ -760,7 +760,7 @@ public:
bool hasShield ();
bool isShieldDrawn ();
bool findNextBestNode ();
bool findNextBestNodeEx (const IntArray &data, bool returnFailure);
bool findNextBestNodeEx (const IntArray &data, bool handleFails);
bool seesEntity (const Vector &dest, bool fromBody = false);
int getAmmo ();

View file

@ -3204,7 +3204,7 @@ void Bot::checkSpawnConditions () {
void Bot::logic () {
// this function gets called each frame and is the core of all bot ai. from here all other subroutines are called
float movedDistance = 4.0f; // length of different vector (distance bot moved)
float movedDistance = 2.0f; // length of different vector (distance bot moved)
resetMovement ();

View file

@ -1596,7 +1596,7 @@ void Bot::attackMovement () {
&& (m_jumpTime + 5.0f < game.time ()
&& isOnFloor ()
&& rg (0, 1000) < (m_isReloading ? 8 : 2)
&& pev->velocity.length2d () > 150.0f) && !usesSniper ()) {
&& pev->velocity.length2d () > 150.0f) && !usesSniper () && isEnemyCone) {
pev->button |= IN_JUMP;
}
@ -1623,14 +1623,6 @@ void Bot::attackMovement () {
m_strafeSpeed = 0.0f;
}
if (m_difficulty >= Difficulty::Normal && isOnFloor () && m_duckTime < game.time ()) {
if (distanceSq < cr::sqrf (kSprayDistanceX2)) {
if (rg (0, 1000) < rg (5, 10) && pev->velocity.length2d () > 150.0f && isEnemyCone) {
pev->button |= IN_JUMP;
}
}
}
if (m_isReloading) {
m_moveSpeed = -pev->maxspeed;
m_duckTime = game.time () - 1.0f;

View file

@ -486,7 +486,7 @@ void Bot::doPlayerAvoidance (const Vector &normal) {
const auto otherPrio = bots.getPlayerPriority (client.ent);
// give some priorities to bot avoidance
if (ownPrio < otherPrio) {
if (ownPrio > otherPrio) {
continue;
}
@ -495,7 +495,7 @@ void Bot::doPlayerAvoidance (const Vector &normal) {
const auto avoidPrio = bots.getPlayerPriority (m_hindrance);
// ignore because we're already avoiding someone better
if (avoidPrio < otherPrio) {
if (avoidPrio > otherPrio) {
continue;
}
}
@ -557,7 +557,7 @@ void Bot::checkTerrain (float movedDistance, const Vector &dirNormal) {
// standing still, no need to check?
if (m_lastCollTime < game.time () && getCurrentTaskId () != Task::Attack) {
// didn't we move enough previously?
if (movedDistance < 4.0f && (m_prevSpeed > 20.0f || m_prevVelocity < m_moveSpeed / 2)) {
if (movedDistance < 2.0f && (m_prevSpeed > 20.0f || m_prevVelocity < m_moveSpeed / 2)) {
m_prevTime = game.time (); // then consider being stuck
m_isStuck = true;
@ -1285,7 +1285,7 @@ bool Bot::updateNavigation () {
}
// needs precise placement - check if we get past the point
if (desiredDistanceSq < cr::sqrf (22.0f) && nodeDistanceSq < cr::sqrf (30.0f)) {
if (desiredDistanceSq < cr::sqrf (20.0f) && nodeDistanceSq < cr::sqrf (30.0f)) {
const auto predictRangeSq = m_pathOrigin.distanceSq (pev->origin + pev->velocity * m_frameInterval);
if (predictRangeSq >= nodeDistanceSq || predictRangeSq <= desiredDistanceSq) {
@ -1305,7 +1305,7 @@ bool Bot::updateNavigation () {
return false;
}
if (nodeDistanceSq < desiredDistanceSq) {
if (nodeDistanceSq <= desiredDistanceSq) {
// did we reach a destination node?
if (getTask ()->data == m_currentNodeIndex) {
if (m_chosenGoalIndex != kInvalidNodeIndex) {
@ -1766,7 +1766,7 @@ bool Bot::findNextBestNode () {
return true;
}
bool Bot::findNextBestNodeEx (const IntArray &data, bool returnFailure) {
bool Bot::findNextBestNodeEx (const IntArray &data, bool handleFails) {
// this function find a node in the near of the bot if bot had lost his path of pathfinder needs
// to be restarted over again.
@ -1777,7 +1777,7 @@ bool Bot::findNextBestNodeEx (const IntArray &data, bool returnFailure) {
lessDist[i] = kInfiniteDistance;
lessIndex[i] = kInvalidNodeIndex;
}
const auto &numToSkip = returnFailure ? 0 : cr::clamp (rg (0, 2), 0, static_cast <int> (data.length () / 2));
const auto &numToSkip = handleFails ? 1 : rg (1, 4);
for (const auto &i : data) {
const auto &path = graph[i];
@ -1855,7 +1855,7 @@ bool Bot::findNextBestNodeEx (const IntArray &data, bool returnFailure) {
// worst case... find at least something
if (selected == kInvalidNodeIndex) {
if (returnFailure) {
if (handleFails) {
return false;
}
selected = findNearestNode ();
@ -1960,7 +1960,7 @@ int Bot::findNearestNode () {
int index = kInvalidNodeIndex;
float nearestDistanceSq = cr::sqrf (kMaxDistance);
const auto &origin = pev->origin + pev->velocity * m_frameInterval;
const auto &origin = pev->origin + Vector { pev->velocity.x, pev->velocity.y, 0.0f } * m_frameInterval;
const auto &bucket = graph.getNodesInBucket (origin);
for (const auto &i : bucket) {
@ -1969,7 +1969,7 @@ int Bot::findNearestNode () {
if (!graph.exists (path.number)) {
continue;
}
const float distanceSq = path.origin.distanceSq (pev->origin);
const float distanceSq = path.origin.distanceSq (origin);
if (distanceSq < nearestDistanceSq) {
// if bot doing navigation, make sure node really visible and reachable
@ -1991,7 +1991,7 @@ int Bot::findNearestNode () {
if (!graph.exists (path.number)) {
continue;
}
const float distanceSq = path.origin.distanceSq (pev->origin);
const float distanceSq = path.origin.distanceSq (origin);
if (distanceSq < nearestDistanceSq) {
TraceResult tr {};