Wednesday, May 20, 2020

Bleaktide Part 5: Gameplay Features

Note that this is part 5 of a series. In this installment I ramble on about miscellaneous gameplay features.

In this post I'll showcase a few gameplay features currently present or in progress. The screenshots are too large to fit at full size, so click them to view the full-size versions.


Dev World

Because the actual game worlds are quite large and filled with so many objects, loading them takes a while. It's not that long but when you're trying to repeatedly tweak new features you want to able to iterate quickly.

To cater for this I have a separate development world with a very basic background, containing a collection of game objects that I can enable or disable as needed. Similar scenes exist for testing game characters, abilities and gear in isolation, but 'dev world' is the one where I spend most of my time.


This is my 'dev world'. Currently it has the potion cauldron, some lore books, the slot machine, some ingredient plants, treasures chests, livestock animals and town guards enabled. Usually I only enable whatever I'm working on at the time, but I enabled a fair bit here just to demonstrate.



Slot Machine

Occasionally I'll lose focus and get side-tracked on some spur of the moment wild idea that doesn't really contribute to the core game. Although I kick myself for spending so much time getting side-tracked I do think that these arbitrary features end up being interesting mini-games that add character and flavor to the game.

The slot machine was one of these. I spent about 3 or 4 evenings implementing it (it took longer than initially anticipated). The slot machine allows you to spend gold for a chance of winning gear and items.







Unlike your typical slot machine game I actually modelled and simulated the individual reels, like an old-school physical slot machine. It's bright and flashy and sort-of at odds with the grim theme of the game, but that's part of it's charm.



Initially I only provided the UI at the bottom to interact with it, but when my wife played it she kept trying to interact with the coin slot and handle directly, so I made those interactive as well. It gives it a more tangible feel.


Part of what I like about my theme is that it combines dark and gritty with silly and comical. You'll be walking through an ominous graveyard and then come across a dancing skeleton who gets a fright when he sees you. After leaving the graveyard you might stumble upon this bright flashing slot machine. It admittedly feels a bit incongruous but it does add a strange and unusual feel to it all.



You win rewards if you get 2 or 3 matches. The rewards are dependent on the icons matched. For example here there are 2 gold pouch matches, so the rewards are gold / treasure related. You can insert up to 3 coins, with more coins giving you more rewards.



Reagent Harvesting

Reagents are ingredients that you harvest from certain plants that allow you to craft potions. To help you differentiate between reagent plants and general background plants, the ones that can be harvested are made more prominent using particle effects and lighting. Once you harvest them the special effects are disabled, making them blend into the background like ordinary plants.


The Crypt Lord has stumbled upon a wood fungus plant, which will allow him to harvest wood fungus to use at the potion cauldron later.


Organ Harvesting Area

The organ harvesting area isn't an area where you actually harvest organs (I thought that would be a bit too disturbing, although I'm still open to the idea). It is a quest area where women and girls from the town have been captured. You need to discover what happened to them. You find them in cages and will eventually need to rescue them. Right now I've not actually implemented that part, so it feels quite gloomy because you see them and hear them crying but can't do anything about it.

The black market merchant you interact with in the town trades in organs, so it makes you wonder whether he is involved in this.


The organ harvest area has women and girls trapped in cages, with tables containing various body parts nearby, hinting at their eventual fate. I put in a fair bit of detail though you can't see it here. There are food plates and urine buckets near the cages. I put in a lot of effort creating the haunting ambient sound effects of women weeping and pleading in despair.


Potion Cauldron

The potion cauldron is where you craft potions using reagents you have collected. I have tried to make it very simple to use, while also trying to give it a tangible feel (as if you are actually interacting with a cauldron). It actually shows the ingredients dropping in and plays a rewarding sizzling sound and fancy liquid splash particle effects.


In my initial pass you can only craft rare, special potions. These are quite valuable (whereas the ingredients you use to craft them aren't worth much by themselves), making it worth exploring this feature. However, in retrospect I think it may be a good idea to allow the player to craft simple health and mana potions too.


Rune Forge Area

The rune forge area is not actually implemented yet, but it will be where you can use mined items (items like ore and crystals) to craft 'runes', which can be slotted onto armor and weapons to make them more powerful.

It's still a bit unclear to me exactly how this feature will work so I can't say much more about it right now. Hopefully it'll be splendid!


The Crypt Lord standing outside the Rune Forge Area, wondering why the hell he can't actually do anything here yet. I provide several shadow quality options with the high quality options having most world lights flicker and cast shadows. The Rune Forge Area showcases this quite nicely.



Lore Books

Lore books are one of the ways in which I expound upon the lore and history of the world. They are typically present near dungeon entrances to give some background information. Occasionally they are also present deep inside dungeons, telling stories about heroes and villains you'll encounter later.

An old friend, Matt Penney, offered to provide some voice acting, and I took up his offer for one of the lore books. I'm very happy with the results and am hoping he'll be amenable to providing more. Here is a link to the sample:



This rhino fella is standing next to a lore book.



Arcane Stones

These mysterious artifacts serve a purpose that not even I know yet. They'll probably give you some boon or buff. The reason I'm still undecided on what to do with them is that you already have so many skills, abilities, brews and potions that give you buffs. Yet another buff-giving item feels inconsequential, so I'm still mulling over it.



What the heck does this thing even do? Not even I know.



Abilities

I've divided character abilities into a set of shared abilities and class-specific abilities.

Shared abilities are things like 'dash' (which allows you to sprint for a while and navigate through the world more quickly) and 'illuminate' (which summons an orb of light to illuminate dark areas).

Class-specific abilities are obviously thematically related to the specific character. I've only got about one or two per class at the moment, and some of them are still works in progress.



The Dark Templar can summon the 'Shield of Ghaz'kar', which provides protection for him and any allies standing within it's sphere of influence.



The dash ability allows you to briefly sprint forward. It has a low mana cost and cooldown, so you can use it often if you're trying to move through an area quickly. It's also very useful for escaping hordes of enemies when you're about to die.



Color Schemes

When showing the game to friends and colleagues I often get conflicting advice. Some want it more colorful, others advise making it grittier. Some like outlines, others don't. Some like intense bloom, others hate bloom and want it subtle to the point of almost not being present.

To deal with this nightmare I just chose to make all of these configurable via the graphics options. Outlines are optional, bloom intensity can be specified by the player, and there are several color schemes available (normal, grim and colorful).



This is the grim color scheme. It is high contrast, low saturation and has a sepia effect (yellowish color grading). This particular image may not have been the best demonstration since there is already a lot of orange and yellow present so it exaggerates the sepia a bit.


Multiplayer Options

I started work on supporting multiplayer right from the start. It worked well at the time with the limited feature set present, but unfortunately, in trying to get the game fleshed out I've neglected it for a while. Nevertheless support for multiplayer features is somewhat present.

My initial intention was to have an MMO feel where you'd explore the town and other players would be exploring with you. I may still go this route, but if it proves too complex I may fall back to you exploring alone but then forming a raid party which invites other players to enter multiplayer mode to raid a dungeon together.



The option to form a raid party is only partially implemented. One of the things I want to cater for is having experienced players assist newer players in leveling up. One of my frustrations with MMO's is that even if you want to play with friends, the experience gap is often too large and they're forced to create new low-level characters if they want to play with you.

Sunday, May 3, 2020

Bleaktide Part 4: Game Development Process

Note that this is part 4 of a series. In this installment I'll start discussing some of the more technical and design related aspects of the game.

Up until now I've discussed the mood and theme and mostly just posted screenshots to give an overview of the game. In this post I'll begin to incorporate some technical game development aspects into the write-up, though I'll try to keep it brief and not get bogged down in detail.

The game is being developed in the Unity engine using the C# language. I refer to characters as 'units', mostly because some of the code I brought in at the beginning was re-used from one of my previous real-time strategy games (where individual characters are generally referred to as 'units').

There is a massive amount of logic associated with each unit, and not all units share all logic. For example, villagers don't have abilities, playable characters aren't autonomous and don't require 'brains', and monsters don't hold conversations. So my unit framework consists of a core Unit class and then a collection of unit component classes, each of which handles a specific aspect of that unit's behaviour. Below is a screenshot showing all of the components attached to the Crypt Lord prefab.


A list of the components attached to the Crypt Lord unit, one of the playable character types. Each of these is a single C# class responsible for one aspect of the character's overall behaviour.

Monster Setup

So far there are about 22 monster types in the game, though only about a 3rd of these have actually been implemented (the rest cannot be used yet). There is a fair bit of setup for each monster type -- their materials and textures need to be modified to fit the common look and feel of the game, their animations often need to be setup and tweaked, and there is a lot of common unit setup (as illustrated in the image above) which needs doing before they become operational.

Unity has an old legacy animation system, and a newer, more powerful animation system called Mecanim. Nowadays most character models are setup to work with Mecanim, but occasionally you'll encounter models that still rely on the legacy system. I wrote an animation system that wraps this functionality so that it doesn't matter which format is used.



This is my monster animations test scene. It allows me to transition between animations using the buttons at the bottom to ensure that transitions are all smooth and that the animation speeds / durations are to my liking.



Unity's Mecanim animation framework relies upon state graphs called 'animator controllers'. Whilst powerful, they require a lot of work to setup and it can be difficult to get the exact behavior you want, especially when you have dozens of characters to setup. Over time I decided to forego the use of animator controllers and to rather handle smooth transitions between states using my own framework.



An example of a Mecanim animator controller graph. They can get much, much more complicated than this.



I prefer a simpler approach where I decide beforehand all of the possible animations characters will need (and the settings required to get the desired behavior). I won't go into detail, but a screenshot of the setup panel should give some idea of what I mean...



This is the animation setup for a monster called a 'Jungle Durg'. It uses the legacy animation system but setting it up for the modern Mecanim system is identical using my framework.



I'll just throw in a screenshot of a few more monsters to pretty this post up a bit and not bog it down with too much technical information. Click the image to get a zoomed in few.



Monsters behave in a pretty simplistic, predictable manner at the moment. I may expand upon this aspect and introduce more complex behaviors later, but for now the system I have in place does the trick. Each monster is controlled by a class called the 'Monster Brain'. It handles things like checking whether there are any enemies in sight or whether it can hear anybody.

It has a vision arc in front of it that allows it to detect you at a distance if you walk in front of it. However, monsters have a limited hearing range and so you can sneak past them from behind if you're careful.

Some monsters are cowardly and will run away if it looks like they're going to lose a fight. Monsters will also attempt to rally nearby allies to come to their aid.




These are the settings currently available for setting up a monster's 'brain'. Still pretty simple at this stage but it does what I need it to.



Monster Combat

Engaging in combat with fearsome creatures is, of course, a core part of the game. Slaying them gives you valuable experience points and loot. You'll often find yourself surrounded as monsters rally allies to their aid and so you'll need to rely on your abilities, potions and brews to buff yourself and deal additional damage.

The montage below shows the Dark Templar using an ability called the 'Shield of Ghaz'kar' to protect himself (and nearby allies if any were present) from the Roach Khan about to attack him.







When monsters are slain they can potentially drop loot. To some extent this is randomized, however there must also be some designer input into this process so that the items they drop are thematically relevant (and it's especially important for quest related items). Below is an example of my setup for specifying the list of items a monster can potentially drop.






I think I'll call it at that for now, this post is getting long. I'll be sure to include more technical information in future posts. In the next installment I introduce some of the gameplay features I'm working on...


Friday, May 1, 2020

Bleaktide Part 3: A Tour of Silverglade Village

Note that this is part 3 of a series. In this installment I take you on a tour of Silverglade Village.

Silverglade Village is a central hub where you can talk to townsfolk, collect quests and trade with merchants. You start the game at a wagoneer camp just outside the entrance to the village.



These foreign guards at the wagoneer camp don't speak your language and are of a grumpy disposition. Attempting conversation tends to agitate them. You can even get achievements for irritating enough guards.




The roving wagoneers aren't popular with the residents of Silverglade. Bunco the Shark is the first general merchant you'll encounter. He's a rogue, but not the charming lovable type.



There is a lot to do in the village and so one of the first things you're likely to do is to find and view the town map. There are various map types available to let you get your bearings and to give the world a sense of presence and permanence.





Oh looky, it appears to be a map! I wonder what will happen if you interact with it?


And there it is, a top-down view of the village and the surrounding dungeons. This is very much a work-in-progress and will likely be replaced. I basically took a screenshot from high above and then used Photoshop filters to try make it look like a painting. It's passable for now, but not great.



The villagers aren't always on the best of terms with one another and are prone to gossip and slander. Speaking to them allows you to learn more about the world and its history, though I suspect some players will simply gloss over the conversations (and that's perfectly fine). Some villagers will request your help and offer you quests. Others will happily trade with you.





This young rapscallion may not be well-mannered, but he's an amusing little chap.




The armor smith and weapon smith hang out at the smithy area near the centre of town. It looks like the Shadow Mistress is trying to flirt with the poor armor smith but that's not actually a feature yet.


There are various graphics options which can significantly modify the look and feel of the game. I'm not sure if I'll end up exposing all of the options since it may be overwhelming for players. Nevertheless, you may notice some images looking darker, brighter, gritter or with more glare.




Oh look, it's the town portal! If you're deep in the bowels of a distant dungeon but need to return to town to trade items and clear out your bag, this is where you'll pop out. The bloom option was set to extreme when I took this screenshot, hence the overwhelming blue glow. I kinda like it, but I suspect most prefer a subtler look.






Aw, she's an animal lover! Just as you can get achievements for harassing enough guards you can also get some for interacting with enough animals. If you look carefully you'll notice a big, juicy dung patty on the ground behind the bull. How revolting!



There are numerous treasure chests scattered around the village and its outskirts, many of them well hidden.





There are collectible items called 'skull doubloons' that allow you to be revive as a ghost at your current location when you die. However, if you run out of skull doubloons you'll be forced to endure the inconvenience of being revived here at the Silverglade graveyard.

That's enough of Silverglade Village for now. I have a bunch more screenshots but want to keep these posts fairly brief so I'll save them for later. In the next installment I'll discuss some of the development process and some of the technical aspects of the game.

Bleaktide Part 4: Game Development Process