@omnitronix/bonnys-fortune-game-engine 1.3.2 → 1.5.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 (175) hide show
  1. package/README.md +25 -15
  2. package/dist/__tests__/base-game.test.js +255 -0
  3. package/dist/__tests__/base-game.test.js.map +1 -0
  4. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.js +1 -1
  5. package/dist/__tests__/bonus-handlers.test.js +303 -0
  6. package/dist/__tests__/bonus-handlers.test.js.map +1 -0
  7. package/dist/__tests__/bonus-meters.test.js +508 -0
  8. package/dist/__tests__/bonus-meters.test.js.map +1 -0
  9. package/dist/__tests__/collect-feature-handler.test.js +386 -0
  10. package/dist/__tests__/collect-feature-handler.test.js.map +1 -0
  11. package/dist/__tests__/comprehensive.test.js +747 -0
  12. package/dist/__tests__/comprehensive.test.js.map +1 -0
  13. package/dist/__tests__/error-paths.test.js +373 -0
  14. package/dist/__tests__/error-paths.test.js.map +1 -0
  15. package/dist/__tests__/helpers/test-engine-factory.js +268 -0
  16. package/dist/__tests__/helpers/test-engine-factory.js.map +1 -0
  17. package/dist/__tests__/rng-gli19-compliance.test.js +292 -0
  18. package/dist/__tests__/rng-gli19-compliance.test.js.map +1 -0
  19. package/dist/__tests__/rng-security.test.js +383 -0
  20. package/dist/__tests__/rng-security.test.js.map +1 -0
  21. package/dist/__tests__/rtp-simulation.test.js +242 -0
  22. package/dist/__tests__/rtp-simulation.test.js.map +1 -0
  23. package/dist/__tests__/state-transitions.test.js +307 -0
  24. package/dist/__tests__/state-transitions.test.js.map +1 -0
  25. package/dist/__tests__/steering-fortune-handler.test.js +286 -0
  26. package/dist/__tests__/steering-fortune-handler.test.js.map +1 -0
  27. package/dist/__tests__/symbol-distribution.test.js +195 -0
  28. package/dist/__tests__/symbol-distribution.test.js.map +1 -0
  29. package/dist/__tests__/treasure-hunt-handler.test.js +295 -0
  30. package/dist/__tests__/treasure-hunt-handler.test.js.map +1 -0
  31. package/dist/__tests__/win-calculator.test.js +515 -0
  32. package/dist/__tests__/win-calculator.test.js.map +1 -0
  33. package/dist/bonnys-fortune-v1.game-engine.js +14 -25
  34. package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
  35. package/dist/config/game-logic-config/game-logic-config.js +0 -2
  36. package/dist/config/game-logic-config/game-logic-config.js.map +1 -1
  37. package/dist/domain/types/{cheat-trigger-bonus-command.js → debug-trigger-bonus-command.js} +1 -1
  38. package/dist/domain/types/debug-trigger-bonus-command.js.map +1 -0
  39. package/dist/domain/types/{cheat-trigger-bonus-request.dto.js → debug-trigger-bonus-request.dto.js} +1 -1
  40. package/dist/domain/types/debug-trigger-bonus-request.dto.js.map +1 -0
  41. package/dist/domain/types/{cheat-update-bonus-meter-progress-command.js → debug-update-bonus-meter-progress-command.js} +1 -1
  42. package/dist/domain/types/debug-update-bonus-meter-progress-command.js.map +1 -0
  43. package/dist/domain/types/{cheat-update-bonus-meter-progress-request.dto.js → debug-update-bonus-meter-progress-request.dto.js} +1 -1
  44. package/dist/domain/types/debug-update-bonus-meter-progress-request.dto.js.map +1 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/logic/bonnys-fortune.game-logic.js +37 -17
  47. package/dist/logic/bonnys-fortune.game-logic.js.map +1 -1
  48. package/dist/logic/handlers/base-game.handler.js +1 -5
  49. package/dist/logic/handlers/base-game.handler.js.map +1 -1
  50. package/dist/rng/DummyRngClient.js +8 -1
  51. package/dist/rng/DummyRngClient.js.map +1 -1
  52. package/dist/rng/rng-client.factory.js.map +1 -1
  53. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.js +0 -9
  54. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.js.map +1 -1
  55. package/package.json +6 -6
  56. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +0 -1
  57. package/dist/bonnys-fortune-v1.game-engine.d.ts +0 -36
  58. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +0 -4
  59. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +0 -3
  60. package/dist/config/game-logic-config/game-logic-config.d.ts +0 -2
  61. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +0 -4
  62. package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +0 -4
  63. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +0 -3
  64. package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +0 -5
  65. package/dist/config/reel-strips-config/reel.dto.d.ts +0 -5
  66. package/dist/domain/game-round.types.d.ts +0 -9
  67. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +0 -4
  68. package/dist/domain/reel-strip-option.d.ts +0 -7
  69. package/dist/domain/reel-strips-config.d.ts +0 -9
  70. package/dist/domain/reel.d.ts +0 -8
  71. package/dist/domain/types/cheat-trigger-bonus-command.d.ts +0 -5
  72. package/dist/domain/types/cheat-trigger-bonus-command.js.map +0 -1
  73. package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +0 -5
  74. package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +0 -1
  75. package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +0 -5
  76. package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +0 -1
  77. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +0 -5
  78. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +0 -1
  79. package/dist/domain/types/game-spin-command.d.ts +0 -8
  80. package/dist/domain/types/game-spin-input.dto.d.ts +0 -8
  81. package/dist/domain/types/game-spin-output.dto.d.ts +0 -119
  82. package/dist/domain/types/game-symbols.response.dto.d.ts +0 -10
  83. package/dist/domain/types/reel-strip-option.dto.d.ts +0 -4
  84. package/dist/domain/types/reel-strips-config.dto.d.ts +0 -5
  85. package/dist/domain/types/reel.dto.d.ts +0 -5
  86. package/dist/domain/types/start-bonus-round-command.d.ts +0 -8
  87. package/dist/domain/types/start-bonus-round-input.dto.d.ts +0 -10
  88. package/dist/game-engine.interface.d.ts +0 -41
  89. package/dist/helpers/generate-hash.d.ts +0 -1
  90. package/dist/helpers/number-helper.d.ts +0 -23
  91. package/dist/helpers/optional-boolean-mapper.d.ts +0 -1
  92. package/dist/helpers/uuid-helper.d.ts +0 -3
  93. package/dist/helpers/validation-helper.d.ts +0 -14
  94. package/dist/index.d.ts +0 -2
  95. package/dist/logger/logger.d.ts +0 -22
  96. package/dist/logger/logger.js +0 -140
  97. package/dist/logger/logger.js.map +0 -1
  98. package/dist/logic/bonnys-fortune.game-logic.d.ts +0 -32
  99. package/dist/logic/bonnys-fortune.spin-generator.d.ts +0 -19
  100. package/dist/logic/bonnys-fortune.types.d.ts +0 -170
  101. package/dist/logic/bonnys-fortune.win-calculator.d.ts +0 -10
  102. package/dist/logic/game-logic-config.interface.d.ts +0 -180
  103. package/dist/logic/handlers/base-game.handler.d.ts +0 -15
  104. package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +0 -13
  105. package/dist/logic/handlers/free-spins-bonus.handler.d.ts +0 -11
  106. package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +0 -11
  107. package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +0 -15
  108. package/dist/rng/DummyRngClient.d.ts +0 -18
  109. package/dist/rng/rng-client.factory.d.ts +0 -7
  110. package/dist/rng/rng-client.interface.d.ts +0 -16
  111. package/dist/rng/rng-service.d.ts +0 -26
  112. package/dist/validation/abstract-game-logic-config.validator.d.ts +0 -4
  113. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +0 -131
  114. package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +0 -5
  115. package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +0 -2
  116. package/dist/validation/game-logic-config-validation.service.d.ts +0 -8
  117. package/dist/validation/reel-strips-config-validation.service.d.ts +0 -5
  118. package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +0 -80
  119. package/src/bonnys-fortune-v1.game-engine.ts +0 -314
  120. package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +0 -27
  121. package/src/config/game-logic-config/game-logic-config-loader.ts +0 -3
  122. package/src/config/game-logic-config/game-logic-config.ts +0 -382
  123. package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +0 -43
  124. package/src/config/reel-strips-config/reel-strip-option.dto.ts +0 -13
  125. package/src/config/reel-strips-config/reel-strips-config-loader.ts +0 -9
  126. package/src/config/reel-strips-config/reel-strips-config.dto.ts +0 -16
  127. package/src/config/reel-strips-config/reel.dto.ts +0 -16
  128. package/src/config/reel-strips-config/reels-BASE.csv +0 -52
  129. package/src/config/reel-strips-config/reels-BONUS.csv +0 -52
  130. package/src/domain/game-round.types.ts +0 -10
  131. package/src/domain/mappers/reel-strips-config.mapper.ts +0 -16
  132. package/src/domain/reel-strip-option.ts +0 -15
  133. package/src/domain/reel-strips-config.ts +0 -21
  134. package/src/domain/reel.ts +0 -17
  135. package/src/domain/types/cheat-trigger-bonus-command.ts +0 -5
  136. package/src/domain/types/cheat-trigger-bonus-request.dto.ts +0 -5
  137. package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +0 -6
  138. package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +0 -5
  139. package/src/domain/types/game-spin-command.ts +0 -8
  140. package/src/domain/types/game-spin-input.dto.ts +0 -8
  141. package/src/domain/types/game-spin-output.dto.ts +0 -142
  142. package/src/domain/types/game-symbols.response.dto.ts +0 -11
  143. package/src/domain/types/reel-strip-option.dto.ts +0 -13
  144. package/src/domain/types/reel-strips-config.dto.ts +0 -15
  145. package/src/domain/types/reel.dto.ts +0 -15
  146. package/src/domain/types/start-bonus-round-command.ts +0 -8
  147. package/src/domain/types/start-bonus-round-input.dto.ts +0 -10
  148. package/src/game-engine.interface.ts +0 -59
  149. package/src/helpers/generate-hash.ts +0 -5
  150. package/src/helpers/number-helper.ts +0 -41
  151. package/src/helpers/optional-boolean-mapper.ts +0 -5
  152. package/src/helpers/uuid-helper.ts +0 -7
  153. package/src/helpers/validation-helper.ts +0 -27
  154. package/src/index.ts +0 -3
  155. package/src/logger/logger.ts +0 -178
  156. package/src/logic/bonnys-fortune.game-logic.ts +0 -490
  157. package/src/logic/bonnys-fortune.spin-generator.ts +0 -277
  158. package/src/logic/bonnys-fortune.types.ts +0 -223
  159. package/src/logic/bonnys-fortune.win-calculator.ts +0 -210
  160. package/src/logic/game-logic-config.interface.ts +0 -176
  161. package/src/logic/handlers/base-game.handler.ts +0 -221
  162. package/src/logic/handlers/collect-feature-bonus.handler.ts +0 -301
  163. package/src/logic/handlers/free-spins-bonus.handler.ts +0 -119
  164. package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +0 -118
  165. package/src/logic/handlers/treasure-hunt-bonus.handler.ts +0 -232
  166. package/src/rng/DummyRngClient.ts +0 -108
  167. package/src/rng/rng-client.factory.ts +0 -27
  168. package/src/rng/rng-client.interface.ts +0 -38
  169. package/src/rng/rng-service.ts +0 -130
  170. package/src/validation/abstract-game-logic-config.validator.ts +0 -20
  171. package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +0 -379
  172. package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +0 -8
  173. package/src/validation/custom-decorators/IsNestedIntArray.ts +0 -29
  174. package/src/validation/game-logic-config-validation.service.ts +0 -28
  175. package/src/validation/reel-strips-config-validation.service.ts +0 -29
@@ -1,32 +0,0 @@
1
- import { BonnysFortuneBaseGameSpinResult, BonnysFortunePrivateState, BonnysFortunePublicState, CheatTriggerBonusResult, CheatUpdateBonusMeterProgressResult, GetSymbolsResult, SpinResultResponse, StartBonusRoundResult } from './bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface, BonnysFortuneSessionStateInterface } from './game-logic-config.interface';
3
- import { CheatTriggerBonusRequestDto } from '../domain/types/cheat-trigger-bonus-request.dto';
4
- import { CheatUpdateBonusMeterProgressRequestDto } from '../domain/types/cheat-update-bonus-meter-progress-request.dto';
5
- import { GameActionCommand } from '../game-engine.interface';
6
- import { GameSpinInputDto } from '../domain/types/game-spin-input.dto';
7
- import { ReelStripsConfig } from '../domain/reel-strips-config';
8
- import { RngService } from '../rng/rng-service';
9
- import { StartBonusRoundInputDto } from '../domain/types/start-bonus-round-input.dto';
10
- export declare class BonnysFortuneGameLogic {
11
- private readonly rngService;
12
- constructor(rngService: RngService);
13
- initSessionState(gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, gameConfig: {
14
- betAmountThresholds: number[];
15
- defaultBetAmount: number;
16
- }, commandId: string): Promise<BonnysFortuneSessionStateInterface>;
17
- spin(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<SpinResultResponse<BonnysFortuneBaseGameSpinResult>>;
18
- startBonusRound(params: StartBonusRoundInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<StartBonusRoundResult>;
19
- private drawBonusMeters;
20
- updateSessionState(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, command: GameActionCommand<{
21
- bonusMeters: {
22
- redraw: string[];
23
- };
24
- }>): Promise<BonnysFortuneSessionStateInterface>;
25
- cheatTriggerBonus(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, params: CheatTriggerBonusRequestDto): CheatTriggerBonusResult;
26
- cheatUpdateBonusMeterProgress(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, params: CheatUpdateBonusMeterProgressRequestDto, gameLogicConfig: BonnysFortuneGameLogicConfigInterface): CheatUpdateBonusMeterProgressResult;
27
- getSymbols(gameLogicConfig: BonnysFortuneGameLogicConfigInterface): GetSymbolsResult;
28
- private shouldRedrawMeter;
29
- private requiresMeterUpdate;
30
- private getMeterLevel;
31
- private randomThreshold;
32
- }
@@ -1,19 +0,0 @@
1
- import { BonnysFortuneGameLogicConfigInterface } from './game-logic-config.interface';
2
- import { ReelStripsConfig } from '../domain/reel-strips-config';
3
- import { RngService } from '../rng/rng-service';
4
- export declare class BonnysFortuneSpinGenerator {
5
- private readonly rngService;
6
- constructor(rngService: RngService);
7
- generateScreenWithLayout(reelStripsConfig: ReelStripsConfig, layout: {
8
- reels: number;
9
- rows: number;
10
- }, optionWeights: number[], commandId: string, actionId: string): Promise<number[][]>;
11
- generateBaseScreen(config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string, actionId: string): Promise<number[][]>;
12
- private selectReelOption;
13
- private drawReelColumn;
14
- applyBonusSymbols(screen: number[][], config: BonnysFortuneGameLogicConfigInterface, commandId: string, actionId: string): Promise<number[][]>;
15
- private placeHSymbols;
16
- private placeScatterSymbols;
17
- private placeSymbolRandomlyOnReel;
18
- private getRandomWeightedIndex;
19
- }
@@ -1,170 +0,0 @@
1
- export interface WinLine {
2
- symbol: number;
3
- consecutiveReels: number;
4
- ways: number;
5
- multiplier: number;
6
- win: number;
7
- positions: [number, number][];
8
- }
9
- export interface MeterState {
10
- symbolName: string;
11
- symbolId: number;
12
- threshold: number;
13
- progress: number;
14
- level: number;
15
- }
16
- export type MetersState = Record<string, MeterState>;
17
- export interface BonnysFortunePublicState {
18
- currentBetAmount: number;
19
- bonusMeters: MetersState;
20
- }
21
- export interface BonnysFortunePrivateState {
22
- screen?: number[][];
23
- nextSpinType: SpinType;
24
- pendingBonuses: BonusTrigger[];
25
- activeBonus?: BonusTrigger;
26
- bonusMetersByAmount: Record<number, MetersState>;
27
- }
28
- export interface BonusTrigger {
29
- bonusId: string;
30
- bonusType: string;
31
- betAmount: number;
32
- }
33
- export interface SpinResult {
34
- spinType: string;
35
- playerWinning: number;
36
- nextSpinType: SpinType | string;
37
- }
38
- export interface SpinResultResponse<T extends SpinResult> {
39
- result: T;
40
- publicState: BonnysFortunePublicState;
41
- privateState: BonnysFortunePrivateState;
42
- }
43
- export interface BonnysFortuneBaseGameSpinResult extends SpinResult {
44
- spinType: SpinType.BASE_GAME_SPIN;
45
- screen: number[][];
46
- winResult: {
47
- totalWin: number;
48
- winningLines: WinLine[];
49
- };
50
- triggeredBonus?: BonusTrigger;
51
- }
52
- export interface TreasureHuntSpinResult extends SpinResult {
53
- spinType: SpinType;
54
- selection: string;
55
- multiplier: number;
56
- multiplierCounts: Record<string, number>;
57
- winningMultiplier: number | null;
58
- winningCount: number;
59
- totalMultiplier: number;
60
- }
61
- export interface FreeSpinResult {
62
- spinType: SpinType.BONUS_GAME_2_SPIN;
63
- screen: number[][];
64
- winResult: {
65
- totalWin: number;
66
- winningLines: WinLine[];
67
- };
68
- playerWinning: number;
69
- nextSpinType: SpinType;
70
- multiplier: number;
71
- }
72
- export interface SteeringToTheFortuneResult {
73
- spinType: SpinType;
74
- playerWinning: number;
75
- nextSpinType: SpinType;
76
- prizeType: string;
77
- prizeValue: number | string;
78
- totalMultiplier: number;
79
- triggeredBonus?: BonusTrigger;
80
- }
81
- export interface CollectFeatureSpinResult {
82
- spinIndex: number;
83
- spinType: SpinType;
84
- symbols: string[];
85
- slashed: boolean[];
86
- currentValues: number;
87
- currentMultipliers: number;
88
- totalValues: number;
89
- totalMultipliers: number;
90
- playerWinning: number;
91
- totalWin: number;
92
- spinsLeft: number;
93
- nextSpinType: SpinType;
94
- }
95
- export interface BonusRoundResult<TSpin extends SpinResult> {
96
- results: SpinResultResponse<TSpin>[];
97
- publicState: BonnysFortunePublicState;
98
- privateState: BonnysFortunePrivateState;
99
- }
100
- export interface BonusRoundResultWithActiveBonus<TSpin extends SpinResult> extends BonusRoundResult<TSpin> {
101
- activeBonus: BonusTrigger;
102
- }
103
- export type BonnysFortuneGameLogicSpinResult = SpinResultResponse<BonnysFortuneBaseGameSpinResult> | SpinResultResponse<FreeSpinResult> | SpinResultResponse<TreasureHuntSpinResult> | SpinResultResponse<SteeringToTheFortuneResult> | SpinResultResponse<CollectFeatureSpinResult>;
104
- export type BonnysFortuneBonusGameLogicSpinResult = BonusRoundResult<FreeSpinResult> | BonusRoundResult<TreasureHuntSpinResult> | BonusRoundResult<SteeringToTheFortuneResult> | BonusRoundResult<CollectFeatureSpinResult>;
105
- export type StartBonusRoundResult = BonusRoundResultWithActiveBonus<FreeSpinResult> | BonusRoundResultWithActiveBonus<TreasureHuntSpinResult> | BonusRoundResultWithActiveBonus<SteeringToTheFortuneResult> | BonusRoundResultWithActiveBonus<CollectFeatureSpinResult>;
106
- export declare enum SpinType {
107
- BASE_GAME_SPIN = "BASE_GAME_SPIN",
108
- BONUS_GAME_1_SPIN = "BONUS_GAME_1_SPIN",
109
- BONUS_GAME_2_SPIN = "BONUS_GAME_2_SPIN",
110
- BONUS_GAME_3_SPIN = "BONUS_GAME_3_SPIN",
111
- COLLECT_FEATURE_SPIN = "COLLECT_FEATURE_SPIN"
112
- }
113
- export declare enum PrizeType {
114
- MULTIPLIER = "MULTIPLIER",
115
- BONUS = "BONUS"
116
- }
117
- export interface ExtractedConfigData {
118
- baseMin: number;
119
- baseMax: number;
120
- WILD: number;
121
- reels: number;
122
- rows: number;
123
- minLength: number;
124
- maxLength: number;
125
- multipliers: Map<number, Record<string, number>>;
126
- }
127
- export type SymbolsCountMatrix = number[][];
128
- export type SymbolPositionsMatrix = boolean[][][];
129
- export interface SymbolAnalysisResult {
130
- symbolsCount: SymbolsCountMatrix;
131
- symbolPositions: SymbolPositionsMatrix;
132
- }
133
- export interface FindWinningLinesParams {
134
- symbolsCount: SymbolsCountMatrix;
135
- symbolPositions: SymbolPositionsMatrix;
136
- configData: ExtractedConfigData;
137
- betStake: number;
138
- currentMultiplier: number;
139
- }
140
- export interface CalculateWinsResult {
141
- totalWin: number;
142
- winningLines: WinLine[];
143
- }
144
- export interface CheatTriggerBonusOutcome {
145
- triggeredBonus: BonusTrigger;
146
- }
147
- export interface CheatUpdateBonusMeterProgressOutcome {
148
- updatedMeter: MeterState;
149
- }
150
- export interface CheatTriggerBonusResult {
151
- publicState: BonnysFortunePublicState;
152
- privateState: BonnysFortunePrivateState;
153
- outcome: CheatTriggerBonusOutcome;
154
- }
155
- export interface CheatUpdateBonusMeterProgressResult {
156
- publicState: BonnysFortunePublicState;
157
- privateState: BonnysFortunePrivateState;
158
- outcome: CheatUpdateBonusMeterProgressOutcome;
159
- }
160
- export interface GetSymbolsOutcome {
161
- symbolId: number;
162
- name: string;
163
- multipliers: Record<'x3' | 'x4' | 'x5', number>;
164
- isWild: boolean | undefined;
165
- isScatter: boolean | undefined;
166
- }
167
- export interface GetSymbolsResult {
168
- symbols: GetSymbolsOutcome[];
169
- }
170
- export type BonnysFortuneOutcome = BonnysFortuneGameLogicSpinResult | BonnysFortuneBonusGameLogicSpinResult | SymbolsCountMatrix | CheatTriggerBonusOutcome | CheatUpdateBonusMeterProgressOutcome | GetSymbolsOutcome | null;
@@ -1,10 +0,0 @@
1
- import { CalculateWinsResult, SpinType } from './bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from './game-logic-config.interface';
3
- export declare class BonnysFortuneWinCalculator {
4
- static calculateWins(screen: number[][], config: BonnysFortuneGameLogicConfigInterface, betStake: number, currentMultiplier: number, spinType: SpinType, spinTypeIndex?: number): CalculateWinsResult;
5
- private static isEligibleSpin;
6
- private static buildConfigData;
7
- private static analyzeScreenSymbols;
8
- private static markWildPositions;
9
- private static findWinningLines;
10
- }
@@ -1,180 +0,0 @@
1
- import { BonnysFortunePrivateState, BonnysFortunePublicState } from './bonnys-fortune.types';
2
- export interface BonnysFortuneGameLogicConfigInterface {
3
- baseGame: BonnysFortuneGameLogicConfigBaseGame;
4
- bonusGames: BonusGamesConfig;
5
- scatterGame: ScatterGameWrapper;
6
- defaultBetAmountThresholds: number[];
7
- defaultBetAmount: number;
8
- }
9
- export interface BonnysFortuneSessionStateInterface {
10
- publicState: BonnysFortunePublicState;
11
- privateState: BonnysFortunePrivateState;
12
- }
13
- export interface BonnysFortuneGameLogicConfigBaseGame {
14
- symbolMultipliers: SymbolMultiplier[];
15
- symbolDefinitions: SymbolDefinitions;
16
- baseGameConfig: BaseGameConfig;
17
- paidHSymbolWeights: Record<string, number>;
18
- paidHSymbolReelWeights: Record<string, [number, number]>;
19
- paidScatterReelWeights: Record<string, [number, number]>;
20
- bonusGameMeters: Record<BonusGameId, BonusGameMeter>;
21
- }
22
- export type BonusGameId = 'bonusGame1' | 'bonusGame2' | 'bonusGame3';
23
- export interface SymbolMultiplier {
24
- symbolId: number;
25
- name: string;
26
- multipliers: Record<'x3' | 'x4' | 'x5', number>;
27
- isWild: boolean;
28
- isScatter: boolean;
29
- }
30
- export interface SymbolDefinitions {
31
- baseSymbols: {
32
- minIndex: number;
33
- maxIndex: number;
34
- };
35
- specialSymbols: Record<string, number>;
36
- collectFeatureSymbols: {
37
- multipliers: Record<string, number>;
38
- values: Record<string, number>;
39
- };
40
- }
41
- export interface BaseGameConfig {
42
- layout: {
43
- rows: number;
44
- reels: number;
45
- };
46
- winConfig: {
47
- minLength: number;
48
- maxLength: number;
49
- };
50
- baseBet: number;
51
- reelsOptions: {
52
- numberOfOptions: number;
53
- optionWeights: number[];
54
- };
55
- }
56
- export interface BonusGameMeter {
57
- symbol: string;
58
- min: number;
59
- max: number;
60
- percentageLevels: {
61
- level1: {
62
- min: number;
63
- max: number;
64
- value: number;
65
- };
66
- level2: {
67
- min: number;
68
- max: number;
69
- value: number;
70
- };
71
- level3: {
72
- min: number;
73
- max: number;
74
- value: number;
75
- };
76
- level4: {
77
- min: number;
78
- max: number;
79
- value: number;
80
- };
81
- level5: {
82
- min: number;
83
- max: number;
84
- value: number;
85
- };
86
- };
87
- }
88
- export interface BonusGamesConfig {
89
- bonusGame1: TreasureHuntBonusGameConfig;
90
- bonusGame2: FreeSpinBonusGameConfig;
91
- bonusGame3: SteeringToTheFortuneBonusGameConfig;
92
- }
93
- export interface TreasureHuntBonusGameConfig {
94
- type: 'treasure_hunt';
95
- potMeter: BonusGameId;
96
- config: TreasureHuntBonusConfig;
97
- }
98
- export interface TreasureHuntBonusConfig {
99
- symbolsCount: number;
100
- stepsCount: number;
101
- jackpotMultipliers: {
102
- mini: number;
103
- minor: number;
104
- major: number;
105
- grand: number;
106
- };
107
- jackpotStartCounts: {
108
- mini: number;
109
- minor: number;
110
- major: number;
111
- grand: number;
112
- };
113
- jackpotScreenCounts: {
114
- mini: number;
115
- minor: number;
116
- major: number;
117
- grand: number;
118
- };
119
- winningWeights: {
120
- none: number;
121
- mini: number;
122
- minor: number;
123
- major: number;
124
- grand: number;
125
- };
126
- }
127
- export interface FreeSpinBonusGameConfig {
128
- type: 'free_spins';
129
- potMeter: BonusGameId;
130
- config: {
131
- spinTypes: SpinTypeConfig[];
132
- };
133
- }
134
- export interface SpinTypeConfig {
135
- layout: {
136
- rows: number;
137
- reels: number;
138
- };
139
- spins: number;
140
- multiplier: number;
141
- weight: number;
142
- reelsOptionsWeights: number[];
143
- }
144
- export interface SteeringToTheFortuneBonusGameConfig {
145
- type: 'steering_to_the_fortune';
146
- potMeter: BonusGameId;
147
- config: SteeringToTheFortuneConfig;
148
- }
149
- export interface SteeringToTheFortuneConfig {
150
- wheelResults: {
151
- type: 'MULTIPLIER' | 'BONUS';
152
- value?: number;
153
- bonusType?: BonusGameId | 'collectFeature';
154
- weight: number;
155
- }[];
156
- }
157
- export interface ScatterGameWrapper {
158
- config: ScatterGameConfig;
159
- }
160
- export interface ScatterGameConfig {
161
- scatterMinNumber: number;
162
- scatterSpins: number;
163
- scatterCheckpoints: ScatterCheckpoint[];
164
- scatterSymbols: ScatterSymbol[];
165
- scatterSymbolSpins: WeightOnly[];
166
- scatterSymbolSlash: WeightOnly[];
167
- }
168
- export interface ScatterCheckpoint {
169
- spin: number;
170
- multiMinValue: number;
171
- valueMinValue: number;
172
- }
173
- export interface ScatterSymbol {
174
- symbolId: string;
175
- value: number;
176
- weight: number;
177
- }
178
- export interface WeightOnly {
179
- weight: number;
180
- }
@@ -1,15 +0,0 @@
1
- import { BonnysFortuneBaseGameSpinResult, BonnysFortunePrivateState, BonnysFortunePublicState, SpinResultResponse, SpinType } from '../bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
3
- import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
4
- import { ReelStripsConfig } from '../../domain/reel-strips-config';
5
- import { RngService } from '../../rng/rng-service';
6
- export declare class BaseGameHandler {
7
- private readonly rngService;
8
- constructor(rngService: RngService);
9
- handleSpin(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<SpinResultResponse<BonnysFortuneBaseGameSpinResult>>;
10
- private updateBonusMeters;
11
- private findTriggeredBonus;
12
- private getMeterLevel;
13
- private getBetStake;
14
- }
15
- export declare function getSpinTypeForBonus(bonusType: string): SpinType;
@@ -1,13 +0,0 @@
1
- import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, CollectFeatureSpinResult } from '../bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
3
- import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
4
- import { RngService } from '../../rng/rng-service';
5
- export declare class CollectFeatureBonusHandler {
6
- private rngService;
7
- constructor(rngService: RngService);
8
- generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<CollectFeatureSpinResult>>;
9
- private executeSingleSpin;
10
- private weightedPick;
11
- private weightedPickSymbol;
12
- private getBetStake;
13
- }
@@ -1,11 +0,0 @@
1
- import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, FreeSpinResult } from '../bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
3
- import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
4
- import { ReelStripsConfig } from '../../domain/reel-strips-config';
5
- import { RngService } from '../../rng/rng-service';
6
- export declare class FreeSpinsBonusHandler {
7
- private rngService;
8
- constructor(rngService: RngService);
9
- generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<BonusRoundResult<FreeSpinResult>>;
10
- private getBetStake;
11
- }
@@ -1,11 +0,0 @@
1
- import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, SteeringToTheFortuneResult } from '../bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
3
- import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
4
- import { RngService } from '../../rng/rng-service';
5
- export declare class SteeringToTheFortuneBonusHandler {
6
- private rngService;
7
- constructor(rngService: RngService);
8
- generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<SteeringToTheFortuneResult>>;
9
- private weightedDraw;
10
- private getBetStake;
11
- }
@@ -1,15 +0,0 @@
1
- import { BonnysFortunePrivateState, BonnysFortunePublicState, BonusRoundResult, TreasureHuntSpinResult } from '../bonnys-fortune.types';
2
- import { BonnysFortuneGameLogicConfigInterface } from '../game-logic-config.interface';
3
- import { GameSpinInputDto } from '../../domain/types/game-spin-input.dto';
4
- import { RngService } from '../../rng/rng-service';
5
- export declare class TreasureHuntBonusHandler {
6
- private rngService;
7
- constructor(rngService: RngService);
8
- generateFullBonusRound(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, config: BonnysFortuneGameLogicConfigInterface, commandId: string): Promise<BonusRoundResult<TreasureHuntSpinResult>>;
9
- private getBetStake;
10
- private drawWinningSymbol;
11
- private fillRemainingSteps;
12
- private weightedDraw;
13
- private randomPositions;
14
- private extractBonusConfig;
15
- }
@@ -1,18 +0,0 @@
1
- import { RngBatchResponse, RngSingleResponse } from '@omnitronix/rng-client-core/dist/http/http-client.types';
2
- import { IRngClient } from './rng-client.interface';
3
- export declare class DummyRngClient implements IRngClient {
4
- constructor();
5
- getSingleNumber(min: number, max: number, _seed?: number): Promise<{
6
- value: number;
7
- seed: number;
8
- }>;
9
- getBatchNumbers(min: number, max: number, count: number, _seed?: number): Promise<number[]>;
10
- getBatchNumbersWithSeeds(min: number, max: number, count: number, _seed?: number): Promise<{
11
- value: number;
12
- seed: number;
13
- }[]>;
14
- getSingleFloat(_seed?: number): Promise<RngSingleResponse>;
15
- getBatchFloats(count: number, _seed?: number): Promise<RngBatchResponse>;
16
- getRandomNumber(min: number, max: number, _seed?: number): Promise<RngSingleResponse>;
17
- getRandomFloat(_seed?: number): Promise<RngSingleResponse>;
18
- }
@@ -1,7 +0,0 @@
1
- import { RngClientConfig } from '@omnitronix/rng-client-core';
2
- import { IRngClient } from './rng-client.interface';
3
- export declare class RngClientFactory {
4
- static create(config?: {
5
- metrics?: RngClientConfig['metrics'];
6
- }): IRngClient;
7
- }
@@ -1,16 +0,0 @@
1
- import { RngBatchResponse, RngSingleResponse } from '@omnitronix/rng-client-core/dist/http/http-client.types';
2
- export interface IRngClient {
3
- getSingleNumber(min: number, max: number, seed?: number): Promise<{
4
- value: number;
5
- seed: number;
6
- }>;
7
- getBatchNumbers(min: number, max: number, count: number, seed?: number): Promise<number[]>;
8
- getBatchNumbersWithSeeds(min: number, max: number, count: number, seed?: number): Promise<{
9
- value: number;
10
- seed: number;
11
- }[]>;
12
- getSingleFloat(seed?: number): Promise<RngSingleResponse>;
13
- getBatchFloats(count: number, seed?: number): Promise<RngBatchResponse>;
14
- getRandomNumber(min: number, max: number, seed?: number): Promise<RngSingleResponse>;
15
- getRandomFloat(seed?: number): Promise<RngSingleResponse>;
16
- }
@@ -1,26 +0,0 @@
1
- import { RngOutcome } from '../game-engine.interface';
2
- import { IRngClient } from './rng-client.interface';
3
- export declare class RngService {
4
- private readonly rngClient;
5
- private rngOutcomes;
6
- constructor(rngClient: IRngClient);
7
- registerCommand(commandId: string): void;
8
- getSingleNumber(min: number, max: number, commandId: string, actionId: string): Promise<{
9
- value: number;
10
- seed: number;
11
- }>;
12
- getBatchNumbers(min: number, max: number, count: number, commandId: string, actionId: string): Promise<{
13
- value: number;
14
- seed: number;
15
- }[]>;
16
- private getSeedForCommand;
17
- private storeSeedForCommand;
18
- getRngOutcomeForCommand(commandId: string): RngOutcome;
19
- getAllRngOutcome(): {
20
- [commandId: string]: RngOutcome;
21
- };
22
- removeCommand(commandId: string): void;
23
- clearAllRngOutcome(): void;
24
- hasCommandRngOutcome(commandId: string): boolean;
25
- getRngOutcomeCountForCommand(commandId: string): number;
26
- }
@@ -1,4 +0,0 @@
1
- export declare abstract class AbstractGameLogicConfigValidator<T extends object> {
2
- protected abstract getDtoClass(): new () => T;
3
- validate(config: unknown): Promise<T>;
4
- }