From 4a00459c260e6b0fdc6a545f8d25565a8b37a351 Mon Sep 17 00:00:00 2001 From: jeefo Date: Thu, 13 Apr 2023 22:48:48 +0300 Subject: [PATCH] bot: minor tweaks to knife mode behaviour --- ext/crlib | 2 +- src/botlib.cpp | 4 ++-- src/combat.cpp | 21 +++++++++++---------- src/navigate.cpp | 2 +- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ext/crlib b/ext/crlib index c6a11b5..6d3c954 160000 --- a/ext/crlib +++ b/ext/crlib @@ -1 +1 @@ -Subproject commit c6a11b5583836c6df86d9111ae4476d263135f6c +Subproject commit 6d3c954a0ac8f03068e90825b7c3ed3eb0c921cc diff --git a/src/botlib.cpp b/src/botlib.cpp index 3409f67..e00cf3d 100644 --- a/src/botlib.cpp +++ b/src/botlib.cpp @@ -1571,7 +1571,7 @@ void Bot::overrideConditions () { float length = pev->origin.distance2d (m_enemy->v.origin); // do waypoint movement if enemy is not reachable with a knife - if (length > 100.0f && (m_states & Sense::SeeingEnemy)) { + if (length > 250.0f && (m_states & Sense::SeeingEnemy)) { int nearestToEnemyPoint = graph.getNearest (m_enemy->v.origin); if (nearestToEnemyPoint != kInvalidNodeIndex && nearestToEnemyPoint != m_currentNodeIndex && cr::abs (graph[nearestToEnemyPoint].origin.z - m_enemy->v.origin.z) < 16.0f) { @@ -1587,7 +1587,7 @@ void Bot::overrideConditions () { } } else { - if (length <= 100.0f && (m_states & Sense::SeeingEnemy) && getCurrentTaskId () == Task::MoveToPosition) { + if (length <= 250.0f && (m_states & Sense::SeeingEnemy) && getCurrentTaskId () == Task::MoveToPosition) { clearTask (Task::MoveToPosition); // remove any move tasks } } diff --git a/src/combat.cpp b/src/combat.cpp index 973cd4c..7b8abd4 100644 --- a/src/combat.cpp +++ b/src/combat.cpp @@ -322,7 +322,7 @@ bool Bot::lookupEnemies () { } } } - m_enemyUpdateTime = game.time () + cr::clamp (m_frameInterval * 3.0f, 0.2f, 0.64f); + m_enemyUpdateTime = game.time () + (usesKnife () ? 1.0f : 0.75f); if (game.isNullEntity (newEnemy) && !game.isNullEntity (shieldEnemy)) { newEnemy = shieldEnemy; @@ -485,14 +485,10 @@ Vector Bot::getBodyOffsetError (float distance) { m_enemyParts &= ~Visibility::Head; } - const auto headOffset = [] (edict_t *e) { - return e->v.absmin.z + e->v.size.z * 0.81f; - }; - Vector spot = m_enemy->v.origin; Vector compensation = nullptr; - if (!usesSniper ()) { + if (!usesSniper () && !usesKnife ()) { compensation = (m_enemy->v.velocity - pev->velocity) * m_frameInterval * (distance < kSprayDistance ? 4.0f : 1.5f); compensation.z = 0.0f; } @@ -536,7 +532,7 @@ Vector Bot::getBodyOffsetError (float distance) { spot += compensation; if (usesKnife () && m_difficulty >= Difficulty::Normal) { - spot.z = headOffset (m_enemy); + spot = m_enemyOrigin; } m_lastEnemyOrigin = spot; @@ -889,7 +885,7 @@ void Bot::selectWeapons (float distance, int index, int id, int choosen) { // need to care for burst fire? if (distance < kSprayDistance || m_blindTime > game.time () || usesKnife ()) { if (id == Weapon::Knife) { - if (distance < 72.0f) { + if (distance < 64.0f) { if (rg.chance (40) || hasShield ()) { pev->button |= IN_ATTACK; // use primary attack } @@ -1075,9 +1071,12 @@ void Bot::focusEnemy () { if (distance < 128.0f && !usesSniper ()) { if (usesKnife ()) { - if (distance < 80.0f) { + if (distance < 72.0f) { m_wantsToFire = true; } + else if (distance > 90.0f) { + m_wantsToFire = false; + } } else { m_wantsToFire = true; @@ -1199,8 +1198,10 @@ void Bot::attackMovement () { if (distance < 96.0f && !usesKnife ()) { m_moveSpeed = -pev->maxspeed; } - else if (usesKnife ()) { + + if (usesKnife ()) { m_fightStyle = Fight::None; + m_lastFightStyleCheck = game.time (); } if (m_fightStyle == Fight::Strafe) { diff --git a/src/navigate.cpp b/src/navigate.cpp index 791ee18..e2c1136 100644 --- a/src/navigate.cpp +++ b/src/navigate.cpp @@ -3194,7 +3194,7 @@ void Bot::updateLookAngles () { float stiffness = 200.0f; float damping = 25.0f; - if (((m_aimFlags & (AimFlags::Enemy | AimFlags::Entity | AimFlags::Grenade)) || m_wantsToFire) && m_difficulty > Difficulty::Normal) { + if (((m_aimFlags & (AimFlags::Enemy | AimFlags::Entity | AimFlags::Grenade)) || m_wantsToFire || usesKnife ()) && m_difficulty > Difficulty::Normal) { if (m_difficulty == Difficulty::Expert) { accelerate += 600.0f; }