Adding a Jump Pad in UT2004 is a little different from adding one in UT. It will be covered here in two parts. The first part will cover adding the jump pad to the map so that it works. The second part covers the visual side of a jump pad.
Contents
Adding the Jump Pad Effect
The Jump Pad effect is literally the effect of bouncing the player up in the air to a specific spot. In UT2004 this is accomplished by adding two Actors to the level. A jump pad object to cause the player to bounce and a path node to act as the target for the player's bounce.
You will need
- UTJumppad object (Actor -> NavigationPoint -> JumpPad -> UTJumpPad)
- A PathNode (Actor -> NavigationPoint -> PathNode)
Add the jump's destination
Add the PathNode object at the point you wish to land and open up its properties and make a note of the Object->Name property.
Add the jump
Add a UTJumppad object at the point you wish to cause the player to bounce from and open up its properties and do the following:
- Set the NavigationPoint->bPropagatesSound to True
- Set the NavigationPoint->ForcedPaths->[0] to the target PathNode's Object->Name property (the one you took note of above).
- Set the JumpPad->JumpSound and JumpPad->JumpZModifier to values that fit your map (good defaults are wm_sounds.wm_BootJump for the sound and 1 for the Z modifier).
Adding the Jump Pad Visuals
The most complex part about creating a jump pad is sorting out the visual side of it. All jumps pads in UT2004 (I can't think of any exceptions off the top of my head) have some form of visual "effect" that indicates the jump pad is there. Sometimes the effect will also indicate the direction the jump pad will take you. ONS-Junkyard and DM-Plunge are two maps that spring readily to mind when thinking about the visual effects for a jump pad.
You will need
- A static mesh for the Jump-Pad (XGame_rc.AmmoChargerMesh is a typical default).
- An Emitter (Actor -> Emitter) for the Jump-Pad glowy effect.
Add the Mesh and Emitter
This is the easiest step in the process of making your jump pad look great.
- Add a static mesh to your map just below the point your UTJumppad object has been placed to provide the base of the jump pad.
- Add the Emitter object (see Add an Actor) between the jump-pad's static mesh and the UTJumppad object. Before the Emitter will look nice it needs to be configured.
Configuring the Emitter
An Emitter itself doesn't really do very much. Instead it contains a list of specific types of emitter (srpite, beam, etc). Confusingly this list has been given the name of Emitter. It is these "specific types" of emitter that actually provide the Emitter placed on the map with its visual component.
- Open up the Emitter's properties.
- Open the Emitter node followed by the Emitters node and press the "Add" button.
- Click on the "BeamEmitter" line that will appear and use the drop-list to select "SpriteEmitter"
- Then click on the "New" button. This will create a new SpriteEmitter called myLevel.SpriteEmitter0
Repeat the last three steps above so that you have 2 SpriteEmitters in your list.
Configure SpriteEmitter0
Open up the properties of SpriteEmitter0 and set the following:
Acceleration -> Z=50 Color -> UserColorScale = True Color -> ColorScale -> Add button Color -> ColorScale[0] -> Color (G=162,R=185,A=255) Color -> ColorScale -> Add button Color -> ColorScale[1] -> Color (B=92,G=44,R=69,A=50) Color -> ColorScale[1] -> RelativeTime=1 Fading -> FadeOut=True Fading -> FadeIn=True Fading -> FadeOutStartTime=0.8 Fading -> FadeInEndTime=0.1 General -> MaxParticles=5 Size -> StartSizeRange=(X=(Min=35,Max=35),Y=(Min=30,Max=30),Z=(Min=40,Max=40)) Sprite -> UseDirectionAs=PTDU_Normal Texture -> Texture=EpicParticles.JumpPad.GridPlate Time -> LifetimeRange=(Min=1.4,Max=1.4) Warmup -> WarmupTicksPerSecond=2 Warmup -> RelativeWarmupTime=2
Configure SpriteEmitter1
Open up the properties of SpriteEmitter1 and set the following:
Aceleration -> Z=80 Color -> UseColorScale=True Color -> ColorScale[0] -> Color (B=27,G=95,R=124) Color -> ColorScale[1] -> Color (B=82,G=123,R=169) Color -> ColorScale[1] -> RelativeTime=1 Fading -> FadeOut=True Fading -> FadeIn=True Fading -> FadeOutStartTime=0.75 Fading -> FadeInEndTime=0.2 General -> MaxParticles=100 Location -> StartLocationRange=(X=(Min=-30,Max=30),Y=(Min=-24,Max=24),Z=(Min=0,Max=0) ) Rotation -> StartSpinRange=( X=(Min=-0.25,Max=-0.25),Y=(Min=0,Max=0),Z=(Min=0,Max=0) ) Size -> StartSizeRange=( X=(Min=6,Max=6),Y=(Min=4,Max=4),Z=(Min=100,Max=100) ) Sprite -> UseDirectionAs=PTDU_Right Texture -> Texture=EpicParticles.Beams.WhiteStreak01aw Time -> LifetimeRange=(Min=1.25,Max=1.5) Veolocity -> StartVelocityRange=(X=(Min=0,Max=0),Y=(Min=0,Max=0),Z=(Min=0,Max=20)) Warmup -> WarmupTicksPerSecond=2.000000 Warmup -> RelativeWarmupTime=2.000000
Job Done
You should now be in a position to rebuild your level and view your jump pad in all its glory. If you are still working on pathing the level you will get some errors about the lack of paths from the jump pad's destination path node. These can be safely ignored unless you are actually Bot-Pathing your level.
Gotchas
If you have mutliple Jump Pads within your level you might think that you can reference the same Sprite Emitter in the Emitter list of multiple jump-pads. If you do this you will notice all sorts of visual anomolies with the jump-pad visuals.
When a jump pad is duplicated, copies of its SpriteEmitters are made and added automatically to the new jump pad rather than simply having it reference the existing ones - therefore this problem will not arise unless the values are deliberately changed back after copying.
Discussion
SuperApe: I have run into problems editing the JumpZModifier property lately. It used to be a no brainer: edit the Z, RebuildChangedPaths, see the change. Some Jumppads in new maps I've seen refuse to have any ZMod except (what looks like) 1.0. Some older maps, like AS-Junkyard allow it to change properly. It's bizzare. In the code for the Jumppad, there is a curious PostBeginPlay check for if (JumpVelocity != JumpVelocity), but whether that condition is met or not, it essentially Resets that property by JumpVelocity = BACKUP_JumpVelocity. This Actor seems to be behaving strangely compared to when I worked on the TriggerJumpPad. Anyone else see wierd things with the UTJumpPad and are there any ways to fix or force it? I tried something like this to force the original vector:
//============================================================================= // SuperUTJumpPad. // An attempt to fix a bug that constantly resets the JumpVelocity vector. // by SuperApe -- July 2005 //============================================================================= class SuperUTJumpPad extends UTJumppad placeable; var vector VelocityVector; simulated function PostBeginPlay() { VelocityVector = JumpVelocity; Super.PostBeginPlay(); if ( JumpVector.Z = BACKUP_JumpVelocity.Z ) JumpVelocity = VelocityVector; }
Anyone else have thoughts on this?
Blip2: Quite possible they changed the code (in one of the patches) and obviously not found the problem as they dont rebuild maps like junky
Lobo: Changed "Revolution" to "Rotation" for SpriteEmitter1 up there.
Janzak: I can't seem to figure out how to angle the emitter for a more horizontal jump? The jump works but the emitter is still pointing upward
Seditious: If I understand correctly what you want, you need to adjust the Velocity -> StartVelocityRange and Acceleration -> Acceleration. Make the StartVelocityRange X and Y values point toward your JumpDest and the particles will fly off in that direction immediately; use X and Y in Acceleration instead to make them start slowly and speed up move away from the JumpPad until they die. Use more or less Z to suit your need and adjust the Fading and LifeTimeRange to make it go further. Use combinations of all the above to create parabolic curves, even ones that match and follow the whole jump arc if you're that much a perfectionist ;)