The story of the game I’ve made, and the one I’ve bet you’ve never played.
It’s June 23rd, 2017. Today would had been the last day of school for me, but I didn’t go. Instead, I spent my morning releasing StarTower, a game I had been making with friends for over 2 months, to the internet.
THE BEGINNING OF STARTOWER
So, Hi. I am Klonoa, and as of today, last year, I chose to leave behind making RPG Maker projects in favor of trying out the GameMaker: Studio engine. As a student who occasionally worked on games as a hobby, and hoping to do so in the future as a job, I took it upon myself to try to fully code a small, simple project. That project was a little game known as StarAir.
StarAir was more of a early playground for learning GameMaker Studio’s functions and its proprietary GML language. The engine is fairly easy to get into for beginners and has been used for various commercial projects like Hyper Light Drifter, Nuclear Throne, and Va11-Ha11a, in addition to being a solid tool for building tech demos. I hammered away at the project while out at a cousin’s house on a weekend, and for those two days, it was a pretty good time! Some notable issues included was trouble with multiple ammo types and the movement being janky when you pressed the fire button. I came back home that weekend feeling confident in my improving novice skill at coding but realized that I wanted to do a lot more with StarAir than what was possibly feasible for me. When I came back home with the project, I decided to try something else. I started a new project, StarLand.
Instead of being a space shooter, StarLand was a top-down shooter, which to me felt a bit easier to program and manage. I chose (at the beginning) to make it as basic and fun as possible, and then I added RPG mechanics. This was what it looked like about 2 weeks in.
StarLand later became StarTower (Mostly because I actually forgot what I named the game at one point), and StarTower later became a actually finished game! But getting there was fairly challenging.
People always seem to ask, where do you start when making a game? Well, if you ask me, you start with making the playable character and/or object.
I first work on making it move in a simple, basic space, and then from there, I add core functions like shooting, multiple weapons, and a XP system. For the Player object, I have over 500 lines of code for it, which to many would probably seem stupid. And it is! I had player movement, weapon firing, leveling, and the game’s UI inside the player’s object which while worked, left a lot of that code often disorganized.
StarTower is a mess, both from a design and code perspective. I originally had a design doc in it that I completely forgot existed and ended up forgetting about a lot of level ideas and the like that I had made for it. I tended to make mechanics and functions based on whatever popped in my head first. It’s really not the best way to plan out a project but given how I was responsible for most of the game itself, it ultimately didn’t cause any conflicts. All of the code was also handled entirely by me too, so I left it disorganized often.
Enemy damage balancing was often painful because I had the different values of damage being affected by the bullet sprite that was fired and, due to the different behavior of various enemy objects, that meant having to copy and paste the code across multiple objects.
Perhaps the most egregious is how I handled the implementation of multiple weapons. Due to my relative lack of experience, I had a simple number variable that’d change to a different number based on which key you pressed on the keyboard (pressing 1 makes this value = 1, 2 makes this value = 2, so on) up to 9 available weapon slots. I was unable to figure out how to allow for weapon swapping via mouse scrolling or a button, which I figured out in seconds when I went on to work on a similar project.
But you know, not all of it was bad! For a first time effort, I was certainly surprised with what I was able to get done. One really cool effect that I got working was having an accompanying video of the option you selected in the game’s main menu. GameMaker Studio doesn’t have native support for video files so I ended up using gifs instead, which worked fairly well but did have an effect on lower-end computers.
As for the art side of things, I drew the character sprites (which were supposed to be temporary but…well I guess I never changed them), with my friend Madhatter drawing the weapon art and the tiles for the map. On top of building the levels, I had to also manually add walls and textures to each floor. In retrospect, I could have just used code to have taken care of it (for example, if the game room is level 5, have the obj_wall sprite turn from the default gray to the textures for level 5). Since it was the first time I worked on a project with original assets (for RPG Maker games I ended up using whatever assets I had on me), I got to have a lot more control as to what I wanted the game to look like. I still think it could look way, way better, though.
I didn’t necessarily have a timeline as to the overall design of StarTower, I just pretty much worked on whatever I wanted to do that day and kept repeating that until I eventually finished the game. On one day I could be working on a level, while another I would be designing one of the 9 playable weapons in the game.
The CRISIS MECHANIC
I mentioned that the player object is over 500 lines, but that’s only on one player object. There’s actually 4.
The CRISIS mechanic is a unique idea I had to give players a continuing chance to play even if they lose all their HP, as the enemies in the game do a lot of damage. Inspired by a similarly named mechanic in Kid Icarus: Uprising, the player is put into crisis mode upon losing all their HP and can fully recover all of their HP if they avoid getting hit for the next few seconds. Unlike Uprising, the crisis mode isn’t a one-time per stage mechanic, as you’ll always be in crisis mode whenever you lose all of your HP.
obj_player is the main object for the player, including their controls, various collision conditions, and for some reason the entire game’s UI. When the player loses all of their HP, they turn into obj_playerhit, where if they are hit at any point while they are this object (in crisis), they’ll lose a life. If they do get hit, they turn into obj_playerlostlife, which leaves them invulnerable for a few seconds before transitioning back to obj_player. Now this all seems very convoluted for this crisis mechanic because I could have simply used a variable to set the player’s state and changed functions accordingly based on what the variable was set to, but if I remember, I couldn’t get that working, so I just ended up doing the separate states as objects. Thankfully, GMS has a parent/child function for objects so I didn’t had to copy and paste the code across the objects.
StarTower’s final weeks of development were also the busiest for me. I probably should had studied for my finals, but I instead spent the last few weeks of school working on the game. StarTower had numerous mechanics and ideas planned that I had cut last minute, including crafting, weapon attachments/alternate firing options, and more GameJolt achievements (I wasn’t able to get achievements for different ranks and enemy kill counts to work in time), but in the end, I was able to release the game on time for my planned release date, June 23rd, 2017.
In order to get the game done, I convinced my Advanced Programming teacher to let me spend my final weeks in class working on the game instead of our final project (which I already finished), which was practically a godsend. In return, I presented the final game to the class on the last day I was there.
People surprisingly enjoyed it! And then I proceeded to break it by exploiting annoying bugs, but hey, it was really cool to get to see other people try it, let alone see it in front of a whole classroom! It made the days before that I wasted working on it worth it.
Then the release date came out. I uploaded the game’s files to GameJolt, itch.io and Steam Workshop. And then it was released online.
Since it came out, it’s had over 29 downloads across the three platforms I released it on, with a combined total of over 200 views of the game’s page. Needless to say, not a whole lot of people played it! And that’s fine! I felt mostly satisfied with simply finishing the game, something I was proud to call my own! It looks kind of strange and it has all sorts of problems, but it’s hard not to look back at StarTower and feel embarrassed for saying “I made it”.
PLAYING STARTOWER, ONE YEAR LATER
It’s hard not to see the faults in the things you make, and that was no less different with StarTower as you can probably tell by now! Playing through the game again (recompiled on GameMaker Studio 2), it still plays moderately well! It would had been a very nice browser game to play, but I wasn’t able to get it to compile properly in HTML5 so that never happened. The whole GameJolt integration was a cool touch that added a lot more to the game, since those who actually did play the game could compete against everyone else for high scores.
My return to the StarTower one year later was a fun, 12 minute romp for the most part, at least until the final room played out and everything proceeded to bug out and run at twice the speed, breaking the game. I think it’s kind of important to understand the amount of time someone could spend making a segment in a game that’s about maybe a few minutes long.
SO, WHAT’S NEXT?
I’ve always thought about continuing work on StarTower. Perhaps making a update with new levels and weapons, or making a full-fledged sequel that’d be kind of like a more open-ended dungeon crawling adventure! Well I mean, I could do all of those things, but I think I’m good for now. StarTower was supposed to be nothing more than a learning experience for a engine that I’m now using for a lot of upcoming projects that I can’t wait to one day share! For now though, I decided to bring back my original concept of StarAir, and it’s now currently in development! It’s almost like things have gone full circle, but I’m excited to try expanding on the concept I didn’t get to finish!
And maybe I’ll talk about that a year after it comes out..down the road.
Want to try StarTower yourself? Here’s the game on itch.io.
Feel free to check out StarAir’s official GameJolt page here!
You can also see my current antics either in game dev or in general on my twitter @comet_melting. I might show some stuff later in the summer regarding StarAir and the many other things I’m working on! And I can’t wait.