Carpathian Treasures: Gameplay Guide

This guide explains how a Carpathian Treasures base-game spin is represented in the checked-in R4 math configuration, turned into a visible reel view, evaluated for wins, and returned by the game plugin. It is intended as a gameplay and math-to-runtime introduction, not a full platform architecture or certification guide. For certification and request-body encoding, see certification and request encoding.

For function-by-function explanations, shared request/response keys, and a map of the other game packages, see the code walkthrough. For the pack/bootstrap and shared runtime flow, see the runtime architecture guide.

1. At a Glance

ItemCurrent implementation
Game IDcarpathiantreasures
Math modeR4
Visible layout5 columns x 3 rows
Win model10 fixed paylines, plus scatter and bonus-symbol pays
Active base-game reel setBG.ReelSet_1
Base bet used for payout scaling10
Free spins / bonus roundsNot implemented in this milestone

The game loads its R4 math JSON when the plugin starts. The init operation returns the paytable. A spin uses the requested bet and mode to generate a reel view, calculate wins, and return a game result. The game currently does not start a follow-up feature round.

2. Key Terms and Symbols

Term or codeMeaning in this game
Reel stripAn ordered, circular list of symbols for one reel/column.
Reel stopThe selected starting index on a reel strip for one spin.
H1-H4High-value regular symbols.
L1-L4Low-value regular symbols.
WDWild symbol. It substitutes for regular symbols during line evaluation.
SCScatter symbol. It is excluded from line matching and pays by its count on the board.
BNBonus symbol. It is excluded from line matching and pays by its count on the board. Its Jackpot feature is not implemented here.
Paytable valueA multiplier used by the scoring code, not a fixed currency amount.

The symbolic names are mapped in the math JSON under symbolsMap. The JSON is the game's runtime math input, but a field being present in the JSON does not by itself mean the current engine uses it; see Configured vs Implemented.

From Math Workbook to Runtime JSON

The separate feg_parse-maths CLI has a Carpathian command that reads an Excel workbook and extracts math ranges. It currently reads rawMaths/carpathianTreasures/carpathian_treasures_v1_92.xlsx, extracts a reel strip starting at B19:B106 (and derives the other four reel columns), win lines from G13:K22, and paytable data from B22:G31. It maps workbook symbols such as HV1 and SCATTER to runtime IDs such as H1 and SC.

That command writes feg_parse-maths/output/carpathian-treasures-<variant>.json; the default filename suffix is R7. This is not automatically copied into the game package. Runtime loads the checked-in R4 math JSON.

The parser's current output shape is only a subset of that runtime config: it emits BG.ReelSet_1, paytable, paylines, wild metadata, and symbolsMap, but not the runtime config block or the extra reel sets/selector fields. A carpathian_treasures_v2.xlsx workbook is present too, while the current command still names v1_92 directly. Confirm the authoritative workbook and reconcile parser output with runtime types/rules before replacing the game's math file.

Math sheet metrics

These terms commonly appear in a game's math sheet or simulation report. They describe the overall probability and payout behavior; they are not values calculated by an individual spin.

TermPlain-language meaning
RTP (Return to Player)The expected share of all wagered credits returned as wins over a very large number of plays. It is a long-run statistical measure, not a promise about one spin or one player's session.
Hit rate (hit frequency)The proportion of spins that produce a win under the report's definition of a hit. Check whether the report includes every nonzero win or reports feature triggers and other events separately.
VolatilityA description of how wins are distributed: how often wins occur and how large they tend to be. Higher volatility generally means less even results, but the label alone does not specify a precise probability or guarantee a particular pattern.
SD (standard deviation)A statistical measure of how widely outcomes vary around their average. Slot reports often express it relative to the bet; consult the sheet for the exact outcome and units used. SD is related to volatility, but the terms are not interchangeable.
Theoretical vs. simulated resultA theoretical value is calculated from the math model. A simulated value is estimated by running many spins, so it can vary with sample size and random outcomes.

The checked-in R4 JSON contains the runtime layout, reel data, paytable, and paylines, but no RTP, hit-rate, volatility, or SD summary values. For a reported number, use the approved math sheet or simulation report and follow the math team's definitions and units.

3. From Spin Request to Reel View

The high-level game flow is:

  1. The plugin loads carpathian-treasures-R4.json during onLoad.
  2. The spin operation retrieves the math configuration for the requested mode and passes the bet to the game engine.
  3. The engine asks the SDK reel generator to build a 5-column, 3-row view from BG.ReelSet_1.
  4. The game logic evaluates paylines, scatter pays, and bonus-symbol pays, then builds the result.
  5. The plugin returns the result and summary amounts to its caller.

The reel generator selects one stop independently for each column. Starting at that index, it takes three consecutive symbols from that column's strip. If the strip ends before all visible rows are filled, indexing wraps to the beginning of the same strip. Thus, each stop determines one column's visible symbols; it does not select a multi-row block shared across all reels.

The SDK requests each stop through its RNG service. The exact RNG service and certification integration are platform concerns and are outside this guide. In development mode only, extraData.combination can supply stop indices instead; it may be an array or a comma-separated string. This is a test hook, not normal spin behavior.

The board is stored column-major: reelView[column][row]. For example, reelView[0] is the first reel and contains its three visible symbols.

Active reel-strip symbol distribution

The table below counts each symbol in the active BG.ReelSet_1 strips. Each cell shows count (share of strip positions). Strip lengths differ by reel. This describes the stored symbol mix; it is not the probability of seeing a symbol anywhere in the three visible rows or the probability of a win.

SymbolReel 1 (88 positions)Reel 2 (84 positions)Reel 3 (80 positions)Reel 4 (75 positions)Reel 5 (88 positions)
BN3 (3.4%)0 (0.0%)3 (3.8%)0 (0.0%)6 (6.8%)
H14 (4.5%)6 (7.1%)6 (7.5%)6 (8.0%)5 (5.7%)
H29 (10.2%)3 (3.6%)14 (17.5%)4 (5.3%)7 (8.0%)
H33 (3.4%)16 (19.0%)9 (11.3%)7 (9.3%)10 (11.4%)
H413 (14.8%)6 (7.1%)9 (11.3%)18 (24.0%)10 (11.4%)
L111 (12.5%)9 (10.7%)11 (13.8%)8 (10.7%)12 (13.6%)
L213 (14.8%)15 (17.9%)8 (10.0%)9 (12.0%)12 (13.6%)
L311 (12.5%)11 (13.1%)10 (12.5%)9 (12.0%)13 (14.8%)
L417 (19.3%)13 (15.5%)5 (6.3%)10 (13.3%)11 (12.5%)
SC4 (4.5%)4 (4.8%)2 (2.5%)2 (2.7%)2 (2.3%)
WD0 (0.0%)1 (1.2%)3 (3.8%)2 (2.7%)0 (0.0%)

4. How Wins Are Evaluated

Fixed paylines

The R4 math JSON defines 10 paylines as sequences of flat cell positions. The board has five columns, so a flat position p maps to:

  • Column: p % 5
  • Row: floor(p / 5)

The positions in a line are evaluated from left to right. A regular-symbol win starts at the first reel and continues through consecutive matching symbols; WD can substitute for a regular symbol. A mismatch, SC, or BN ends the match. Each line pays at most its best qualifying result. This is a paylines game, not a ways evaluation.

The line definitions are stored in winLines in the math JSON. Their order determines the 1-based lineNumber reported in each win result.

Paytable and bet scaling

For regular line symbols, the paytable array index corresponds to the number of matching positions minus one. For example, the third value is the payout for three matching positions. The game uses a base bet of 10 and scales each paytable value by the total bet:

win amount = paytable value x (total bet / base bet)

The same base-bet scaling is used for scatter and bonus-symbol payouts. The current R4 values are:

Symbol2 matches3 matches4 matches5 matches
H110502505000
H2040120700
H3040120700
H402040200
L1-L401030150
SC0502001000
BN020000
WD0000

The values above are the paytable multipliers before bet scaling. SC and BN are counted across the visible board rather than evaluated as paylines. WD has no standalone payout in this paytable; it participates as a substitute in line evaluation.

Expanding wilds

The runtime treats every reel containing at least one WD as a candidate expanding reel for line evaluation: all row positions on that reel are evaluated as wild. The returned expandedReelView shows a candidate reel filled with WD only when a winning line uses a position on that reel. Otherwise that reel is returned with its original symbols. wildExpandedReels contains the zero-based column indices of reels shown as expanded.

Scatter and bonus positions and counts are calculated from expandedReelView. Consequently, a reel that contributes as an expanded wild is represented as wild symbols in those result calculations too.

5. Reading the Spin Result

The plugin's gameData is the game-specific spin result. The main fields are:

FieldMeaning
reelViewOriginal visible board, stored as [column][row].
expandedReelViewBoard used for the returned expanded-wild display and scatter/bonus counting.
winLinesWinning line entries, including line number, symbol, count, amount, and flat winning positions.
lineWinSum of winning paylines.
scatterWin / scatterPositionsScatter payout and its [column, row] positions.
bonusWin / bonusPositionsBonus-symbol payout and its [column, row] positions.
wildExpandedReelsZero-based column indices displayed as expanded wild reels.
spinWin / totalWinTotal for the spin: line win plus scatter win plus bonus win.
betTotal bet used for the spin.
baseWinSet to the spin's total win by the current logic.
nextFeature / featureResultsFeature continuation data; currently null and an empty array.

At the plugin output level, featureTriggered is derived from whether nextFeature is non-null. For the current game implementation it is false. The plugin also reports bonusWinAmount and bonusRoundCount as zero.

6. Configured vs Implemented

The math JSON contains ReelSet_2, ReelSet_3, and Reel_Selection_Weight, but the current spin engine always supplies BG.ReelSet_1 to the reel generator. The other reel sets and selector weights do not affect spins in this implementation.

The JSON's wild metadata lists reels and says expansion is enabled. Runtime expansion behavior is determined by logic.ts; it does not read the metadata's reel list. Do not infer a reel restriction from that list without confirming a separate intended rule.

The bonus symbol has a base-game paytable entry, but the code does not trigger or run its Jackpot feature. executeFeature returns the previous spin result unchanged. There is no free-spin or bonus-round logic in this game package for this milestone.

The checked-in R4 JSON does not include summary values for RTP, volatility, or hit rate. This guide does not infer those values; use the approved math/PAR source for them.

7. Scope of This Guide

This document covers gameplay, math configuration, reel generation, scoring, and the game-specific spin result. It intentionally does not document certification workflows, hash generation, encryption/decryption, shared platform request/response architecture, or client-side animations. Those topics belong in follow-up architecture and integration documents.

8. Source Files

Built with LogoFlowershow