For the complete documentation index, see llms.txt. This page is also available as Markdown.

Roblox

If you've built games on Roblox, there are some key differences you'll need to know to get started on All Out!

If you’re coming from Roblox Studio + Lua, this page will help you translate your mental model to All Out + CSL (All Out’s scripting language).

The big differences (at a glance)

  • Entities + components (not Instances + Services): worlds are built out of entities in the Hierarchy, and behavior comes from adding components (built-in or scripted).

  • Multiplayer is “built in”: CSL is designed so most gameplay code can be written like singleplayer while the engine syncs relevant state.

  • Editor workflow is closer to “scene editing”: you place entities, tweak their components in the Inspector, and reuse groups via Prefabs.

  • CSL is statically typed: it will feel closer to Go/Odin than Lua. (See Getting Started with CSL.)

  • Gameplay transforms are 2D: position and scale use v2, rotation is one angle in degrees, and sprite layers control draw order.


Roblox → All Out cheat sheet

Roblox concept
All Out / CSL concept
Notes

Roblox Studio

All Out Editor

You launch it from the Creator Portal (see Launching The Editor).

Place / Experience

All Out Game project

Your local project folder includes a scripts directory for .csl files.

Explorer / Workspace

Hierarchy

The hierarchy shows all entities in the current world/scene.

Instance / Model / Part

Entity

“Folder-like” organization is done by parenting entities (see “Folders” in Hierarchy).

Properties window

Inspector

Where you edit entity/component fields and add components.

Attributes

Serialized component fields

Expose fields to the editor with @ao_serialize (example below).

CFrame / Vector3

2D entity transform

Position and scale are v2; rotation is one angle in degrees.

Clone()

Scene.instantiate

Load a Prefab_Asset, then instantiate it into the scene.

Model reuse

Prefabs

Linked instances preserve root properties, but component fields are not independent overrides (see Prefabs).

ProximityPrompt / ClickDetector

Interactable component

Add Interactable-derived component and implement can_use/on_interact (see Interactables).

Touched / Region3 / GetPartsInPart

Triggers / range queries

Use trigger callbacks for enter/exit behavior and Scene.get_all_components_in_range for broad sensing (see Navmesh & Collision).

Tools / abilities / mobile buttons

Abilities

Built-in mobile/PC friendly button UI + cooldown patterns (see Abilities).

DataStoreService

Save + JSON + economy systems

See Save System and JSON Serialization.

ScreenGui / GuiObjects

All Out UI system

See UI Fundamentals.


  1. Follow the “apple collection” walkthrough in Building a Basic Game.

  2. Skim CSL basics in Getting Started with CSL (especially ao_start, ao_update, and creating components).

  3. Learn how to attach your new components to world objects via the Inspector.


Scripting mental model (Lua → CSL)

In Roblox you often write a Script/LocalScript that finds objects (Workspace.Foo.Bar) and connects events. In All Out, you typically:

  • Write component classes in CSL (behavior).

  • Attach them to entities in the editor (or spawn entities and add components at runtime).

  • Store tunable values on the component with @ao_serialize (so you can tweak per-entity in the inspector).

Here’s a small example that feels like “a Script parented under an object”, but expressed as a CSL component:

Register the Coins currency during scene setup before depositing it. Global lifecycle procs such as ao_start and ao_update run in each scene simulation; they are not server-only. See Game/Frame Lifecycle.


Interactions you’ll recognize (and how they translate)

ProximityPrompt → Interactable

If you used ProximityPrompt.Triggered in Roblox, the closest equivalent is an Interactable-derived component. Start here:

“Touched” pickups / trigger zones

Roblox’s BasePart.Touched is a very common pattern for pickups, damage zones, and checkpoints. In All Out, add an enabled collider, set is_trigger, and assign on_trigger_start, on_trigger_stay, or on_trigger_end. The other collider is passed to the callback. A Movement_Agent is not required.

Use Scene.get_all_components_in_range when you need broad sensing or a distance check. Solid collision does not provide a general Roblox-style Touched callback.

See Navmesh & Collision.


Player actions (Tools / keybinds / mobile controls)

If you’re used to Roblox “tool” scripts or hand-rolled input + cooldown systems, use Abilities instead. They’re designed to work well on both mobile and PC with consistent UI.


Saving data (DataStoreService → Save system)

For persistence (currencies, unlocks, progression, cosmetics), start with:


UI (ScreenGui → All Out UI)

Roblox UI often starts with ScreenGui and Frame/TextButton hierarchies. In All Out, start here:

Draw player UI from that player's ao_late_update inside is_local_or_server().


Common porting gotchas for Roblox devs

  • No “workspace services” tree: don’t look for ReplicatedStorage/ServerScriptService equivalents—use the editor’s hierarchy + your project’s scripts folder.

  • Don’t guard gameplay with Game.is_server(): normal gameplay runs on the predicting client and authoritative server.

  • Prefab component fields aren’t independent overrides: unlink the instance or author another prefab when copies need different component values.

  • Think “components” instead of “tags”: where you’d use CollectionService tags, you’ll often add a marker/behavior component instead.

  • Remember the scene is 2D: use renderer layers instead of a Z transform.


Where to go next

Last updated