Техспеки и интеграция

Часть для гиков —
в таблицах.

На чём сделаны наши игры и страницы, сколько они весят, как общаются с RGS или трекером и что приходит к вам при передаче. Каждая таблица копируется текстом — для вашей тендерной документации или CTO.

0сторонних библиотек в наших Originals
38.0–427.3КБ на игру Originals, замерено
6вызовов RGS в клиенте Stake Engine
Чип печатает на ноутбуке
Игры

HTML5, в первую очередь для телефонов.

Слоты на WebGL, Originals на чистом canvas. И те и другие работают в любом современном браузере, во фрейме вашего лобби.

Никакого Flash. На дворе 2026-й.

Стек

СлотыTypeScript, WebGL через PixiJS 8, рантайм Spine 4.2 для персонажей, Effekseer для эффектов частиц. Сборка на Vite.
OriginalsЧистый HTML, canvas 2D и WebAudio. Ноль сторонних библиотек.
МатематикаСимуляции на Python; для Stake Engine — математический SDK платформы и его оптимизатор.
Арт-пайплайнSpine 4.2, Blender для 3D-объектов, Krita, Figma для UI-китов.
АудиоЗаписанные и спродюсированные наборы для слотов; синтез на WebAudio (без файлов) для Originals.

Экраны и ввод

РаскладкиДесктоп и мобайл, портретная и альбомная ориентация. Слот получает собственную портретную раскладку, а не сжатую десктопную.
Минимальный экранПроектируем от ширины 375 px и выше. Originals проверяются на 375×812 и 1366×768.
Зоны касанияМинимум 40 px в элементах управления Originals.
КлавиатураПробел — ставка, спин или кэшаут; клавиши конкретной игры перечислены в её правилах (дайс: стрелки двигают цель, X меняет больше/меньше, T включает турбо).
ВстраиваниеРаботает в iframe в вашем лобби; звук включается после первого тапа, потому что браузеры требуют действия пользователя.

Поддержка браузеров

Наша тестовая цель. Если ваша аудитория сидит на чём-то постарше, укажите это в брифе.

Тестовая матрицаТекущая и предыдущая мажорные версии Chrome, Safari (iOS и macOS), Firefox, Edge и Samsung Internet.
Слотам нуженWebGL. Он есть на каждом телефоне и в каждом браузере из матрицы.
Originals нуженCanvas 2D. WebAudio для звука (без него игра всё равно работает).
Страницы тестируются также вВстроенных браузерах крупных соцсетей — потому что именно там открываются клики по рекламе.

Вес: наши Originals, замерено

Замерено по файлам на этом сайте в момент генерации страницы: от 38.0 КБ до 427.3 КБ на игру, без учёта шрифтов. Набор инструментов кешируется после первой игры.

ИграКод страницы (gzip)Общий набор инструментов (gzip)ИзображенияИтого
Rocket Chip7.5 КБ15.9 КБ1 × WebP, 32.1 КБ55.5 КБ
Moonshot Limbo17.6 КБ15.9 КБ1 × WebP, 75.9 КБ109.4 КБ
Gem Mines5.2 КБ15.9 КБ2 × WebP, 79.0 КБ100.2 КБ
Neon Drop4.2 КБ15.9 КБ1 × WebP, 50.9 КБ71.0 КБ
Hyper Dice13.9 КБ15.9 КБ1 × WebP, 37.9 КБ67.8 КБ
Lucky Wheel13.2 КБ15.9 КБ1 × WebP, 47.5 КБ76.6 КБ
Neon Roulette22.0 КБ15.9 КББез WebP: SVG / CSS38.0 КБ
Holo Scratch16.8 КБ15.9 КБ8 × WebP, 394.5 КБ427.3 КБ
Hi-Lo Heist13.0 КБ15.9 КБ1 × WebP, 47.5 КБ76.4 КБ
Star Keno11.4 КБ15.9 КБ1 × WebP, 50.9 КБ78.3 КБ
Sky Tower24.1 КБ15.9 КБ5 × WebP, 283.1 КБ323.1 КБ
Chip Flip12.2 КБ15.9 КБ3 × WebP, 213.0 КБ241.1 КБ
Chip & Deal19.8 КБ15.9 КБ2 × WebP, 152.3 КБ188.0 КБ
Jacks Royale18.4 КБ15.9 КБ1 × WebP, 47.5 КБ81.8 КБ

Вес: слоты

БюджетСогласуется в брифе под каждый проект, потому что слот с двумя персонажами на Spine и слот с жидкими шейдерами — совсем разные звери.
ОтчётностьКаждый билд идёт с реальными цифрами: вес первой загрузки, общий вес и время загрузки на телефоне среднего класса.
ЗагрузкаАудио поставляется парами OGG + AAC, чтобы каждый браузер получил формат, который умеет играть; текстуры — атласами.

Звук

СлотыБазовый луп, луп фичи, стингеры, уровни биг-вина, звуки символов и интерфейса. Поставляется парами OGG + AAC (MP4).
OriginalsГенерируется в коде через WebAudio: ноль аудиофайлов.
Originals по умолчаниюВ режиме миниатюры без звука. В остальных случаях звук включается после первого тапа; выбор игрока запоминается на устройстве.

Доступность и комфорт

Спокойный режимВ Originals есть переключатель, который убирает тряску экрана и вспышки; выбор запоминается.
Уменьшение движенияНаши страницы учитывают системную настройку уменьшения движения.
ЧитаемостьКрупные цифры и контрастные множители; каждый результат показывается и текстом (множитель или простое «Boom!»), а не только цветовой вспышкой.
ПравилаЭкран правил с RTP или house edge и формулой — в одном тапе.

Локализация

ТекстВсе строки в языковых файлах (JSON), никакого текста, вшитого в картинки.
Числа и валютыФорматирование по локали: десятичная запятая, позиция валюты, знаки после запятой для крипты.
Режимы формулировокИгры для Stake Engine переключаются между казино-формулировками и social / свипстейк-формулировками.
Справа налевоОценивается под проект.
Stake Engine

Books на входе, события на выходе.

Как наш клиент общается с RGS Stake Engine. Тот же цикл, что и в нашем работающем слоте.

Параметры запуска, которые читает клиент

Читаются один раз из адресной строки при загрузке. Значения в примерах — плейсхолдеры.

ПараметрПримерЗначение
sessionIDabc123…Сессия, которую RGS выдал этому игроку.
rgs_urlrgs.example.comС каким хостом RGS работать.
langenЯзык интерфейса.
currencyUSDВалюта отображения (у реплеев нет кошелька, поэтому они берут её отсюда).
socialtrueSocial / свипстейк-формулировки вместо казино-формулировок.
replaytrueРеплей одного раунда (с game, version, mode, event).

Вызовы RGS в порядке раунда

Вызовы, которые делает наш клиент Stake Engine. Деньги — целое число: 1 000 000 единиц = 1.00.

ВызовКогдаЧто происходит
POST /wallet/authenticateПри загрузкеОткрывает сессию. Возвращает баланс, уровни ставок, игровые режимы с их множителями стоимости и флаги юрисдикции.
POST /wallet/playСтавкаОтправляет режим + сумму. RGS списывает сумму × множитель стоимости, выбирает book и возвращает раунд: множитель выплаты и события book.
POST /bet/eventВо время анимацииЗаписывает, докуда игрок досмотрел, чтобы прерванный раунд можно было продолжить.
POST /wallet/end-roundРаунд показанЗакрывает выигрышный раунд и зачисляет выплату. Проигрышные раунды уже закрыты.
POST /wallet/balanceВ любой моментТекущий баланс.
GET /bet/replay/{game}/{version}/{mode}/{event}РеплеиВозвращает события одной book для ссылки на реплей.

Один раунд глазами фронтенда

Упрощено из нашего клиента. Браузер никогда не решает исход; он анимирует события book, которую выбрал RGS.

// 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 });

Флаги юрисдикции, которые клиент обязан соблюдать

Приходят от RGS при аутентификации. Один билд обслуживает все рынки; флаги включают и выключают функции по юрисдикциям.

socialCasinoSocial / свипстейк-формулировки.
disabledTurbo, disabledSuperTurboСкрыть управление скоростью.
disabledAutoplayБез автоигры.
disabledBuyFeatureСкрыть покупку бонуса.
disabledSlamstop, disabledSpacebar, disabledFullscreenУбрать эти способы ввода.
displayRTP, displayNetPosition, displaySessionTimerПоказывать RTP, чистый результат или таймер сессии.
minimumRoundDurationНикогда не завершать раунд быстрее этого времени.

Что мы передаём для Stake Engine

МатематикаКод игры в математическом SDK, файлы публикации (books + таблицы исходов) для каждого режима ставки, статистика по режимам.
ФронтендСтатический билд, готовый к загрузке, плюс исходники.
РевьюОписание игры для ревьюеров: правила, фичи, режимы ставки, RTP, макс. выигрыш.
QAДемо на игровых деньгах, где настоящий клиент работает с локальной заменой RGS и частью реальных books, включая реплеи.
Математика

Цифры, которые можно перепроверить.

Что входит в мат. пакет и какие формулы стоят за нашими Originals.

Математические материалы

МатериалФорматЧто он показывает
PAR-листТаблицаТаблица выплат, ленты барабанов или веса, RTP с разбивкой по базовой игре и фичам.
Отчёт о симуляцииPDF / MarkdownRTP, частота выигрышей, частота фич, частота макс. выигрыша, стандартное отклонение и распределение выигрышей — по каждому режиму ставки.
Код симуляцииPythonЗапустите сами. Тот же сид — те же цифры.
Барабаны / booksФормат вашей платформыТо, что реально читает игровой сервер.
Текст правилСтроки JSONRTP и макс. выигрыш по каждому режиму, в точности как в отчёте.

Пример: Vampir: Graveyard Shift, режимы ставки

Из нашего диздока и математической спецификации. Полная карточка — в карточках игр.

РежимСтоимостьRTPМаксимальный выигрыш
Базовая игра1×96.50%25,000×
Night Owl (усилитель)2×96.50%25,000×
Graveyard Shift (покупка)100×96.50%25,000×
Overtime Shift (покупка)300×96.50%25,000×
Blood Moon Shift (покупка)1,000×96.50%25,000×

Originals: формулы, которые мы публикуем

House edge 1% в первых девяти строках. В white-label-билдах вместо 0.99 стоит ваше число.

Краш, лимбоP(результат достигает x) = 0.99 ÷ x
Дайсмножитель = 99 ÷ шанс выигрыша (%)
Минывыплата после k камней при m минах = 0.99 × C(25,k) ÷ C(25−m,k)
Hi-Loвыплата за прогноз = 0.99 ÷ шанс прогноза
Башнявыплата после f этажей = 0.99 × (двери ÷ безопасные двери)f
Монеткавыплата после n верных прогнозов = 0.99 × 2n
КолесоS множителей секторов в сумме дают 0.99 × S, поэтому каждое колесо возвращает ровно 99%
Кенокаждая из 30 таблиц выплат решена так, что Σ P(совпадений) × выплата = 0.99
Плинкотаблицы выплат масштабированы до 99% до округления для отображения
БлэкджекHouse edge 0.44% при идеальной базовой стратегии (6 колод, дилер стоит на soft 17, 3:2)
Видеопокер9/6 Jacks or Better: 99.54% при 5 монетах с оптимальными холдами
РулеткаЕвропейская с одним зеро: любая ставка платит 36 ÷ число покрытых номеров, поэтому 36/37 = 97.30%
Передача

Что приходит к вам.

Папки, файлы и созвон в конце.

Ничего не уходит под именем «final_v7_REAL.zip». У нас есть стандарты.

Передача игры, папка за папкой

Кастомный слот. White-label-работа получает только то, что нужно для деплоя и скина.

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

Чек-лист передачи

СборкаБилд для деплоя, протестированный на согласованной матрице браузеров.
ИсходникРепозиторий с историей, инструкция по сборке в README.
МатематикаОтчёт по каждому режиму + код, чтобы его воспроизвести.
АссетыИсходники каждого изображения и звука со списком лицензий.
ДокументацияПравила, заметки по интеграции, известные ограничения.
ВызовРазбор с вашей командой, при желании — с записью.
Лендинги

Статично, быстро, редактируемо.

Страницы, которые загружаются раньше, чем посетитель передумает, и которые можно править, не звоня нам.

Стек страниц

КодСтатический HTML, один CSS-файл, небольшой vanilla JS-файл. Никаких фреймворков и конструкторов.
ИзображенияWebP под размер места, которое картинка занимает; видео только там, где оно оправдывает свой вес.
ШрифтыОдно-два семейства или системный стек, когда важнее всего скорость.
ФормыТолько если оффер её требует; иначе кнопка ведёт прямо на оффер.

Целевые показатели скорости

LCP≤ 2,5 с порог «хорошо» по Google
INP≤ 200 мс порог «хорошо» по Google
CLS≤ 0,1 порог «хорошо» по Google
Lighthouse (мобайл)90+ по производительности, доступности, лучшим практикам и SEO Наша цель, проверяем перед передачей

Вес: наши демо-страницы, замерено

Только код: HTML и подключаемые CSS и JS, в gzip, замерено по файлам в момент генерации этой страницы. Шрифты, картинки и видео — сверху. Диапазон охватывает все страницы одного шаблона.

Хостинг

Ваш домен, ваш хостингМы присылаем zip. Загрузите его на любой статический хостинг, CDN или сервер.
Наш вариантРазмещаем на быстром CDN, а вы направляете на него (под)домен через CNAME. Файлы всё равно ваши.
В трекереРаботает как лендинг внутри Keitaro, Binom и подобных: это просто статические файлы.

Смена гео и языка

КакОдин билд. Контент по рынкам лежит в небольшом файле данных; страница выбирает его по параметру URL (?geo=de), токену трекера или гео-заголовку хостинга.
Что меняетсяЯзык, валюта, формулировки бонуса, T&C, строки о лицензии и ответственной игре, логотипы платёжек.
Что не меняется никогдаТо, что видит ревьюер, по сравнению с тем, что видит пользователь на том же рынке. Иначе это был бы клоакинг.

Инструкция по редактированию (входит)

Ссылка на офферОдно место в начале конфига. Каждая кнопка читает её оттуда.
Текст бонуса и условияПростой текст в том же конфиге, по каждому рынку.
ИзображенияЗамените файл, сохранив имя и размер.
Юридические строкиПо каждому рынку, рядом с текстом бонуса.
Что не трогатьОтмечено в README, с причиной.

Zip лендинга

Что вы получаете за страницу.

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
Трекинг

Каждый клик на счету.

Передача параметров, постбэки, пиксели и согласие: скучная часть, сделанная правильно.

Если в отчёте вашего трекера виден {clickid}, кто-то ошибся в скобке. Не мы.

Параметры, которые мы передаём

Всё, что приходит в URL страницы, добавляется к ссылке на оффер. Переименуйте под свой трекер.

clickid (или как он называется в вашем трекере)Сопоставляет конверсию с кликом.
sub1 … sub5Разбивка по вашим кампаниям, креативам и площадкам.
utm_source, utm_medium, utm_campaign, utm_content, utm_termАтрибуция в аналитике.
gclid, fbclid, ttclidClick ID рекламных платформ, сохраняются, если есть.

Передача параметров — весь фокус

Каждая ссылка с пометкой data-offer получает входящие параметры.

// 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();
});

Шаблон постбэка (пример)

Настраивается в панели оператора или сети и указывает на ваш трекер. Плейсхолдеры в фигурных скобках заполняет отправитель; названия зависят от платформы.

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

Пиксели и согласие

ПоддерживаютсяMeta, TikTok, Google tag (GA4 / Ads) и другие по запросу.
КонверсииОтправляются вашим оператором или сетью сервер-сервер (постбэк). Лендинг только фиксирует визиты и клики.
СогласиеБаннер согласия там, где этого требует рынок, а теги ждут согласия.
ВесКаждый тег стоит скорости; мы добавляем только те, которыми вы реально будете пользоваться.
Playable-реклама

Маленький файл, большой тап.

Однофайловая HTML5-реклама, которая соблюдает спецификацию сети и правила гемблинг-рекламы.

Сначала проверьте политику. Многие рекламные сети ограничивают гемблинг-рекламу по рынкам, требуют предварительного одобрения или вообще не принимают для неё плейаблы. Мы проверяем ваши сети до раскадровки.

Спецификация playable-рекламы

ФайлОдин HTML-файл. Изображения, звук и код встроены; никаких внешних запросов.
Лимит размераОбычно 2–5 МБ в зависимости от сети; некоторые просят меньше. Отраслевой диапазон. Всегда проверяйте актуальную спецификацию каждой сети.
ОриентацияПортретная и альбомная, перестраивается на лету.
ДлительностьНесколько секунд игры, затем финальный экран. Обычно — заметно меньше минуты.
ЗвукСтартует без звука; звук включается после первого тапа.
Призыв к действиюЧерез MRAID (mraid.open) или собственный метод сети; никогда не голый редирект.
ПоведениеНикаких авторедиректов, фейковых системных диалогов и фейковых кнопок закрытия.

Основы MRAID

Дождаться контейнера, открывать ссылки через него, откатываться на обычную ссылку, если 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();
Чип уснул на работе

Ничего по запросу .

Ни один блок спецификаций не подошёл, так что Чип прилёг вздремнуть. Попробуйте «MRAID», «postback», «Safari» или «RGS».

Спросить человека

Нужна спецификация, которой нет в списке?

Пришлите документацию платформы или список сетей. Ответим письменно, что подходит, а что нет.