A parte nerd,
em tabelas.
Com o que os nossos jogos e páginas são feitos, quanto pesam, como conversam com um RGS ou um tracker e o que chega à sua caixa de entrada na entrega. Toda tabela pode ser copiada como texto para o seu documento de concorrência ou para o seu CTO.

HTML5, feito primeiro para celular.
Slots em WebGL, Originals em canvas puro. Os dois rodam em qualquer navegador moderno, dentro de um frame no seu lobby.
Flash, nem pensar. Estamos em 2026.
Stack
| Slots | TypeScript, WebGL via PixiJS 8, runtime do Spine 4.2 para os personagens, Effekseer para efeitos de partículas. Build com Vite. |
|---|---|
| Originals | HTML puro, canvas 2D e WebAudio. Zero bibliotecas de terceiros. |
| Matemática | Simulações em Python; o SDK de matemática do Stake Engine e o otimizador dele para essa plataforma. |
| Pipeline de arte | Spine 4.2, Blender para objetos 3D, Krita, Figma para os kits de UI. |
| Áudio | Conjuntos gravados e produzidos para os slots; síntese WebAudio (sem arquivos) para os Originals. |
Telas e entrada
| Layouts | Desktop e mobile, retrato e paisagem. Um slot ganha um layout próprio em retrato, não um layout de desktop espremido. |
|---|---|
| Menor tela | Desenhado a partir de 375 px de largura. Os Originals são conferidos em 375×812 e 1366×768. |
| Áreas de toque | Mínimo de 40 px nos controles dos Originals. |
| Teclado | Espaço para apostar, girar ou fazer cash-out; as teclas específicas de cada jogo estão nas regras dele (dice: as setas movem o alvo, X troca over/under, T liga o turbo). |
| Incorporação | Roda dentro de um iframe no seu lobby; o som começa depois do primeiro toque, porque os navegadores exigem um gesto do usuário. |
Navegadores suportados
O nosso alvo de testes. Se o seu público usa algo mais antigo, conte no briefing.
| Matriz de testes | Versões principais atual e anterior de Chrome, Safari (iOS e macOS), Firefox, Edge e Samsung Internet. |
|---|---|
| Os slots precisam de | WebGL. Todo celular e navegador da matriz tem. |
| Os Originals precisam de | Canvas 2D. WebAudio para o som (o jogo continua funcionando sem ele). |
| As páginas também são testadas em | Navegadores internos dos grandes apps sociais, porque é lá que os cliques dos anúncios abrem. |
Peso: os nossos Originals, medidos
Medidos a partir dos arquivos deste site quando esta página foi gerada: de 38,0 KB a 427,3 KB por jogo, sem contar as fontes. O kit fica em cache depois do primeiro jogo.
| Jogo | Código da página (gzip) | Kit compartilhado (gzip) | Imagens | 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 | Sem 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
| Orçamento | Combinado por projeto, no briefing, porque um slot com dois personagens em Spine e um slot com shader líquido são bichos diferentes. |
|---|---|
| Relatório | Todo build vem com os números reais: tamanho do primeiro carregamento, tamanho total e tempo de carregamento num celular intermediário. |
| Carregamento | O áudio sai em pares OGG + AAC para que todo navegador receba um formato que toca; as texturas, em atlas. |
Som
| Slots | Loop base, loop do recurso, stingers, níveis de big win, sons de símbolos e de UI. Entregues em pares OGG + AAC (MP4). |
|---|---|
| Originals | Gerado em código com WebAudio: zero arquivos de áudio. |
| Padrões dos Originals | Sem som no modo miniatura. Fora isso, o som liga depois do primeiro toque; a escolha de mudo do jogador fica salva no dispositivo. |
Acessibilidade e conforto
| Modo calmo | Os Originals têm um botão que reduz tremidas de tela e flashes; a escolha fica salva. |
|---|---|
| Movimento reduzido | As nossas páginas respeitam a configuração de movimento reduzido do sistema. |
| Legibilidade | Números grandes e multiplicadores em alto contraste; todo resultado também aparece como texto (o multiplicador, ou um simples “Boom!”), e não só como um flash de cor. |
| Regras | Uma tela de regras com o RTP ou a vantagem da casa e a fórmula, a um toque de distância. |
Localização
| Texto | Todos os textos em arquivos de idioma (JSON), nenhum texto embutido nas imagens. |
|---|---|
| Números e moedas | Formatados por localidade: vírgula decimal, posição da moeda, casas decimais de cripto. |
| Modos de vocabulário | Os jogos do Stake Engine alternam entre o vocabulário de cassino e o social / sweepstakes. |
| Da direita para a esquerda | Orçado por projeto. |
Entram books, saem eventos.
Como o nosso cliente conversa com o RGS do Stake Engine. O mesmo fluxo que usamos no nosso slot no ar.

Parâmetros de inicialização que o cliente lê
Lidos uma vez da barra de endereço na inicialização. Os valores de exemplo são fictícios.
| Parâmetro | Exemplo | Significado |
|---|---|---|
sessionID | abc123… | Sessão que o RGS emitiu para este jogador. |
rgs_url | rgs.example.com | Com qual host de RGS conversar. |
lang | en | Idioma da interface. |
currency | USD | Moeda de exibição (os replays não têm wallet, então pegam a moeda daqui). |
social | true | Vocabulário social / sweepstakes no lugar do vocabulário de cassino. |
replay | true | Reproduz uma rodada (com game, version, mode, event). |
Chamadas ao RGS, na ordem da rodada
As chamadas que o nosso cliente do Stake Engine faz. Dinheiro é um número inteiro: 1.000.000 unidades = 1,00.
| Chamada | Quando | O que acontece |
|---|---|---|
POST /wallet/authenticate | Ao carregar | Abre a sessão. Devolve o saldo, os níveis de aposta, os modos de jogo com os multiplicadores de custo e as flags de jurisdição. |
POST /wallet/play | Aposta | Envia modo + valor. O RGS debita valor × multiplicador de custo, sorteia um book e devolve a rodada: o multiplicador de pagamento e os eventos do book. |
POST /bet/event | Durante a animação | Registra até onde o jogador assistiu, para que uma rodada interrompida possa ser retomada. |
POST /wallet/end-round | Rodada exibida | Liquida uma rodada vencedora e credita o pagamento. As rodadas perdedoras já estão fechadas. |
POST /wallet/balance | A qualquer momento | Saldo atual. |
GET /bet/replay/{game}/{version}/{mode}/{event} | Replays | Devolve os eventos de um book para um link de replay. |
Uma rodada, do lado do front-end
Simplificado a partir do nosso cliente. O navegador nunca decide um resultado; ele anima os eventos do book que o RGS sorteou.
// 1. open the session
const auth = await rgs('/wallet/authenticate', { sessionID });
const { betLevels, gameModes, jurisdiction } = auth.config; // honour the flags
// 2. bet: the RGS debits amount × costMultiplier and picks a book
const { round } = await rgs('/wallet/play', { sessionID, mode: 'BASE', amount: 1_000_000 }); // 1.00
// 3. animate the book's events (reveal, tumbles, wins, free spins…)
for (const ev of round.state) {
await animate(ev);
rgs('/bet/event', { sessionID, event: String(ev.index) }); // resume point
}
// 4. settle a winning round
if (round.active) await rgs('/wallet/end-round', { sessionID });Flags de jurisdição que o cliente precisa respeitar
Enviadas pelo RGS no authenticate. Um build atende todos os mercados; as flags ligam e desligam recursos por jurisdição.
socialCasino | Vocabulário social / sweepstakes. |
|---|---|
disabledTurbo, disabledSuperTurbo | Esconde os controles de velocidade. |
disabledAutoplay | Sem autoplay. |
disabledBuyFeature | Esconde as bonus buys. |
disabledSlamstop, disabledSpacebar, disabledFullscreen | Remove esses comandos. |
displayRTP, displayNetPosition, displaySessionTimer | Mostra o RTP, a posição líquida ou um cronômetro de sessão. |
minimumRoundDuration | Nunca termina uma rodada mais rápido do que isso. |
O que entregamos para o Stake Engine
| Matemática | Código do jogo no SDK de matemática, arquivos de publicação (books + tabelas de consulta) para cada modo de aposta, estatísticas por modo. |
|---|---|
| Front-end | Um build estático pronto para upload, mais o código-fonte. |
| Revisão | Detalhes do jogo para os revisores: regras, recursos, modos de aposta, RTP, ganho máximo. |
| QA | Uma demo com dinheiro fictício que roda o cliente real contra um substituto local do RGS com uma parte dos books reais, replays incluídos. |
Números que você pode rodar de novo.
O que o pacote de matemática contém e as fórmulas por trás dos nossos Originals.

Entregáveis de matemática
| Entregável | Formato | O que ele diz |
|---|---|---|
| Par sheet | Planilha | Tabela de pagamentos, reel strips ou pesos, RTP dividido entre jogo base e recursos. |
| Relatório de simulação | PDF / Markdown | RTP, taxa de acerto, frequência dos recursos, frequência do ganho máximo, desvio-padrão e distribuição de ganhos, por modo de aposta. |
| Código da simulação | Python | Rode você mesmo. Mesma seed, mesmos números. |
| Rolos / books | O formato da sua plataforma | O que o servidor do jogo realmente lê. |
| Texto das regras | Strings em JSON | RTP e ganho máximo por modo, batendo com o relatório. |
Exemplo: Vampir: Graveyard Shift, modos de aposta
Da nossa especificação de game design e de matemática. Ficha completa nas fichas dos jogos.
| Modo | Custo | RTP | Ganho máximo |
|---|---|---|---|
| Jogo base | 1× | 96,50% | 25.000× |
| Night Owl (intensificador) | 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: as fórmulas que publicamos
Vantagem da casa de 1% nas nove primeiras linhas. Nos builds white-label, o 0,99 vira o seu número.
| Crash, limbo | P(resultado chega a x) = 0,99 ÷ x |
|---|---|
| Dice | multiplicador = 99 ÷ chance de ganhar (%) |
| Mines | pagamento depois de k gemas com m minas = 0,99 × C(25,k) ÷ C(25−m,k) |
| Hi-Lo | pagamento por palpite = 0,99 ÷ chance do palpite |
| Tower | pagamento depois de f andares = 0,99 × (portas ÷ portas seguras)f |
| Cara ou coroa | pagamento depois de n palpites certos = 0,99 × 2n |
| Roda da sorte | os multiplicadores dos S segmentos somam 0,99 × S, então toda roda devolve exatamente 99% |
| Keno | cada uma das 30 tabelas de pagamento calculada para que Σ P(acertos) × pagamento = 0,99 |
| Plinko | tabelas de pagamento escaladas para 99% antes do arredondamento de exibição |
| Blackjack | Vantagem da casa de 0,44% com estratégia básica perfeita (6 baralhos, o dealer para no soft 17, 3:2) |
| Video poker | Jacks or Better 9/6: 99,54% com 5 moedas e holds ideais |
| Roleta | Europeia de um zero: toda aposta paga 36 ÷ números cobertos, então 36/37 = 97,30% |
O que chega à sua caixa de entrada.
As pastas, os arquivos e a call no final.
Nada sai como “final_v7_AGORA_VAI.zip”. A gente tem padrão.
Entrega do jogo, pasta por pasta
Slot sob medida. Trabalhos white-label recebem a parte de que você precisa para publicar e aplicar a skin.
game-name/
├─ build/ # static files, ready to deploy or upload
├─ src/ # front-end source + build scripts
├─ math/ # model, simulation code, reels or books, publish files
│ └─ reports/ # simulation report per bet mode
├─ art/ # layered sources, Spine projects, atlases, exports
├─ audio/ # WAV masters, stems, OGG + AAC game files, cue sheet
├─ store-media/ # tiles, covers, banners in your lobby's sizes
└─ docs/ # GDD, rules text, integration notes, licences listChecklist de entrega
| Build | Build pronto para publicar, testado na matriz de navegadores combinada. |
|---|---|
| Código-fonte | Repositório com histórico, instruções de build no README. |
| Matemática | Relatório por modo + o código para reproduzi-lo. |
| Assets | Arquivos-fonte de cada imagem e som, com uma lista de licenças. |
| Documentação | Regras, notas de integração, limitações conhecidas. |
| Chamada | Uma apresentação guiada com o seu time, gravada se você quiser. |
Estáticas, rápidas, editáveis.
Páginas que carregam antes de o visitante mudar de ideia, e que você edita sem precisar nos chamar.

Stack das páginas
| Código | HTML estático, um arquivo CSS, um pequeno arquivo em vanilla JS. Sem framework, sem construtor de páginas. |
|---|---|
| Imagens | WebP, no tamanho do espaço que ocupa; vídeo só onde ele compensa o peso. |
| Fontes | Uma ou duas famílias, ou as fontes do sistema quando a velocidade importa mais. |
| Formulários | Só se a oferta precisar de um; caso contrário, o botão vai direto para a oferta. |
Metas de performance
| LCP | ≤ 2,5 s O limite “bom” do Google |
|---|---|
| INP | ≤ 200 ms O limite “bom” do Google |
| CLS | ≤ 0,1 O limite “bom” do Google |
| Lighthouse (mobile) | 90+ em performance, acessibilidade, boas práticas e SEO A nossa meta, conferida antes da entrega |
Peso: as nossas páginas demo, medidas
Só o código: o HTML e o CSS e JS que ele carrega, com gzip, medidos a partir dos arquivos quando esta página foi gerada. Fontes, imagens e vídeo vêm por cima. Uma faixa cobre todas as páginas de um mesmo template.
| Página | HTML + CSS + JS (gzip) |
|---|---|
| Landing de cassino (Velvet Ace, 5 páginas) | 8,4–8,5 KB |
| Landing de sportsbook (Kickrush, 4 páginas) | 9,8–10,1 KB |
| Lobby de cassino cripto (Hashtide) | 14,3 KB |
| Página VIP (Sable Crown) | 9,0 KB |
| Página de instalação de app (Spindle) | 9,5 KB |
| Página 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 review (Payline Journal) | 30,6 KB |
| Comparativo de bônus (WagerWise) | 30,7 KB |
| Pre-landers (6 mecânicas, um kit) | 22,2–23,4 KB |
Hospedagem
| O seu domínio, o seu host | Mandamos um zip. Suba em qualquer host estático, CDN ou servidor. |
|---|---|
| A nossa estrutura | Colocamos numa CDN rápida e você aponta um (sub)domínio para ela com um CNAME. Os arquivos continuam sendo seus. |
| Hospedada no tracker | Funciona como lander dentro do Keitaro, do Binom e similares: são só arquivos estáticos. |
Troca de geo e de idioma
| Como | Um build. O conteúdo de cada mercado fica num pequeno arquivo de dados; a página escolhe a partir de um parâmetro de URL (?geo=de), de um token do tracker ou do header de geo do host. |
|---|---|
| O que muda | Idioma, moeda, texto do bônus, termos e condições, avisos de licença e de jogo responsável, logos de pagamento. |
| O que nunca muda | O que um revisor vê em comparação com um usuário do mesmo mercado. Isso seria cloaking. |
Guia de edição (incluído)
| Link da oferta | Um lugar só, no topo da configuração. Todos os botões leem dali. |
|---|---|
| Texto e termos do bônus | Texto simples na mesma configuração, por mercado. |
| Imagens | Troque o arquivo, mantenha o nome e o tamanho. |
| Avisos legais | Por mercado, ao lado do texto do bônus. |
| O que não mexer | Marcado no README, com o motivo. |
Zip da landing page
O que você recebe por uma página.
offer-page/
├─ index.html
├─ assets/
│ ├─ page.css
│ ├─ page.js # tracking pass-through, geo/lang swap
│ └─ img/ # WebP, sized for their slots
├─ config.js # offer link, bonus text, T&Cs, legal lines per market
└─ README.md # editing guideCada clique contabilizado.
Repasse de parâmetros, postbacks, pixels e consentimento: a parte chata, feita do jeito certo.
Se o seu tracker mostra {clickid} num relatório, alguém digitou uma chave errada. Não fomos nós.
Parâmetros que repassamos
Tudo o que chega na URL da página é anexado ao link da oferta. Renomeie para bater com o seu tracker.
clickid (ou o nome que o seu tracker usa) | Associa a conversão de volta ao clique. |
|---|---|
sub1 … sub5 | O detalhamento por campanha, criativo e posicionamento. |
utm_source, utm_medium, utm_campaign, utm_content, utm_term | Atribuição no analytics. |
gclid, fbclid, ttclid | Click IDs das plataformas de anúncio, mantidos quando presentes. |
Repasse de parâmetros, o truque inteiro
Todo link marcado com data-offer recebe os parâmetros que chegaram.
// copy incoming URL parameters (clickid, sub1…sub5, utm_*) onto every offer link
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();
});Template de postback (exemplo)
Configurado no painel do operador ou da rede, apontando para o seu tracker. Os placeholders entre chaves são preenchidos por quem envia; os nomes variam conforme a plataforma.
https://tracker.example.com/postback?cid={clickid}&payout={payout}&status={status}&txid={transaction_id}Pixels e consentimento
| Suportados | Meta, TikTok, Google tag (GA4 / Ads) e outros sob demanda. |
|---|---|
| Conversões | Disparadas pelo seu operador ou pela sua rede, de servidor para servidor (postback). A landing page só registra visitas e cliques. |
| Consentimento | Um banner de consentimento onde o mercado exige, com as tags esperando o consentimento. |
| Peso | Toda tag custa velocidade; adicionamos as que você vai realmente usar. |
Arquivo pequeno, toque grande.
Anúncios HTML5 de arquivo único que respeitam a especificação da rede e as regras de jogos de azar.

Confira a política primeiro. Muitas redes de anúncios restringem anúncios de jogos de azar por mercado, exigem aprovação prévia ou nem aceitam playables para eles. Checamos as suas redes antes do storyboard.
Especificação de playable ad
| Arquivo | Um arquivo HTML. Imagens, som e código embutidos; sem requisições externas. |
|---|---|
| Limite de tamanho | Normalmente de 2 a 5 MB, conforme a rede; algumas pedem menos. Faixa do mercado. Confira sempre a especificação atual de cada rede. |
| Orientação | Retrato e paisagem, com redimensionamento ao vivo. |
| Duração | Alguns segundos de jogo e, depois, o end card. O normal: bem menos de um minuto. |
| Som | Começa sem som; liga depois do primeiro toque. |
| Call to action | Via MRAID (mraid.open) ou pelo método da própria rede; nunca um redirect direto. |
| Comportamento | Sem redirect automático, sem falsas janelas do sistema, sem falsos botões de fechar. |
O básico de MRAID
Esperar o container, abrir os links por ele e recorrer a um link normal quando não houver MRAID.
function cta(url) {
if (window.mraid && typeof mraid.open === 'function') mraid.open(url);
else window.open(url, '_blank');
}
function boot() { /* start the game once the ad container is ready */ }
if (window.mraid) {
if (mraid.getState() === 'loading') mraid.addEventListener('ready', boot);
else boot();
} else boot();
Nada para .
Nenhum bloco de especificação encontrado, então o Chip foi tirar um cochilo. Tente “MRAID”, “postback”, “Safari” ou “RGS”.
Precisa de uma especificação que não listamos?
Mande a documentação da sua plataforma ou a sua lista de redes. Respondemos por escrito com o que serve e o que não serve.