It may seem needless to write about a game I made years ago, but it makes sense to keep a sense of "firsts" about the project. It creates a little pocket where all of my less refined work can sit in proximity. Regardless, I intend to keep this Galaga-like floating around as a reminder of where I started. In a run-down student housing apartment bedroom, trying to distract myself from the end of a two year long relationship.
Fortunately, it gave me the push I need to make my first game. I dove into GameMaker Studio and did not stop until I had at minimum a menu and a gameplay loop.
GameMaker Studio (the first at least) is tremendously easy to learn, and there is a massive amount of tutorials that can be found for the engine. As far as "first game ever" goes, this helped alleviate the stress of learning a new engine. Primarily with getting it to do what you want it to do, like display a sprite, assign it to an object, etc.
I already had some programming experience from introductory C++ and Java courses, and the language GameMaker uses (GML) is much simpler by comparison. Using variables and loops was easy enough, which helped me focus on what I actually wanted to put on the screen. This was also the first time I dove into the documentation for a program. For example, I needed to look up the functions I should call in order to implement "random" enemy placement or collision.
Working within an existing genre was also useful from a design perspective. There was already an existing "template" of where in-game objects should be on screen, and it was a matter of how I wished to utilize said template. I left most of the UI at the bottom of the screen, whereas in Galaga, the score is displayed at the top. Instead of flying enemies in from out-of-frame, I had them pop into predetermined rows based on their type.
Once I became familiar with the engine, I began to get creative with the tools at my disposal. I made a small explosion sprite, and instead of creating multiple frames of animation, I told it to expand until it reached a certain size. A laser ability used by the player and boss ship does something similar, where a small sprite is attached a ship and stretched until it goes off-screen. These little tricks were some of the more satisfying moments of working on the game, and I felt better about using my programmer art as a result.
My biggest gripe: I hardcoded the enemy spawn locations to the window//room size, leaving no ability for a scaling window or even changing the window size without a massive amount of rewritten code. After exporting it to HTML5 and then itch.io, I realized it was too large for the average browser window.
I am not an artist, and while I am not embarrassed of my sprite work for the ships, the UI leaves something to be desired. The font is really basic, and searching online for one intimidated me because I was unfamiliar with using others' assets and did not want to misuse something unintentionally.
I stepped away from the project when the 2017 Spring semester started and never really got back to fix the window issue. The longer it gets between messing with the game, the more difficult it becomes to mess with it some more. I added sound effects, a better in-game UI, and a tutorial screen, but the HTML5 version will not work and it kills me to put something for download up. Primarily because nobody really enjoys downloading & installing something from a website full of in-browser games.
Code can fix a lot of problems, but it can cause just as many. It took far too long to have enemies spawn in the same "row", but not on top of each other, but also not off-screen, but also not mess up the timing of spawns, and so on. It is fortunate that the scope of the project was small, because I can picture how the "code/algorithms can do everything" mindset could cause issues.
Making a habit of working with the engine is crucial to retaining the motivation to work on the game in the future. I moved on to Unity and Godot, and the more time I spent with them the less I wanted to relearn GM.
All in all, setting the goal of "menu and gameplay" created an attainable goal that I felt genuine excitement towards reaching. It was a little broad however, as once the minimum requirements were met the design process began to feel a little directionless. In the future, I would like to start doing design documents ahead of my projects.