Mini Game Templates · Solitaire Pack

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

Unity 6000.0.62f1+10 games29 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.

KlondikeThe classic — alternating colours, descending sequences.
Spider10 columns, build K→A in suit; full sequences clear.
FreeCell8 columns, 4 free cells. Every deal is solvable.
PyramidPair cards that sum to 13 to dismantle the pyramid.
TriPeaksClick cards adjacent in rank to the waste card.
GolfBuild a chain ±1 from the waste card; clear the tableau.
YukonKlondike with no stock — move any card and everything on it.
Forty ThievesTwo-deck classic — build down in suit, one card at a time.
CanfieldReserve-fed patience; foundations build up from a base rank, wrapping.
ScorpionSpider-Yukon hybrid — build down in suit, grab any card and its stack.
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-Solitaire.unitypackage. If Unity offers to import TMP Essentials, accept — the demo UI uses TextMeshPro.
  2. Open Assets/MiniGameTemplates/Demo/MiniGameTemplates_Solitaire.unity. The full demo is already baked into the scene.
  3. Press Play — the dashboard lists every Solitaire 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 KlondikeGame();
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. "solitaire_klondike"
    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/Solitaire/<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()

🎮 Klondike

The classic — alternating colours, descending sequences.

How to play

  1. Tap a face-up card to pick it up, then tap another column to move it. Build columns down in alternating colours.
  2. Tap the stock (top-left) to deal cards. Build the four foundations up from Ace to King to win.

Boosters

BoosterKeyEffect
HinthintHighlight a legal move — foundation plays first.
UndoundoTake back your last move or stock draw.
Auto-CollectmagnetSend every card that can go up to the foundations.

Achievements

AchievementGoalReward
First Deal
Clear all four foundations and win a game.
1
Klondike Regular
Win 15 games of Klondike.
15150 coins
Unaided Victory
Win a game without using a hint or undo.
1200 coins
High Roller
Finish a game with a score of 800 or more.
800150 coins

Reskin slots

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

Configurable settings

SettingDefaultWhat it does
DrawCount1

↑ Back to top

🎮 Spider

10 columns, build K→A in suit; full sequences clear.

How to play

  1. Build columns downward in rank. A full King-to-Ace run in one suit clears itself to a foundation.
  2. Out of moves? Tap the stock to deal one card to every column — but only when no column is empty. Clear all eight sequences to win.

Boosters

BoosterKeyEffect
HinthintHighlight a card that can move onto another column.
UndoundoTake back your last move or row deal.

Achievements

AchievementGoalReward
Web Weaver
Clear all eight sequences and win a game.
1
Arachnophile
Win 10 games of Spider.
10150 coins
Sequence Builder
Complete 20 full suit sequences across all your games.
20150 coins
Tangled Web
Win a game played with two or more suits.
1200 coins

Reskin slots

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

Configurable settings

SettingDefaultWhat it does
SuitCount1

↑ Back to top

🎮 FreeCell

8 columns, 4 free cells. Every deal is solvable.

How to play

  1. Every card is face-up. Build columns down in alternating colours; use the free cells (top-left) to park a card.
  2. Build the four foundations (top-right) up from Ace to King in suit. Every FreeCell deal is solvable!

Boosters

BoosterKeyEffect
HinthintHighlight a legal move — foundation plays first.
UndoundoTake back your last move.
Auto-CollectmagnetSend every card that can go up to the foundations.

Achievements

AchievementGoalReward
Cell Block
Clear all four foundations and win a game.
1
FreeCell Fan
Win 15 games of FreeCell.
15150 coins
Purist
Win a game without using undo.
1200 coins
Efficient
Win a game in 80 moves or fewer.
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
AllowMultiMovetrueIf true, multi-card moves between tableau columns are allowed when free cells permit it.

↑ Back to top

🎮 Pyramid

Pair cards that sum to 13 to dismantle the pyramid.

How to play

  1. Tap two exposed cards whose values add up to 13 to remove them. (A=1, J=11, Q=12.) A King is 13 — tap it to remove it alone.
  2. Stuck? Tap the stock to flip a new card into the waste. Clear every card in the pyramid to win.

Boosters

BoosterKeyEffect
HinthintHighlight a pair that sums to 13 (or a removable King).
UndoundoTake back your last pair, removal or draw.
Wild CardjokerRemove one exposed card for free, no partner needed.

Achievements

AchievementGoalReward
Pyramid Razed
Clear the whole pyramid and win a game.
1
Pharaoh
Win 10 games of Pyramid.
10150 coins
One Pass
Clear the pyramid without recycling the stock.
1200 coins
Pair Hunter
Remove 100 cards across all your games.
100150 coins

Reskin slots

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

Configurable settings

SettingDefaultWhat it does
Recycles2

↑ Back to top

🎮 TriPeaks

Click cards adjacent in rank to the waste card.

How to play

  1. Tap any uncovered card that's exactly one rank above or below the waste card. Chain cards without drawing to build a streak bonus.
  2. No move? Tap the stock to turn over a new waste card (this resets your streak). Clear all three peaks to win.

Boosters

BoosterKeyEffect
HinthintHighlight a card you can play onto the waste.
UndoundoTake back your last play or stock draw.
Wild CardjokerClear any uncovered card regardless of rank — keeps your streak going.

Achievements

AchievementGoalReward
Summit
Clear all three peaks and win a game.
1
Mountaineer
Win 10 games of TriPeaks.
10150 coins
Combo King
Reach a streak of 10 cards in a single run.
10200 coins
High Altitude
Finish a game with a score of 1500 or more.
1500150 coins

Reskin slots

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

Configurable settings

SettingDefaultWhat it does
RankWraptrueIf true, A and K wrap around (K → A → 2 chains).

↑ Back to top

🎮 Golf

Build a chain ±1 from the waste card; clear the tableau.

How to play

  1. Tap any column's bottom card that's one rank above or below the waste card. Long unbroken chains score the most.
  2. Out of moves? Tap the stock to turn over a new waste card. Clear every column to win.

Boosters

BoosterKeyEffect
HinthintHighlight a column card you can play onto the waste.
UndoundoTake back your last play or stock draw.
Wild CardjokerPlay any column card onto the waste regardless of rank.

Achievements

AchievementGoalReward
Tee Off
Clear the whole tableau and win a game.
1
Club Pro
Win 10 games of Golf.
10150 coins
Long Drive
Reach a streak of 8 cards in a single chain.
8200 coins
Under Par
Finish a game with a score of 600 or more.
600150 coins

Reskin slots

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

Configurable settings

SettingDefaultWhat it does
RankWrapfalseIf true, A and K wrap around (K → A → 2 chains).

↑ Back to top

🎮 Yukon

Klondike with no stock — move any card and everything on it.

How to play

  1. There's no stock. Pick up ANY face-up card and everything stacked on it, then drop it onto an alternating-colour card one rank higher.
  2. Build the four foundations (top-right) up from Ace to King in suit to win.

Boosters

BoosterKeyEffect
HinthintHighlight a legal move — foundation plays first.
UndoundoTake back your last move.
Auto-CollectmagnetSend every card that can go up to the foundations.

Achievements

AchievementGoalReward
Gold Rush
Clear all four foundations and win a game.
1
Prospector
Win 10 games of Yukon.
10150 coins
Self-Made
Win a game without using a hint.
1200 coins
Mother Lode
Finish a game with a score of 750 or more.
750150 coins

Reskin slots

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

↑ Back to top

🎮 Forty Thieves

Two-deck classic — build down in suit, one card at a time.

How to play

  1. Move ONE card at a time. In the columns build downward IN SUIT (e.g. 7♠ onto 8♠). Tap a top card, then tap where it should go.
  2. Turn the stock one card at a time onto the waste — there is no redeal. Build the eight foundations up A → K in suit to win.

Boosters

BoosterKeyEffect
HinthintHighlight a legal move — foundation plays first.
UndoundoTake back your last move or draw.
Auto-CollectmagnetSend every card that can go up to the foundations.

Achievements

AchievementGoalReward
First Haul
Clear all eight foundations and win a game.
1
Master Thief
Win 10 games of Forty Thieves — no small feat.
10250 coins
Ali Baba
Win a game without a hint or an undo.
1300 coins
Treasure Hoard
Finish a game with a score of 600 or more.
600150 coins

Reskin slots

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

↑ Back to top

🎮 Canfield

Reserve-fed patience; foundations build up from a base rank, wrapping.

How to play

  1. The pile on the left is the RESERVE — play its top card to empty it. Empty columns refill from it automatically.
  2. All four foundations start on the SAME base rank and build up in suit, wrapping past King to Ace. Columns build down by alternating colour, wrapping Ace to King.

Boosters

BoosterKeyEffect
HinthintHighlight a legal move — foundation and reserve plays first.
UndoundoTake back your last move or deal.
Auto-CollectmagnetSend every card that can go up to the foundations.

Achievements

AchievementGoalReward
Beat the House
Clear all four foundations and win a game.
1
High Roller
Win 5 games of Canfield — the odds are against you.
5300 coins
Card Sharp
Win a game without a hint or an undo.
1350 coins
Saratoga Stakes
Finish a game with a score of 500 or more.
500150 coins

Reskin slots

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

↑ Back to top

🎮 Scorpion

Spider-Yukon hybrid — build down in suit, grab any card and its stack.

How to play

  1. Build down IN SUIT. You may pick up ANY face-up card with every card stacked on it — even a messy pile — and drop it on the same suit, one rank higher.
  2. Tap the small stock to deal a card onto each of the first three columns. Assemble all four King-to-Ace suits to win.

Boosters

BoosterKeyEffect
HinthintHighlight a card that can be moved onto another column.
UndoundoTake back your last move or deal.
Super MovewandArm one move that ignores the same-suit rule (rank order still applies).

Achievements

AchievementGoalReward
First Sting
Assemble all four suits and win a game.
1
Venomous
Win 10 games of Scorpion.
10200 coins
Bare-Handed
Win a game without a hint or an undo.
1250 coins
Tail Strike
Finish a game with a score of 600 or more.
600150 coins

Reskin slots

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

↑ 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
Klondikehint undo magnet
Spiderhint undo
FreeCellhint undo magnet
Pyramidhint undo joker
TriPeakshint undo joker
Golfhint undo joker
Yukonhint undo magnet
Forty Thieveshint undo magnet
Canfieldhint undo magnet
Scorpionhint undo wand

🏆 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
Klondikebackground card_back card_face
Spiderbackground card_back card_face
FreeCellbackground card_back card_face
Pyramidbackground card_back card_face
TriPeaksbackground card_back card_face
Golfbackground card_back card_face
Yukonbackground card_back card_face
Forty Thievesbackground card_back card_face
Canfieldbackground card_back card_face
Scorpionbackground 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_Solitaire.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 KlondikeGame();
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, 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/Solitaire/MyGame/.
  2. Add MyGameGame.cs implementing IMiniGame, decorated with [MiniGame("…", "My Game", Category = MiniGameCategory.Solitaire)].
  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. solitaire_klondike), 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. ⭐