Turing Complete is a game built by Ansell Maximilian for the June Solstice Game Jam, themed around Alan Turing and the idea of progress. You play as Turing, repairing the Bombe to stop the Enigma machine, using a Turing Machine mechanic where combinations of tapes unlock buildings, areas and upgrades. It was Ansell's first Phaser game, and arguably the first game he had ever built.

What Is Turing Complete? A Phaser Game About Progress

The core loop centres on fixing the Bombe, located at the northwest end of the map, to stop the Enigma from wreaking havoc. Progress is gated behind combinations of tapes (blank, 0, or 1) placed into the Turing Machine, starting with 1 slot and eventually unlocking 3, which is required to reach the ending. Two side quests round out the game: collecting 18 blank tapes scattered around the map, and battling Data Monsters in a custom minigame themed around the Turing Machine itself, where the player drags tape symbols into incoming cells to influence a moving read head instead of choosing attacks directly.

The Interview

From Zero Phaser Experience to a Finished Jam Game

Q: Turing Complete was your very first Phaser game, built during a jam. What made you choose Phaser for your first attempt?

Multiple sources I queried suggested it for the vision I had. I wanted the aesthetic to look like Stardew Valley. Some mechanics were also inspired by it: building, entering buildings. Phaser had seemed to have everything I needed to realize my vision.
Especially the tiles thing. Phaser.Tilemaps.Tilemap was my hero in this journey. Could not have done it without it. Zero percent.
For example, for the base building idea I had, I used Tilemap.putTilesAt. I also used removeTilesAt for the bridge fixing sequence. Again zero chance I would've finished in time without this class.

"Phaser.Tilemaps.Tilemap was my hero in this journey. Could not have done it without it. Zero percent."

Q: You went from zero Phaser experience to base-building, story, battle sequences and a custom minigame. How did you manage that scope during a jam?

The funny thing is my scope was so much bigger at the beginning, and then I realized how in over my head I was. I wanted to make a Raft-like game which, like Turing Complete, centered around the Turing Machine: Mobile, infinitely expandable base perhaps floating a sea of data.
This was a good compromise. However, it was still tough. I couldn't reliably delegate completely to coding agents. I had to learn Phaser concepts, establish my desired systems, and once clear enough patterns emerged, I used Codex to expand them: base building, the battle system, etc.
I was surprised how well Codex knew to use Phaser though. So it definitely helped me survive the time crunch.

"I had to learn Phaser concepts, establish my desired systems, and once clear enough patterns emerged, I used Codex to expand them... I was surprised how well Codex knew to use Phaser though."

Designing an Original Battle System and Mastering Tilemaps

Q: The battle system is genuinely original. Where did that idea come from, and how did you implement it in Phaser?

The battle logic was mostly JavaScript logic. Since that's what it is at its core, a logical sequence. It could've been made purely with just text. However, I needed the player engaged. That's where Phaser's drag and drop system really helped make it smooth. It gives players the needed feedback to make them feel part of the battle. I had used it elsewhere in the game prior, so I knew I could utilize it here.

Q: Tilemaps were your biggest learning curve. Was there a specific moment when everything finally clicked? And what would you tell a first-time dev approaching them?

Just spending my time on Tiled and getting more and more comfortable with how to use it. I think the moment it clicked was when I switched from my naive method of collision detection to an infinitely better one.
At first I genuinely just set a custom collision property to tiles I wanted the player to not hover over, e.g. water, buildings, etc. This was good enough, however it had a lot of unexpected problems: "What if I wanted this tile somewhere else and not have collision?". Also it was just a lot of work selecting tiles and assigning them properties.
And then I decided to just create a layer called "Collision", paint freely with any tile where I want my collision to be. Then over at my Phaser code, I simply did Phaser.Tilemaps.TilemapLayerBase.setCollisionByExclusion([-1]) to basically have all tiles painted in that layer "collidable". Then I simply setVisible(false) on that layer. Easy.

"I decided to just create a layer called 'Collision', paint freely with any tile where I want my collision to be... setCollisionByExclusion([-1])... Easy."

Scope, Theme and What Surprised Him About Phaser

Q: You mentioned going overboard with mechanics. At what point during the jam did you realize the scope was bigger than expected, and how did you handle that?

I had that realization multiple times. Once when I was brainstorming the idea, like I mentioned before. And another basically throughout the rest of development. I had a lot more planned beyond broken bridges and unlocking doors. Perhaps destroyed houses that could be restored and invite NPCs in and make the city more lively. Perhaps decorating rooms with shelves and chairs dynamically.
Realization came pretty quickly that I would not be able to implement all of that when I realized I didn't even have an endgame yet. So I decided to cut my losses and focus on deliverable features and an end state.

"Realization came pretty quickly that I would not be able to implement all of that... So I decided to cut my losses and focus on deliverable features and an end state."

Q: Alan Turing is the focal point of the game. How did that theme shape the mechanics?

The Turing Machine. I knew I wanted to somehow incorporate that into the game. Even if just conceptually. As you can see, the center of progress is the Turing Machine. It takes resources (tapes) and turns it into things you use to get closer to the endgame.
And of course the battle. Going in I knew I had to make something unique and having that constraint of having to incorporate the Turing Machine helped me get in the mindset.

Q: What surprised you most about Phaser once you started building?

Honestly not much. I had heard good things. But I do want to mention the Scene system. Love it. I come from React so the lifecycle thing clicked really quickly.
start vs. switch. Scene states. All very intuitive.

"The Scene system. Love it. I come from React so the lifecycle thing clicked really quickly. All very intuitive."

Q: Knowing what you know now, what would you do differently?

The first thing I would do is probably redo the whole map. A lot of it looks the way it does because I wasn't familiar with techniques and best practices on making tilemaps, especially making singular things in layer to separate what's in front of the players and what's behind.
That completely went over my head for a long time. How I could make the top part of a building on a different layer. So I kinda drew a big part of the tilemap without knowing that. And as a result there's a noticeable amount of dead space.

Q: What's next for you, and would you use Phaser again?

Absolutely. Feels good being familiar with a tool. At least compared to the beginning. Phaser has a lot of convenience built into it that's very transferable to other types of game genres. I know people use Phaser a lot for making platformers.
And the Scene system is just genius. Helped a lot with my game, since it needs to switch context a couple of times while passing data.

"Phaser has a lot of convenience built into it that's very transferable to other types of game genres... And the Scene system is just genius."

Play Turing Complete

This was Ansell Maximilian's first ever Phaser game, built solo during a jam. Thanks to him for breaking down what he learned along the way. The Bombe needs fixing, the Enigma is waiting, and the full source, tilemaps and nine slice technique included, is on GitHub if you want to see how it all came together 📠

Play Now