Tuesday, February 14, 2012

Snapshot 6 Changelog (and it's private)

The new streamer is working surprisingly well. I just put it to the test under some interesting test scenarios which I am going to describe soon in another post and it has proven both stable and advanced enough to handle stuff it was not designed for.

Still, it is too early to release it into the public and since this eat up most of my time I still didn't bugfix Snapshot 5 100%, so Snapshot 6 will be kept private. It is feature complete, but buggy and I don't want to knowingly release buggy software if it can be avoided.

Here is a screenshot with it:

This screenshot was done on a computer with and integrated cheap Intel GPU without any dedicated RAM. The new engine has higher requirements but it can just about manage to slug along on such low hardware. So the upgrade in requirements is minor. 

Actually, I would like to do an experiment soon. Model only 2-4 objects at the standards of (the end of) 2012, with a polygon count perfectly suited for the complexity of the object and 2048x2048 textures. Try the engine in first person mode and see how it looks. And how it performs. I'll try with an 8800 GT and a 540M GPU.

Here is the changelog for Snapshot 6 (I won't go into detail because I've talked about a lot of this stuff in previous posts):
  • Uses the second generation 3D engine
  • Graphics overhaul. The current level and the one bellow are rendered with high quality blending to create the illusion of a less cube based terrain. Most meshes have been fine tuned for for better visuals and better LOD behavior.
  • Up to 60 levels can be rendered.
  • Streaming biased LOD switcher implemented. The system uses some simple heuristics to try and prioritize changes that have the potential to create a better image, while changes that don't have such impact or only free up resources are pushed to the back. Item building almost two times faster.
  • Crafted items have quality ranging from poor to epic (when it makes sense).
  • Cleaned up and bugfixed the item description panel.
  • Quick navigation keys: press "]" to go to the highest level of the current map, thus rendering the entire map. Press "[" to go to the lowest level of the map, thus rendering only that level and the one bellow.
  • Trees are back. They are still too high poly and represent a massive performance bottleneck. Animations had to be turned off. You can toggle the rendering of tree canopies on or off with the "T" key. Turning them off offer a performance boost and can even help you navigate the map easier because canopies are quite large.
  • Implemented wall smoothing.
  • Fixed horrible screen tearing in full screen mode with vertical synchronization turned off.
  • Smoothed out jerky movement when scrolling or zooming. Actually, this effects everything, from time passage to animations, but scrolling was where it was the most visible. Currently bugged if vertical synchronization is on.
  • When in first person mode and the game window is not active the mouse cursor is no longer grabbed and continuously repositioned at the center of the screen. Furthermore, while the window is not active the game is paused and the game will display the last render it had without consuming any resources except for RAM.
  • Better terrain generation: wold is made out of random thickness layers. A layer is predominately a single kind of material but has random chunks of other materials inside. The system still isn't as sophisticated as the one present in the 2D version.
  • New containers: armor stand and weapon rack.
  • New furniture: wooden chair, table and bed.
  • Improved item interaction consistency. Placing block on top of items used to work, but placing items on top of blocks didn't. Now all items and block are considered to be in the same category, so you can replace anything with anything without having to delete something from a given location.
  • Zooming now works with numpad +/- too.
  • Mouse wheel scrolling support to the engine. Scroll with the mouse wheel to zoom and hos shift and scroll to tilt the camera in tot down mode. In first person mode you can control the camera FOV with mouse wheel scrolling. 
  • Introduced a new super safe API for common tasks. This new API is very slow but it checks for most inconsistencies and reports them. I started using this API for most interaction tasks that are not performance critical. This is a developers tool meant to keep the number of bugs low and as the engine matures this new API will be slowly phased out.
  • The "X" key now also deletes all walls in selection, not just items.
  • When starting a new map the engine will try to position the camera upon an interesting location with a clearing rather than randomly in the middle of nowhere. Alternatively it is capable of placing you on the highest point of the map. But most of the time it will just put you in a corner with a clearing.
  • A few extra options added to the launcher to control mip mapping and filtering.
  • Experimental: The game can now be compiled and executes correctly without having to modify the Irrlicht package.
  • BUGFIX: When replacing a block with a block of the same type but a different texture, sometimes visually the update would only trigger after a secondary block has been replaced.
  • BUGFIX: Placing new blocks would not always update the height map.
  • BUGFIX: Items would sometimes be created over the upper border of the map if the map was too high.
  • BUGFIX: Placing items at world geometry seems can cause visual issues and even a crash.
  • BUGFIX: When changing levels in first person mode the camera no longer behaves in a disorientating way.


  1. I think this tree animation problem is going to be one of the big ones you need to work out, assuming that your "dwarves" will be animated - it'll only get worse.

    You could have a seed object that has the vertices of a tree and only that one animates - you then apply these new positions to each tree, instead of animating each tree individually. You could say even have two or three seed objects with animation variation and apply one of the three based on cell position of the tree or some other fixed constant.

    1. Hi,
      I worked for a number of years on some of the early development projects, particularly but not limited to Sonic 3d on the Sega CD. As my right honorable friend mentions above it is common to run into these frame rate issues when animating multiple sprite entity's. On the Sega in particular we only had access to 2 mb of ram. Our innovative solution was to pre-render all animations then apply them in post-processing. I would recommend ms paint for this due to the high fidelity of bmp maps. If you have any trouble implementing method this feel free to drop me a line.

      Yours sincerely.
      John E Goodman esquire.

    2. DwarvesH DevelopmentFebruary 15, 2012 at 1:26 PM

      Thanks for the input guys!

      i have just hard coded both your methods, seems legit . ran into a bit of trouble with the animation seed technique, was a bit to resource hungry. However i have just run up some sample codes with the old ms-paint trick; worked a treat. I just have to prerender about another 40% of the possible permutations and we should be good to go with 50fps increase.

      In fact, i'm so pleased with your ideas i will email both of you a gift code for DwarvesH when its finished

    3. Wow, fantastic trolling there buddy!

      That was not me. See? My name is written in orange.

      So don't get your hopes up, Anonymous #1 and Anonymous #2. You are not getting any source code.

      Anonymous #1, you have good ideas. I'll post about it when I manage to improve animations.