Localization, a save and load system, encryption. So much work that is not visible to the end user.
I sometimes underestimate the work that still needs to be done. Just when I think I see the end of the tunnel, a new subsystem needs to be programmed.
A collision detection system that I programmed early on
I love it though. I love the intricate things I need to think about, the way I have to carefully plan out every system so it not only works well, but is also easy to come back to later.
Making a game from scratch is a long and tedious journey, but it definitely makes me feel like you can program anything. Not because I feel like an expert or anything, but because I experience time and time again that I tackle complicated problems by logical thinking and perseverance.
I solved complex challenges that frightened me by patiently trying out different things and reasoning logically. Experiencing this again and again, really boosts my self-esteem as programmer.
I read a lot of different advice on programming your own engine. Most of it boils down to the question: "What do you want to gain, doing this?". And I agree, this is the question it is all about.
If you want to make a game quickly, don't do it. But if you want to build your skills as a programmer, and make a game in the process without a hard time limit, go for it!
It will surprise you how much there is to a game engine. Initially I thought it would be something like a renderer, save/load system, physics system and sound system, and that would be about it. But boy was I wrong. I only scratched the surface.
Localization, Tiling, Scene managing, Animation, texture managing, sprite managing, spritesheet managing, a GUI system, Math and geometry utils, the list goes on. There is no overestimating a custom engine, I learned that pretty quick.
Parallax background before I created multiple layers of stars moving at different speeds
Yes it is much easier to pick up Unity3D and not even have to think about most of these systems, but there's one massive advantage that Unity3D, or any other engine for that matter, cannot give you, and that's transparency. There is no part of my engine that I do not understand.
Any part that was incredibly complicated has been programmed and sufficiently documented by myself. I know exactly what my engine is doing, when it is doing it and why.
There is no black box in the game. When I find an issue, it always comes from MY code. If there would be an issue in a black box, you're screwed!
No disrespect to the commercial game engines of course. I programmed my first games in Unity3D and I'm glad I did. I would never kept programming games if it would be this hard.
Commercial engines do the tedious and complex stuff for you and leave you mostly to the fun parts.
I just wanted to know how it all worked, and I also wanted a non-graphical engine to program my game in.
I'm glad I took the path I'm on and I'm exited to keep working on this project.
If there is one lesson I learned until now, it's this:
There is no school like experience, so don't be scared to follow your curiosity and remember to have fun in the process!