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.
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)
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
Crafty.set_time_limit(300)
Crafty.send_announcement("Round started")
if Crafty.get_time_remaining() <= 0.0:
Crafty.end_game()
Players
var players = Crafty.get_players()
var current = Crafty.get_player_count()
var max_players = Crafty.get_max_players()
Announcements
Crafty.send_announcement("Sudden death starts now!")
Spawning
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
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.