Category Archives: Thoughts and Opinions

Flash’s Cool Advantages

Hey, since people have been talking a lot about Flash lately, and I’ve spent a lot of time defending the tech, I thought I’d write a bit about what advantages Flash has over other game engines. I’ve been using Flash for 23 years, so hopefully I’m qualified to say some nice things about it.

First of all, I gotta explain a few things for people who may not know:

Adobe Animate, formerly known as Adobe Flash Pro, is the software used to create Flash content. It’s used to make art, animations, and code. (but for bigger projects a specialised IDE will usually be used for coding)
• Flash content is exported as .swf files. On some platforms the .swf needs to be packaged inside a native executable, like .exe or .apk.
Flashplayer, AIR, and Ruffle (and others) run the Flash content, with various levels of compatibility and native features on each platform. Flash content can be as simple as animated gifs, or as complicated as entire games.

When Flash was announced as “dead” years ago, the only thing that stopped working was Flashplayer in web browsers. When developers say “Flash” it can refer to any part of the process mentioned above.

Anyway, with that out of the way, here’s some cool perks that Flash has for game development:

Vector Art Aesthetic

Flash is built around using vector art to display graphics. Vector art doesn’t have pixels like bitmaps do – it’s just math formulas describing lines and shapes. This makes Flash games look unique from other game engines.

If you have a good eye for aesthetics, you can usually see when art was made in Flash, and even which exact drawing tools were used. Adobe Illustrator is another application used for making vector art, but it specialises in exact, technical-looking drawings, where as Flash has more painting-like tools and feels more hand-drawn and sketchy. So Flash looks distinct from other vector art applications too.

There’s also game developers who make their art and animations in Flash, but use them in a different game engine. Some prominent examples are Among Us, Friday Night Funkin’, Mewgenics, Super Meat Boy, Castle Crashers, andBurrito Bison. This is probably the best way of using Flash if you want the aesthetic and the advantages of vector art, but want a more modern game engine that’s better suited to modern platforms. (but it’s more work than doing everything in Flash, like me!)


Small Filesize

Vector art leads to very small file sizes, as bitmaps are usually what make up a huge portion of a game’s filesize. This used to be a huge consideration when Flash was being used for web applications during an era when internet speeds were slow. But today a small filesize is still useful, especially on mobile platforms where there’s a limit on the initial download size of your app, and users will often uninstall apps to save space on their device.

For example, Epic Battle Fantasy 5 is only a 150mb download on Android – and that’s an RPG with 50 hours of content!

Resolution Independent

Vector art means that a developer or animator doesn’t need to consider the resolution of their art assets. In other engines, different asset sizes might need to be prepared for different device types, creating more work. The same vector art assets in Flash look sharp at any resolution, and this is especially useful in Matt’s Hidden Cats, as the game makes use of zooming in and out very far. Some other 2D hidden-object games with traditional bitmap graphics will show blurry or pixelated sprites when the player zooms in fully.


Everything in one App

Flash can be used to quickly prototype games and test out new features – all art, animation, and coding can be done in one application. The way the asset system works – “symbols” in a library – makes it super simple to re-use, nest, and replace assets as needed, and to move them between projects.

Code can be included on the animation timeline – and while it’s not ideal to rely on this for complicated features in huge projects, it’s a very helpful way to quickly add some functionality in a specific area. Especially when it involves enhancing animation in some way – by adding some random variation, changing skins on a character, or calling functions when an animation reaches a specific point.

Sounds can be edited to an extent – they can be cropped, faded, pan from one speaker to the other, and loop in various ways. This is incredibly helpful when syncing sound effects to animations.

And Flash is accessible to all skill levels. An animator with almost no coding knowledge can still add simple interactivity to their animations. A coder with no drawing skills can easily create primitive placeholder graphics while they test their code.

So unless you’re working on a particularly large project, chances are you can do everything you need in just Adobe Animate/Flash.


Cross Platform

When compiling Flash projects, a developer can immediately install and test their projects on a mobile device via a USB cable – both Android and iOS. Some developers were surprised that I could compile and install an iOS app from a Windows PC. (I still had to buy a Mac to submit apps to the App Store, though)

Flash does a good job at handling inputs across various devices. If I make a game for Windows that’s intended to be played with a mouse, that game can also be played with a stylus or finger if played on a mobile device, without any extra code being written. I once tested my PC game Bullet Heaven 2 on my phone – and it could even handle an Xbox controller connected via USB, just as it did on Windows!

In my experience, my Windows Flash games also seem to work perfectly fine in Linux with Proton, which is another little bonus.

There’s not been much news about console support, but that mostly comes down to there not being enough resources to justify it. HARMAN has suggested they could get Flash running on Nintendo Switch if there was enough demand for it. Ruffle already kinda works, from what I’ve heard.

But for my needs, PC and mobile platforms are enough to reach most gamers, and getting those working is fairly efficient.

Easy to Decompile

This may not be an advantage to everyone, but in my experience, this has been very helpful. Flash files can easily be decompiled and edited by various tools, and this is useful when it comes to modding in new content or cheats, making unofficial translations, and preserving old projects by modifying the parts that no longer work (like trying to access a web service that no longer exists).

In the past, Chinese websites would translate my games and remove advertisements and links (without permission), which was moderately annoying at the time. But in the long term, this turned out great for me, as I now have a big paying audience in China who grew up playing modified versions of my web games.

And in one case, a long time ago, a project file I was working on was corrupted, and the only way I got my data back was by decompiling a .swf file.

I think it’s quite cool that the .swf format is open and anyone can play around with your creations if they want to. My games on Steam use a .exe launcher to open a separate .swf file, specifically so that players can easily access and edit that file. And cool mods exist thanks to that!

Limited Scope

Once again, some people may not see this as an advantage. But flash being a 2D vector-art-based animation tool, means that it’s not good at realistic graphics and cutting-edge special effects. But for me personally (as someone who does all the art and programming in a project), this helps keep the scope of my games in check. I’m not tempted to go overboard with the amount of details in my art. It’s easier to arrive at a style that’s cartoonishly appealing, but not too time consuming to create. More effort goes into making the characters iconic, colorful and expressive, rather than detailed and realistic. (And I think you’ll have noticed that with the notable indie games mentioned earlier)

And this also applies to the coding side too. Flash code isn’t the most optimised, but it’s good enough for most indie games with cartoonish graphics. Limitations help you stay focused on what matters in your game, and can lead to some creative solutions and design choices. For example: this is why maps in my Epic Battle Fantasy games will forever be broken up into screen-sized sections, but have a ton of secrets and details crammed into a small footprint, to make up for that.

Flash Doesn’t Change

Flash has been around for a very long time, and hasn’t received any particularly important features in over 10 years. This means that all of your old projects will still work as they did, and there usually won’t be any surprises when updating your tools or porting to other platforms. I still regularly re-use code and art I made a decade ago.

Most of the ongoing updates to Flash are only on the runtime side – for example keeping up with changes required by Android, like apps switching to 64bits and using .aab files instead of .apk files for installation. The creation tools and file format have barely changed in a long time.

But this is coming from the perspective of someone who doesn’t update Adobe Animate every year – maybe if you regularly updated, you saw some issues – but I’ve never felt the need to do that. My experience will become more common now that Adobe has announced they won’t add new features any more.

Flash is Vintage

And finally, making modern games with vintage technology is just cool. People are still making new games for the NES and Game Boy. Making Flash games in 2026 feels a bit like that. A lot of gamers have nostalgia for the golden age of internet content. Developers and gamers don’t care about the tech’s limitations, as long as the process is interesting and care is put into the creations.



Well, that’s the article. Feel free to correct anything I’ve gotten wrong, or to add anything I’ve missed. Maybe later I can write a similar blog about all the bad things about Flash…

Flash was Killed Again (for a day)

Hey, a few days ago, Adobe announced by email that they would discontinue Animate (their animation software, formerly called Flash). They’d stop distributing it to new customers almost right away, and cut off access for existing customers after a year. This announcement was very sudden, vague, and disrespectful.

No one took this news well and most people said that they would just pirate the software anyway. So a day later, after a lot of public backlash and Adobe’s stock price taking a big hit, an Adobe senior announced that they would not discontinue the software after all, but they would stop updating it. So basically you’re still required to pay for a subscription while getting no ongoing service. So that’s pretty shitty, but for a lot of professionals, at least that means they don’t have to change their workflow for a few more years.

None of this directly affects me – I use Flash 2015 – and the only thing I need updates for is AIR, which is the fancy Flashplayer for Desktop, Android, and iOS. AIR is maintained by HARMAN now (a Samsung company), and they intend to keep it supported indefinitely. BUT if this news scares off a lot of Animate users, the Flash ecosystem will get smaller, and it’ll probably make my life harder in the long term as the community gets smaller.

A lot of people are talking about making a free-and-open-source (FOSS) alternative to Animate, that can create .swf files. Users love what Animate can do, but it’s very outdated – it’s full of bugs, doesn’t make good use of modern hardware, and worst of all, you have to pay a subscription to a company that doesn’t care about you in the slightest. Adobe’s customer service is non-existent – if you want a bug fixed, or have a feature request… too bad.

Meanwhile, HARMAN has been very active in fixing issues with AIR/Flashplayer. Features that Adobe neglected for a decade were being fixed overnight when users asked (like stage quality options not being present in Desktop AIR). I was thrilled at the thought of Adobe abandoning Animate – maybe they would hand it over to another company, or if not, then there would be a gap in the market for new tools to be developed that can create .swf files. Adobe announcing that they’re continuing to sell Animate is the most boring outcome. It just maintains the status quo that no one was particularly happy about, except now trust is even lower than before, and there’s never going to be any new features.

What people want from Adobe is for them to open-source the software, but that’s never going to happen. They don’t even want to hand it over to another company, because it’s too integrated into the Creative Cloud ecosystem.

Another thing they could do would be to offer a reasonably-priced option to buy the software outright, and no longer make it a subscription. I’d go for that, and I’m sure many other professionals would too.

Anyway, I hope those efforts to make a FOSS alternative gain some traction. There’s a lot of successful animation studios and game devs that would be interested in funding it, just to get away from Adobe.

Why is Matt’s Hidden Cats Taking so Long?

Hey everyone!

I’m realising it’s been around 3 years since I started working on Matt’s Hidden Cats – which is how long the original version of Epic Battle Fantasy 5 took to make, and that’s my best game by far!
So you may be wondering why a seemingly simpler project is taking so long…?

Well, I also need to answer this for myself to regain some sanity.
So here’s some reasons…



First of all, it’s not the only thing I’ve been working on. In this time I also ported Epic Battle Fantasy 4 to Android and updated the Windows version (sorry, iOS fans). I’ve been supporting the EBF5 modding community and fan-made Chinese translations for my older games. And I’ve been doing general maintenance, promotions, and customer support for my existing games, which are still selling well.

Secondly, I’m not working full time anymore! I have more hobbies now. I’m travelling more. I’m playing more video games. I’m spending more time with friends and family. All of that makes me feel like I’m not being as productive as I used to be, but I certainly am – it’s just that I’m producing personal experiences rather than content for the web. Though there is also a lot of procrastination in there that I could cut out.



In addition to spending less time working on game development, the scope of Matt’s Hidden Cats has also massively increased over time, for a few reasons…

There’s a LOT of hidden object games out there, and while many of them are very short and simple (or otherwise not very good), some of them are fantastic. Hidden Folks, Hidden Through Time, and the upcoming Lost and Found Co are amazing games, and I want to make sure that Matt’s Hidden Cats is at least as good as any of them.

And after seeing the success of EBF5 – a game that is still selling 7 years after its release – I want to continue making games that have long-lasting appeal. I don’t want to make games that go out of fashion or feel outdated eventually. I want Matt’s Hidden Cats to be a game that will still be good, relative to the competition, 10 years from now.

And what that means is that it has to have a TON of content, secrets, lore, and re-playability, as well as being polished and easy to get into for new players.



Another big challenge is that it’s by far the biggest project I’ve worked on from scratch. All my other big projects were sequels to smaller games that already nailed down a lot of the mechanics, and a lot of the code and assets could be reused. In Matt’s Hidden Cats, I’m solving an unusually large number of design problems for the first time, and in some cases I’m re-making mechanics and user interface elements that I wasn’t very happy with. Sometimes I’ll code something that just doesn’t feel good, and never sees the light of day – where as with my older games, it was very rare for me to spend time on cut content.

This also makes technical challenges more difficult, as features that I assumed would be trivial can end up being very complicated, simply because I didn’t have the experience to know that in advance. A big pain for me has been learning about how graphics are transformed – working with transform matrices, how to check if an object is mirrored or not, converting one coordinate space into another, programming motion tweens, etc – it’s all very confusing for me and I don’t have a good intuition for it. But it turned out to be very important for the features that I wanted, like being able to arbitrarily attach objects to other objects in my level editor – so that you can make a horse wear a hat, or stick an arrow in its butt.

Sometimes these challenges are the right level of difficulty and end up being fun, but sometimes it’s nothing but math, which I don’t like at all.

Another example is context-aware hit-boxes. All the interactive objects in the game have pixel-perfect click detection by default, but objects of interest – goals, keys, movable obstacles, etc – have larger hitboxes to make gameplay smoother (especially useful if the game eventually gets a mobile port). This seemingly simple feature requires a lot of logic to make sure that the larger hitboxes are only active at the correct time. A lot of work is going into stuff that most players won’t even notice!

I suppose modern game engines handle some of this kind of stuff for you, but I’m still using Flash.
Oh well… at least I’ll have experience with features that may be useful in future projects, or maybe I’ll just know what to avoid programming again.



Related to the previous section, I wrongly estimated how long content would take to create. I originally assumed that creating graphics assets would be the most time consuming (but also the most fun) part of this project. I thought that once the graphics were done, designing levels would be fairly quick – and in the beginning it was!

But as the number of assets and special interactions in the game grew, the complexity of each level increased. It took longer to pick out the right assets for each level. It took longer to hide objects behind other objects, behind destructible walls, behind movable carts, and so on. All of that required more planning, and as more levels were made, I had the additional task of trying to make sure that each level was distinct from every other level, so as to not feel repetitive.

And the amount of collectables in each level increased! First there was only one set of goals, then there were 3 separate sets of goals for each difficulty setting, then there were gems to find that could be used as currency, and then there were pieces of art to fill out the gallery. So I had to go back and update levels I had made earlier.

I also… probably made too many art assets, and then had to make enough levels to justify their existence. The game is going to be fairly long to complete to 100%, that’s for sure.

No one (sensible) is gonna be complaining that it’s too short.



I originally didn’t want the game to have any story at all – or any human characters – but I figured that would be wasting an opportunity to get the existing EBF fans interested in this project, and also try out some new storytelling techniques.

On Twitter I tested out some mock-up dialogue screenshots featuring the EBF cast, and they were super popular (some of my most popular Tweets ever). So I programmed a dialogue system with very expressive character models and special text formatting, and tested out some dialogue segments in the form of YouTube videos. And that was also received very well, with some of the videos getting over 30,000 views – which is a lot for my little channel, and a lot for indie game promotional videos. And finally, the updated designs of the characters have received a lot of fan-art already.

So it was quickly settled that Matt’s Hidden Cats needed a fun story related to the lore of the EBF universe in order to multiply sales. I’m having fun with it so I’m not complaining, but it’s certainly adding to the development time. I don’t think I’ve mentioned all of it yet, but there’s gonna be some fun interactivity in the cutscenes. You can enter names, branch dialogue based on how you answer questions, and maybe other fun stuff…

And if you’re reading this and still don’t know… the story of Matt’s Hidden Cats is about the EBF crew forming a game development studio, creating this game, and getting you to test it. It’s both a continuation of where the EBF5 story ended, but also an alternative universe where things are somewhat more realistic.

You can interpret it as you like – all the other games’ plots are only loosely connected anyway.



While Matt’s Hidden Cats is a Flash game, it’s being programmed to run in a Flashplayer emulator called Ruffle. Ruffle has plenty of advantages over the traditional player, including performance enhancements that allow the game to handle way more animations at once. But Ruffle is a work-in-progress, so it’s still got some quirks here and there, and using it to publish games for Steam and other platforms is mostly uncharted waters.

I’m keeping a close eye on the Ruffle Discord to see what sort of features people manage to hack together on it, and I’m also contributing by hunting down some bugs occasionally, as well as being a sponsor of Ruffle’s development.

This stuff is important because I hope to also port my older Steam games to Ruffle, so that they run smoother. And if things go well, I’ll continue using it for future games.



In addition to just making an all-round great game, I keep coming up with fun ideas that I want to try out. Stuff that can give the game a bit more depth and re-playability. Stuff that might be fun to code.

This includes unlockable cursors that grant abilities – the pencil can draw, the gun can… do something. These basically amount to minigames that can be played in any level. Totally silly and optional, but could add hours of play time to those who enjoy them.

I also want to add some shader options in order to play around with the art style, but this also adds potential for a user-defined difficulty setting – black and white mode, Game Boy style, pixelated graphics, whatever. This can make the game harder, or interesting to replay. I’m not sure how it will turn out, but I think it’ll be pretty fun if I get it working.

Features like these may also be useful to add to my other games. The ability to draw on the map is something that people wanted in EBF, for example. So now I’ve got the code for that and could potentially copy it over at some point. And the shaders could be great for the retro-themed areas in EBF5.



Anyway, that’s all I’ve got to say.
The game is taking way longer than it was supposed to, but mostly for good reasons.

It’s definitely not a simple project to test out Ruffle any more.

I wanted to launch it by the end of this year, but that’s starting to look unlikely now, and early 2026 seems like a better plan. I’ll grind away at it over the next few months and pull all the pieces together, so you guys will have something to test, and I can collect some feedback.

Oh, and make sure to wishlist the game on Steam so you get notified when a demo or update drops.



My Thoughts on AI so Far

Hey everyone – I’m writing this blog to spill my thoughts about my experience with AI so far.
I’ve been exploring it in various ways recently, but am by no means an expert, so my views are likely to change in the future.


— Programming —

Recently I’ve been noticing that the quality of Google searches has gotten much worse – to the point where finding answers for ActionScript 3 programming questions is nearly impossible. You might say, “Matt, AS3 is an extinct language, there’s not going to be any results.”, but this isn’t right. There are plenty of online resources for the language (such as official docs, forums, textbook snippets, etc) that were previously searchable, and the language is still used and updated to this day (by HARMAN instead of Adobe now). I don’t see these relevant results at the top of Google searches any more! And other programmers have told me that I’m not hallucinating – this is happening for modern languages too. And the news seems to confirm that Google is pivoting to a brave new strategy of intentionally making their results worse so that users spend more time searching and see more ads.

So that’s great.

I’ve never been satisfied with the search results of DuckDuckGo (I do try to use it), so with the death of Google, I’ve instead started asking AI chat bots more questions. And I’ve been surprised by the results. For programming, I’ve mainly been using Grok (since I’m still wasting time on Twitter anyway) and it’s very good at not only producing snippets of code, but also explaining how each step works, and which parts of the code you may want to tweak.

It does occasionally hallucinate things, which betrays its thought process – it seems to be using a lot of examples from similar languages like JavaScript, and translating them into ActionScript 3 – and this means it sometimes includes a reference to a library that doesn’t exist in AS3. Luckily, I’m experienced enough to spot mistakes like this quickly, and Grok will acknowledge the mistakes when called out on them.

So it definitely still pays to be an experienced programmer, but Grok’s outputs are also very informative and can help you learn quickly, assuming you take the time to actually read what it gives you, and don’t just copy and paste mindlessly.

I would describe using Grok as something like, “a search engine that creates personalised results, just for you.” And as the meme goes, a large part of programming work is indeed just using Google to look up syntax and the solutions to common programming and design problems.

But there are other options! I hear some IDEs have AI powered code-completion!
That’s not something I’ve tried out yet, as I don’t really feel I need it, but who knows?

Another thing I’ve tried using AI for is data entry. I asked ChatGPT to write a Python script that would extract all the Chinese strings from an AS3 code file, and list them in a plain text file, so I could easily upload a correctly formatted list of achievement names and descriptions to Steam. In the past I’ve lazily done this manually, but the clever option would have been to learn how to use Python and regular expressions. But nowadays it seems to be enough to know that this solution exists, and a bot will figure it out for me! I still need to phrase the prompt correctly, and quickly double check that the results are correct – but it’s way faster than doing the job manually.

Anyway, it’s my understanding that AI still can’t write complete programs very well, and despite the claims of CEOs, I don’t think it’s going to replace skilled programmers just yet – but it does seem to be replacing Google as a favourite programming tool for experts, and I think it can be a genuinely helpful learning tool too. Especially in the case of niche languages like AS3.


— Art —

Art is more complicated. It’s a totally different game from programming.
In programming, the end users only care about what the program does, and how you accomplish that doesn’t matter in most cases.

But in art, the process matters a lot!
The person you are and the medium you use will have a noticeable impact on the results, down to each brush stroke, and an art appreciator will care about the lore behind the work. So I think if you rely on AI a lot in your creative work, you’re making a lower quality product, and I think it’s fair to say that if you lie about your AI usage, you’re committing some type of fraud.

Having said that, I think it’s morally fine to sell counterfeit products – as long as they’re labelled correctly. For example, Lego is expensive, and if someone wants to buy a Chinese knock-off for 75% cheaper, I think that’s their choice to make, as long as they are not deceived.
In the same way, I find AI-generated content much less offensive when it is labelled as such, but I wouldn’t call it “art”.

Things get murky when you have an artist using AI to assist their work. For example, I know some artists will use AI to generate an image, and then they will paint that image themselves. I personally find that pretty lame, but some people might be okay with that.

In terms of personal experience, I’ve tried generating images occasionally out of curiosity, to see what AI can do. It seems to really struggle to create anything that there isn’t a lot of training data for. I asked various bots to generate a cat with no legs for me, and they couldn’t do it. It also struggles to make very specific changes to an image, like “make sure the cat has the same number of whiskers on both sides of its face”.

So I guess the people who will benefit the most from AI in creative work are the people who were already creating fairly bland and derivative products – where the details and level of innovation don’t matter very much. I think people on the cutting edge – iconic indie game developers and artists – probably won’t be impacted by the tech. But artists who do more generic work will surely lose employment opportunities.

When I spot unlabelled AI generated images out in the wild – on magazine covers, children’s picture books, food packaging, adverts – I think it looks cheap and trashy. But at the same time, the average person won’t notice or care. It’s “good enough” for most trivial purposes. I think that’s quite unfortunate, as it deteriorates the quality of our culture.

So far I haven’t used any sort of AI in my creative work.

But there are situations where I could imagine using it – like when I quickly need a stock image of a lens flare, or a very simple background, and some crappy stock image platform wants to charge me $100 for a license. I think that again comes down to corporations ruining the modern internet – resources like that used to be free and easy to find!

Another situation could be if I needed to quickly prototype some designs – maybe try out different color schemes or layouts – AI could potentially help me find something that looks good before I start working on the final illustration. But I don’t think my art is complicated enough to require anything like that.

Finally, it could just be used as an advanced version of a Photoshop filter. For example, maybe you have the rights to an existing image, but you want to make it look more like an oil painting for a house in your 3D game, and it can create that effect while maintaining the soul of the image.

I don’t think I see anything inherently wrong with those last 3 examples, if they’re done tastefully.
Most people don’t have unlimited time or money to get their ideal results, and maybe some compromises like that could be made. But luckily I’m not in a situation where I need that.

Anyway, AI can definitely produce pretty pictures, but I wouldn’t call them “art”, and I don’t think its use improves the quality of any artist’s creative work – but maybe it can be used to skip some of the boring parts. I think it can be fun as a novelty – especially on YouTube – where non-artists can produce some, uh… “interesting” content that would never exist otherwise.

Maybe the tech will improve in the future, or maybe artists will find better ways of using it, but at the moment I struggle to find examples of AI being used to create anything meaningful outside of some novelties. I’m open to seeing more examples though.


— Writing —

More so than programming or even art, I feel that language is a more critical part of our humanity that we should not seek to automate. If you’re using AI to write messages to your mom, your girlfriend, or even your boss, I think you are harming your ability to communicate and form relationships. You might as well give yourself a lobotomy.

Relative to programming and art, writing is also not very time consuming!
I’ve written this whole blog faster than I could make a detailed illustration!
And I’ve organised my thoughts and relaxed while doing it!

I know that it probably isn’t as easy for everyone, but I think you should keep writing even if you suck at it. It’s healthy to practice articulating your thoughts and feelings.

I don’t even read articles on unknown websites any more because they are overwhelmingly likely to have been produced by a bot – and you can tell because the bots don’t know what details in the text actually make it meaningful or interesting to a human reader. For example, an AI generated eBay item description for used Lego might tell me that “Lego is made of many parts and may be a great gift for children” – obviously I already know this if I’m searching for Lego! What I want to know is the condition of the item – which only the human seller can tell me – but they won’t because the AI has made them lazier!

Basically, I feel that any text written by bots pretending to be humans is an abomination and an insult to our humanity, more so than any other AI uses I’ve seen so far. I don’t think I even need to get into the damage it’s done on social media platforms and how easy it is to spread propaganda now.

When it comes to creative writing, maybe AI could be useful for brainstorming ideas, but even there, I haven’t found it to be particularly creative. Maybe about as useful as a thesaurus or baby name generator.


— Other Concerns —

There’s been a lot of talk about the energy usage of AI tech. My opinion is always that we should move to sustainable and renewable energy sources. We should aspire to create a future where energy is plentiful and clean. I don’t think wanting people to use less energy is a positive outcome to strive towards. And hopefully, this may be a problem that the market can sort out: if AI is truly using a disproportionate amount of energy relative to its usefulness, then companies will have to price it higher, and only people who genuinely need it will continue paying for it.

A lot of artists in particular, are mad that AI is trained on our content, without permission!
That really sucks, but even now, I’m not sure enough people care about digital rights to have an impact on policy. Many governments seem to see AI as the next economic boom, so it’s gonna take a lot of lobbying to implement some strong regulations against it. Attempts to poison AI training data have been entertaining, and in my opinion, the most effective approach will be to get the attention of huge corporations: Make images of Mickey Mouse doing 9/11 until there’s some sort of crackdown on unrestricted data scraping.

I think a similar approach would work with the issue of deep fakes. If it’s not illegal in your country yet, then start putting your politicians into porn videos until it is.

I think a lot of the main issues with AI come down to problems with capitalism in general – why should a small handful of billionaires be allowed to profit from a platform that’s only valuable because of the content that millions of users created? Reddit, Facebook, Twitter, YouTube, Spotify – they’re only valuable because users created everything that’s worth seeing on them. And that content is being used to train AI, which is being used to create impersonations of content, so that these huge companies don’t need to keep paying out any sort of royalties to the creators. It’s all looking rather dystopian.

There’s no reason platforms like this need to be operated for profit – Wikipedia is a great counter example. I guess in the near term, the best you can do is to give as little money as you can to big tech companies, and support creators directly through Patreon payments or other means. And in the longer term, advocate for regulations in your country, and maybe something productive will come of it once the ruling class starts being impacted.

Things are changing so fast that I’m not gonna make any predictions about what the future may look like, I simply hope that this new tech doesn’t make wealth inequality much worse, and that people don’t forget how to use their God-given brains.



Anyway, that’s all I’ve got for now.
Maybe I’ll update this blog later, or make a new one, as my opinions change.
Let me know if you have any opinions or know of interesting examples of AI usage in any field!

Bullet Heaven 2 Retrospective

Hey guys, it’s been nearly 10 years since Bullet Heaven 2 released, and I’ve never written any sort of retrospective about the game, so I figure now is as good as any a time to do so.

If you haven’t played it, Bullet Heaven 2 is a bullet-hell shoot-em-up in the style of Japanese games like Touhou. It looks like this:

It’s a game that I return to every once in a while to see how it plays on different hardware – I’ve tested it out on a Steam Deck, a Samsung Note 8, and with a lot of different controllers. It’s a project that started off as an experiment in using the Starling game engine, which builds on Flash’s Stage3D capabilities for hardware accelerated graphics. Flash has a reputation for poor performance, but games made with these tools could run super fast – and I learned a lot about optimising code and graphics. It was my first time using texture atlases (similar to spritesheets), a skeletal animation tool called Dragon Bones, and a lot of other tools which are probably long defunct by now.

The biggest performance benefit came from making as little GPU calls as possible, and this mostly came about by sorting the layers in the game so that the GPU would draw all objects of a type in one call – all the bullets, then all the enemies, then all the background stuff, etc. The game could easily handle 5,000 bullets on screen at a time, along with all sorts of particle effects and other animations. So I was pretty happy with what I had achieved.

But there’s a LOT of things I did wrong, and over the years I’ve been thinking about those things, and now I’m finally writing about them.

Bullet Heaven 2 had a somewhat rushed development – after the success of Epic Battle Fantasy 4 on Steam, I wanted my new game to also have enough content in it to merit a Steam release, but I didn’t want to spend more than one year on it, so I spent most of my effort trying to cram a lot of content into the game rather than focusing on quality. I’m very happy with the amount of playtime the game offers – and it’s also quite fun and addictive – but I wish I had spent more time nailing the core concepts down before making all the levels.

Here’s some regrets I have:

The game uses a lot of mechanics from hardcore Japanese shoot-em-ups that are familiar to fans of those genres, but not to many other gamers. For example: when you take damage you have a short period of time to cancel it by using a bomb, using bombs is generally discouraged except as a last resort, you can get extra points for “grazing” enemy bullets by going near them, etc. I feel like I didn’t do a great job at explaining some of these mechanics to casual players, and in many cases I wish I had designed new systems that were more intuitive and original.

The wave system and scoring mechanics are pretty basic. Each level has the same number of 10 waves, plus up to 3 bonus ones at the end if the player did well. It’s easy to understand, but I’m sure I could have come up with more interesting level pacing if I tried just a little bit harder. The scoring system relies mainly on completing waves perfectly to increase your score multiplier. The downside of this is that it’s very punishing if you make a mistake on any of the 13 waves. If I had made the game today, I would make sure the scoring system takes more factors into consideration. For example: the order in which enemies are killed could matter, waves could be broken up into multiple groups of enemies with each group giving a bonus when killed, grazing enemy bullets could charge some sort of resource, and so on. Basically, routing a path through a level to earn a high score should be more interesting than just “kill everything and don’t get hit”.

In terms of optimising performance, a big thing I overlooked was “object pooling”, which means to recycle objects in a game rather than clearing up their memory and creating new objects. By the time I learned about this concept I was too far into development and just didn’t feel like trying to implement it. The result is that the game stutters every few minutes when the garbage collection kicks in. It’s not too bad, but it is noticeable and annoying.

Bullet Heaven 1 had permanent upgrades which could be obtained by grinding, where as this sequel does not and requires only skill to progress. I wish I had made two game modes – one with upgrades and one without, and players could just choose which style of gameplay they preferred, without needing to complete both modes. The hardest achievements would have been for completing the same final boss either way, so this option need not take too much away from the challenge.

The writing was not great. It was just silly banter between the main characters at the start and end of each level, and if the player skipped all of it they wouldn’t have missed much. Some players still appreciated it more than having no dialogue at all, but I feel like I could have done more with it to make it more interesting, even if all I did was add a very basic Mario or Zelda style plot.

And finally… I just don’t like the graphics. They’re similar to my other games, but the way I did the shading took a long time and just doesn’t look great. I should have went with a cleaner style like what I tried out in the Bullet Heaven 3 Prototype. (which will never be finished, in case you hadn’t heard) (also, pictured)


On the other hand, there are many things I am proud of:

Bullet Heaven 2 supports 3 control schemes: mouse, keyboard and controller. Not many shoot-em-ups support that many options, and this makes the game quite accessible. In my opinion, the mouse controls are the most precise for higher difficulties, but many people are used to the other methods from playing similar games.

It supports 4-player co-op! I’m sure not a lot of people tried this out, but the ones who did were quite vocally appreciative of it.

There’s a lot of content and the bosses’ attack patterns look really pretty!

There’s optional cheats and handicaps that make the game easier or harder and effect your score accordingly. This doesn’t disable achievements, so trying to find a combination of cheats and handicaps that works best for the player turned into a strategic element that was quite unique.

The short levels and 3 difficulty options make the game more approachable. The ranking system is designed so that you get in-game recognition for beating levels perfectly, but none of the Steam achievements require you to go that far. It’s an overall satisfying game to try to complete 100%.

And, as was the original goal, the game demonstrates how a Flash game can run in an HD resolution at 60fps with thousands of objects on screen. I don’t know exactly what the recommended hardware requirements should have been, but they certainly weren’t very high, so I generally did a good job in this area.

Finally…

In terms of sales, the game didn’t do great during the first year, and I earned somewhere around (the UK) minimum wage from it. I was lucky to still get some sponsorship money from Kongregate, as the browser game market was dying at the time, and this was an appreciated boost. Thanks, Greg.

But over time, sales on Steam kept trickling in (probably largely due to it being bundled with my more popular Epic Battle Fantasy games) and nowadays the total income from the game is 4 or 5 times higher than that first year. The game currently sits on 447 reviews on Steam, which are 98% positive.

So things turned out alright financially, and in the end I just regret not spending a few more months working on some of the issues I mentioned. I easily could have afforded it, just self-doubt made me want to finish the game faster. Oh well.

It would still be viable to port the game to mobile to bring it some new life – the PC version almost works on phones as it is. I reckon it would be enough to tone down the difficulty a bit, simplify the controls, fix the object pooling issue, and rearrange the UI a little bit. But porting to mobile has been tedious work for me so I don’t think I’ll ever do it, unless maybe some publisher offered me really good money up front, haha.

I don’t see myself tackling the shoot-em-up genre again any time soon, but if I did I think I could make a fantastic game with all of these lessons in mind.