---
title: "Abilities"
url: /docs/en-us/characters/character-controller-library/abilities
last_updated: 2026-07-10T16:31:45Z
description: "Abilities in the Character Controller Library (CCL) evaluate what a character can do, as well as enable flexible behavior composition such as a character being able to move while also aiming and crouching."
---

# Abilities

**Abilities** in the [Character Controller Library](/docs/en-us/characters/character-controller-library.md) (CCL) evaluate what a character can do, such as the ability to run, jump, climb, and swim. Instead of relying on rigid engine‑defined character states like those in `Enum.HumanoidStateType`, the CCL enables flexible behavior composition such as a character being able to move while also aiming and crouching.

> **Info:** At this time, custom abilities are not supported, although the CCL fully supports the traditional character abilities (run, climb, jump, swim, etc.) and you can customize their behaviors more easily. In the future, custom abilities will allow you to add new character mechanics such as crouching, aiming, wall‑jumping, and more.
## Enable CCL

The CCL is **opt-in** through Studio's [Avatar Settings](/docs/en-us/studio/avatar-settings.md) window. To enable it:

1. From the **Avatar** tab, open [Avatar Settings](/docs/en-us/studio/avatar-settings.md).![Avatar Settings indicated in Studio's toolbar](../../assets/studio/general/Toolbar-Avatar-Settings.png)
2. Select the **Movement** tab on the left side of the window and, in the **Abilities** section, select **Character Controller Library**.![Character Controller Library toggle in the Avatar Settings window](../../assets/studio/general/Avatar-Settings-CCL.png)
3. All of the standard abilities like **Running**, **Jumping**, and **Climbing** are enabled by default. To disable any of them at runtime, uncheck the associated box.
  > **Warning:** It's not recommended to disable **Running**, as doing so will prevent characters from moving along the ground. Additionally, you should always keep **Getting Up** enabled if **Falling Down** is enabled, as a mismatch will allow characters to fall down (trip) but never get back up.

## Configuration

While your game is running (or through a script that runs from `Class.ServerScriptService`), you can experiment with the built‑in ability configurations. You can also modify specific [controllers](/docs/en-us/characters/character-controller-library/controllers.md) to adjust the physical simulation of the character and its interaction with the environment, such as the character's base movement speed.

### Runtime

To experiment with ability configurations at runtime:

1. Begin a playtest.
2. In the [Explorer](/docs/en-us/studio/explorer.md), locate the character model in the `Class.Workspace` and then expand the `Abilities` tree under `AbilityManagerActor`:
3. Select one of the built-in abilities and, within its **Attributes** section of the [Properties](/docs/en-us/studio/properties.md) window, customize [attributes](/docs/en-us/studio/properties.md#instance-attributes) such as those noted below. | Ability | Attributes |
| --- | --- | | `Climbing` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing)`</li><li>`SpeedMultiplier` — Multiplier to the `Class.ClimbController.MoveSpeedFactor` property when character is climbing.</li></ul> | | `Dead` | <ul><li>`Enabled` — Character dies when health is `0` or less.</li><li>`Health`  ⇔  `Class.Humanoid.Health`</li><li>`MaxHealth`  ⇔  `Class.Humanoid.MaxHealth`</li><li>`RequiresNeck`  ⇔  `Class.Humanoid.RequiresNeck`</li></ul> | | `FacingMoveDirection` | <ul><li>`Enabled`  ⇔  `Class.Humanoid.AutoRotate`</li></ul> | | `FallingDown` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown)`</li></ul> | | `Freefall` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Freefall)`</li><li>`SpeedMultiplier` — Multiplier to the `Class.AirController.MoveSpeedFactor` property when character is free‑falling. Note that the effect may be subtle when the character free‑falls for a very short duration.</li></ul> | | `GettingUp` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp)`</li></ul> | | `Jumping` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping)`</li><li>`JumpHeight`  ⇔  `Class.Humanoid.JumpHeight`</li><li>`JumpPower`  ⇔  `Class.Humanoid.JumpPower`</li><li>`UseJumpPower`  ⇔  `Class.Humanoid.UseJumpPower`</li></ul> | | `NoLocomotion` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.PlatformStanding)`</li></ul> | | `Running` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Running)`</li><li>`SpeedMultiplier` — Multiplier to the `Class.GroundController.MoveSpeedFactor` property when character is running.</li></ul> | | `Sitting` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated)`</li></ul> | | `Swimming` | <ul><li>`Enabled`  ⇔  `Class.Humanoid:SetStateEnabled()\|Humanoid:SetStateEnabled(Enum.HumanoidStateType.Swimming)`</li><li>`EnableFastRise` — Rise to surface more quickly by holding the jump input.</li><li>`SpeedMultiplier` — Multiplier to the `Class.SwimController.MoveSpeedFactor` property when character is swimming.</li></ul> |

### Scripted

To set ability configurations for all characters through a script:

1. Create a new server-side `Class.Script` within `Class.ServerScriptService` and rename it to `AbilitiesScript`.
2. Copy and paste the following code into the new script. This example multiplies the base movement speed for the `Running` ability by `2`. Feel free to adjust other ability attributes such as those described in the [table above](#configuration).```lua
local Players = game:GetService("Players")

local function onCharacterAdded(character)
	local AbilityManagerActor = character:WaitForChild("AbilityManagerActor")
	local Abilities = AbilityManagerActor:WaitForChild("Abilities")

	local Running = Abilities:FindFirstChild("Running")
	if Running then
		-- Double base move speed
		Running:SetAttribute("SpeedMultiplier", 2)
	end	
end

local function onPlayerAdded(player)
	if player.Character then
		onCharacterAdded(player.Character)
	end
	player.CharacterAdded:Connect(onCharacterAdded)
end

Players.PlayerAdded:Connect(onPlayerAdded)
```