succ_cr
Version, currently 0.1.117 versions
github.com/sol-vin/succ-cr
Source Engine Unofficial Character Controller (SUCC) ported to Crystal for Lapis — Quake/Source-style 3D character movement for Godot 4
Nothing has been indexed for 0.1.11 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.
Installation
# Add this to your shard.yml
dependencies:
succ_cr:
github: sol-vin/succ-cr
version: ~> 0.1.11Then run:
shards installshard.yml
No shard.yml has been indexed for 0.1.11. You can read it on the repository.
Dependencies
Unknown: the shard.yml for this version has not been read yet.
README
This README is the one indexed from the repository at its latest ref, not from the tag for this version.
SUCC-CR — Source Engine Unofficial Character Controller (Crystal / Lapis Port)
SUCC-CR (succ-cr) is a native Crystal port of SUCC (Source Engine Unofficial Character Controller) built with the Lapis GDExtension framework for Godot 4.
Original Author & Repository Credit:
This addon is a Crystal port of SUCC, originally created in GDScript by bearlikelion (Mark Arneman) & Nerdiful. All movement math, Quake/GoldSrc/Source physics parameters, presets, and controller architecture are credited to the original author.
Features
- Authentic Quake & Source Movement Physics (
PM_Accelerate,PM_AirAccelerate,PM_Friction,PM_ClipVelocity)- Ground acceleration, friction with
stop_speed(sv_stopspeed), and slope velocity projection - Air strafing (
sv_airaccelerate+max_air_speedwish-speed cap) - Bunny hopping (
bhop_buffered_jumphold-to-bhop or manual frame-perfect bhop) - Ramp surfing on steep angled surfaces (
45.57°–80°) - Per-axis velocity clamping (
sv_maxvelocity)
- Ground acceleration, friction with
- Stair Stepping & View Smoothing
- Three-phase
test_movesweep (up $\rightarrow$ forward $\rightarrow$ down) with raycast surface normal verification - Air-stepping onto ledges when falling
- Downward stair snapping when walking down steps
- Smooth camera vertical step interpolation (
WalkMovestyle)
- Three-phase
- Crouching & Hull Management
- Standing (
BoxShape3DorCylinderShape3D) and crouching collision hulls automatically built and updated in-editor (@[Tool]) - Source-style mid-air crouch (feet pull up while head stays in place)
- Overhead shape-cast clearance check before uncrouching (
intersect_shape_into) - Smooth cubic ease-out (
SMOOTH) or instant (SNAP) crouch view transition
- Standing (
- Camera Rig (
SUCCCamera)- First-person and third-person (
SpringArm3D) camera modes - Quake/GoldSrc asymmetric triangle-wave view bob (
V_CalcBob) - Quake lateral strafe camera roll (
V_CalcRoll) - Source-style mouse sensitivity (
degrees_per_unit = 0.022,m_yaw) - Physics tick camera interpolation for high-refresh-rate monitors
- First-person and third-person (
- 5 Ready-to-Use Engine Presets
- Default (SUCC) (
res://addons/succ_cr/resources/default_config.tres) - Quake (1996) (
res://addons/succ_cr/resources/quake.tres) - Quake 2 (1997) (
res://addons/succ_cr/resources/quake2.tres) - GoldSrc / Half-Life (1998) (
res://addons/succ_cr/resources/goldsrc.tres) - Source / Half-Life 2 (2004) (
res://addons/succ_cr/resources/source.tres)
- Default (SUCC) (
- Multiplayer Pawn (
SUCCPawn)- Lightweight networked player representation for
MultiplayerSynchronizerstate interpolation
- Lightweight networked player representation for
Installation
Via Lapis CLI
In any Lapis-powered Godot 4 project:
lapis install addon github:sol-vin/succ-cr
Or add succ_cr to your shard.yml dependencies and copy addons/succ_cr into your project's addons/ folder:
dependencies:
succ_cr:
github: sol-vin/succ-cr
version: ~> 0.1.0
Then require it in your src/main.cr:
require "succ_cr"
Quick Start
1. Drop in the Character Scene
Instance res://addons/succ_cr/scenes/succ_character.tscn into your 3D level, or construct the node hierarchy manually:
SUCC (CharacterBody3D)
└── SUCCCamera (SpringArm3D)
└── Camera3D
SUCC automatically generates its standing and crouching CollisionShape3D nodes at runtime and in the Godot Editor.
2. Configure Input Map Actions
Ensure the following actions exist in Project > Project Settings > Input Map (or customize the action names in the SUCC Inspector under Input Actions):
| Action Property | Default Input Map Name | Suggested Binding |
|---|---|---|
action_move_forward | forward | W |
action_move_backward | back | S |
action_move_left | left | A |
action_move_right | right | D |
action_jump | jump | Space |
action_crouch | crouch | Ctrl |
action_sprint | sprint | Shift |
action_camera_mode | camera_mode | V |
Engine Presets
Swap movement feel at edit-time via the config property in the Inspector or at runtime in Crystal:
# Using pre-built .tres resources
player.config = SUCCConfig.new(Godot.load("res://addons/succ_cr/resources/quake.tres").pointer)
# Or using Crystal preset constructors
player.config = SUCCConfig.default_preset
player.config = SUCCConfig.quake_preset
player.config = SUCCConfig.quake2_preset
player.config = SUCCConfig.goldsrc_preset
player.config = SUCCConfig.source_preset
| Preset | Max Speed | Gravity | Jump Height | Friction | Air Accel | Auto Bhop | Crouch Mode |
|---|---|---|---|---|---|---|---|
| Default (SUCC) | 8.128 m/s (320u) | 20.32 m/s² (800u) | 1.128 m (44.4u) | 4.0 | 10.0 | true | SMOOTH |
| Quake (1996) | 8.128 m/s (320u) | 20.32 m/s² (800u) | 1.158 m (45.6u) | 6.0 | 10.0 | false | Disabled (SNAP) |
| Quake 2 (1997) | 7.620 m/s (300u) | 20.32 m/s² (800u) | 1.158 m (45.6u) | 6.0 | 1.0 | false | SNAP |
| GoldSrc (1998) | 8.128 m/s (320u) | 20.32 m/s² (800u) | 1.128 m (44.4u) | 4.0 | 10.0 | false | SNAP |
| Source (2004) | 4.826 m/s (190u, Sprint 320u) | 15.24 m/s² (600u) | 0.533 m (21.0u) | 4.0 | 10.0 | false | SMOOTH |
Unit Conversion Helpers
Source and Quake use inches (1 meter = 39.37 units):
meters = SUCCConfig.source_units(320.0_f32) # => 8.128_f32
meters = SUCCConfig.quake_units(800.0_f32) # => 20.32_f32
units = SUCCConfig.to_source_units(1.829_f32) # => 72.0_f32
Signals & States
Signals on SUCC
movement_state_changed(old_state : SUCC::MovementState, new_state : SUCC::MovementState)game_state_changed(old_state : SUCC::GameState, new_state : SUCC::GameState)jumped()landed(impact_speed : Float64)camera_mode_changed(mode : SUCC::CameraMode)
Enums on SUCC
SUCC::MovementState:IDLE,WALKING,SPRINTING,CROUCHING,FALLING,SURFINGSUCC::GameState:PLAYING,PAUSED,MENU,CUTSCENESUCC::CameraMode:FIRST_PERSON,THIRD_PERSONSUCC::FloorType:NONE,GROUND,RAMP
Development & Testing
# Run Crystal unit specs
crystal spec
# Build the GDExtension shared library
lapis build
Credits & License
- Original GDScript Addon (SUCC): Created by bearlikelion (Mark Arneman) & Nerdiful (MIT License).
- Crystal / Lapis Port (succ-cr): Ported by Ian Rash (Sol-Vin) (MIT License).
See LICENSE for full license text.
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.1.11- Tagged
- Nov 7, 2026
- Commit
8976cf1ccec8- Indexed
- not yet
Dependents
No indexed shard depends on this one yet.
Repository
github.com/sol-vin/succ-cr
Metadata
- Created
- Oct 19, 2026
- Updated
- Nov 9, 2026
- Synced
- Nov 9, 2026
- Versions
- 7