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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) 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 +2 -2
  14. package/dist/rng/DummyRngClient.js +8 -1
  15. package/dist/rng/DummyRngClient.js.map +1 -1
  16. package/dist/rng/rng-client.factory.js +1 -2
  17. package/dist/rng/rng-client.factory.js.map +1 -1
  18. package/package.json +3 -4
  19. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +0 -1
  20. package/dist/bonnys-fortune-v1.game-engine.d.ts +0 -32
  21. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +0 -4
  22. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +0 -3
  23. package/dist/config/game-logic-config/game-logic-config.d.ts +0 -2
  24. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +0 -4
  25. package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +0 -4
  26. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +0 -3
  27. package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +0 -5
  28. package/dist/config/reel-strips-config/reel.dto.d.ts +0 -5
  29. package/dist/domain/game-round.types.d.ts +0 -9
  30. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +0 -4
  31. package/dist/domain/reel-strip-option.d.ts +0 -7
  32. package/dist/domain/reel-strips-config.d.ts +0 -9
  33. package/dist/domain/reel.d.ts +0 -8
  34. package/dist/domain/types/cheat-trigger-bonus-command.d.ts +0 -5
  35. package/dist/domain/types/cheat-trigger-bonus-command.js.map +0 -1
  36. package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +0 -5
  37. package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +0 -1
  38. package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +0 -5
  39. package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +0 -1
  40. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +0 -5
  41. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +0 -1
  42. package/dist/domain/types/game-spin-command.d.ts +0 -8
  43. package/dist/domain/types/game-spin-input.dto.d.ts +0 -8
  44. package/dist/domain/types/game-spin-output.dto.d.ts +0 -119
  45. package/dist/domain/types/game-symbols.response.dto.d.ts +0 -10
  46. package/dist/domain/types/reel-strip-option.dto.d.ts +0 -4
  47. package/dist/domain/types/reel-strips-config.dto.d.ts +0 -5
  48. package/dist/domain/types/reel.dto.d.ts +0 -5
  49. package/dist/domain/types/start-bonus-round-command.d.ts +0 -8
  50. package/dist/domain/types/start-bonus-round-input.dto.d.ts +0 -10
  51. package/dist/game-engine.interface.d.ts +0 -41
  52. package/dist/helpers/generate-hash.d.ts +0 -1
  53. package/dist/helpers/number-helper.d.ts +0 -23
  54. package/dist/helpers/optional-boolean-mapper.d.ts +0 -1
  55. package/dist/helpers/uuid-helper.d.ts +0 -3
  56. package/dist/helpers/validation-helper.d.ts +0 -14
  57. package/dist/index.d.ts +0 -2
  58. package/dist/logger/logger.d.ts +0 -22
  59. package/dist/logic/bonnys-fortune.game-logic.d.ts +0 -32
  60. package/dist/logic/bonnys-fortune.spin-generator.d.ts +0 -19
  61. package/dist/logic/bonnys-fortune.types.d.ts +0 -170
  62. package/dist/logic/bonnys-fortune.win-calculator.d.ts +0 -10
  63. package/dist/logic/game-logic-config.interface.d.ts +0 -178
  64. package/dist/logic/handlers/base-game.handler.d.ts +0 -15
  65. package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +0 -13
  66. package/dist/logic/handlers/free-spins-bonus.handler.d.ts +0 -11
  67. package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +0 -11
  68. package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +0 -15
  69. package/dist/rng/DummyRngClient.d.ts +0 -18
  70. package/dist/rng/rng-client.factory.d.ts +0 -7
  71. package/dist/rng/rng-client.interface.d.ts +0 -16
  72. package/dist/rng/rng-service.d.ts +0 -26
  73. package/dist/validation/abstract-game-logic-config.validator.d.ts +0 -4
  74. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +0 -129
  75. package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +0 -5
  76. package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +0 -2
  77. package/dist/validation/game-logic-config-validation.service.d.ts +0 -8
  78. package/dist/validation/reel-strips-config-validation.service.d.ts +0 -5
  79. package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +0 -80
  80. package/src/bonnys-fortune-v1.game-engine.ts +0 -285
  81. package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +0 -27
  82. package/src/config/game-logic-config/game-logic-config-loader.ts +0 -3
  83. package/src/config/game-logic-config/game-logic-config.ts +0 -380
  84. package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +0 -43
  85. package/src/config/reel-strips-config/reel-strip-option.dto.ts +0 -13
  86. package/src/config/reel-strips-config/reel-strips-config-loader.ts +0 -9
  87. package/src/config/reel-strips-config/reel-strips-config.dto.ts +0 -16
  88. package/src/config/reel-strips-config/reel.dto.ts +0 -16
  89. package/src/config/reel-strips-config/reels-BASE.csv +0 -52
  90. package/src/config/reel-strips-config/reels-BONUS.csv +0 -52
  91. package/src/domain/game-round.types.ts +0 -10
  92. package/src/domain/mappers/reel-strips-config.mapper.ts +0 -16
  93. package/src/domain/reel-strip-option.ts +0 -15
  94. package/src/domain/reel-strips-config.ts +0 -21
  95. package/src/domain/reel.ts +0 -17
  96. package/src/domain/types/cheat-trigger-bonus-command.ts +0 -5
  97. package/src/domain/types/cheat-trigger-bonus-request.dto.ts +0 -5
  98. package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +0 -6
  99. package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +0 -5
  100. package/src/domain/types/game-spin-command.ts +0 -8
  101. package/src/domain/types/game-spin-input.dto.ts +0 -8
  102. package/src/domain/types/game-spin-output.dto.ts +0 -142
  103. package/src/domain/types/game-symbols.response.dto.ts +0 -11
  104. package/src/domain/types/reel-strip-option.dto.ts +0 -13
  105. package/src/domain/types/reel-strips-config.dto.ts +0 -15
  106. package/src/domain/types/reel.dto.ts +0 -15
  107. package/src/domain/types/start-bonus-round-command.ts +0 -8
  108. package/src/domain/types/start-bonus-round-input.dto.ts +0 -10
  109. package/src/game-engine.interface.ts +0 -59
  110. package/src/helpers/generate-hash.ts +0 -5
  111. package/src/helpers/number-helper.ts +0 -41
  112. package/src/helpers/optional-boolean-mapper.ts +0 -5
  113. package/src/helpers/uuid-helper.ts +0 -7
  114. package/src/helpers/validation-helper.ts +0 -27
  115. package/src/index.ts +0 -3
  116. package/src/logger/logger.ts +0 -178
  117. package/src/logic/bonnys-fortune.game-logic.ts +0 -480
  118. package/src/logic/bonnys-fortune.spin-generator.ts +0 -277
  119. package/src/logic/bonnys-fortune.types.ts +0 -223
  120. package/src/logic/bonnys-fortune.win-calculator.ts +0 -210
  121. package/src/logic/game-logic-config.interface.ts +0 -174
  122. package/src/logic/handlers/base-game.handler.ts +0 -213
  123. package/src/logic/handlers/collect-feature-bonus.handler.ts +0 -301
  124. package/src/logic/handlers/free-spins-bonus.handler.ts +0 -119
  125. package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +0 -118
  126. package/src/logic/handlers/treasure-hunt-bonus.handler.ts +0 -232
  127. package/src/rng/DummyRngClient.ts +0 -108
  128. package/src/rng/rng-client.factory.ts +0 -27
  129. package/src/rng/rng-client.interface.ts +0 -38
  130. package/src/rng/rng-service.ts +0 -130
  131. package/src/validation/abstract-game-logic-config.validator.ts +0 -20
  132. package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +0 -371
  133. package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +0 -8
  134. package/src/validation/custom-decorators/IsNestedIntArray.ts +0 -29
  135. package/src/validation/game-logic-config-validation.service.ts +0 -28
  136. 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
- }