Category Archives: Game Apps

Indra’s Net and Theming

(Indra’s Net is available on both the app store and google play.)

Okay, if you’ve played Indra’s Net or seen screenshots you’ll know that it hardly “themed”. They’re squares, they change colors. There aren’t any cute animals or sugary confections to grab the semantic part of your brain, but there is theming nevertheless!

After establishing the core mechanic I wanted a little something extra to make the game more meaningful. Since in the first formulation the player had to turn all of the tiles white in order to progress, I thought that emptiness might be a neat theme, so the game was called Sunyata and featured the text of the Heart Sutra parsed into 14 sections (hence the current 14-level structure). Each time through the sutra would repeat, and the game became a meditation on emptiness for me. I enjoyed this quite a bit but there was something lacking since the relationships of the squares was never addressed.

With Ben’s suggestion I began looking into Cause and Effect as a potential theme and shortly came upon dependent origination, which coincidentally enough is considered complementary to sunyata in Buddhist philosophy. Having found the two ends of what I wanted, I searched further to discover Indra’s Net, which “is a metaphor used to illustrate the concepts of emptiness, dependent origination, and interpenetration in Buddhist philosophy.” The shoe fit.

The heart sutra, however, did not fit anymore. The new metaphor of Indra’s Net was more playful than the austere Sunyata, and after having played the game for a while I discovered that it put me in a playful mood of discovery and wonder. With that feeling in mind I decided to write a brief story about Cause and Effect which Sarah and I rewrote shortly after. The basic premise, if you haven’t played yet, is that Cause and Effect become separated and go about their own journeys to be finally reunited in the end, where they arrive in a different place (and the next season), for the story to repeat as the board grows bigger/features more colors.

This was the story of how from a purely abstract logic puzzle, a game embracing confusion and addressing separation was created. The theme and story help lower the stakes, make it playful, and allow people to get lost without worry. When we’re lost and without assumptions we can finally start to learn brand new things.

Developing Secant

Secant, our latest release, is a minimalist geometric puzzle game (see the trailer below). Today I’d like to share a bit about what it was like to develop it, from inspiration to design to implementation, along with some road bumps and their solutions.

Backstory + inspiration: In machine learning and statistics one type of problem is classification, which is basically what it sounds like. This can be tricky, because data can be noisy or arranged in some strange shape. A particular type of classifier called a support vector machine (SVM) tries to classify data by cutting it up with planes (or, in the 2D case, with straight lines), so that each region has only a single class. We might say the SVM uses hyperplanes as its basis functions, and because of this support vector machines are inherently limited. So the question emerges: what if you allow other shapes? Secant is just that, played in two dimensions only, where you get circles and lines as your basis functions and your job is to separate data points into regions based on their class (color). Or at least, that’s how I originally thought about it.

Crux problem: With SVMs, all you ever have to worry about for each point is whether it is ‘above’ or ‘below’ each plane (or line). Since planes carve up the plane very nicely (notably, into convex regions) you can simply look at two points, P and Q and ask are they above or below each plane. If they match up on all counts, then they must be in the same region. Now, this is still true with circles and lines, but what doesn’t hold is that is that if they do not match up then they must be in different regions. Evie (aka Evdog) came up with the following situation during her first play through the game:


Notice that the green and yellow are in different geometric regions (clearly!) yet they are both inside the big circle, outside the small one, and above the line. Since the game doesn’t see this as a win, it doesn’t allow the player to progress (how sad) until they find a solution that doesn’t use such geometric tricks. Since disallowing geometric tricks would surely make for a worse game, I realised that what Evie had done was most assuredly a valid solution. But the question remained: how to correct it?

Two approaches and a decision: There were two ways to go about it. One was to use a flood fill algorithm (think paint bucket in photoshop) which checks if you paint-bucket from each point you don’t get regions with multiple colors painted on them. This was pretty clear to be a solution, but I thought running it on device was going to be a nightmare (it would involve iterating through all of the pixels onscreen and I didn’t even have access to the pixels and would have to redraw it from scratch). So I kept thinking about it, and came up with an alternate solution based on the original logic of being inside or outside each closed region: compute all intersections as vertices, link them up in a graph (where edges are adjacencies between intersections on a shape), find the cycles, and then check the winding number of each data point with respect to each cycle. This would give all the funky weird regions as loops, and then verify that these loops either did/did not go around each point. The main problem with this: it was going to be even worse than flood fill because, while computationally far simpler (with not too many shapes on the board, mind) it would involve finding all cycles and then computing the winding numbers (which would involve making polygonal proxy shapes for the circles or casting a ray from the data point in question and ‘walking’ the circuit to find a minimal enclosing region). In short: this was not going to be any better than flood fill if I could get flood fill to perform reasonably on device.

Solution -> Aesthetic: I tested out the performance of flood fill which was disheartening at first, read up about coroutines in Lua, and ultimately used a grid that was a quarter of the size in each direction (resulting in a ~16x speedup) which, while a bit crude and not so pure, worked in practice. And a magical thing that popped out of this cruder grid? When you beat a level, it fills it in (at half of that resolution, every 8 pixels, for performance reasons with the display–this ain’t being done with shaders y’all) with circles of the appropriate color to show you the regions that you carved the space into. A nice reward for finishing a level (and something a few people asked about only to discover that it had already been implemented)!


If you like these sorts of things, you might enjoy hearing about new releases by joining the google group.

Iris: Revelations and HQN

A video to start!

Today was an  exciting day for Iris. Previously we’d made the ripples (as you can see here) circular rings which faded as they emanated outward. This was okay, and it served well enough as an indication of where the ripples were, but we weren’t moved. They were just sub-par, and I had tried to address it a few times by using masks to reduce the aliasing, but it just wasn’t quite good enough. They didn’t allow blending, they weren’t very expressive, and they didn’t look all that great. So today I went and completely rewrote how the ripples functioned and went in favor of a representation which would allow some more flexibility. Originally I was trying to put them on a grid and go for a cellular automata style, but quickly found the number of operations to be too cumbersome to be executing every frame1. Screen Shot 2014-02-03 at 4.44.14 PM I quickly took the approach to iterate over theta and position objects (squares initially) around the circle periodically, which results in the image to the right. This was all right, except as they move outward the representation of the circle gets sparser, which can make it a bit difficult to tell where it is. The solution here is to start rotating the squares, so that at each successive radius they’re being offset a little bit. This leads to the following: Screen Shot 2014-02-03 at 4.48.52 PM Not too shabby. I hit a couple of performance blockages when trying to go for finer resolutions and long fading animations, but those were fixed readily enough by basically killing the squares off on the next frame and persisting them in the ghost images taken of the entire ripple group snapshot.  Given that it’s technically feasible to use this style of ripple, I began wondering what we could achieve with it. Here are a few results from some experiments

Screen Shot 2014-02-03 at 4.54.14 PM Screen Shot 2014-02-03 at 4.56.39 PM Screen Shot 2014-02-03 at 4.58.25 PM

First you’ll see first a sinusoidal modulation in size, giving the sensation that the ripple is pulsing along with it’s growth or visualizing a wave traveling away from the source.

Next up we have circles instead of squares, and the rotation here isn’t quite as standard. It actually rotates them at each step proportional to the square of the radius (whereas the previous samples have linear relationships between angular offset and radius).

Finally there’s using random noise to determine the offset, except this noise is very well behaved. In fact, for each circle there’s a random sign that gets chosen (at each frame) of whether to rotate it CW or CCW by an amount linearly proportional to the radius. Thus it has something like a random interleaving of both CW and CCW spins of the red square sample above.

This is just the beginning of what can be done with this new ripple generation. Various blend modes are available now (and can be chosen at will), and the space of positioning is wide open for exploration. Hopefully this development will help give each of the colors something of their own personality, as well as adding to the aesthetic ceiling of the game (with infinite variations). I’m also excited to see it help immerse players in what is happening aesthetically rather than them keeping focused on getting to the next level.

1. Iterating over a grid of any fine enough resolution is fairly intensive–you can instead just check within the frame which is the square of side length 2r minus the inner square of side length 2r/sqrt(2) given that they circumsribe/inscribe the circle, but it can only do so much and there’s still a lot of useless computation

Iris: Persistence is Key

What started out as a simple sketch a few weeks ago has become our full-time efforts at Three Pixel Heart, and will ultimately lead to our first paid release on the app stores. Currently we’re calling it Iris, and it’s an ambient audiovisual puzzle game based on rhythm, spatial reasoning, and (attempts to) feature a wabi-sabi aesthetic.  Here are a couple screenshots, busy and sparse

Screen Shot 2014-01-28 at 5.48.59 PM Screen Shot 2014-01-28 at 2.54.57 PM


The basic mechanic of the game is the player sends out ripples from the enso by tapping, and attempts to fill all squares and triangles with their own color. Additional objects such as color changing circles (featured in the second picture) and amplifiers, as well as different types of movement, add to the complexity of the puzzles. But here I want to talk less about the game itself and more about the creation of it.

Takeaway lessons so far:

  • PERSISTENCE IS KEY. Making a game has ups and downs. Most notably the ups when initially prototyping and realizing something can be fun, downs when getting blocked on technical details or how to expand content (take a break, go for a walk, let your mind off it), and further ups when after making changes you find out they’re improvements by how players enjoy it much more in playtesting. Keep your mental life varied (have other projects, think about different games, keep playing other people’s games) while also putting in substantial work on the current game, and it should pay off.
  • When something confuses players and isn’t meant to, try to change it visually/through audio before adding help text (in Iris that meant changing the goals, which were originally circles, to squares and triangles–it helped a ton! In retrospect making everything circles was idiotic)
  • People like easy puzzles when they are aesthetically rewarding. I have a habit of cutting to the difficult things too quickly and experienced a backlash in the playtesting by watching players get confused. After expanding the difficulty curve out, and even throwing in some extra levels which I thought were trivial and boring, we saw the players enjoy the game more and not get lost when the harder levels came about because they had some time to adjust their minds to the mechanics.
  • Level design is much easier through a physical medium that you can move around to get different senses of what’s possible. Trying to see it all in your head all the time is an extra constraint that should be avoided when attempting to build better levels.
  • Masking objects in corona sdk is terrible (this is a technical point but it’s caused such duress that I feel like including it for anyone who ever uses corona and considers masks–be warned)
  • Listen to playtesters. Keep listening to them even when they tell you things you don’t like.

Thinking of something I didn’t cover? Let me know what I missed!

Iris: day 3

So a few days ago I started development on a new game called Iris. It takes some ideas from Circadia (see last post for a video) and expands the physics. Things we’re learning:

  • refactoring code is awesome (I’ve refactored the same bits several times now and with each pass it becomes easier to implement new functionality)
  • closures are amazing for making programmable objects (e.g. say you have a class that you want to move around, but you wan the movement to be generalizable; pass in a closure that keeps track of the movement and updates the object every time it’s called, and just bind that to the update() in the object. Done! Or even more generally, make a function that makes these closures for some parametrization and being DRY)
  • level design via text is a pain (seriously, we’d be so much faster if we just made a level designer… time to get on that)
  • people can enjoy playing something they don’t even understand! The first couple builds didn’t have any tutorial, and watching people play we saw them delighted by the audio/visual and aesthetic aspects of the game, without even being sure of what they were trying to do.
  • it’s pretty easy to make VERY hard puzzles with fairly few mechanics–the bigger difficulty is in crafting a journey

Screenshots are below, and per usual if you want to get access to pre-release builds join us on Testflight, we love to share!

2014-01-14 Screen Shot 2014-01-14 at 3.10.29 PM

Recap and hello!

It’s been a while since the last post here, but oh how we’ve been busy at Three Pixel Heart. Things I’ll touch on in order here are 1) progress on Block Party, 2) status of our live apps, and 3) new games for the new year.

1. Block Party
We’ve continued production on Block Party, researching manufacturing methods such as screen printing and stamping, but we’ve been pretty disappointed about something: manufacturing domestically (in the USA) is really expensive. The lowest bid we’ve gotten so far is $18 a set, which is basically what we’ve been selling them for. On the other hand, we have a bid from China at $3.80 a set–far more realistic aside from the fact that we’d need to order at least 8,000 sets, and we don’t have that kind of startup capital. Kickstarter comes to mind, but we’re going to look into manufacturing them ourselves a bit more first because we’d love to make it locally. Our current trajectory there is to make some stamps via laser cutter so that we can do one side of an entire set per stamp, 6 stamps total. This would lead to a potentially very fast production process, though the quality and price of inks (and the images they produce) is something we have yet to determine.

2. Live Apps
It’s been over a month now since we launched Unique and Party Rush to the app store, and we’ve been, while not overwhelmed, at least pleasantly surprised with the response to Unique. Party Rush is a much harder game (most people who play it have physical Block Party sets) and so hasn’t gotten a very wide audience. With a couple hundred downloads of Unique though we’ve become convinced that it’s a concept worth pursuing further, and the uniform feedback across the board is that it’s just too damn hard. Who has the patience to play over and over to the point of being able to remember 49 snowflakes (other than yours truly, who felt compelled just because he felt somebody had to beat it)? So we’re scaling down, adding a level system, downloadable content, and all new images to produce Unique: Things! Be on the lookout for it in the next month. We hope it will be a memory puzzler which will keep you engaged for hours on end, learning how to remember and classify whole sets of things you never thought you would. Of course, we’ll start with something more doable, so be prepared to play with famous portrait paintings!

3. New Games
Here is where I am REALLY EXCITED! Did you get that? I mean REALLY excited. But why all the excitement, George? It’s just more games. You’ve done some of those, right? Where’s the novelty?
Let me tell YOU where the novelty is. I’ve recently realized that doing things at least once (in a developer context, but you could generalize) makes the set of things I can do expand greatly. In the past few weeks we’ve picked up novelty bonuses for

  • multiplayer on a single device (Finger Disco)
  • unlocking achievements via exploration (Colorfun)
  • google analytics integration (PushButtonGetHappiness)
  • image masking in Corona (Lotus)
  • level system (Unique: Things)
  • one-battery prototype (Iris)

(Facebook integration is also on our list.) If you’re reading this when it’s published, most of those are probably meaningless names. However, they are all new games (except PB;GH, which is more of an interactive art project) which we currently have in development. A few of them are mockups, proof of concept pieces, but they hold the seeds for things to grow. Finger Disco is a two-player game best played on a tablet where players go head to head to dance and contort their fingers. Colorfun is an adventure exploration by way of a synesthetic canvas. PB;GH is linked. Lotus is a sketch of a music playing game. Unique: Things was discussed above. Finally, Iris is a rhythm puzzler with themes similar to the ones in Circadia (video below) but without the really annoying finicky bits, plus COLOR PHYSICS! I do love colors. If you’re interested in betas and have an iOS device, feel free to sign up with us on TestFlight

In the meantime, you can enjoy this trailer brought to you by IGN.

Party Rush: App #2

Get it on the app store
We just submitted Party Rush to the app store for review, and it’s the first addition to the Block Party arcade suite! Its home on the web is at We’re starting with something simple: one mode of gameplay, all solid symbols. The possibilities of where we go from here are endless. Symbols could be erased and drop down or reshuffle, the player could swipe between same shading, color, or shape (changing up the board), or we could add special symbols a la gem-smashing games. Of course, we can also take the board and make the interface one of switching adjacent symbols for that type of play as well.

Have a preference? Give us a shout

Check out the video below for a demo of the gameplay, which is something like a symbolic variant on Boggle.

Our description on the app store:
Party Rush is a game about making parties! Enjoy this arcade puzzler which will stretch your mind and test your wits in a fast-paced high-score environment. Connect the symbols so that any three in a row are all the same or all different for both color and shape independently. Do the same for four in a row to make a party for bonus points!

Unique: our first app!

Get it on the app store

Learning Corona has been lots of fun, especially given how many opportunities it’s making for us to create new ideas quickly. In one of our game brainstorming sessions last week we came up with a game which we’re calling Unique, in which snowflakes fall from the sky and the player tries to collect as many as possible without ever catching the same one twice.

Unable to sleep one night for the snowflakes in my brain, I got to coding up a prototype of Unique and the next day we pulled an app-shipping marathon where we created (or took via creative commons) all of the media (background music, sound effects, 50 unique snowflakes, custom font) and put the gameplay together in a polished and finished app. The result is a wonderful and ambient meditative experience which tests your memory, patience, and intuition.

We submitted it to the app store and are waiting for Apple to review it and we’ll follow up here when it goes live!

In the future we’d like to extend the gameplay and add a few more features and we’re thinking of instituting an “app download stretch goal” type system, where if we hit various download milestones we’ll add new features.

In the meantime, enjoy the winter and the snow! (Even if it’s only simulated on your phone because you live in California.)

BP Arcade: On Our Way

heart star glyphsHey there! We’ve been too busy to post in a while (I’ve been working on nanowrimo, Benjamin is making a tiny home by reformatting an airstream) but we’re back at it again. We’ve made new glyphs, the one on the right we’ve dubbed heartstar, made a bunch more blocks, published several videos, and now we’re starting on Block Party Arcade.

What does this mean? Hopefully it means that we’ll be on the app store within a month. Wouldn’t that be neat? More realistically, we’ll submit within a month and be on not too long after that (approval takes a while). It does not mean, however, that we’ll have any games on the web (why? because it’s going to be way better in your hand). So all of those with smartphones, yeah, you, get excited. But I have an android, you say. We’ve got you covered too. Let me describe why.

To develop the games we’re using Corona, which is a cross-platform (ios, android) game development environment in Lua. If you’re an indie developer who wants to make a cross-platform mobile game, this is really the way to do it from what I can tell (unless you want full 3D, which we don’t need–yet). [For anyone reading this who wants to get into game dev, I’d like to help you bring great games into the world. Drop me a line (g at 3pxh) and I can tell you a bit more about our journey with Corona, what we’ve learned, and even give you some sample codebases to start with!]

Long story short? We’ve found a development environment which is allowing us to create things very quickly, for ios and android, and you can expect to see our games live on the app stores in the next couple months.

Want to get the Beta? Drop me a line (g at 3pxh) and you might be able to start playing within the week.