Godot 4 (web)

El addon de Godot agrega un autoload Gamealia que llama al SDK de JavaScript con JavaScriptBridge. Godot 4.3 o más nuevo, exportación Web.

Instalación

  1. Corré gamealia init --write en la carpeta del proyecto de Godot (o pedíselo a tu asistente), que copia addons/gamealia/. O copiá esa carpeta a mano.
  2. Activá Gamealia en Project → Project Settings → Plugins. Eso registra el autoload Gamealia.
  3. En Project → Export → Web → HTML → Head Include, agregá:

    <script src="https://gamealia.app/sdk/v1.js"></script>
  4. Exportá para Web y subí la carpeta de la exportación, con la página exportada renombrada a index.html. Una exportación con hilos (SharedArrayBuffer) necesita el aislamiento de la ficha en coop-coep.

Uso

Las llamadas que devuelven un valor son corrutinas: usá await.

func _ready() -> void:
	Gamealia.ad_started.connect(func(): get_tree().paused = true)
	Gamealia.ad_finished.connect(func(_r): get_tree().paused = false)
	Gamealia.paused.connect(func(): get_tree().paused = true)
	Gamealia.resumed.connect(func(): get_tree().paused = false)

	var info := await Gamealia.init()
	# info.locale: "es", "en", ...
	var save := await Gamealia.data_load()
	if save.ok:
		progress = save.data.get("progress", {})
	# si no: no se pudo leer la partida; no la pises
	Gamealia.loading_stop()          # obligatorio, cuando el juego ya se puede jugar

func start_level() -> void:
	Gamealia.gameplay_start()

func game_over() -> void:
	Gamealia.gameplay_stop()
	await Gamealia.request_midgame()
	show_game_over()

func watch_ad_for_life() -> void:
	var ad := await Gamealia.request_rewarded()
	if ad.rewarded:
		lives += 1

Hay un ejemplo completo en sample/main.gd del addon.

API

GDScriptJavaScript
init() -> Dictionary, init_result, locale, environment, device, señal init_done(result)init()
is_available() -> boolla página cargó el SDK
loading_start(), loading_stop(), gameplay_start(), gameplay_stop(), happy_time()game.*
request_midgame(), request_rewarded() → {kind, shown, rewarded}; señales ad_started, ad_finished(result)ad.*
get_user() (Dictionary o null), get_token() ("" para invitados), request_login()user.*
data_load() → {ok, data, error}, data_get(key), data_set(key, value) -> bool, data_remove(key), data_clear()data.*
get_join_code() -> String, invite_link(code), show_invite(code), publish_room(room), unpublish_room()room.*
set_presence(text)presence.setStatus()
señales paused, resumed, muted, unmuted, user_changed(user), room_join(code)on(event)
  • Audio: con auto_mute_audio (por defecto true) el bus Master se silencia mientras se muestra un anuncio.
  • Partidas: los valores son JSON, así que los números vuelven como float. 1 MB por jugador y juego.
  • Salas: publish_room recibe un Dictionary con code, name, players, max e inProgress.

Fuera de la web

En el editor, en exportaciones de escritorio o celular y en una página web sin el SDK, todas las llamadas funcionan en local: init() devuelve environment: "mock", los anuncios devuelven "no se mostró" y los datos se guardan en user://gamealia_data.json.

Fallas comunes del autotest

  • sdk_loaded: falta el Head Include.
  • entry: la página exportada no se llama index.html, o subiste la carpeta de arriba.
  • engine_integrity: tienen que estar todos los archivos .js, .wasm y .pck de la exportación.