bot: minor tweaks to knife mode behaviour
This commit is contained in:
parent
5bc4e1c675
commit
4a00459c26
4 changed files with 15 additions and 14 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit c6a11b5583836c6df86d9111ae4476d263135f6c
|
||||
Subproject commit 6d3c954a0ac8f03068e90825b7c3ed3eb0c921cc
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue