While working on the particle effects for the lava, one of the Terrain Features of the Fire Level, I was faced with an odd problem that, at first, I attributed to the physical engine that manages the particles’ behavior: the particles were lining up on the screen, always in the same way.
It took me some time, but I finally realized what the problem was: the Random Number Generator (RNG).
During the latest developments I had some problems to resolve that arose also, among other things, thanks to the growing complexity of the project. In particular some of them were:
- Offset of lights when linked to objects,
- Offset of animations when different frames are of different size,
- Growing bloat of the offset management code,
- Input management among the various widgets.
The rule should be “release early, release often“, so this action was long overdue. Now you can take a deeper look at the development of our game and maybe take a laugh at the disorganized and amateurish mess that is my work, yay!
While I have studied a bit of game development in my free time there are many facets that I have never touched. This, united with the fact that I am not a professional developer (even if I have worked for a bit in R&D at a big company, something that at times still happens), means that I often have to learn by improvisation.
Do not get me wrong: even if I naturally learn more and faster by direct experience, I firmly believe that you have to study – hard – to obtain a good level of skill in any form of craft, but there are certain thresholds that you need to overcome in different ways that only studying, unless you are a genius: one of them is by experience, another one is teaching what you have learned.
Lately I was tinkering with the Event Manager. The Event Manager, or Dispatcher, is a software module that manages the game simulation. You can think about it as an ordered queue of actions: when someone (the player or one of the AI controlled characters) do something they send an event to the Event Manager, like “move me left” or “cast a spell to a target”, and the Event Manager will place the action in the correct order and will execute the action accordingly, by acting directly on the game world.
After the first art overview by Daniele I wanted to share a few technical details about the game:
Programming Language: C# over mono. I find C# a very nice language, less idiosyncratic than Java, more than fast enough for an indie game without millions of objects and particles flying around and very well supported (I would have chosen D if not for the lack of good and complete IDEs).