> For the complete documentation index, see [llms.txt](https://docs.allout.game/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.allout.game/all-out-docs/docs-es/si-vienes-de-otras-herramientas/roblox.md).

# Roblox

Si vienes de Roblox Studio + Lua, esta página te ayudará a traducir tu modelo mental a All Out + CSL (el lenguaje de scripting de All Out).

### Las diferencias principales (de un vistazo)

* **Entidades + componentes (no Instances + Services)**: los mundos se construyen a partir de entidades en el [Jerarquía](/all-out-docs/docs-es/uso-del-editor/hierarchy.md), y el comportamiento proviene de añadir componentes (integrados o programados).
* **Multijugador está “integrado”**: CSL está diseñado para que la mayor parte del código de gameplay pueda escribirse como singleplayer mientras el motor sincroniza el estado relevante.
* **El flujo de trabajo del editor está más cerca de “editar escenas”**: colocas entidades, ajustas sus componentes en el [Inspector](/all-out-docs/docs-es/uso-del-editor/inspector.md), y reutilizas grupos mediante [Prefabs](/all-out-docs/docs-es/uso-del-editor/prefabs.md).
* **CSL está tipado estáticamente**: se sentirá más parecido a Go/Odin que a Lua. (Ver [Primeros pasos con CSL](/all-out-docs/docs-es/programacion/syntax.md).)
* **Las transformaciones de gameplay son 2D**: la posición y la escala usan `v2`, la rotación es un solo ángulo en grados, y las capas de sprites controlan el orden de dibujo.

***

### Chuleta de Roblox → All Out

| Concepto de Roblox                           | Concepto de All Out / CSL                  | Notas                                                                                                                                                                                                                                    |
| -------------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Roblox Studio**                            | **All Out Editor**                         | Lo inicias desde el Creator Portal (ver [Iniciando el editor](/all-out-docs/docs-es/primeros-pasos/first-game.md)).                                                                                                                      |
| **Lugar / Experiencia**                      | **Proyecto de juego de All Out**           | La carpeta local de tu proyecto incluye un directorio `scripts` para `.csl` archivos.                                                                                                                                                    |
| **Explorador / Espacio de trabajo**          | **Jerarquía**                              | La jerarquía muestra todas las entidades en el mundo/escena actual.                                                                                                                                                                      |
| **Instancia / Modelo / Parte**               | **Entidad**                                | La organización “tipo carpeta” se hace poniendo entidades como padre (ver “Carpetas” en [Jerarquía](/all-out-docs/docs-es/uso-del-editor/hierarchy.md)).                                                                                 |
| **Ventana de propiedades**                   | **Inspector**                              | Donde editas los campos de la entidad/componente y añades componentes.                                                                                                                                                                   |
| **Atributos**                                | **Campos de componente serializados**      | Expón campos al editor con `@ao_serialize` (ejemplo abajo).                                                                                                                                                                              |
| **CFrame / Vector3**                         | **Transformación 2D de la entidad**        | La posición y la escala son `v2`; la rotación es un solo ángulo en grados.                                                                                                                                                               |
| **Clone()**                                  | **`Scene.instantiate`**                    | Carga un `Prefab_Asset`, luego instáncialo en la escena.                                                                                                                                                                                 |
| **Reutilización de modelos**                 | **Prefabs**                                | Las instancias vinculadas conservan las propiedades raíz, pero los campos de componente no son sobrescrituras independientes (ver [Prefabs](/all-out-docs/docs-es/uso-del-editor/prefabs.md)).                                           |
| **ProximityPrompt / ClickDetector**          | **Componente interactuable**               | Añade `Interactable`-derivado e implementa `can_use`/`on_interact` (ver [Interactivos](/all-out-docs/docs-es/conceptos-basicos-del-motor/interactables.md)).                                                                             |
| **Touched / Region3 / GetPartsInPart**       | **Disparadores / consultas de rango**      | Usa callbacks de disparador para el comportamiento de entrada/salida y `Scene.get_all_components_in_range` para detección amplia (ver [Navmesh y colisión](/all-out-docs/docs-es/conceptos-basicos-del-motor/navmesh-and-collision.md)). |
| **Acciones / habilidades / botones móviles** | **Habilidades**                            | Interfaz de botón integrada compatible con móvil/PC + patrones de tiempo de reutilización (ver [Habilidades](/all-out-docs/docs-es/conceptos-basicos-del-motor/abilities.md)).                                                           |
| **DataStoreService**                         | **Sistemas de guardado + JSON + economía** | Ver [Sistema de guardado](/all-out-docs/docs-es/datos-y-persistencia/save.md) y [Serialización JSON](/all-out-docs/docs-es/datos-y-persistencia/json.md).                                                                                |
| **ScreenGui / GuiObjects**                   | **Sistema de UI de All Out**               | Ver [Fundamentos de UI](/all-out-docs/docs-es/ui/fundamentals.md).                                                                                                                                                                       |

***

### Tu primera hora (ruta recomendada)

1. Sigue el recorrido de “recolección de manzanas” en [Construyendo un juego básico](/all-out-docs/docs-es/primeros-pasos/testing-and-publishing.md).
2. Repasa lo básico de CSL en [Primeros pasos con CSL](/all-out-docs/docs-es/programacion/syntax.md) (especialmente `ao_start`, `ao_update`, y la creación de componentes).
3. Aprende a adjuntar tus nuevos componentes a objetos del mundo a través de la [Inspector](/all-out-docs/docs-es/uso-del-editor/inspector.md).

***

### Modelo mental de scripting (Lua → CSL)

En Roblox a menudo escribes un `Script`/`LocalScript` que encuentra objetos (`Workspace.Foo.Bar`) y conecta eventos. En All Out, normalmente:

* Escribes **clases de componentes** en CSL (comportamiento).
* Adjúntalas a entidades en el editor (o genera entidades y añade componentes en tiempo de ejecución).
* Almacena valores ajustables en el componente con **`@ao_serialize`** (para que puedas retocar por entidad en el inspector).

Aquí hay un pequeño ejemplo que se siente como “un Script parentado debajo de un objeto”, pero expresado como un componente CSL:

```go
import "core:ao"

// Adjunta este componente a una entidad en el editor.
Coin_Pickup :: class : Interactable {
    coins: s64 @ao_serialize;
    used: bool;

    ao_start :: method() {
        this.set_listener(this);
        this.set_text("Collect");
        radius = 1.25;
        required_hold_time = 0.0;
    }

    can_use :: method(player: Player) -> bool {
        return !used;
    }

    on_interact :: method(player: Player) {
        if used return;
        used = true;

        Economy.deposit_currency(player, "Coins", coins);
        entity.destroy();
    }
}
```

Registra la `moneda` durante la configuración de la escena antes de depositarla. Los procedimientos de ciclo de vida global como `ao_start` y `ao_update` se ejecutan en cada simulación de escena; no son solo del servidor. Ver [Ciclo de vida de juego/frame](/all-out-docs/docs-es/programacion/game-frame-lifecycle.md).

***

### Interacciones que reconocerás (y cómo se traducen)

#### ProximityPrompt → Interactable

Si usaste `ProximityPrompt.Triggered` en Roblox, el equivalente más cercano es un componente `Interactable`-derivado. Empieza aquí:

* [Interactivos](/all-out-docs/docs-es/conceptos-basicos-del-motor/interactables.md)

#### Recogibles / zonas de disparo de “Touched”

de Roblox `BasePart.Touched` es un patrón muy común para recogibles, zonas de daño y puntos de control. En All Out, añade un collider habilitado, establece `is_trigger`, y asigna `on_trigger_start`, `on_trigger_stay`, o `on_trigger_end`. El otro collider se pasa al callback. Un `Movement_Agent` no es necesario.

Usa `Scene.get_all_components_in_range` cuando necesites detección amplia o una comprobación de distancia. La colisión sólida no proporciona un `Touched` callback genérico al estilo de Roblox.

Ver [Navmesh y colisión](/all-out-docs/docs-es/conceptos-basicos-del-motor/navmesh-and-collision.md).

***

### Acciones del jugador (Tools / binds de teclas / controles móviles)

Si estás acostumbrado a scripts de “tool” de Roblox o a sistemas de entrada + enfriamiento hechos a mano, usa **Habilidades** en su lugar. Están diseñadas para funcionar bien tanto en móvil como en PC con una UI consistente.

* [Habilidades](/all-out-docs/docs-es/conceptos-basicos-del-motor/abilities.md)

***

### Guardado de datos (DataStoreService → sistema de guardado)

Para persistencia (monedas, desbloqueos, progresión, cosméticos), empieza con:

* [Sistema de guardado](/all-out-docs/docs-es/datos-y-persistencia/save.md)
* [Serialización JSON](/all-out-docs/docs-es/datos-y-persistencia/json.md)
* [Economy](/all-out-docs/docs-es/datos-y-persistencia/economy.md)
* [Productos/datos entre juegos](/all-out-docs/docs-es/datos-y-persistencia/cross-game-products-data.md)

***

### UI (ScreenGui → UI de All Out)

La UI de Roblox a menudo empieza con `ScreenGui` y `Frame/TextButton` jerarquías. En All Out, empieza aquí:

* [Fundamentos de UI](/all-out-docs/docs-es/ui/fundamentals.md)
* [Inicio rápido de UIDoc](/all-out-docs/docs-es/ui/uidoc-quick-start.md)

Dibuja la UI del jugador desde el `ao_late_update` interior de ese jugador `is_local_or_server()`.

***

### Trampas comunes al portar para devs de Roblox

* **No hay árbol de “workspace services”**: no busques `ReplicatedStorage`/`ServerScriptService` equivalentes—usa la jerarquía del editor + la `scripts` carpeta de tu proyecto.
* **No protejas la jugabilidad con `Game.is_server()`**: la jugabilidad normal se ejecuta en el cliente que predice y en el servidor autoritativo.
* **Los campos de componente del prefab no son sobrescrituras independientes**: desvincula la instancia o crea otro prefab cuando las copias necesiten valores de componente distintos.
* **Piensa en “componentes” en lugar de “etiquetas”**: donde usarías etiquetas de CollectionService, a menudo añadirás en su lugar un componente marcador/de comportamiento.
* **Recuerda que la escena es 2D**: usa capas de renderizado en lugar de una transformación Z.

***

### Adónde ir después

* Construye tu primer juego: [Construyendo un juego básico](/all-out-docs/docs-es/primeros-pasos/testing-and-publishing.md)
* Aprende lo básico del editor: [Introducción/Vista de escena](/all-out-docs/docs-es/uso-del-editor/introduction-scene-view.md)
* Aprende lo básico de scripting: [Primeros pasos con CSL](/all-out-docs/docs-es/programacion/syntax.md)
* Aprende los bloques básicos de construcción del gameplay: [Interactivos](/all-out-docs/docs-es/conceptos-basicos-del-motor/interactables.md), [Inventario](/all-out-docs/docs-es/conceptos-basicos-del-motor/inventory.md), [Habilidades](/all-out-docs/docs-es/conceptos-basicos-del-motor/abilities.md)
