Skip to main content

Posts

Showing posts with the label development

Item's Icons

"What is that ugly mess?" Well, it's a test for a dynamically colored set of items. The original icons were taken from here , a great source of black and white game icons. Very useful if you're planning your project and need some stand it art. The red channel is the grayscale image, the green channel holds a mask for non metallic, non-colored sections, like rope or bare leather. The blue channel holds a mask for dynamic colors. The masked areas can have their input adjusted by a three channel input (RGB) from a material, to control hue, saturation and value. This gives a wide array of different colors meaning that no two items generated by the item generation script should look identical. Here's what they look like when passed through the shader: Ok, still a bit of an ugly mess... I think I need to start with better material than a faked hightmap from a 2 bit image. :) Honestly, I think 2d art is my worst area. I'm probably just going to move ...

The pits!

I added the possibility of pits or water to the dungeon yesterday: I also added some debugging tools to reveal the map on command. I noticed a room sometimes isn't connected. I think it has to do with adding rooms manually. I'll sort that out as soon as possible. I also have been working on item generation. Sample output from the equipment generator: Perlmurite armor Iron man-trap Broken, cooked eggs Brass handbow Feathered clothes Hollow, corroded, copper hatchet Occult, rare, gyium-leather sandals Rudde-leather cape Oil stained, white-copper ring Enchanted, brewed meat Brewed medicine Perfect, gyium-leather armor Awesome, composite, brass handbow Ivory mace Magical, akkadi-iron greaves Fur choker Old, haldiris greaves Extended, gyium-leather leggings Magical, iron hatchet Magical, perlmurite treasure Light, bronze, narrow hammer Animal-hide shield Occult, gyium-leather belt Blood stained, grubby, iron throwing-axe Magical, gold coins Ruine...

TOTDD 2017 Video Diary number 3

Another video diary can be viewed here : This shows at least part of the screen layout. I'll be working on the inventory and UI next. You'll be able to drag and drop things right from the UI to the viewport.

Level generation types.

I've now narrowed my level generation methods down to two. Previously I was also using randomly placed rooms and BSP trees, but with one the corridors were too long, and the other suffered from terrible predictability. The two I'm using are (1) cellular automata and (2) collision based room insertion. In the maps above the D and E maps are type 1, a kind of cavern like level. There are several inputs like coverage and smoothness. They basically generate these two extremes, very open, joined caves, or sparse tunnels. I may add double thickness corridors to the (E) map as otherwise they are annoying to play (no room for maneuver).    Type 2 maps start by piling up a bunch of random rooms in the center of the map. Then they run collision detection to push them apart. (A) is a map with quite high padding value, which places the rooms far apart. (C) is the same method by a padding value of 1. The rooms are quite close together. Corridors are short, which is a good thin...

Map screen designs

I've been working some more on the map window. Right now you can only see the base, it doesn't show items, enemies or even doors on the map yet. These would be decals. In the top window you can see the modified result of last night's tile based map. It looks good but there are some visual artifacts related to the problems I encountered yesterday, and as well it takes much more code and time to calculate. The second window uses a cheap trick to fake an beveled look from a smoothed version of the 32x32 map. It uses black to mask unexplored areas. Finally the third version is meant to look like a had drawn map. I'm using a cross hatching texture to distort it and unexplored areas are shown as blank map paper. There's going to be a mechanic in game where you need to use some paper every level in order to activate the map for that level. From there it will fill it in automatically. Paper will be pretty rare so it might be worth keeping it safe for the more com...

Problems with map display...

I spent a total of about 4 hours trying to find out why my map wasn't displaying properly. Turns out there was nothing wrong with my code, or my shader, the problem was in the imprecision of the floating point numbers used to scale the UVs and the default use of sRGB color space by blender. (top left) This is similar to what I was getting, obviously not right, but I couldn't figure out why.   (top right) Using data from the map each square is given a red color from 0-255. (bottom left) There are 16 possible arrangements of tile and the red color offsets the UVs of that tile by a set amount. (bottom right) The rather unimpressive final base result. When scaling UVs Blender avoids imprecision in floating point number by just rounding up to a more suitable number, so 0.0625 becomes 0.063. This is fine usually, as you don't really care about pixel perfect placement in most applications. But when your total image is only 32 pixels across it can cause issues as 1 divid...

Viewports

Treasures of the deep dwellers is not a triple A game. It's going to be pretty old fashioned, with a small viewport and a map on the same screen. Much of the rest of the screen is going to play host to the UI which will have a lot of the stuff you need all on one screen. I love the great graphics of modern games like Legend of Grimrock, but the blender game engine isn't really up to the task of making games of that caliber. I also don't have that much time to devote to asset creations, meaning my game simply wouldn't look as good even if I was as talented as the guys from the major studios. Anyway, after working on the viewports I found happily that it greatly increases the performance of the game. Rasterizer usage is way down, and the viewports mechanism also allows people with slower computers to reduce the resolution of the viewport without changing the main window. If you wanted you could ramp it way up too and enjoy my dated graphics. After a few tries I ...

Dynamic Item Generation

This week I've been fleshing out the dictionaries for my dynamic item generation system. I made a few changes since it was first designed, like simplifying the materials and making them less exotic. Now there are a lot of normal materials (like COPPER and GLASS) and some exotic or magical materials. Items are generated with a number of attributes. Which ones they get depends on the type of object, its quality and its material. Here are a few examples: I think it's going quite well so far, though I'm having to generate a lot of items and check their attributes so I can fine tune the dictionary rules. You can see the "CLUB$1" up there, which is a rare, ivory, toy club. I think children's club would be a better attribute than toy. That sounds strange in some cases. There's a ugly, copper long-sword, which is both blunted and corroded. Items can have several damage attributes, depending on their quality. As they get used in game and pick up...

2017 TOTDD Video Diary 2

For anyone who's interested in the newest version of the game you can see the current video diary here : I'm very happy with the atmosphere of the game so far. I feel like it's something I can work with. I've got a lot of ideas for the game, but for now I'm just going to keep slogging away trying to get a working gameplay demo. The schedule so far is: 1. Item generation. 2. Basic player stats. 3. Inventory management. 4. Moving items between the screen and the inventory. 5. Using items to attack and trigger events. I'm going to be working a lot with messages this time around. That should clear up many of the hurdles I was facing in past versions of t he game. One problem I had before is that I had to complete both player mechanics, and enemy mechanics simultaneously. A player attacked a monster causing damage directly, the monster had to process that damage and so on. With messages, I can just send a message and forget about it. It doesn...

Revisiting Treasures of the Deep Dwellers

I ran in to some serious problems with Vinland 1936, so I'm shelving it for now and revisiting an earlier project. Kind of. Treasure of the deep dwellers was a 3d team based roguelike. Some ways it diverged from standard roguelikes is that it had multiple player characters (a team of 4), real time game play (not turn based) and it had 3d graphics. Unfortunately it was a bit more than I could handle. The new approach is an attempt to simplify the project so that it can function more like a traditional roguelike. A big problem I had before was keeping track of the 4 agents. They tended to run off or get lost. I had to calculate line of sight and map reveal from all 4 agents. Now I've switched to an "Eye of the Beholder" type setup, where the whole team is contained in a single tile. Likewise monsters are represented in mobs of up to 4 agents in a single tile. Other benefits of this type of gameplay is that you never need to see the player's characters (...

Telling a story; Creating a Compelling Narrative.

Telling a story; Creating a Compelling Narrative. In this blog I will talk about my own recent brush with story telling and go on to talk about how tools from creative wring can help you to better author the narrative in your games, whether they have a traditional linear narrative or a procedurally generated interactive narrative. Narrative and structure in traditional fiction    last week I started writing a story set in the world I'm developing for my game Vinland: 1936. I hope the story will help me to flesh out my game world and develop my own expanded universe which will be a good place to set my games in the future. After about a week of work, on and off I've progressed the story to outline stage. For each character thread I have half a dozen chapters which plot a course through the events of the story. Each thread is told from the perspective of a different character. Actually I started writing as soon as I had my outline, but I've since gone back an...

Diablo Trees

After reading this post on a famous game art tricks blog I decided to have a go at making 2.5d trees. Here's my test trees so far. I think they look pretty good since they are only about 100 triangles each and a single 512x512 texture. I've also used a simple fake volumetric trick with the leaves, using a spherical normal map for each clump to make them shade as if they were 3d. I'm sure I can cut down the number of triangles and do some more tricks with the textures to get them to pop a bit more. The real problem is the clip alpha, that's what makes them look more low rez than they are. EDIT: I added some random noise to the edges of the leaf cluster's alpha and it gives a much more detailed effect:

General Principles for Reducing Logic Overhead (Part 2)

In my post yesterday I forgot to mention a few things which would be even more helpful when trying to make your game run smoother on low end machines. Firstly I forgot to mention states. Probably the biggest improvement you can make to your code if you're not already using them is to add behavior states. When your agents are doing an action, that action should be a separate state. They should concentrate only on that state, all other calculation should be avoided.

General Principles for Reducing Logic Overhead.

Today I was reading Blender Artist's Game Engine Forum when I came across a post about very high logic overheads. Of course slow game performance is a real problem with a lot of indie games, and low frame rate can easily be enough to turn someone off your game before they even really get started. It's an important issue for indie game-devs and hobbyists alike. [LAG=game over] So I decided to write a blog post about it. First of all I should point out there are lots of areas of overhead in a game. One area that often causes lag is graphics, a game engine like Blender is still using quite old methods of rendering and lighting so you can't expect too much from it. There are easy ways to reduce rasterizer overhead which I think I've talked about before many times over at Blender Artists. The problem the BA poster was having though was specifically with Logic, i.e python scripting and the Game engine logic bricks. With games developed by hobbyists it's comm...

Vinland 1936

What have I been up to this month? Well you can see it in a couple of development blog videos, here , here and here . Vinland 1936 is a game I've been working on (on and off) for about 3 years. It is somewhat based on the old Nirval interactive game, Blitzkrieg; I hope you've played it since it is one of the best games ever!!! (IMHO) Blitzkrieg was a real time tactics game. You didn't build a base, or spawn units. It wasn't about rushing the enemy. You got a small number of troops and vehicles that could be replenished or repaired if you had access to a supply base and the right supply trucks, but couldn't be replaced if lost. Once your vehicles were destroyed and your infantry killed you were finished. You couldn't just churn out some more from your factory and have another go at rushing the enemy guns. This made you invest a lot in each of your units. They really mattered. It was also procedurally generated. Each mission (except for the historic...

Reboot / Remake / Restart

Although the roguelike project was going well I had a few issues with some parts of the code, and the sheer size of the project was something I could see stretching away in front of me for years with no guarantee that people would actually want to play it when it's finished. It's time to try something a little less ambitious. I'm going full rogueLITE! Using a lot of the code from the roguelike project, I started making a more limited game. There will be a single character, combat will be more arcade like, there will still be a chance to upgrade and develop your character's stats, but they represent only a single class and have fixed equipment. Introducing the Lady Grenadier. I've got a fun character, an interesting setting and an exciting story lined up. It still utilizes my low poly style, but things are going to be a little more cartoony. Game play involves mostly chucking bombs at the enemy. Bombs away! But there's also a lot of platformin...

Materials.

I'm currently working on the inventory and items system. I've got a good idea of how it's going to work, and I've made a few test demos in blender so I know how it should fit together, but one area I had some trouble with is how to make the items more interesting. I don't want to have just sword +1, necklace of AC +5 etc... I want items to feel like they are unique. So I'll be designing a few base item types and then having them generate some qualities. [Real weapons have character!] The first quality is status. An old broadsword, or a rusty helm. Or spoiled meat. These will be limited by item type, so you don't end up with rusty meat or rancid chain-mail. They add a modifier to elements of the item's stats, either a positive or a negative modifier. The second quality is wear and tear. This is more dynamic since it can change, as you take or deal damage. This might not be seen in the item's name, but rather in a status bar or something. ...

NPC commands, map reveal and Inventory ideas

This week I did a whole bunch of work on commands, so the AI players can be better guided by the player. I've also added speech above the NPCs so they can respond to your commands and you can get additional info about what you're asking them to do. For example if you ask them to walk, it says "Look out for secret doors and traps!" Which is what walking is for. [You can also see the new doors] Some other improvements: If you push against an NPC (because of being stuck and wanting them to move out of the way) you will send a message to all the other NPCs to increase their distance from the player for a short time. This stops the situation where one NPC further down the line is blocking but is not too close to the player so doesn't know they need to move. You can urge them to attack or follow you. This will set their follow distance and their engagement distance. You can also set this independently for each NPC. You can ask them to wait behind. Again you...