Mini Game Templates · Puzzles 4.0 Pack
Logic, tile, number, and spatial puzzle templates with editable difficulty and reusable board/UI systems.
🏠 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.
IMiniGame and is discovered automatically by reflection — no scene wiring, no prefab lists.Shared capabilities
⚙ 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 change | Where to find it |
|---|---|
| Game rules / difficulty / dimensions | Studio, or the game's <Game>Settings asset |
| Per-level difficulty curve | Studio > game panel > Levels editor |
| Colours / overall look | MiniGameTheme asset, or the in-app DARK/LIGHT toggle |
| Game art (tiles, pieces, backgrounds…) | Reskin system — Tools > Mini Game Templates > Reskin Editor |
| Boosters offered | Each game's <Game>BoosterSpec.cs |
| Deeper layout / behaviour | The game's <Game>Game.cs build code |
⚡ Quick start
- Import
MiniGameTemplates-Puzzles4.unitypackage. If Unity offers to import TMP Essentials, accept — the demo UI uses TextMeshPro. - Open
Assets/MiniGameTemplates/Demo/MiniGameTemplates_Puzzles4.unity. The full demo is already baked into the scene. - Press Play — the dashboard lists every Puzzles 4.0 game; pick, play, and try the boosters and cheat rail.
- Open Tools > Mini Game Templates > Studio and tune any game's settings.
- (Optional) Open Tools > HLK > Guided Setup to configure the bundled LiveOps kit — ads, IAP, notifications, rate-us and more (see the LiveOps Kit section).
- To ship a single game inside your own UI, use the
IMiniGamecontract:
IMiniGame game = new WaterSortGame();
game.Mount(hostRect, context); // context : IMiniGameContext
// ... later, when done:
game.Unmount();
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. "puzzles4_water_sort"
string DisplayName { get; }
string Category { get; }
string ShortDescription { get; }
void Mount(RectTransform host, IMiniGameContext ctx);
void Unmount();
void NewRound();
IEnumerable<CheatAction> GetCheatActions();
}
Auto-discovery
| Registry | Discovers | Convention |
|---|---|---|
MiniGameRegistry | IMiniGame classes with a [MiniGame] attribute | one per game |
| Booster registry | IBoosterSpec implementations | <Game>BoosterSpec.cs |
| Achievement registry | IAchievementSpec implementations | <Game>AchievementSpec.cs |
| Reskin registry | IReskinSpec implementations | <Game>ReskinSpec.cs |
| Tutorial registry | ITutorialSpec implementations | <Game>TutorialSpec.cs |
Per-game folder layout
Assets/MiniGameTemplates/Runtime/Puzzles4/<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
Runtime flow
Mount(host, ctx) → NewRound() → player input loop → RoundWon / RoundLost event → NewRound() or Unmount()
🎮 Water Sort
Pour to gather each colour into its own tube.
How to play
- Tap a tube to pick it up, then tap another to pour. The top run of one colour pours onto an empty tube or a matching colour.
- Each tube holds four units. Win by gathering every colour into its own tube.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Flash a productive pour you can make right now. |
| Spare Tube | addtube | Add one extra empty tube to ease the sort. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| First Sort Sort a board completely. | 1 | — |
| Decanter Sort 15 boards in total. | 15 | 200 coins |
| Eight Hues Sort an 8-colour board. | 8 | 300 coins |
Reskin slots
tube background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | WaterSortDifficulty.Medium | More colours = more tubes and a harder sort. |
🎮 Sumplete
Cross out numbers to hit every row and column sum.
How to play
- Tap a number to cross it out. The clue beside each row and below each column is the sum of the numbers you KEEP.
- A clue turns green when its line matches, red when you have kept too much. Match every line to win.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Set one cell to its correct kept/crossed state. |
| Reset | clear | Un-cross every cell and start the grid fresh. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Balanced Solve a grid. | 1 | — |
| Accountant Solve 20 grids in total. | 20 | 200 coins |
| Six by Six Solve a 6×6 grid. | 6 | 250 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | SumpleteDifficulty.Medium | Larger grids are harder. |
🎮 Numbrix
Fill a snaking path of consecutive numbers.
How to play
- Tap an empty cell, then tap digits to enter a number. Tap × to erase.
- Fill every cell so the numbers run 1, 2, 3 … in one snaking path where each number touches the next up, down, left or right.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Reveal the correct number in one empty cell. |
| Clear | clear | Erase every number you have entered. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Pathfinder Complete a path. | 1 | — |
| Trailblazer Complete 15 paths in total. | 15 | 200 coins |
| Long Snake Complete a 6×6 path. | 6 | 250 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | NumbrixDifficulty.Medium | Larger grids hold longer paths. |
GivenFraction | 0.45f | Fraction of cells revealed as givens. |
🎮 Kakurasu
Select cells so their weights match the clues.
How to play
- Tap a cell to select it. A selected cell adds its column number to its row's total and its row number to its column's total.
- Match every edge clue. A clue turns green when its line matches, red when the total is too high.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Fix one cell to its correct on/off state. |
| Clear | clear | Deselect every cell. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Weighed In Solve a grid. | 1 | — |
| Balance Master Solve 15 grids in total. | 15 | 200 coins |
| Heavyweight Solve a 6×6 grid. | 6 | 250 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | KakurasuDifficulty.Medium | Larger grids are harder. |
🎮 KenKen
A Latin square bound by arithmetic cages.
How to play
- Tap a cell, then a keypad digit. Each row and column must use every number once.
- Each coloured cage shows a target and an operation (+ × − ÷). The cage's cells must reach the target using that operation.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Reveal the correct digit in one cell. |
| Clear | clear | Erase every digit you have entered. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Caged Solve a puzzle. | 1 | — |
| Arithmetician Solve 15 puzzles in total. | 15 | 200 coins |
| Six Squared Solve a 6×6 puzzle. | 6 | 300 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | KenKenDifficulty.Medium | Larger grids and bigger cages are harder. |
🎮 Aquarium
Fill tanks with water to meet the edge counts.
How to play
- The grid is split into tanks. Tap a cell to set that tank's water level — water always fills flat, from the bottom up.
- The clues on the top and left count filled cells in each column and row. Match every clue to win.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Set one whole tank to its correct water level. |
| Drain | clear | Empty every tank and start over. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Water Level Solve a board. | 1 | — |
| Aquarist Solve 15 boards in total. | 15 | 200 coins |
| Deep End Solve a 7×7 board. | 7 | 300 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | AquariumDifficulty.Medium | Larger grids hold more tanks. |
🎮 Dominosa
Tile the grid with a full set of dominoes.
How to play
- Tap a cell then a neighbour to lay a domino over the pair. Tap a laid domino to pick it up again.
- Cover the whole grid using each number pair exactly once — the complete domino set.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Lay one correct, not-yet-used domino for you. |
| Clear | clear | Remove every domino you have laid. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| First Tiling Tile a board. | 1 | — |
| Domino Master Tile 15 boards in total. | 15 | 200 coins |
| Full Set Tile a board using the 0-4 domino set. | 4 | 300 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | DominosaDifficulty.Medium | Higher max pip = a larger domino set and grid. |
🎮 Mosaic
Shade cells so each number counts its neighbours.
How to play
- Tap a cell to shade it or blank it again.
- Each numbered cell counts how many of the nine cells around it (itself included) must be shaded. Satisfy every number.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Set one cell to its correct shaded/blank state. |
| Clear | clear | Blank every cell and start over. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| First Picture Complete a picture. | 1 | — |
| Pixel Artist Complete 15 pictures in total. | 15 | 200 coins |
| Big Canvas Complete a 7×7 picture. | 7 | 250 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | MosaicDifficulty.Medium | Larger grids are harder. |
ClueFraction | 0.6f | Fraction of cells that show a clue number. |
🎮 Thermometers
Fill thermometers from the bulb to match counts.
How to play
- Each thermometer fills from its round bulb. Tap a cell to raise the mercury up to there; tap a filled cell to lower it.
- The clues on the top and left give the number of filled cells in each column and row. Match every clue to win.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Set one thermometer to its correct mercury level. |
| Empty | clear | Drain every thermometer and start over. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Just Right Solve a board. | 1 | — |
| Mercury Rising Solve 15 boards in total. | 15 | 200 coins |
| Heatwave Solve a 7×7 board. | 7 | 300 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | ThermometersDifficulty.Medium | Larger grids hold more thermometers. |
🎮 Light Up
Place bulbs to light every cell, obeying the walls.
How to play
- Tap a white cell to place a bulb. A bulb lights its whole row and column until a dark wall stops it.
- Light every white cell, but never let one bulb shine on another. A numbered wall must touch exactly that many bulbs.
Boosters
| Booster | Key | Effect |
|---|---|---|
| Hint | hint | Place or remove one bulb to match a solution. |
| Clear | clear | Remove every bulb you have placed. |
Achievements
| Achievement | Goal | Reward |
|---|---|---|
| Lights On Light up a board. | 1 | — |
| Illuminator Light up 15 boards in total. | 15 | 200 coins |
| Floodlight Light up an 8×8 board. | 8 | 300 coins |
Reskin slots
cell background — drop art per slot via Tools > Mini Game Templates > Reskin Editor.
Configurable settings
| Setting | Default | What it does |
|---|---|---|
Difficulty | LightUpDifficulty.Medium | Larger grids are harder. |
💥 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
}
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
| Game | Booster keys |
|---|---|
| Water Sort | hint addtube |
| Sumplete | hint clear |
| Numbrix | hint clear |
| Kakurasu | hint clear |
| KenKen | hint clear |
| Aquarium | hint clear |
| Dominosa | hint clear |
| Mosaic | hint clear |
| Thermometers | hint clear |
| Light Up | hint clear |
🏆 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
| Game | Slots |
|---|---|
| Water Sort | tube background |
| Sumplete | cell background |
| Numbrix | cell background |
| Kakurasu | cell background |
| KenKen | cell background |
| Aquarium | cell background |
| Dominosa | cell background |
| Mosaic | cell background |
| Thermometers | cell background |
| Light Up | cell background |
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.
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:
How it is hooked up in this demo
- Vibrations: every game's sound events (taps, wins, errors) fire matching haptics through the kit automatically.
- Rewarded ad: winning a round with a coin reward offers a “Watch Ad” doubler; completing the (mock) ad credits the bonus.
- Interstitial: auto-shows after every 3rd round (skipped after a No-Ads purchase).
- Banner + shop: the cheat rail's Ads & IAP section toggles the banner and opens the simulated IAP shop (Coin Pack, No Ads, Starter Bundle) through the kit's store backend.
Setup & going live
- Everything works out of the box in the editor with mock/dummy backends — no SDKs required, nothing to configure for the demo.
- Open Tools > HLK > Open Toolset (or Tools > HLK > Guided Setup) to configure ad units, IAP products, notifications, rate-us and the rest.
- 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.
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_Puzzles4.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 WaterSortGame();
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 */ });
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 > Puzzles 4.0, drop it in Resources/Config/, or mutate <Game>Settings.Default at runtime before mounting.
Boosters: add / remove / rebalance
- Remove: delete the
BoosterDeffrom the game's spec. - Add: append a
BoosterDefand handle its key in the game's booster handler. - Grant:
BoosterManager.Add(gameId, key, count).
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
- Create
Assets/MiniGameTemplates/Runtime/Puzzles4/MyGame/. - Add
MyGameGame.csimplementingIMiniGame, decorated with[MiniGame("…", "My Game", Category = MiniGameCategory.Puzzles4)]. - Add
MyGameSettings(optional) with a staticDefaultgetter. - Add the spec files —
MyGameBoosterSpec,MyGameAchievementSpec,MyGameReskinSpec,MyGameTutorialSpec— all auto-discovered. - 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. puzzles4_water_sort), 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.