One is that the developer doesn't really want to ultimately write a game.
Creating the assets needed for a game, as an example, can be daunting. Implementing high scores, audio, saving game state.... There is a lot of work to create a game beyond the rendering part.
Or the developer is intimidated by the more qualitative nature of the "game part" of the game. The engine can be measured in FPS, etc. How do you measure how fun the game is?
A recent approach I took was to write the game "firstmost" — the game engine was a necessity to realizing that goal. FWIW, I used SDL to create a kind of sprite engine. The "engine" was bare-bones but allowed me to recreate a shareware game of mine for Steam.
After the project was done I began a second (sprite-based) game by first moving over the same game engine code. But this new project required I extend the engine (there were new "feature requirements" unique to this new game).
In this way the engine can evolve from project to project, but never becomes a means to no end.
(And if you do it right, you ought to be able to pull the engine back into the original project with a minimal of refactoring.)
Maybe I'm just suggesting something that everyone already knows.
I have a different theory. Making your own engine is a way to turn the enthusiasm I have now into something productive now.
If I want to make a character jump in Unity I need to familiarize myself with Assets, GameObjects, Cameras (don't forget the CamRotate component!), C#, Rigidbody and Colliders. My hunger for programming has turned into homework. But if I make my own engine I have more control between where I am, where I wanted to go, and what do I need to do in order to get there.
It is also probably a waste of time as I'll solve over and over problems that the game engine has been refining for decades. But I definitely see the appeal.
Isn't that a special case of the Inner-platform effect - writing an X is boring, so create a platform for creating X-like applications. Of course, this can be repeated ad nauseam - to the level of "general-purpose tool-building factory factory factory"...
Your game needs sprites, so you could write code that loads the one graphics format you need at the 2 or 3 sizes you need. While doing that you decide it looks hacky so you add support for more formats, better scaling, ... suddenly you have gone from doing that one thing your game needs to something that supports everything every game on the planet might need but usually doesn't. By the time you have done that for every system in the game, you now have an "engine" but are burnt out on the project.
What is that? I have a few theories.
One is that the developer doesn't really want to ultimately write a game.
Creating the assets needed for a game, as an example, can be daunting. Implementing high scores, audio, saving game state.... There is a lot of work to create a game beyond the rendering part.
Or the developer is intimidated by the more qualitative nature of the "game part" of the game. The engine can be measured in FPS, etc. How do you measure how fun the game is?
A recent approach I took was to write the game "firstmost" — the game engine was a necessity to realizing that goal. FWIW, I used SDL to create a kind of sprite engine. The "engine" was bare-bones but allowed me to recreate a shareware game of mine for Steam.
After the project was done I began a second (sprite-based) game by first moving over the same game engine code. But this new project required I extend the engine (there were new "feature requirements" unique to this new game).
In this way the engine can evolve from project to project, but never becomes a means to no end.
(And if you do it right, you ought to be able to pull the engine back into the original project with a minimal of refactoring.)
Maybe I'm just suggesting something that everyone already knows.