> ## Documentation Index
> Fetch the complete documentation index at: https://docs.summerengine.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crafty Singleton

> Platform entrypoint for multiplayer runtime features: lifecycle helpers, players, spawning, context checks, and subsystems.

## What Is `Crafty`?

`Crafty` is the autoload singleton exposed by the SDK.

Use it for platform-level operations that are not tied to one player object.

## `Crafty` vs Player Object

* Use `Crafty` for match-wide actions (timer, announcements, spawning, subsystem access).
* Use the player object (`CraftyPlayer` or `CraftyCharacter3D`) for per-player synced state and input.

## Core Methods (Signatures)

```gdscript theme={null}
end_game() -> void
set_time_limit(seconds: float) -> void
get_time_remaining() -> float
get_players() -> Array
get_player_count() -> int
get_max_players() -> int
send_announcement(text: String) -> void
spawn_npc(scene: PackedScene, position: Vector3) -> CraftyNPC
spawn_object(scene: PackedScene, position: Vector3) -> CraftyObject
spawn_projectile(scene: PackedScene, origin: Vector3, direction: Vector3, speed: float) -> CraftyObject
is_server() -> bool
is_client() -> bool
```

## Match Flow

```gdscript theme={null}
Crafty.set_time_limit(300)
Crafty.send_announcement("Round started")

if Crafty.get_time_remaining() <= 0.0:
    Crafty.end_game()
```

## Players

```gdscript theme={null}
var players = Crafty.get_players()
var current = Crafty.get_player_count()
var max_players = Crafty.get_max_players()
```

## Announcements

```gdscript theme={null}
Crafty.send_announcement("Sudden death starts now!")
```

## Spawning

```gdscript theme={null}
var npc = Crafty.spawn_npc(npc_scene, Vector3(0, 0, 0))
var pickup = Crafty.spawn_object(pickup_scene, Vector3(2, 0, 2))
var projectile = Crafty.spawn_projectile(bullet_scene, origin, direction, 30.0)
```

## Runtime Context

```gdscript theme={null}
if Crafty.is_server():
    # scoring, persistence, win conditions
    update_game_state()
```

Use `is_server()` and `is_client()` to keep gameplay authority on the server.

## Subsystems

`Crafty` exposes optional subsystem handles:

* `Crafty.teams`
* `Crafty.score`
* `Crafty.data`
* `Crafty.economy`
* `Crafty.ui`
* `Crafty.audio`
* `Crafty.input`

See `/api-reference/crafty-sdk/subsystems-signals` for subsystem APIs.
