Mini Game Templates · Solitaire 2.0 Pack

Card-based patience templates with reusable card visuals, rule engines, scoring, and undo-friendly flows.

Unity 6000.0.62f1+10 games30 boosters40 achievementsLiveOps Kit bundled

🏠 Overview

10 fully playable mini-games, each with boosters, achievements, reskin slots, a first-run tutorial, per-level difficulty scaling and light/dark theming — all driven by one shared runtime.

Aces UpDiscard low cards, leave the four aces.
ClockBeat the clock before the fourth King turns up.
Monte CarloPair up touching cards of equal rank.
AccordionSqueeze the whole deck into a single pile.
WishRemove every pair — make your wish come true.
GapsSlide cards into the gaps to sort each row.
Baker's DozenBuild the foundations from thirteen short columns.
Beleaguered CastleStorm the castle — clear all eight wings to the aces.
CalculationBuild the foundations by ones, twos, threes and fours.
OsmosisSeep cards into the rows once their rank appears above.
One contract, 10 implementations. Every game implements IMiniGame and is discovered automatically by reflection — no scene wiring, no prefab lists.

Shared capabilities

💥 BoostersPer-game power-ups with persistent counts and refund safety.
🏆 AchievementsProgression goals per game, tracked persistently, with coin rewards.
🎨 ReskinsDrop in your own art per slot, per game — no code required.
🎯 TutorialsFirst-run overlay walkthroughs, defined declaratively per game.
📈 Level scalingAuto-generated difficulty curves, editable in the Studio.
🌙 Light & darkOne toggle re-themes the chrome and every game.
🎁 LiveOps Kit bundledAds, IAP, haptics, rate-us, notifications and more — the full HyperCasual LiveOps Kit ships in this pack.

⚙ How it works

This is a procedural-UI games template. Every game builds its own interface and logic in C# at runtime inside the RectTransform you give it — there are no hand-placed prefabs to wire up. The shipped demo scene is a pre-baked snapshot of that build, so you can inspect the full hierarchy without pressing Play; on Play it rebuilds itself and becomes fully interactive.

The Studio

Open Tools > Mini Game Templates > Studio for per-game tuning panels. Settings you edit are saved to ScriptableObject assets under Assets/MiniGameTemplates/Resources/Config/ and loaded by the games at runtime.

Customization at a glance

What to changeWhere to find it
Game rules / difficulty / dimensionsStudio, or the game's <Game>Settings asset
Per-level difficulty curveStudio > game panel > Levels editor
Colours / overall lookMiniGameTheme asset, or the in-app DARK/LIGHT toggle
Game art (tiles, pieces, backgrounds…)Reskin system — Tools > Mini Game Templates > Reskin Editor
Boosters offeredEach game's <Game>BoosterSpec.cs
Deeper layout / behaviourThe game's <Game>Game.cs build code
Heads-up: because the UI is procedural, customization happens through data (settings assets, theme, reskins) rather than dragging things around a scene. The data-driven path covers day-to-day tweaks; source access covers the rest.

⚡ Quick start

  1. Import MiniGameTemplates-Solitaire2.unitypackage. If Unity offers to import TMP Essentials, accept — the demo UI uses TextMeshPro.
  2. Open Assets/MiniGameTemplates/Demo/MiniGameTemplates_Solitaire2.unity. The full demo is already baked into the scene.
  3. Press Play — the dashboard lists every Solitaire 2.0 game; pick, play, and try the boosters and cheat rail.
  4. Open Tools > Mini Game Templates > Studio and tune any game's settings.
  5. (Optional) Open Tools > HLK > Guided Setup to configure the bundled LiveOps kit — ads, IAP, notifications, rate-us and more (see the LiveOps Kit section).
  6. To ship a single game inside your own UI, use the IMiniGame contract:
IMiniGame game = new AcesUpGame();
game.Mount(hostRect, context);   // context : IMiniGameContext
// ... later, when done:
game.Unmount();
Tip: the demo scene's dashboard is a complete reference implementation of IMiniGameContext (theme, audio, save, events, wallet, score) — copy it or implement the interface with your own services.

🛠 Architecture

The IMiniGame contract

public interface IMiniGame {
    string Id { get; }                 // stable snake_case id, e.g. "solitaire2_aces_up"
    string DisplayName { get; }
    string Category { get; }
    string ShortDescription { get; }
    void Mount(RectTransform host, IMiniGameContext ctx);
    void Unmount();
    void NewRound();
    IEnumerable<CheatAction> GetCheatActions();
}

Auto-discovery

RegistryDiscoversConvention
MiniGameRegistryIMiniGame classes with a [MiniGame] attributeone per game
Booster registryIBoosterSpec implementations<Game>BoosterSpec.cs
Achievement registryIAchievementSpec implementations<Game>AchievementSpec.cs
Reskin registryIReskinSpec implementations<Game>ReskinSpec.cs
Tutorial registryITutorialSpec implementations<Game>TutorialSpec.cs

Per-game folder layout

Assets/MiniGameTemplates/Runtime/Solitaire2/<Game>/
    <Game>Game.cs             // gameplay + procedural UI
    <Game>Settings.cs         // ScriptableObject settings (+ static Default)
    <Game>BoosterSpec.cs      // booster definitions
    <Game>AchievementSpec.cs  // achievement definitions
    <Game>ReskinSpec.cs       // reskinnable sprite slots
    <Game>TutorialSpec.cs     // first-run walkthrough steps
Modular by design. Delete any single game's folder and the rest keep working. Add a new game by mirroring the layout — no edits to any other file required.

Runtime flow

Mount(host, ctx)NewRound() → player input loop → RoundWon / RoundLost event → NewRound() or Unmount()

🎮 Aces Up

Discard low cards, leave the four aces.

How to play

  1. Tap a column's top card to discard it when another column shows a higher card of the SAME suit. Aces are high, so they can never be beaten.
  2. Stuck? Tap the stock to deal four fresh cards. Empty a column by moving a top card into it. Leave only the four Aces to win.

Boosters

BoosterKeyEffect
HinthintHighlight a card you can discard or move right now.
UndoundoTake back your last discard, move or deal.
Magic Discardmagic_discardBanish the lowest non-Ace top card, no match required.

Achievements

AchievementGoalReward
Aces High
Win your first game of Aces Up.
1
Ace Collector
Win 10 games of Aces Up.
10200 coins
Flawless
Win a game without using Undo.
1150 coins
Purist
Win a game without using Magic Discard.
1150 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
AllowEmptyColumnMovestrueIf true, a tapped top card that can't be discarded is picked up for an empty-column move. When false, only auto-discard taps work.

↑ Back to top

🎮 Clock

Beat the clock before the fourth King turns up.

How to play

  1. The deck is dealt face-down into a clock: each hour holds its rank (1 = Ace … 12 = Queen) and the centre pile holds the Kings. Tap the lit centre pile to flip the first card.
  2. Each flipped card slides under its matching hour, then you continue from that pile. Reveal all 52 to win — but if the fourth King turns up too soon you're stuck.

Boosters

BoosterKeyEffect
HinthintHighlight the pile the next card belongs to.
PeekpeekBriefly reveal the next face-down card before you flip it.
Second Chancesecond_chanceOnce per game, continue from another pile when you get stuck.

Achievements

AchievementGoalReward
Beat the Clock
Turn over all 52 cards and win a game.
1
Clockwork
Win 10 games of Clock.
10150 coins
Close Call
Reveal 48 or more cards in a single game.
48150 coins
Timekeeper
Play 50 games of Clock.
50200 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
AutoPlayfalseIf true, the game auto-advances on a short delay instead of waiting for a tap. The runtime keeps tap-to-flip regardless; this is reserved for a future auto-play mode.

↑ Back to top

🎮 Monte Carlo

Pair up touching cards of equal rank.

How to play

  1. Tap a card to select it, then tap a touching card of the SAME rank to remove the pair. Touching means next to it across, down, or diagonally.
  2. Out of pairs? Hit Consolidate to slide the cards up and deal fresh ones from the stock. Clear all 52 cards to win.

Boosters

BoosterKeyEffect
HinthintFlash a touching pair of equal-rank cards you can remove.
UndoundoTake back your last removal, consolidate or reshuffle.
ReshufflereshuffleShuffle the cards still on the board into new spots when you're stuck.

Achievements

AchievementGoalReward
First Match
Clear the board and win your first game.
1
Pair Master
Win 10 games of Monte Carlo.
10150 coins
Clean Sweep
Clear the board and win without spending a reshuffle.
1200 coins
Centurion
Remove 300 pairs across all your games.
300250 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
MaxReshuffles2How many times the Reshuffle booster may be used per round.

↑ Back to top

🎮 Accordion

Squeeze the whole deck into a single pile.

How to play

  1. The whole deck is laid out left to right. Tap a pile to fold it onto the pile 1 or 3 spots to its left when their top cards share a suit or a rank.
  2. Every fold closes the gap and shifts the line left. Keep squeezing until the entire deck collapses into a single pile to win.

Boosters

BoosterKeyEffect
HinthintFlash a pile that can legally fold to its left.
UndoundoTake back your last fold.
Free Foldfree_moveFold one pile left even when the cards don't match.

Achievements

AchievementGoalReward
Squeezed Shut
Compress the whole deck into a single pile and win.
1
Accordionist
Win 10 games of Accordion.
10150 coins
Tight Squeeze
Fold a deal down to 3 piles or fewer.
49200 coins
Folded a Thousand Times
Make 500 folds across all your games.
500150 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
PreferLongFoldtrueIf true, the auto-move prefers the longer distance-3 fold when both a distance-1 and distance-3 move are legal.

↑ Back to top

🎮 Wish

Remove every pair — make your wish come true.

How to play

  1. Tap a pile's top card to select it, then tap another top card of the SAME RANK to remove both to the discard.
  2. Clear all eight piles to win. Stuck with no matching tops? Spend a Reshuffle to re-deal the cards you have left.

Boosters

BoosterKeyEffect
HinthintFlash a pair of matching top cards you can remove.
UndoundoTake back your last pair removal.
ReshufflereshuffleGather the remaining cards and deal the piles again. Limited uses.

Achievements

AchievementGoalReward
Make a Wish
Clear every card and win your first game.
1
Wish Granted
Win 10 games of Wish.
10150 coins
Pure Wish
Win a game without using a reshuffle.
1200 coins
Pair Collector
Remove 200 pairs across all your games.
200150 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
ReshuffleLimit2How many reshuffles the player may use per round when stuck. Each reshuffle gathers the remaining cards and re-deals the piles.
FanPilesfalseIf true the piles fan downward so the buried cards peek out; if false only the top card shows (with a small +N badge).

↑ Back to top

🎮 Gaps

Slide cards into the gaps to sort each row.

How to play

  1. A gap can be filled only by the card one rank higher and the same suit as the card on its LEFT. Tap that card to slide it in. A gap at the far left of a row takes any 2.
  2. Build each row 2,3,...,K of a single suit. Out of moves? Tap Reshuffle to deal the loose cards into the gaps again. Sort all four rows to win.

Boosters

BoosterKeyEffect
HinthintFlash a card that can slide into one of the gaps.
UndoundoTake back your last slide or reshuffle.
ReshufflereshuffleGather the loose cards and deal them into the gaps again when stuck.

Achievements

AchievementGoalReward
Mind the Gap
Sort all four rows and win your first game.
1
Sorter
Win 10 games of Gaps.
10150 coins
Clean Run
Sort every row and win without using a reshuffle.
1200 coins
Gap Year
Play 50 games of Gaps.
50250 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
MaxReshuffles2How many times the loose cards may be reshuffled per round.

↑ Back to top

🎮 Baker's Dozen

Build the foundations from thirteen short columns.

How to play

  1. All 52 cards are dealt face-up into thirteen short columns. Tap a column's top card to send it to a foundation when it follows in suit, starting from the Ace.
  2. Can't play to a foundation? Tap a top card, then tap another column to drop it on a card one rank higher (any suit). Empty columns stay empty. Clear all four foundations to win.

Boosters

BoosterKeyEffect
HinthintFlash a card you can play to a foundation or build down right now.
UndoundoTake back your last move.
Auto Collectauto_collectSweep every safely-playable card up to the foundations.

Achievements

AchievementGoalReward
Fresh Batch
Win your first game of Baker's Dozen.
1
Master Baker
Win 10 games of Baker's Dozen.
10200 coins
Flawless
Win a game without using Undo.
1150 coins
Stocked Pantry
Send 500 cards to the foundations across all games.
500250 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
SinkKingsOnDealtrueSink any King to the bottom of its column during the deal so it never blocks the cards above it. This is the standard Baker's Dozen deal; turning it off makes most deals unwinnable.

↑ Back to top

🎮 Beleaguered Castle

Storm the castle — clear all eight wings to the aces.

How to play

  1. The four Aces start on the foundations. Move the OUTER card of any wing onto another wing's outer card if it is exactly one rank lower (any suit). Only one card moves at a time.
  2. Tap an outer card to send it up to its foundation when it follows in suit. Empty wings accept any card. Build all four foundations up to the Kings to storm the castle.

Boosters

BoosterKeyEffect
HinthintFlash a legal move you can make right now.
UndoundoTake back your last move.
Auto-Collectauto_collectSweep every outer card that is safe to play onto the foundations.

Achievements

AchievementGoalReward
Castle Stormed
Win your first game of Beleaguered Castle.
1
Castellan
Win 10 games of Beleaguered Castle.
10200 coins
Flawless Siege
Win a game without using Undo.
1150 coins
Master Mason
Place 500 cards on the foundations across all games.
500250 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
AutoPlayToFoundationtrueWhen true, tapping a column's outer card auto-plays it to a foundation when that move is legal before falling back to a tableau move. When false, every move requires source→dest taps.

↑ Back to top

🎮 Calculation

Build the foundations by ones, twos, threes and fours.

How to play

  1. Each foundation starts on A, 2, 3 or 4 and builds UP by that step, wrapping past the King: the +2 pile goes 2,4,6,8,10,Q,A,3… Suit never matters. Each pile's label shows the rank it needs next.
  2. Tap the stock to turn over the current card, then tap a foundation to play it — or tap a waste pile to park it for later. Build all four foundations up to the King to win.

Boosters

BoosterKeyEffect
HinthintHighlight a foundation you can advance right now.
UndoundoTake back your last play, park or deal.
PeekpeekReveal the next card waiting on top of the stock.

Achievements

AchievementGoalReward
Carry the One
Win your first game of Calculation.
1
Calculator
Win 10 games of Calculation.
10200 coins
Flawless
Win a game without using Undo.
1150 coins
Number Cruncher
Finish 50 games of Calculation.
50250 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
AutoRouteCurrentCardtrueIf true, tapping the current card auto-routes it to a foundation when it fits, otherwise parks it on the first free waste pile.

↑ Back to top

🎮 Osmosis

Seep cards into the rows once their rank appears above.

How to play

  1. Tap a reserve top to seep it into a row. The top row takes its suit in any order; lower rows need the SAME RANK already placed in the row just above.
  2. Out of plays? Tap the stock to turn over a waste card. Place all 52 cards into the four rows to win.

Boosters

BoosterKeyEffect
HinthintFlash a reserve or waste card you can seep into a row.
UndoundoTake back your last play, stock draw, or redeal.
RedealredealRecycle the waste back into the stock to cycle through it again. Limited uses.

Achievements

AchievementGoalReward
First Seep
Place all 52 cards and win your first game.
1
Osmosis Master
Win 10 games of Osmosis.
10150 coins
Perfect Diffusion
Win a game without using Undo.
1200 coins
Steady Trickle
Seep 50 cards into rows across all your games.
50150 coins

Reskin slots

background card_back card_face — drop art per slot via Tools > Mini Game Templates > Reskin Editor.

Configurable settings

SettingDefaultWhat it does
RedealLimit2How many times per round the player may recycle the waste back into the stock to cycle through it again.

↑ Back to top

💥 Boosters

Per-game power-ups with persistent counts and refund safety, auto-discovered from each game's <Game>BoosterSpec.cs. The demo dashboard renders them as the bottom booster bar.

Activating a booster

bool OnBoosterActivated(string key) {
    if (_ended || _busy) return false;   // returning false REFUNDS the charge
    switch (key) { /* per-key effects */ }
    return false;                        // unknown key -> refund
}
Refund safety: returning false from the handler refunds the booster — use it whenever the activation can't proceed. Returning true deducts the charge.

Award boosters programmatically with BoosterManager.Add(gameId, key, count).

Full booster catalogue

GameBooster keys
Aces Uphint undo magic_discard
Clockhint peek second_chance
Monte Carlohint undo reshuffle
Accordionhint undo free_move
Wishhint undo reshuffle
Gapshint undo reshuffle
Baker's Dozenhint undo auto_collect
Beleaguered Castlehint undo auto_collect
Calculationhint undo peek
Osmosishint undo redeal

🏆 Achievements

Progression goals per game, defined in <Game>AchievementSpec.cs and tracked persistently by AchievementManager. Unlocks pop a toast card over the game and auto-credit any coin reward. Each game's own goals are listed in its section above.

Reset helpers for testing: AchievementManager.ResetForGame(gameId) and AchievementManager.ResetAll() (also exposed in the demo's cheat rail).

🎨 Reskins

Drop in your own art per slot, per game — no code required. Open Tools > Mini Game Templates > Reskin Editor, pick a game, and assign an image per slot. Art is copied to Resources/Reskin/<gameId>/<slot>.png and imported as a Sprite automatically. In-game, the Skin pill toggles between Default and Custom art.

Per-game slot list

GameSlots
Aces Upbackground card_back card_face
Clockbackground card_back card_face
Monte Carlobackground card_back card_face
Accordionbackground card_back card_face
Wishbackground card_back card_face
Gapsbackground card_back card_face
Baker's Dozenbackground card_back card_face
Beleaguered Castlebackground card_back card_face
Calculationbackground card_back card_face
Osmosisbackground card_back card_face
Sprite-only. The reskin system swaps sprites — layouts, colours and animations stay the same. Until custom art is added the games use clean procedural sprites and the pill shows Skin: —.

🎯 Tutorials

First-run overlay walkthroughs, defined declaratively in <Game>TutorialSpec.cs as an ordered list of captioned spotlight steps. Each shows once per game's first session and can be replayed from the demo's cheat rail. Reset with TutorialManager.Reset(gameId).

📈 Level scaling

Per-game difficulty progression — auto-generated out of the box, fully editable in the Studio.

int level = LevelManager.GetCurrent(gameId);          // player's current level
var diff  = LevelManager.GetDifficultyForCurrent(gameId);
float mult = diff.Get("difficulty", 1f);              // ramp targets / timers / AI

The Studio's Levels editor can regenerate a curve (level count, start/end difficulty) or hand-edit individual levels; edits are saved as a LevelSet asset under Resources/Config/Levels/<gameId>.asset. Reset progress with LevelManager.ResetProgress(gameId).

🌙 Light & dark mode

One toggle re-themes the whole scene — chrome and every game. Games read every colour from ctx.Theme, a MiniGameTheme asset that carries both palettes:

theme.ApplyMode(light: true);   // swap palettes
bool isLight = theme.IsLightMode;

The demo dashboard's header has a DARK / LIGHT pill; the choice persists between sessions (default: dark). Both palettes are contrast-checked — panel/text/accent pairings stay readable in either mode.

Tip: when customizing, read colours from ctx.Theme (Accent, TextPrimary, PanelBackground, …) rather than hardcoding, and your changes work in both modes.

🎁 LiveOps Kit (bundled)

The full HyperCasual LiveOps Kit is included in this pack — no stripping, nothing to buy on top. It provides the production meta-game layer around the games:

AdsRewarded, interstitial and banner service with mediation backends (AdMob, LevelPlay, AppLovin, Unity Ads). Runs a safe mock backend until a real SDK is installed.
IAPUnity Purchasing integration with catalog, dummy store for testing, and purchase-reward hooks.
HapticsCross-platform vibration service — already wired to every game's audio events in this demo.
Rate UsNative store-review prompts (Android in-app review / iOS SKStoreReviewController) with dummy editor backend.
NotificationsLocal notification scheduling with permission flow (mobile packages activate it).
Consent & privacyGoogle UMP / Apple ATT consent flow with editor-safe dummy backend.
Analytics & crashPluggable analytics (Unity Analytics / Firebase) and crash-reporter hooks.
Retention systemsDaily rewards, quests, battle pass, energy, offers, shop, unlocks, deep links, sharing, update prompt.

How it is hooked up in this demo

Setup & going live

  1. Everything works out of the box in the editor with mock/dummy backends — no SDKs required, nothing to configure for the demo.
  2. Open Tools > HLK > Open Toolset (or Tools > HLK > Guided Setup) to configure ad units, IAP products, notifications, rate-us and the rest.
  3. To go live, install the SDKs you want (e.g. AdMob, Unity Ads, Firebase) — the kit detects them automatically via scripting defines (HLK_ADMOB, HLK_UNITY_ADS, HLK_FIREBASE, …) and switches from mock to real backends.
No SDK binaries ship in this package. The kit is pure source with optional integrations — it compiles clean in an empty project and lights up real providers only when you add them.

Full kit documentation: Assets/MiniGameTemplates/HyperCasualLiveOpsKit/Documentation/HLK-Documentation.html (also listed under Tools > Mini Game Templates > Welcome > Open Documentation).

➕ Add to your project

Path A — use the bundled demo dashboard

Add Assets/MiniGameTemplates/Demo/MiniGameTemplates_Solitaire2.unity to your build settings. It auto-discovers every imported game and provides the picker, HUD, boosters, achievements and theming out of the box.

Path B — embed a single game in your own UI

IMiniGame game = new AcesUpGame();
game.Mount(hostRect, context);   // your IMiniGameContext implementation
// ...
game.Unmount();                  // ALWAYS unmount before destroying the host

Listening to events

ctx.Events.Subscribe(GameEvents.RoundWon,     payload => { /* celebrate */ });
ctx.Events.Subscribe(GameEvents.RoundLost,    payload => { /* retry UI  */ });
ctx.Events.Subscribe(GameEvents.ScoreChanged, payload => { /* HUD       */ });
Always Unmount(). Games run coroutines and tweens; failing to unmount before destroying the host leaves them running on destroyed transforms.

⚙ Customizing

Override default settings

Each game reads a ScriptableObject settings asset (see each game's Configurable settings table above). Create one via Create > Mini Game Templates > Solitaire 2.0, drop it in Resources/Config/, or mutate <Game>Settings.Default at runtime before mounting.

Boosters: add / remove / rebalance

Audio

Games call ctx.Audio.Play(SfxKind.…). The bundled ProceduralAudioBus synthesizes all SFX at runtime — no audio files to manage; swap in your own IAudioBus to use recorded audio.

🧰 Adding new games

  1. Create Assets/MiniGameTemplates/Runtime/Solitaire2/MyGame/.
  2. Add MyGameGame.cs implementing IMiniGame, decorated with [MiniGame("…", "My Game", Category = MiniGameCategory.Solitaire2)].
  3. Add MyGameSettings (optional) with a static Default getter.
  4. Add the spec files — MyGameBoosterSpec, MyGameAchievementSpec, MyGameReskinSpec, MyGameTutorialSpec — all auto-discovered.
  5. Done: the dashboard and Studio list your game automatically. No edits to existing files.

💡 Troubleshooting

Text is invisible / fonts look broken

Import TMP Essentials: Window > TextMeshPro > Import TMP Essential Resources. The demo UI uses TextMeshPro's default font.

My game doesn't show up in the dashboard

Check it implements IMiniGame, carries the [MiniGame] attribute, and its assembly references MiniGameTemplates.Core.

A booster button does nothing when pressed

The booster's key must exactly match a case in the game's booster handler — unknown keys refund silently by design.

Tutorials replay every time I press Play in the editor

The "seen" flag is stored per game id in PlayerPrefs; clearing PlayerPrefs resets it. Replay on demand from the cheat rail instead.

Reskin sprites don't apply

Import the art through Tools > Mini Game Templates > Reskin Editor (it handles the copy + import settings), then flip the in-game Skin pill to Custom.

Coroutine errors about destroyed RectTransforms when switching games

Call Unmount() before destroying the host. The unmount path stops the game's coroutines and tweens.

Ads say “SIMULATED” / no real ads show

By design: without an ad SDK installed the kit uses its mock backend, which draws clearly-labelled placeholder ads so every flow is testable. Install a real provider (e.g. AdMob via its package) and the kit switches to it automatically — see the LiveOps Kit section.

Where do I report a bug?

Email satisvizion@gmail.com with your Unity version, target platform, the game id (e.g. solitaire2_aces_up), steps to reproduce, and the console log.

📬 Support & review

Get in touch: satisvizion@gmail.com — bug reports, feature requests, integration help and game requests for future updates are all welcome. Typical response time is 24–48 hours.

Before contacting, it helps to: check Troubleshooting above, open the demo scene to verify the game runs there, and copy any Console errors. Include your Unity version, render pipeline, target platform and the game id.

Enjoying the pack? Reviews on the Asset Store are the biggest help to an indie publisher — if this pack saved you time, a star rating is hugely appreciated. ⭐