@omnitronix/happy-panda-game-engine 0.0.1

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 (71) hide show
  1. package/README.md +212 -0
  2. package/dist/__tests__/bonus-sequence.test.js +337 -0
  3. package/dist/__tests__/bonus-sequence.test.js.map +1 -0
  4. package/dist/__tests__/cherry-frequency.test.js +128 -0
  5. package/dist/__tests__/cherry-frequency.test.js.map +1 -0
  6. package/dist/__tests__/counter-manager.test.js +316 -0
  7. package/dist/__tests__/counter-manager.test.js.map +1 -0
  8. package/dist/__tests__/cpp-parity.test.js +368 -0
  9. package/dist/__tests__/cpp-parity.test.js.map +1 -0
  10. package/dist/__tests__/fixtures/cpp-parity-vectors.json +438 -0
  11. package/dist/__tests__/happy-panda-engine.test.js +367 -0
  12. package/dist/__tests__/happy-panda-engine.test.js.map +1 -0
  13. package/dist/__tests__/jackpot-manager.test.js +313 -0
  14. package/dist/__tests__/jackpot-manager.test.js.map +1 -0
  15. package/dist/__tests__/jackpot-trigger-trace.test.js +146 -0
  16. package/dist/__tests__/jackpot-trigger-trace.test.js.map +1 -0
  17. package/dist/__tests__/rtp-1million.test.js +156 -0
  18. package/dist/__tests__/rtp-1million.test.js.map +1 -0
  19. package/dist/__tests__/rtp-analysis.test.js +138 -0
  20. package/dist/__tests__/rtp-analysis.test.js.map +1 -0
  21. package/dist/__tests__/rtp-diagnostic.test.js +126 -0
  22. package/dist/__tests__/rtp-diagnostic.test.js.map +1 -0
  23. package/dist/__tests__/rtp-simulation.test.js +409 -0
  24. package/dist/__tests__/rtp-simulation.test.js.map +1 -0
  25. package/dist/__tests__/special-wins.test.js +179 -0
  26. package/dist/__tests__/special-wins.test.js.map +1 -0
  27. package/dist/__tests__/spin-generator.test.js +250 -0
  28. package/dist/__tests__/spin-generator.test.js.map +1 -0
  29. package/dist/__tests__/spin-handler.test.js +210 -0
  30. package/dist/__tests__/spin-handler.test.js.map +1 -0
  31. package/dist/__tests__/symbol-distribution.test.js +119 -0
  32. package/dist/__tests__/symbol-distribution.test.js.map +1 -0
  33. package/dist/__tests__/weighted-random.test.js +165 -0
  34. package/dist/__tests__/weighted-random.test.js.map +1 -0
  35. package/dist/__tests__/win-evaluator.test.js +254 -0
  36. package/dist/__tests__/win-evaluator.test.js.map +1 -0
  37. package/dist/config/happy-panda.config.js +714 -0
  38. package/dist/config/happy-panda.config.js.map +1 -0
  39. package/dist/config/index.js +21 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/domain/index.js +21 -0
  42. package/dist/domain/index.js.map +1 -0
  43. package/dist/domain/types.js +28 -0
  44. package/dist/domain/types.js.map +1 -0
  45. package/dist/engine/happy-panda-engine.js +197 -0
  46. package/dist/engine/happy-panda-engine.js.map +1 -0
  47. package/dist/engine/index.js +21 -0
  48. package/dist/engine/index.js.map +1 -0
  49. package/dist/index.js +34 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/logic/handlers/index.js +21 -0
  52. package/dist/logic/handlers/index.js.map +1 -0
  53. package/dist/logic/handlers/spin-handler.js +256 -0
  54. package/dist/logic/handlers/spin-handler.js.map +1 -0
  55. package/dist/logic/index.js +22 -0
  56. package/dist/logic/index.js.map +1 -0
  57. package/dist/logic/services/counter-manager.js +265 -0
  58. package/dist/logic/services/counter-manager.js.map +1 -0
  59. package/dist/logic/services/index.js +23 -0
  60. package/dist/logic/services/index.js.map +1 -0
  61. package/dist/logic/services/jackpot-manager.js +142 -0
  62. package/dist/logic/services/jackpot-manager.js.map +1 -0
  63. package/dist/logic/services/win-evaluator.js +470 -0
  64. package/dist/logic/services/win-evaluator.js.map +1 -0
  65. package/dist/rng/index.js +22 -0
  66. package/dist/rng/index.js.map +1 -0
  67. package/dist/rng/spin-generator.js +341 -0
  68. package/dist/rng/spin-generator.js.map +1 -0
  69. package/dist/rng/weighted-random.js +58 -0
  70. package/dist/rng/weighted-random.js.map +1 -0
  71. package/package.json +49 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Jackpot Manager Service
4
+ *
5
+ * Manages progressive jackpot and pool jackpot values.
6
+ *
7
+ * Progressive Jackpot (Bonus Jackpot):
8
+ * - Starts at 100 x bet_game
9
+ * - On losing paid spins: 3/13 chance to increase by 1-2 x bet_stake
10
+ * - Max: 1000 x bet_game
11
+ * - Paid when Jackpot Bonus triggered
12
+ *
13
+ * Pool Jackpot:
14
+ * - Starts at 0
15
+ * - Increases when Seven/Super Seven in center with no wins
16
+ * - Max: 250 x bet_game
17
+ * - Paid when Bell Bonus triggered
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.createInitialJackpots = createInitialJackpots;
21
+ exports.updateProgressiveJackpot = updateProgressiveJackpot;
22
+ exports.payProgressiveJackpot = payProgressiveJackpot;
23
+ exports.updatePoolJackpot = updatePoolJackpot;
24
+ exports.payPoolJackpot = payPoolJackpot;
25
+ exports.updateJackpots = updateJackpots;
26
+ const happy_panda_config_1 = require("../../config/happy-panda.config");
27
+ const weighted_random_1 = require("../../rng/weighted-random");
28
+ // =============================================================================
29
+ // JACKPOT INITIALIZATION
30
+ // =============================================================================
31
+ /**
32
+ * Create initial jackpot state.
33
+ */
34
+ function createInitialJackpots(betGame) {
35
+ return {
36
+ bonusJackpotValue: happy_panda_config_1.BONUS_JACKPOT.INIT * betGame,
37
+ poolJackpotValue: happy_panda_config_1.POOL_JACKPOT.INIT * betGame,
38
+ };
39
+ }
40
+ // =============================================================================
41
+ // PROGRESSIVE JACKPOT
42
+ // =============================================================================
43
+ /**
44
+ * Update progressive jackpot value on losing paid spin.
45
+ * 3/13 probability to increase.
46
+ */
47
+ async function updateProgressiveJackpot(currentValue, gameDirection, betGame, betStake, spinType, totalWin, rng) {
48
+ // Only on paid spins with no win
49
+ if (spinType !== happy_panda_config_1.SpinType.PAID_SPIN || totalWin > 0) {
50
+ return currentValue;
51
+ }
52
+ // Check if should increase (3/13 probability)
53
+ const [yesWeight, noWeight] = happy_panda_config_1.BONUS_JACKPOT.INCREMENT_WEIGHTS[gameDirection];
54
+ const shouldIncrease = await (0, weighted_random_1.weightedBoolean)(yesWeight, noWeight, rng);
55
+ if (!shouldIncrease) {
56
+ return currentValue;
57
+ }
58
+ // Increase by increment value
59
+ const increment = happy_panda_config_1.BONUS_JACKPOT.INCREMENT_VALUE[gameDirection] * betStake;
60
+ let newValue = currentValue + increment;
61
+ // Cap at maximum
62
+ const maxValue = happy_panda_config_1.BONUS_JACKPOT.MAX * betGame;
63
+ if (newValue > maxValue) {
64
+ newValue = maxValue;
65
+ }
66
+ return newValue;
67
+ }
68
+ /**
69
+ * Pay out progressive jackpot and reset.
70
+ */
71
+ function payProgressiveJackpot(currentValue, betGame) {
72
+ const payout = currentValue;
73
+ const newValue = happy_panda_config_1.BONUS_JACKPOT.INIT * betGame;
74
+ return { payout, newValue };
75
+ }
76
+ // =============================================================================
77
+ // POOL JACKPOT
78
+ // =============================================================================
79
+ /**
80
+ * Update pool jackpot value.
81
+ * Increases when Seven/Super Seven in center position with no wins.
82
+ * IMPORTANT: Must be the ONLY Seven on the entire screen (per C++ math model).
83
+ */
84
+ function updatePoolJackpot(currentValue, grid, gameDirection, betGame, betStake, spinType, totalWin) {
85
+ // Only on paid spins with no win
86
+ if (spinType !== happy_panda_config_1.SpinType.PAID_SPIN || totalWin > 0) {
87
+ return currentValue;
88
+ }
89
+ // Check center position (1,1)
90
+ const centerSymbol = grid[1][1];
91
+ if (!happy_panda_config_1.SEVEN_SYMBOLS.includes(centerSymbol)) {
92
+ return currentValue;
93
+ }
94
+ // Count ALL Sevens on the screen - must be exactly 1
95
+ let sevenCount = 0;
96
+ for (let reel = 0; reel < 3; reel++) {
97
+ for (let row = 0; row < 3; row++) {
98
+ if (happy_panda_config_1.SEVEN_SYMBOLS.includes(grid[reel][row])) {
99
+ sevenCount++;
100
+ }
101
+ }
102
+ }
103
+ if (sevenCount !== 1) {
104
+ return currentValue; // Only single Seven can trigger pool increment
105
+ }
106
+ // Determine increment based on symbol
107
+ const incrementIdx = centerSymbol === happy_panda_config_1.Symbol.SUPER_SEVEN ? 0 : 1;
108
+ const increment = happy_panda_config_1.POOL_JACKPOT.INCREMENT[gameDirection][incrementIdx] * betStake;
109
+ let newValue = currentValue + increment;
110
+ // Cap at maximum
111
+ const maxValue = happy_panda_config_1.POOL_JACKPOT.MAX * betGame;
112
+ if (newValue > maxValue) {
113
+ newValue = maxValue;
114
+ }
115
+ return newValue;
116
+ }
117
+ /**
118
+ * Pay out pool jackpot and reset.
119
+ */
120
+ function payPoolJackpot(currentValue, betGame) {
121
+ const payout = currentValue;
122
+ const newValue = happy_panda_config_1.POOL_JACKPOT.INIT * betGame;
123
+ return { payout, newValue };
124
+ }
125
+ /**
126
+ * Update both jackpot values after a spin.
127
+ */
128
+ async function updateJackpots(currentJackpots, grid, gameDirection, betGame, betStake, spinType, totalWin, rng) {
129
+ const oldProgressiveValue = currentJackpots.bonusJackpotValue;
130
+ const oldPoolValue = currentJackpots.poolJackpotValue;
131
+ const newProgressiveValue = await updateProgressiveJackpot(oldProgressiveValue, gameDirection, betGame, betStake, spinType, totalWin, rng);
132
+ const newPoolValue = updatePoolJackpot(oldPoolValue, grid, gameDirection, betGame, betStake, spinType, totalWin);
133
+ return {
134
+ jackpots: {
135
+ bonusJackpotValue: newProgressiveValue,
136
+ poolJackpotValue: newPoolValue,
137
+ },
138
+ progressiveJackpotIncreased: newProgressiveValue > oldProgressiveValue,
139
+ poolJackpotIncreased: newPoolValue > oldPoolValue,
140
+ };
141
+ }
142
+ //# sourceMappingURL=jackpot-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jackpot-manager.js","sourceRoot":"","sources":["../../../src/logic/services/jackpot-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,470 @@
1
+ "use strict";
2
+ /**
3
+ * Win Evaluator Service
4
+ *
5
+ * Evaluates wins on a 3x3 grid with correct priority:
6
+ * 1. Wall wins (3x3) - suppress line wins
7
+ * 2. Scatter wins (Seven/Super Seven) - suppress line wins
8
+ * 3. Line wins (only if no wall or scatter)
9
+ * 4. Special wins (bonus-specific)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.evaluateWallWin = evaluateWallWin;
13
+ exports.evaluateScatterWins = evaluateScatterWins;
14
+ exports.evaluateLineWins = evaluateLineWins;
15
+ exports.evaluateCherryPieceWins = evaluateCherryPieceWins;
16
+ exports.evaluateBellScatterWins = evaluateBellScatterWins;
17
+ exports.evaluateSuperBarScatterWins = evaluateSuperBarScatterWins;
18
+ exports.evaluateSpin = evaluateSpin;
19
+ const happy_panda_config_1 = require("../../config/happy-panda.config");
20
+ // =============================================================================
21
+ // HELPER FUNCTIONS
22
+ // =============================================================================
23
+ /** Get symbol at position */
24
+ function getSymbol(grid, reel, row) {
25
+ return grid[reel][row];
26
+ }
27
+ /** Get all positions where a symbol appears */
28
+ function findSymbolPositions(grid, symbol) {
29
+ const positions = [];
30
+ for (let reel = 0; reel < happy_panda_config_1.GRID.REELS; reel++) {
31
+ for (let row = 0; row < happy_panda_config_1.GRID.ROWS; row++) {
32
+ if (grid[reel][row] === symbol) {
33
+ positions.push({ reel, row });
34
+ }
35
+ }
36
+ }
37
+ return positions;
38
+ }
39
+ /** Count symbol occurrences */
40
+ function countSymbol(grid, symbol) {
41
+ return findSymbolPositions(grid, symbol).length;
42
+ }
43
+ /** Count symbols in a group */
44
+ function countSymbolGroup(grid, symbols) {
45
+ let count = 0;
46
+ for (let reel = 0; reel < happy_panda_config_1.GRID.REELS; reel++) {
47
+ for (let row = 0; row < happy_panda_config_1.GRID.ROWS; row++) {
48
+ if (symbols.includes(grid[reel][row])) {
49
+ count++;
50
+ }
51
+ }
52
+ }
53
+ return count;
54
+ }
55
+ /** Get all 9 positions */
56
+ function getAllPositions() {
57
+ const positions = [];
58
+ for (let reel = 0; reel < happy_panda_config_1.GRID.REELS; reel++) {
59
+ for (let row = 0; row < happy_panda_config_1.GRID.ROWS; row++) {
60
+ positions.push({ reel, row });
61
+ }
62
+ }
63
+ return positions;
64
+ }
65
+ // =============================================================================
66
+ // WALL WIN EVALUATION
67
+ // =============================================================================
68
+ /** Wall win symbols in order of evaluation */
69
+ const WALL_SYMBOLS = [
70
+ happy_panda_config_1.Symbol.BAR3,
71
+ happy_panda_config_1.Symbol.BAR2,
72
+ happy_panda_config_1.Symbol.BAR1,
73
+ happy_panda_config_1.Symbol.MELON,
74
+ happy_panda_config_1.Symbol.BELL,
75
+ happy_panda_config_1.Symbol.PRUNE,
76
+ happy_panda_config_1.Symbol.ORANGE,
77
+ happy_panda_config_1.Symbol.CHERRY, // Includes Super Cherry in the mix
78
+ ];
79
+ /**
80
+ * Evaluate wall (3x3) wins.
81
+ * Wall wins require all 9 positions to be the same symbol or valid mix.
82
+ */
83
+ function evaluateWallWin(grid, betGame) {
84
+ // Check single-symbol walls
85
+ for (let i = 0; i < WALL_SYMBOLS.length; i++) {
86
+ const symbol = WALL_SYMBOLS[i];
87
+ let count;
88
+ if (symbol === happy_panda_config_1.Symbol.CHERRY) {
89
+ // Cherry wall includes Super Cherry
90
+ count = countSymbolGroup(grid, happy_panda_config_1.CHERRY_SYMBOLS);
91
+ }
92
+ else {
93
+ count = countSymbol(grid, symbol);
94
+ }
95
+ if (count === 9) {
96
+ // Wall type index mapping to WALL_MULTIPLIERS
97
+ let wallTypeIdx;
98
+ switch (symbol) {
99
+ case happy_panda_config_1.Symbol.BAR3:
100
+ wallTypeIdx = 0;
101
+ break;
102
+ case happy_panda_config_1.Symbol.BAR2:
103
+ wallTypeIdx = 1;
104
+ break;
105
+ case happy_panda_config_1.Symbol.BAR1:
106
+ wallTypeIdx = 2;
107
+ break;
108
+ case happy_panda_config_1.Symbol.MELON:
109
+ wallTypeIdx = 3;
110
+ break;
111
+ case happy_panda_config_1.Symbol.BELL:
112
+ wallTypeIdx = 4;
113
+ break;
114
+ case happy_panda_config_1.Symbol.PRUNE:
115
+ wallTypeIdx = 5;
116
+ break;
117
+ case happy_panda_config_1.Symbol.ORANGE:
118
+ wallTypeIdx = 6;
119
+ break;
120
+ case happy_panda_config_1.Symbol.CHERRY:
121
+ wallTypeIdx = 7;
122
+ break;
123
+ default: continue;
124
+ }
125
+ return {
126
+ wallType: happy_panda_config_1.ScreenWinType.SCREEN_BAR3 + wallTypeIdx,
127
+ payout: happy_panda_config_1.WALL_MULTIPLIERS[wallTypeIdx] * betGame,
128
+ positions: getAllPositions(),
129
+ };
130
+ }
131
+ }
132
+ // Check Any Bar wall (mix of BAR3, BAR2, BAR1, SUPER_BAR per C++ math model)
133
+ const barCount = countSymbolGroup(grid, happy_panda_config_1.BAR_MIX_SYMBOLS);
134
+ if (barCount === 9) {
135
+ return {
136
+ wallType: happy_panda_config_1.ScreenWinType.SCREEN_BAR_ANY,
137
+ payout: happy_panda_config_1.WALL_MULTIPLIERS[8] * betGame, // Any Bar = 50x
138
+ positions: getAllPositions(),
139
+ };
140
+ }
141
+ // Check All Fruits wall (Melon, Prune, Orange, Cherry, Super Cherry)
142
+ const fruitCount = countSymbolGroup(grid, happy_panda_config_1.FRUIT_SYMBOLS);
143
+ if (fruitCount === 9) {
144
+ return {
145
+ wallType: happy_panda_config_1.ScreenWinType.SCREEN_FRUIT_ANY,
146
+ payout: happy_panda_config_1.WALL_MULTIPLIERS[9] * betGame, // All Fruits = 15x
147
+ positions: getAllPositions(),
148
+ };
149
+ }
150
+ // Check All Colors wall (bonus only)
151
+ const colorCount = countSymbolGroup(grid, happy_panda_config_1.COLOR_SYMBOLS);
152
+ if (colorCount === 9) {
153
+ return {
154
+ wallType: happy_panda_config_1.ScreenWinType.SCREEN_COLOR_ANY,
155
+ payout: happy_panda_config_1.WALL_MULTIPLIERS[10] * betGame, // All Colors = 50x
156
+ positions: getAllPositions(),
157
+ };
158
+ }
159
+ return null;
160
+ }
161
+ // =============================================================================
162
+ // SCATTER WIN EVALUATION
163
+ // =============================================================================
164
+ /**
165
+ * Evaluate Seven/Super Seven scatter wins.
166
+ * C++ can award TWO scatter wins:
167
+ * 1. Super Seven only scatter (if SEV_S >= 2, doubled if no regular Sevens)
168
+ * 2. Total count scatter (if total >= 2 AND at least 1 regular Seven)
169
+ * Plus +bet_game bonus if exactly 1 Super Seven
170
+ */
171
+ function evaluateScatterWins(grid, betGame) {
172
+ const wins = [];
173
+ const superSevenCount = countSymbol(grid, happy_panda_config_1.Symbol.SUPER_SEVEN);
174
+ const sevenCount = countSymbol(grid, happy_panda_config_1.Symbol.SEVEN);
175
+ const totalCount = superSevenCount + sevenCount;
176
+ const superSevenPositions = findSymbolPositions(grid, happy_panda_config_1.Symbol.SUPER_SEVEN);
177
+ const sevenPositions = findSymbolPositions(grid, happy_panda_config_1.Symbol.SEVEN);
178
+ const allPositions = [...superSevenPositions, ...sevenPositions];
179
+ // First check: Super Seven only scatter (C++ lines 119-136)
180
+ if (superSevenCount >= happy_panda_config_1.SEVEN_MIN_COUNT) {
181
+ const multiplierIdx = 9 - superSevenCount;
182
+ if (multiplierIdx >= 0 && multiplierIdx < happy_panda_config_1.SEVEN_SCATTER_MULTIPLIERS.length) {
183
+ let payout = happy_panda_config_1.SEVEN_SCATTER_MULTIPLIERS[multiplierIdx] * betGame;
184
+ // Double if NO regular Sevens (C++ lines 130-133)
185
+ if (sevenCount === 0) {
186
+ payout *= happy_panda_config_1.SUPER_SEVEN_MULTIPLIER;
187
+ }
188
+ wins.push({
189
+ symbol: happy_panda_config_1.Symbol.SUPER_SEVEN,
190
+ count: superSevenCount,
191
+ payout,
192
+ positions: superSevenPositions,
193
+ isSuperSevenOnly: sevenCount === 0,
194
+ });
195
+ }
196
+ }
197
+ // Second check: Total count scatter (C++ lines 139-157)
198
+ // Only if there's at least 1 regular Seven
199
+ if (totalCount >= happy_panda_config_1.SEVEN_MIN_COUNT && sevenCount > 0) {
200
+ const multiplierIdx = 9 - totalCount;
201
+ if (multiplierIdx >= 0 && multiplierIdx < happy_panda_config_1.SEVEN_SCATTER_MULTIPLIERS.length) {
202
+ let payout = happy_panda_config_1.SEVEN_SCATTER_MULTIPLIERS[multiplierIdx] * betGame;
203
+ // Add bet_game bonus if exactly 1 Super Seven (C++ lines 151-154)
204
+ if (superSevenCount === 1) {
205
+ payout += betGame;
206
+ }
207
+ wins.push({
208
+ symbol: happy_panda_config_1.Symbol.SEVEN,
209
+ count: totalCount,
210
+ payout,
211
+ positions: allPositions,
212
+ isSuperSevenOnly: false,
213
+ });
214
+ }
215
+ }
216
+ return wins;
217
+ }
218
+ // =============================================================================
219
+ // LINE WIN EVALUATION
220
+ // =============================================================================
221
+ /**
222
+ * Check if symbols on a line match for a win.
223
+ * Returns match info or null if no match.
224
+ */
225
+ function evaluateLine(grid, lineIndex, betStake) {
226
+ const lineShape = happy_panda_config_1.LINE_SHAPES[lineIndex];
227
+ const positions = lineShape.map(([reel, row]) => ({ reel, row }));
228
+ const symbols = positions.map(p => getSymbol(grid, p.reel, p.row));
229
+ // Check for 3-of-a-kind first
230
+ const firstSymbol = symbols[0];
231
+ // Cherry special case: pays for 1, 2, or 3
232
+ if (happy_panda_config_1.CHERRY_SYMBOLS.includes(firstSymbol)) {
233
+ return evaluateCherryLine(symbols, positions, lineIndex, betStake);
234
+ }
235
+ // Standard 3-of-a-kind
236
+ const allSame = symbols.every(s => s === firstSymbol);
237
+ if (allSame && firstSymbol >= happy_panda_config_1.Symbol.SUPER_SEVEN && firstSymbol <= happy_panda_config_1.Symbol.ORANGE) {
238
+ const multiplier = happy_panda_config_1.LINE_MULTIPLIERS[firstSymbol][2]; // x3 column
239
+ if (multiplier > 0) {
240
+ return {
241
+ lineIndex,
242
+ symbol: firstSymbol,
243
+ matchLength: 3,
244
+ payout: multiplier * betStake,
245
+ positions,
246
+ };
247
+ }
248
+ }
249
+ // Check Any Bar mix (BAR3, BAR2, BAR1, SUPER_BAR per C++ math model)
250
+ const allBars = symbols.every(s => happy_panda_config_1.BAR_MIX_SYMBOLS.includes(s));
251
+ if (allBars) {
252
+ const multiplier = happy_panda_config_1.LINE_MULTIPLIERS[10][2]; // Any Bar x3 = 10
253
+ return {
254
+ lineIndex,
255
+ symbol: happy_panda_config_1.Symbol.BAR_ANY, // Use BAR_ANY to distinguish from pure BAR1 (for bonus triggers)
256
+ matchLength: 3,
257
+ payout: multiplier * betStake,
258
+ positions,
259
+ };
260
+ }
261
+ return null;
262
+ }
263
+ /**
264
+ * Evaluate cherry line win.
265
+ * Cherry pays for 1, 2, or 3 matches (including Super Cherry mix).
266
+ */
267
+ function evaluateCherryLine(symbols, positions, lineIndex, betStake) {
268
+ let matchLength = 0;
269
+ const winPositions = [];
270
+ for (let i = 0; i < symbols.length; i++) {
271
+ if (happy_panda_config_1.CHERRY_SYMBOLS.includes(symbols[i])) {
272
+ matchLength++;
273
+ winPositions.push(positions[i]);
274
+ }
275
+ else {
276
+ break; // Cherry must be consecutive from start
277
+ }
278
+ }
279
+ if (matchLength === 0) {
280
+ return null;
281
+ }
282
+ // Cherry multiplier: x1=2, x2=5, x3=10
283
+ const multiplier = happy_panda_config_1.LINE_MULTIPLIERS[happy_panda_config_1.Symbol.CHERRY][matchLength - 1];
284
+ if (multiplier === 0) {
285
+ return null;
286
+ }
287
+ return {
288
+ lineIndex,
289
+ symbol: happy_panda_config_1.Symbol.CHERRY,
290
+ matchLength,
291
+ payout: multiplier * betStake,
292
+ positions: winPositions,
293
+ };
294
+ }
295
+ /**
296
+ * Evaluate all line wins.
297
+ */
298
+ function evaluateLineWins(grid, gameDirection, betStake) {
299
+ const lineCount = happy_panda_config_1.LINES_PER_DIRECTION[gameDirection];
300
+ const wins = [];
301
+ for (let lineIndex = 0; lineIndex < lineCount; lineIndex++) {
302
+ const win = evaluateLine(grid, lineIndex, betStake);
303
+ if (win) {
304
+ wins.push(win);
305
+ }
306
+ }
307
+ return wins;
308
+ }
309
+ // =============================================================================
310
+ // SPECIAL WIN EVALUATION (Bonus-specific)
311
+ // =============================================================================
312
+ /**
313
+ * Evaluate cherry piece line wins (Jackpot Bonus).
314
+ * Cherry pieces on lines pay special multiplier.
315
+ */
316
+ function evaluateCherryPieceWins(grid, gameDirection, betStake) {
317
+ const cherryPieces = [
318
+ happy_panda_config_1.Symbol.CHERRY_00, happy_panda_config_1.Symbol.CHERRY_01, happy_panda_config_1.Symbol.CHERRY_02,
319
+ happy_panda_config_1.Symbol.CHERRY_10, happy_panda_config_1.Symbol.CHERRY_11, happy_panda_config_1.Symbol.CHERRY_12,
320
+ happy_panda_config_1.Symbol.CHERRY_20, happy_panda_config_1.Symbol.CHERRY_21, happy_panda_config_1.Symbol.CHERRY_22,
321
+ ];
322
+ // Only check first 8 lines for cherry pieces
323
+ const wins = [];
324
+ let totalLinesWithPieces = 0;
325
+ for (let lineIndex = 0; lineIndex < 8; lineIndex++) {
326
+ const lineShape = happy_panda_config_1.LINE_SHAPES[lineIndex];
327
+ const symbols = lineShape.map(([reel, row]) => grid[reel][row]);
328
+ const allPieces = symbols.every(s => cherryPieces.includes(s));
329
+ if (allPieces) {
330
+ totalLinesWithPieces++;
331
+ }
332
+ }
333
+ if (totalLinesWithPieces > 0) {
334
+ const multiplier = happy_panda_config_1.SPECIAL_WIN_MULTIPLIERS[gameDirection][0];
335
+ // C++ lines 1520-1545: Per-line payment - each winning line adds to screen_win_sum
336
+ // C++ lines 1956-1957: Cherry pieces are position-specific (CH_00 + reel*3 + row)
337
+ // With position-specific cherries, only geometrically valid lines win (~2.66 avg per spin)
338
+ wins.push({
339
+ winType: happy_panda_config_1.ScreenWinType.SCREEN_CHERRY_PIECES,
340
+ count: totalLinesWithPieces,
341
+ payout: totalLinesWithPieces * multiplier * betStake, // Per-line payout
342
+ positions: getAllPositions(),
343
+ });
344
+ }
345
+ return wins;
346
+ }
347
+ /**
348
+ * Evaluate bell scatter wins (Bell Bonus).
349
+ * Each bell pays as scatter during bonus.
350
+ */
351
+ function evaluateBellScatterWins(grid, gameDirection, betStake) {
352
+ const bellCount = countSymbol(grid, happy_panda_config_1.Symbol.BELL);
353
+ if (bellCount === 0) {
354
+ return null;
355
+ }
356
+ const multiplier = happy_panda_config_1.SPECIAL_WIN_MULTIPLIERS[gameDirection][1];
357
+ return {
358
+ winType: happy_panda_config_1.ScreenWinType.SCREEN_BELL_SCATTER,
359
+ count: bellCount,
360
+ payout: bellCount * multiplier * betStake,
361
+ positions: findSymbolPositions(grid, happy_panda_config_1.Symbol.BELL),
362
+ };
363
+ }
364
+ /**
365
+ * Evaluate super bar scatter wins (Bar1 Bonus).
366
+ * Each super bar pays as scatter during bonus.
367
+ */
368
+ function evaluateSuperBarScatterWins(grid, gameDirection, betStake) {
369
+ const superBarCount = countSymbol(grid, happy_panda_config_1.Symbol.SUPER_BAR);
370
+ if (superBarCount === 0) {
371
+ return null;
372
+ }
373
+ const multiplier = happy_panda_config_1.SPECIAL_WIN_MULTIPLIERS[gameDirection][2];
374
+ return {
375
+ winType: happy_panda_config_1.ScreenWinType.SCREEN_SUPER_BAR,
376
+ count: superBarCount,
377
+ payout: superBarCount * multiplier * betStake,
378
+ positions: findSymbolPositions(grid, happy_panda_config_1.Symbol.SUPER_BAR),
379
+ };
380
+ }
381
+ // =============================================================================
382
+ // MAIN EVALUATION FUNCTION
383
+ // =============================================================================
384
+ /**
385
+ * Evaluate all wins for a spin.
386
+ * Implements correct priority: Wall > Scatter > Lines
387
+ */
388
+ function evaluateSpin(grid, gameDirection, betStake, betGame, spinType) {
389
+ const result = {
390
+ lineWins: [],
391
+ wallWin: null,
392
+ scatterWins: [],
393
+ specialWins: [],
394
+ totalPayout: 0,
395
+ };
396
+ // C++ simulation loop (lines 2731-2735, 2762-2766) shows:
397
+ // LineWinsCalculating() -> player_current_win += line_wins_sum
398
+ // ScreenWinsCalculating() -> player_current_win += screen_win_sum
399
+ // BOTH are added independently - NO suppression in the simulation!
400
+ //
401
+ // However, C++ header line 116-117 states:
402
+ // "- line wins are suppress (not added) in case of 3x3 wins"
403
+ // This may refer to UI display, not actual math calculation.
404
+ //
405
+ // Screen wins priority: Wall wins suppress scatter wins (not line wins)
406
+ // C++ line 1436: if(screen_win_sum==0) checks for scatter
407
+ // Step 1: Check wall wins (3x3)
408
+ // C++ ScreenWinsCalculating(): BONUS_JACKPOT and RESPIN_CHERRY skip standard screen wins
409
+ // BONUS_JACKPOT has its own special cherry piece evaluation
410
+ // RESPIN_CHERRY has no screen evaluation
411
+ // Other modes (PAID_SPIN, BONUS_CHERRY, BONUS_BELL, BONUS_BAR1) use standard wall/scatter
412
+ const skipScreenWins = spinType === happy_panda_config_1.SpinType.BONUS_JACKPOT || spinType === happy_panda_config_1.SpinType.RESPIN_CHERRY;
413
+ let wallWin = null;
414
+ if (!skipScreenWins) {
415
+ wallWin = evaluateWallWin(grid, betGame);
416
+ if (wallWin) {
417
+ result.wallWin = wallWin;
418
+ result.totalPayout += wallWin.payout;
419
+ }
420
+ }
421
+ // Step 2: Check scatter wins (Seven/Super Seven)
422
+ // ONLY if no wall win (C++ line 1436: if screen_win_sum==0)
423
+ // C++ can award up to 2 scatter wins (SEV_S only + total mix)
424
+ // Note: BONUS_JACKPOT and RESPIN_CHERRY skip scatter evaluation
425
+ if (!wallWin && !skipScreenWins) {
426
+ const scatterWins = evaluateScatterWins(grid, betGame);
427
+ if (scatterWins.length > 0) {
428
+ result.scatterWins = scatterWins;
429
+ result.totalPayout += scatterWins.reduce((sum, w) => sum + w.payout, 0);
430
+ }
431
+ }
432
+ // Step 3: Line wins
433
+ // C++ header states: "line wins are suppress (not added) in case of 3x3 wins"
434
+ // For PAID_SPIN: Suppress line wins when there's a wall win (brings RTP to ~63.5% matching C++)
435
+ // For BONUS modes: C++ simulation shows both are paid (lines 2762-2766), but bonus symbols
436
+ // rarely form standard line wins anyway (cherry pieces, colors are not line win symbols)
437
+ const shouldSuppressLines = wallWin && spinType === happy_panda_config_1.SpinType.PAID_SPIN;
438
+ if (!shouldSuppressLines) {
439
+ const lineWins = evaluateLineWins(grid, gameDirection, betStake);
440
+ result.lineWins = lineWins;
441
+ result.totalPayout += lineWins.reduce((sum, w) => sum + w.payout, 0);
442
+ }
443
+ // Step 4: Special wins (bonus-specific)
444
+ switch (spinType) {
445
+ case happy_panda_config_1.SpinType.BONUS_JACKPOT: {
446
+ const cherryWins = evaluateCherryPieceWins(grid, gameDirection, betStake);
447
+ result.specialWins.push(...cherryWins);
448
+ result.totalPayout += cherryWins.reduce((sum, w) => sum + w.payout, 0);
449
+ break;
450
+ }
451
+ case happy_panda_config_1.SpinType.BONUS_BELL: {
452
+ const bellWin = evaluateBellScatterWins(grid, gameDirection, betStake);
453
+ if (bellWin) {
454
+ result.specialWins.push(bellWin);
455
+ result.totalPayout += bellWin.payout;
456
+ }
457
+ break;
458
+ }
459
+ case happy_panda_config_1.SpinType.BONUS_BAR1: {
460
+ const barWin = evaluateSuperBarScatterWins(grid, gameDirection, betStake);
461
+ if (barWin) {
462
+ result.specialWins.push(barWin);
463
+ result.totalPayout += barWin.payout;
464
+ }
465
+ break;
466
+ }
467
+ }
468
+ return result;
469
+ }
470
+ //# sourceMappingURL=win-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"win-evaluator.js","sourceRoot":"","sources":["../../../src/logic/services/win-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * RNG module exports
19
+ */
20
+ __exportStar(require("./weighted-random"), exports);
21
+ __exportStar(require("./spin-generator"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rng/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,oDAAkC;AAClC,mDAAiC"}