class SchlonzFlakChunk extends FlakChunk; simulated function HitWall( vector HitNormal, actor Wall ) { if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered ) { if ( Level.NetMode != NM_Client ) Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType); Destroy(); return; } SetPhysics(PHYS_Falling); Velocity = 0.8*(( Velocity dot HitNormal ) * HitNormal * (-1.8 + FRand()*0.8) + Velocity); // Reflect off Wall w/damping } simulated function ProcessTouch (Actor Other, vector HitLocation) { if ( (FlakChunk(Other) == None) && ((Physics == PHYS_Falling) || (Other != Instigator)) ) { speed = VSize(Velocity); If ( speed > 200 ) { if ( Role == ROLE_Authority ) Other.TakeDamage(damage, instigator,HitLocation, (MomentumTransfer * Velocity/speed), MyDamageType ); } Destroy(); } } defaultproperties { Damage=16.000000 LifeSpan=2.900000 }