A coin flip in its purest form — wrapped in an emotional layer that turns every spin into a clip. Built, published, and running on the live RGS.
People gamble for three primal reasons: the hope of winning, killing time, and a bracket of experience outside the social frame — a thrill at the edge of the "work = money" contract.
Most machines bury that essence under layers of complexity — paylines, scatters, nested bonuses. Tails Never Fails does the opposite: it distils gambling down to its most fundamental atom — a coin flip — that anyone understands in one second, with no tutorial, in any language.
The name comes from the superstitious phrase people mutter before flipping a coin: "tails never fails." It already carries the promise and the folklore of the gesture.
Positioning note: the villain is a fictional character (an archetype of greed), never a real target — an ethical choice and a business one, keeping the game clean of any content built on a real group's identity.
A single three-faced coin per villain. The player covers one or both winning faces, sets a bet, and flips (FLIP button or spacebar). HEADS always loses.
The design strength: EDGE gives an intuitive name and image to the jackpot. Nobody needs it explained why it's rare and why it pays huge — it's playground physics.
Like a fighting-game select screen, the player picks the villain they want to face. Each villain = a volatility profile. The RTP stays fair and identical (96.00% exact, certifiable); what changes is the EDGE top multiplier and its rarity — the real lever of sensation.
A grasping goblin with hooked fingers, clutching his hoard. Grotesque, comic, 100% fictional greed. He keeps the biggest pile — so the biggest jackpot.
EDGE ×1000 · ~1 / 1,042
The ultimate moonshot.
A luxury-suited billionaire panther, cigar and gold chain. "The house that hates to pay," incarnate. Timeless, streamable, safe.
EDGE ×100 · ~1 / 104
The risk/frequency balance.
A blue-haired punk ferret, all attitude. Cocky, modern, ultra-streamable — and the softest ride of the three.
EDGE ×50 · ~1 / 52
Frequent wins, gentle sensation.
The roster is extensible: each new villain is a content event (season, streamer collab, event skin) with zero engine changes — same math shell, new EDGE multiplier.
The coin is a single three-faced object. Coverage = the bet mode. 9 bet modes total = 3 villains × 3 coverages:
| Mode | Cost | Covers | Reach | RTP | Max win |
|---|---|---|---|---|---|
<villain>_tails | ×1 | TAILS | ×3 + bonus | 96.00% | ×15000 |
<villain>_both | ×2 | TAILS + EDGE | ×3 / jackpot + bonus | 96.00% | ×15000 |
<villain>_bonusbuy | ×100 | is_buybonus | buys the bonus | 96.00% | ×15000 |
Fraction) so that sum(weight·payout) / (sum(weight)·cost) equals 24/25 = 0.9600000000 — verified to the tenth decimal across all 9 modes. Weights are uint64; the lookup tables and books were validated line-by-line (57,819 books, 0 book↔LUT mismatches, all config hashes valid), and the file format was checked against the math-sdk writers themselves (JSONL + zstd, LF line endings, index.json schema).Base probability of TAILS is P(tails) = 0.2801684. It's not 96/3 = 0.32 — it's slightly lowered to fund the bonus so the total RTP still lands on exactly 0.96. It solves, in closed form:
3·p + 96 · q(p) = 0.96 with q(p) = p⁵(1-p)/(1-p⁵)
→ p = 0.2801684 (residual −2.1e-7, tighter than 6-dp rounding)
where q(p) is the stationary frequency of a 5-in-a-row streak — preserved by the in-book conversion (see §05). EDGE probability is P(edge) = RTP / edge, reachable only in the both mode.
| Villain | EDGE × | P(edge) | Frequency | RTP | Volatility |
|---|---|---|---|---|---|
| Goblin Banker | ×1000 | 0.00096 | ~1 / 1,042 | 96.00% | High |
| Panther Oligarch | ×100 | 0.00960 | ~1 / 104 | 96.00% | Medium |
| Punk Ferret | ×50 | 0.01920 | ~1 / 52 | 96.00% | Low |
both cover, whose ~28-30% hit rate is squarely in range. The player still gets full jackpot access — just always paired with TAILS.The feature is the soul of the machine. Any TAILS win can trigger it (~1 in 803 rounds, i.e. 1 in ~225 TAILS wins), or the player can buy it for ×100.
M ∈ {1,2,5,10,25,50,100,250,1000,2500} is drawn and announced on screen — "SPIN €1,000!!". Each TAILS coin then pays 3·M the base bet.Fractions, residual 3.4e-6). Buy cost = EV / RTP = 96 / 0.96 = ×100 → buy-mode RTP = 96/100 = 0.9600 exact, scaling with the bet.r ≈ 1/225, so it simply triggers at random on any TAILS win (~1 round in 803), with no cross-round state of any kind. Every payout — including the ×15000 wincap outcome — is pre-generated; the front end only animates the bonusFlip events. (That rate r = q/p is derived from a 5-in-a-row streak frequency — which is why P(tails) is tuned to 0.2801684 — but nothing is ever tracked between bets.) 100% RGS-compliant.| Metric | Value | Method |
|---|---|---|
| Bonus trigger (natural) | ~1 / 803 rounds | exact — matches rules claim to ±0.05% |
| Bonus EV (capped) | 96× the bet | exact convolution + 2M Monte-Carlo cross-check |
| P(bonus pays 0) | 3.74% | exact |
| P(hitting the ×15000 cap) per bonus-buy | ~1 / 12,730 | exact |
| Base hit rate (tails / both) | 28.0% / 28-30% | from lookup tables |
Per the docs ("Developers utilizing their own frontend and/or math solutions are welcome"), we shipped a custom, self-contained HTML5 front end — not the web-sdk — that is a full RGS client. It is already published and running on the live RGS (real balance, real session).
| Area | What we did | Status |
|---|---|---|
| RGS client | authenticate → play → end-round (+ balance, bet/event), micro-unit amounts (×1e6), rgs_url/sessionID/lang/device/social from the launch URL, active-round resume, full error-code handling. | ✓ live |
| Verified vs. source | We read the ts-client & web-sdk source and fixed to match: payoutMultiplier is a direct float (not ×100), /bet/event takes a string, errors can arrive in a 200 body, replay amount is micro-units. | ✓ matched |
| Bet Replay | replay=true path: GET /bet/replay/…, betting UI hidden, Play / Play Again, zero authenticated wallet calls. | ✓ |
| Social (stake.us) | Full restricted-phrase replacement (bet→play, pays→wins, buy→bonus, cash→coins…) across UI, rules and baked image text; SC/GC display without $. | ✓ audited, 0 residuals |
| CSP compliance | The CDN blocks blob:. Three.js decoded the coin's textures via blob URLs → white coin in prod. Fixed by shipping the coin as a data-URI glTF; verified against your exact connect-src policy. | ✓ golden coin in prod |
| Checklist UI | Official disclaimer verbatim, per-mode cost/RTP/max-win + bonus-multiplier table in the rules, spacebar-to-flip, autoplay & buy-bonus confirmation steps, RGS bet levels & ~30 currencies, static-files-only (fonts & three.js self-hosted). | ✓ |
| IP hygiene | Cinzel & Lilita One (SIL OFL), background music (Pixabay, certificate on file), three.js (MIT). Zero GPL/copyleft anywhere in the bundle. | ✓ |
REVIEW-EVENTS.md ships book IDs per mode for every outcome class — loss / normal win / big win / wincap ×15000 / bonus trigger — e.g. goblin_both: loss = 1, TAILS ×3 = 2, EDGE ×1000 = 3, wincap = 5460.No tutorial, understood in one second, in any language. The villain reaction makes every round a vertical clip with zero editing — content that films itself, which is exactly what drives organic reach and streamer engagement.
One RTP (0.96) across all modes, a declared ×15000 wincap that's achievable, healthy hit rates, no cross-round state, stateless bonus. The math was engineered to pass review, not to squeak through it.
Each new villain is a drop-in EDGE multiplier + art pack — a season, a collab, an event skin — with no engine work. A roster is a roadmap.
Built. Published. Running on the live RGS. Math package uploaded & validated, front end live, replay & social supported, all checklist items addressed. Ready for the approval queue.