////////////////////////////////////////////////////////// // Item: FreezeTimer // // Description: This timer handles all activities // // for freezing and unfreezing an // // actor. ////////////////////////////////////////////////////////// class FreezeTimer extends Info; function freezeActor( xPawn frozenActor ) { local int freezeTime; local(UDamage) Material mat; // Actor overlay material // freeze timer based on actor's health freezeTime = 5*(frozenActor.Health/100); // shader to overlay on frozen actor mat=Shader'XGameShaders.PlayerShaders.WeaponUDamageShader'; if((frozenActor == none) || (frozenActor.bNoWeaponFiring == true)) return; // do not freeze actors who have already been frozen. frozenActor.GroundSpeed=0.0; // actor is slowed down in moving speed so slow it appears as though still (yes sort of a hack but it doesn't really do anything if you set it to 0.0) frozenActor.SetPhysics(PHYS_None); // actor just hit cannot move or do anything if mid air, they stay mid air frozenActor.bNoWeaponFiring = true; // do not allow the frozen actor to fire SetTimer(freezeTime,false); // Set our freeze timer based on actor's health, when it hits 0 they unfreeze frozenActor.SetOverlayMaterial(mat, freezeTime, false); // overlay freeze shader over actor frozenActor.SetWeaponOverlay(mat, freezeTime, false); // overlay freeze shader over weapon } function Timer() { if ( Pawn(Owner) == None ) { Destroy(); return; } // play animation to indicate actor has been unfrozen xPawn(Owner).PlayTeleportEffect(false,false); // allow actor to fire weapon again Pawn(Owner).bNoWeaponFiring = false; // return actor to default ground speed Pawn(Owner).GroundSpeed = Pawn(Owner).Default.GroundSpeed; // return actor to normal physics Pawn(Owner).SetPhysics(PHYS_Falling); Destroy(); }