A Godot 4 character controller that feels like Quake, Half-Life, Quake 2, Half-Life 2 or SurfsUp, by swapping one resource file.
It covers bunnyhopping, surfing, air strafing, momentum-preserving stair stepping and Source-style crouch jumping. Stair traversal is render-smoothed for both the first-person camera and third-person model, and grounded crouching can be smooth or instant. Written in statically typed GDScript, ported from the original engine source.
This is the controller from SurfsUp, open-sourced under the MIT License.
Try it in your browser: https://bearlikelion.com/succ
Documentation: https://bearlikelion.github.io/SUCC/
- Five movement presets. Pick an engine's feel by assigning a resource, or swap at runtime with one call.
- Smooth stairs in both views. Walk or sprint up and down steps without losing momentum, snapping the camera or jolting the third-person model.
- Source-style crouching. Grounded crouches ease at a configurable speed or snap immediately; air crouches raise the legs while preserving head height.
- Tuning without code. Gravity, speed, friction, jump height, hull size, eye height, crouch transitions, head bob and view tilt are all properties on a resource you edit in the inspector.
- A test gym. Six lanes covering stairs, slopes, bhop, crouch, surf and slide, with a speedometer reading both metres and engine units.
- Signals and hooks for wiring up your own health, weapons and game states without editing the controller.
- Multiplayer support. Authority checks throughout, plus a lightweight
SUCCPawnfor remote players. Works with ENet, WebSocket, GodotSteam or anything else. - No autoloads or singletons.
| File | Feels like |
|---|---|
default_config.tres |
SurfsUp: fast and slidey, 400 u/s |
goldsrc.tres |
Half-Life and CS 1.6, 320 u/s |
quake.tres |
Quake and QuakeWorld, shorter body, lower camera |
quake2.tres |
Quake 2: heavier, grippier, no air strafing |
source.tres |
Half-Life 2: floaty jumps, 190 u/s until you sprint |
The values came from the engine source, and some differ from what gets quoted. Quake 2 runs at 300 u/s with friction 6, not 320 and 4. Half-Life 2 uses gravity 600, a hardcoded jump impulse of 160, and walks at 190. Each preset also carries its engine's own head bob and view tilt, so Quake bobs hard and Half-Life 2 has no strafe tilt at all.
See preset values for the full table, or how accurate are the presets? for the file and line numbers behind each one.
- Install SUCC from the Godot Asset Store, or copy
addons/SUCC/into your project'saddons/folder yourself. Scripts register throughclass_name, so there's no plugin to enable. - Add seven input actions:
forward,back,left,right,jump,crouch,sprint. Any you skip get a warning and are disabled individually, so the rest still works. - Drop
addons/SUCC/scenes/succ_character.tscninto a scene with a floor, and press F6. - To add your own game logic, make an inherited scene and extend
SUCC.
class_name MyPlayer
extends SUCC
signal died
var health: int = 100
func take_damage(amount: int) -> void:
health -= amount
if health > 0:
return
set_game_state(GameState.DISABLED)
died.emit()
func _can_move() -> bool:
return health > 0To try a different engine's movement:
config = load("res://addons/SUCC/resources/quake.tres") as SUCCConfig
apply_config()Then open addons/SUCC/demo/test_level.tscn and press 1 to 5 while playing to compare presets on the same obstacle.
The tutorial covers all of this in more detail.
- Use a movement preset
- Extend SUCC for your game
- Tune your own movement
- Add multiplayer
- How the movement works, including why holding jump makes you faster
SUCC is only the controller. There's no health, ammo, scoring, checkpoints, UI, chat, VOIP or leaderboards. Those belong in your game code.
Example games and game modes will be published in the separate SUCC Demos repository. That project is a work in progress; it will be open-sourced under the MIT License once it's ready, with attribution required.
- SurfsUp by Mark Arneman & Nerdiful, the surf and bhop game SUCC was extracted from.
Built something with SUCC? Open an issue with the name, a link and the authors to have it added here.
SUCC builds on id Software's Quake movement code, Valve's Source SDK 2013 release, and GoldGdt by ratmarrow, which SUCC started as a fork of. Full acknowledgements.
MIT, see LICENSE. Use it in commercial or non-commercial projects. Attribution appreciated but not required.
Issues and pull requests welcome, see CONTRIBUTING.md.
