How it was made
Why I made it
I'm a big fan of match-three games. I fondly remember lying in bed at my dad's house in the early to mid-2000s, happily playing Bejeweled while I waited for him to come home from work. It was a fun game, and I've liked the genre ever since for being calming and yet oddly engaging.
Recently the match-three fever gripped me once more, and I set about finding some good games. I found older, free titles such as Cradle of Egypt and had a lot of fun with them. But they lacked a certain something for me, and small annoyances got in the way: sound problems (partly, I suspect, because I was running old games on Linux), visual glitches and bugs, and some that wouldn't run at all any more. After hours of trying to get some of them working, I gave up and looked at what the Play Store has to offer.
A great many of those games, if not all of them, are full of adverts unless you pay, even when they are called free-to-play, and I found a lot of them a bit overstimulating. I was shocked to find that there seems to be no open-source match-three game anywhere with the kind of depth I enjoy. I have also been enjoying roguelite and roguelike games immensely, and wanted some of that in a match-three game.
I'm not a programmer, but I know a decent bit about code and have dabbled in game design before. My earlier attempts at games didn't end all that well. The biggest were a text adventure and a nigh-dysfunctional space shooter that I worked on for years. They were fun and taught me a lot about programming, but neither was ever really finished.
Large language models have been everywhere lately. I've been very interested in them, for various reasons, and also quite doubtful: of what they can do, and of depending on them. My goal with this project was simply this: to make a fully moddable, extensible match-three engine that I can make my own games with. I'm planning more games on the same engine, set in Greece, Mesopotamia, Mesoamerica and beyond.
And in the end, it's a small toy project so that I can finally play some match-three on my phone. Below is how I worked on it.
How I worked
The code
Almost all of the code was written by AI coding assistants. For the most part that was Claude (first Sonnet, later Opus). For some of it, I used a Qwen model that I ran locally on my own computer. That doesn't mean I simply let them loose, though! Before anything else, I wrote down a set of rules for them to stick to. Some of them are non-negotiable: the whole game has to be one single file, it may never go online, it can't depend on anything else and a save made with an older version always has to keep working.
My own part in all of this was essentially that of a director. I came up with the game, decided how it should work and how it should be built and then played and tested every single change myself (and there were a lot of them!). In the process, the inside of the game ended up becoming an engine of its own called Tessera, which I'm planning to make my next games with.
The pictures
The pictures were made with AI as well, although perhaps not in the way you'd expect. I didn't use an image generator like Midjourney or Stable Diffusion for any of them. Every picture is an SVG (essentially a drawing made of shapes, so it stays sharp at any size). A few were written by a language model directly, but most of them, for instance the scenery behind each stop, the amulets and the relic icons, are drawn by small Python scripts that a language model wrote for me. I then picked and tweaked every single one. I also wrote down a design language (the colours, the outlines and the style) so that everything looks like it belongs together.
The music and sound
There isn't a single recording in the game. The music and the sound effects are made on the fly while you play, using the browser's own audio engine. The code for that was written by AI too.
What I did choose myself, very carefully, is how each stop sounds: its key, its scale and its lead instrument, which is a harp, a lyre, an oud, a flute or bells. Memphis, Karnak and Abu Simbel are in hijaz and Giza is in the double harmonic scale, which is the sound a lot of people connect with Egypt and the Middle East. Quieter places such as the Faiyum and the Valley of the Kings use gentle pentatonic scales. Amarna, the city of the sun disc, is in a bright lydian mode and Deir el-Bahari is in a plain minor key. The music then follows along with the game: it gets a bit more urgent as your moves run low and brighter as the floor turns to gold.
This part is really important to me because I'm very sensitive to noise. In most match-three games, every match, explosion and cascade fires off a sound of its own, in no particular key, right on top of the music. After a while it all just turns into a mess. So in this game, the sounds of breaking amulets are taken from whichever chord the music is playing at that very moment and a cascade climbs up that chord. That way, everything you do on the board sounds like part of the music instead of fighting with it. (If you'd rather have the plain sounds, you can turn this off in the settings.) The music also sits well below the sound effects and there is no deep, rumbling bass, which small speakers and headphones would only turn into noise anyway.
How I checked it
I didn't want to simply guess whether the game is too hard or too easy. So there are simulators (little robot players, really) that play every stop, every river puzzle and whole journeys hundreds of times over. They then tell me how often they win and how much they earn. They aren't perfect players (if anything, they're a bit worse than people), but they give me semi-reproducible results I can compare from one change to the next.
On top of that, the build checks every content file before it makes anything. If something is wrong, it tells you exactly what. A small script compares the colours of all the amulets in every look, so that no two of them are too hard to tell apart. And after every change to the code, a quick automatic play-through runs on a computer screen and on a phone screen to catch any errors before a player does.
See for yourself
All of it is open. The code is on GitHub under the GPL, the pictures are public domain (CC0) and the manual explains how everything works, including the principles the whole game is built on. If you have any questions about how something was made, or you'd like to make your own version, just send me an email at dev@amuletsofanubis.com. I'd love to hear from you!