There is no spoon

Legacy:Create A Jump Pad

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

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.

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

  1. UTJumppad object (Actor -> NavigationPoint -> JumpPad -> UTJumpPad)
  2. 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

  1. A static mesh for the Jump-Pad (XGame_rc.AmmoChargerMesh is a typical default).
  2. 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 ;)