@omnitronix/lucky-sharky-game-engine 1.0.0

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 (152) hide show
  1. package/README.md +110 -0
  2. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +5 -0
  3. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts.map +1 -0
  4. package/dist/config/game-logic-config/file-system.game-logic-config-loader.js +57 -0
  5. package/dist/config/game-logic-config/file-system.game-logic-config-loader.js.map +1 -0
  6. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +4 -0
  7. package/dist/config/game-logic-config/game-logic-config-loader.d.ts.map +1 -0
  8. package/dist/config/game-logic-config/game-logic-config-loader.js +3 -0
  9. package/dist/config/game-logic-config/game-logic-config-loader.js.map +1 -0
  10. package/dist/config/game-logic-config/game-logic-config.d.ts +4 -0
  11. package/dist/config/game-logic-config/game-logic-config.d.ts.map +1 -0
  12. package/dist/config/game-logic-config/game-logic-config.js +297 -0
  13. package/dist/config/game-logic-config/game-logic-config.js.map +1 -0
  14. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +5 -0
  15. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts.map +1 -0
  16. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.js +34 -0
  17. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.js.map +1 -0
  18. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +4 -0
  19. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts.map +1 -0
  20. package/dist/config/reel-strips-config/reel-strips-config-loader.js +3 -0
  21. package/dist/config/reel-strips-config/reel-strips-config-loader.js.map +1 -0
  22. package/dist/config/reel-strips-config/reels-BASE.csv +53 -0
  23. package/dist/config/reel-strips-config/reels-FREESPINS.csv +53 -0
  24. package/dist/domain/game-round.types.d.ts +10 -0
  25. package/dist/domain/game-round.types.d.ts.map +1 -0
  26. package/dist/domain/game-round.types.js +9 -0
  27. package/dist/domain/game-round.types.js.map +1 -0
  28. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +5 -0
  29. package/dist/domain/mappers/reel-strips-config.mapper.d.ts.map +1 -0
  30. package/dist/domain/mappers/reel-strips-config.mapper.js +17 -0
  31. package/dist/domain/mappers/reel-strips-config.mapper.js.map +1 -0
  32. package/dist/domain/reel-strip-option.d.ts +8 -0
  33. package/dist/domain/reel-strip-option.d.ts.map +1 -0
  34. package/dist/domain/reel-strip-option.js +19 -0
  35. package/dist/domain/reel-strip-option.js.map +1 -0
  36. package/dist/domain/reel-strips-config.d.ts +10 -0
  37. package/dist/domain/reel-strips-config.d.ts.map +1 -0
  38. package/dist/domain/reel-strips-config.js +22 -0
  39. package/dist/domain/reel-strips-config.js.map +1 -0
  40. package/dist/domain/reel.d.ts +9 -0
  41. package/dist/domain/reel.d.ts.map +1 -0
  42. package/dist/domain/reel.js +19 -0
  43. package/dist/domain/reel.js.map +1 -0
  44. package/dist/domain/types/game-spin-command.d.ts +8 -0
  45. package/dist/domain/types/game-spin-command.d.ts.map +1 -0
  46. package/dist/domain/types/game-spin-command.js +3 -0
  47. package/dist/domain/types/game-spin-command.js.map +1 -0
  48. package/dist/domain/types/game-spin-input.dto.d.ts +8 -0
  49. package/dist/domain/types/game-spin-input.dto.d.ts.map +1 -0
  50. package/dist/domain/types/game-spin-input.dto.js +3 -0
  51. package/dist/domain/types/game-spin-input.dto.js.map +1 -0
  52. package/dist/domain/types/game-symbols.response.dto.d.ts +12 -0
  53. package/dist/domain/types/game-symbols.response.dto.d.ts.map +1 -0
  54. package/dist/domain/types/game-symbols.response.dto.js +3 -0
  55. package/dist/domain/types/game-symbols.response.dto.js.map +1 -0
  56. package/dist/domain/types/start-bonus-round-command.d.ts +7 -0
  57. package/dist/domain/types/start-bonus-round-command.d.ts.map +1 -0
  58. package/dist/domain/types/start-bonus-round-command.js +3 -0
  59. package/dist/domain/types/start-bonus-round-command.js.map +1 -0
  60. package/dist/domain/types/start-bonus-round-input.dto.d.ts +7 -0
  61. package/dist/domain/types/start-bonus-round-input.dto.d.ts.map +1 -0
  62. package/dist/domain/types/start-bonus-round-input.dto.js +3 -0
  63. package/dist/domain/types/start-bonus-round-input.dto.js.map +1 -0
  64. package/dist/game-engine.interface.d.ts +42 -0
  65. package/dist/game-engine.interface.d.ts.map +1 -0
  66. package/dist/game-engine.interface.js +3 -0
  67. package/dist/game-engine.interface.js.map +1 -0
  68. package/dist/helpers/generate-hash.d.ts +2 -0
  69. package/dist/helpers/generate-hash.d.ts.map +1 -0
  70. package/dist/helpers/generate-hash.js +8 -0
  71. package/dist/helpers/generate-hash.js.map +1 -0
  72. package/dist/helpers/number-helper.d.ts +24 -0
  73. package/dist/helpers/number-helper.d.ts.map +1 -0
  74. package/dist/helpers/number-helper.js +43 -0
  75. package/dist/helpers/number-helper.js.map +1 -0
  76. package/dist/helpers/uuid-helper.d.ts +4 -0
  77. package/dist/helpers/uuid-helper.d.ts.map +1 -0
  78. package/dist/helpers/uuid-helper.js +11 -0
  79. package/dist/helpers/uuid-helper.js.map +1 -0
  80. package/dist/helpers/validation-helper.d.ts +6 -0
  81. package/dist/helpers/validation-helper.d.ts.map +1 -0
  82. package/dist/helpers/validation-helper.js +16 -0
  83. package/dist/helpers/validation-helper.js.map +1 -0
  84. package/dist/index.d.ts +4 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +7 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/logger/logger.d.ts +9 -0
  89. package/dist/logger/logger.d.ts.map +1 -0
  90. package/dist/logger/logger.js +35 -0
  91. package/dist/logger/logger.js.map +1 -0
  92. package/dist/logic/game-logic-config.interface.d.ts +85 -0
  93. package/dist/logic/game-logic-config.interface.d.ts.map +1 -0
  94. package/dist/logic/game-logic-config.interface.js +3 -0
  95. package/dist/logic/game-logic-config.interface.js.map +1 -0
  96. package/dist/logic/handlers/base-game.handler.d.ts +17 -0
  97. package/dist/logic/handlers/base-game.handler.d.ts.map +1 -0
  98. package/dist/logic/handlers/base-game.handler.js +130 -0
  99. package/dist/logic/handlers/base-game.handler.js.map +1 -0
  100. package/dist/logic/handlers/free-spins.handler.d.ts +16 -0
  101. package/dist/logic/handlers/free-spins.handler.d.ts.map +1 -0
  102. package/dist/logic/handlers/free-spins.handler.js +132 -0
  103. package/dist/logic/handlers/free-spins.handler.js.map +1 -0
  104. package/dist/logic/handlers/hold-win-bonus.handler.d.ts +23 -0
  105. package/dist/logic/handlers/hold-win-bonus.handler.d.ts.map +1 -0
  106. package/dist/logic/handlers/hold-win-bonus.handler.js +215 -0
  107. package/dist/logic/handlers/hold-win-bonus.handler.js.map +1 -0
  108. package/dist/logic/lucky-sharky.game-logic.d.ts +26 -0
  109. package/dist/logic/lucky-sharky.game-logic.d.ts.map +1 -0
  110. package/dist/logic/lucky-sharky.game-logic.js +131 -0
  111. package/dist/logic/lucky-sharky.game-logic.js.map +1 -0
  112. package/dist/logic/lucky-sharky.spin-generator.d.ts +35 -0
  113. package/dist/logic/lucky-sharky.spin-generator.d.ts.map +1 -0
  114. package/dist/logic/lucky-sharky.spin-generator.js +358 -0
  115. package/dist/logic/lucky-sharky.spin-generator.js.map +1 -0
  116. package/dist/logic/lucky-sharky.types.d.ts +264 -0
  117. package/dist/logic/lucky-sharky.types.d.ts.map +1 -0
  118. package/dist/logic/lucky-sharky.types.js +54 -0
  119. package/dist/logic/lucky-sharky.types.js.map +1 -0
  120. package/dist/logic/lucky-sharky.win-calculator.d.ts +13 -0
  121. package/dist/logic/lucky-sharky.win-calculator.d.ts.map +1 -0
  122. package/dist/logic/lucky-sharky.win-calculator.js +203 -0
  123. package/dist/logic/lucky-sharky.win-calculator.js.map +1 -0
  124. package/dist/lucky-sharky-v1.game-engine.d.ts +29 -0
  125. package/dist/lucky-sharky-v1.game-engine.d.ts.map +1 -0
  126. package/dist/lucky-sharky-v1.game-engine.js +154 -0
  127. package/dist/lucky-sharky-v1.game-engine.js.map +1 -0
  128. package/dist/rng/DummyRngClient.d.ts +19 -0
  129. package/dist/rng/DummyRngClient.d.ts.map +1 -0
  130. package/dist/rng/DummyRngClient.js +79 -0
  131. package/dist/rng/DummyRngClient.js.map +1 -0
  132. package/dist/rng/rng-client.factory.d.ts +8 -0
  133. package/dist/rng/rng-client.factory.d.ts.map +1 -0
  134. package/dist/rng/rng-client.factory.js +24 -0
  135. package/dist/rng/rng-client.factory.js.map +1 -0
  136. package/dist/rng/rng-client.interface.d.ts +17 -0
  137. package/dist/rng/rng-client.interface.d.ts.map +1 -0
  138. package/dist/rng/rng-client.interface.js +3 -0
  139. package/dist/rng/rng-client.interface.js.map +1 -0
  140. package/dist/rng/rng-service.d.ts +27 -0
  141. package/dist/rng/rng-service.d.ts.map +1 -0
  142. package/dist/rng/rng-service.js +78 -0
  143. package/dist/rng/rng-service.js.map +1 -0
  144. package/dist/validation/game-logic-config-validation.service.d.ts +5 -0
  145. package/dist/validation/game-logic-config-validation.service.d.ts.map +1 -0
  146. package/dist/validation/game-logic-config-validation.service.js +48 -0
  147. package/dist/validation/game-logic-config-validation.service.js.map +1 -0
  148. package/dist/validation/reel-strips-config-validation.service.d.ts +4 -0
  149. package/dist/validation/reel-strips-config-validation.service.d.ts.map +1 -0
  150. package/dist/validation/reel-strips-config-validation.service.js +36 -0
  151. package/dist/validation/reel-strips-config-validation.service.js.map +1 -0
  152. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # Lucky Sharky Game Engine
2
+
3
+ A standalone game engine for the Lucky Sharky slot game.
4
+
5
+ ## Features
6
+
7
+ - **5x3 Grid Layout** with 20 paylines
8
+ - **Booster Multiplier System** (x1 to x10)
9
+ - **Coin Collection** with Collect symbol mechanic
10
+ - **Free Spins** triggered by 3 scatter symbols
11
+ - **Hold & Win Bonus** with jackpots (Mini, Midi, Maxi, Mega)
12
+ - **96.17% RTP**
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @omnitronix/lucky-sharky-game-engine
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```typescript
23
+ import { LuckySharkyV1GameEngine } from '@omnitronix/lucky-sharky-game-engine';
24
+
25
+ const engine = new LuckySharkyV1GameEngine();
26
+
27
+ // Initialize session
28
+ const initResult = await engine.processCommand(
29
+ null,
30
+ null,
31
+ {
32
+ id: 'command-1',
33
+ type: 'INIT_SESSION_STATE',
34
+ payload: {
35
+ betAmountThresholds: [0.2, 0.4, 1.0, 2.0, 5.0, 10.0],
36
+ defaultBetAmount: 1.0,
37
+ },
38
+ },
39
+ );
40
+
41
+ // Execute a spin
42
+ const spinResult = await engine.processCommand(
43
+ initResult.publicState,
44
+ initResult.privateState,
45
+ {
46
+ id: 'command-2',
47
+ type: 'SPIN',
48
+ payload: {
49
+ sessionId: 'session-123',
50
+ betAmount: 1.0,
51
+ creditsPerLine: 20,
52
+ gameId: 'lucky-sharky',
53
+ gameVersion: '1.0.0',
54
+ },
55
+ },
56
+ );
57
+ ```
58
+
59
+ ## Game Mechanics
60
+
61
+ ### Booster System
62
+ - 10 multiplier levels (x1 to x10)
63
+ - Booster symbols appear on reels 1-4
64
+ - Level increases when booster symbol lands
65
+ - Resets on bet change or Collect trigger (in paid spins)
66
+
67
+ ### Coin Collection
68
+ - 15 different coin values (0.2x to 50x)
69
+ - Collect symbol on reel 5 triggers coin collection
70
+ - Coins are multiplied by current booster level
71
+
72
+ ### Free Spins
73
+ - Triggered by 3 scatter symbols on reels 1, 3, 5
74
+ - Initial spins based on booster level (10/15/20/25)
75
+ - Retriggers at booster levels 4, 7, 10 (+5 spins each)
76
+
77
+ ### Hold & Win Bonus
78
+ - Triggered by 3+ Gold Coins on reels 2-4
79
+ - 3 initial respins
80
+ - Respins reset when new symbols land
81
+ - 4 Jackpots: Mini (30x), Midi (100x), Maxi (500x), Mega (5000x)
82
+ - Full screen bonus: 1000x
83
+
84
+ ## Development
85
+
86
+ ```bash
87
+ # Install dependencies
88
+ npm install
89
+
90
+ # Build
91
+ npm run build
92
+
93
+ # Run tests
94
+ npm test
95
+
96
+ # Lint
97
+ npm run lint
98
+ ```
99
+
100
+ ## Environment Variables
101
+
102
+ - `RNG_CLIENT_MODE` - "local" or "external"
103
+ - `RNG_CLIENT_URL` - External RNG HTTP endpoint
104
+ - `RNG_CLIENT_GRPC_URL` - External RNG gRPC endpoint
105
+ - `RNG_CLIENT_METHOD` - "grpc" or "rest"
106
+ - `RNG_CLIENT_POOL_SIZE` - Ring buffer pool size
107
+
108
+ ## License
109
+
110
+ UNLICENSED - Proprietary to Omnitronix
@@ -0,0 +1,5 @@
1
+ import { GameLogicConfigLoader } from './game-logic-config-loader';
2
+ export declare class FileSystemGameLogicConfigLoader implements GameLogicConfigLoader {
3
+ loadConfig<T>(gameId: string, variantId: string): Promise<T | null>;
4
+ }
5
+ //# sourceMappingURL=file-system.game-logic-config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.game-logic-config-loader.d.ts","sourceRoot":"","sources":["../../../src/config/game-logic-config/file-system.game-logic-config-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,qBAAa,+BAAgC,YAAW,qBAAqB;IAC9D,UAAU,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAmBrB"}
@@ -0,0 +1,57 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FileSystemGameLogicConfigLoader = void 0;
37
+ const path = __importStar(require("path"));
38
+ class FileSystemGameLogicConfigLoader {
39
+ async loadConfig(gameId, variantId) {
40
+ try {
41
+ const configPath = path.resolve(__dirname, `./game-logic-config.js`);
42
+ const configModule = await Promise.resolve(`${configPath}`).then(s => __importStar(require(s)));
43
+ const config = configModule.gameLogicConfig;
44
+ if (!config) {
45
+ console.warn(`Config object 'gameConfig' missing in ${configPath}`);
46
+ return null;
47
+ }
48
+ return config;
49
+ }
50
+ catch (error) {
51
+ console.warn(`Failed to load config for ${gameId}/${variantId}:`, error);
52
+ return null;
53
+ }
54
+ }
55
+ }
56
+ exports.FileSystemGameLogicConfigLoader = FileSystemGameLogicConfigLoader;
57
+ //# sourceMappingURL=file-system.game-logic-config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.game-logic-config-loader.js","sourceRoot":"","sources":["../../../src/config/game-logic-config/file-system.game-logic-config-loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAG7B,MAAa,+BAA+B;IACnC,KAAK,CAAC,UAAU,CACrB,MAAc,EACd,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;YAErE,MAAM,YAAY,GAAG,yBAAa,UAAU,uCAAC,CAAC;YAE9C,MAAM,MAAM,GAAM,YAAY,CAAC,eAAe,CAAC;YAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,yCAAyC,UAAU,EAAE,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,6BAA6B,MAAM,IAAI,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAvBD,0EAuBC"}
@@ -0,0 +1,4 @@
1
+ export interface GameLogicConfigLoader {
2
+ loadConfig<T>(gameId: string, variantId: string): Promise<T | null>;
3
+ }
4
+ //# sourceMappingURL=game-logic-config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-logic-config-loader.d.ts","sourceRoot":"","sources":["../../../src/config/game-logic-config/game-logic-config-loader.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACrE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=game-logic-config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-logic-config-loader.js","sourceRoot":"","sources":["../../../src/config/game-logic-config/game-logic-config-loader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { LuckySharkyGameLogicConfigInterface } from '../../logic/game-logic-config.interface';
2
+ export declare const luckySharkyGameLogicConfig: LuckySharkyGameLogicConfigInterface;
3
+ export declare const gameLogicConfig: LuckySharkyGameLogicConfigInterface;
4
+ //# sourceMappingURL=game-logic-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-logic-config.d.ts","sourceRoot":"","sources":["../../../src/config/game-logic-config/game-logic-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,yCAAyC,CAAC;AAE9F,eAAO,MAAM,0BAA0B,EAAE,mCAmSxC,CAAC;AAEF,eAAO,MAAM,eAAe,qCAA6B,CAAC"}
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gameLogicConfig = exports.luckySharkyGameLogicConfig = void 0;
4
+ exports.luckySharkyGameLogicConfig = {
5
+ baseGame: {
6
+ symbolMultipliers: [
7
+ // Base symbols from C++ BaseMultipliers array
8
+ {
9
+ symbolId: 0,
10
+ name: 'H1',
11
+ isWild: false,
12
+ isScatter: false,
13
+ multipliers: {
14
+ x3: 15,
15
+ x4: 50,
16
+ x5: 200,
17
+ },
18
+ },
19
+ {
20
+ symbolId: 1,
21
+ name: 'H2',
22
+ isWild: false,
23
+ isScatter: false,
24
+ multipliers: {
25
+ x3: 15,
26
+ x4: 50,
27
+ x5: 200,
28
+ },
29
+ },
30
+ {
31
+ symbolId: 2,
32
+ name: 'H3',
33
+ isWild: false,
34
+ isScatter: false,
35
+ multipliers: {
36
+ x3: 10,
37
+ x4: 30,
38
+ x5: 150,
39
+ },
40
+ },
41
+ {
42
+ symbolId: 3,
43
+ name: 'H4',
44
+ isWild: false,
45
+ isScatter: false,
46
+ multipliers: {
47
+ x3: 10,
48
+ x4: 30,
49
+ x5: 150,
50
+ },
51
+ },
52
+ {
53
+ symbolId: 4,
54
+ name: 'M1',
55
+ isWild: false,
56
+ isScatter: false,
57
+ multipliers: {
58
+ x3: 6,
59
+ x4: 20,
60
+ x5: 75,
61
+ },
62
+ },
63
+ {
64
+ symbolId: 5,
65
+ name: 'M2',
66
+ isWild: false,
67
+ isScatter: false,
68
+ multipliers: {
69
+ x3: 5,
70
+ x4: 16,
71
+ x5: 50,
72
+ },
73
+ },
74
+ {
75
+ symbolId: 6,
76
+ name: 'L1',
77
+ isWild: false,
78
+ isScatter: false,
79
+ multipliers: {
80
+ x3: 5,
81
+ x4: 12,
82
+ x5: 25,
83
+ },
84
+ },
85
+ {
86
+ symbolId: 7,
87
+ name: 'L2',
88
+ isWild: false,
89
+ isScatter: false,
90
+ multipliers: {
91
+ x3: 4,
92
+ x4: 10,
93
+ x5: 20,
94
+ },
95
+ },
96
+ {
97
+ symbolId: 8,
98
+ name: 'WILD',
99
+ isWild: true,
100
+ isScatter: false,
101
+ multipliers: {
102
+ x3: 60,
103
+ x4: 300,
104
+ x5: 1000,
105
+ },
106
+ },
107
+ ],
108
+ symbolDefinitions: {
109
+ baseSymbols: {
110
+ minIndex: 0,
111
+ maxIndex: 7,
112
+ },
113
+ specialSymbols: {
114
+ WILD: 8,
115
+ BOOSTER: 9,
116
+ COLLECT: 10,
117
+ FREE_SPINS: 11,
118
+ GOLD_COIN: 12,
119
+ },
120
+ coinSymbols: {
121
+ minIndex: 13,
122
+ maxIndex: 27,
123
+ },
124
+ jackpotSymbols: {
125
+ MINI: 28,
126
+ MIDI: 29,
127
+ MAXI: 30,
128
+ MEGA: 31,
129
+ },
130
+ },
131
+ paylineDefinitions: {
132
+ numberOfLines: 20,
133
+ lineShapes: [
134
+ [1, 1, 1, 1, 1], // Line 1: middle row
135
+ [0, 0, 0, 0, 0], // Line 2: top row
136
+ [2, 2, 2, 2, 2], // Line 3: bottom row
137
+ [0, 1, 2, 1, 0], // Line 4: V shape
138
+ [2, 1, 1, 1, 2], // Line 5: inverted V
139
+ [2, 1, 0, 1, 2], // Line 6
140
+ [0, 0, 1, 0, 0], // Line 7
141
+ [2, 2, 1, 2, 2], // Line 8
142
+ [1, 2, 2, 2, 1], // Line 9
143
+ [2, 0, 0, 0, 2], // Line 10
144
+ [1, 0, 0, 0, 1], // Line 11
145
+ [1, 0, 1, 0, 1], // Line 12
146
+ [1, 2, 1, 2, 1], // Line 13
147
+ [0, 1, 0, 1, 0], // Line 14
148
+ [0, 2, 2, 2, 0], // Line 15
149
+ [2, 1, 2, 1, 2], // Line 16
150
+ [1, 1, 0, 1, 1], // Line 17
151
+ [1, 1, 2, 1, 1], // Line 18
152
+ [0, 1, 1, 1, 0], // Line 19
153
+ [0, 2, 0, 2, 0], // Line 20
154
+ ],
155
+ },
156
+ baseGameConfig: {
157
+ layout: {
158
+ rows: 3,
159
+ reels: 5,
160
+ },
161
+ winConfig: {
162
+ minLength: 3,
163
+ maxLength: 5,
164
+ },
165
+ betLevels: [0.2, 0.4, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 100.0],
166
+ betDefault: 1.0,
167
+ evaluationType: 'PAYLINES',
168
+ },
169
+ boosterSystem: {
170
+ multipliers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
171
+ maxLevel: 9,
172
+ probabilities: {
173
+ paidSpins: [
174
+ [5, 100],
175
+ [5, 160],
176
+ [5, 180],
177
+ [5, 210],
178
+ [5, 220],
179
+ [5, 230],
180
+ [5, 240],
181
+ [5, 250],
182
+ [5, 260],
183
+ [5, 270],
184
+ ],
185
+ freeSpins: [
186
+ [15, 10],
187
+ [15, 20],
188
+ [15, 30],
189
+ [15, 40],
190
+ [15, 50],
191
+ [15, 60],
192
+ [15, 70],
193
+ [15, 80],
194
+ [15, 90],
195
+ [15, 100],
196
+ ],
197
+ },
198
+ },
199
+ coinSystem: {
200
+ values: [
201
+ 0.2, 0.5, 1.0, 2.0, 5.0, 10, 15, 20, 25, 30, 32.5, 35, 40, 45, 50,
202
+ ],
203
+ minCoinsForCollect: 3,
204
+ collectProbabilities: {
205
+ paidSpins: [
206
+ [5, 200],
207
+ [6, 50],
208
+ [6, 40],
209
+ [6, 30],
210
+ [5, 20],
211
+ [5, 15],
212
+ [5, 10],
213
+ [5, 5],
214
+ [5, 2],
215
+ [5, 0],
216
+ ],
217
+ freeSpins: [
218
+ [9, 10],
219
+ [9, 10],
220
+ [9, 20],
221
+ [9, 20],
222
+ [9, 40],
223
+ [9, 50],
224
+ [9, 60],
225
+ [9, 70],
226
+ [9, 80],
227
+ [9, 90],
228
+ ],
229
+ },
230
+ },
231
+ paidSpinsConfig: {
232
+ screenHeight: 3,
233
+ reelsLength: 50,
234
+ reelsOptions: {
235
+ numberOfOptions: 6,
236
+ optionWeights: [4, 4, 5, 5, 6, 6],
237
+ },
238
+ },
239
+ scatterConfig: {
240
+ triggerPositions: [0, 2, 4],
241
+ probabilities: [
242
+ [250, 100, 40, 1],
243
+ [250, 100, 40, 1],
244
+ [250, 100, 40, 1],
245
+ [250, 100, 40, 1],
246
+ [250, 100, 40, 1],
247
+ [250, 100, 40, 1],
248
+ [250, 100, 40, 1],
249
+ [250, 100, 40, 0],
250
+ [250, 100, 40, 0],
251
+ [250, 100, 40, 0],
252
+ ],
253
+ },
254
+ goldCoinConfig: {
255
+ triggerPositions: [1, 2, 3],
256
+ probabilities: [10, 10, 10, 12],
257
+ },
258
+ },
259
+ freeSpins: {
260
+ triggerScatters: 3,
261
+ scatterWinMultiplier: 30,
262
+ initialSpinsByBooster: [
263
+ { minBoosterLevel: 0, spins: 10 },
264
+ { minBoosterLevel: 3, spins: 15 },
265
+ { minBoosterLevel: 6, spins: 20 },
266
+ { minBoosterLevel: 9, spins: 25 },
267
+ ],
268
+ retriggerLevels: [
269
+ { boosterLevel: 3, additionalSpins: 5 },
270
+ { boosterLevel: 6, additionalSpins: 5 },
271
+ { boosterLevel: 9, additionalSpins: 5 },
272
+ ],
273
+ guaranteeSpinRange: [2, 5],
274
+ },
275
+ holdWinBonus: {
276
+ triggerSymbols: 3,
277
+ initialRespins: 3,
278
+ jackpots: [
279
+ { name: 'Mini', multiplier: 30 },
280
+ { name: 'Midi', multiplier: 100 },
281
+ { name: 'Maxi', multiplier: 500 },
282
+ { name: 'Mega', multiplier: 5000 },
283
+ ],
284
+ fullScreenMultiplier: 1000,
285
+ symbolProbabilities: [
286
+ [38, 6, 2],
287
+ [38, 6, 2],
288
+ [39, 6, 2],
289
+ [39, 6, 2],
290
+ [40, 6, 2],
291
+ ],
292
+ coinProbabilities: [7, 7, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2, 2],
293
+ jackpotProbabilities: [250, 100, 50, 20],
294
+ },
295
+ };
296
+ exports.gameLogicConfig = exports.luckySharkyGameLogicConfig;
297
+ //# sourceMappingURL=game-logic-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-logic-config.js","sourceRoot":"","sources":["../../../src/config/game-logic-config/game-logic-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ReelStripsConfigLoader } from './reel-strips-config-loader';
2
+ export declare class FileSystemReelStripsConfigLoader implements ReelStripsConfigLoader {
3
+ loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
4
+ }
5
+ //# sourceMappingURL=file-system.reel-strips-config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.reel-strips-config-loader.d.ts","sourceRoot":"","sources":["../../../src/config/reel-strips-config/file-system.reel-strips-config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,qBAAa,gCACX,YAAW,sBAAsB;IAEpB,UAAU,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;CA6BzB"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileSystemReelStripsConfigLoader = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = require("fs");
9
+ class FileSystemReelStripsConfigLoader {
10
+ async loadConfig(gameId, variantId, reelSetName, reelsCount, optionsCount) {
11
+ const filePath = path_1.default.resolve(__dirname, `./reels-${reelSetName}.csv`);
12
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
13
+ const lines = content
14
+ .split('\n')
15
+ .map((line) => line.trim())
16
+ .filter((line) => line.length > 0)
17
+ .slice(2); // skip headers
18
+ const result = Array.from({ length: reelsCount }, () => Array.from({ length: optionsCount }, () => []));
19
+ for (const line of lines) {
20
+ const values = line.split(';').map((v) => v.trim());
21
+ for (let reel = 0; reel < reelsCount; reel++) {
22
+ for (let opt = 0; opt < optionsCount; opt++) {
23
+ const val = values[reel * optionsCount + opt];
24
+ if (val !== '') {
25
+ result[reel][opt].push(Number(val));
26
+ }
27
+ }
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ }
33
+ exports.FileSystemReelStripsConfigLoader = FileSystemReelStripsConfigLoader;
34
+ //# sourceMappingURL=file-system.reel-strips-config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-system.reel-strips-config-loader.js","sourceRoot":"","sources":["../../../src/config/reel-strips-config/file-system.reel-strips-config-loader.ts"],"names":[],"mappings":";;;;;;AACA,gDAAwB;AACxB,2BAAkC;AAElC,MAAa,gCAAgC;IAGpC,KAAK,CAAC,UAAU,CACrB,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,UAAkB,EAClB,YAAoB;QAEpB,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,WAAW,MAAM,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO;aAClB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QAE5B,MAAM,MAAM,GAAiB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CACnE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAC/C,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC7C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;oBAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;oBAC9C,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAtCD,4EAsCC"}
@@ -0,0 +1,4 @@
1
+ export interface ReelStripsConfigLoader {
2
+ loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
3
+ }
4
+ //# sourceMappingURL=reel-strips-config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reel-strips-config-loader.d.ts","sourceRoot":"","sources":["../../../src/config/reel-strips-config/reel-strips-config-loader.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,UAAU,CACR,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=reel-strips-config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reel-strips-config-loader.js","sourceRoot":"","sources":["../../../src/config/reel-strips-config/reel-strips-config-loader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ Reel 1;;;;;Reel 2;;;;;Reel 3;;;;;Reel 4;;;;;Reel 5;;;;;
2
+ option 0;option 1;option 2;option 3;option 4;option 5;option 0;option 1;option 2;option 3;option 4;option 5;option 0;option 1;option 2;option 3;option 4;option 5;option 0;option 1;option 2;option 3;option 4;option 5;option 0;option 1;option 2;option 3;option 4;option 5
3
+ 7;6;5;8;7;6;6;7;6;7;6;7;7;7;7;7;7;7;6;6;6;6;6;6;7;7;7;7;7;7
4
+ 7;6;7;6;7;6;6;7;6;7;6;7;7;7;7;7;7;7;6;6;6;6;6;15;7;7;7;7;7;7
5
+ 7;6;7;7;7;6;6;7;6;7;19;20;7;7;7;7;7;7;6;6;6;6;6;14;7;7;7;7;7;7
6
+ 5;4;6;5;5;4;4;5;5;4;14;13;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1
7
+ 5;4;4;5;5;4;4;5;5;4;4;5;1;1;1;1;19;14;0;0;0;0;0;0;1;1;1;1;1;1
8
+ 3;2;5;4;3;2;2;3;3;7;2;3;5;5;5;5;13;13;4;4;4;4;14;4;5;5;5;5;5;5
9
+ 3;2;7;3;3;2;2;3;3;2;2;3;8;8;8;8;14;16;4;4;4;4;17;4;8;8;8;8;8;8
10
+ 7;6;6;6;7;6;6;7;7;6;6;7;8;8;8;8;8;18;8;8;8;8;8;8;8;8;8;8;8;8
11
+ 7;6;4;7;7;6;6;7;7;6;16;7;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8
12
+ 5;4;5;4;5;4;4;5;4;5;21;5;7;7;7;7;7;7;8;8;8;8;8;8;7;7;7;7;7;7
13
+ 1;0;1;5;1;0;0;1;0;1;13;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1
14
+ 1;0;7;0;1;0;0;1;0;1;0;15;4;4;4;4;4;4;5;5;5;5;5;5;4;4;4;4;4;4
15
+ 7;6;7;6;7;6;6;7;6;7;6;14;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8
16
+ 3;2;3;7;3;2;2;3;2;3;2;13;5;21;5;15;5;5;15;14;15;14;16;4;5;5;5;5;5;5
17
+ 5;4;5;5;5;4;13;5;13;5;4;5;5;14;5;14;13;15;24;25;13;13;13;16;5;5;5;5;5;5
18
+ 5;4;6;4;5;4;22;5;15;5;4;5;7;7;7;7;14;14;6;6;6;6;15;14;7;7;7;7;7;7
19
+ 7;6;7;6;7;6;6;7;6;7;6;7;4;4;4;4;4;4;5;5;5;5;14;21;4;4;4;4;4;4
20
+ 7;6;7;6;7;6;6;7;6;7;6;7;4;4;4;4;4;4;5;5;5;5;5;5;4;4;4;4;4;4
21
+ 3;2;4;7;3;2;2;3;5;3;2;3;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8
22
+ 3;2;5;2;3;2;2;3;7;3;2;3;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8;8
23
+ 3;2;7;5;3;2;2;3;2;3;2;3;7;7;7;7;7;7;6;6;6;6;6;6;7;7;7;7;7;7
24
+ 7;6;6;6;7;6;6;7;8;8;20;7;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0
25
+ 7;6;8;8;7;6;6;7;8;8;13;21;6;17;6;15;6;14;14;18;16;15;7;7;6;6;6;6;6;6
26
+ 5;4;5;4;5;4;4;5;5;4;16;17;6;27;6;13;17;15;23;13;13;13;7;7;6;6;6;6;6;6
27
+ 5;4;4;5;5;4;4;5;5;4;14;13;2;2;2;2;15;2;3;3;3;3;3;16;2;2;2;2;2;2
28
+ 7;6;8;7;7;6;6;7;7;6;6;15;2;2;2;2;2;2;3;3;3;3;3;13;2;2;2;2;2;2
29
+ 7;6;5;7;7;6;6;7;7;6;6;7;5;5;5;5;5;5;4;4;4;4;4;17;5;5;5;5;5;5
30
+ 7;6;6;4;7;6;6;7;7;6;6;7;7;7;7;7;7;7;6;6;6;6;20;6;7;7;7;7;7;7
31
+ 1;0;7;1;1;0;0;1;1;0;0;1;7;7;7;7;7;7;6;6;6;6;15;6;7;7;7;7;7;7
32
+ 1;0;0;5;1;0;0;1;1;0;0;1;3;3;3;3;3;3;2;2;2;2;2;2;3;3;3;3;3;3
33
+ 5;4;4;5;5;4;4;5;8;8;4;5;3;3;3;3;3;3;2;2;2;2;2;2;3;3;3;3;3;3
34
+ 5;4;8;8;5;4;4;5;8;8;4;5;3;3;3;3;19;18;2;2;2;2;2;2;3;3;3;3;3;3
35
+ 7;6;7;6;7;6;6;7;6;7;20;22;1;1;1;1;14;13;0;0;0;0;0;0;1;1;1;1;1;1
36
+ 3;2;2;7;3;2;2;3;3;5;13;14;5;5;5;5;17;16;4;4;4;4;15;4;5;5;5;5;5;5
37
+ 3;2;4;7;3;2;2;3;3;2;26;18;4;4;4;4;4;4;5;5;5;5;13;5;4;4;4;4;4;4
38
+ 7;6;7;6;7;6;6;7;6;7;6;7;6;6;6;6;6;6;7;7;7;7;17;15;6;6;6;6;6;6
39
+ 5;4;5;4;5;4;4;5;4;5;4;5;6;6;6;6;6;6;7;7;7;7;7;14;6;6;6;6;6;6
40
+ 5;4;4;4;5;4;4;5;4;5;4;5;6;6;6;6;6;6;7;7;7;7;7;13;6;6;6;6;6;6
41
+ 5;4;7;7;5;4;4;5;4;5;4;5;0;0;0;0;0;0;1;1;1;1;1;16;0;0;0;0;0;0
42
+ 1;0;8;8;1;0;0;1;8;8;0;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0
43
+ 1;0;7;5;1;0;0;1;0;1;0;1;6;6;6;6;6;6;7;7;7;7;7;7;6;6;6;6;6;6
44
+ 7;6;4;7;7;6;20;7;14;6;6;7;4;4;4;4;4;4;5;5;5;5;5;5;4;4;4;4;4;4
45
+ 7;6;6;6;7;6;16;7;16;6;6;7;4;4;4;4;4;4;5;5;5;5;17;13;4;4;4;4;4;4
46
+ 3;2;4;5;3;2;2;3;5;3;2;3;4;4;4;4;14;13;5;5;5;5;15;16;4;4;4;4;4;4
47
+ 3;2;3;4;3;2;2;3;2;3;13;14;6;6;6;6;15;19;7;7;7;7;13;7;6;6;6;6;6;6
48
+ 7;6;7;7;7;6;6;7;6;7;22;15;6;6;6;6;13;14;7;7;7;7;7;7;6;6;6;6;6;6
49
+ 7;6;7;6;7;6;6;7;6;7;6;7;2;2;2;2;18;2;3;3;3;3;3;3;2;2;2;2;2;2
50
+ 5;4;8;8;5;4;4;5;5;4;4;5;2;2;2;2;2;2;3;3;3;3;3;3;2;2;2;2;2;2
51
+ 5;4;6;5;5;4;4;5;5;4;4;5;2;2;2;2;2;2;3;3;3;3;3;3;2;2;2;2;2;2
52
+ 5;4;4;5;5;4;4;5;5;4;4;5;6;6;6;6;6;6;7;7;7;7;7;7;6;6;6;6;6;6
53
+