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

DEV ONLY · NOT FOR PRODUCTION · NOT FOR CERTIFICATION. Every figure here is a MONTE CARLO ESTIMATE. The exact results live in ../exact/draft-v0.2.md and are never re-derived by sampling.

Supersedes draft-v0.1.md, which is retained unchanged.

FieldValue
Date2026-08-19
Game IDvault-breakers-super-score
Math versiondraft-v0.2
Canonical configlibs/mathengine/games/vault_breakers_super_score/vault-breakers-super-score.yaml
Config SHA-256fa6d0410d7de619e68b42083e7012b975d70be572a252d0dd60f3debe2ba4fc8
RNG algorithm/versionsha256-trunc64-be/go1-alfg#1
Bet per round1.0 (fixed by RunBatch)

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)

The master seed string still says v0.1. It is the seed scheme, not a version claim, and it is left alone on purpose: changing it would make v0.1 and v0.2 differ by both the config and the seeds, and only one of those is the thing under test.

Shard boundaries and seeds

ShardRangeSeedShard RTP
0[0, 6250000)b31d3b1d00fdffcb0.955180
1[6250000, 12500000)6959e4227d6a9bc10.960067
2[12500000, 18750000)99fe1330a6755cf90.964729
3[18750000, 25000000)5dfee910250937a70.955419
4[25000000, 31250000)6350a36840d1adca0.958035
5[31250000, 37500000)9f023594df8446890.956475
6[37500000, 43750000)1a37e976577331ed0.963114
7[43750000, 50000000)cf4d786d42d3c1b10.963184
8[50000000, 56250000)f52d48d1a6a5fe500.964534
9[56250000, 62500000)67726653a0e4c7a10.962392
10[62500000, 68750000)877d4290e4d9dc0c0.953155
11[68750000, 75000000)b75a9be1ff0136d20.964199
12[75000000, 81250000)da4638b796596ac00.952375
13[81250000, 87500000)af51fc03e4bb4f430.953302
14[87500000, 93750000)829a57c899bcbba50.960418
15[93750000, 100000000)ed80886bb9515c300.956994

Results — all estimated

MetricValue
Whole-game RTP0.958973 — 95.8973%
Standard error0.001353 — 0.1353 pp
95% confidence interval[95.6321%, 96.1625%]
σ per round13.531314
Hit frequency0.198284
Zero-return frequency0.801716
Maximum observed award23,662.9900×
Longest dry streak78 rounds

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

RTP decomposition

TermMethodContributionFired on
base regular-symbol RTPestimated76.5053%0.197594
base multiplier contributionestimated5.0105%0.004299
free spins — regular partderived0.5714%
free spins — charge partderived11.9856%
Super Scatter instant prizeestimated1.8246%0.000148
whole-game RTP95.8974%

The free-spins term measured by RunBatch is one number, 12.5570%, split by the regular/charge ratio measured directly on runtime-shaped sequences in Run C (4.55% / 95.45%). The split is derived, the total is measured, and neither is counted twice.

Win bands

BandCountProbability
080,171,6490.80171649
(0, 1)6,727,4530.06727453
[1, 5)8,007,9560.08007956
[5, 10)3,278,0780.03278078
[10, 50)1,735,7150.01735715
[50, 100)27,4970.00027497
[100, 500)46,6830.00046683
[500, 1000)3,7200.00003720
[1000, 5000)1,1070.00001107
[5000, ∞)1420.00000142

Exceedance

ThresholdProbability1 in
≥ 1×0.131008987.6
≥ 10×0.0181486455.1
≥ 100×0.000516521,936.0
≥ 500×0.0000496920,124.8
≥ 1,000×0.0000124980,064.1

Run B — distribution, percentiles and charge behaviour

FieldValue
Seedvault-breakers-draft-v0.1-distribution
Rounds5,000,000
RTP (this run)0.964864
Zero-return frequency0.801639

Percentiles — all estimated

P50P75P90P95P99P99.9
0.0000×0.0000×2.4000×5.0800×12.6900×42.3700×

P50 and P75 are zero because 80.2% of paid rounds pay nothing.

Base-game charges

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

MetricValue
Rounds collecting ≥1 charge0.019193
Mean charges per round0.019377
Charges in a roundCountProbability
04,904,0340.98080680
195,0500.01901000
29110.00018220
350.00000100

Charges in the base game are rare by design: at 30 out of 50,000 they are a visitor to a paid spin, and the mechanic lives in free spins, where the weight is 7,250.

Charge value distribution — 96,847 drawn

ValueCountObservedConfigured
67,0410.691950420.692
17,5060.180684720.182
7,1250.073539280.072
10×2,8910.029838880.030
15×1,2550.012953230.013
25×5700.005883140.006
50×2950.003044780.003
100×1010.001042450.001
500×1030.001063090.001

Feature frequency

EventProbability1 in
Free-spins trigger0.00133380749.7
Super Scatter instant prize0.000163606,112.5

Run C — 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.

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

Results — all estimated

MetricFS_STANDARDFS_SUPER
E[sequence award]96.4173×485.2263×
Standard error0.63201.8361
95% confidence interval[95.1786, 97.6561][481.6275, 488.8250]
σ282.6475821.1276
Regular-symbol part4.3856× (4.55%)4.3908× (0.90%)
Charge part92.0317× (95.45%)480.8354× (99.10%)
Mean spins played15.876615.8834
Mean retriggers0.17530.1767
Retrigger frequency0.011043 per free spin0.011124 per free spin
Max sequence award13,410.2500×17,741.6500×

The regular parts agree to within 0.12% — 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 — the reference values hold

ModePriceRTP at that priceFair price for exactly 96.00%
Standard100×96.4173%100.4347×
Super500×97.0453%505.4440×

Both design prices land within half a percent of their fair value. In draft-v0.1 the same prices returned 15.52% and 10.94%; the difference is free spins running their own charge-dense reel table rather than the base one.


Reconciliation and tolerance

Per-round σ is 13.531314.

Sample sizeStandard error95% CI half-width
25,000,0000.271 pp0.530 pp
100,000,0000.135 pp0.265 pp
733,000,0000.050 pp0.098 pp
whole-game RTP = 95.8973%  +/-0.2652 pp   (95% CI, 100,000,000 rounds)
target         = 96.0000%
deviation      = -0.1027 pp  =  0.76 standard errors
verdict        = target inside the interval

Sizing note for the next tuning pass

The final corrections were made on the scatter-class weight, because it is the one lever that moves the whole game without moving either buy — a buy is priced off the sequence award, and the sequence award does not depend on how often a sequence is triggered for free.

P(4+ of the class) does not scale as the fourth power of the class weight over this range. Measured across two 100,000,000-round confirmations the effective exponent is about 2.78. Assuming 4 overshot the first correction by a third of a point and cost a run.

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; only base-game charges are.
  3. A free-spin snapshot pays a regular win on 8.23% of snapshots against the base game's 19.76%, because charges occupy 14.5% of the grid. Free spins are rarer wins, far larger ones, and 95%+ of a sequence's award is the charge part. Deliberate, recorded rather than smoothed, and worth a product decision before this leaves Draft.