class_name SteamBootstrap extends RefCounted # Spacewar is Valve's development App ID. It is intentionally a development # default, never a public-server identity or discovery configuration. const SPACEWAR_APP_ID := 480 const APP_ID_ENV := "COSMIC_CLASH_STEAM_APP_ID" static func app_id() -> int: var configured := OS.get_environment(APP_ID_ENV).strip_edges() if configured.is_valid_int() and int(configured) > 0: return int(configured) return SPACEWAR_APP_ID static func is_runtime_available() -> bool: return OS.has_feature("steam") and ClassDB.class_exists("SteamMultiplayerPeer") and Engine.has_singleton("Steam") static func unavailable_reason() -> String: if not OS.has_feature("steam"): return "this export was not built with the steam feature" if not ClassDB.class_exists("SteamMultiplayerPeer"): return "SteamMultiplayerPeer is missing from this custom Godot build" if not Engine.has_singleton("Steam"): return "the GodotSteam Steam singleton is missing from this custom Godot build" return "Steam is unavailable" static func initialize() -> Dictionary: if not is_runtime_available(): return {"error": ERR_UNAVAILABLE, "reason": unavailable_reason()} var steam := Engine.get_singleton("Steam") # `steamInit` is deliberately called dynamically: stock Godot must be able # to parse and run this project without GodotSteam symbols installed. var result = steam.call("steamInit") if result is bool and result: return {"error": OK, "app_id": app_id()} if result is Dictionary and bool(result.get("status", false)): return {"error": OK, "app_id": app_id()} return {"error": ERR_CANT_CONNECT, "reason": "Steam initialization failed for App ID %d" % app_id()}