Hello again, and welcome to the 9th devlog for Ardenfall, the open ended RPG game. A large chunk of the additions this time around have been rather technical tool implementations, as opposed to simply being gameplay features. I’ve decided to split this post into two parts – gameplay, and technical.
Blocking and Parrying
A few features have been added to the combat system: mainly blocking and parrying. When using a melee weapon, you can block different attacks, which simply acts as a percentage reduction on damage. Parrying, or rather blocking at the right time, often results in the attacker being stunned or staggered. This completely stops any damage, and lets the blocker go in for some damage.
Weapon Speed + Katanas
I’ve added weapon speed to melee items, which affects the attack animation speeds, which is a nice addition. I do plan on slowly adding new animation types for the different weapon variants, such as dagger versus longsword versus shortsword, but having variable animation speeds is a good touch.
I’ve also added a few katanas, which naturally have lower damage but higher speed! They’re quite fun to play around with!
Lots of small features have been added – these are all mentioned in depth in the technical segment below, but I also wanted to mention some here:
- NPC’s can have hand-built faces: While generic npc’s have randomly generated faces, important characters can have specially crafted faces.
- Smart shadows: High-end computers can have every single light source cast a shadow, while mid-level computers can still enjoy shadows on most objects
- Characters and factions can own containers: if anyone who owns a container sees a character steal something from it, they will attack.
- AI and Stealth: NPC’s react better to friends in need, and they also detect stealing more reliably. NPC’s view cones now rotate with the head bone.
By default, npc’s “looks” are randomized based off their race (skin, eye, and hair color, beards, brows, hairs, etc). Now I’ve added a face editor, which lets us hand craft individual npc’s when we desire. This will only be done for special characters, not a rando on the street.
The tool also lets us visualize what armor would look like on the character, as well as switching between face and body. Currently the armor has to be manually added to the visualizer, but at some point I plan on making it so it can read off the character’s item list.
One issue that plagues open world games is how to manage all of those files, and how to make it easy for many developers to work on the world at once. As I talked about in my World Streaming post, our world is split into many chunks, called Cells. All data involved with a single cell is put into a single folder. Thus, the overworld has many, many of these folders: currently, over 500. Trying to figure out which cells you want to push, and then using SourceTree (the git client we use) to select them and push those changes is a incredible pain. Thus, I built a tool to fix this problem. It’s quite simple, and uses my GitGud project as its core, as well as the same renderer as my world loader.
The tool detects any changes in the cell directories, and marks cells that are staged green, unstaged red, and ones that have both staged and unstaged files as yellow. I then can select some cells, and stage, unstage, or discard changes. I then switch over to my git client to actually push the changes.
As you can see, this is definitely not meant to replace my git client. Instead, it simply aids in staging/unstaging files, with the bonus of being able to quickly discard changes in cells as well. Later on I hope to add more features, such as being able to stage/unstage certain data types (such as foliage or the scene file).
Various Tool Additions
I added a tool that lets us easily apply different variables to groups of npcs at once. This is especially useful for setting character’s levels, adding a faction, or adding a script / dialog.
Another volume tool was added as well: this one lets me assign owners to objects within the volume. This includes doors, containers, and items. I also made it easy to generate keys, and apply them to the owned objects, and optionally give them to the owners!
Speaking of doors, I upgraded the toolset relating to doors, making it easy to swap between the direction doors open, and adding a visual showing which way they open.
I’ve added a new simple system that lets us “tag” the importance of various lights in the game. For example, the sun is very important, a fire is important, and a candle is unimportant. Depending on the quality settings of the user, the engine will automatically change the quality of the shadows for each light.
In other words, if the settings are on max, every single light will cast smooth shadows, which is awesome! On the other hand if the player has a middle level computer, they may decide to go on medium or low, which automatically swaps between hard and soft shadows depending on light importance. It’s a nice addition that is good to get in into the pipeline now, as opposed to later, to make world building easier.
And that is that, mostly tool additions with a few gameplay changes as well! These tools make world building so much easier, which is so important for such a large game. I hope you enjoyed the in-depth look at what it takes to make such an experience, and if you want to learn more, be sure to check out our Twitter and Discord! Have a wonderful day :)