How To Make A Double Jump Gamepass In Roblox

Roblox developers love adding extra abilities to keep players engaged, and a double jump is one of the most popular upgrades. This guide walks you through creating a functional double‑jump gamepass, from setting up the pass in Roblox Studio to scripting the jump logic. By the end of the tutorial you’ll have a ready‑to‑sell gamepass that lets players soar higher and enjoy a smoother gameplay experience.

Understanding the Basics

Before diving into the script, it’s helpful to know what a gamepass does. A gamepass is a paid item that players can purchase once and keep forever. When a player owns the pass, a script can check this ownership and enable special features—in this case, a second jump while in mid‑air.

Step‑by‑Step Tutorial

1. Create the Gamepass on Roblox

  1. Log in to the Roblox website and go to Develop → Game Passes.
  2. Click Create New Game Pass, upload an icon, set a price, and give it a clear name such as “Double Jump”.
  3. Copy the numeric ID from the URL; you’ll need it in the script.

2. Set Up the Workspace

  1. Open Roblox Studio and load the place you want to add double jump to.
  2. Insert a LocalScript into StarterPlayer → StarterPlayerScripts. This script will handle the jump detection on each client.
  3. Insert a Script into ServerScriptService to verify gamepass ownership.

3. Add the Double Jump Script

The following code is a reliable starting point. It checks if the player owns the pass, then allows a second jump when the character is airborne.

-- LocalScript (StarterPlayerScripts) local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local DoubleJumpPassId = 12345678 -- Replace with your actual Gamepass ID local function hasDoubleJumpPass(player) local success, result = pcall(function() return game:GetService("MarketplaceService"):UserOwnsGamePassAsync(player.UserId, DoubleJumpPassId) end) return success and result end local function enableDoubleJump(character) local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid then return end local canDoubleJump = false local jumped = false UserInputService.JumpRequest:Connect(function() if humanoid.FloorMaterial ~= Enum.Material.Air then jumped = true canDoubleJump = true elseif canDoubleJump then humanoid:ChangeState(Enum.HumanoidStateType.Jumping)