Configuration keys, defaults, constraints, naming conventions, and component relationships for the C++ minigame runtime.
C++ runtime Source-derived defaults Constraints & caveatsReviewed 27 Oct 2026
Reference at a glance
current repository behavior
10
Minigame families
4
Cutter prefixes
15
Reference tables
C++
Runtime scope
Browse and search
press Escape to clear
How to read this guide
reference section
The C++ runtime reads most settings from an fsCVariableTable. A value marked Required is read without an explicit fallback and should be supplied even where the underlying table may return an empty string or zero. A value marked Optional shows the fallback encoded by the component.
Traditional empty-hole or row/column sliding puzzle
Jigsaw
JIG / CUJ
C++
Drag, rotate, cluster, deck, and cutter settings
Pairs
PRS
C++
Matching pairs with transition and mismatch shuffle
Join the Dots
JTD
C++
Ordered tap sequence
Spot the Difference
DIF
C++
Paired difference hotspots; naming-driven
Instant Inventory
logic component
C++
Key/lock completion logic
Word Search
WRD
C++
Grid, tile set, selection assets; straight, drag-through or bending selection
Word Hunt
WDH
C++
Dense board of touching letters; words bend; optional hidden words with clues (word-hunt branch)
Shared C++ cutter parameters
reference section
The CUJ, CUR, CUF, and CUS cutter components build puzzle pieces from source art and stencil assets. These keys belong to the cutter style table and are inherited by the generated pieces.
Parameter
Type
Default / requirement
Explanation and constraints
edgeSet
string path stem
Required
Stencil path prefix. Simple cutters load edgeSet + tile.png. Jigsaw also loads the tongue/groove edge images.
tileWidth
integer
Optional; 96
Base cutter fallback. Current registered cutter subclasses replace it with stencil-derived dimensions, so changing it does not reliably resize pieces.
tileHeight
integer
Optional; 96
Base cutter fallback. Current registered cutter subclasses replace it with stencil-derived dimensions.
tessellate
comma-separated integers
Rotate cutter only; empty
One-based tile indices to subdivide into four pieces. Requires edgeSet + subTile.png. Values are converted to zero-based indices internally.
C++ minigame parameters
reference section
Rotate
parameter group
Identifier: ROT (piece), CUR (cutter). Each tap advances a piece by one discrete rotation step until it returns to step zero.
Parameter
Type
Default / requirement
Explanation and constraints
steps
integer
Optional; 4
Number of positions around 360 degrees. Must be non-zero. A positive value turns clockwise; a negative value turns counter-clockwise. Magnitude is used as the step count.
linked
boolean
Optional; false
Links rotate pieces into a ring; operating one also advances its linked partner in the same configured direction.
linkedReverse
boolean
Optional; false
Links pieces as above but reverses the linked partner's direction. If linked is true, linkedReverse is not evaluated.
homeRotLock
boolean
Optional; false
When true, a piece cannot be rotated away after it reaches its home rotation.
Flipsaw
parameter group
Identifier: FLP (piece), FLPLGC (logic), CUF (cutter). Pieces are shuffled and solved by selecting two pieces to swap. Rotation can also be enabled.
Parameter
Type
Default / requirement
Explanation and constraints
stepsFLP
integer
Optional; 0
Rotation enable switch. Zero disables rotation. Any non-zero value enables the inherited rotate behavior; the actual number/direction of positions is read from steps.
steps
integer
Conditionally optional; 4
Inherited Rotate setting used when stepsFLP is non-zero. Positive/negative controls direction as for Rotate.
homePosLock
integer flag
Optional; 0
Set to 1 to prevent a correctly positioned piece from being selected and moved again.
wrongColTint
8-digit colour
Optional; ffffffff
RGBA tint used for a piece in the wrong position.
selectedColTint
8-digit colour
Optional; cd00cdff
RGBA tint for the selected piece.
hint tint
current-code behavior
No independent key
The hint colour is also read from selectedColTint. Its fallback is 00c800ff only when selectedColTint is absent. There is no separately read hintColTint key.
linked / linkedReverse / homeRotLock
boolean
Inherited
Apply only when rotation is enabled; semantics match Rotate.
Slidasquare
parameter group
Identifier: SLD (piece), CUS (cutter). Supports a classic sliding puzzle and cyclic row/column slide variants.
Parameter
Type
Default / requirement
Explanation and constraints
game
string enum
Optional; traditional
Valid values: traditional, xSlide, ySlide, xySlide. Any unrecognised value falls back to traditional.
speed
integer
Optional; 30
Movement increment applied on each update while a tile travels to its target; larger values move faster.
holeID
integer
Traditional only; last tile
Zero-based generated tile ID used as the invisible hole. If omitted, the last tile is used. Non-traditional modes do not create a hole.
stepsSLD
integer
Optional; 0
Rotation enable switch. Zero disables rotation. A non-zero value enables inherited rotation; the actual number/direction of positions comes from steps.
steps
integer
Conditionally optional; 4
Inherited Rotate setting used when stepsSLD is non-zero.
linked / linkedReverse / homeRotLock
boolean
Inherited
Apply only when rotation is enabled; semantics match Rotate.
Jigsaw
parameter group
Identifier: JIG (piece), JIGLGC (logic), CUJ (cutter). Pieces are dealt into a configurable deck area, optionally rotated, and dragged home. Nearby correct pieces may form clusters.
Parameter
Type
Default / requirement
Explanation and constraints
rotationStep
integer degrees
Optional in practice; 0
Rotation increment. Zero disables rotation. Non-zero values must divide 360 exactly; negative divisors produce the opposite angular direction.
clusteringEnabled
boolean
Optional; false
Allows correctly adjacent pieces to cluster and move together.
homePositionThreshold
integer
Optional; 16
Maximum positional tolerance used when deciding whether a piece is close enough to snap home.
stackOriginX
integer
Required
Centre X of the randomised start/deck region.
stackOriginY
integer
Required
Centre Y of the randomised start/deck region.
xRange
integer
Optional; half canvas minus piece width
Horizontal half-range used to seed deck positions.
yRange
integer
Optional; half canvas minus piece height
Vertical half-range used to seed deck positions.
wideScreenStackOriginX
integer
Optional override
Wide-screen deck centre X. The wide-screen override is used only when all four wide-screen keys exist.
wideScreenStackOriginY
integer
Optional override
Wide-screen deck centre Y.
xWideScreenRange
integer
Optional override
Wide-screen horizontal half-range.
yWideScreenRange
integer
Optional override
Wide-screen vertical half-range.
Jigsaw display and image overrides
Parameter
Type
Default / requirement
Explanation and constraints
drawer
string asset path
Optional; empty
Creates a slide-out drawer sprite when non-empty and uses it as the jigsaw desktop.
boxImagePosXOverride
integer
Optional; unset sentinel
Overrides the help/box image X position when supplied.
boxImagePosYOverride
integer
Optional; unset sentinel
Overrides the help/box image Y position when supplied.
ghostImagePosXOverride
integer
Optional; unset sentinel
Overrides the ghost image X position when supplied.
ghostImagePosYOverride
integer
Optional; unset sentinel
Overrides the ghost image Y position when supplied.
Jigsaw help-image component
Parameter
Type
Default / requirement
Explanation and constraints
width
integer
Required
Displayed help-image width.
height
integer
Required
Displayed help-image height.
opacity
integer 0-255
Optional; 255
Opacity. At 255 the image participates in draw-order state; lower values are attached to the current sub-scene parent.
Pairs
parameter group
Identifier: PRS (piece) with gfCPairsMiniGameLogicComponent. Pieces with the same numeric index form a match group. A conventional PRS-back.png asset supplies the reverse face when present.
Parameter
Type
Default / requirement
Explanation and constraints
transition
string enum
Optional; fade
Valid values are fade and rotate. Controls the reveal/hide transformation. Use only these values; unknown strings map through the current enum lookup without validation.
shuffle
boolean
Optional; false
When true, mismatched pieces exchange positions before turning face-down; otherwise they simply turn face-down.
Join the Dots
parameter group
Identifier: JTD. Players tap numbered entities in ascending numeric order; dummy-named layers are treated as already complete.
Parameter
Type
Default / requirement
Explanation and constraints
fullReset
boolean
Optional; false
When true, an incorrect tap resets previously completed dots after the feedback countdown.
tipFlash
boolean
Optional; true
When true, incorrect input freezes the game for about 1000 ms to show feedback. When false, the countdown is set to 1 ms.
Spot the Difference
parameter group
Identifier: DIF. The level table has no minigame-specific parameters; behavior is driven by paired entity names and the global diffFoundMarker setting.
Parameter
Type
Default / requirement
Explanation and constraints
Entity numeric index
naming convention
Required
All digits in the name after DIF form the difference index. Hotspots with the same index are completed together.
a / b suffix
naming convention
Required by convention
Names follow DIF-xxxxx(n)a/b. The a side is treated as the original and plays the find sound.
diffFoundMarker
global app setting
Required outside level table
Animation or particle asset used to mark a found difference. A .txt extension selects the particle path; other extensions use animated-sprite data.
Instant Inventory
parameter group
Identifier: gfCInstantInventoryMiniGameLogicComponent. Collects draggable keys and lock components under the logic entity and completes when all locks have been broken.
Parameter
Type
Default / requirement
Explanation and constraints
reset
boolean
Optional; false
Read into mReset during initialisation. In the current implementation it is not consulted after assignment, so changing it has no observable gameplay effect.
depthOrderLocks
boolean
Optional; true
Level setting used by draggable Instant Inventory keys. When true, an overlapping incompatible lock in front stops the lock search, so visual Z/depth order determines which lock receives the key. Set to false to ignore lock depth order and continue searching overlapping locks for a compatible target behind it.
Word Search
parameter group
Identifier: WRD. Loads a grid/word file and creates letter tiles from the configured tile-set directory. By default a word is selected with one straight swipe. dragSelect and snakeWords switch to dragging through the tiles, and snakeWords lets words bend. All three settings default to off, so existing word searches are unchanged. The word search and maze generator components were removed on 26 Oct 2026: nothing called them.
Parameter
Type
Default / requirement
Explanation and constraints
tileSet
string path
Required
Directory of tile images, one per tile, named by the tile's letters: a.png, space.png for a blank, and qu.png for a two-letter tile (word-hunt branch). It also holds w.png, whose size sets the tile size. Every tile used on the board needs its image.
grid
string asset path
Required
Word file with a <grid> section and a <words> section. In <grid>, each line is one row of comma-separated tiles. Every row must be the same width. On the word-hunt branch, a tile can hold several letters (qu). In <words>, each line is one word. An optional clue goes in the second column, and is used by hideWords (word-hunt branch). Clues cannot contain commas. Each word must be traceable on the board: a straight line unless snakeWords is on, with no tile used twice.
selection
string asset path
Optional; derived
Primary single-tile/highlight asset. Defaults to tileSet/selection.png. This is the line drawn, untinted, when selection2 or selection2End is missing.
selection2
string asset path
Optional; derived
Selection-line body asset. Defaults to tileSet/selection2.png. When both selection2 and selection2End exist, each segment is drawn from them and tinted in code: translucent green for the player's selection, orange for a hint line.
selection2End
string asset path
Optional; derived
Selection-line end-cap asset. Defaults to tileSet/selection2End.png.
dragSelect
boolean
Optional; false
Select by dragging through the tiles rather than one straight swipe. A tile joins once the pointer is well inside it. The first two tiles fix the direction, dragging back over the selection trims it, and tiles a fast drag skips are filled in. Also turned on by snakeWords.
snakeWords
boolean
Optional; false
Words may bend: drag through touching tiles in any of the eight directions, and no tile can be used twice in one word. Turns on dragSelect. The grid search still tries straight lines first, so a straight word is drawn straight. Found words are saved with the path the player traced (WORD|x,y;x,y;...). Older saves, which hold only the word, still load.
hideWords
boolean
Optional; falseword-hunt branch
Until a word is found, the word list shows its clue and letter count, for example "Game bird (5)", or blanks (_ _ _ _ _) if it has no clue. The clue is the second column of the <words> section. About 14 characters of clue fit on one line of parkRanger18's list entry.
Word Hunt
parameter group
Identifier: WDH (gfCWordHuntMinigameLogicComponent). A Boggle-style board of any size, square or rectangular. The player drags through touching tiles to spell each listed word, and the level is complete when every word is found. A scene whose name starts with wdh_ and that sets grid gets a WDH-autoWordHunt entity, made up of the logic, the word search lens and a sprite. The logic derives from the Word Search logic, so it reads all of Word Search's keys. Only the defaults below differ.
Parameter
Type
Default / requirement
Explanation and constraints
tileSet, grid
string paths
Requiredword-hunt branch
As for Word Search. A Word Hunt board usually has a single qu tile, so the tile set needs a qu.png.
dragSelect
boolean
Optional; trueword-hunt branch
Always on, because snakeWords is on.
snakeWords
boolean
Optional; trueword-hunt branch
Words bend by default. Set it to false to hold a board to straight lines.
hideWords
boolean
Optional; falseword-hunt branch
As for Word Search: the list shows each word's clue and length until it is found.
Behaviour that differs from Word Search: a found word's line blinks for 0.9 s and then clears, so lines don't pile up on a small board. Tracing a word that is already found blinks it grey and clears it. Each hint gives away one more tile of the same unfound word, and draws its line once every tile is shown. Hints recharge between presses: 15 s in parkRanger18's casual mode. The autotest traces words that bend by dragging through the tiles where they turn (gfIMinigameNextMove::sMove::mDragVia).
Validation checklist
reference section
Check
What to verify
Prefix and name
Use a registered prefix and include numeric identifiers for PRS, JTD, and DIF entities. Word Hunt scenes are named wdh_ and set grid.
Word boards
For WRD and WDH, check that every row is the same width, every tile has an image in tileSet, and every word can be traced. Tracing is straight unless snakeWords is on (on by default for WDH), and no tile is used twice. The rustTools linter (tools_core minigame_params) checks all of this on the word-hunt-linter branch.
Hidden words
With hideWords, give every word a short clue in the second column of <words>. A word with no clue shows only its length, and a long clue wraps in the list.
Required assets
Verify edgeSet, tileSet, grid, drawer, selection, and marker paths against the asset root.
Rotation safety
Do not use steps = 0 for Rotate. For Jigsaw, use rotationStep = 0 or a non-zero divisor of 360.
Enable/control pairs
For Flipsaw and Slidasquare, use stepsFLP/stepsSLD to enable rotation and steps to define it.
Wide-screen deck
Supply all four wide-screen jigsaw deck keys or none; partial overrides are ignored.
Current-code caveats
Treat Instant Inventory reset and Flipsaw hint tint as documented implementation limitations.
Source map
reference section
Primary source files reviewed for this reference:
gameModules/gfMinigameCore/gfMinigameComponentFactory.cppgameModules/gfMinigameCore/components/gfICutterComponent.cppgameModules/gfMinigameCore/components/{rotate,flipsaw,slidasquare,jigsaw,pairs,joinTheDots,spotTheDiff,instantInventory}/gameModules/gfMinigameCore/components/wordGames/wordSearch/gameModules/gfMinigameCore/components/wordGames/gfCLetterGrid.{h,cpp} and gfCLetterPath.h (word-hunt branch; path search tested by tests/letter_path_test.cpp)gameModules/gfMinigameCore/components/wordGames/wordHunt/ (word-hunt branch)
† Legacy — originX / originY. Earlier builds anchored cutter puzzle grids and word grids with these scene keys. They are deprecated: position a minigame by its layer instead — the cutter layer (CUR / CUF / CUS / CUJ) for cutter games, a WRD-Minigame layer for Word Search. The runtime still reads them for older scenes and logs a deprecation warning, so they are omitted from the tables above; do not use them in new scenes.