Especificações técnicas e de integração

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.

0bibliotecas de terceiros nos nossos Originals
38,0–427,3KB por Original, medidos
6chamadas ao RGS por cliente do Stake Engine
Chip digitando num laptop
Jogos

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

SlotsTypeScript, WebGL via PixiJS 8, runtime do Spine 4.2 para os personagens, Effekseer para efeitos de partículas. Build com Vite.
OriginalsHTML puro, canvas 2D e WebAudio. Zero bibliotecas de terceiros.
MatemáticaSimulações em Python; o SDK de matemática do Stake Engine e o otimizador dele para essa plataforma.
Pipeline de arteSpine 4.2, Blender para objetos 3D, Krita, Figma para os kits de UI.
ÁudioConjuntos gravados e produzidos para os slots; síntese WebAudio (sem arquivos) para os Originals.

Telas e entrada

LayoutsDesktop e mobile, retrato e paisagem. Um slot ganha um layout próprio em retrato, não um layout de desktop espremido.
Menor telaDesenhado a partir de 375 px de largura. Os Originals são conferidos em 375×812 e 1366×768.
Áreas de toqueMínimo de 40 px nos controles dos Originals.
TecladoEspaç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çãoRoda 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 testesVersões principais atual e anterior de Chrome, Safari (iOS e macOS), Firefox, Edge e Samsung Internet.
Os slots precisam deWebGL. Todo celular e navegador da matriz tem.
Os Originals precisam deCanvas 2D. WebAudio para o som (o jogo continua funcionando sem ele).
As páginas também são testadas emNavegadores 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.

JogoCódigo da página (gzip)Kit compartilhado (gzip)ImagensTotal
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 KBSem 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

OrçamentoCombinado por projeto, no briefing, porque um slot com dois personagens em Spine e um slot com shader líquido são bichos diferentes.
RelatórioTodo build vem com os números reais: tamanho do primeiro carregamento, tamanho total e tempo de carregamento num celular intermediário.
CarregamentoO áudio sai em pares OGG + AAC para que todo navegador receba um formato que toca; as texturas, em atlas.

Som

SlotsLoop base, loop do recurso, stingers, níveis de big win, sons de símbolos e de UI. Entregues em pares OGG + AAC (MP4).
OriginalsGerado em código com WebAudio: zero arquivos de áudio.
Padrões dos OriginalsSem 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 calmoOs Originals têm um botão que reduz tremidas de tela e flashes; a escolha fica salva.
Movimento reduzidoAs nossas páginas respeitam a configuração de movimento reduzido do sistema.
LegibilidadeNú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.
RegrasUma tela de regras com o RTP ou a vantagem da casa e a fórmula, a um toque de distância.

Localização

TextoTodos os textos em arquivos de idioma (JSON), nenhum texto embutido nas imagens.
Números e moedasFormatados por localidade: vírgula decimal, posição da moeda, casas decimais de cripto.
Modos de vocabulárioOs jogos do Stake Engine alternam entre o vocabulário de cassino e o social / sweepstakes.
Da direita para a esquerdaOrçado por projeto.
Stake Engine

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âmetroExemploSignificado
sessionIDabc123…Sessão que o RGS emitiu para este jogador.
rgs_urlrgs.example.comCom qual host de RGS conversar.
langenIdioma da interface.
currencyUSDMoeda de exibição (os replays não têm wallet, então pegam a moeda daqui).
socialtrueVocabulário social / sweepstakes no lugar do vocabulário de cassino.
replaytrueReproduz 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.

ChamadaQuandoO que acontece
POST /wallet/authenticateAo carregarAbre 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/playApostaEnvia 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/eventDurante a animaçãoRegistra até onde o jogador assistiu, para que uma rodada interrompida possa ser retomada.
POST /wallet/end-roundRodada exibidaLiquida uma rodada vencedora e credita o pagamento. As rodadas perdedoras já estão fechadas.
POST /wallet/balanceA qualquer momentoSaldo atual.
GET /bet/replay/{game}/{version}/{mode}/{event}ReplaysDevolve 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.

socialCasinoVocabulário social / sweepstakes.
disabledTurbo, disabledSuperTurboEsconde os controles de velocidade.
disabledAutoplaySem autoplay.
disabledBuyFeatureEsconde as bonus buys.
disabledSlamstop, disabledSpacebar, disabledFullscreenRemove esses comandos.
displayRTP, displayNetPosition, displaySessionTimerMostra o RTP, a posição líquida ou um cronômetro de sessão.
minimumRoundDurationNunca termina uma rodada mais rápido do que isso.

O que entregamos para o Stake Engine

MatemáticaCó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-endUm build estático pronto para upload, mais o código-fonte.
RevisãoDetalhes do jogo para os revisores: regras, recursos, modos de aposta, RTP, ganho máximo.
QAUma 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.
Matemática

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ávelFormatoO que ele diz
Par sheetPlanilhaTabela de pagamentos, reel strips ou pesos, RTP dividido entre jogo base e recursos.
Relatório de simulaçãoPDF / MarkdownRTP, 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çãoPythonRode você mesmo. Mesma seed, mesmos números.
Rolos / booksO formato da sua plataformaO que o servidor do jogo realmente lê.
Texto das regrasStrings em JSONRTP 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.

ModoCustoRTPGanho máximo
Jogo base1×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, limboP(resultado chega a x) = 0,99 ÷ x
Dicemultiplicador = 99 ÷ chance de ganhar (%)
Minespagamento depois de k gemas com m minas = 0,99 × C(25,k) ÷ C(25−m,k)
Hi-Lopagamento por palpite = 0,99 ÷ chance do palpite
Towerpagamento depois de f andares = 0,99 × (portas ÷ portas seguras)f
Cara ou coroapagamento depois de n palpites certos = 0,99 × 2n
Roda da sorteos multiplicadores dos S segmentos somam 0,99 × S, então toda roda devolve exatamente 99%
Kenocada uma das 30 tabelas de pagamento calculada para que Σ P(acertos) × pagamento = 0,99
Plinkotabelas de pagamento escaladas para 99% antes do arredondamento de exibição
BlackjackVantagem da casa de 0,44% com estratégia básica perfeita (6 baralhos, o dealer para no soft 17, 3:2)
Video pokerJacks or Better 9/6: 99,54% com 5 moedas e holds ideais
RoletaEuropeia de um zero: toda aposta paga 36 ÷ números cobertos, então 36/37 = 97,30%
Entrega

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 list

Checklist de entrega

BuildBuild pronto para publicar, testado na matriz de navegadores combinada.
Código-fonteRepositório com histórico, instruções de build no README.
MatemáticaRelatório por modo + o código para reproduzi-lo.
AssetsArquivos-fonte de cada imagem e som, com uma lista de licenças.
DocumentaçãoRegras, notas de integração, limitações conhecidas.
ChamadaUma apresentação guiada com o seu time, gravada se você quiser.
Landings

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ódigoHTML estático, um arquivo CSS, um pequeno arquivo em vanilla JS. Sem framework, sem construtor de páginas.
ImagensWebP, no tamanho do espaço que ocupa; vídeo só onde ele compensa o peso.
FontesUma ou duas famílias, ou as fontes do sistema quando a velocidade importa mais.
FormuláriosSó 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.

Hospedagem

O seu domínio, o seu hostMandamos um zip. Suba em qualquer host estático, CDN ou servidor.
A nossa estruturaColocamos numa CDN rápida e você aponta um (sub)domínio para ela com um CNAME. Os arquivos continuam sendo seus.
Hospedada no trackerFunciona como lander dentro do Keitaro, do Binom e similares: são só arquivos estáticos.

Troca de geo e de idioma

ComoUm 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 mudaIdioma, moeda, texto do bônus, termos e condições, avisos de licença e de jogo responsável, logos de pagamento.
O que nunca mudaO 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 ofertaUm lugar só, no topo da configuração. Todos os botões leem dali.
Texto e termos do bônusTexto simples na mesma configuração, por mercado.
ImagensTroque o arquivo, mantenha o nome e o tamanho.
Avisos legaisPor mercado, ao lado do texto do bônus.
O que não mexerMarcado 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 guide
Tracking

Cada 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 … sub5O detalhamento por campanha, criativo e posicionamento.
utm_source, utm_medium, utm_campaign, utm_content, utm_termAtribuição no analytics.
gclid, fbclid, ttclidClick 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

SuportadosMeta, TikTok, Google tag (GA4 / Ads) e outros sob demanda.
ConversõesDisparadas pelo seu operador ou pela sua rede, de servidor para servidor (postback). A landing page só registra visitas e cliques.
ConsentimentoUm banner de consentimento onde o mercado exige, com as tags esperando o consentimento.
PesoToda tag custa velocidade; adicionamos as que você vai realmente usar.
Playable ads

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

ArquivoUm arquivo HTML. Imagens, som e código embutidos; sem requisições externas.
Limite de tamanhoNormalmente de 2 a 5 MB, conforme a rede; algumas pedem menos. Faixa do mercado. Confira sempre a especificação atual de cada rede.
OrientaçãoRetrato e paisagem, com redimensionamento ao vivo.
DuraçãoAlguns segundos de jogo e, depois, o end card. O normal: bem menos de um minuto.
SomComeça sem som; liga depois do primeiro toque.
Call to actionVia MRAID (mraid.open) ou pelo método da própria rede; nunca um redirect direto.
ComportamentoSem 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();
Chip dormindo no serviço

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.