Migrar desde CrazyGames

El shim de CrazyGames expone el SDK HTML5 v3 de CrazyGames (window.CrazyGames.SDK) sobre Gamealia. A la mayoría de los juegos les alcanza con cambiar una etiqueta de script.

1. Cambiá el script

<!-- antes -->
<script src="https://sdk.crazygames.com/crazygames-sdk-v3.js"></script>
<!-- después -->
<script src="https://gamealia.app/sdk/crazygames.js"></script>

gamealia init --write (o gamealia_integrate_sdk) lo hace por vos, y el prompt del MCP migrate-from-crazygames guía a tu asistente por toda la migración. El shim incluye el SDK de Gamealia, así que window.Gamealia también está: podés pasar las llamadas de a una.

Las versiones viejas del SDK (v1, v2) no están cubiertas: pasá esas llamadas a v3 o al SDK de Gamealia (la integración te deja un TODO). Si importás @crazygames/crazygames-sdk desde npm, cargá el shim con una etiqueta de script.

2. Revisá las políticas

CrazyGames permite cosas que Gamealia no: sacá las compras dentro del juego (Xsolla), las ofertas para "quitar anuncios", otras redes de anuncios y tu login propio. Mirá los requisitos del juego.

Equivalencias

SDK v3 de CrazyGamesEn Gamealia
SDK.init()Gamealia.init(), y carga los datos guardados para SDK.data
SDK.environment, getEnvironment()siempre "crazygames", así tus condiciones existentes siguen andando
SDK.game.loadingStart() / loadingStop()Gamealia.game.loadingStart() / loadingStop()
SDK.game.sdkGameLoadingStart() / sdkGameLoadingStop()igual que arriba
SDK.game.gameplayStart() / gameplayStop()Gamealia.game.gameplayStart() / gameplayStop()
SDK.game.happytime()Gamealia.game.happyTime()
SDK.ad.requestAd("midgame", callbacks)Gamealia.ad.requestMidgame(); adStarted y después adFinished, o adError con código unfilled
SDK.ad.requestAd("rewarded", callbacks)Gamealia.ad.requestRewarded(); adFinished solo si hubo recompensa
SDK.ad.hasAdblocksiempre false
SDK.banner.*no hacen nada e informan éxito (el portal muestra su propio banner)
SDK.game.inviteLink(params)el mismo link del portal que Gamealia.room.inviteLink(code) (/game/<slug>?room=<code>). El código es roomId, roomName, room, id o code (si no, el primer parámetro) y debe tener 1-32 de A-Z a-z 0-9 _ -; los demás parámetros no viajan. "" antes de que resuelva init() o con un código inválido
SDK.game.showInviteButton(params)Gamealia.room.showInvite(code); devuelve el link
SDK.game.getInviteParam(key) / inviteParamspara un jugador que entró desde un link: el código de sala en roomId, roomName y room
SDK.game.settings.muteAudio, addSettingsChangeListener(cb)sigue el mute / unmute del portal (anuncios, pestaña oculta, botón de silencio); los listeners reciben la configuración nueva
SDK.game.addJoinRoomListener(cb)el evento roomJoin, como { roomId }
SDK.user.getUser()Gamealia.user.get() como { __dangerousUserId, username, profilePictureUrl }
SDK.user.getUserToken()Gamealia.user.getToken() ("" para invitados); verificalo con el JWKS de Gamealia, mirá Cuentas de jugador
SDK.user.showAuthPrompt()Gamealia.user.requestLogin()
SDK.user.addAuthListener(cb)Gamealia.user.onChange()
SDK.user.isUserAccountAvailabletrue
SDK.user.getSystemInfo(), systemInfoidioma y dispositivo de Gamealia; countryCode siempre es "US"
SDK.data.getItem/setItem/removeItem/clearGuardado en la nube; los valores se guardan como texto, igual que en localStorage
SDK.user.listFriends()una lista vacía
SDK.user.showAccountLinkPrompt(){ response: "no" }
SDK.store.isAvailablefalse (no hay compras en v1)
SDK.user.getXsollaUserToken()null, con un aviso
SDK.user.submitScore, game.reportGameCompletedPercentage, game.setGameContext, game.clearGameContext, game.updateRoom, game.leftRoom, analytics.trackOrder, game.hideInviteButtonse aceptan y se ignoran (un aviso en la consola cada uno)

SDK.data.getItem lee de una copia que se carga durante SDK.init(): esperá a init() antes de leer.

Tu backend

Si tu servidor verificaba tokens de CrazyGames, pasalo a los de Gamealia: ES256 con el JWKS de Gamealia y sub como id del jugador. Mirá Cuentas de jugador.