@omnitronix/bonnys-fortune-game-engine 1.2.0 → 1.2.2

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 (137) hide show
  1. package/dist/__tests__/comprehensive.test.js +741 -0
  2. package/dist/__tests__/comprehensive.test.js.map +1 -0
  3. package/dist/bonnys-fortune-v1.game-engine.js +12 -7
  4. package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
  5. package/dist/domain/types/{cheat-trigger-bonus-command.js → debug-trigger-bonus-command.js} +1 -1
  6. package/dist/domain/types/debug-trigger-bonus-command.js.map +1 -0
  7. package/dist/domain/types/{cheat-trigger-bonus-request.dto.js → debug-trigger-bonus-request.dto.js} +1 -1
  8. package/dist/domain/types/debug-trigger-bonus-request.dto.js.map +1 -0
  9. package/dist/domain/types/{cheat-update-bonus-meter-progress-command.js → debug-update-bonus-meter-progress-command.js} +1 -1
  10. package/dist/domain/types/debug-update-bonus-meter-progress-command.js.map +1 -0
  11. package/dist/domain/types/{cheat-update-bonus-meter-progress-request.dto.js → debug-update-bonus-meter-progress-request.dto.js} +1 -1
  12. package/dist/domain/types/debug-update-bonus-meter-progress-request.dto.js.map +1 -0
  13. package/dist/logic/bonnys-fortune.game-logic.js +4 -2
  14. package/dist/logic/bonnys-fortune.game-logic.js.map +1 -1
  15. package/dist/rng/DummyRngClient.js +8 -1
  16. package/dist/rng/DummyRngClient.js.map +1 -1
  17. package/dist/rng/rng-client.factory.js +1 -2
  18. package/dist/rng/rng-client.factory.js.map +1 -1
  19. package/package.json +3 -4
  20. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +0 -1
  21. package/dist/bonnys-fortune-v1.game-engine.d.ts +0 -32
  22. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +0 -4
  23. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +0 -3
  24. package/dist/config/game-logic-config/game-logic-config.d.ts +0 -2
  25. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +0 -4
  26. package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +0 -4
  27. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +0 -3
  28. package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +0 -5
  29. package/dist/config/reel-strips-config/reel.dto.d.ts +0 -5
  30. package/dist/domain/game-round.types.d.ts +0 -9
  31. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +0 -4
  32. package/dist/domain/reel-strip-option.d.ts +0 -7
  33. package/dist/domain/reel-strips-config.d.ts +0 -9
  34. package/dist/domain/reel.d.ts +0 -8
  35. package/dist/domain/types/cheat-trigger-bonus-command.d.ts +0 -5
  36. package/dist/domain/types/cheat-trigger-bonus-command.js.map +0 -1
  37. package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +0 -5
  38. package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +0 -1
  39. package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +0 -5
  40. package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +0 -1
  41. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +0 -5
  42. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +0 -1
  43. package/dist/domain/types/game-spin-command.d.ts +0 -8
  44. package/dist/domain/types/game-spin-input.dto.d.ts +0 -8
  45. package/dist/domain/types/game-spin-output.dto.d.ts +0 -119
  46. package/dist/domain/types/game-symbols.response.dto.d.ts +0 -10
  47. package/dist/domain/types/reel-strip-option.dto.d.ts +0 -4
  48. package/dist/domain/types/reel-strips-config.dto.d.ts +0 -5
  49. package/dist/domain/types/reel.dto.d.ts +0 -5
  50. package/dist/domain/types/start-bonus-round-command.d.ts +0 -8
  51. package/dist/domain/types/start-bonus-round-input.dto.d.ts +0 -10
  52. package/dist/game-engine.interface.d.ts +0 -41
  53. package/dist/helpers/generate-hash.d.ts +0 -1
  54. package/dist/helpers/number-helper.d.ts +0 -23
  55. package/dist/helpers/optional-boolean-mapper.d.ts +0 -1
  56. package/dist/helpers/uuid-helper.d.ts +0 -3
  57. package/dist/helpers/validation-helper.d.ts +0 -14
  58. package/dist/index.d.ts +0 -2
  59. package/dist/logger/logger.d.ts +0 -22
  60. package/dist/logic/bonnys-fortune.game-logic.d.ts +0 -32
  61. package/dist/logic/bonnys-fortune.spin-generator.d.ts +0 -19
  62. package/dist/logic/bonnys-fortune.types.d.ts +0 -170
  63. package/dist/logic/bonnys-fortune.win-calculator.d.ts +0 -10
  64. package/dist/logic/game-logic-config.interface.d.ts +0 -178
  65. package/dist/logic/handlers/base-game.handler.d.ts +0 -15
  66. package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +0 -13
  67. package/dist/logic/handlers/free-spins-bonus.handler.d.ts +0 -11
  68. package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +0 -11
  69. package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +0 -15
  70. package/dist/rng/DummyRngClient.d.ts +0 -18
  71. package/dist/rng/rng-client.factory.d.ts +0 -7
  72. package/dist/rng/rng-client.interface.d.ts +0 -16
  73. package/dist/rng/rng-service.d.ts +0 -26
  74. package/dist/validation/abstract-game-logic-config.validator.d.ts +0 -4
  75. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +0 -129
  76. package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +0 -5
  77. package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +0 -2
  78. package/dist/validation/game-logic-config-validation.service.d.ts +0 -8
  79. package/dist/validation/reel-strips-config-validation.service.d.ts +0 -5
  80. package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +0 -80
  81. package/src/bonnys-fortune-v1.game-engine.ts +0 -285
  82. package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +0 -27
  83. package/src/config/game-logic-config/game-logic-config-loader.ts +0 -3
  84. package/src/config/game-logic-config/game-logic-config.ts +0 -380
  85. package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +0 -43
  86. package/src/config/reel-strips-config/reel-strip-option.dto.ts +0 -13
  87. package/src/config/reel-strips-config/reel-strips-config-loader.ts +0 -9
  88. package/src/config/reel-strips-config/reel-strips-config.dto.ts +0 -16
  89. package/src/config/reel-strips-config/reel.dto.ts +0 -16
  90. package/src/config/reel-strips-config/reels-BASE.csv +0 -52
  91. package/src/config/reel-strips-config/reels-BONUS.csv +0 -52
  92. package/src/domain/game-round.types.ts +0 -10
  93. package/src/domain/mappers/reel-strips-config.mapper.ts +0 -16
  94. package/src/domain/reel-strip-option.ts +0 -15
  95. package/src/domain/reel-strips-config.ts +0 -21
  96. package/src/domain/reel.ts +0 -17
  97. package/src/domain/types/cheat-trigger-bonus-command.ts +0 -5
  98. package/src/domain/types/cheat-trigger-bonus-request.dto.ts +0 -5
  99. package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +0 -6
  100. package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +0 -5
  101. package/src/domain/types/game-spin-command.ts +0 -8
  102. package/src/domain/types/game-spin-input.dto.ts +0 -8
  103. package/src/domain/types/game-spin-output.dto.ts +0 -142
  104. package/src/domain/types/game-symbols.response.dto.ts +0 -11
  105. package/src/domain/types/reel-strip-option.dto.ts +0 -13
  106. package/src/domain/types/reel-strips-config.dto.ts +0 -15
  107. package/src/domain/types/reel.dto.ts +0 -15
  108. package/src/domain/types/start-bonus-round-command.ts +0 -8
  109. package/src/domain/types/start-bonus-round-input.dto.ts +0 -10
  110. package/src/game-engine.interface.ts +0 -59
  111. package/src/helpers/generate-hash.ts +0 -5
  112. package/src/helpers/number-helper.ts +0 -41
  113. package/src/helpers/optional-boolean-mapper.ts +0 -5
  114. package/src/helpers/uuid-helper.ts +0 -7
  115. package/src/helpers/validation-helper.ts +0 -27
  116. package/src/index.ts +0 -3
  117. package/src/logger/logger.ts +0 -178
  118. package/src/logic/bonnys-fortune.game-logic.ts +0 -480
  119. package/src/logic/bonnys-fortune.spin-generator.ts +0 -277
  120. package/src/logic/bonnys-fortune.types.ts +0 -223
  121. package/src/logic/bonnys-fortune.win-calculator.ts +0 -210
  122. package/src/logic/game-logic-config.interface.ts +0 -174
  123. package/src/logic/handlers/base-game.handler.ts +0 -213
  124. package/src/logic/handlers/collect-feature-bonus.handler.ts +0 -301
  125. package/src/logic/handlers/free-spins-bonus.handler.ts +0 -119
  126. package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +0 -118
  127. package/src/logic/handlers/treasure-hunt-bonus.handler.ts +0 -232
  128. package/src/rng/DummyRngClient.ts +0 -108
  129. package/src/rng/rng-client.factory.ts +0 -27
  130. package/src/rng/rng-client.interface.ts +0 -38
  131. package/src/rng/rng-service.ts +0 -130
  132. package/src/validation/abstract-game-logic-config.validator.ts +0 -20
  133. package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +0 -371
  134. package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +0 -8
  135. package/src/validation/custom-decorators/IsNestedIntArray.ts +0 -29
  136. package/src/validation/game-logic-config-validation.service.ts +0 -28
  137. package/src/validation/reel-strips-config-validation.service.ts +0 -29
@@ -1,119 +0,0 @@
1
- export declare enum SpinType {
2
- BASE_GAME_SPIN = "BASE_GAME_SPIN",
3
- BONUS_GAME_1_SPIN = "BONUS_GAME_1_SPIN",
4
- BONUS_GAME_2_SPIN = "BONUS_GAME_2_SPIN",
5
- BONUS_GAME_3_SPIN = "BONUS_GAME_3_SPIN",
6
- COLLECT_FEATURE_SPIN = "COLLECT_FEATURE_SPIN"
7
- }
8
- export declare enum PrizeType {
9
- MULTIPLIER = "MULTIPLIER",
10
- BONUS = "BONUS"
11
- }
12
- /** Triggered bonus */
13
- export interface TriggeredBonusDto {
14
- bonusId: string;
15
- bonusType: string;
16
- betAmount: number;
17
- }
18
- /** Winning line */
19
- export interface WinningLineDto {
20
- win: number;
21
- ways: number;
22
- symbol: number;
23
- positions: number[][];
24
- multiplier: number;
25
- consecutiveReels: number;
26
- }
27
- /** Win result */
28
- export interface WinResultDto {
29
- totalWin: number;
30
- winningLines: WinningLineDto[];
31
- }
32
- /** Bonus meter */
33
- export interface BonusMeterDto {
34
- progress: number;
35
- symbolId: number;
36
- threshold: number;
37
- symbolName: string;
38
- }
39
- /** Public state */
40
- export interface PublicStateDto {
41
- bonusMeters: Record<string, BonusMeterDto>;
42
- }
43
- /** Base Game Spin */
44
- export interface BaseGameSpinResultDto {
45
- spinType: SpinType;
46
- screen: number[][];
47
- winResult: WinResultDto;
48
- playerWinning: number;
49
- nextSpinType: SpinType;
50
- triggeredBonus?: TriggeredBonusDto;
51
- }
52
- /** Treasure Hunt (Bonus Game 1) */
53
- export interface TreasureHuntSpinResultDto {
54
- spinType: SpinType;
55
- selection: string;
56
- multiplier: number;
57
- multiplierCounts: Record<string, number>;
58
- winningMultiplier: number | null;
59
- winningCount: number;
60
- totalMultiplier: number;
61
- }
62
- /** Free Spin (Bonus Game 2) */
63
- export interface FreeSpinResultDto {
64
- spinType: SpinType;
65
- screen: number[][];
66
- playerWinning: number;
67
- nextSpinType: SpinType;
68
- multiplier: number;
69
- }
70
- /** Steering to the Fortune (Bonus Game 3) */
71
- export interface SteeringToTheFortuneResultDto {
72
- spinType: SpinType;
73
- playerWinning: number;
74
- nextSpinType: SpinType;
75
- prizeType: PrizeType;
76
- prizeValue?: number | string;
77
- totalMultiplier: number;
78
- triggeredBonus?: TriggeredBonusDto;
79
- }
80
- /** Collect Feature Spin */
81
- export interface CollectFeatureSpinResultDto {
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 BaseGameSpinResultWrapperDto {
96
- result: BaseGameSpinResultDto;
97
- }
98
- export interface FreeSpinResultWrapperDto {
99
- result: FreeSpinResultDto;
100
- }
101
- export interface TreasureHuntSpinResultWrapperDto {
102
- result: TreasureHuntSpinResultDto;
103
- }
104
- export interface SteeringToTheFortuneResultWrapperDto {
105
- result: SteeringToTheFortuneResultDto;
106
- }
107
- export interface CollectFeatureSpinResultWrapperDto {
108
- result: CollectFeatureSpinResultDto;
109
- }
110
- /** Game Spin Output DTO */
111
- export interface GameSpinOutputDto {
112
- sessionId: string;
113
- balance: number;
114
- betAmount: number;
115
- balanceBeforeSpin: number;
116
- outcome: BaseGameSpinResultWrapperDto;
117
- publicState: PublicStateDto;
118
- lastSpin: BaseGameSpinResultWrapperDto | FreeSpinResultWrapperDto | TreasureHuntSpinResultWrapperDto | SteeringToTheFortuneResultWrapperDto | CollectFeatureSpinResultWrapperDto | null;
119
- }
@@ -1,10 +0,0 @@
1
- export interface GameSymbol {
2
- symbolId: number;
3
- name: string;
4
- multipliers: Record<'x3' | 'x4' | 'x5', number>;
5
- isWild: boolean;
6
- isScatter: boolean;
7
- }
8
- export declare class GameSymbolsResponseDto {
9
- symbols: GameSymbol[];
10
- }
@@ -1,4 +0,0 @@
1
- export declare class ReelStripOptionDto {
2
- symbols: number[];
3
- constructor(symbols: number[]);
4
- }
@@ -1,5 +0,0 @@
1
- import { ReelDto } from './reel.dto';
2
- export declare class ReelStripsConfigDto {
3
- reels: ReelDto[];
4
- constructor(reels: ReelDto[]);
5
- }
@@ -1,5 +0,0 @@
1
- import { ReelStripOptionDto } from './reel-strip-option.dto';
2
- export declare class ReelDto {
3
- options: ReelStripOptionDto[];
4
- constructor(options: ReelStripOptionDto[]);
5
- }
@@ -1,8 +0,0 @@
1
- export type StartBonusRoundCommand = {
2
- sessionId: string;
3
- bonusId: string;
4
- bonusType: string;
5
- betAmount: number;
6
- gameCode: string;
7
- gameVersion: string;
8
- };
@@ -1,10 +0,0 @@
1
- export interface StartBonusRoundInputDto {
2
- sessionId: string;
3
- bonusType: string;
4
- betAmount: number;
5
- gameCode: string;
6
- gameVersion: string;
7
- lines?: number;
8
- creditsPerLine?: number;
9
- bonusId: string;
10
- }
@@ -1,41 +0,0 @@
1
- import { RngClientConfig } from '@omnitronix/rng-client-core';
2
- export type GameEngineMetricsHandlers = RngClientConfig['metrics']['handlers'];
3
- export interface GameEngineConfig {
4
- metrics?: {
5
- handlers: GameEngineMetricsHandlers;
6
- };
7
- }
8
- export interface GameEngineInfo {
9
- gameCode: string;
10
- version: string;
11
- rtp: number;
12
- gameType: string;
13
- gameName: string;
14
- provider: string;
15
- }
16
- export interface RngOutcomeRecord {
17
- result: number;
18
- seed: number;
19
- min: number;
20
- max: number;
21
- }
22
- export type RngOutcome = {
23
- [actionId: string]: RngOutcomeRecord;
24
- };
25
- export interface CommandProcessingResult<TPublicState = any, TPrivateState = any, TOutcome = any> {
26
- success: boolean;
27
- publicState: TPublicState;
28
- privateState: TPrivateState;
29
- outcome?: TOutcome;
30
- message?: string;
31
- rngOutcome?: RngOutcome;
32
- }
33
- export interface GameActionCommand<TPayload = any> {
34
- id: string;
35
- type: string;
36
- payload?: TPayload;
37
- }
38
- export interface GameEngine<TPublicState = any, TPrivateState = any, TOutcome = any> {
39
- processCommand(publicState: TPublicState, privateState: TPrivateState, command: GameActionCommand): Promise<CommandProcessingResult<TPublicState, TPrivateState, TOutcome>>;
40
- getGameEngineInfo(): GameEngineInfo;
41
- }
@@ -1 +0,0 @@
1
- export declare const generateHash: (input: string) => string;
@@ -1,23 +0,0 @@
1
- export declare class NumberHelper {
2
- /**
3
- * Safely formats a number to the specified decimal places,
4
- * minimizing floating-point issues.
5
- */
6
- static toFixedNumber(value: number, decimals: number): number;
7
- /**
8
- * Safely adds two numbers and formats result.
9
- */
10
- static safeSum(a: number, b: number, decimals: number): number;
11
- /**
12
- * Safely multiplies two numbers and formats result.
13
- */
14
- static safeMultiply(a: number, b: number, decimals: number): number;
15
- /**
16
- * Clamps a number between min and max.
17
- */
18
- static clamp(value: number, min: number, max: number): number;
19
- /**
20
- * Safely divides two numbers.
21
- */
22
- static safeDivide(a: number, b: number, decimals: number): number;
23
- }
@@ -1 +0,0 @@
1
- export declare const optionalBooleanMapper: Map<string, boolean>;
@@ -1,3 +0,0 @@
1
- export declare class UuidHelper {
2
- static generateUuid(): string;
3
- }
@@ -1,14 +0,0 @@
1
- import { ValidationError } from 'class-validator';
2
- export declare class ValidationHelper {
3
- static readonly validationOptions: {
4
- whitelist: boolean;
5
- forbidNonWhitelisted: boolean;
6
- };
7
- static readonly validationOptionsWithoutForbidden: {
8
- whitelist: boolean;
9
- forbidNonWhitelisted: boolean;
10
- };
11
- static validate<T extends object>(dto: T): Promise<ValidationError[]>;
12
- static validateWithoutForbidden<T extends object>(dto: T): Promise<ValidationError[]>;
13
- static isPlainObject(value: unknown): value is Record<string, any>;
14
- }
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- export { BonnysFortuneV1GameEngine } from './bonnys-fortune-v1.game-engine';
@@ -1,22 +0,0 @@
1
- type LogFormat = 'json' | 'pretty';
2
- export declare class Logger {
3
- private readonly logger;
4
- private context;
5
- constructor(context: string, logFormat?: LogFormat);
6
- private detectLogFormat;
7
- private createWinstonLogger;
8
- private getLogFormat;
9
- private selectFormat;
10
- private getJsonFormat;
11
- private getPrettyFormat;
12
- private safeStringify;
13
- private getTransports;
14
- log(message: any, { level, ...rest }?: {
15
- level?: string;
16
- } & Record<string, any>): void;
17
- error(message: any, ...optionalParams: any[]): void;
18
- warn(message: any, ...optionalParams: any[]): void;
19
- debug(message: any, ...optionalParams: any[]): void;
20
- verbose(message: any, ...optionalParams: any[]): void;
21
- }
22
- export {};
@@ -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
- }