bot: minor tweaks to knife mode behaviour

This commit is contained in:
jeefo 2023-04-13 22:48:48 +03:00
commit 4a00459c26
No known key found for this signature in database
GPG key ID: 927BCA0779BEA8ED
4 changed files with 15 additions and 14 deletions

View file

@ -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
}
}

View file

@ -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) {

View file

@ -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;
}