Currently I'm playing around with the material system of Gnoblins. Many models in Gnoblins are recoloured dynamically to have the option to quickly add new colour variances. I wanted to add material which looks more like metal which isn't easy when working with handpainted textures only. I've come up with a system displayed in here:
As you can see, there are several materials displayed. For one I just recoloured the skin and clothes, or make the gnoblin look like gold or silver and play around with other effects.
Well, maybe a little bit. In my answer to this post over here, I mentioned, that I use HTTP as guideline to refer method/function calls in my game. I expected, that some developers will think that I'm insane, and this might be true to some degree . Still I had my reasons to go this way and I want to talk about this.
When you develop, you need to consider many aspects. Clean code, bug-free, performance all the things which seems obviously, but you need to regard many more non-functional requirements. Budget, time, maintainability and many more. It is often just too expensive and clearly unnecessary to write the best code ever.
Being the sole developer in a hobby project puts a lot of pressure on you if you want to approach the goal of finishing your game in your lifetime. I've learned,that easy, fast to code and maintainable code is a key-element to support a hobby project of this scale. One reason to add (fake)HTTP request to my game was the easy maintainability of it. I don't use the full HTTP technology stack, just the general syntax and it reminds a little bit of REST, still parsing the HTTP string seems unnecessary, and to be honest, there are better and faster ways to archive it. Additionally I use it only for gamelogic events, which are executed quite seldom. The main benefit and the first reason to add it, was to support multiple Lua VMs, but this could be handled in other ways.
Nevertheless, so it was my decision and I believed, that it would be fast enough in my special case to justify the usage. So, here are some performance measurements. I tested it with 100 active game entities and measured 24330 frames. The decoding function (written in lua) was called 94091 times, that is roughly 4 times per frame for 100 entities (~roughly the max number of active entities in a game session). That is the first proof, that it is called quite seldom. All the decodes used 0.09% of the total frame time (~33 ms total frame time). Considering that the measurement will cost some time(I think that a large chunk of the time is sacrified to query the OS timer two times per call) and that it is written in Lua instead of C++. The decoding is neither rocket science nor of rocket speed, something you should review if you need to call it more often. Nevertheless, the key element is, that this kind of processing is called quite seldom in my case.
Still, this is not meant to be a general rule. One must evaluate the context you are developing in. Are you coding your hobby-game at night and weekend or are you working on a top AAA title with whole coder teams working on single game parts ? Does your game need every CPU power you can get, or can you afford the luxury to ease your development time. With the right reasoning everything should get a chance, even (fake)HTTP request in your game ;-)
I've added a screenshot of the debug output of a single entity, as you can see, the whole entity behavior is saved in character attributes utilizing HTTP-syntax.
Posted by Ashaman73,
12 April 2015 -
We are still working on the art part. I've called the current goal Project 20, that is, integrate 20 different creature models into the game. In total we have currently 27 character models of different creatures (with up to 6 sub-categories), 20 of them needed to be textured,rigged,animated and integrated into the game. Well, art is always something to show something off, so here are some of the current models we are working on.
Doing art is somewhat cool and satisfying. When you are done, you are done. Either people find it good or not. Code is always difficult. You can't see it, only its effect, often you only see a small effect although you put a lot of effort into it and eventually you are never done with code, it will strick back with some nasty bugs in the future.
Nevertheless, here's a demon I have modelled and textured.
Here's a gorgon, the model is teamwork, the texture is painted by me. And finally a model and texture made by Gerog, my development partner I'm working with.
And here is an image displaying the different stages of painting the demon. Roughly 3 hours.
It is art time again :-) I'm working on the creatures you can encounter in Gnoblins at the moment. Currently there are almost 20 different creatures in the pipeline, most are still in the modelling state. But I've created lot of new blender templates for rigging certain types of models (like humanoid, quadruped etc.), a new texturing template and new tempaltes for baking and rendering models. The current pipeline is modeling->rigging->texturing->animation, all done in blender, even the complete texturing process. Here's a render of a golem I've almost finished so far.
The golem demonstrated the art guide we have developed over the time. The golem is one of the creatures I've created alone from concept over modelling and rigging to textureing, so by definition it is programmer art ;-) Nevertheless, I believe that it is a decent improvement over a simple ascii text in your common roguelike game ;-)