|Released on 2023-04-11|
|Made by Mac Vogelsang & Matt Sephton|
Sparrow Solitaire takes the classic tile-matching puzzle game mahjong solitaire, and reimagines it from the ground-up for Playdate. With simple rules and plenty of customizable options, the game is accessible to both new players and veterans of the genre.
The game is available on Catalog and itch.io for $10. There is also a free demo available on the itch site.
The game has a ton of features so this wiki page serves as a full user guide that goes into detail on each area beyond what is included in the in-game manual.
The gameplay is simple yet relaxing tile-matching: compare it to the level of a jigsaw puzzle but with a bit more strategic depth. The goal is easy: remove all the tiles by matching pairs of two. Tiles with the same face design will always match, yet there are a few tiles that have different faces and still match. These belong to the "seasons" and "flowers" suits, and are denoted in the game with black and white corner dots. (custom tilesets may use a different theme, but the suit names come from the traditional tileset).
The two most common variants of the game are "classic" and "shisen-sho". These variants change the requirements for a tile to be removed.
To remove a tile, it must be free: it needs empty space on the left or right, and no tile can be sitting on top. Matching pairs anywhere on the board can be selected and cleared if they are both free.
Sometimes called "Four Rivers" or "Rivers", this variant is a bit more complicated. The two matching tiles must be able to be connected by up to three horizontal or vertical lines which pass through only empty spaces. Both tiles must be on the same layer, but otherwise can be anywhere in the layout. Adjacent matching tiles can also be removed, as a single line passing through no other tiles connects them.
Since the algorithm to determine valid moves is more expensive in Shisen-sho, certain features of the game are currently not available in this mode. Deals are not guaranteed to be solvable, there is no auto-clear function when all tiles are free, and only one hint is available after each match (unlike Classic, you can't crank to cycle through hints).
About the Tiles
A Mahjong set contains 144 tiles, with 42 unique faces (also called suits). 34 of those faces match with each other as expected, and in the traditional tileset: 4 are "seasons" that match with each other, and 4 are "flowers" that match with each other. Since the seasons and flowers have different face designs but still match with each other, we added black and white dots to the top right corner to help distinguish these tiles across various tileset designs. More information on the traditional tile set can be found here.
Sparrow Solitaire layouts are always dealt in a way that ensures each face will appear four times (this is not always the case in other mahjong solitaire games). This is important to the strategy so you can better keep track of which faces/suits have all four tiles remaining, or which may have only two. In Shisen-sho layouts, each layer is treated as an independent deal. In other words, each layer will have 4 copies of every face, and a face that appears on one layer will not appear on others. As tiles not on the same layer cannot match with each other in Shisen-sho, each layer is effectively an independent matching game.
- D-pad to move the cursor (see cursor options below). Hold a direction down to move quickly.
- A to select a tile, click again to deselect the same tile. You can also press A while holding a direction to "charge" the cursor and select the next available tile.
- B to deselect last tile (or toggle zoom - see options). You can also press B while holding a direction on the D-pad to snap to a free tile in that direction.
- Crank to cycle between free tiles (or zoom or undo/redo - see options)
- Hold B and for a sub-menu that houses hint, undo, redo, and reset functions. Press one of the four directions to activate that function. Reset requires a long press on the Down button.
- Shake the Playdate up to once per game to shuffle all tiles and get out of a tricky situation.
Hold B and then press up to see a hint. The hint flashes two or more matching tiles that are able to be cleared. While tiles are flashing, you may use the crank to cycle to a different hint of matching tiles (if any exist). In shisen-sho, only one hint is shown regardless of how many other matches may be available. This is to balance the loading time needed to calculate extra valid moves.
A few important things about hints:
- A hint only shows an available move, not necessarily the best move. Use at your own discretion!
- Each unique hint seen deducts 150 points from your score! You can view the same hint multiple times without additional penalty.
- Using "undo" counts as a hint since you can use it to peak at tiles underneath, and will also deduct 150 points, unless that move is immediately "redone".
Sparrow Solitaire features a robust stat tracking system that tracks your scores and times per layout and also provides aggregate stats across all layouts.
View a summary of the current layout's stats by pressing the system menu during a layout, or view a more detailed page by pressing B on a layout in the layout select. The detailed view tracks your top 5 scores, your best clear time, average score, average clear time, score history over attempts, and your average score in the last 5 plays. It also shows overall winrate and playtime on the layout.
To see your All-time Stats across all layouts, open the pause menu while on the Layout Select. Your favorite layout is the one with the most plays, and the the top win rate layout is the one with the highest win rate with at least 3 plays.
How a Play Session Works
A session is created on every new tile deal, or a reset of the current layout. The creation of a new session automatically ends the previous one, regardless of if you reached the game-end banner screen or not. The timer begins only when the deal is completely finished and the cursor is shown. The timer pauses when any in-game menu is opened. If you exit the game mid-session, your progress is saved and the timer is paused.
When a session ends (either via a new deal or reset), stats for that session will be recorded unless one of the following conditions is true:
- It's a two player game (two player games only record P1 and P2 wins on the scoreboard)
- You have not cleared any tiles (feel free to reset a layout multiple times for better deals before starting!)
The scoring system was designed in a way that is roughly normalized between different layouts. Scores tend to be in the 1000-2500 range, with 3000+ being an exceptional result. The two biggest factors in your score are clear percent and time.
Tiles Cleared Component
For every 1% of the layout cleared, you earn 10 points up to 1000 max. If you win the layout by clearing all tiles, you get an additional 500 point clear bonus.
The time component is more complex. Each layout has an internally calculated "target time" based solely on the size of the layout (number of tiles). The formula for target time given layout size is shown as a graph below: it is an S-shaped polynomial with a linear component at 40 tiles and below. We chose this function because layouts under 70 or so tiles are pretty quick to clear, but as number of tiles increases, the amount of time it takes exponentially increases. After a certain point, the curve flattens out (for example, 132 tile layouts aren't that much quicker than 144). Shisen-sho layouts have separate target times for each layer, as the layers are considered independent layouts. All the layer times are added together to get a singular target time.
Given the target time, the time component of your score is: <target time>/<actual time> * <clear percent> * 1000. The goal of this function is to award 1000 points for meeting the target time exactly, and more if it is exceed. <target time>/<actual time> gives the degree to which the time exceeded or fell short of the target: if you were twice as fast, you get a 2x multiplier, but if you took twice as long, you get a 0.5x multiplier. The 1000 base points are further multiplied by the clear percent, as the target time is based on the time to clear a full layout, and not a portion of it.
Although the target time is an internal value, you can get a rough estimate of how close you were to it by how close the time component of your score is to 1000 (assuming you completed the layout). If you hit 1000 or higher, you were right on target!
150 points are deduced from the score for each hint or undo used. Undo penalties are negated if you change your mind and use redo immediately after, and each hint seen is uniquely tracked so you can view the same hint multiple times without additional penalty.
Mahjong solitaire is a simple and relaxing game, but still has some depth. The level of strategy can be thought of as somewhere between a jigsaw puzzle and a nonogram game. Since each tile face has four copies, there are multiple ways you can select pairs (assuming all are free). For example, if three of the same face are free, you can select A/B, B/C, or A/C. Carefully consider which pair to remove; keeping in mind which tiles may be unblocked by each tile, and how many copies of each face are remaining.
- If all four faces remain (true for every face at the start of a new deal), try to prioritize tiles that unblock more tiles.
- If all four faces remain but they are all free, you can remove all of them safely without worry
- If only two faces remain it always safe to remove both of them.
Often you will end up in a situation where multiple pairs are free but are not blocking anything else. Try to save these straggling tiles for the end. If they don't block anything, there's no rush to remove them and holding B to auto-clear remaining free tiles at the end of a layout can save time!
Shake to Shuffle
The wrong move can make a layout un-winnable, but the "shake to shuffle all faces" feature is always there as a last-resort option. There's some strategy involved in deciding when to use this function: use it too early and you risk giving the layout an impossible configuration. Use it too late, and there might not be enough free tiles for the random shuffle to help unblock you. While you can still shake-to-shuffle on the game over screen if you haven't used it already, knowing when to use it early can be the difference maker in it helping solve the layout!
Shisen-sho plays very differently and even small layouts can take a while to solve. Most Shisen-sho layouts are a single layer, meaning you can see every tile face position ahead of time. There's a lot of potential for working backwards and looking ahead. Try to identify pairs that must be matched with each other in advance, even before you are able to match them. Without looking ahead, you may discover that you've created an impossible situation a while after you've actually made the move that created that situation.
Note: By default, Classic layouts are dealt in a way that guarantees a solution (the guarantee is lost if shake-to-shuffle is used mid-way through a layout). This is not the case for Shisen-sho, as the calculation time would be too high to pre-solve the layout. However, randomly-dealt Shisen-sho layouts tend to be solvable more often than not (with the exception of a few challenging layouts like Question Block). The shake-to-shuffle is extra helpful for those tough layouts!
The Layout Select is a powerful menu designed to make it easy to find one of the 200+ layouts to play. Of course it supports scrolling up and down with the D-pad or Crank, but you what you may not know:
- Press Right to jump to the next category
- Press Left to jump to the top of the current category. If already at the top, jumps to the previous category.
- Hold Left to jump to the top of the list (overview section).
- Hold Right to jump to the bottom of the list (user layouts).
The Overview section at the top of the list has options for random layouts, daily, 2P mode, and sorting. Layout sorting is always done within category, but the setting is preserved across game loads and the index is automatically updated when new plays are tracked. Each non-User layout category within the level select also displays a small pie graph, to visualize completion percentage in that category. Try to fill the whole pie by winning each layout!
If a layout is selected, a thumbnail along with a few summary stats are shown. High score, plays, number of tiles, and an icon for "Classic" or "Shisen-sho" if it's a user layout. You can Press B for more detailed stats.
Aside from the standard solitaire gameplay, you can also play a 2P challenge or attempt the Daily Layout each day.
Every layout can be played in two player: toggle it on at the top of the Layout Select. Two player sessions are not preserved if the game is reloaded (but any progress on the layout will remain as usual).
- Players take turns clearing pairs.
- A player will randomly be chosen as start player, and they take the first turn.
- A turn lasts 10 seconds (by default) or until a match is made. If no match is found within the time limit, that player's turn is forfeited.
- The game ends when the layout is solved or there are no more available moves. The player who cleared the most tiles wins! In case of a tie, the player who cleared the tiles the fastest wins.
- In some cases, the game may end without both players getting the same number of turns (i.e. if the game ends in 5 turns, the first player will have gotten an extra turn). In this situation, the tiles removed and time taken on the last turn are subtracted from the player with the extra turn.
Two Player mode feels like a different game, as your goal is to not leave easy matches for your opponent and instead cause them to miss their turns. For this reason, wins, plays, times, and other stats are not recorded in 2P games. Instead, a win counter for P1 and P2 is tracked for each layout as well as overall on the 2P toggle screen.
The time limit on each turn is configurable per player, or can be removed entirely. Press B while selecting the Two player toggle switch to adjust these settings. The overall 2P scoreboard (and also the scoreboard per-layout) can be reset by holding A on this submenu.
Each day, attempt the Daily Layout as many times as you want until you clear it. The exact arrangement of tiles, as well as the layout, is the same for everyone on each attempt. Resetting an in progress session will count as an attempt as long as you have cleared 2 or more tiles. If not, a reset will simply give you the exact same arrangement of faces as before.
After each attempt, a QR code is generated on the Layout Select screen. Scan this code to easily copy or share your score on social media! The web app that displays your scores also assigns a rank. We think 1500-2000 is an average "good" score range. 3000 and higher is exceptional, especially on full 144 tile layouts. We considered using an online leaderboard for this Daily Layout, but there is currently no way to automatically reset a leaderboard every day.
- 0-499: 🗿 rank
- 500-999: 🐸 rank
- 1000-1499: 🐼 rank
- 1500-1999: 🐰 rank
- 2000-2499: 🐯 rank
- 2500-2999: 🐲 rank
- 3000: 🤖 rank
Pressing B on the QR code screen will show a graph of the number of attempts the Daily has taken you over time, as well as two different streaks: play streak (counts consecutive days where you've at least made one attempt) and win streak (counts consecutive "all clears", ignoring the days in between).
Many of the options in the game are self-explanatory or described with tooltips. But there are a few specific settings that we'd like to highlight further here.
You can toggle favorite tilesets, backgrounds, or music tracks by pressing the A button while the option is selected. Favorites are used when randomly picking an option, either with the "Random Theme", shake to randomize, or in the shuffle Autoplay option for music. If no favorites are selected for a particular option, all of the choices are used in the randomizer instead.
Shake the Playdate while the options menu is open to get a random theme! A "theme" is a combination of music, background, and tileset. You can also use the "Randomize Theme" option to automatically get a random theme when selecting a new layout. If you don't want to change all three, you select which of the three theme components are randomized in that setting too. If you have picked some favorite music tracks, tilesets, or backgrounds, only those favorites will be pulled from for a random theme.
The crank has three possible functions in this game. It defaults to cycling between free tiles, which is helpful especially in the "grid" cursor mode. You can also set it to "undo/redo" which behaves as you would expect: crank backwards to undo moves, and crank forwards to redo moves. The "Zoom" option in the ACCESSIBILITY section may override either of the crank functions, if you have "Zoom" set to "with crank".
The cursor has three modes: grid, free tiles, and all tiles. In grid mode (default), the cursor snaps to the grid of the layout, but only snaps to specific tiles if they are nearby. This means you can move the cursor "off the layout" or attempt to select tiles that aren't selectable. This mode is default as it behaves the most like a normal cursor, yet it still has some intelligent logic built in to automatically snap to nearby tiles or wrap around the bounds of the layout.
The other two cursor modes are free tiles or all tiles. These two modes keep the cursor on the layout, and only let it snap between free tiles only, or all tiles (on the top layer). This mode makes navigating gaps in the layout a lot faster, as the cursor follows the tile topography rather than the grid, but the tradeoff is occasional unexpected behaviors in the direction it navigates. For example, pressing up on the D-pad may not always take you straight up, instead it may snap the cursor to a tile that is higher up but offset to the right. In these two modes, the cursor will sometimes jump to a "phantom point" on the grid instead of a tile. This is not a bug, but rather a strategic anchor point that can help navigate to particularly mis-aligned tiles.
For new players, we recommend grid cursor since it has the most expected behavior. However, if you learn the quirks of the other two modes, it can become a lot faster to navigate the layout. For more information on cursor modes, see this blog post.
By default, weather effects will activate for particular songs. Nekoteneru activates rain, Save activates falling petals, and Snow Cherry Blossoms activates snow. These effects can be disabled completely or a particular effect can be turned on permanently.
There are two ways to access the layout editor: At the bottom of the Layout Select and press "Create a new layout" or go to the info screen on any layout and press A to edit a copy of that layout.
- Press A/B (or hold while moving the cursor) to place/delete tiles
- Hold B and press a direction for sub functions:
- UP: Toggle placement of blocks instead of tiles. Blocks can not be removed by any means, so careful not to create impossible layouts!
- Left: Shift the entire layout within the bounds of the screen.
- Down: Trash the current layout (you can quickly exit the editor from the system menu if the layout is blank)
- Right: Toggle how the grid between half positions (default) and full positions. A full position grid may be useful for creating simpler layouts more quickly.
- Shisen-sho: Check box to create the layout in Shisen-sho mode.
- Save as...: Name and save the layout without playing it. You can use this to easily create copies as well.
- Save & Play: Name and save the layout, then immediately play it.
- Play: Only available if layout has been saved already.
- Exit editor: Only available if the layout has no tiles or no changes have been made.
Note: you can delete a layout on the Layout Select info screen by pressing B, then long pressing B once more.
- All layouts must have a number of tiles divisible by four (to ensure an even deal).
- Shisen-sho layouts must have every layer independently divisible by four. You can imagine multi-layered Shisen-sho levels as completely independent puzzles, one for each layer.
- You must have 4 or more tiles to save the layout.
The editor does not check that a layout can be solved, so it is possible to create impossible layouts. Be careful! When you exit the editor and play a classic mode layout the solver will attempt to ensure the deal is solvable. If it takes a long time to load, that's a good sign the layout is either very difficult or impossible (the solver gives up after 5 attempts).
Tips & Tricks
- The position of the cursor when you save a layout is recorded, and that becomes the start position for the cursor each time you play the layout.
- Long horizontal rows of tiles tend to make the layout more difficult (in Classic mode, that is).
- Strategic placement of blocks can create some extra challenging Shisen-sho layouts
- Blocks can be nice for aesthetic purposes, since they always appear as black. Just keep in mind they can still block regular tiles from being removed!
- You can never have more than 144 tiles, but you can have up to 85 blocks that don't count against the number of regular tiles.
You'll have to connect your Playdate to a PC and put it in Data Disk Mode to access your created layouts or to import new ones. Once you've done that, navigate to /PLAYDATE/Data/com.vogelscript.sparrowsolitaire/user_layouts/ to find the .json files for each of your created layouts. You can simply drag and drop new layouts into this folder, eject the disk, and start the game to play the imported layouts!
The game supports the ability to dynamically load backgrounds and tilesets. We plan on releasing free downloadable asset packs, but you can also create your own!
Locating the user data folder
After the game is launched for the first time, a game data folder is automated generated on the device. To find this data folder:
- On the Playdate, hold the buttons Menu + Left + Power to enter data disk mode.
- Connect the Playdate to a computer via USB-C.
- Locate the new drive and go to the `Data` folder
- Find the game's data. It should be a folder with the format com.vogelscript.sparrowsolitaire
Importing / Exporting Custom Layouts
- Within the data folder described above, find the `user_layouts/` directory.
- Simply copy and paste the JSON files for the levels you want to import or export in or out of this folder, then start the game.
- These user layouts are located at the bottom of the layout select list (long press right on the D-pad to jump there)
Loading Custom Tilesets and Backgrounds
This process is a little more complicated since the Playdate SDK can only dynamically load compiled images.
The background can be any 1-bit png with the resolution of **400x240**! Unlike tilesets, it doesn't matter what the filename is.
A tileset contains 42 unique faces (36 standard faces, 4 "flowers", and 4 "seasons"). If you want to adhere to standard mahjong tile suits, you can follow this guide. This takes the form of a Playdate `imagetable`. Download the template image below to get started quickly. Our tileset guidelines are as follows:
- Each tile face must be 15 x 21 pixels.
- The drawn area on each tile face should aim to be around 11 x 13 pixels, though it's OK to be slightly under or over this size. Do not draw on the whole 15 x 21 pixels area. Although 1px of padding is added around each face when rendered on to the background of the tile in-game, the tile faces look best with even more padding.
- Inside the file, each tile should be laid out horizontally without any gaps. Therefore, the whole file should be exactly 630 x 21 pixels big.
- The 4 "flowers" and 4 "seasons" should be the last 8 tiles in the row. We use white and black corner dots to help signify that these faces match each other, but it's not strictly necessary to have these dots.
- The name of the file should be yourTilesetName-table-15-21.png
- See this devlog for thoughts on designing tile sets.
Compiling the assets into the Playdate format
Currently the easiest way to do this is as follows:
- Install the Playdate SDK (specifically you need the `pdc` command found in the `PlaydateSDK/bin/` folder.
- Create a folder and copy in all the assets you want to compile, as standard `.png`.
- Create a blank file named `main.lua`.
- Open a terminal or command prompt window at the folder's location.
- Run `pdc . assets` which creates a `assets.pdx` folder of all the images.
- Open that new `assets.pdx` folder and copy out the backgrounds and tilesets. Backgrounds will have the extension `.pdi` and tilesets will have the extension `.pdt`.
Registering the compiled assets with the game
- Within the game's data folder, find the `user_assets/` directory.
- Paste in your compiled backgrounds and tilesets from the previous section.
- (You can also paste the whole `assets.pdx` inside `user_assets/`, and then refer to files as "assets.pdx/background1" etc)
- Open up `asset-registry.json` in a text editor.
- This file is the index for your custom assets. To be visible in the game, they need to be defined in structure outlined within the file. Only a "name" field is required if the name is the same as the filename (minus the extension). If not, you'll have to specify a filename as well. The filename is relative to the `user_assets/` directory.
- Save your changes to the `asset-registry.json` file, eject the PLAYDATE disk, and launch the game!
- Your new tilesets and backgrounds should be selectable in the options menu
Matt hates these uneven numbers but some people (like Mac) may be interesting in knowing exactly how many things are in the game.
- 16 tile set designs
- 25 backgrounds (50 if you invert each one)
- 11 music tracks
- 210 layouts across 10 categories
- 3 weather effects
- 2 play variants, 4 if you count playing each variant in 2-player mode
- 7 Sparrows
- 41 sound effects, including 6 just for the tile dealing
- Sparrow Solitaire was born on Jan. 10th, 2021. It was created by Matt Sephton who worked on it for about a month to get to the point of proving the visual design and dealing animation with sound effects in a barebones, non-playable prototype. On May 12th, 2022 Matt put out a call for development help, and from there the rest is history.
- The original early access version of Sparrow Solitaire was released on July 13th, 2022. It contained 5 layouts and 1 music track, and only contained core gameplay functionality and options.
- The early access version debuted on TinyTellowMachine's Playdate show, and TinyYellowMachine would later be commissioned to create the trailer for the full version.
- The Chinese word for mahjong uses part of the word for sparrow, as the sound of mahjong tiles rubbing together is said to sound like sparrows chirping. Hence the name for this game, Sparrow Solitaire.
- The Eurasian tree sparrow is the most notable sparrow native to China, but for licensing reasons the game's sound effects are based on the similar sounding House sparrow instead.
- Mahjong solitaire has a rather interesting history of games, the earliest published version being Shanghai released on the Macintosh in 1986. Its Chinese folk origins are debated, and has nothing in common with normal 4-player mahjong aside from a shared set of tiles.
- The game makes limited use of some Japanese Macintosh clip art from 1986/7 by Enzan-Hoshigumi, giving them their first ever video game credit long after they have ceased to exist!
- Also used in the game are a couple of brush/fill patterns from MacPaint, released 1984.
- The dots background pattern was generated by running the Burkes dithering algorithm on a single colour, grey image.
- The typeface used in promotional artwork and in the launch animation is Garamond, the same typeface used by Apple for many years around the time of classic Macintosh, most notably in their "Think different" advertising campaign.
- If you read this whole wiki, you are super awesome!
References to the Playdate Community
Many other Playdate games are referenced either as layouts or tile faces in Sparrow solitaire. Try to find them all! But if you're lazy, here's a complete list:
- Games tileset: Daily Driver, Generations, Castle Helios, A Balanced Brew, Fish'n Feathers, Eyeland, Comet, Bloom, Wastebraver, Pick Pack Pup, Racheteer, Playmaker, ART7, Sketch Share Solve, Pullfrog 2, Tapeworm Disco Puzzle, Life's Too Short, PostHero, HatTrick, Gun Trails, Gravity Express
- Games Layouts: Playtime Weird Clocks, Shift, Pullfrog, Life's Too Short, Mobware Microgrames, Bloom, HatTrick, Generations, Down the Oubliette, Daily Driver, Comet, ART&
- The excellent Hello Playdate Podcast is referenced both with a Pinball layout and Microphone layout.
- The helpful SquidGod game dev youtube channel is referenced with the Squid layout.