Skip to content

Commit 0c60e70

Browse files
novomatic/jewels4all & powerstars recalculated.
1 parent 232d966 commit 0c60e70

File tree

5 files changed

+91
-62
lines changed

5 files changed

+91
-62
lines changed

game/slot/novomatic/jewels4all/jewels4all_calc.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ func CalcStatEuro(ctx context.Context, x, y slot.Pos) float64 {
8484
func CalcStat(ctx context.Context, mrtp float64) (rtp float64) {
8585
var wc, _ = slot.FindClosest(ChanceMap, mrtp) // wild chance
8686

87-
var b = 1 / wc
88-
fmt.Printf("wild chance %.5g, b = %.5g\n", wc, b)
8987
var rtp00 = CalcStatEuro(ctx, 0, 0)
9088
var rtpeu float64
9189
var x, y slot.Pos
@@ -95,8 +93,9 @@ func CalcStat(ctx context.Context, mrtp float64) (rtp float64) {
9593
}
9694
}
9795
rtpeu /= 15
98-
rtp = rtp00 + wc*rtpeu
96+
rtp = (1-wc)*rtp00 + wc*rtpeu
9997
fmt.Printf("euro avr: rtpeu = %.6f%%\n", rtpeu)
100-
fmt.Printf("RTP = %.5g(sym) + wc*%.5g(eu) = %.6f%%\n", rtp00, rtpeu, rtp)
98+
fmt.Printf("wild chance: 1/%.5g\n", 1/wc)
99+
fmt.Printf("RTP = (1-wc)*%.5g(sym) + wc*%.5g(eu) = %.6f%%\n", rtp00, rtpeu, rtp)
101100
return
102101
}
Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11

22
# Map with wild chances.
33

4-
# RTP = 67.345(sym) + wc*5373.9(eu) = 90.019449%
5-
90.019449: 0.00421940928270042194092827004219 # 1/237
6-
# RTP = 67.345(sym) + wc*5373.9(eu) = 91.995681%
7-
91.995681: 0.00458715596330275229357798165138 # 1/218
8-
# RTP = 67.345(sym) + wc*5373.9(eu) = 93.948228%
9-
93.948228: 0.0049504950495049504950495049505 # 1/202
10-
# RTP = 67.345(sym) + wc*5373.9(eu) = 96.082194%
11-
96.082194: 0.00534759358288770053475935828877 # 1/187
12-
# RTP = 67.345(sym) + wc*5373.9(eu) = 98.052760%
13-
98.052760: 0.00571428571428571428571428571429 # 1/175
14-
# RTP = 67.345(sym) + wc*5373.9(eu) = 99.913849%
15-
99.913849: 0.00606060606060606060606060606061 # 1/165
16-
# RTP = 67.345(sym) + wc*5373.9(eu) = 110.335951%
17-
110.335951: 0.008 # 1/125
4+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 88.073498%
5+
88.073498: 0.00390625 # 1/256
6+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 90.022351%
7+
90.022351: 0.0042735042735042735042735042735 # 1/234
8+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 92.026416%
9+
92.026416: 0.00465116279069767441860465116279 # 1/215
10+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 94.010869%
11+
94.010869: 0.00502512562814070351758793969849 # 1/199
12+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 94.983070%
13+
94.983070: 0.00520833333333333333333333333333 # 1/192
14+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 96.028843%
15+
96.028843: 0.00540540540540540540540540540541 # 1/185
16+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 96.990320%
17+
96.990320: 0.00558659217877094972067039106145 # 1/179
18+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 98.018489%
19+
98.018489: 0.00578034682080924855491329479769 # 1/173
20+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 99.025685%
21+
99.025685: 0.00597014925373134328358208955224 # 1/167.5
22+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 100.000482%
23+
100: 0.00615384615384615384615384615385 # 1/162.5
24+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 100.510728%
25+
100.510728: 0.00625 # 1/160
26+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 102.721791%
27+
102.721791: 0.00666666666666666666666666666667 # 1/150
28+
# RTP = (1-wc)*67.345(sym) + wc*5373.9(eu) = 110.139551%
29+
110.139551: 0.00806451612903225806451612903226 # 1/124

game/slot/novomatic/powerstars/powerstars_calc.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ func CalcStat(ctx context.Context, mrtp float64) (rtp float64) {
104104
var wc, _ = slot.FindClosest(ChanceMap, mrtp) // wild chance
105105

106106
var b = 1 / wc
107-
fmt.Printf("wild chance %.5g, b = %.5g\n", wc, b)
108107
var rtp000 = CalcStatStars(ctx, false, false, false)
109108
var rtp100 = CalcStatStars(ctx, true, false, false)
110109
var rtp010 = CalcStatStars(ctx, false, true, false)
@@ -115,8 +114,9 @@ func CalcStat(ctx context.Context, mrtp float64) (rtp float64) {
115114
var rtp111 = CalcStatStars(ctx, true, true, true)
116115
var q = AnyStarProb(b)
117116
var rtpfs = ((rtp100+rtp010+rtp001)*(b-1)*(b-1) + (rtp110+rtp011+rtp101)*(b-1) + rtp111) / (b*b + (b-1)*b + (b-1)*(b-1))
118-
rtp = rtp000 + q*rtpfs
117+
rtp = (1-q)*rtp000 + q*rtpfs
118+
fmt.Printf("wild chance: 1/%.5g\n", 1/wc)
119119
fmt.Printf("free spins: q = %.5g, 1/q = %.5g, rtpfs = %.6f%%\n", q, 1/q, rtpfs)
120-
fmt.Printf("RTP = %.5g(sym) + q*%.5g(fg) = %.6f%%\n", rtp000, rtpfs, rtp)
120+
fmt.Printf("RTP = (1-q)*%.5g(sym) + q*%.5g(fg) = %.6f%%\n", rtp000, rtpfs, rtp)
121121
return
122122
}
Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,48 @@
11

22
# Map with wild chances.
33

4-
# free spins: q = 0.036141, 1/q = 27.669, rtpfs = 470.021964%
5-
# RTP = 69.063(sym) + q*470.02(fg) = 86.049978%
6-
86.049978: 0.01219512195121951219512195121951 # 1/82
7-
# free spins: q = 0.039995, 1/q = 25.003, rtpfs = 473.142683%
8-
# RTP = 69.063(sym) + q*473.14(fg) = 87.986326%
9-
87.986326: 0.01351351351351351351351351351351 # 1/74
10-
# free spins: q = 0.044111, 1/q = 22.67, rtpfs = 476.496465%
11-
# RTP = 69.063(sym) + q*476.5(fg) = 90.081711%
12-
90.081711: 0.0149253731343283582089552238806 # 1/67
13-
# free spins: q = 0.046146, 1/q = 21.67, rtpfs = 478.162925%
14-
# RTP = 69.063(sym) + q*478.16(fg) = 91.128401%
15-
91.128401: 0.015625 # 1/64
16-
# free spins: q = 0.047611, 1/q = 21.004, rtpfs = 479.365362%
17-
# RTP = 69.063(sym) + q*479.37(fg) = 91.885902%
18-
91.885902: 0.01612903225806451612903225806452 # 1/62
19-
# free spins: q = 0.051714, 1/q = 19.337, rtpfs = 482.749000%
20-
# RTP = 69.063(sym) + q*482.75(fg) = 94.027604%
21-
94.027604: 0.01754385964912280701754385964912 # 1/57
22-
# free spins: q = 0.05356, 1/q = 18.671, rtpfs = 484.278763%
23-
# RTP = 69.063(sym) + q*484.28(fg) = 95.000746%
24-
95.000746: 0.01818181818181818181818181818182 # 1/55
25-
# free spins: q = 0.055542, 1/q = 18.004, rtpfs = 485.926793%
26-
# RTP = 69.063(sym) + q*485.93(fg) = 96.052493%
27-
96.052493: 0.01886792452830188679245283018868 # 1/53
28-
# free spins: q = 0.058808, 1/q = 17.004, rtpfs = 488.652432%
29-
# RTP = 69.063(sym) + q*488.65(fg) = 97.799579%
30-
97.799579: 0.02 # 1/50
31-
# free spins: q = 0.062481, 1/q = 16.005, rtpfs = 491.735591%
32-
# RTP = 69.063(sym) + q*491.74(fg) = 99.787205%
33-
99.787205: 0.02127659574468085106382978723404 # 1/47
4+
# free spins: q = 0.041661, 1/q = 24.003, rtpfs = 474.497567%
5+
# RTP = (1-q)*69.063(sym) + q*474.5(fg) = 85.953799%
6+
85.953799: 0.01408450704225352112676056338028 # 1/71
7+
# free spins: q = 0.046504, 1/q = 21.504, rtpfs = 478.456289%
8+
# RTP = (1-q)*69.063(sym) + q*478.46(fg) = 88.101336%
9+
88.101336: 0.0157480314960629921259842519685 # 1/63.5
10+
# free spins: q = 0.050837, 1/q = 19.671, rtpfs = 482.024562%
11+
# RTP = (1-q)*69.063(sym) + q*482.02(fg) = 90.056832%
12+
90.056832: 0.01724137931034482758620689655172 # 1/58
13+
# free spins: q = 0.053086, 1/q = 18.837, rtpfs = 483.885745%
14+
# RTP = (1-q)*69.063(sym) + q*483.89(fg) = 91.084174%
15+
91.084174: 0.01801801801801801801801801801802 # 1/55.5
16+
# free spins: q = 0.055033, 1/q = 18.171, rtpfs = 485.502955%
17+
# RTP = (1-q)*69.063(sym) + q*485.5(fg) = 91.980923%
18+
91.980923: 0.01869158878504672897196261682243 # 1/53.5
19+
# free spins: q = 0.057129, 1/q = 17.504, rtpfs = 487.248925%
20+
# RTP = (1-q)*69.063(sym) + q*487.25(fg) = 92.953302%
21+
92.953302: 0.01941747572815533980582524271845 # 1/51.5
22+
# free spins: q = 0.05939, 1/q = 16.838, rtpfs = 489.139664%
23+
# RTP = (1-q)*69.063(sym) + q*489.14(fg) = 94.011240%
24+
94.011240: 0.02020202020202020202020202020202 # 1/49.5
25+
# free spins: q = 0.061521, 1/q = 16.255, rtpfs = 490.927500%
26+
# RTP = (1-q)*69.063(sym) + q*490.93(fg) = 95.016294%
27+
95.016294: 0.02094240837696335078534031413613 # 1/47.75
28+
# free spins: q = 0.06381, 1/q = 15.672, rtpfs = 492.855185%
29+
# RTP = (1-q)*69.063(sym) + q*492.86(fg) = 96.105048%
30+
96.105048: 0.02173913043478260869565217391304 # 1/46
31+
# free spins: q = 0.065912, 1/q = 15.172, rtpfs = 494.631660%
32+
# RTP = (1-q)*69.063(sym) + q*494.63(fg) = 97.113045%
33+
97.113045: 0.02247191011235955056179775280899 # 1/44.5
34+
# free spins: q = 0.067773, 1/q = 14.755, rtpfs = 496.208993%
35+
# RTP = (1-q)*69.063(sym) + q*496.21(fg) = 98.011762%
36+
98.011762: 0.02312138728323699421965317919075 # 1/43.25
37+
# free spins: q = 0.069741, 1/q = 14.339, rtpfs = 497.883098%
38+
# RTP = (1-q)*69.063(sym) + q*497.88(fg) = 98.969422%
39+
98.969422: 0.02380952380952380952380952380952 # 1/42
40+
# free spins: q = 0.071828, 1/q = 13.922, rtpfs = 499.663159%
41+
# RTP = (1-q)*69.063(sym) + q*499.66(fg) = 99.991973%
42+
99.991973: 0.02453987730061349693251533742331 # 1/40.75
3443
# free spins: q = 0.083289, 1/q = 12.006, rtpfs = 509.549567%
35-
# RTP = 69.063(sym) + q*509.55(fg) = 111.502592%
36-
111.502592: 0.02857142857142857142857142857143 # 1/35
44+
# RTP = (1-q)*69.063(sym) + q*509.55(fg) = 105.750437%
45+
105.750437: 0.02857142857142857142857142857143 # 1/35
46+
# free spins: q = 0.096704, 1/q = 10.341, rtpfs = 521.359828%
47+
# RTP = (1-q)*69.063(sym) + q*521.36(fg) = 112.801694%
48+
112.801694: 0.03333333333333333333333333333333 # 1/30

game/slot/stat.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ func BruteForce3x(ctx context.Context, s Stater, g SlotGame, reels Reels) {
235235
} else {
236236
if sg.Scanner(&wins) == nil {
237237
s.Update(wins, 1)
238-
wins.Reset()
239238
} else {
240239
s.IncErr()
241240
}
241+
wins.Reset()
242242
}
243243
}
244244
}
@@ -310,10 +310,10 @@ func BruteForce4x(ctx context.Context, s Stater, g SlotGame, reels Reels) {
310310
} else {
311311
if sg.Scanner(&wins) == nil {
312312
s.Update(wins, 1)
313-
wins.Reset()
314313
} else {
315314
s.IncErr()
316315
}
316+
wins.Reset()
317317
}
318318
}
319319
}
@@ -390,10 +390,10 @@ func BruteForce5x(ctx context.Context, s Stater, g SlotGame, reels Reels) {
390390
} else {
391391
if sg.Scanner(&wins) == nil {
392392
s.Update(wins, 1)
393-
wins.Reset()
394393
} else {
395394
s.IncErr()
396395
}
396+
wins.Reset()
397397
}
398398
}
399399
}
@@ -438,10 +438,10 @@ func BruteForce5x3Big(ctx context.Context, s Stater, g SlotGame, r1, rb, r5 []Sy
438438
sg.SetCol(5, r5, i5)
439439
if sg.Scanner(&wins) == nil {
440440
s.Update(wins, 1)
441-
wins.Reset()
442441
} else {
443442
s.IncErr()
444443
}
444+
wins.Reset()
445445
}
446446
}
447447
}
@@ -518,8 +518,11 @@ func BruteForce6x(ctx context.Context, s Stater, g SlotGame, reels Reels) {
518518
cs.SetCol(5, r5, i5)
519519
}
520520
} else {
521-
sg.Scanner(&wins)
522-
s.Update(wins, 1)
521+
if sg.Scanner(&wins) == nil {
522+
s.Update(wins, 1)
523+
} else {
524+
s.IncErr()
525+
}
523526
wins.Reset()
524527
}
525528
}
@@ -576,8 +579,11 @@ func MonteCarlo(ctx context.Context, s Stater, g SlotGame, reels Reels) {
576579
}
577580
} else {
578581
sg.ReelSpin(reels)
579-
sg.Scanner(&wins)
580-
s.Update(wins, 1)
582+
if sg.Scanner(&wins) == nil {
583+
s.Update(wins, 1)
584+
} else {
585+
s.IncErr()
586+
}
581587
wins.Reset()
582588
}
583589
}
@@ -645,10 +651,10 @@ func MonteCarloPrec(ctx context.Context, s Stater, g SlotGame, reels Reels, calc
645651
sg.ReelSpin(reels)
646652
if sg.Scanner(&wins) == nil {
647653
s.Update(wins, 1)
648-
wins.Reset()
649654
} else {
650655
s.IncErr()
651656
}
657+
wins.Reset()
652658
}
653659
}
654660
}()

0 commit comments

Comments
 (0)