It's my first Downpour game! A complete and thrilling eSports experience, for two players. Works nicely on mobile so you can TTT on the go.
⭕️ Version with nice fonts: https://possibilityspace.org/downpour/ttt/
❌ And it's on itch.io: https://illomens.itch.io/tic-tac-toe-simulator
This is sort of an April Fool except a) it's very serious and real and b) the prank part only makes sense if you've made games with Downpour. Below the fold is a bit of background on how I made it.
Tic
So if you've not used Downpour before, I recommend going and playing Where's Madeline, which genuinely is my game of the year so far, closely followed by Terry's Downpours. Downpour is an app for making games/stories/websites, and it runs on your phone and is super quick to use. It's almost as quick and snappy as making an Instagram story - you can take photos during the day and stitch them together to make a slideshow or branching story or something. It's super fun.
There's a sort of always-shifting community of people who like doing weird things with technology, and I love them all. Some of them made Twitterbots, some of them joined PROCJAM, some of them generated novels, some of them are in the demoscene, or livecoding, or... actually a lot of them are on Cohost. Many of them I've not met yet. V, the creator of Downpour, is absolutely one of those people and constantly makes tools and technology to help people experience that joy for themselves, like Cheap Bots Done Quick and, now, Downpour. One of the things this group of people likes doing more than anything else is using tools in ways they weren't really supposed to be used.
So I got thinking, Downpour games are 'just' websites, right? And websites are text. And we can generate text pretty easily. In fact, if you look at the source code for a Downpour game you'll see it's very pleasantly easy to read and there's no funny security stuff or complicated encodings or obfuscation. So you could quite easily™️ write a script that generated all the bones of a Downpour game and glued them together. You could make a game that's way too complicated to make by hand, but still using all the essential Downpour pieces. That's a fun idea I thought, and then I stopped thinking about it and went on with my life.

Tac
The reason I didn't immediately make this is because if you think about making a game this way, you quickly realise that this would be unbelievably complex. My initial thought was, for some reason, Sudoku. It felt quite simple: you'd generate a 9x9 grid, and then let players enter numbers. But making a game this way means you need to generate a lot of states, because you're kind of undoing the entire purpose of computers. One of the most useful things a computer game can do is show a player a state that is a slight variation of another state. You don't need to draw any art assets to move Mario one pixel to the right, you just change a number that affects where Mario is drawn and it all gets done dynamically. But to generate a Downpour game, we have to pre-compute every single state we might ever want to show the player, because every potential screen of the game needs its own page.
For Sudoku, let's walk through what that would mean. Let's say we start with 9 squares filled in, so 72 squares remain. For each of the 72 squares you would need to be able to tap on a screen to see a choice of nine numbers to put in. Then for the next square you have nine choices, then the next square, then the next. That sounds a bit like it might be 72^9, which is around 50,000,000,000,000,000 states, but it's actually worse than that, because the player might decide to start in the bottom right corner instead, or the top right, or they might just spiral in clockwise or whatever. There'd be so many states to generate it would be impossible to contain them.
You could make some design choices to constrain things - for example, you could not allow wrong choices, which cuts the options down considerably. You could also add a lot more starting numbers filled in, which makes the game easier but at least allows you to potentiall make it tractable. But it didn't feel like it would be close enough to the original game to have the joke land. So I threw out my ideas and thought of something even simpler, hence, Noughts and Crosses.

Toe
Even Tic Tac Toe was pretty bad, because I decided I didn't want to eliminate rotational symmetry as it would look too weird to the player. I ended up with around 5,500 states - the index.html file is 18mb of text. I eventually chose to generate the full boards as images and overlay invisible clickable tiles on top of them. I could have not done this and generated the board from tiles, which would reduce the asset load down to just three images (the assets folder has 45mb of board images in currently) but this would have added a lot more text to the index.html and I decided I preferred this tradeoff, especially as Downpour only loads images as it needs them.
I decided I wanted to add a bit of flair in too, so I wrote a text generator to create little commentary notes. As I generated each individual page, I added some commentary with a particular % chance at the bottom of the page. The only catch here is that because I'm generating each board in such an unusual way, it's quite hard to figure out how often to show the player text. A particular Tic Tac Toe board might be way more likely to be seen by players than another one; in a normal videogame you'd have logic deciding what to show players when. This kind of logic also stops you from accidentally showing the player the same message twice, which we also can't easily do here because states are reachable in multiple ways and it would be a huge task to chart every path through the game. Instead I opted to have a small % chance to add commentary to any board, and then on particular turns it always shows certain patterns. The historical fact generator always triggers on Turn 6, which is my favourite bit.
This was a super fun project that made me think a lot about state spaces, game design and generative experiences. This is a procedural experience but it's also entirely static - it's baked forever, and some text patterns might not (certainly aren't, in fact) have been generated at all. But you have no way of telling, because no matter how many times you play it, it's always the same.
Thanks for reading and playing! I highly recommend taking Downpour out in the spring sunshine if you're in the northern hemisphere and having a play.
