| Home Page | Recent Changes | Preferences

Create A Jump Pad

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 (ActorNavigationPointJumpPad → UTJumppad?)
  2. A PathNode (ActorNavigationPointPathNode)

Add the jump's destination

Add the PathNode object at the point you wish to land and open up it's 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 it's 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 it's 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


Basic Procedure

Category Tutorial

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

FAQs

Help Desk

Mapping Topics

Mapping Lessons

UnrealEd Interface

UnrealScript Topics

UnrealScript Lessons

Making Mods

Class Tree

Modeling Topics

Chongqing Page

Log In