Snarky's
LOADING
Click / tap + dragSwap a gem with its neighborTap the on-screen buttonStart / restart
puzzle#match-3#puzzle#gems#casual#godot#kenney

Swap, match, cascade. 20 moves to the top of the board.

A classic match-3 puzzle: drag a gem into a neighbor to swap them and line up 3 or more of the same kind. Matches cascade for combo bonuses, and you've got 20 swaps to rack up the highest score you can before the board closes out. Made by Kenney as an open-source Godot starter kit with CC0 art.

0 plays0 players0 remixesPublished 2d ago
Open source

Made by Kenney (kenney.nl). Released under the MIT (code), CC0 (assets) license — original source.

Changes for this platform: Switched the renderer from Forward+ to Compatibility (gl_compatibility, GL Compatibility feature tag) so it runs in browsers; exported with Godot 4.6.3 as a single-threaded web build (thread_support=false) using the platform's standard web export preset; the engine runtime is served from the platform's shared /engine/godot/4.6.3/ instead of being bundled; replaced the default HTML shell with a launcher that shows a loading backdrop and calls ArcadeSDK.ready(). Fixed the background TextureRect, which was pinned at a fixed 1280x720 top-left offset, to anchor to the full rect with stretch_mode=KEEP_ASPECT_COVERED so it covers the viewport at any aspect ratio (incl. 390x844 mobile) instead of leaving black gaps. Scaled the board container down (board_scale=0.6 on top of the kit's own 68px tile offset) and recomputed the centering math so the full 8x8 grid fits on a 390px-wide phone viewport with margin. Added, in scripts/main.gd: a title/playing/game-over state machine; a score counter (+10 per matched gem, multiplied by cascade/combo depth) shown on a HUD and reported via a guarded SDK.score(n); a 20-swap move budget (decremented only on swaps that produce a match) shown on the HUD, ending the run via a guarded SDK.gameOver({score, won:false}) and SDK.submitScore(n) when it reaches zero; a title screen and a game-over overlay (both built at runtime from Control/Label/Button nodes, no .tscn edits) with a Tap-to-Play / Tap-to-Restart button that also responds to keyboard Enter/Space via focus; a restart path that frees the board and fully resets score/moves/state; and best-score persistence through the guarded ArcadeSDK.storage.get/set pattern (key "match3-best-score"), shown as "Best: n" on both the HUD and the title/game-over screens. All of this mirrors the exact JavaScriptBridge guard style used in the City Builder port's scripts/builder.gd. Core match-3 gameplay (swap/match/cascade/collapse/refill logic, sprites, sounds, cursors) is unchanged from Kenney's kit.

Comments 0

Log in to comment.

  • Loading…