Legacy:SabbathCat/Trampoline
(Package: Custom - WIP)
This is a UT actor.
<uscript>//============================================================================= // Trampoline // Bots hitting this will bounce 3* the Z falling speed upwards. //============================================================================= class Trampoline extends Trigger;
var vector KickVelocity; var() bool bShowMe; var float KickZMultiply; var() name KickedClasses; var() sound KickMeSound; var() bool bMakeNoise; var() bool bRestrictVelocity; var() float MaxVelocity; var() float ExtraKick;
function PostBeginPlay()
{
Super.PostBeginPlay(); if (!bShowMe )
{ DrawType = DT_None; bHidden = True; }
}
simulated function Touch( actor Other )
{
local Actor A;
if ( !Other.IsA(KickedClasses) ) return; PendingTouch = Other.PendingTouch; Other.PendingTouch = self; if( Event != ) foreach AllActors( class 'Actor', A, Event ) A.Trigger( Other, Other.Instigator ); }
simulated function PostTouch( actor Other ) { local bool bWasFalling; local vector Push; local float PitchMeBounce; local actor a; local float GravityThird;
local vector MyOldGravity;
bWasFalling = ( Other.Physics == PHYS_Falling ); if ( Other.IsA('Bot') ) { if ( bWasFalling ) { Bot(Other).bJumpOffPawn = True;
Bot(Other).bTacticalDir = True; Bot(Other).bJumpy = True; Bot(Other).SetFall();
} } Other.SetPhysics(PHYS_Falling);
GravityThird = Abs(Region.Zone.ZoneGravity.Z/3);
If ( bRestrictVelocity)
{ Log(" "); Log("*********>> EXTRA KICK = TRUE ******<<"); Log(" "); Push.Z = ((Abs(Other.Velocity.Z))*2)+ExtraKick; } Else If ( !bRestrictVelocity)
{
Log(" "); Log("*********>> EXTRA KICK = FALSE ******<<"); Log(" "); Push.Z = ((Abs(Other.Velocity.Z))*2.25)+10;
}
If ( Push.Z <= 0 )
{ Push.Z = -Push.Z; Log(" Push.Z = -Push.Z"); }
Else if ( Push.Z <= (GravityThird+ExtraKick) )
{ Push.Z = (GravityThird+ExtraKick)+128; Log(" Push.Z = (GravityThird+ExtraKick)+128"); } MyOldGravity=Other.Velocity; MyOldGravity+= Push;
If ( MyOldGravity.Z <0 )
{ MyOldGravity.Z = -MyOldGravity.Z; } If ( bRestrictVelocity && MyOldGravity.Z > MaxVelocity ) { MyOldGravity.Z=MaxVelocity;
Log(" "); Log("MaxVelocity : "$MaxVelocity); Log("MyOldGravity : "$MyOldGravity); Log(" ");
}
Other.Velocity = MyOldGravity; Log(" MyOldGravity "$MyOldGravity$" << ");
PlaySound (KickMeSound, , Float(SoundVolume)/128, , Float(SoundRadius)*25); MakeNoise(238); }
defaultproperties
{
KickedClasses=Pawn RemoteRole=ROLE_SimulatedProxy bDirectional=True KickMeSound=Sound'AmbModern.OneShot.cscanE2' bMakeNoise=True bHidden=False DrawScale=1.500000 DrawType=DT_Mesh Mesh=LodMesh'Botpack.FastSprocket' bCollideWhenPlacing=True CollisionRadius=64.00000 CollisionHeight=16.00000 MultiSkins(0)=Texture'Botpack.Skins.Jlightcone11' MultiSkins(1)=Texture'Botpack.Skins.Jlightcone11' MultiSkins(2)=Texture'Botpack.Skins.Jlightcone11' bShowMe=True bEdShouldSnap=True bStatic=False bNoDelete=False bRestrictVelocity=False MaxVelocity=2500 ExtraKick=256
} </uscript>
The Trampoline will increase the players Z velocity each time it is hit, up until the point where the bot/player achives the speed determined by the MaxVelocity default property.
Using the Trampoline
Place somewhere with plenty of headroom, perhaps at the botom of a well, with a useful pick-up. Who knows? :)
- Pathing Kickers has more on using kickers
Properties
These are the properties and their default values:
- KickMeSound = Sound
- Is the Sound made when the Trampoline is triggered.