top of page

Get emailed new posts

At the end of every year, it’s time for a quick review of every game I made this year. If you don’t count updates to Randomly Generated RPG and All Shapes and Sizes, I made 5 games over the year. That’s less than 2024, which had a lot, but 2024 had a bunch of smaller games, while all 5 games in 2025 were fairly large ones.


Relentless Waves - tier 1. This is pretty obviously my favorite game this year, as I’ve updated it several times over the year. I think it’s a very fun twist on the genre, and I like the variety of enemies I made. I think my only issue with it is that it doesn’t really have an official level to beat and replay, and possibly the existing ones are just too hard. But maybe I only think that because I’m testing everything at the highest difficulty. 


Fortress Siege - low tier 3. I think this is the card game that aged the worst this year. It’s consecutive turns, which I don’t really want to make anymore, and I did parts of it better later on. The AI opponent was better programmed in Territorial March, and the concept of a card fighting game was done better in Swords vs Shields. The aura mechanic is sort of cool but not really a standout, especially since it’s pretty directly copied from PvZ Heroes. I did learn things from making it though.


Territorial March - high tier 3. This game was better, but there were several design flaws that I would’ve really liked to have fixed in a better way. Specifically with how you could go negative in actions and coins, which isn’t very intuitive, and I did it better in Swords vs Shields. That’s one thing, my opinion on games can decrease if a future game does a better job on parts of it. I think Camp and Road also make the game feel too similar to Temporum. This was also my last try at trying to make a spreadsheet-programmed game work, and I think I’m mostly done with it. I do think the scouts worked well though. 


Memory Tiles - low tier 3. Probably the worst game made this year. It came after a summer of not succeeding with a different game, and while the concept of a minigame collection in a memory game is kind of cool, it isn’t really the kind of game that I want to play or make again. Pretty much the only useful thing I learned is how to load scenes on top of other scenes. 


Swords vs Shields - tier 2. The 2nd best game of the year. I’m glad I was able to make a game in this genre work simultaneously, and I think the turn structure is unique as well. I think this game did the concept of spending actions to play cards for free better, since there’s less need in making effects that make you lose actions/swords/shields (because I could instead make effects about damaging the other player and their cards). I also learned a lot about multiplayer features, and improving how the log works. I once said this game had my best code in it, but less than a month later and no, there are definitely flaws in it. This only drops to tier 2 because I’ve come down a bit on making online multiplayer games.


Overall, I did learn a lot from making these games, and learned a lot about systems that will make future games easier and better (like translations). Despite all the code I wrote, I don’t really feel like I have a game where I can say all the code is as close to perfect as possible. Some are better than others, but even for games like Randomly Generated RPG, I would be implementing them much differently nowadays. Anyways now that I spent this month updating previous good games, I need to actually start a new game.

As expected, I changed the Boxer enemy in Relentless Waves. My first attempt to replace it was an enemy that rotates independently (instead of just rotating towards where the player is), and occasionally it will fire a giant beam at where it’s rotated to. My brief testing with it showed it was either super easy to avoid, or just completely unfair. Then I had the idea of, what if an enemy tried to attack you from the sides instead? I tried it as an enemy that shoots bullets that move to the opposite edge of the screen. It picks a location on the edge of the screen, then fires a stream of 10 bullets, all from that location, before picking a new location. This worked out better, and I like that it creates patterns where you have to move between the bullets. Giving this enemy a name and design was really hard though. Eventually I decided to make it a factory shooting tires at you, which sounded funny.


Then for All Shapes and Sizes, I first made a few minor changes. I changed the animation for shapes spawning, instead of just popping into existence, they grow into the shape, which I think looks better. Then I tried to add something new, which was a struggle. The first thing I tried was an upgrader, it turns the first shape it touches into the next shape. The idea was that it could be a wild card shape, but it ended up being way too strong, instantly turning hearts into crowns. I briefly considered having the ability to drop a star, except the star would fade away over time, which would mean you have to quickly merge it with another star to make use of it. But I didn’t see how to communicate this with just a visual design, so I scrapped it. Finally I came up with something, an item that warps the first shape it touches to the other side of the level. This worked great, it’s very helpful when you have 2 of the same shape, but they’re nowhere near each other.


I probably would’ve gotten more done on those games this week (I wanted to find a new cheat/challenge for RW, and a new level for ASAS), but instead I spent a few days figuring out more improvements to translations. The first is how to get the information from google sheets. The initial code for downloading it and converting it into a format that can be read by the code was very messy and confusing. I realized an easier way to do it: the code can just download it directly as a tab-seperated-value sheet, which is so much easier to work with.


Another thing was improving on how to share and upload the translation file for other people to work with. Now the game lets you download the base English tsv file, and then let you upload your own tsv file into the game. This was tricky to do because browser games don’t let you do things like this. It turns out I needed to use an entirely different programming language just to handle this, but I didn’t want to learn that, so I just had ChatGPT code it for me. I don’t like using ChatGPT to write huge chunks of code for me, but I’ve found it’s not so bad when it comes to fixing quick code errors, and it did do this upload/download thing for me (I would’ve never figured out how to do it myself).


On sunday I had to play Guandan again, which I learned is the name of the card game my mom plays. I have to say, after playing it a 3rd time in one year, I’m pretty much done with it. Every time I find it harder to tolerate the flaws in it. The leveling up system and supposed co-op-ness still feels completely pointless and too complicated. Another issue with this game, and with consecutive turn games in general, is that you have to remember a bunch of things: the turn order, whose turn it is, and if they’re done or not. People constantly forgot all of these things, and this is a game where each turn is like a couple seconds. It shouldn’t be hard at all, and yet it was. Also the game takes too long to set up (even with machines to handle shuffling and card dealing). I also dislike how the game keeps going after someone’s won, as now the winner has to sit there waiting for everyone else to finish, which is very boring.


I bought Pacific months ago, but sunday was the first time I got to play it against other people. I don’t remember every single card I chose, but I started off with some fish and boats, moved them to Peru, and then someone played Holiday in Peru, so I ended up with 10 hotels in Peru and played industry cards every turn for +$10. I had fun, but the other players struggled with how complex the game is due to having to read multiple cards all at once, and how the 4 tokens worked. This experience made me think, maybe I should make a game for this kind of audience. For sure some of my games are not easily accessible for kids, non-gamers, non-English speakers, and/or older people. Randomly Generated RPG is complex and has a lot of reading, Relentless Waves requires fast and precise movements, etc. I think All Shapes and Sizes is the best fit, but it’s possible I need a more simple game that anyone could play.


Next week, there will actually be 2 posts next week. On Dec 31 I’ll write a retrospective on all games I made this year, and the usual weekly one on Jan 02.

Some bad news for the game mentioned last time (which I’ll call the dungeon game). The ideas for it haven’t been coming to me. One big issue with having obstacles spawn in random locations is that they can lead to either really easy levels (one half of the screen has nothing there and you zoom past the level) or really unfair ones (especially since you have 1 health). Which means already this game has hit a dead end and I’ll have to do something else.


Instead I went back and did a little more work on previous games. For Randomly Generated RPG I did a little rebalancing and fixed a few visual bugs. Since I’ve been updating these games, I decided I needed an in-game way to tell players what had changed in each update. This was something I had figured out a while ago, but for some reason didn’t bother adding in. On the title screen of each game, there is a dropdown that displays a date, and changing to that date displays a textbox, and in that textbox I can write what changes were made on that day. Originally I would type the update notes into scriptableobjects, but then I realized I needed it to be translatable, and I switched it to use enums (which I implemented last week). 


Most of the work went into new enemies for Relentless Waves. In the past I tried and gave up on an enemy that followed you around in the past, but this time I tried the idea again. One issue I had is that if there were two enemies that followed you around, it was possible for them to overlap each other in their movement, and then they were pretty much the same enemy. It had to do something other than shoot bullets at you. Then I took an idea I had from the dungeon game, which is that it can have orbs that orbit it. This idea combined pretty well with a moving enemy, since if the enemy never moved, the orbs would be very predictable and easy to avoid. And if they do overlap, their orbs will be in different positions for you to avoid. I ended up theming it as a planet with moons orbiting it.


The last enemy took a lot of work for me to figure out what it should be. The concept was, the enemy had a shield, but you can lower the shield, and while it’s raising back up, you go in and attack. The question then was how to lower the shield. My first attempt was, you had to step on some switch in a random location. That sounded cool, because staying in one spot for a period of time makes you vulnerable to other bullets. I also surrounded the switch with walls that hurt you if you touched them. But the random placement was a huge problem. If there were multiple of these things, they could end up very close to each other, and there’d be no way to touch them without hitting any of the walls. Then I realized I could drop the switch idea and have it where if you’re directly below the enemy, it’ll drop its shield down on you. That pretty much solved the problem, and I themed it as a mechanical crane lifting and dropping some concrete. But now it resembled the knight a lot, who shoots downwards. Since knight was already one of the easiest enemies, I changed it to also shoot a bullet at you as well.


I had also tried another enemy that followed you around. I tried an enemy where its position changes depending on where you are on the screen. If you’re around the middle of the screen, it will move just above you. If you’re slightly below the middle of the screen, it will go below you and you can’t hit it. What I discovered was that 1) the math to determine its position was hard to calculate, 2) since it hovers just above you it’s hard to avoid its bullets, and 3) if you didn’t know its mechanic it just felt like it moved randomly. I also tried an enemy that just rushed at you, like a melee enemy. And I tried it out as a boxing glove, but a day later I got rid of it as it didn’t impress me much. I want to get to 15 enemies, but haven’t come up with a replacement yet, and the game is only at 14 enemies. Probably there’s a way to fix the concept mentioned above, where you have to stand still in an area surrounded by walls.


Unless I get a sudden burst of inspiration for the dungeon game, I guess for now I’ll continue tweaking old games. I’ll definitely try to figure out a new enemy for Relentless Waves, but I think I’ll also try to find something to add to All Shapes and Sizes. With how simple the gameplay is, and the failure of saving shapes for later, I don’t really know what I can add. I don’t know if I will be able to figure out any new levels, game modes, or items to drop. Just looking at my github, I have barely added things to this game after releasing it in December 2023. But I guess it’s possible I get an idea.

bottom of page