Skip to content

bearlikelion/SUCC

Repository files navigation

SUCC - SurfsUp Character Controller

Godot 4.6+ License: MIT Release

A multiplayer-focused, inheritable, state-based first/third-person character controller for Godot 4, written in statically typed GDScript.

Based on the Quake movement code and the physics/mouse-look feel of Valve's Source SDK 2013 - the same lineage that powers bhop, surf, and every Source-engine mod you've ever loved.

This is the character controller from SurfsUp, now open-sourced for anyone to use, learn from, and build on.


Features

  • First-person and third-person cameras with mouse look and smoothed step-up/down.
  • Source-engine-inspired physics: ground acceleration, air acceleration/strafing, friction, step climbing, bhop, slope surf.
  • State system: MovementState and GameState extension points with signals and overridable hooks.
  • Multiplayer-first: built around MultiplayerSynchronizer and a stripped-down SUCCPawn for remote peers. Transport-agnostic (ENet, WebSocket, GodotSteam, etc.).
  • Fully configurable via a Resource: swap SUCCConfig for light/heavy characters, low-gravity modes, bhop vs. surf profiles.
  • Editor warnings for missing InputMap actions - no mystery silent failures.
  • Zero singleton coupling - drop into any Godot project.

Quickstart

  1. Copy addons/SUCC/ into your project's addons/ folder (or install via the Godot Asset Library). Scripts register automatically via class_name - no Plugins toggle needed.
  2. Add these input actions to your Input Map: forward, back, left, right, jump, duck, crouch, sprint. Missing actions produce editor warnings and are disabled at runtime.
  3. Instance or inherit addons/SUCC/scenes/succ_character.tscn as your player.
  4. Extend class_name SUCC to add your game-specific state (health, ammo, roles, etc.).
class_name MyPlayer extends SUCC

enum MyGameState { ALIVE, DEAD }

var health: int = 100
var my_state: MyGameState = MyGameState.ALIVE


func _can_move() -> bool:
	return my_state == MyGameState.ALIVE

Full docs: https://bearlikelion.github.io/SUCC/

What's included

addons/SUCC/
├── scripts/
│   ├── succ.gd           # class_name SUCC extends CharacterBody3D
│   ├── succ_pawn.gd      # class_name SUCCPawn - remote peer mirror
│   ├── succ_camera.gd    # class_name SUCCCamera - SpringArm3D + mouse look
│   └── succ_config.gd    # class_name SUCCConfig - physics/feel tuning Resource
├── scenes/
│   ├── succ_character.tscn
│   └── succ_pawn.tscn
├── resources/
│   └── default_config.tres
└── demo/
    ├── test_level.tscn   # gray-box: ramp, stairs, flat ground
    └── test_level.gd

What SUCC is not

SUCC is just the controller. It does not provide health, ammo, scoring, checkpoints, UI, chat, VOIP, or leaderboards. Those live in your game code, extending SUCC.

Example games and game modes will be published in the separate SUCC Demos repository.

Games built with SUCC

Shipped or working on something built with SUCC? Open an issue with your game's name, a link, and the author(s), and it'll be added here.

Heritage & credits

SUCC stands on the shoulders of:

  • Quake - id Software's original movement code defined the shape of FPS player physics.
  • Source SDK 2013 - Valve's open-source engine release inspired the air acceleration, friction, and mouse-look math used here.
  • GoldGdt by ratmarrow - the Godot port that SUCC began as a fork of.
  • SurfsUp v1 by Mark Arneman - rewrote GoldGdt to ship the Steam release.
  • SurfsUp v2 by Nerdiful - refactored the controller for SurfsUp's 2.0 update.
  • SUCC by Mark Arneman - overhauled, extended with state and pawn systems, documented, and open-sourced for everyone.

License

SUCC is released under the MIT License - see LICENSE. Use it freely in commercial or non-commercial projects, attribution appreciated but not required.

Contributing

Issues, pull requests, and questions are welcome on GitHub. See CONTRIBUTING.md for guidelines.