---
title: "Jump pad bounce pad launcher and springboard"
description: "The player walks onto a pad and is flung up (or forward) into the air: a bounce pad, a springboard, a launcher, a trampoline, a knockback plate. The engine has no JumpPadComponent and never did; the pad is a trigger plus a script that issues a physics launch command to whoever entered."
engineVersion: v1.0.234
date: 2026-09-28
license: "(c) Gessa, proprietary. Cite with attribution to https://gessa.ai/docs/. Terms: https://gessa.ai/terms/."
canonical: https://gessa.ai/docs/knowledge/playbooks/jump-pads-and-launchers/
---

# Jump pad bounce pad launcher and springboard

## When to use

The player walks onto a pad and is flung up (or forward) into the air: a bounce
pad, a springboard, a launcher, a trampoline, a knockback plate. The engine has
no JumpPadComponent and never did; the pad is a trigger plus a script that
issues a physics launch command to whoever entered.

## The recipe

Author with `project_apply_script_semantic_patch` using the `ai_safe` op pack.

1. Give the pad a trigger `ColliderComponent` (`collision:"trigger"`) sized to
   the pad surface, via `project_add_component`. A `solid` collider would block
   the player instead of detecting the step-on.
2. Add the launch handler with `addTriggerHandler`
   (`{ "handlerKey":"onLaunch" }`). Author the body as whole-body GessaScript
   through `replaceScriptFromGessaScript`.
3. Inside the handler the entering entity is `event.other` (a
   `RuntimeEntitySnapshot`); its id is `event.other.id`. Launch it:
   `ctx.physics.command(event.other.id, { type: "launch", velocity: { x: 0, y: 12, z: 0 } })`.
   `launch` SETS the character's linear velocity, which is the one sanctioned
   way to fling a kinematic `CharacterMovementComponent` body from a script.
4. Gate to players so a stray prop does not trip the pad: check
   `event.other.tags` (e.g. `if (event.other.tags.includes("player"))`) before
   the command, or filter by a component you know only the player carries via
   `ctx.entity.readComponent`.
5. Directional launch (a ramp that throws the player forward): set the
   horizontal components too, e.g. `velocity: { x: 0, y: 9, z: 14 }`. Keep a
   positive `y` so the arc clears the pad.
6. Feedback: `ctx.audio.play` a spring/boing clip in the same handler so the
   launch reads.

## Pitfalls

- Do NOT `ctx.entity.patchComponent` the player's `TransformComponent` to fake a
  jump: teleporting the position fights prediction and the character controller.
  `ctx.physics.command` with `launch` is the only correct lane.
- A `solid` collider on the pad blocks the player; the detector must be a
  `trigger` collider. Keep the visible pad mesh and the trigger volume aligned.
- `launch` REPLACES velocity rather than adding to it, so a tiny `y` gives a weak
  hop regardless of incoming speed; tune the `y` magnitude, not the collider.
- Launch the ENTERING entity (`event.other.id`), never the pad itself; commanding
  the pad's own id does nothing useful and the player keeps walking.

## Verify

- `simulation_run` (`qa.run.start`) driving the player onto the pad and asserting
  the resulting upward velocity / peak height.
- `project_get_graph_snapshot` to confirm the trigger `ColliderComponent` and the
  trigger handler landed on the pad entity.
