1
0
KF2-Dev-Scripts/KFGame/Classes/KFPawnSoundGroup.uc
2020-12-13 18:01:13 +03:00

392 lines
14 KiB
Ucode

//=============================================================================
// KFPawnSoundGroup
//=============================================================================
// Constains static data on sounds that are tied to a specific character
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
// - Andrew "Strago" Ladenberger
//=============================================================================
class KFPawnSoundGroup extends Object;
/*********************************************************************************************
* Footstep sounds
********************************************************************************************* */
struct FootstepSoundInfo
{
var() EMaterialTypes MaterialType;
var() AkBaseSoundObject Sound;
};
/** footstep sound effect to play per material type */
var(Footsteps) array<FootstepSoundInfo> FootstepSounds;
/** default footstep sound used when a given material type is not found in the list */
var(Footsteps) AkBaseSoundObject DefaultFootstepSound;
/** sprinting/charging footstep sound effect to play per material type */
var(Footsteps) array<FootstepSoundInfo> SprintingFootstepSounds;
/** default sprinting/charging footstep sound used when a given material type is not found in the list */
var(Footsteps) AkBaseSoundObject DefaultSprintingFootstepSound;
/** "hand-step" sound effect to play per material type */
var(Footsteps) array<FootstepSoundInfo> HandstepSounds;
/** default hand-step sound used when a given material type is not found in the list */
var(Footsteps) AkBaseSoundObject DefaultHandstepSound;
/** Maximum range to allow footstep sounds. X=Maximum range when pawn visible, Y=Maximum range when pawn hidden */
var(Footsteps) vector2D MaxFootstepSoundRanges;
/*********************************************************************************************
* Jumping sounds
********************************************************************************************* */
var(Jumping) array<FootstepSoundInfo> JumpingSounds;
var(Jumping) AkBaseSoundObject DefaultJumpingSound;
var(Landing) array<FootstepSoundInfo> LandingSounds;
var(Landing) AkBaseSoundObject DefaultLandingSound;
var(Landing) AkBaseSoundObject FallingDamageLandSound;
/*********************************************************************************************
* Damage / Pain
********************************************************************************************* */
var(Misc) AkBaseSoundObject PainSound;
var(Misc) AkBaseSoundObject DyingSound;
var(Misc) AkBaseSoundObject MouthlessDyingSound;
var(Misc) AkBaseSoundObject BleedoutDyingSound;
var(Misc) AkBaseSoundObject GibSound;
var(Misc) AkBaseSoundObject GaspSound;
var(Misc) AkBaseSoundObject EntranceSound;
var(Gore) AkBaseSoundObject DismembermentSound;
var(Gore) AkBaseSoundObject BloodSpraySound;
var(Gore) AkBaseSoundObject DismemberedPartImpactSound;
var(Gore) AkBaseSoundObject VisceraImpactSound;
var(Gore) AkBaseSoundObject HeadPopSound;
var(Gore) AkBaseSoundObject RagdollImpactSound;
var(Gore) AkBaseSoundObject CleaveSound;
var(Gore) AkBaseSoundObject ObliterationSound;
/*********************************************************************************************
* Misc
********************************************************************************************* */
/** Special stop event to let the audio system stop certain sounds */
var(Misc) AKEvent OnDeathStopEvent;
struct ImpactSoundCoolDownInfo
{
var EHitZoneBodyPart Limb;
var name BoneName;
var float LastImpactSoundTime;
structdefaultproperties
{
LastImpactSoundTime=0.f
}
};
var transient array< ImpactSoundCoolDownInfo > ImpactSoundCoolDowns;
function PlayJumpSound(Pawn P)
{
if( DefaultJumpingSound != none )
{
P.PlaySoundBase(DefaultJumpingSound, false, true);
}
}
function PlayLandSound(Pawn P)
{
if( DefaultLandingSound != none )
{
P.PlaySoundBase(DefaultLandingSound, false, true);
}
}
function PlayFallingDamageLandSound(Pawn P)
{
if( FallingDamageLandSound != none )
{
P.PlaySoundBase(FallingDamageLandSound, false, true);
}
}
function PlayPainSound( KFPawn P )
{
if( PainSound != none && !P.IsHeadless() )
{
P.PlaySoundBase( PainSound, true );
}
}
function PlayDyingSound(Pawn P)
{
if( DyingSound != none )
{
P.PlaySoundBase( DyingSound, true );
}
}
function PlayMouthlessDyingSound( Pawn P )
{
if( MouthlessDyingSound != none )
{
P.PlaySoundBase( MouthlessDyingSound, true );
}
}
function PlayBleedoutDyingSound( Pawn P )
{
if( BleedoutDyingSound != none )
{
P.PlaySoundBase( BleedoutDyingSound, true );
}
}
function PlayGibSound(Pawn P)
{
if( GibSound != none )
{
P.PlaySoundBase(GibSound, true);
}
}
function PlayGaspSound(Pawn P)
{
if( GaspSound != none )
{
P.PlaySoundBase(GaspSound, true);
}
}
function PlayEntranceSound( Pawn P )
{
if( EntranceSound != none )
{
P.PlaySoundBase(EntranceSound);
}
}
function AkBaseSoundObject GetFootstepSound(int FootDown, EMaterialTypes MaterialType)
{
local int i;
if( FootDown < 2 ) // 0 - left foot, 1 - right foot
{
i = FootstepSounds.Find('MaterialType', MaterialType);
return (i == INDEX_None) ? DefaultFootstepSound : FootstepSounds[i].Sound;
}
else if( FootDown < 4 ) // 2 - left hand, 3 - right hand
{
i = HandstepSounds.Find('MaterialType', MaterialType);
return (i == INDEX_None) ? DefaultHandstepSound : HandstepSounds[i].Sound;
}
else
{
return DefaultFootstepSound;
}
}
function AkBaseSoundObject GetSprintingFootstepSound(int FootDown, EMaterialTypes MaterialType)
{
local int i;
if( FootDown < 2 ) // 0 - left foot, 1 - right foot
{
i = SprintingFootstepSounds.Find('MaterialType', MaterialType);
return (i == INDEX_None) ? DefaultSprintingFootstepSound : SprintingFootstepSounds[i].Sound;
}
else
{
return DefaultSprintingFootstepSound;
}
}
function AkBaseSoundObject GetJumpSound(EMaterialTypes MaterialType)
{
local int i;
i = default.JumpingSounds.Find('MaterialType', MaterialType);
return (i == INDEX_None) ? DefaultJumpingSound : JumpingSounds[i].Sound;
}
function AkBaseSoundObject GetLandSound(EMaterialTypes MaterialType)
{
local int i;
i = default.LandingSounds.Find('MaterialType', MaterialType);
return (i == INDEX_None) ? DefaultLandingSound : LandingSounds[i].Sound;
}
function PlayDismembermentSounds( Pawn P, vector DismembermentLoc )
{
if( DismembermentSound != none )
{
P.PlaySoundBase( DismembermentSound, true,,, DismembermentLoc );
}
if( BloodSpraySound != none )
{
P.PlaySoundBase( BloodSpraySound, true ); // attach to bone?
}
}
function PlayRigidBodyCollisionSound( Pawn P, vector ImpactLoc )
{
// play part-specific sound?
local name CollidingBoneName;
local int HitZoneIndex, ImpactLimbIndex;
CollidingBoneName = P.Mesh.FindClosestBone( ImpactLoc );
HitZoneIndex = KFPawn( P ).HitZones.Find( 'BoneName', CollidingBoneName );
if( HitZoneIndex != INDEX_NONE )
{
ImpactLimbIndex = ImpactSoundCoolDowns.Find('BoneName', CollidingBoneName);
if( ImpactLimbIndex == INDEX_NONE )
{
ImpactLimbIndex = ImpactSoundCoolDowns.Add( 1 );
ImpactSoundCoolDowns[ ImpactLimbIndex ].BoneName = CollidingBoneName;
ImpactSoundCoolDowns[ ImpactLimbIndex ].LastImpactSoundTime = P.WorldInfo.TimeSeconds;
if( DismemberedPartImpactSound != none )
{
P.PlaySoundBase( DismemberedPartImpactSound, true,,, ImpactLoc );
}
}
else if( P.WorldInfo.TimeSeconds - ImpactSoundCoolDowns[ImpactLimbIndex].LastImpactSoundTime > 0.5 )
{
ImpactSoundCoolDowns[ ImpactLimbIndex ].LastImpactSoundTime = P.WorldInfo.TimeSeconds;
if( DismemberedPartImpactSound != none )
{
P.PlaySoundBase( DismemberedPartImpactSound, true,,, ImpactLoc );
}
}
}
}
simulated function PlayGibletCollisionSound( KFGiblet Gib, vector ImpactLoc )
{
Gib.PlaySoundBase(DismemberedPartImpactSound, true,,, ImpactLoc);
}
function PlayHeadPopSounds( Pawn P, vector SoundLoc )
{
if( HeadPopSound != none )
{
P.PlaySoundBase( HeadPopSound, true,,, SoundLoc );
}
PlayBloodSpraySound( P );
}
function PlayCleaveSound( Pawn P, vector SoundLoc )
{
if( CleaveSound != none )
{
P.PlaySoundBase( CleaveSound, true,,, SoundLoc );
}
PlayBloodSpraySound( P );
}
function bool ShouldPlayCleaveSound( name DismemberBoneName )
{
return DismemberBoneName == 'Spine1'
|| DismemberBoneName == 'LeftShoulder'
|| DismemberBoneName == 'RightShoulder';
}
function PlayObliterationSound( Pawn P, optional bool bNotReplicated=TRUE )
{
if( ObliterationSound != none )
{
P.PlaySoundBase( ObliterationSound, bNotReplicated,,, P.Location );
}
}
function PlayBloodSpraySound( Pawn P )
{
if( BloodSpraySound != none )
{
P.PlaySoundBase( BloodSpraySound, true ); // attach to bone?
}
}
defaultproperties
{
FootstepSounds(0)=(MaterialType=EMT_None, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
FootstepSounds(1)=(MaterialType=EMT_Rock, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
FootstepSounds(2)=(MaterialType=EMT_Dust, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
FootstepSounds(3)=(MaterialType=EMT_Mud, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Mud')
FootstepSounds(4)=(MaterialType=EMT_Grass, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Grass')
FootstepSounds(5)=(MaterialType=EMT_Water, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
FootstepSounds(6)=(MaterialType=EMT_WaterShallow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
FootstepSounds(7)=(MaterialType=EMT_Snow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
FootstepSounds(8)=(MaterialType=EMT_Ice, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
FootstepSounds(9)=(MaterialType=EMT_Concrete, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
FootstepSounds(10)=(MaterialType=EMT_Gravel, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
FootstepSounds(11)=(MaterialType=EMT_Rubber, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Flesh')
FootstepSounds(12)=(MaterialType=EMT_Asphalt, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
MaxFootstepSoundRanges=(X=1500.f,Y=1500.f)
DefaultFootstepSound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt'
DefaultSprintingFootstepSound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt'
DefaultHandstepSound=AkEvent'WW_ZED_Crawler.Play_ZED_Crawler_Sfx_Footstep'
JumpingSounds(0)=(MaterialType=EMT_None, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
JumpingSounds(1)=(MaterialType=EMT_Rock, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
JumpingSounds(2)=(MaterialType=EMT_Dust, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
JumpingSounds(3)=(MaterialType=EMT_Mud, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Mud')
JumpingSounds(4)=(MaterialType=EMT_Grass, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Grass')
JumpingSounds(5)=(MaterialType=EMT_Water, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
JumpingSounds(6)=(MaterialType=EMT_WaterShallow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
JumpingSounds(7)=(MaterialType=EMT_Snow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
JumpingSounds(8)=(MaterialType=EMT_Ice, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
JumpingSounds(9)=(MaterialType=EMT_Concrete, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
JumpingSounds(10)=(MaterialType=EMT_Gravel, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
JumpingSounds(11)=(MaterialType=EMT_Rubber, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Flesh')
JumpingSounds(12)=(MaterialType=EMT_Asphalt, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
DefaultJumpingSound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt'
LandingSounds(0)=(MaterialType=EMT_None, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
LandingSounds(1)=(MaterialType=EMT_Rock, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
LandingSounds(2)=(MaterialType=EMT_Dust, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt')
LandingSounds(3)=(MaterialType=EMT_Mud, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Mud')
LandingSounds(4)=(MaterialType=EMT_Grass, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Grass')
LandingSounds(5)=(MaterialType=EMT_Water, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
LandingSounds(6)=(MaterialType=EMT_WaterShallow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Water')
LandingSounds(7)=(MaterialType=EMT_Snow, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
LandingSounds(8)=(MaterialType=EMT_Ice, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Snow')
LandingSounds(9)=(MaterialType=EMT_Concrete, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
LandingSounds(10)=(MaterialType=EMT_Gravel, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Stone')
LandingSounds(11)=(MaterialType=EMT_Rubber, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Flesh')
LandingSounds(12)=(MaterialType=EMT_Asphalt, Sound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Brick')
DefaultLandingSound=AkEvent'WW_MVT_Footstep.Play_Boot_Walk_Dirt'
DyingSound=AkEvent'WW_ZED_Clot_Alpha.ZED_Clot_Alpha_SFX_Death'
MouthlessDyingSound=AkEvent'WW_ZED_Clot_Alpha.ZED_Clot_Alpha_SFX_Death_Headless'
BleedoutDyingSound=AkEvent'WW_ZED_Clot_Alpha.ZED_Clot_Alpha_SFX_Bleeding'
GibSound=AkEvent'WW_ZED_Clot_Alpha.ZED_Clot_Alpha_SFX_Melee_Impact'
GaspSound=none
EntranceSound=none
DismembermentSound=AkEvent'WW_ZED_Gore.Gore_Dismemberment_Hit'
BloodSpraySound=AkEvent'WW_ZED_Gore.Gore_Blood_Spray'
DismemberedPartImpactSound=AkEvent'WW_ZED_Gore.Gore_Body_Part_Solid_Impact'
VisceraImpactSound=AkEvent'WW_ZED_Gore.Gore_Body_Part_Squish_Impact'
HeadPopSound=AkEvent'WW_ZED_Gore.Gore_Head_Explode'
RagdollImpactSound=AkEvent'WW_ZED_Gore.Gore_Body_Full_Impact'
CleaveSound=AkEvent'WW_ZED_Gore.Gore_Blood_Guts_Heavy'
ObliterationSound=None
}