Especificaciones técnicas y de integración

La parte nerd,
en tablas.

Con qué están hechos nuestros juegos y páginas, cuánto pesan, cómo hablan con un RGS o un tracker, y qué llega a tu bandeja de entrada en la entrega. Cada tabla se copia como texto para tu documento de licitación o para tu CTO.

0librerías externas en los Originals
38.0–427.3KB por Original, medidos
6llamadas al RGS en Stake Engine
Chip escribiendo en una laptop
Juegos

HTML5, hecho primero para celulares.

Slots en WebGL, Originals en canvas puro. Ambos corren en cualquier navegador moderno, dentro de un frame en tu lobby.

Nada de Flash. Estamos en 2026.

Stack

SlotsTypeScript, WebGL con PixiJS 8, runtime de Spine 4.2 para los personajes y Effekseer para los efectos de partículas. Compilado con Vite.
OriginalsHTML, canvas 2D y WebAudio puros. Cero librerías de terceros.
MatemáticaSimulaciones en Python; para esa plataforma, el SDK matemático de Stake Engine y su optimizador.
Pipeline de arteSpine 4.2, Blender para props 3D, Krita y Figma para los UI kits.
AudioSets grabados y producidos para los slots; síntesis con WebAudio (sin archivos) para los Originals.

Pantallas y controles

DiseñosDesktop y celular, en vertical y horizontal. Un slot tiene su propio diseño vertical, no uno de escritorio apretado.
Pantalla más chicaDiseñado desde 375 px de ancho para arriba. Los Originals se revisan en 375×812 y 1366×768.
Áreas táctiles40 px como mínimo en los controles de los Originals.
TecladoEspacio para apostar, girar o cobrar; las teclas propias de cada juego están en sus reglas (dice: las flechas mueven el objetivo, X cambia encima/debajo, T activa el turbo).
InserciónCorre dentro de un iframe en tu lobby; el sonido arranca después del primer toque porque los navegadores exigen un gesto del usuario.

Navegadores soportados

Nuestro objetivo de pruebas. Si tu audiencia usa algo más viejo, dínoslo en el brief.

Matriz de pruebasLas versiones principales actual y anterior de Chrome, Safari (iOS y macOS), Firefox, Edge y Samsung Internet.
Los slots necesitanWebGL. Todos los celulares y navegadores de la matriz lo tienen.
Los Originals necesitanCanvas 2D. WebAudio para el sonido (el juego funciona igual sin él).
Las páginas también se prueban enLos navegadores in-app de las grandes apps sociales, porque ahí se abren los clics de los anuncios.

Peso: nuestros Originals, medidos

Medidos a partir de los archivos de este sitio cuando se generó esta página: de 38.0 KB a 427.3 KB por juego, sin contar las tipografías. El toolkit queda en caché después del primer juego.

JuegoCódigo de la página (gzip)Toolkit compartido (gzip)ImágenesTotal
Rocket Chip7.5 KB15.9 KB1 × WebP, 32.1 KB55.5 KB
Moonshot Limbo17.6 KB15.9 KB1 × WebP, 75.9 KB109.4 KB
Gem Mines5.2 KB15.9 KB2 × WebP, 79.0 KB100.2 KB
Neon Drop4.2 KB15.9 KB1 × WebP, 50.9 KB71.0 KB
Hyper Dice13.9 KB15.9 KB1 × WebP, 37.9 KB67.8 KB
Lucky Wheel13.2 KB15.9 KB1 × WebP, 47.5 KB76.6 KB
Neon Roulette22.0 KB15.9 KBSin WebP: SVG / CSS38.0 KB
Holo Scratch16.8 KB15.9 KB8 × WebP, 394.5 KB427.3 KB
Hi-Lo Heist13.0 KB15.9 KB1 × WebP, 47.5 KB76.4 KB
Star Keno11.4 KB15.9 KB1 × WebP, 50.9 KB78.3 KB
Sky Tower24.1 KB15.9 KB5 × WebP, 283.1 KB323.1 KB
Chip Flip12.2 KB15.9 KB3 × WebP, 213.0 KB241.1 KB
Chip & Deal19.8 KB15.9 KB2 × WebP, 152.3 KB188.0 KB
Jacks Royale18.4 KB15.9 KB1 × WebP, 47.5 KB81.8 KB

Peso: slots

PresupuestoSe acuerda por proyecto, en el brief, porque un slot de Spine con dos personajes y un slot con shaders de líquido son bichos distintos.
ReportesCada build viene con sus números reales: tamaño de la primera carga, tamaño total y tiempo de carga en un celular de gama media.
CargaEl audio sale en pares OGG + AAC para que cada navegador reciba un formato que pueda reproducir; las texturas, en atlas.

Sonido

SlotsLoop base, loop de la función, stingers, niveles de big win, sonidos de símbolos y de interfaz. Entregados en pares OGG + AAC (MP4).
OriginalsGenerado en código con WebAudio: cero archivos de audio.
Valores por defecto de los OriginalsEn silencio en modo miniatura. Si no, se activa después del primer toque; la elección de silencio del jugador se recuerda en el dispositivo.

Accesibilidad y comodidad

Modo calmaLos Originals tienen un interruptor que reduce las sacudidas de pantalla y los destellos; la elección se recuerda.
Movimiento reducidoNuestras páginas respetan la configuración de movimiento reducido del sistema.
LegibilidadNúmeros grandes y multiplicadores de alto contraste; cada resultado también se muestra como texto (el multiplicador, o un simple “¡Boom!”), no solo como un destello de color.
ReglasUna pantalla de reglas con el RTP o la ventaja de la casa y la fórmula, a un toque de distancia.

Localización

TextoTodos los textos en archivos de idioma (JSON), sin texto incrustado en las imágenes.
Números y monedaFormateados según el locale: comas decimales, posición del símbolo de moneda, decimales de cripto.
Modos de redacciónLos juegos de Stake Engine cambian entre la redacción de casino y la de social / sweepstakes.
De derecha a izquierdaSe cotiza por proyecto.
Stake Engine

Entran books, salen eventos.

Cómo habla nuestro cliente con el RGS de Stake Engine. El mismo flujo que usamos en nuestro slot en vivo.

Parámetros de lanzamiento que lee el cliente

Se leen una vez de la barra de direcciones al arrancar. Los valores de ejemplo son marcadores.

ParámetroEjemploSignificado
sessionIDabc123…La sesión que el RGS emitió para este jugador.
rgs_urlrgs.example.comCon qué host del RGS hablar.
langenIdioma de la interfaz.
currencyUSDMoneda que se muestra (los replays no tienen wallet, así que la toman de aquí).
socialtrueRedacción de social / sweepstakes en lugar de la de casino.
replaytrueReproducir una ronda (con game, version, mode, event).

Llamadas al RGS, en el orden de la ronda

Las llamadas que hace nuestro cliente de Stake Engine. El dinero es un entero: 1 000 000 unidades = 1.00.

LlamadaCuándoQué pasa
POST /wallet/authenticateAl cargarAbre la sesión. Devuelve el saldo, los niveles de apuesta, los modos de juego con sus multiplicadores de costo y los flags de jurisdicción.
POST /wallet/playApuestaEnvía el modo + el monto. El RGS debita monto × multiplicador de costo, elige un book y devuelve la ronda: el multiplicador de pago y los eventos del book.
POST /bet/eventDurante la animaciónRegistra hasta dónde vio el jugador, para que una ronda interrumpida pueda retomarse.
POST /wallet/end-roundRonda mostradaLiquida una ronda ganadora y acredita el pago. Las rondas perdedoras ya están cerradas.
POST /wallet/balanceEn cualquier momentoSaldo actual.
GET /bet/replay/{game}/{version}/{mode}/{event}ReplaysDevuelve los eventos de un book para un link de replay.

Una ronda, del lado del front-end

Simplificado de nuestro cliente. El navegador nunca decide un resultado; anima los eventos del book que eligió el RGS.

// 1. abrir la sesión
const auth = await rgs('/wallet/authenticate', { sessionID });
const { betLevels, gameModes, jurisdiction } = auth.config;   // respetar los flags

// 2. apuesta: el RGS debita amount × costMultiplier y elige un book
const { round } = await rgs('/wallet/play', { sessionID, mode: 'BASE', amount: 1_000_000 }); // 1.00

// 3. animar los eventos del book (revelado, tumbles, premios, giros gratis…)
for (const ev of round.state) {
  await animate(ev);
  rgs('/bet/event', { sessionID, event: String(ev.index) });   // punto de reanudación
}

// 4. liquidar una ronda ganadora
if (round.active) await rgs('/wallet/end-round', { sessionID });

Flags de jurisdicción que el cliente debe respetar

Los envía el RGS en authenticate. Un solo build sirve a todos los mercados; los flags activan o desactivan funciones según la jurisdicción.

socialCasinoRedacción de social / sweepstakes.
disabledTurbo, disabledSuperTurboOcultar los controles de velocidad.
disabledAutoplaySin autoplay.
disabledBuyFeatureOcultar las compras de bono.
disabledSlamstop, disabledSpacebar, disabledFullscreenQuitar esos campos.
displayRTP, displayNetPosition, displaySessionTimerMostrar el RTP, la posición neta o un temporizador de sesión.
minimumRoundDurationNunca terminar una ronda más rápido que esto.

Lo que entregamos para Stake Engine

MatemáticaCódigo del juego en el SDK matemático, archivos de publicación (books + tablas de consulta) para cada modo de apuesta, estadísticas por modo.
Front-endUn build estático listo para subir, más el código fuente.
RevisiónDetalles del juego para los revisores: reglas, funciones, modos de apuesta, RTP, premio máximo.
QAUna demo con dinero ficticio que corre el cliente real contra un sustituto local del RGS con una parte de los books reales, replays incluidos.
Matemática

Números que puedes volver a correr.

Qué contiene el paquete matemático y las fórmulas detrás de nuestros Originals.

Entregables matemáticos

EntregableFormatoQué te dice
Par sheetHoja de cálculoTabla de pagos, tiras de rodillos o pesos, RTP desglosado entre juego base y funciones.
Informe de simulaciónPDF / MarkdownRTP, hit rate, frecuencia de funciones, frecuencia del premio máximo, desviación estándar y distribución de premios, por modo de apuesta.
Código de simulaciónPythonVuelve a correrlo tú mismo. Misma semilla, mismos números.
Rodillos / booksEl formato de tu plataformaLo que realmente lee el servidor del juego.
Texto de reglasTextos en JSONRTP y premio máximo por modo, coherentes con el informe.

Ejemplo: Vampir: Graveyard Shift, modos de apuesta

De nuestro diseño de juego y especificación matemática. La ficha completa está en las fichas de juego.

ModoCostoRTPPremio máximo
Juego base1×96.50%25,000×
Night Owl (enhancer)2×96.50%25,000×
Graveyard Shift (compra)100×96.50%25,000×
Overtime Shift (compra)300×96.50%25,000×
Blood Moon Shift (compra)1,000×96.50%25,000×

Originals: las fórmulas que publicamos

Ventaja de la casa del 1% en las primeras nueve filas. En los builds de marca blanca, el 0.99 pasa a ser tu número.

Crash, limboP(el resultado llega a x) = 0.99 ÷ x
Dicemultiplicador = 99 ÷ probabilidad de ganar (%)
Minespago después de k gemas con m minas = 0.99 × C(25,k) ÷ C(25−m,k)
Hi-Lopago por acierto = 0.99 ÷ probabilidad de la apuesta
Towerpago después de f pisos = 0.99 × (puertas ÷ puertas seguras)f
Coin flippago después de n aciertos = 0.99 × 2n
Ruleta de premioslos multiplicadores de los S segmentos suman 0.99 × S, así que cada ruleta devuelve exactamente 99%
Kenocada una de las 30 tablas de pagos calculada para que Σ P(aciertos) × pago = 0.99
Plinkotablas de pagos escaladas al 99% antes del redondeo para mostrarse
Blackjack0.44% de ventaja con estrategia básica perfecta (6 mazos, el crupier se planta en 17 suave, 3:2)
Video pókerJacks or Better 9/6: 99.54% con 5 monedas y retenciones óptimas
RuletaEuropea de un solo cero: cada apuesta paga 36 ÷ números cubiertos, así que 36/37 = 97.30%
Entrega

Lo que llega a tu bandeja de entrada.

Las carpetas, los archivos y la llamada del final.

Nada sale como “final_v7_REAL.zip”. Tenemos estándares.

Entrega de un juego, carpeta por carpeta

Slot a medida. Los trabajos de marca blanca reciben la parte que necesitas para desplegar y poner tu skin.

game-name/
├─ build/            # archivos estáticos, listos para desplegar o subir
├─ src/              # código fuente del front-end + scripts de build
├─ math/             # modelo, código de simulación, rodillos o books, archivos de publicación
│  └─ reports/       # informe de simulación por modo de apuesta
├─ art/              # fuentes por capas, proyectos de Spine, atlas, exportaciones
├─ audio/            # masters WAV, stems, archivos OGG + AAC del juego, cue sheet
├─ store-media/      # tiles, portadas, banners en los tamaños de tu lobby
└─ docs/             # GDD, texto de reglas, notas de integración, lista de licencias

Checklist de entrega

BuildBuild desplegable, probado en la matriz de navegadores acordada.
Código fuenteRepositorio con historial e instrucciones de build en el README.
MatemáticaInforme por modo + el código para reproducirlo.
RecursosFuentes de cada imagen y cada sonido, con una lista de licencias.
DocumentaciónReglas, notas de integración, limitaciones conocidas.
LlamadaUn recorrido con tu equipo, grabado si quieres.
Landings

Estáticas, rápidas, editables.

Páginas que cargan antes de que el visitante cambie de opinión, y que puedes editar sin llamarnos.

Stack de las páginas

CódigoHTML estático, un archivo CSS y un archivo JS chico en vanilla. Sin framework, sin page builder.
ImágenesWebP, al tamaño del espacio que ocupan; video solo donde justifica su peso.
TipografíasUna o dos familias, o las tipografías del sistema cuando la velocidad es lo que más importa.
FormulariosSolo si la oferta lo necesita; si no, el botón va directo a la oferta.

Objetivos de rendimiento

LCP≤ 2.5 s Umbral de “bueno” de Google
INP≤ 200 ms Umbral de “bueno” de Google
CLS≤ 0.1 Umbral de “bueno” de Google
Lighthouse (celular)90+ en rendimiento, accesibilidad, buenas prácticas y SEO Nuestro objetivo, revisado antes de la entrega

Peso: nuestras páginas de demo, medidas

Solo código: el HTML y el CSS y JS que carga, con gzip, medidos a partir de los archivos cuando se generó esta página. Fuentes, imágenes y video van aparte. Un rango cubre todas las páginas de una misma plantilla.

Hosting

Tu dominio, tu hostingTe mandamos un zip. Súbelo a cualquier hosting estático, CDN o servidor.
Nuestra configuraciónLa montamos en un CDN rápido y tú apuntas un (sub)dominio hacia ella con un CNAME. Los archivos siguen siendo tuyos.
Alojada en el trackerFunciona como lander dentro de Keitaro, Binom y similares: son solo archivos estáticos.

Cambio de geo e idioma

CómoUn solo build. El contenido de cada mercado vive en un archivo de datos chico; la página lo elige según un parámetro de la URL (?geo=de), un token del tracker o el header de geo del hosting.
Qué cambiaIdioma, moneda, redacción del bono, TyC, textos de licencia y de juego responsable, logos de pago.
Qué nunca cambiaLo que ve un revisor frente a un usuario del mismo mercado. Eso sería cloaking.

Guía de edición (incluida)

Link de la ofertaUn solo lugar al principio del config. Todos los botones lo leen.
Texto y términos del bonoTexto simple en el mismo config, por mercado.
ImágenesCambia el archivo y mantén el nombre y el tamaño.
Textos legalesPor mercado, junto al texto del bono.
Qué no tocarMarcado en el README, con el motivo.

Zip de la landing page

Lo que recibes por una página.

offer-page/
├─ index.html
├─ assets/
│  ├─ page.css
│  ├─ page.js        # paso de parámetros de tracking, cambio de geo/idioma
│  └─ img/           # WebP, al tamaño de su espacio
├─ config.js         # link de la oferta, texto del bono, TyC, textos legales por mercado
└─ README.md         # guía de edición
Tracking

Cada clic, contabilizado.

Paso de parámetros, postbacks, píxeles y consentimiento: la parte aburrida, bien hecha.

Si tu tracker muestra {clickid} en un reporte, alguien se equivocó con una llave. No fuimos nosotros.

Parámetros que pasamos

Todo lo que llega en la URL de la página se agrega al link de la oferta. Cámbiales el nombre para que coincidan con tu tracker.

clickid (o el nombre que use tu tracker)Vincula la conversión con el clic.
sub1 … sub5El desglose por campaña, creativo y ubicación.
utm_source, utm_medium, utm_campaign, utm_content, utm_termAtribución de la analítica.
gclid, fbclid, ttclidClick IDs de las plataformas de anuncios, conservados cuando vienen.

El paso de parámetros: todo el truco

Cada link marcado con data-offer recibe los parámetros entrantes.

// copiar los parámetros de la URL entrante (clickid, sub1…sub5, utm_*) en cada link de oferta
const incoming = new URLSearchParams(location.search);
document.querySelectorAll('a[data-offer]').forEach(a => {
  const url = new URL(a.href);
  incoming.forEach((value, key) => url.searchParams.set(key, value));
  a.href = url.toString();
});

Plantilla de postback (ejemplo)

Se configura en el panel del operador o de la red, apuntando a tu tracker. Los marcadores entre llaves los completa quien envía; los nombres cambian según la plataforma.

https://tracker.example.com/postback?cid={clickid}&payout={payout}&status={status}&txid={transaction_id}

Píxeles y consentimiento

SoportadosMeta, TikTok, etiqueta de Google (GA4 / Ads) y otros a pedido.
ConversionesLas dispara tu operador o tu red de servidor a servidor (postback). La landing page solo registra visitas y clics.
ConsentimientoUn banner de consentimiento donde el mercado lo exige, con las etiquetas esperando el consentimiento.
PesoCada etiqueta cuesta velocidad; agregamos las que de verdad vas a usar.
Anuncios jugables

Archivo chico, gran toque.

Anuncios HTML5 de un solo archivo que respetan la especificación de la red y las reglas de juego.

Primero, revisa la política. Muchas redes publicitarias restringen los anuncios de apuestas según el mercado, exigen aprobación previa o directamente no aceptan playables para ellos. Revisamos tus redes antes del storyboard.

Especificaciones del anuncio jugable

ArchivoUn archivo HTML. Imágenes, sonido y código incrustados; sin solicitudes externas.
Límite de pesoNormalmente de 2 a 5 MB según la red; algunas piden menos. Rango de la industria. Revisa siempre la especificación vigente de cada red.
OrientaciónVertical y horizontal, se ajusta en vivo.
DuraciónUnos segundos de juego y luego la end card. Lo típico: bastante menos de un minuto.
SonidoArranca en silencio; se activa después del primer toque.
Llamado a la acciónA través de MRAID (mraid.open) o del método propio de la red; nunca un redirect directo.
ComportamientoSin redirección automática, sin diálogos falsos del sistema, sin botones de cerrar falsos.

Lo básico de MRAID

Espera al contenedor, abre los links a través de él y vuelve a un link normal cuando no hay MRAID.

function cta(url) {
  if (window.mraid && typeof mraid.open === 'function') mraid.open(url);
  else window.open(url, '_blank');
}
function boot() { /* arrancar el juego cuando el contenedor del anuncio esté listo */ }
if (window.mraid) {
  if (mraid.getState() === 'loading') mraid.addEventListener('ready', boot);
  else boot();
} else boot();
Chip dormido en el trabajo

Nada para .

Ningún bloque de especificaciones coincidió, así que Chip se echó una siesta. Prueba con “MRAID”, “postback”, “Safari” o “RGS”.

¿Necesitas una especificación que no está en la lista?

Mándanos la documentación de tu plataforma o tu lista de redes. Te respondemos por escrito qué encaja y qué no.