Verification¶
Method¶
Four implementations calculate the game:
| Implementation | File | Method |
|---|---|---|
| Excel workbook | excel/TacklinTheKraken_TheoCalc.xlsx |
Formulas. Exact. |
| Exact calculator | gamemath/exact_calc.py |
Python with exact fractions |
| Game engine and simulator | web/js/engine.js, sim/simulate.mjs |
Monte Carlo simulation with the engine of the playable game |
| C++ simulator | sim_cpp/krakensim.cpp |
Monte Carlo simulation with its own C++ engine. It made the simulation results of this document. |
The script tools/verify_all.py compares them. It does these checks:
- The reel strips obey the design rules. The script also examines each window of each reel: one special symbol at most, and one or more symbols that are not AUS symbols.
- The inputs of the workbook are equal to the configuration file.
- The results of the workbook are equal to the results of the exact calculator.
- The script changes the inputs in a copy of the workbook and does check 3 again. It uses three changed configurations:
- A: new pays (with 1 OAK and 2 OAK pays), new fish values and weights, new level thresholds, spins and multipliers, multiplier rule
fish. - B: new reel strips with KEY symbols on all 5 reels, more FS symbols, a bet of 25 credits.
- C: reel strips with random manual changes that do not obey the gap rule.
- A: new pays (with 1 OAK and 2 OAK pays), new fish values and weights, new level thresholds, spins and multipliers, multiplier rule
- The JavaScript engine and an independent Python evaluator give the same result for 40,000 random spins.
- The C++ simulator and the JavaScript engine give the same result for 100,000 random spins.
- The simulation agrees with the exact values: the total RTP, each RTP component, the trigger frequency and the level probabilities.
Microsoft Excel also calculated the workbook of version 2.0.0. The result was the same as the exact calculator (total RTP 96.1999706942%).
Results¶
18 of 18 checks passed.
| Check | Result | Detail |
|---|---|---|
| Reel strips obey the design rules (gap, AUS limit, placement, windows) | PASS | |
| Workbook inputs equal config/game_config.json | PASS | |
| Workbook equals exact_calc.py (shipped configuration) | PASS | largest relative difference 5.40e-15 |
| Workbook check cells are all OK | PASS | 7 check cells |
| Workbook equals exact_calc.py (variant A: new pays, values, weights, levels, multiplier rule 'fish') | PASS | largest relative difference 2.74e-15 |
| excel_to_config.py reads variant A correctly | PASS | |
| Workbook equals exact_calc.py (variant B: new reel strips, KEY on all 5 reels, more FS, bet 25) | PASS | largest relative difference 4.96e-15 |
| excel_to_config.py reads variant B correctly | PASS | |
| Workbook equals exact_calc.py (variant C: reel strips with random hand edits) | PASS | largest relative difference 4.26e-15 |
| excel_to_config.py reads variant C correctly | PASS | |
| JavaScript engine equals the Python evaluator on random stops | PASS | 40000 spins compared, 0 different |
| C++ simulator equals the JavaScript engine on random stops | PASS | 100000 spins compared, 0 different |
| Simulated RTP is within 3 standard errors of the exact RTP | PASS | sim 0.962015, exact 0.962000, SE 0.000010, z = +1.48, rounds 1.00e+12 |
| Simulated RTP component baseWays is near the exact value | PASS | difference -0.000003 |
| Simulated RTP component baseFish is near the exact value | PASS | difference +0.000003 |
| Simulated RTP component bonus is near the exact value | PASS | difference +0.000015 |
| Simulated trigger frequency is near the exact value | PASS | relative difference -0.00001 |
| Simulated level probabilities are near the exact values | PASS | largest difference 0.00001 |
Playable game¶
These tests used the game in a browser.
| Test | Result |
|---|---|
| Fish value swap after the wager | 501 ms to 505 ms. All five reels were in motion. |
| Reel stops, usual speed | 1.28 s to 2.32 s after the wager |
| KEY anticipation on reels 4 and 5 | Shown after a KEY symbol on reel 1, 2 or 3 |
| FS anticipation | Shown on the subsequent reels after two FS symbols |
| Kraken slow motion: the kraken stops in the window | Reel 5 decreased its speed from 34 to 2.8 symbols for each second. The slow motion part took 1.4 s. The collect paid 2000 credits. |
| Kraken slow motion: the kraken stops one row below the window | Slow motion until the reel stopped (2.0 s). No collect for the kraken. |
| Kraken slow motion: the kraken passes by | Slow motion for 1.65 s. Then the reel increased its speed and stopped. |
| KEY anticipation with no kraken near the stop | No slow motion. The reel stopped at the usual speed. |
| Skip request during the slow motion, turbo mode, slow motion set to off | The reel stopped quickly. Turbo: 6.4 symbols for each second. Off: no slow motion. |
| Forced 3 FS trigger, free spins to level 3 | The balance was equal to the engine results |
| Fast rounds in sequence (187 rounds with version 1.0.0, 47 rounds with version 1.1.0) | No error. The balance was equal to the start balance minus the bets plus the wins. |
| Forced KEY with FISH4 (the kraken), version 1.1.0 | The collect paid 500 credits (usual kraken) and 2000 credits (golden kraken). The two assets showed correctly in sets A, B and C. |
| Free spins started at level 4 with two KEY symbols in one spin | Each KEY collected each fish. The x10 multiplier applied. The balance was correct. |
| Asset sets A, B and C, and an asset of a different set for one symbol | Shown correctly |
| Configuration with a WILD symbol on reel 1 | Rejected with a message |
| Version 2.0.0: KEY symbols on reels 1, 2 and 3; all forced results of the demo suite | Found on the reel strips and paid correctly. No engine warnings. |
| Version 2.0.0: two KEY symbols in one free spin | Each KEY collected each value symbol. The balance was correct. |
| Theme sets D and E with their own game texts | The symbols and the texts showed correctly. A forced collect of the golden top symbol paid 2005 credits. |
| Theme sets F, G and H with their own game texts | The symbols and the texts showed correctly |
| All 8 asset sets | Each set has all 34 asset files. The game showed no placeholder. |
| Default asset set | A browser with no saved selection showed set B (Neon flat) |
| The game in the built document (page Play the game), from a web server | The game started. The math version was 2.0.0. The balance was equal to the start balance minus the bets plus the wins. The browser showed no error. |
Limits of the verification¶
- The simulation has a standard error of 0.001% RTP. It cannot show a difference smaller than this.
- The random number generator of the playable game is xoshiro128**. The random number generator of the C++ simulator is xoshiro256++. They are not certified for real money play.
- An independent test laboratory did not examine this model.