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.

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
| Slots | TypeScript, WebGL con PixiJS 8, runtime de Spine 4.2 para los personajes y Effekseer para los efectos de partículas. Compilado con Vite. |
|---|---|
| Originals | HTML, canvas 2D y WebAudio puros. Cero librerías de terceros. |
| Matemática | Simulaciones en Python; para esa plataforma, el SDK matemático de Stake Engine y su optimizador. |
| Pipeline de arte | Spine 4.2, Blender para props 3D, Krita y Figma para los UI kits. |
| Audio | Sets grabados y producidos para los slots; síntesis con WebAudio (sin archivos) para los Originals. |
Pantallas y controles
| Diseños | Desktop y celular, en vertical y horizontal. Un slot tiene su propio diseño vertical, no uno de escritorio apretado. |
|---|---|
| Pantalla más chica | Diseñado desde 375 px de ancho para arriba. Los Originals se revisan en 375×812 y 1366×768. |
| Áreas táctiles | 40 px como mínimo en los controles de los Originals. |
| Teclado | Espacio 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ón | Corre 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 pruebas | Las versiones principales actual y anterior de Chrome, Safari (iOS y macOS), Firefox, Edge y Samsung Internet. |
|---|---|
| Los slots necesitan | WebGL. Todos los celulares y navegadores de la matriz lo tienen. |
| Los Originals necesitan | Canvas 2D. WebAudio para el sonido (el juego funciona igual sin él). |
| Las páginas también se prueban en | Los 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.
| Juego | Código de la página (gzip) | Toolkit compartido (gzip) | Imágenes | Total |
|---|---|---|---|---|
| Rocket Chip | 7.5 KB | 15.9 KB | 1 × WebP, 32.1 KB | 55.5 KB |
| Moonshot Limbo | 17.6 KB | 15.9 KB | 1 × WebP, 75.9 KB | 109.4 KB |
| Gem Mines | 5.2 KB | 15.9 KB | 2 × WebP, 79.0 KB | 100.2 KB |
| Neon Drop | 4.2 KB | 15.9 KB | 1 × WebP, 50.9 KB | 71.0 KB |
| Hyper Dice | 13.9 KB | 15.9 KB | 1 × WebP, 37.9 KB | 67.8 KB |
| Lucky Wheel | 13.2 KB | 15.9 KB | 1 × WebP, 47.5 KB | 76.6 KB |
| Neon Roulette | 22.0 KB | 15.9 KB | Sin WebP: SVG / CSS | 38.0 KB |
| Holo Scratch | 16.8 KB | 15.9 KB | 8 × WebP, 394.5 KB | 427.3 KB |
| Hi-Lo Heist | 13.0 KB | 15.9 KB | 1 × WebP, 47.5 KB | 76.4 KB |
| Star Keno | 11.4 KB | 15.9 KB | 1 × WebP, 50.9 KB | 78.3 KB |
| Sky Tower | 24.1 KB | 15.9 KB | 5 × WebP, 283.1 KB | 323.1 KB |
| Chip Flip | 12.2 KB | 15.9 KB | 3 × WebP, 213.0 KB | 241.1 KB |
| Chip & Deal | 19.8 KB | 15.9 KB | 2 × WebP, 152.3 KB | 188.0 KB |
| Jacks Royale | 18.4 KB | 15.9 KB | 1 × WebP, 47.5 KB | 81.8 KB |
Peso: slots
| Presupuesto | Se 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. |
|---|---|
| Reportes | Cada 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. |
| Carga | El audio sale en pares OGG + AAC para que cada navegador reciba un formato que pueda reproducir; las texturas, en atlas. |
Sonido
| Slots | Loop base, loop de la función, stingers, niveles de big win, sonidos de símbolos y de interfaz. Entregados en pares OGG + AAC (MP4). |
|---|---|
| Originals | Generado en código con WebAudio: cero archivos de audio. |
| Valores por defecto de los Originals | En 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 calma | Los Originals tienen un interruptor que reduce las sacudidas de pantalla y los destellos; la elección se recuerda. |
|---|---|
| Movimiento reducido | Nuestras páginas respetan la configuración de movimiento reducido del sistema. |
| Legibilidad | Nú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. |
| Reglas | Una pantalla de reglas con el RTP o la ventaja de la casa y la fórmula, a un toque de distancia. |
Localización
| Texto | Todos los textos en archivos de idioma (JSON), sin texto incrustado en las imágenes. |
|---|---|
| Números y moneda | Formateados según el locale: comas decimales, posición del símbolo de moneda, decimales de cripto. |
| Modos de redacción | Los juegos de Stake Engine cambian entre la redacción de casino y la de social / sweepstakes. |
| De derecha a izquierda | Se cotiza por proyecto. |
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ámetro | Ejemplo | Significado |
|---|---|---|
sessionID | abc123… | La sesión que el RGS emitió para este jugador. |
rgs_url | rgs.example.com | Con qué host del RGS hablar. |
lang | en | Idioma de la interfaz. |
currency | USD | Moneda que se muestra (los replays no tienen wallet, así que la toman de aquí). |
social | true | Redacción de social / sweepstakes en lugar de la de casino. |
replay | true | Reproducir 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.
| Llamada | Cuándo | Qué pasa |
|---|---|---|
POST /wallet/authenticate | Al cargar | Abre 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/play | Apuesta | Enví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/event | Durante la animación | Registra hasta dónde vio el jugador, para que una ronda interrumpida pueda retomarse. |
POST /wallet/end-round | Ronda mostrada | Liquida una ronda ganadora y acredita el pago. Las rondas perdedoras ya están cerradas. |
POST /wallet/balance | En cualquier momento | Saldo actual. |
GET /bet/replay/{game}/{version}/{mode}/{event} | Replays | Devuelve 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.
socialCasino | Redacción de social / sweepstakes. |
|---|---|
disabledTurbo, disabledSuperTurbo | Ocultar los controles de velocidad. |
disabledAutoplay | Sin autoplay. |
disabledBuyFeature | Ocultar las compras de bono. |
disabledSlamstop, disabledSpacebar, disabledFullscreen | Quitar esos campos. |
displayRTP, displayNetPosition, displaySessionTimer | Mostrar el RTP, la posición neta o un temporizador de sesión. |
minimumRoundDuration | Nunca terminar una ronda más rápido que esto. |
Lo que entregamos para Stake Engine
| Matemática | Có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-end | Un build estático listo para subir, más el código fuente. |
| Revisión | Detalles del juego para los revisores: reglas, funciones, modos de apuesta, RTP, premio máximo. |
| QA | Una demo con dinero ficticio que corre el cliente real contra un sustituto local del RGS con una parte de los books reales, replays incluidos. |
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
| Entregable | Formato | Qué te dice |
|---|---|---|
| Par sheet | Hoja de cálculo | Tabla de pagos, tiras de rodillos o pesos, RTP desglosado entre juego base y funciones. |
| Informe de simulación | PDF / Markdown | RTP, 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ón | Python | Vuelve a correrlo tú mismo. Misma semilla, mismos números. |
| Rodillos / books | El formato de tu plataforma | Lo que realmente lee el servidor del juego. |
| Texto de reglas | Textos en JSON | RTP 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.
| Modo | Costo | RTP | Premio máximo |
|---|---|---|---|
| Juego base | 1× | 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, limbo | P(el resultado llega a x) = 0.99 ÷ x |
|---|---|
| Dice | multiplicador = 99 ÷ probabilidad de ganar (%) |
| Mines | pago después de k gemas con m minas = 0.99 × C(25,k) ÷ C(25−m,k) |
| Hi-Lo | pago por acierto = 0.99 ÷ probabilidad de la apuesta |
| Tower | pago después de f pisos = 0.99 × (puertas ÷ puertas seguras)f |
| Coin flip | pago después de n aciertos = 0.99 × 2n |
| Ruleta de premios | los multiplicadores de los S segmentos suman 0.99 × S, así que cada ruleta devuelve exactamente 99% |
| Keno | cada una de las 30 tablas de pagos calculada para que Σ P(aciertos) × pago = 0.99 |
| Plinko | tablas de pagos escaladas al 99% antes del redondeo para mostrarse |
| Blackjack | 0.44% de ventaja con estrategia básica perfecta (6 mazos, el crupier se planta en 17 suave, 3:2) |
| Video póker | Jacks or Better 9/6: 99.54% con 5 monedas y retenciones óptimas |
| Ruleta | Europea de un solo cero: cada apuesta paga 36 ÷ números cubiertos, así que 36/37 = 97.30% |
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 licenciasChecklist de entrega
| Build | Build desplegable, probado en la matriz de navegadores acordada. |
|---|---|
| Código fuente | Repositorio con historial e instrucciones de build en el README. |
| Matemática | Informe por modo + el código para reproducirlo. |
| Recursos | Fuentes de cada imagen y cada sonido, con una lista de licencias. |
| Documentación | Reglas, notas de integración, limitaciones conocidas. |
| Llamada | Un recorrido con tu equipo, grabado si quieres. |
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ódigo | HTML estático, un archivo CSS y un archivo JS chico en vanilla. Sin framework, sin page builder. |
|---|---|
| Imágenes | WebP, al tamaño del espacio que ocupan; video solo donde justifica su peso. |
| Tipografías | Una o dos familias, o las tipografías del sistema cuando la velocidad es lo que más importa. |
| Formularios | Solo 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.
| Página | HTML + CSS + JS (gzip) |
|---|---|
| Landing de casino (Velvet Ace, 5 páginas) | 8.4–8.5 KB |
| Landing de sportsbook (Kickrush, 4 páginas) | 9.8–10.1 KB |
| Lobby de casino cripto (Hashtide) | 14.3 KB |
| Página VIP (Sable Crown) | 9.0 KB |
| Página de instalación de app (Spindle) | 9.5 KB |
| Página de sweepstakes (CoinHarbor) | 24.3 KB |
| Página de social casino (Velvet Vegas) | 23.3 KB |
| Página top 10 (ReelVerdict) | 30.6 KB |
| Página de reseña (Payline Journal) | 30.6 KB |
| Comparativa de bonos (WagerWise) | 30.7 KB |
| Pre-landers (6 mecánicas, un kit) | 22.2–23.4 KB |
Hosting
| Tu dominio, tu hosting | Te mandamos un zip. Súbelo a cualquier hosting estático, CDN o servidor. |
|---|---|
| Nuestra configuración | La 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 tracker | Funciona como lander dentro de Keitaro, Binom y similares: son solo archivos estáticos. |
Cambio de geo e idioma
| Cómo | Un 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é cambia | Idioma, moneda, redacción del bono, TyC, textos de licencia y de juego responsable, logos de pago. |
| Qué nunca cambia | Lo que ve un revisor frente a un usuario del mismo mercado. Eso sería cloaking. |
Guía de edición (incluida)
| Link de la oferta | Un solo lugar al principio del config. Todos los botones lo leen. |
|---|---|
| Texto y términos del bono | Texto simple en el mismo config, por mercado. |
| Imágenes | Cambia el archivo y mantén el nombre y el tamaño. |
| Textos legales | Por mercado, junto al texto del bono. |
| Qué no tocar | Marcado 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ónCada 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 … sub5 | El desglose por campaña, creativo y ubicación. |
utm_source, utm_medium, utm_campaign, utm_content, utm_term | Atribución de la analítica. |
gclid, fbclid, ttclid | Click 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
| Soportados | Meta, TikTok, etiqueta de Google (GA4 / Ads) y otros a pedido. |
|---|---|
| Conversiones | Las dispara tu operador o tu red de servidor a servidor (postback). La landing page solo registra visitas y clics. |
| Consentimiento | Un banner de consentimiento donde el mercado lo exige, con las etiquetas esperando el consentimiento. |
| Peso | Cada etiqueta cuesta velocidad; agregamos las que de verdad vas a usar. |
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
| Archivo | Un archivo HTML. Imágenes, sonido y código incrustados; sin solicitudes externas. |
|---|---|
| Límite de peso | Normalmente 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ón | Vertical y horizontal, se ajusta en vivo. |
| Duración | Unos segundos de juego y luego la end card. Lo típico: bastante menos de un minuto. |
| Sonido | Arranca en silencio; se activa después del primer toque. |
| Llamado a la acción | A través de MRAID (mraid.open) o del método propio de la red; nunca un redirect directo. |
| Comportamiento | Sin 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();
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.