2 Year of Making a Game Without A Game Engine
Written on
By SadPumpkin
If you want to make a game, don't make a game engine. -some fellow smarter than me.
hello, i'm currently working a platforming game which is basically Hannah and the Pirate Caves from Neopets. As of this writing, it is the beginning of the third year of the project. In this post, i would like to look back at the progress and just reminisce about it; a little public talk with myself, if you will.
Warning: RAMBLING/YAPPING AHEAD!!!
The Years Before
for context, i casually dabbled in game development before. So, this project isn't my first foray into casual game development. My path in game development would be reserved to another post in the future. Long story short, i suffered a burnout and basically decided to stop game development as hobby. i wasn't getting the same satisfaction from it compared to when i started it.
At that time, i really thought that was it; the spark that brought some joy in my life fizzle out just like that. i thought i have made peace with it and had move onto other interests. Yet, life found a way to re-ignite that spark within it.
The Idea of a Game Engine
one day, a question popped up in my head: what is a game engine? Curiousity got the best of me, and i ended up looking around for answers. Eventually, i found this lecture series by Dave Churchill. It is a good lecture series which introduces the concept of Entity-Component-System (ECS) architecture for game development. i would recommend the lecture to others.
during this time, i was sort of in a slump, where i felt my skills as a programmer was inadequate. Others always suggest having a side project to keep your skills sharpen. However, i am horrible with project ideas for two reasons:
- i prefer projects that aren't superficially ticking some checkboxes. It has to be something i would really enjoy, not only for the end result, but its process as well. i believe that if i really enjoy the process, the improvement will come naturally.
- i just not that creative really. i usually iterate upon something that already exists, rather than doing somewhat completely new.
no matter, it was decided then: i am going to follow this lecture and make a game without using a game engine. i didn't have any idea on what kind of game i would make at that time. Given that i experienced burnout, i didn't set too much of an expectation on this. At least, it would have been a good learning about ECS and then i would move on in about 2 weeks.
Beginning Steps
the first thing to settle on: what language and library should i use? There were a few thoughts:
- i could follow the lecture and use C++ with SFML.
- use this as an excuse to learn Rust.
- stick to the good ol' C with raylib.
you can guess which one i went with.
i just enjoying programming in C. The thought is that: if ECS is just a concept, then if i can do it in C, that means i really understood ECS then, right? Questionable logic, but it works. Yes, i do not have the nice things in more modern languages (like proper data structure implementation), but i consider that part of the challenge to figure it out.
i begin work near the end of November 2022 implementing a basic ECS, starting with the basic component which contains information for position and velocity. The end result is... not that exciting.
yet, it felt... good. it's been a while that i felt good about programming. Keeping the momentum, i continue on with the lecture and implemented scene, memory pool, action handling, etc. Around mid-December is where my life-long nemesis appears: collision system. For years, i struggled to understand how engine handles collision. Like, i know how collisions are detected, but how do you resolve it? How do you handle multiple arbitrary polygon collisions? i pushed on regardless, implementing a simple AABB collision handling based on minimum overlap direction, plus a grid-based broad-phase collision detection. This collision system implementation is naive and is the reason i didn't bother with slopes. in the end, it works and that's what matters.
around this time is where the idea to make a game like Hannah and the Pirate Cave popped up. The grid layout somehow reminded me of that game. I thought that i could learn a lot if i can implement that game. Besides, i remember enjoying that game back then. So, if i make that game, i definitely can enjoy it! Hence, the vision of the project is set.
The First Year: Knowing When To Rest
when 2023 rolled around, i was chugging along pretty nicely. Every time i worked on it, there seems to be some kind of progress. This continued on from January until March, which sounds great, but i was starting to feel fatigue. Doing this in my off-time alongside a day job was starting to take its toll.
this scenario was something i thought about when i started the project. i did not (and still do not) wish to suddenly lose interest on this project or lose the drive and burn out on this. In some way, i had some shred of trust in this project that it'll be something. Thus, i had made a sort-of-a-promise to myself: it is okay to stop working on this for a bit if you are tired. There's no need to rush right now. i ended up taking a 1.5 months of break mid-March.
taking a long break like this does have a risk: i might forget things about the project and might take a while to pick the project back up, which may frustrate myself and indirectly contribute to burn-out. What i did to alleviate this was to think about the project occasionally during my break, jotting down ideas and improvements. Nearing the end of the break, i started with minor code improvements and no major implementations. This is so that i can re-read and understand the code once more. From there, i ease back into the projects. This was a good decision as i was able to get back to the project with little hurdle by the time May roll around.
The Happy Times
surprisingly, the progress from May to October was fairly steady. When i was not coding, i'm planning; when i'm done planning, i'm back to coding. There was like a new feature implemented every so often and tangible progress can be seen. It helped that my day job wasn't that soul-sucking and i was able to draw the boundary between work and life. i did slow down a bit during October because i wanted to draw an image. i'll post that here one day.
as the one-year anniversary approached, the drive grew stronger. i wanted to have something to show off my efforts for the past year. In some way, i wanted to celebrate the fact that a project lasted this long. Having a deadline to show something is good: it gives a cut-off time and forces me to make some decisions to get things moving.
i still recall trying hard to get the SFX system ready before the cut-off time. It wasn't easy and the stress induced was mainly self-inflicted. Yet, i did enjoy the process. i suppose having a deadline that doesn't determine life and death is okay from time to time.
in the end, i did have something to show... to no one. Oh well, it was for myself anyways.
The Detour: Raylib Slo-Jam
beginning of December of that year, raylib community was hosting a one-month long game jam. i have my reservation with game jam. i understand their intentions and goals, but i can't deal with extermely tight deadlines. i did them at least once (and did enjoyed them to some extent) but i think i reached a point in life where i really don't want to subject myself to that kind of stress. Plus, those would need a kind of commitment that i could no longer afford these days.
however, i am compelled to take this jam on, mostly to see how well the current engine/framework holds up and to measure my abilities making a game solo. i only attended to the jam in my off-time outside of work, so i only have like 2 weeks to make a game out of the 1 month time limit. The resulting game is Void Particle.
i did a post-jam write-up about this over here. Long story short, it was a good time. i managed to get a game out that is satisfying to me. It also revealed quite a number of shortcomings of the current engine, which means more work for me. Woohoo (in a good way).
you may play the game here.
The Months of Nothing
2024 rolled around. i was taking another long-ish break in January after the jam, before resuming in April. Something happened during this time that caused me to sort of lose the drive to work on the project for a long while. After the incident, the progress became slow and quite inconsistent. i could be working for like a week, and then stop for about a month and returning back later for a week.
this went on until August where life circumstances took a shift, where i could fully focus on the project for a bit. that month was the most productive i have been on this project. i was trying to make up for the lost time in the past months as much as i could.
after that month, my work went back to a more inconsistent state. It was also around this time when Cohost announced its shutdown. That announcement has led to the creation of this website. At this point, my attention is now split among developing the website and this project.
to be honest, i don't know if those months could have gone any better. Even now, i still have mixed feelings about those times. i am just glad the project is still alive at this point.
Where I Am Now & Where to Next?
in a way, this year isn't the best year (out of 2 years...) for me. i am glad that the project is still alive despite that, at least alive enough for me to type this out. Having this website does take time away from the project, but it does help in mitigating burn-out from the project.
at the end of all this, i did managed to get the game into a decent state to make it into a complete game. That would be the goal for the next year. i figure this project has gone on long enough. Thus, i am giving myself a deadline: release this game at the end of 2025. There are many things i want to implement in the engine; many flaws i would like to fix. These are not possible until i finish the game and move on. This is the reason for the deadline.
i hope next year will treat me well enough. this has been a little stroll though this project's memory lane. i want to see it to completion so that i can tell myself: Congratulations! You managed to finish a long project!. More importantly, i want to share this with others. Even if the outcome isn't great, i hope that doing something like this would inspire someone out there. (Also, this can serve as a topic to talk to others about). i learned a lot about game programming through this project and i have no intention of stopping here.
i think that's about it. Thanks for reading this all the way here. i'll see you next time.