Cirno Math Reflections

This post is about a game I made, which can be found here.

On the 9th of September 2022, coinciding with the year’s Cirno Day, I released Cirno’s Math Class. It’s a short, hopefully somewhat funny shooting game starring the titular Cirno. For this project, I used LÖVE, a Lua framework geared towards creating games. I’m writing this after the fact as a means for reflection, as well as tentatively looking forward into the future.

Why make this?

I wanted to make a tiny game, and wanted a reason and deadline to enforce myself to complete it. In the Touhou Project community, the 9th of September is celebrated as Cirno Day, roughly one month away from when I started the project. I thought that it was far more than ample time to create something small, with plenty of cushioning in case I run into any issues. With that in mind, I decided to start creating a tiny game for Cirno Day.

Why not ph3/sx/LuaSTG/Danmokou/etc.?

The listed above are engines, frameworks, addons, etc. specifically catered towards the creation of STGs, which is exactly what I’m aiming to create. I’ve even had prior experience using some of these. Surely, using one of these would have been far more efficient- so why did I not do it?

I wanted binaries accessible for more systems The STG tool I had prior experience with, Danmakufu ph3, does not come with a way to package binaries for non-Windows OSes. For someone with a different system to play Danmakufu games, they would need to utilize an emulator (e.g. Wine). However, I wanted people who use macOS and Linux to be able to easily play this game, too! I distribute my games through itch.io, a platform that garners far more specific and niche an audience than something like, say, Steam. I think this would result in a far more tech-savvy on average audience, but I’ve come across users who aren’t, too; users who may not be knowledgeable or comfortable enough to set up such software. I don’t think there’s anything wrong with that- but now that I’ve identified them as an audience, I do want to cater a tiny bit towards them, even if it’s something as small as providing a build that can be easily accessed.

I wanted a web build To expand on the above, I also do want to provide a way to play the game on the browser itself. After all, anyone looking at the page would definitely have a browser. In my personal experience, as well, short games such as this benefit greatly from the convenience of playing in-browser. I was able to achieve this- but unfortunately, not to the extent I was hoping for. I discuss a little more on this topic a bit below.

I had slightly more than a month The scope of this game is tiny. Normally, I would estimate it to be done within three days or so, and I had quite a bit more than that. Should anything go wrong, I would have ample time to fix those issues. Should anything go very wrong, I would still have ample time to jump ship over to one of the STG-specific engines.

I wanted practice with LÖVE Last, but perhaps more importantly, I wanted more practice with LÖVE. I am not particularly flush with experience, regardless of whichever tool I chose- however, I do plan on using LÖVE as my game creation tool of choice, at least for the forseeable future. Using it for projects should increase my familiarity, and hopefully benefit me further down the line. Furthermore, the code I write for this project can even be reused for future games requiring similar mechanics.

What happened with the web build?

If you tried to play the web build on a browser that is not Google Chrome, you might’ve found that it would refuse to work. I’m not quite sure why this was the case- from what I can tell, this specific error should have been quashed quite some time ago, and that it only happens on non-Chrome browsers (not even Chromium) confuses me even more. It might be an issue with the specific implementation I was using, or itch, or- most logically- a user error on my part.

love.js came with something called “Compatibility Mode”. This is an option that outputs a build that, as the name might suggest, improves compatibility- in fact, this build works flawlessly on the browsers I was able to test. It came with one tradeoff, however- the BGM would no longer play, even on Google Chrome. I thought the music was quite essential to the experience, and so I did not go down this route.

I still have no idea what went wrong. Maybe I can figure it out for future releases, but for now, this will have to do.

What did I learn?

The lessons I take away have mostly come in the form of taking things for granted.

Compared to the engines I’ve had experience with prior, LÖVE is a framework- where I would normally expect a toolbox to be, I instead find an organized pile various tools and an empty box, inviting me to assemble one to fit my needs. It is more time consuming, of course, and I stumble here and there, but I walk away from the experience feeling more knowledgeable about the things I tackled. Collisions, cameras, and classes are a large part of this.

What next?

In regards to this project, I think I’ve actually collated enough logic (if only barely) for a bullet hell game- perhaps I have a potential STG library in my hands? I will have to see if I ever would do that, but it’s a possibly interesting project.

Otherwise, I plan on continuing to create games. Game jams interest me quite a bit, and I’ve got a few ideas on my backlog that I can tackle next. If the results are good enough, I might even put them up on itch.

That’s all from me. I’m just writing down my thoughts on a silly little project, but if you’re reading this, thank you for your time. I hope you got something out of it, even if it’s just a small bit of enjoyment.