Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Source/Game/SwatAICommon/Classes/Actions/SwatWeaponAction.uc
Original file line number Diff line number Diff line change
Expand Up @@ -186,11 +186,49 @@ final latent function LatentAimAtActor(Actor Target, optional float MaxWaitTime)
// only aim at if if we can
local float CurrentTime;
local float StartTime;
local float fdot;
local vector TargetDirection , ViewDirectionNoZ;

StartTime = Level.TimeSeconds;

if (ISwatAI(m_Pawn).AnimCanAimAtDesiredActor(Target) && HasWeaponEquipped())
{
// added here so server can spread information on suspect intentions before even aiming.
if( m_pawn.isa('SwatEnemy') || m_pawn.isa('SwatOfficer') )
{
UpdateThreatToTarget(Target);
yield();
}

if ( ( target.isa('SwatPawn') || target.isa('SwatPlayer') ) && !m_pawn.GetActiveItem().isa('Pepperspray') )
{

//add time to avoid quickscope shooting
TargetDirection = Normal( m_pawn.location - target.location);
ViewDirectionNoZ = vector(m_pawn.Rotation);
fDot = ViewDirectionNoZ Dot TargetDirection;
//log (m_pawn.name $ " attacking " $ target.name $ " fdot is: " $ fdot );

if ( m_pawn.isa('SwatEnemy') )
{
if ( fdot > 0.707 )
{
//log ( m_pawn.name $ " quick scope added time on target 0.8" );
MaxWaitTime = MaxWaitTime + 0.8;
}
else if ( fdot > 0.0 && fdot <= 0.707 )
{
//log ( m_pawn.name $ " quick scope added time on target 0.4" );
MaxWaitTime = MaxWaitTime + 0.6;
}
else if ( fdot > -0.707 && fdot <= 0.0 )
{
//log ( m_pawn.name $ " quick scope added time on target 0.2" );
MaxWaitTime = MaxWaitTime + 0.4;
}
}
}

ISwatAI(m_pawn).AimAtActor(Target);

// wait until we aim at what we want to
Expand Down
25 changes: 20 additions & 5 deletions Source/Game/SwatGame/Classes/AI/SwatEnemy.uc
Original file line number Diff line number Diff line change
Expand Up @@ -1176,14 +1176,29 @@ native event float GetAdditionalBaseAimError();
// overridden from ISwatAI
function float GetTimeToWaitBeforeFiring()
{
switch(Skill)
if ( Level.NetMode != NM_Standalone )
{
switch(Skill)
{
case EnemySkill_High:
return RandRange(class'SwatEnemyConfig'.default.HighSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.HighSkillMaxTimeBeforeShooting);
case EnemySkill_Medium:
return RandRange(class'SwatEnemyConfig'.default.MediumSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.MediumSkillMaxTimeBeforeShooting);
case EnemySkill_Low:
return RandRange(class'SwatEnemyConfig'.default.LowSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.LowSkillMaxTimeBeforeShooting);
}
}
else
{
case EnemySkill_High:
return RandRange(class'SwatEnemyConfig'.default.HighSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.HighSkillMaxTimeBeforeShooting);
switch(Skill)
{
case EnemySkill_High:
return RandRange(class'SwatEnemyConfig'.default.HighSkillMinTimeBeforeShootingSP, class'SwatEnemyConfig'.default.HighSkillMaxTimeBeforeShootingSP);
case EnemySkill_Medium:
return RandRange(class'SwatEnemyConfig'.default.MediumSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.MediumSkillMaxTimeBeforeShooting);
return RandRange(class'SwatEnemyConfig'.default.MediumSkillMinTimeBeforeShootingSP, class'SwatEnemyConfig'.default.MediumSkillMaxTimeBeforeShootingSP);
case EnemySkill_Low:
return RandRange(class'SwatEnemyConfig'.default.LowSkillMinTimeBeforeShooting, class'SwatEnemyConfig'.default.LowSkillMaxTimeBeforeShooting);
return RandRange(class'SwatEnemyConfig'.default.LowSkillMinTimeBeforeShootingSP, class'SwatEnemyConfig'.default.LowSkillMaxTimeBeforeShootingSP);
}
}
}

Expand Down
23 changes: 23 additions & 0 deletions Source/Game/SwatGame/Classes/AI/SwatEnemyConfig.uc
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,35 @@ var config float MediumSkillMaxTimeBeforeShooting;
var config float HighSkillMinTimeBeforeShooting;
var config float HighSkillMaxTimeBeforeShooting;

//SP only time before shoot
var config float LowSkillMinTimeBeforeShootingSP;
var config float LowSkillMaxTimeBeforeShootingSP;
var config float MediumSkillMinTimeBeforeShootingSP;
var config float MediumSkillMaxTimeBeforeShootingSP;
var config float HighSkillMinTimeBeforeShootingSP;
var config float HighSkillMaxTimeBeforeShootingSP;

defaultproperties
{
/* OLD SEF VALUES
LowSkillMinTimeBeforeShooting = 1.0
LowSkillMaxTimeBeforeShooting = 1.7
MediumSkillMinTimeBeforeShooting = 0.9
MediumSkillMaxTimeBeforeShooting = 1.3
HighSkillMinTimeBeforeShooting = 0.6
HighSkillMaxTimeBeforeShooting = 1.0
*/
LowSkillMinTimeBeforeShooting = 0.8
LowSkillMaxTimeBeforeShooting = 1.0
MediumSkillMinTimeBeforeShooting = 0.6
MediumSkillMaxTimeBeforeShooting = 0.8
HighSkillMinTimeBeforeShooting = 0.4
HighSkillMaxTimeBeforeShooting = 0.8

LowSkillMinTimeBeforeShootingSP = 0.6
LowSkillMaxTimeBeforeShootingSP = 1.0
MediumSkillMinTimeBeforeShootingSP = 0.6
MediumSkillMaxTimeBeforeShootingSP = 0.8
HighSkillMinTimeBeforeShootingSP = 0.4
HighSkillMaxTimeBeforeShootingSP = 0.6
}
17 changes: 12 additions & 5 deletions System/AI.ini
Original file line number Diff line number Diff line change
Expand Up @@ -899,9 +899,16 @@ MediumSkillFullBodyHitChance=0.7
LowSkillFullBodyHitChance=0.8

; SEF-introduced delay before firing a weapon
LowSkillMinTimeBeforeShooting = 0.7
LowSkillMaxTimeBeforeShooting = 1.2
LowSkillMinTimeBeforeShooting = 0.8
LowSkillMaxTimeBeforeShooting = 1.0
MediumSkillMinTimeBeforeShooting = 0.6
MediumSkillMaxTimeBeforeShooting = 1.1
HighSkillMinTimeBeforeShooting = 0.5
HighSkillMaxTimeBeforeShooting = 0.8
MediumSkillMaxTimeBeforeShooting = 0.8
HighSkillMinTimeBeforeShooting = 0.4
HighSkillMaxTimeBeforeShooting = 0.8

LowSkillMinTimeBeforeShootingSP = 0.6
LowSkillMaxTimeBeforeShootingSP = 1.0
MediumSkillMinTimeBeforeShootingSP = 0.6
MediumSkillMaxTimeBeforeShootingSP = 0.8
HighSkillMinTimeBeforeShootingSP = 0.4
HighSkillMaxTimeBeforeShootingSP = 0.6