Vault Breakers: Super Score — Seeded Simulation Evidence, draft-v0.1

SUPERSEDED by draft-v0.2. Retained unchanged. This document records the APPROVED unbalanced reference baseline of 2026-08-19, including the two Bonus Buy prices that deliberately did not balance. Nothing in it is rewritten by later tuning.

DEV ONLY · NOT FOR PRODUCTION · NOT FOR CERTIFICATION. Every figure in this document is a MONTE CARLO ESTIMATE. The exact results — one snapshot's regular RTP, its hit rate, the scatter-class trigger probability and the Super Scatter instant-prize expectation — live in ../exact/draft-v0.1.md and are never re-derived by sampling.

FieldValue
Date2026-08-19
Game IDvault-breakers-super-score
Math versiondraft-v0.1
Canonical configlibs/mathengine/games/vault_breakers_super_score/vault-breakers-super-score.yaml
Config SHA-2569631c0afdf4ba5553ab52d86e20242b8221cd90b1e807452b8d80036f45e8933
Backend Git SHA6adc7c07c37a74dc7126c6cc060077f4c49cac18
RNG algorithm/versionsha256-trunc64-be/go1-alfg#1
Bet per round1.0 (fixed by RunBatch)
Total wall time2,090 s

Commands

cd /Users/admin/kiro/backend
go test -tags vbdraft -count=1 -v -timeout 180m \
    ./libs/mathengine/games/vault_breakers_super_score -run Draft

Run A — whole-game confirmation

FieldValue
Master seedvault-breakers-draft-v0.1-confirmation
Rounds100,000,000
Shards16 non-overlapping [from, to) ranges of 6,250,000
Shard seedsmathengine.ShardSeed(master, i, from, to)
Mergemathengine.MergeBatches (canonical)
Duration1,708.86 s

Shard boundaries and seeds

ShardRangeSeedShard RTP
0[0, 6250000)b31d3b1d00fdffcb0.949371
1[6250000, 12500000)6959e4227d6a9bc10.964687
2[12500000, 18750000)99fe1330a6755cf90.966260
3[18750000, 25000000)5dfee910250937a70.973230
4[25000000, 31250000)6350a36840d1adca0.958545
5[31250000, 37500000)9f023594df8446890.955023
6[37500000, 43750000)1a37e976577331ed0.961656
7[43750000, 50000000)cf4d786d42d3c1b10.958003
8[50000000, 56250000)f52d48d1a6a5fe500.963408
9[56250000, 62500000)67726653a0e4c7a10.946013
10[62500000, 68750000)877d4290e4d9dc0c0.944801
11[68750000, 75000000)b75a9be1ff0136d20.967997
12[75000000, 81250000)da4638b796596ac00.956511
13[81250000, 87500000)af51fc03e4bb4f430.965650
14[87500000, 93750000)829a57c899bcbba50.961773
15[93750000, 100000000)ed80886bb9515c300.947474

Results — all estimated

MetricValue
Whole-game RTP0.958775 — 95.8775%
Standard error0.001611 — 0.1611 pp
95% confidence interval[95.5617%, 96.1933%]
σ per round16.112286
Variance per round259.605748
Hit frequency0.186993
Zero-return frequency0.813007
Maximum observed award14,635.0000×
Longest dry streak81 rounds

Target 96.00% lies inside the interval, 0.76 standard errors from the estimate.

RTP decomposition

TermMethodContributionFired on
base regular-symbol RTPestimated46.9290%0.182922
base multiplier contributionestimated36.3648%0.041082
free spins — regular partderived4.9403%
free spins — charge partderived3.9869%
Super Scatter instant prizeestimated3.6565%0.000331
whole-game RTP95.8775%

The free-spins term measured by RunBatch is one number, 8.9272%, because the atomic executor settles a sequence as a lump. It is split here by the regular/charge ratio measured directly in Run C on runtime-shaped sequences (55.34% / 44.66%), which is the same rule the atomic path applies. The split is derived, the total is measured, and neither is counted twice.

Win bands

BandCountProbability
081,300,6600.81300660
(0, 1)6,372,1500.06372150
[1, 5)7,344,9120.07344912
[5, 10)3,190,6780.03190678
[10, 50)1,624,4030.01624403
[50, 100)92,4660.00092466
[100, 500)69,1240.00069124
[500, 1000)3,3160.00003316
[1000, 5000)2,1170.00002117
[5000, ∞)1740.00000174

Exceedance

ThresholdProbability1 in
≥ 1×0.123271908.1
≥ 10×0.0179160055.8
≥ 100×0.000747311,338.1
≥ 500×0.0000560717,834.8
≥ 1,000×0.0000229143,649.1

The band edges fall exactly on these thresholds, so these are read off the histogram rather than interpolated.


Run B — distribution, percentiles and charge behaviour

FieldValue
Seedvault-breakers-draft-v0.1-distribution
Rounds5,000,000
Methodevery round's award retained and sorted, so percentiles are order statistics of a real sample rather than interpolations of 10×-wide bins
Duration276.43 s
RTP (this run)0.960416
Zero-return frequency0.812996

Percentiles — all estimated

PercentileAward
P500.0000×
P750.0000×
P901.7500×
P954.9400×
P9914.6500×
P99.978.8400×

P50 and P75 are zero because 81.3% of rounds pay nothing. That is the shape of a high-volatility count-anywhere game, not an artifact.

Base-game charges

Free-spin charges are settled inside the feature and are not itemised here.

MetricValue
Rounds collecting ≥1 charge0.201795
Mean charges per round0.224880
Charges in a roundCountProbability
03,991,0240.79820480
1901,5100.18030200
299,9110.01998220
37,1680.00143360
43710.00007420
5150.00000300
610.00000020

Charge value distribution — 1,124,401 drawn

ValueCountObservedConfigured
777,9570.691885720.692
204,2530.181654940.182
81,3080.072312280.072
10×33,8570.030111140.030
15×14,6210.013003370.013
25×6,7900.006038770.006
50×3,3980.003022050.003
100×1,1180.000994310.001
500×1,0990.000977410.001

Every observed frequency agrees with the configured weight — a direct check that the pool the engine draws from is the pool the config declares.

Feature frequency

EventProbability1 in
Free-spins trigger0.00591520169.1
Super Scatter instant prize0.000356602,804.3

Run A reports free spins contributing on 0.005652 of rounds — slightly below the trigger rate above, because a triggered sequence can pay nothing.


Run C — feature-conditioned: the free-spins split, retriggers and both buys

Sequences are played the way the runtime plays them: one spin per request against the chosen variant, retriggers resolved from the engine's own verdict via mathengine.ResolveOutcomeTrigger, and the whole-cycle ceiling ending generation rather than clamping at the end.

FieldValue
Seedvault-breakers-draft-v0.1-feature
Sequences200,000 per mode
Duration104.39 s

Results — all estimated

MetricFS_STANDARDFS_SUPER
E[sequence award]15.5232×54.7100×
Standard error0.16320.3594
95% confidence interval[15.2034, 15.8431][54.0055, 55.4144]
σ72.9834160.7301
Regular-symbol part8.5899× (55.34%)8.5948× (15.71%)
Charge part6.9334× (44.66%)46.1151× (84.29%)
Mean spins played18.300418.3005
Mean retriggers0.66010.6601
Retrigger frequency0.036069 per free spin0.036070 per free spin
Max sequence award7,769.4700×14,929.4500×

The regular parts agree to within 0.06% — as they must, since the two modes differ only in their charge pool. That agreement is itself a check that the variant pool override touches nothing else.

Buy prices

ModeDesign priceRTP at design pricePrice returning 96.00%
Standard100×15.5232%16.1701×
Super500×10.9420%56.9895×

The design's reference prices do not survive contact with this game's free spins, and the design itself requires recomputation against the tuned model.

The reason is structural, not a tuning error. In this design free spins differ from base spins in exactly one way — the Super mode's charge pool — so Standard free spins are 15 ordinary spins plus retriggers, worth 15.52×. A 15-spin feature cannot be worth 100× a stake in a 96% game. The reference game's free spins are its main event because its free-spin reels are charge-dense; ours are the base reels, because FreeSpinsExecutor ignores a free-spins-specific reel set and using one would make simulation and runtime disagree.


Reconciliation and tolerance

Per-round σ is 16.112286, dominated by the charge mechanic rather than by the Super Scatter prize. That matters because it sets what any sample size can resolve:

Sample sizeStandard error95% CI half-width
20,000,0000.360 pp0.706 pp
100,000,0000.161 pp0.316 pp
1,040,000,0000.050 pp0.098 pp

The ±0.10 pp band proposed on 2026-08-19, before the variance was measured, needs roughly 1.04 billion rounds. The recorded band for Draft v0.1 is therefore the interval this run actually supports:

whole-game RTP = 95.8775%  ±0.3158 pp   (95% CI, 100,000,000 rounds)
target         = 96.0000%
deviation      = -0.1225 pp  =  0.76 standard errors
verdict        = target inside the interval

The original proposal assumed the 50,000× instant prize was the dominant variance term and that computing it exactly would buy the precision. Measurement says otherwise. Reducing the interval further needs either an order of magnitude more sampling, or decoupling charge values from the round's RNG stream so the sum can be Rao-Blackwellised — a change with its own consequences for recorded vectors.

Unresolved

  1. The free-spins regular/charge split is derived from Run C's ratio, not measured inside Run A. The atomic executor reports a sequence as one number.
  2. Charges collected inside free spins are not itemised anywhere; only base-game charges are.
  3. RunBatch's PerFeature.HitCount counts rounds where a feature contributed win, not rounds where it triggered. The two differ for free spins and both are reported above.