Home
Blog
Projects
About

Dimension Dissension

Wednesday, 11 January 2023

When I first started working on this project, I had grand plans for an action rogue-like game with intricate quests and detailed artwork, an upgrade system, points you could use outside of each run, boss fights, multiplayer, the whole shebang. This was my first game, and I was excited at the prospect of creating my own world, ideas came to me like oxygen. However, as I delved deeper into the development process, I realized that I would need to scale down my expectations and focus on creating a functional prototype.

One of the biggest challenges I faced during development was trying to balance the design of the game with the amount of work required to implement it. I quickly learned that it's easy to get lost in thinking about all the features I wanted to add, without fully understanding the amount of work that would go into each one. As a result, I decided to simplify the artwork, remove 90% of the ideas I had for the game, and focus on the one system that I wanted to implement, the Quest System.

One of the most important things I learned during this project was the importance of prototyping and testing early and often. This project I learned so many different things, it was difficult to stop learning and focus on getting this game done. I wanted to delve deeper into testing, learning about Unit Tests and proper use of the debugger, but I decided I'd wait to apply that to a different project. I have read 2 books over the past week, "Pragmatic Programmer" by Andy Hunt, and Dave Thomas, and "Clean Code" by Robert C. Martin. I will most definitely be revisiting these books multiple times in my game development career, but it was nice to read through them, it made me more aware of how to keep my code clean and organized. These books have helped me be more proactive in keeping my code clean and I know they will continue to help me over the years. I would highly recommend them to anyone.

Another key learning experience for me was the use of scriptable objects. I used scriptable objects in 2 ways for this project, data persistence, and for items and quests. I created a base class of ArmorBase that was a scriptable object itself, other armor pieces could inherit off of it and I could create many different armor pieces quick and easily, modifying what stats the armor gave to the player, what sprite the armor used and other things like the name and description of the item. I also used this same method for creating quests, it allowed me to bulk up on quests that I could call inside of code, and give to the player. I divided the quests into 3 categories, based on difficulty. I then used one scriptable object named "LevelData" that I modified during runtime in one scene, to change the level every time the player would complete a quest, and then call that same scriptable object in the game over scene to display the level score the player got.

At the end of the day, after lots of idea removals, I decided to focus on creating a simple survival game, rather than including aa complex rogue-like game with all these different features. The goal of the game is to see how long you can survive, and at the start of each level, the player can choose a reward that they will receive if they complete the level. The player gains a small bit of health after each completion as well, making it more feasible to attain a higher score.

Over the past 2 weeks, I built a start menu and a game over screen, and I went through my code and refactored A LOT. While there may still be some minor bugs, I believe the game is in a finished state. I could have added much more to the game, like health potions, power ups to change the shooting style of the player, a boss fight, and so much more, but I have decided to stop working on the project to move on to other projects for now.

Throughout this project, I also learned about Github projects and I used issue tracking and pull requests for the past 2 weeks. I would create a new branch to work on a new feature, and then commit that branch, close the issue and make a pull request to merge the changes into the main branch. in my next project, and for the rest of my game development career, I will be sure to continue to use Version Control, and learn more about Project Management. I used a Kanban board toward the end of this project, but I would like to use one from start to finish.

Overall, this project has taught me a lot, and it was my first game that I put a lot of work into. It's easy to criticize the game for its flaws, but I am proud of where it has ended up. I may return to work on it in the future, but for now, it is what it is. I am excited to move on to new challenges and continue to improve my skills as a game developer.

An unhandled error has occurred. Reload 🗙