My name is Christian Marinkovich. I am the sole developer of Laser Fighter. Laser Fighter is a fun project I started to help me learn the core concepts of creating a video game. The game has a long history, going all the way back to 2019. Here, I will describe each era of Laser Fighter's history.
I wrote my first significant Python program back in 2019. It was a simple snake game that I learned to make from a YouTube tutorial. I made this snake game to help me learn how to create GUI applications in Python. The snake game used the turtle module to draw graphics on the screen, the same module currently used in Laser Fighter. The snake game had about 200 lines of code and was very simple and minimal.
After the snake game, I tried making a game of my own from the knowledge that I learned through making the snake game. I ended up making a game called "Space Shooter" with about 500 lines of code and gameplay similar to Laser Fighter's "Machine Mode." After successfully making this game in the span of two days, I got bored of Python for a while and decided to move on to other things.
It was not until December of 2021 during my high school's winter break that I finally decided to go back into Python and began to work on Laser Fighter. I decided that I wanted to remake the space shooting game I made two years prior, but with actual graphics, sound, and gameplay. I learned that I could draw textures in Krita and import them into my program as .gif files. I also learned that with the use of an extra library, I could import sound edited in Audacity as a .wav file. After about 10 days of hard work, version 0.0.1a was complete.
The first version of the game was very primitive. Back then, it was not even called Laser Fighter, but rather Machine War. This was because Alien Mode did not exist yet. The entire codebase was one file and contained only 2600 lines of code. The game was also very unstable, prone to errors, and extremely laggy in comparison to other versions of the game.
After completing this version of the game on December 31, 2021, I figured that that was it. I made a simple game in Python, like I intended to. I had no plans of continuing this at the time and wanted to move on to other projects.
Fast forward to the summer of next year, I began to have free time again. School was finally over and I was able to work on some of my own things. I decided I wanted to go back into Python and creating video games. Instead of going back to Machine War, I figured I would start a completely new game.
I wanted this game to be completely different from the last. It would have gameplay similar to Alien Mode's gameplay in Laser Fighter today, where the player would spawn in the center of the screen and zombies would come in from both sides of the screen. The player could freely move around from one end of the screen to the other. The game was intended to be set on Earth, in a random flat grass field during nighttime when zombies would be thriving. After about 2 days and 500 lines of code, the game was ultimately scrapped.
It was at this point that I decided to go back to Machine War instead of making a completely new game. I wanted to take the idea from the scrapped game and incorporate it into Machine War. I decided that in order for this to happen, the game would need to have multiple modes, Machine Mode and Alien Mode. It was at this point that I realized the game needed a lot of work for this to happen. For starters, it needed a name change since now the user is not only fighting machines anymore. I decided that Laser Fighter was a good name. Secondly, the game needed a centralized menu screen where both modes could be accessed. I decided to replace the old sound toggle indicator with a main menu button. I also created a title screen for the game. Because I had no knowledge yet of creating buttons with the turtle library, I knew this would be a hard task to accomplish. After a few days of effort, I got a working title screen. After making the title screen, I used the knowledge to also create a settings screen for the game, where I could toggle certain sounds on/off and change the controls of the game. The early versions of these screens were extremely buggy and laggy.
After making these essential game elements, I finally began work on Alien Mode. Alien Mode is similar to Machine Mode in that the game starts with 3 enemies and increases in amount as the player kills more and more of them. However, it was also very different from Machine Mode in that the player was on the surface of the moon instead of being in outer space. The player also had a gun to shoot lasers out of. The boss in this mode of the game was a UFO which would shoot lasers down at the player.
After Alien Mode was completed, the summer was starting to come to an end and version 0.2.0a was completed. This was one of the biggest versions the game has ever recieved, increasing the codebase from 2600 lines to 7300 lines. The files were also organized and everything was split across multiple folders rather than being all in one file. However, all 7300 lines of the codebase were still contained in one file.
After version 0.2.0a was completed, I knew that I was not going to stop working on this game anytime soon. It has grown to a big enough size to motivate me to continue to work on it. I planned on completing a small update every winter break, and a major update every summer.
Despite this motivation, there was a lot of uncertainty about the game. When will the game hit beta? When will the game be finished? What is my final plan with this game? These are all questions I had no answer to. I wanted to make this a legitimately big game which people would actually want to play. However, in order to do that it would need a lot of work since the game was not even close to finished. At this time, the game was also too small and simple to really be considered a legitimate modern game. Given my current codebase and libraries, I was not sure if I was going to be able to make it far with Laser Fighter.
Despite these agonizing questions, I had several ideas and plans for the game. The basic concept of the game was there. Now, I needed to give a reason to continue playing it for more than 5 minutes. I figured that I needed to add some form of "progress" that would encourage the player to continue playing.
When the winter of 2022 finally came and the 2 week break began, I decided to began working on version 0.3.0a. Since I only had two weeks, I decided in this version I would implement a statistics screen. The statistics screen would show the players current progress and accomplishments (like how many machines/aliens the player killed). This would suffice as a minor form of progress that the player could build over time.
The statistics screen took me 3 days to implement, meaning I had a bit more time before the break ended. I decided to fix many of the bugs that came with version 0.2.0a, like the settings screen constantly flickering and the certain gameplay bugs. Fixing the settings screen flickering remains one of the hardest bugs that I ever had to fix for the game. It took about two days of trial and error to finally be able to fix it. I came to the realization that the only way to fix it was to use an actual texture for the button rather than building it and drawing it with the code. After these bugfixes, I decided that version 0.3.0a was complete.
At this point, I needed to brainstorm some ideas for the game. I came up with several good ideas. For one, I wanted to add power ups to help enhance the gameplay experience. I also wanted to add coins to the game and a shop where the player could spend the coins to upgrade their weapons. I knew these ideas would take time so I created a timeline of when I would possibly implement them. At this point I knew it would be a long time before the ideas were implemented.
During this time, I was in senior year in high school, meaning that in the upcoming summer of 2023, I would be graduating. I had several ideas and plans for the game, but I knew that I would have limited time to add them. The summer started off with all the fun graduation events, which lasted about a week. After that, I decided to take a much-needed vacation and decided to go visit my family in Croatia for two weeks. When I came back, I ended up getting my first job, which took up a good chunk of my time. I knew at this point I was not going to have enough time to implement all of the features that I wanted to implement. I decided version 0.4.0a was going to be small just like 0.3.0a, and only add power-ups to the game as a significant feature.
I realized at this time that the libraries I was using were not sufficient enough at creating a game in this nature. The library that I have been using to draw the graphical elements of the game has been Pythons built in turtle library. The turtle library is a built in Python library mainly meant for educational purposes and teaching newer programmers about working with graphics. In 2021 and much of 2022, I still had very little knowledge about game development and the game was small enough to where the turtle library was good enough for its development. It was at this point that I realized I needed to use a different library if I want to push this game, as there are several features I want to add but couldn't add them because of turtles limitations. When I came to this realization, however, the summer of 2023 was almost over and I was getting ready to start college.
My first year of college was a big transition. I was going from Southern California to Rensselaer Polytechnic Institute (RPI) in upstate New York. RPI also offered rigorous coursework and difficult assignments which made the year an even greater challenge. When I finally came home for winter break, I decided it would be better to spend the break with my family whom I have not seen in a long time than work on Laser Fighter. This caused a lot of plans to get pushed back for the game, and I knew I was going to have to work hard this upcoming summer if I wanted this game to grow.
When the summer of 2024 finally began after a difficult first year of college, I was ready to start working on Laser Fighter again. There were several concepts I have learned throughout college that would help me vastly improve the current state of the game. My original plans for the summer consisted of splitting the game into multiple files (since the codebase was still all in one file) and to finally add coins and the shop into the game.
Being super excited to finally start working on real projects again, I had plans to finally finish Laser Fighter by the end of the summer and add everything else that I have planned on adding to the game. However, as I continued to work on the game, I realized that the game needed much more work, and that certain aspects, like frame timing, delta time, proper graphics, window resizing, and proper collision, were not implemented properly. These realizations postponed progress and I eventually concluded that if I wanted this game to be done well, I was not going to be able to finish it by the end of the summer.
As I made progress on Laser Fighter, I began to finally fix several of Laser Fighters long lasting issues. I finally was able to implement fullscreen mode into the game. I was also able to fix several key performance issues, implement proper game timing, and fix the poorly drawn graphics. With all those key features, I decided that it was time to finally push the game into beta and make it public on GitHub. After 7 weeks of non-stop coding, version 1.0.0b was released. Despite only adding 4000 lines of code, this was the biggest version that the game has ever had, since it re-did the majority of the codebase and split the majority of the main file into different classes and files.
It was at this point that I realized how much potential the game really had, and began to realize with enough work, I can make this game perfect. Despite all of the improvements made in version 1.0.0b, there was still one major problem. The game was still using the turtle graphics library. It is quite impressive that I was able to create such a sophisticated game with a graphics library that contains not even 4000 lines of code. However, despite the improvements, there were still several limitations that I ran into due to the turtles libraries limitations. It was at this point that I decided I wanted to switch the game's sole graphics library from turtle to PyGame. I managed to utilize PyGame for the in-game sound and the framerate timing. However, I realized that I was not going to have enough time during this summer to convert all of the graphics code into PyGame and will instead have to plan it for some point in the near future.
Despite this, I still decided that for the first time ever, I was going to implement multiple updates in one summer. I decided to finally implement the shop and the in game currency. This helped further incentivize the user to continue playing the game and made the game far more interesting than it was before. The Shop came out in version 1.1.0b, which was also one of the biggest updates the game has ever had, adding 7500 lines of code to the codebase.
After the shop, I decided to add gadgets, which would be another way that the user could upgrade their character. I decided that the game should also have a path of progression and a storyline, which is something that I plan on continuing in the future. Both gadgets and the beginning of an in-game storyline were added in version 1.2.0b.
That brings us to today. Today, I can consider Laser Fighter to be a legitimate game that someone would enjoy playing, even if it is for a short time. Despite the game still being small compared to typical games released today, it is still impressive.
The current state of the game as of August 2024 is as follows:
- The codebase is over 23500 lines long split across 64 different Python files and 100 different classes
- The game features over 100 textures used for various in-game objects
- The game features 14 different sounds that are used throughout the gameplay
The game has grown significantly since it was first initiated back in 2021. This huge growth has not only made me realize that I enjoy the process of making games and software in general, but also that there is a lot more to learn.
Here are some of the plans for the future regarding Laser Fighter:
- Convert the game's graphics code to PyGame to allow for better performance and proper implementation of certain features
- Add a new gameplay mode to complete the storyline (The name of this mode and its gameplay will be a secret)
- Add several quality of life features, like visual effects, after the game is converted to PyGame
- Add more items to the shop
- Strengthen the progression of the game
- Further organize the game's code and split up the main file
These are only some of the future plans for Laser Fighter, the rest will remain a secret :)
Copyright (c) [2024] [Christian Marinkovich]
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.