Almost three month ago I left aside a game and decide to start a new one. This time it was easiest to accomplish the work because I started with the mechanics not the aesthetic or the “feelings”, so I would focus on the tangible and mesurable parts of the game and move faster to program them.
Program a game or a system
When you start any game, you need to ask yourself if you want to program a game or you want to program a bunch of reusable systems.
If you “program a game” you are going to do all the code faster and “duct taped” all the classes, scenes, etc. So it works for the porpoise of the game scope. This is the way of a lot of game programmers and It is a completed valid way of made games, indeed it is the most common way of made games. At the end you have a completed game. But your code will be hard to reuse in other games.
If you “program a system” you are going to made the code abstract and reusable. You will be sure that all the “game specific” features are implemented as inherit from the system. This will take more time, and you are going to spend more time decoupling and isolating the system. At the end, you get a reusable system that you can use easily in many games. But you spent more time in getting a completed game.
The sweet spot of balance
You must go for both the game and the system. Not all your game must be a isolated abstract system but you must created the systems that you know that will be useful in future games. The experience is the only way to know this sweet spot of balance.
In my case I have a lot of experience programming games and dissecting other’s games so I am aware of the systems that I saw many times over and over, so I knew I will need this systems in future games, so I made it as a system.
For example I programmed a “config game” system that are a several UI elements that has the code to change the game configuration like change the language or change between fullscreen or windowed, etc. This system will allow me to create quick configuration screens and save/load the configuration from disk
As a “game mechanic” system I programmed the inventory system, a generic system to store rectangular items in a grid with a minimum functionality from which I derived a more specific loot inventory for the game.
At the end, I have several systems that allow me to made new games quickly, and that is a big step forward.
The next steps
Now is the time of the brave. I must start to show the game to a broad audience to get real feedback and, at the same time, I need to improve the visual and audio. It is the time for PROMOTION. And that is very afraid movement.