Skip to main content

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 Are Subsystems?

Subsystems are optional tools. Use only what your game needs. This is the core platform framing:
  • your game logic stays yours,
  • Crafty subsystems provide multiplayer/platform primitives.

Teams

Crafty.teams.create("red", {"color": Color.RED, "max_size": 4})
Crafty.teams.create("blue", {"color": Color.BLUE, "max_size": 4})
Crafty.teams.assign(player, "red")
var team = Crafty.teams.get_team(player)
var members = Crafty.teams.get_members("red")
Crafty.teams.auto_balance()
Methods:
  • create(team_id: String, config: Dictionary) -> void
  • assign(player, team_id: String) -> bool
  • remove_player(player) -> void
  • get_team(player) -> String
  • get_members(team_id: String) -> Array
  • auto_balance() -> void

Score

Crafty.score.add(player, 1)
Crafty.score.set_score(player, 12)
var score = Crafty.score.get_score(player)
var leaderboard = Crafty.score.get_leaderboard()
Crafty.score.add_team("red", 2)
var team_score = Crafty.score.get_team("red")
Methods:
  • add(player, points: int) -> void
  • set_score(player, points: int) -> void
  • get_score(player) -> int
  • get_leaderboard() -> Array
  • add_team(team_id: String, points: int) -> void
  • get_team(team_id: String) -> int

Data

Persistent player data:
Crafty.data.save(player, "level", 5)
var level = Crafty.data.load(player, "level")
var all_data = Crafty.data.load_all(player)
Crafty.data.delete(player, "legacy_key")
Methods:
  • save(player, key: String, value: Variant) -> void
  • load(player, key: String) -> Variant
  • load_all(player) -> Dictionary
  • delete(player, key: String) -> void

Economy

var awarded = await Crafty.economy.award(player, 5, "match_win")
var spent = await Crafty.economy.spend(player, 3, "buy_hint")
var balance = await Crafty.economy.get_balance(player)
var can_pay = await Crafty.economy.has_balance(player, 10)
Methods:
  • get_balance(player) -> int
  • award(player, amount: int, reason: String) -> bool
  • spend(player, amount: int, reason: String) -> bool
  • has_balance(player, amount: int) -> bool

UI

Crafty.ui.show_scoreboard()
Crafty.ui.hide_scoreboard()
Crafty.ui.show_timer(60)
Crafty.ui.show_announcement("Final minute!", 3.0)
Crafty.ui.show_kill_feed(killer, victim)
Optional helper UI. Creators can still build fully custom UI.

Audio

Crafty.audio.play_at(sound, Vector3(0, 1, 0))
Crafty.audio.play_global(sound)
Crafty.audio.play_for(player, sound)

Input

Crafty.input and per-player player.input provide server-readable control state. Use server-authoritative checks for outcomes.

Signals (Gameplay Events)

Connect game logic to platform gameplay signals:
Crafty.player_killed.connect(_on_player_killed)
Crafty.player_damaged.connect(_on_player_damaged)
Crafty.player_respawned.connect(_on_player_respawned)
Crafty.timer_expired.connect(_on_timer_expired)
Crafty.object_collected.connect(_on_object_collected)
Crafty.npc_killed.connect(_on_npc_killed)
Crafty.return_to_hub_requested.connect(_on_return_to_hub_requested)
Crafty.play_again_requested.connect(_on_play_again_requested)
Available signals:
  • player_killed
  • player_damaged
  • player_respawned
  • timer_expired
  • object_collected
  • npc_killed
  • return_to_hub_requested
  • play_again_requested

Production Notes

  • Connect/disconnect signals in predictable lifecycle points.
  • Keep score/data/economy mutations on server paths.
  • Treat UI/audio helpers as optional convenience, not hard dependencies.