Prototyping Snake Shapes

Snake Shapes prototype app icon

I don’t know that I have ever written a blog post about a game I’ve prototyped before. I mean, of course I prototype every game, but I don’t often talk about games that are in the early phase of development. In this case, I spent a non-trivial amount of time working on a game with the WIP title “Snake Shapes” in December 2021. I don’t think I’m going to spend any more time on it unless I have some big epiphany or something. I don’t know how many games I’ve worked on where I abandon them like this, but there have been a few over the years, I just don’t think I’ve done very much, if anything, to document one of them before.

First, what is Snake Shapes?

The original idea came from an entry in my game design journal on October 15th. Around the end of November, I knew I was going to have most of December to spend on some new game idea, and “Snake Shapes” was just one of many ideas that were competing for my attention. It wasn’t actually what I considered “the best idea”, but it was one that I thought would be “quick and easy” to prototype using a new written-in-swift version of my Generic Game Model (GGM) library.

Anyway, the idea for the game was a turn-based version of Snake, where you try and form shapes (initially just squares) with your tail. This evolved during development a bit to have less emphasis on the actual shapes created. I was going to have a pop-up every time you created a shape, saying how many of that shape you’d created, and giving extra points for shapes that hadn’t been created before. I did not implement that aspect. Every time the snake moves there is something new that gets added to the gameboard. The first 8 are fixed pickups of only two colors, but they are randomized after that, and every 4th thing added is a “wall” square that you cannot move into or through. The game as it is currently is just to get the highest score by eating things and making shapes with your tail until you run out of room to move.

I did spend a bit of time trying to brainstorm different names for the game. I might use the terms “Snake Shapes” and “Square Snake” interchangeably, because I’ve called the project both things, and frequently mix them up. I did also try to entice my 11 year old (who is getting quite good at making art in Procreate) to make artwork for the game, but without any luck.

At some point I had and latched onto an idea that each shape created would boost a counter for “number of power-ups” for a given type of collectible on the gameboard. I thought these would be fixed, one per type, but then I couldn’t decide what all the power-ups should do, so I decided to ask the player which one they’d like after each new square color. I implemented 6 power-ups in total, (which only took 3 days or so, including the popup, which took almost a whole day itself). They are:

  • sort your tail by color
  • remove half the walls on the board
  • convert half the pickups on the board to a random color
  • remove half the pickups on the board
  • clear out a 5×5 grid around your snake head
  • push every wall 1 square away from your current position

Unfortunately, one of the power-ups breaks the game by allowing the player to continue to play indefinitely. Can you guess which one?

Updates to Generic Game Model

I have written a bit a few times about Generic Game Model, but I’m especially proud of a talk I gave about the library to the MN Cocoaheads in 2014. That original version of the library was written in Objective-C, and for at least a year or so, I’ve been working periodically on a new version written in Swift.

Because I haven’t really had a specific project to use it on, I’ve mostly been trying out different things as the mood/whim strikes. For instance, at one point I really wanted it to be a swift package, and you can find a version of it on GitHub that kind of works, but I ran into so many problems using it that way (specifically for Square Snakes development, and while the package is “in flux” so to speak) that I just copied all the files in the project. (I still need to copy the files back out of the project into my package again, as there have been a ton of changes and improvements.)

Another thing I spent extensive time working on was deciding how much to embrace SwiftUI for this iteration of GGM. There’s another repository on Github where I decided to ONLY use SwiftUI, and I abandoned that idea too, after numerous headaches. I think I might know enough now to give that version another go, but I have some concerns (possibly unfounded) about performance, particularly in regards to animation. (SwiftUI does have animatable properties, including offsets and frames, but it was unclear how complex animations would be possible, and animations weren’t the only place I was seeing performance issues, but they may have been my fault entirely.)

What did I really accomplish here?

What am I proud of about working on this game? It’s not really the game idea, frankly. I proved it out, but sadly, I think it’s more fun to play without the power-ups. That said, there are a lot of different directions I could take it, and it could be that it just needs some tweaking in one direction or another to be fun. At this time, I just don’t think I’m going to spend the time necessary to figure that out.

Mostly, the tech was fun to build, and I’ll list some aspects of that here:

  • SwiftUI – It was surprisingly quick to build out new screens with SwiftUI. I used it to build essentially everything outside of the game grid itself, including a bunch of tutorial screens, and a popup that asks you to choose which power-up you want to associate with the color of square you just made. I’m not sure it would work in a “real” app, but I was pretty happy with the structure of the State object that controls all of what is displayed in the Application.
  • Xcode Cloud Build – This was one of the last things I did on the project, but it’s a fun one. It was only a day or so of work to set up the project so that when I push to the GitHub repository, Xcode Cloud will create a new TestFlight build for me using the new changes. It’s kind of amazing that, as a solo-indie developer, I can get continuous integration working on a project in an afternoon.
  • A-star pathfinding – This was actually something that came out of doing Advent of Code (adventofcode.com) in December as opposed to the Square Snake project, but if I hadn’t been working on the project, I am certain I wouldn’t have been as excited about the pathfinding problem. I essentially followed the A-Star tutorial over at Red Blob Games, and had it working in only a few hours. I didn’t really have a use for it in Snake Shapes, but did the work to integrate it with my library anyway, and that work paid off a few days later when I implemented the “push every wall 1 square away” power-up. I didn’t use the A-star itself, but used the PriorityQueue struct that was part of the code written for it.

What could I have done better or differently

This wouldn’t be a good retrospective if I didn’t think about what I could have done differently on this project. To be honest, even though I’m abandoning development, I’m fairly happy with how it turned out. Not happy enough with the game itself that I want to spend any more time on it, but happy with the things I learned and my progress toward making my GGM-swift library a usable tool for native iOS game development. I felt pretty “focused”, and even though what I was building meandered around a bit, I’m pretty happy with how on-task I stayed and the personal growth as a result of the project.

Here’s a few (minor) regrets:

  • I would like to have spent more time on the Tetronimo aspect of the game. As previously mentioned, at some point I decided it would be “too easy” to make shapes other than squares in your tail, and abandoned that aspect of the game idea. That meant I could be exceedingly lazy with the code to detect “shapes” in your tail, and allowed me to abandon one of the aspects of the game I was looking forward to developing. (I have several Unity prototypes that do Tetronimo shape detection, and I was kind of looking forward to porting that code to GGM.)
  • Also previously mentioned, I abandoned SwiftUI for drawing the game squares themselves. Because the library relies on UIKit for this aspect, it means it’s limited to iOS. If I really embraced SwiftUI, it would support iOS, MacOS, tvOS, and possibly watchOS. This is an area I’d still like to spend more time experimenting.
  • I had a TODO in the project to flush out the tutorial views in the app with examples. I didn’t do it because it felt like “work” (in a way that working on the game itself didn’t), but also because I wasn’t sure if I was going to change to using images for the game states themselves at some point, and that might have necessitated re-work. Anyway, the tutorial as it exists now is pretty much the worst kind of tutorial in that it’s just a bunch of text you have to read.

Demo

Demo time. Here’s a video of a couple of play-throughs of the last version of the game, so you can get a sense of it.

Blither Heuristic Notes

Note: If you haven’t already, you’ll probably want to read my original blog post introducing Blither before you dive into this one.

What’s a heuristic?!?

I promised to write up some “strategy notes” for Blither, but then yesterday I read this excellent article by David Ploog about Abstract Strategy game Heuristics, and had the revelation that most of the advice I’d already written would not actually be in the realm of strategy. Ploog lists 4 types of Heuristics: Evaluations, Strategies, Tactics, and Patterns. To quote:

  1.  Evaluations: Assessing a position, locally and globally.
  2.  Strategies: Global methods and formulation of subgoals.
  3.  Tactics: Local methods, generally small scale and short term.      
  4.  Patterns: Specially denoted moves or structures on the board.

I think most of the advice in this article falls into the category of Evaluations. How to read the board, and what to look for that might be an advantage to you while playing. (Possibly some of it will drift into the realm of Tactical decisions.)

Caveats

It’s a new game still, so I can’t promise these are all anything more than tips for beginners. It is also certainly possible that someday this post will only serve to prove how terrible I am at playing my own games.

It’s worth noting that I haven’t played that many games of Blither, although probably more than anyone else at this point. (A few dozen at most.) It’s also possible that some of the tips here are circumstantial, and don’t apply in situations that I haven’t considered yet.

More than anything, I hope this post will give you a sense of what a person could be thinking about while playing the game, and whether that appeals to you. To that end, I’ve also included an example game at the end of this post, and I’ve attempted to annotate it with my reasoning for each move.

Tip1: Try to maximize your liberties

In Blither, you capture opponent’s groups by surrounding them, so you want to be sure to leave your pieces with the maximum amount of empty spaces, or liberties, around them. As with Go, I’m certain that higher-level play will involve some amount of counting empty spaces around your pieces. Fortunately, the small board means the numbers are never very large, and it’s not the counting that is difficult, but anticipating what your opponent will do.

Designer note: Initially, Blither was designed with a hex6 board. Only a few games were play tested on that size board. It just felt like hex4 let you get to the “meat” of the game faster.

Blither, liberties illustrated

Tip 2: Move into the center early

Corner spaces only have 3 liberties. Edge spaces only have 4. But a space in the middle of the board has the potential for 6 different empty spaces around it. For this reason, you should only play on the edges of the board when it’s giving you a strategic advantage to do so. (Or at the end of the game when there aren’t any other options.) Leaving a piece in the corner is even more dangerous.

Tip 3: Pieces are stronger in larger groups

Because your own pieces also remove a liberty, it only makes senes to play next to your own pieces when they are of the same type, which does increase liberties for the entire group. But unlike most games with surrounding capture, in Blither, you can actually move away from surrounding pieces. Ideally, strive to maintain any group connections when doing this, however.

Tip 4: Try to position pieces next to open spaces of their own type

The reason for this is one of the things that (I think) makes Blither interesting. It is possible to move a piece onto its own type, and either 1) place the resulting new piece back on the original space, or 2) place the new piece elsewhere, thus migrating the piece that moved. Because, the original piece is now on a matching space, it has no immediate movement opportunities to another matching space, but the newly placed piece, assuming it was placed next to that original piece does have that potential. Toward the end of the game, there’s often a period where you wish you could move onto a specific shape, but you just don’t have that potential. Keep in mind what shapes your opponent wants to place as well, and try to deprive them of those types of move.

Tip 5: Your pieces types that have been captured are now safe

I don’t meant that those types can’t be captured again, but rather, if they are, your opponent is no closer to winning the game as a result. This means moves that were previously too risky are now a little more acceptable. The previous tip about keeping your pieces in a single large group can safely be ignored.

An Example Game

As promised, here’s an entire game, illustrated and annotated. This took way more time than I intended, and I got a little rushed at the end. Please let me know if you see any incorrect moves or if anything is unclear.

Thrive is out for iOS, Android is still forthcoming

Update: Thrive is live now in both the iOS AND Android app stores.

First the good news – Thrive, the digital version, has been released for iOS. It’s available now, and you can find it in the iOS App Store.

https://apps.apple.com/us/app/thrive-board-game/id1528236222

You can also find it by searching for my name “Martin Grider”, or “Thrive Board Game”. (If you search for “Thrive”, you won’t find it, maybe it’ll start showing up in search results after some folks have bought it, who knows.)

I would very much appreciate your purchases and reviews!

Now the bad news: I thought I was prepared and ready to release the Android version simultaneously on the Google Play Store. This was going to be my first simultaneous app store release EVER, and I was very excited to make it happen.

Sadly, I ran into unforeseen issues, and all I was able to make live is the store page itself. You can wishlist it there, and hopefully it’ll be live in the next week or so:

https://play.google.com/store/apps/details?id=com.AbstractPuzzle.Thrive

Back to the good stuff: This release features a full interactive tutorial for learning the game, 3D graphics that I hope are close to the actual physical product, and the ability to play two-players on the same device. Probably most importantly, it also includes an AI player to play against. But my favorite feature that made it into this release is that it also has the “variable setup cards” from Pond Life, so you can very quickly and easily jump into a game with different setups and peg layouts.

I hope you enjoy it!

Blinks 3D Printed “simulator”

I’ve previously only mentioned once on this blog (in passing) that I spent some time a couple of years back working on a prototype for the Blinks game system (https://move38.com/). I backed the first Blinks Kickstarter, and was very excited to make games for the platform when I received my development kit.

I worked the most on a game called Takeover (https://github.com/mgrider/takeover), which I’ll admit doesn’t take advantage of the real-time possibilities that Blinks as a platform affords. It uses the digital aspect for a sort of rules enforcement, but the game is more or less a traditional board game, gussied up in fancy LED clothes. It’s got fairly simple rules that you can read on the Github page linked above (in the README.md file that is automatically displayed on that page). Although since I’ve made a physical prototype, (more about that in a second) I’ve been experimenting with different rules variations.

Takeover was well-received at the events where I showed it off, but much like demoing VR, it’s hard to gauge whether that reception was for the game I’d developed, or the medium in which it was presented. In contrast, Takeover had a rather lackluster reception on the Blinks forums, so I sort of soured on making another game for Blinks. Or probably more accurately, I just didn’t have another idea that compelled me to spend the time it would take to code it for the platform. (It’s also worth noting that all of this happened before I got the final retail version of Blinks in my hands, and by the time that did occur, I hadn’t worked on anything Blinks related in several months.)

Fast forward about a year, and it occurred to me that, precisely because Takeover doesn’t use the Blinks platform to its fullest advantage, it would be entirely possible to play it with only physical components. This of course led to the question of what those components would look like.

I landed on 3D printing hexagonal trays with “slots” for 1 cm cubes to sit in. Because I think there’s a chance other game designers have these 1 cm cubes laying around, and they might also have access to a 3D printer, I’ll also make the .obj file available for download.

Click this image to download the corresponding .obj file.

To use this, you’ll obviously want to print a bunch of them. I think there are lots of possibilities for these above and beyond “simulating” blinks games. If you come up with something cool, please let me know!

Thrive – IGDA Twin Cities talk

Last night I gave a talk (on twitch.tv/igdatc, as all of our IGDATC talks have been for the last 6 months) about Thrive. It was basically a retrospective on the design and development of Thrive as a physical board game as well as a bit of a preview of Thrive as a digital board game app. You can watch the talk on YouTube already, but I’m also embedding the slides here for posterity.

Incidentally, I am now distributing the Thrive app on TestFlight, so if you see this and want to play it on your iPhone, let me know, and I’ll send you a link!

Spiel 2019

This year I attended my first ever Essen Spiel, the world’s largest board game convention.

Bucket list item: Check.

I came back with this pile of games

…as you can see, they are mostly (but not all) abstract strategy games. And for the most part (with a couple of notable exceptions) they are games that I am unlikely to see in a store here in the states. I haven’t played them all yet, but I have made a dent, and I’ve quite enjoyed Control V, Nova Luna, Hetrix and Stackers so far. My family played a game of Miyabi, and my wife even declared she approved of the purchase!

I was demoing and exhibiting with Adam’s Apple Games, who had, months ago, during the kickstarter, hoped to have Thrive there for sale, but alas, there have been manufacturing delays, and it now looks like it’ll be next March (probably at the earliest) before we see the final production copies. You can see me here standing next to the 3D printed prototypes that we’ve been showing around for the last year or so.

Spiel is more like a trade show (they refer to it as an expo) than most of the other board game related events I’ve been to. Comparing it to Gen Con in particular is interesting, because at Essen there are really no “events” at all. Some exhibitors might post a list of events they are having in their booth, (signings or tournaments most likely), but the convention itself has no designated spaces for events, and doesn’t post a schedule. At Gen Con the expo hall is maybe 1/4th of the designated convention center space, and probably 1/2 of the total space is purely for events. (Many of which are ticketed and cost additional money.) Another difference is that most people expect to actually play games in the exhibitor booths. So most booths, even the smallest ones, have a demo table (or a dozen!), and folks sit down at them mostly to play entire games. Although many of the larger games at the bigger publisher booths (but not all) were just shorter-length demos, which is usually what you get to do, (if anything!), on the show floor at Gen Con. But of course Gen Con has all that additional space for events, most of which are just scheduled times to play specific games.

A lot of people attend Spiel, this year nearly three times as many as attended Gen Con. (If Wikipedia’s numbers are correct, 209k vs 70k.) But for that, it never felt significantly more crowded than Gen Con to me. Yes, there is more physical space, certainly, but I think another factor could be that more folks attend Spiel on day passes than Gen Con, and so you have fewer people at any given time. Certainly Saturday and Sunday did feel very crowded, but I saw very little shoulder-to-shoulder, wall-of-humans that is common walking the expo floor at Gen Con.

You don’t see stuff like this at Gen Con.

You can’t throw a stick without hitting a designer. Not thinking of the attendees so much, but as I walked around the convention, the folks staffing the booths were quite often the game designers themselves. This was definitely not as true in the larger booths, but the smaller ones it felt very common for the designers to be present, and if there was only one person staffing the booth, I’d guess it was 50/50 whether that person also designed a game being shown.

It was super multicultural. There were definitely publishers there from all over the world. I personally met folks from Australia, Korea, China, Spain, the UK, Ireland, and of course Germany. But as large as it was, not all the US publishers were there. I can only speculate why, but certainly some of them don’t think a cost/benefit analysis holds up, but I also think it’s just plain impossible to go to all the events all the time. I’m fairly certain you could find a board game event somewhere in the world to go to every weekend, if you tried hard enough.

I’m definitely glad I went, and I would do it again. I really enjoyed wandering around the show floor and seeing all the new games.

Thrive is on Kickstarter!

So Thrive is a game I designed during my game-idea-a-day project, way back in 2016! It’s a two-player abstract strategy game (which should surprise nobody), and the big innovation is that you augment the way the pieces move as you are playing the game. A little over a year ago it was picked up by Adam’s Apple Games, and just NOW, TODAY, it’s on Kickstarter.

This is my first ever board game getting a print run of any size. I’ve been extremely grateful to Adam for taking me along on this ride, keeping me in the loop on many of the decisions along the way, and allowing me to be such a part of this project.

Protospiel MN 2019

Last weekend was Protospiel MN. After how much fun I had at the Madison protospiel (was it just a month ago!?!?), my expectations for this one may have got away from me. I ended up spending quite a bit of time in the last few weeks prepping new prototypes. Here’s what I brought and tested:

Adam Rehberg and I both brought copies of Thrive in various states of quality. It was interesting to compare his 3D printed pieces to my own. (We are using a new model courtesy of local artist Colin Cody-Waters, and his printer does a better job with it than mine.) At this point, we are more in marketing mode than actual play testing, but we did have some new things to playtest.

Worth noting that there will be a kickstarter for Thrive at the end of February, or beginning of March, and at least in part to collect email addresses for that kickstarter, there is a Thrive print-and-play contest going on right now over at Adam’s Apple Games.

I managed to get a new “pyramid tile laying / fitting / stacking game” to the table several times. The tiles are (some of them) glued together in 1/4th overlapping shapes and patterns. (This is harder to describe than I realized.) I’ll include a photo of one of the end-game pyramids below, but you can’t really get a sense from the photo which tiles are actually glued together and which are singletons. The idea is that you use the singletons as currency to pay for the larger tiles. One of the last parts left to design was how to score the game, (though I had plenty of ideas), and I got lots of useful feedback on those ideas, as well as plenty of other helpful suggestions from my play testers. One of the games we ended up calculating scores for each player in 4 different ways. None of them fully met my criteria for how I wanted the scoring to incentivize building up rather than out, so I still have some thinking still to do on this one.

Oh Tetrominoes! – just the blocks – I made a version of this game by gluing 1-inch cubes together (pictured below). It was easy to get to the table, because it just looks and feels really nice, I think. Adam gave me some great feedback about wanting a “qwirkle moment”. And someone suggested having blocking pieces. Next time I play it I want to try where only the three polygons score, and the spaces marked X are blockers. Notably, the game board (with score track) was the first and only thing I’ve ever created in Illustrator, only about an hour of work.

Windrose – I did playtest this again at the convention. There were some new ideas thrown around. I sort of thought this was “done”, but the conversation left me bristling with ideas. I sort of feel like most of them would result in a different game entirely, but that’s not necessarily a bad thing.

I did also bring my Blinks dev kit, which was running my game Takeover. I only actually brought it out on Saturday night, after the main convention hall was closed for the evening. Immediately after we played it, we played Oh Tetrominoes!, and someone paid me the compliment (paraphrased) “You’ve shown me both the most sophisticated (technically), and least sophisticated (physical components) games that I’ve seen this weekend.”

Other highlights:
– My standout game for the convention was a numbers-heavy (but not at all otherwise heavy) strategy game by Patrick Yang. He’s calling it Mathemagical, which is a great name, and I really liked the game.
– I got to play a tetromino stacking prototype called Lots. It was light and quite fun.
– My daughter attended with me on Sunday, and she ended up spending at least an hour (maybe two) prototyping a game in collaboration with another little girl who was there. I think they both really had fun, and there were even some neat ideas they came up with together.

Protospiel Madison 2018

This was my first time at this particular Protospiel. I do think the space was bigger than the MN one, but only by a factor of maybe 1.5x or 2x. I heard tell it was actually more space this year than previous years, but I have no idea if that was true. I also heard there was less of a publisher presence this time around. The only ones I saw, were Adam Rehberg from Adam’s Apple Games, (who I traveled over with), and the GameCrafter (if you count them as a publisher). Of course others may have been there incognito. (Or just less obviously.)

Adam (who is publishing my game Thrive) and I set up Thrive as a blind playtest on one of the back tables. This was the first time it had been shown with (some of) the new artwork, and we got a lot of praise for it. (I’ll post a photo.) I did feel bad briefly on Saturday when it was especially packed for taking up the space, but there was almost always someone playing it, and I had so much positive feedback, both about the game itself, and about doing a blind playtest at Protospiel (which several folks said they’d never seen before), that the feeling was easily allayed. We got good feedback on the rules, and added about 15-20 names/emails to our signup sheet to let folks know about the kickstarter when it happens. (Incidentally, we talked about a date for the kickstarter on the car ride home, and we are currently aiming to have it now in March.)

My personal goal was to get more games of my two current favorite designs in, and I got both on the table several times. The first, (with working title Oh Tetrominoes!), was played 3 times to completion, and only actually broke on the 4th play through. While it mostly felt like it works mechanically, I think the consensus was that it’s a bit fiddly, and not especially fun. It’s a mashup of three or four game ideas I had that all feature tetrominoes, and while they are integrated well (I got compliments on this!), they still feel weirdly disjointed, and one of them really feels like the core of the game (which I reluctantly agree with). After the last (failed) gameplay, one of the playtesters actually convinced the rest of the table (including me, but I didn’t need much convincing) to play a game of just that main core mechanic, without the other features. That went really well, and I’m definitely going to pivot the game a bit. (I mean really, I think it’s basically done, but I suppose I should playtest it a few more times to be sure. I’ll probably try and re-use the other mechanisms in a different game… someday.)

I felt like my other game, Windrose, had each playtest go better than the last. My goal for that one had been to play it with 4 players. as It had previously only been tested with two. I got in 2 more 2-player games, 3 4-player games, and one 3-player game (in that order). It really felt like it worked just fine with 3 and 4 players, although after the first 4-player game, we added a rule that changed strategies quite a bit without making the game feel all that different. I do think I prefer it with the new rule. Otherwise, the game didn’t actually need any tweaking, which feels kind of amazing to me. It’s another super simple abstract strategy game, and creating one of those that plays 4-players is really exciting to me. (Probably not something any publisher is going to be interested in, but you never know!)

Other highlights for me include:
– Playing a couple of new-to-me Adam’s Apple Games prototypes.
– A game played with “kite and dart” Penrose Tiles, which really looked cool.
– Seeing, (but sadly not actually playing) Cartographers: A Role Player Tale, which looked like a contender for my favorite take on the emerging “Flip and Fill” genre that is hot right now.
– Having dinner with Nick Bentley, who I have been acquainted with for some time, (I turned his game Catchup into an iOS app a few years ago), but until this trip might not have actually called a friend. We had such great conversations at dinner on Friday that we resolved to do it again on Saturday, and then I managed to convince him to play a couple of games late into Saturday night.

There were way more games that I was interested in trying out than I actually got to sit down and play. I did play a lot of games though, and I hope I gave some good feedback. I’d say the ratio of playing my own games to others’ was probably 40/60. All in all, definitely a great event for me. I’d recommend it, and definitely hope to do it again.