@omnitronix/happy-panda-game-engine 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +584 -120
  2. package/dist/__tests__/bonus-sequence.test.d.ts +7 -0
  3. package/dist/__tests__/bonus-sequence.test.d.ts.map +1 -0
  4. package/dist/__tests__/cherry-frequency.test.d.ts +8 -0
  5. package/dist/__tests__/cherry-frequency.test.d.ts.map +1 -0
  6. package/dist/__tests__/counter-manager.test.d.ts +7 -0
  7. package/dist/__tests__/counter-manager.test.d.ts.map +1 -0
  8. package/dist/__tests__/cpp-parity.test.d.ts +39 -0
  9. package/dist/__tests__/cpp-parity.test.d.ts.map +1 -0
  10. package/dist/__tests__/happy-panda-engine.test.d.ts +7 -0
  11. package/dist/__tests__/happy-panda-engine.test.d.ts.map +1 -0
  12. package/dist/__tests__/jackpot-manager.test.d.ts +8 -0
  13. package/dist/__tests__/jackpot-manager.test.d.ts.map +1 -0
  14. package/dist/__tests__/jackpot-trigger-trace.test.d.ts +6 -0
  15. package/dist/__tests__/jackpot-trigger-trace.test.d.ts.map +1 -0
  16. package/dist/__tests__/rtp-1million.test.d.ts +8 -0
  17. package/dist/__tests__/rtp-1million.test.d.ts.map +1 -0
  18. package/dist/__tests__/rtp-analysis.test.d.ts +8 -0
  19. package/dist/__tests__/rtp-analysis.test.d.ts.map +1 -0
  20. package/dist/__tests__/rtp-diagnostic.test.d.ts +6 -0
  21. package/dist/__tests__/rtp-diagnostic.test.d.ts.map +1 -0
  22. package/dist/__tests__/rtp-simulation.test.d.ts +8 -0
  23. package/dist/__tests__/rtp-simulation.test.d.ts.map +1 -0
  24. package/dist/__tests__/special-wins.test.d.ts +7 -0
  25. package/dist/__tests__/special-wins.test.d.ts.map +1 -0
  26. package/dist/__tests__/spin-generator.test.d.ts +7 -0
  27. package/dist/__tests__/spin-generator.test.d.ts.map +1 -0
  28. package/dist/__tests__/spin-handler.test.d.ts +7 -0
  29. package/dist/__tests__/spin-handler.test.d.ts.map +1 -0
  30. package/dist/__tests__/symbol-distribution.test.d.ts +6 -0
  31. package/dist/__tests__/symbol-distribution.test.d.ts.map +1 -0
  32. package/dist/__tests__/weighted-random.test.d.ts +7 -0
  33. package/dist/__tests__/weighted-random.test.d.ts.map +1 -0
  34. package/dist/__tests__/win-evaluator.test.d.ts +7 -0
  35. package/dist/__tests__/win-evaluator.test.d.ts.map +1 -0
  36. package/dist/config/happy-panda.config.d.ts +212 -0
  37. package/dist/config/happy-panda.config.d.ts.map +1 -0
  38. package/dist/config/index.d.ts +5 -0
  39. package/dist/config/index.d.ts.map +1 -0
  40. package/dist/domain/index.d.ts +5 -0
  41. package/dist/domain/index.d.ts.map +1 -0
  42. package/dist/domain/types.d.ts +205 -0
  43. package/dist/domain/types.d.ts.map +1 -0
  44. package/dist/engine/happy-panda-engine.d.ts +50 -0
  45. package/dist/engine/happy-panda-engine.d.ts.map +1 -0
  46. package/dist/engine/index.d.ts +5 -0
  47. package/dist/engine/index.d.ts.map +1 -0
  48. package/dist/happy-panda-v1.game-engine.d.ts +63 -0
  49. package/dist/happy-panda-v1.game-engine.d.ts.map +1 -0
  50. package/dist/happy-panda-v1.game-engine.js +37 -39
  51. package/dist/happy-panda-v1.game-engine.js.map +1 -1
  52. package/dist/index.d.ts +19 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +7 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/logic/handlers/index.d.ts +5 -0
  57. package/dist/logic/handlers/index.d.ts.map +1 -0
  58. package/dist/logic/handlers/spin-handler.d.ts +54 -0
  59. package/dist/logic/handlers/spin-handler.d.ts.map +1 -0
  60. package/dist/logic/index.d.ts +6 -0
  61. package/dist/logic/index.d.ts.map +1 -0
  62. package/dist/logic/services/counter-manager.d.ts +60 -0
  63. package/dist/logic/services/counter-manager.d.ts.map +1 -0
  64. package/dist/logic/services/index.d.ts +7 -0
  65. package/dist/logic/services/index.d.ts.map +1 -0
  66. package/dist/logic/services/jackpot-manager.d.ts +59 -0
  67. package/dist/logic/services/jackpot-manager.d.ts.map +1 -0
  68. package/dist/logic/services/win-evaluator.d.ts +49 -0
  69. package/dist/logic/services/win-evaluator.d.ts.map +1 -0
  70. package/dist/rng/dummy-rng-client.d.ts +39 -0
  71. package/dist/rng/dummy-rng-client.d.ts.map +1 -0
  72. package/dist/rng/dummy-rng-client.js +77 -0
  73. package/dist/rng/dummy-rng-client.js.map +1 -0
  74. package/dist/rng/index.d.ts +10 -0
  75. package/dist/rng/index.d.ts.map +1 -0
  76. package/dist/rng/index.js +5 -0
  77. package/dist/rng/index.js.map +1 -1
  78. package/dist/rng/rng-client.factory.d.ts +33 -0
  79. package/dist/rng/rng-client.factory.d.ts.map +1 -0
  80. package/dist/rng/rng-client.factory.js +57 -0
  81. package/dist/rng/rng-client.factory.js.map +1 -0
  82. package/dist/rng/rng-client.interface.d.ts +51 -0
  83. package/dist/rng/rng-client.interface.d.ts.map +1 -0
  84. package/dist/rng/rng-client.interface.js +9 -0
  85. package/dist/rng/rng-client.interface.js.map +1 -0
  86. package/dist/rng/rng-service.d.ts +93 -0
  87. package/dist/rng/rng-service.d.ts.map +1 -0
  88. package/dist/rng/rng-service.js +124 -0
  89. package/dist/rng/rng-service.js.map +1 -0
  90. package/dist/rng/spin-generator.d.ts +31 -0
  91. package/dist/rng/spin-generator.d.ts.map +1 -0
  92. package/dist/rng/weighted-random.d.ts +30 -0
  93. package/dist/rng/weighted-random.d.ts.map +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Bonus Sequence Integration Tests
3
+ *
4
+ * Tests for complete bonus flows from trigger to completion.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bonus-sequence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bonus-sequence.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bonus-sequence.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Cherry Frequency Analysis Test
3
+ *
4
+ * Counts how many PAID_SPIN grids have 3x cherry lines to verify
5
+ * grid generation produces expected cherry frequency.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cherry-frequency.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cherry-frequency.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cherry-frequency.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Counter Manager Tests
3
+ *
4
+ * Tests for bonus counter logic against the C++ math model.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=counter-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/counter-manager.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * C++ Parity Tests
3
+ *
4
+ * Validates that the TypeScript implementation produces identical results
5
+ * to the C++ math model (CherryMaster_A_2.cpp).
6
+ *
7
+ * ## How This Works
8
+ *
9
+ * 1. Test vectors contain known inputs and expected outputs from C++
10
+ * 2. We run our TypeScript code with identical inputs
11
+ * 3. We compare outputs to verify parity
12
+ *
13
+ * ## Test Vector Format
14
+ *
15
+ * Each test case has:
16
+ * - input: spinType, gameDirection, betStake, betGame, and either:
17
+ * - rngSequence: deterministic RNG values
18
+ * - forcedGrid: bypass RNG and use this grid directly
19
+ * - expected: the C++ model's output for these inputs
20
+ *
21
+ * ## Generating Test Vectors
22
+ *
23
+ * To add new test vectors:
24
+ * 1. Run the C++ model with known inputs
25
+ * 2. Capture the output (grid, wins, payouts)
26
+ * 3. Add to cpp-parity-vectors.json
27
+ *
28
+ * ## Why This Matters
29
+ *
30
+ * The C++ model is the source of truth for:
31
+ * - Win evaluation logic
32
+ * - Payout calculations
33
+ * - Symbol priorities
34
+ * - Bonus mechanics
35
+ *
36
+ * Any divergence from C++ is a bug that must be fixed.
37
+ */
38
+ export {};
39
+ //# sourceMappingURL=cpp-parity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpp-parity.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cpp-parity.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Happy Panda Engine Tests
3
+ *
4
+ * Integration tests for the engine class - the public API.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=happy-panda-engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happy-panda-engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/happy-panda-engine.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Jackpot Manager Tests
3
+ *
4
+ * Tests for progressive and pool jackpot logic.
5
+ * CRITICAL: This is where money comes/goes - must have high coverage.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=jackpot-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jackpot-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jackpot-manager.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Jackpot Trigger Trace Test
3
+ * Tracks where BONUS_JACKPOT triggers originate (PAID_SPIN vs RESPIN_CHERRY)
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=jackpot-trigger-trace.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jackpot-trigger-trace.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jackpot-trigger-trace.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * High-Volume RTP Simulation (100k - 1M Spins)
3
+ *
4
+ * This test validates RTP accuracy with statistical significance.
5
+ * With 1M spins, we expect RTP variance of ±0.5% or less.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=rtp-1million.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-1million.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rtp-1million.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RTP Analysis Tests
3
+ *
4
+ * Analytical calculation to understand expected RTP from weights.
5
+ * Used to debug the 432% RTP issue.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=rtp-analysis.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-analysis.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rtp-analysis.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * RTP Diagnostic Test
3
+ * Compares TypeScript engine RTP breakdown with C++ expected values.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=rtp-diagnostic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-diagnostic.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rtp-diagnostic.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RTP (Return to Player) Simulation Tests
3
+ *
4
+ * Mathematically verifies that the engine delivers the expected 96% RTP.
5
+ * Runs large-scale simulations and validates statistical properties.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=rtp-simulation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-simulation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rtp-simulation.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Special Win Evaluator Tests
3
+ *
4
+ * Tests for bonus-specific win evaluation functions.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=special-wins.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"special-wins.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/special-wins.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Spin Generator Tests
3
+ *
4
+ * Tests for grid generation with symbol limitation system.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=spin-generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spin-generator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/spin-generator.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Spin Handler Integration Tests
3
+ *
4
+ * Tests for the complete spin flow: state creation, spin execution, and transitions.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=spin-handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spin-handler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/spin-handler.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Symbol Distribution Diagnostic
3
+ * Checks if our screen generation matches C++ probability expectations.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=symbol-distribution.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-distribution.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/symbol-distribution.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Weighted Random Tests
3
+ *
4
+ * Tests for weighted random selection utilities.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=weighted-random.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weighted-random.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/weighted-random.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Win Evaluator Tests
3
+ *
4
+ * Tests for the win evaluation logic against the C++ math model.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=win-evaluator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win-evaluator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/win-evaluator.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Happy Panda Game Engine Configuration
3
+ *
4
+ * Extracted from CherryMaster_A_2.cpp math model.
5
+ * 3x3 slot with 8/16 bidirectional paylines.
6
+ *
7
+ * Game Modes:
8
+ * - gameDirection=0: 8 lines, single direction, min bet = 8
9
+ * - gameDirection=1: 16 lines, both directions, min bet = 16
10
+ */
11
+ export declare enum Symbol {
12
+ NONE = -1,
13
+ SUPER_SEVEN = 0,// SEV_S
14
+ SEVEN = 1,// SEV
15
+ BAR3 = 2,// BA3
16
+ BAR2 = 3,// BA2
17
+ BAR1 = 4,// BA1
18
+ MELON = 5,// ME
19
+ BELL = 6,// BE
20
+ PRUNE = 7,// PR
21
+ ORANGE = 8,// OR
22
+ CHERRY = 9,// CH
23
+ SUPER_CHERRY = 10,// CH_S
24
+ SUPER_BAR = 11,// BA_S - used in Bar1 Bonus
25
+ BAR_ANY = 25,// Mixed bar (BAR3+BAR2+BAR1) - for line wins, not bonus trigger
26
+ CHERRY_00 = 12,
27
+ CHERRY_01 = 13,
28
+ CHERRY_02 = 14,
29
+ CHERRY_10 = 15,
30
+ CHERRY_11 = 16,
31
+ CHERRY_12 = 17,
32
+ CHERRY_20 = 18,
33
+ CHERRY_21 = 19,
34
+ CHERRY_22 = 20,
35
+ COLOR_YELLOW = 21,// CO_Y - Jackpot Bonus
36
+ COLOR_RED = 22,// CO_R - Cherry Bonus
37
+ COLOR_GREEN = 23,// CO_G - Bell Bonus
38
+ COLOR_BLUE = 24
39
+ }
40
+ export declare enum SpinType {
41
+ PAID_SPIN = 0,
42
+ BONUS_JACKPOT = 1,
43
+ BONUS_CHERRY = 2,
44
+ BONUS_BELL = 3,
45
+ BONUS_BAR1 = 4,
46
+ RESPIN_CHERRY = 5
47
+ }
48
+ export declare enum ScreenWinType {
49
+ NOTHING = -1,
50
+ SCREEN_SUPER_SEVEN = 0,
51
+ SCREEN_SEVEN = 1,
52
+ SCREEN_BAR3 = 2,
53
+ SCREEN_BAR2 = 3,
54
+ SCREEN_BAR1 = 4,
55
+ SCREEN_MELON = 5,
56
+ SCREEN_BELL = 6,
57
+ SCREEN_PRUNE = 7,
58
+ SCREEN_ORANGE = 8,
59
+ SCREEN_CHERRY = 9,
60
+ SCREEN_BAR_ANY = 10,
61
+ SCREEN_FRUIT_ANY = 11,
62
+ SCREEN_COLOR_ANY = 12,
63
+ SCREEN_CHERRY_PIECES = 13,// Jackpot Bonus
64
+ SCREEN_BELL_SCATTER = 14,// Bell Bonus
65
+ SCREEN_SUPER_BAR = 15
66
+ }
67
+ export declare const GRID: {
68
+ readonly REELS: 3;
69
+ readonly ROWS: 3;
70
+ readonly POSITIONS: 9;
71
+ };
72
+ /**
73
+ * Line pay table: [symbol][matchCount] = multiplier
74
+ * matchCount: 0=x1, 1=x2, 2=x3
75
+ * Values are multiplied by line bet
76
+ */
77
+ export declare const LINE_MULTIPLIERS: number[][];
78
+ /**
79
+ * 16 payline definitions: [lineIdx][positionIdx] = [reel, row]
80
+ * Lines 0-7: forward direction
81
+ * Lines 8-15: reverse direction (for 16-line mode)
82
+ */
83
+ export declare const LINE_SHAPES: number[][][];
84
+ export declare const LINES_PER_DIRECTION: readonly [8, 16];
85
+ /**
86
+ * Wall win multipliers: [wallType] = multiplier x bet_game
87
+ * Order matches ScreenMulti in C++ EXACTLY
88
+ */
89
+ export declare const WALL_MULTIPLIERS: number[];
90
+ /**
91
+ * Seven/Super Seven scatter pay table: [count-2] = multiplier x bet_game
92
+ * Pays for 2-9 matching Seven/Super Seven symbols
93
+ * Matches SevenSuperMulti in C++ EXACTLY
94
+ */
95
+ export declare const SEVEN_SCATTER_MULTIPLIERS: number[];
96
+ export declare const SEVEN_MIN_COUNT = 2;
97
+ export declare const SUPER_SEVEN_MULTIPLIER = 2;
98
+ /**
99
+ * Special win multipliers: [gameDirection][type] = multiplier x line
100
+ * type: 0=cherry pieces, 1=bell scatter, 2=super bar scatter
101
+ * Matches SpecialWins in C++ EXACTLY
102
+ */
103
+ export declare const SPECIAL_WIN_MULTIPLIERS: number[][];
104
+ export declare const BONUS_JACKPOT: {
105
+ /** Initial jackpot value: multiplier x bet_game */
106
+ readonly INIT: 100;
107
+ /** Maximum jackpot value: multiplier x bet_game */
108
+ readonly MAX: 1000;
109
+ /** Probability weights to increment jackpot on losing spin: [gameDir][yes,no] */
110
+ readonly INCREMENT_WEIGHTS: readonly [readonly [3, 10], readonly [3, 10]];
111
+ /** Increment amount: [gameDir] x bet_stake */
112
+ readonly INCREMENT_VALUE: readonly [1, 2];
113
+ /** Counter starts at (always 1 - triggers on 3x cherry line) */
114
+ readonly COUNTER_INIT: 1;
115
+ /** Free spins awarded */
116
+ readonly SPINS: 1;
117
+ /** Additional win on jackpot: multiplier x bet_game */
118
+ readonly ADD_WIN: 5;
119
+ };
120
+ export declare const POOL_JACKPOT: {
121
+ /** Initial pool value */
122
+ readonly INIT: 0;
123
+ /** Maximum pool value: multiplier x bet_game */
124
+ readonly MAX: 250;
125
+ /** Increment values: [gameDir][superSeven, seven] x bet_line */
126
+ readonly INCREMENT: readonly [readonly [10, 5], readonly [10, 5]];
127
+ };
128
+ export declare const BONUS_CHERRY: {
129
+ /** Counter initial values (randomly chosen) */
130
+ readonly COUNTER_INIT: readonly [6, 9];
131
+ /** Weights for choosing initial counter: [gameDir][weight_for_6, weight_for_9] */
132
+ readonly COUNTER_INIT_WEIGHTS: readonly [readonly [5, 5], readonly [5, 5]];
133
+ /** Free spins awarded */
134
+ readonly SPINS: 1;
135
+ };
136
+ export declare const BONUS_BELL: {
137
+ /** Counter initial values (randomly chosen) */
138
+ readonly COUNTER_INIT: readonly [3, 5];
139
+ /** Weights for choosing initial counter: [gameDir][weight_for_3, weight_for_5] */
140
+ readonly COUNTER_INIT_WEIGHTS: readonly [readonly [5, 5], readonly [5, 5]];
141
+ /** Free spins awarded */
142
+ readonly SPINS: 5;
143
+ };
144
+ export declare const BONUS_BAR1: {
145
+ /** Counter starts at (always 1) */
146
+ readonly COUNTER_INIT: 1;
147
+ /** Free spins awarded */
148
+ readonly SPINS: 7;
149
+ };
150
+ export declare const RESPIN_CHERRY: {
151
+ /** Spins awarded: [Cherry, Super Cherry] */
152
+ readonly SPINS: readonly [1, 2];
153
+ };
154
+ /**
155
+ * Symbol weights for paid spins: [gameDirection][position][symbol]
156
+ * Position order: (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)
157
+ * Symbol order: SEV_S, SEV, BA3, BA2, BA1, ME, BE, PR, OR, CH, CH_S
158
+ */
159
+ export declare const PAID_SPIN_WEIGHTS: number[][][];
160
+ /**
161
+ * Active symbol indices for paid spins
162
+ */
163
+ export declare const PAID_SPIN_SYMBOLS: Symbol[];
164
+ /**
165
+ * Limitation tiers: maximum symbols of same type allowed
166
+ */
167
+ export declare const LIMITATION_TIERS: readonly [2, 4, 7, 9];
168
+ /**
169
+ * Limitation weights for paid spins: [gameDirection][symbol][tier]
170
+ * Tier order: max2, max4, max7, max9
171
+ */
172
+ export declare const PAID_SPIN_LIMITATION_WEIGHTS: number[][][];
173
+ /**
174
+ * Probability weights for 3x3 wall wins: [gameDirection][yes, no]
175
+ */
176
+ export declare const PAID_SPIN_3X3_WEIGHTS: number[][];
177
+ /**
178
+ * Weights for which symbol creates 3x3 win
179
+ * Order: SEV_S, SEV, BA3, BA2, BA1, ME, BE, PR, OR, CH, CH_S
180
+ */
181
+ export declare const PAID_SPIN_3X3_SYMBOL_WEIGHTS: number[];
182
+ export declare const JACKPOT_BONUS_SYMBOLS: Symbol[];
183
+ export declare const JACKPOT_BONUS_WEIGHTS: number[][][];
184
+ export declare const JACKPOT_BONUS_LIMITATION_WEIGHTS: number[][][];
185
+ export declare const JACKPOT_BONUS_3X3_WEIGHTS: number[][];
186
+ export declare const JACKPOT_BONUS_3X3_SYMBOL_WEIGHTS: number[];
187
+ export declare const CHERRY_BONUS_SYMBOLS: Symbol[];
188
+ export declare const CHERRY_BONUS_WEIGHTS: number[][][];
189
+ export declare const CHERRY_BONUS_LIMITATION_WEIGHTS: number[][][];
190
+ export declare const CHERRY_BONUS_3X3_WEIGHTS: number[][];
191
+ export declare const CHERRY_BONUS_3X3_SYMBOL_WEIGHTS: number[];
192
+ export declare const BELL_BONUS_SYMBOLS: Symbol[];
193
+ export declare const BELL_BONUS_WEIGHTS: number[][][];
194
+ export declare const BELL_BONUS_LIMITATION_WEIGHTS: number[][][];
195
+ export declare const BELL_BONUS_3X3_WEIGHTS: number[][];
196
+ export declare const BELL_BONUS_3X3_SYMBOL_WEIGHTS: number[];
197
+ export declare const BAR1_BONUS_SYMBOLS: Symbol[];
198
+ export declare const BAR1_BONUS_WEIGHTS: number[][][];
199
+ export declare const BAR1_BONUS_LIMITATION_WEIGHTS: number[][][];
200
+ export declare const BAR1_BONUS_3X3_WEIGHTS: number[][];
201
+ export declare const BAR1_BONUS_3X3_SYMBOL_WEIGHTS: number[];
202
+ export declare const RESPIN_CHERRY_SYMBOLS: Symbol[];
203
+ export declare const RESPIN_CHERRY_WEIGHTS: number[][][];
204
+ export declare const RESPIN_CHERRY_LIMITATION_WEIGHTS: number[][][];
205
+ export declare const BAR_SYMBOLS: Symbol[];
206
+ /** Bar symbols including Super Bar - for bar mix wins (per C++ math model line 1229) */
207
+ export declare const BAR_MIX_SYMBOLS: Symbol[];
208
+ export declare const FRUIT_SYMBOLS: Symbol[];
209
+ export declare const COLOR_SYMBOLS: Symbol[];
210
+ export declare const SEVEN_SYMBOLS: Symbol[];
211
+ export declare const CHERRY_SYMBOLS: Symbol[];
212
+ //# sourceMappingURL=happy-panda.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"happy-panda.config.d.ts","sourceRoot":"","sources":["../../src/config/happy-panda.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,oBAAY,MAAM;IAChB,IAAI,KAAK;IAGT,WAAW,IAAI,CAAI,QAAQ;IAC3B,KAAK,IAAI,CAAU,MAAM;IACzB,IAAI,IAAI,CAAW,MAAM;IACzB,IAAI,IAAI,CAAW,MAAM;IACzB,IAAI,IAAI,CAAW,MAAM;IACzB,KAAK,IAAI,CAAU,KAAK;IACxB,IAAI,IAAI,CAAW,KAAK;IACxB,KAAK,IAAI,CAAU,KAAK;IACxB,MAAM,IAAI,CAAS,KAAK;IACxB,MAAM,IAAI,CAAS,KAAK;IACxB,YAAY,KAAK,CAAE,OAAO;IAG1B,SAAS,KAAK,CAAK,4BAA4B;IAC/C,OAAO,KAAK,CAAO,gEAAgE;IAGnF,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IACd,SAAS,KAAK;IAGd,YAAY,KAAK,CAAE,uBAAuB;IAC1C,SAAS,KAAK,CAAK,sBAAsB;IACzC,WAAW,KAAK,CAAG,oBAAoB;IACvC,UAAU,KAAK;CAChB;AAED,oBAAY,QAAQ;IAClB,SAAS,IAAI;IACb,aAAa,IAAI;IACjB,YAAY,IAAI;IAChB,UAAU,IAAI;IACd,UAAU,IAAI;IACd,aAAa,IAAI;CAClB;AAED,oBAAY,aAAa;IACvB,OAAO,KAAK;IAGZ,kBAAkB,IAAI;IACtB,YAAY,IAAI;IAGhB,WAAW,IAAI;IACf,WAAW,IAAI;IACf,WAAW,IAAI;IACf,YAAY,IAAI;IAChB,WAAW,IAAI;IACf,YAAY,IAAI;IAChB,aAAa,IAAI;IACjB,aAAa,IAAI;IACjB,cAAc,KAAK;IACnB,gBAAgB,KAAK;IACrB,gBAAgB,KAAK;IAGrB,oBAAoB,KAAK,CAAE,gBAAgB;IAC3C,mBAAmB,KAAK,CAAG,aAAa;IACxC,gBAAgB,KAAK;CACtB;AAMD,eAAO,MAAM,IAAI;;;;CAIP,CAAC;AAMX;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAAE,EAatC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,EAAE,EAAE,EAoBnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,kBAAmB,CAAC;AAMpD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAYpC,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAS7C,CAAC;AAEF,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAMxC;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAAE,EAG7C,CAAC;AAMF,eAAO,MAAM,aAAa;IACxB,mDAAmD;;IAEnD,mDAAmD;;IAEnD,iFAAiF;;IAKjF,8CAA8C;;IAE9C,gEAAgE;;IAEhE,yBAAyB;;IAEzB,uDAAuD;;CAE/C,CAAC;AAMX,eAAO,MAAM,YAAY;IACvB,yBAAyB;;IAEzB,gDAAgD;;IAEhD,gEAAgE;;CAKxD,CAAC;AAMX,eAAO,MAAM,YAAY;IACvB,+CAA+C;;IAE/C,kFAAkF;;IAKlF,yBAAyB;;CAEjB,CAAC;AAMX,eAAO,MAAM,UAAU;IACrB,+CAA+C;;IAE/C,kFAAkF;;IAKlF,yBAAyB;;CAEjB,CAAC;AAMX,eAAO,MAAM,UAAU;IACrB,mCAAmC;;IAEnC,yBAAyB;;CAEjB,CAAC;AAMX,eAAO,MAAM,aAAa;IACxB,4CAA4C;;CAEpC,CAAC;AAMX;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAE,EAAE,EAyBzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAY7B,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,gBAAgB,uBAAwB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,EAAE,EAAE,EA6BpD,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAAE,EAG3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,UAExC,CAAC;AAMF,eAAO,MAAM,qBAAqB,UAQjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAAE,EAAE,EAyB7C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAAE,EAAE,EAqBxD,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAAE,EAG/C,CAAC;AAEF,eAAO,MAAM,gCAAgC,UAAwB,CAAC;AAMtE,eAAO,MAAM,oBAAoB,UAQhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAAE,EAAE,EAyB5C,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,EAAE,EAAE,EAqBvD,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,MAAM,EAAE,EAG9C,CAAC;AAEF,eAAO,MAAM,+BAA+B,UAAwB,CAAC;AAMrE,eAAO,MAAM,kBAAkB,UAQ9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAyB1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAAE,EAAE,EAqBrD,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAAE,EAG5C,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAAwB,CAAC;AAMnE,eAAO,MAAM,kBAAkB,UAQ9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAyB1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAAE,EAAE,EAqBrD,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAAE,EAG5C,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAAwB,CAAC;AAMnE,eAAO,MAAM,qBAAqB,UAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAAE,EAAE,EAyB7C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAAE,EAAE,EA6BxD,CAAC;AAMF,eAAO,MAAM,WAAW,UAA0C,CAAC;AACnE,wFAAwF;AACxF,eAAO,MAAM,eAAe,UAA4D,CAAC;AACzF,eAAO,MAAM,aAAa,UAAkF,CAAC;AAC7G,eAAO,MAAM,aAAa,UAAiF,CAAC;AAC5G,eAAO,MAAM,aAAa,UAAqC,CAAC;AAChE,eAAO,MAAM,cAAc,UAAuC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Configuration module exports
3
+ */
4
+ export * from './happy-panda.config';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Domain module exports
3
+ */
4
+ export * from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,SAAS,CAAC"}