//============================================================================= // xHeavyWallHitEffect. //============================================================================= class ShotgunWallHitEffect extends Effects; var sound ImpactSounds[6]; var vector FireStart; replication { reliable if ( Role == ROLE_Authority ) FireStart; } simulated function SpawnEffects() { local rotator ReverseRot; local PlayerController PC; local vector Dir, LinePos, LineDir; local bool bViewed; PlaySound(ImpactSounds[Rand(6)],, 2.5*TransientSoundVolume,,200); PC = Level.GetLocalPlayerController(); if ( (PC != None) && (PC.ViewTarget != None) && (VSize(PC.Viewtarget.Location - Location) < 3000*PC.FOVBias) ) { Spawn(class'BulletDecal'); Spawn(class'ROBulletHitEffect',,,,ReverseRot); bViewed = true; } if ( !PhysicsVolume.bWaterVolume ) { ReverseRot = rotator(-1 * vector(Rotation)); if ( bViewed ) Spawn(class'ROBulletHitEffect',,,,ReverseRot); //Spawn(class'WallSparks',,,,ReverseRot) KFTODO: Maybe replace? } if ( FireStart != vect(0,0,0) ) { // see if local player controller near bullet, but missed if ( (PC != None) && (PC.Pawn != None) ) { Dir = Normal(Location - FireStart); LinePos = (FireStart + (Dir dot (PC.Pawn.Location - FireStart)) * Dir); LineDir = PC.Pawn.Location - LinePos; if ( VSize(LineDir) < 150 ) { SetLocation(LinePos); PlaySound(sound'ProjectileSounds.Bullets.Impact_Dirt',,,,80); } } } } simulated function PostNetBeginPlay() { if ( Role == ROLE_Authority ) { if ( Instigator != None ) MakeNoise(0.5); } if ( Level.NetMode != NM_DedicatedServer ) SpawnEffects(); Super.PostNetBeginPlay(); } defaultproperties { // KFTODO: Maybe replace these ImpactSounds(0)=Sound'Inf_Weapons.ShellRifleDirt'; ImpactSounds(1)=Sound'Inf_Weapons.ShellRifleDirt'; ImpactSounds(2)=Sound'Inf_Weapons.ShellRifleDirt'; ImpactSounds(3)=Sound'Inf_Weapons.ShellRifleDirt'; ImpactSounds(4)=Sound'Inf_Weapons.ShellRifleDirt'; ImpactSounds(5)=Sound'Inf_Weapons.ShellRifleDirt'; DrawType=DT_None RemoteRole=ROLE_SimulatedProxy LifeSpan=0.200000 }