If you've built games with Unreal, there are some key differences you'll need to know to get started on All Out!
This guide is for Unreal Engine developers (Blueprints / C++) transitioning to All Out and CSL (All Out’s custom scripting language).
The big shift (mental model)
In Unreal you often think in terms of:
Actors in a World (spawned, replicated, owned)
Components attached to Actors
Blueprint graphs / C++ driving gameplay
RPC + Replication you author explicitly
In All Out you’ll usually think in terms of:
Entities in a Scene (with Components)
Components (engine-provided + your own CSL components)
Abilities for player actions (mobile-first UI + cooldown + aiming)
Server-authoritative gameplay where state sync is automatic (no custom RPC plumbing for most gameplay)
Quick mapping: Unreal → All Out / CSL
Unreal
All Out / CSL
Notes
UWorld / Level
Scene
Entities exist in the scene; you can also create/destroy them at runtime.
AActor
Entity
Entities have transforms and components.
UActorComponent
Component
You author gameplay by writing CSL components and attaching them to entities.
BeginPlay
ao_start
Component lifecycle entry point.
Tick(float DeltaTime)
ao_update(dt) / ao_late_update(dt)
Use late update for UI/input patterns used by the engine (e.g., ability buttons).
Blueprint graphs
CSL code
Text-based, compiled as part of your project.
Pawn/Character
Player_Base subclasses
Your player logic usually lives on a Player component/class.
Input mappings
Abilities + keybinds
Mobile-first: prefer ability buttons over raw input.
Replication (Replicated vars)
Automatic state sync
Avoid building your own replication/RPC patterns unless you truly need them.
RPCs (Server, Client, NetMulticast)
Usually not needed
Use engine facilities (e.g., notifications) instead of custom RPC sprawl.
Actor spawning
Scene.create_entity() / instantiate(Prefab_Asset)
Prefabs are assets and can be instantiated.
UAsset references
get_asset(...)
Assets live under /res and are referenced by path.
Your first CSL file (imports)
CSL uses a single “root” import pattern: import in main.csl, and don’t sprinkle imports across every file.
Entities & components (vs Actors & Components)
Creating an entity at runtime
Adding and accessing components
Writing a custom component (life cycle)
Iterating entities/components
Player actions: use Abilities (instead of raw input)
Unreal projects often start with input bindings (Enhanced Input) and then build UI/UX on top. In All Out, Abilities are the default way to implement player actions with:
A consistent mobile-friendly button UI
Cooldowns
Optional aiming (drag-to-aim on mobile, mouse aim on PC)
Draw ability buttons from Player.ao_late_update inside is_local_or_server():
If you’re used to Unreal’s overlap/hit callbacks (OnComponentBeginOverlap, OnHit), note that CSL gameplay often uses queries rather than event callbacks.
Common pattern: query nearby components and check distance: