Bumpy ride & AI Updates

I’ve received several messages and mails about the Main Menu GUI doesn’t work if playing v2.26 in fullscreen mode on Linux. I don’t know what cause this issue but I am looking into it and will make sure to release an update as soon as it’s sorted out!

Perhaps your curious just what I’ve got planned for next version (2.27)?

One of my primary goals has been to improve the AI, or to be more precise- have the AI evaluate combat situations more often and come to better decisions.

idea

But let’s start with the basics. The AI in LBKR meassure intelligence by what I call decisions per minute (“dpm”). The name sort of speak for itself but in any case, each time a monster reach the time to make a new decision it will try to re-evaluate its current situation and take the most preferrable approach.

This has already been implemented for a long time now actually, but the AI have only had two options to decide upon. If its health is low it will most likely try to run away and find friends that can protect him, else he will continue to fight. Ranged monsters have also been able to decide to step away from the player to get some range in between. There’s not been any major changes in this method though apart from some more decisions beeing available for each monster, one improvement worth mentioning though is that there is now support for ranged monsters to perform melee attacks properly if the player is too close, I’ll just have to add melee attacks for them- this could come in handy as for example to give the monster a chance to knock back the player with a melee attack in order to use his gun at a safe distance.

201714111439

On top of that, monsters could earlier only attack while standing still in it’s combat-state and when the player was in range, where range was a pre-defined value for the monster instead of having the value on the attack itself. I now define the range of the attack instead, this has allowed me to make the AI loop through all attacks at each DPM limit/hit and see if any attack is possible to use even if the AI is in any other state than it’s combat-state and even if the AI is further away than it’s preferred attack range.

Another part of the AI’s “intelligence” has been how to decide which attack to use next. Earlier this has been done simply by putting a penalty (“cast pen”) on the attack used most recent by the monster. The penalty has been predefined for each monster and the monster has not regarded how appropriate it would be to use the attack, which has made melee attacks pointless for ranged monsters as they would just try to strike air for no reason if the player was too far away. (This, due to the ranged monsters having a far greater attack range than melee monsters… obviously.)

20171450457

Furthermore this also forced the AI to attack in a certain pattern. I’ve decided to approach this problem with a more dynamic penalty system for the AI attacks, which continuously determine how appropriate the attack would be to use. As the AI use an attack it will still receive the “cast pen” as earlier, but on top of that there’s a fixed penalty determined by how powerful the attack is (“power pen”). This penalty is used for rating the attack so that the AI knows which one of his attacks that are the most desired. Then there’s the range penalty (“range pen”), it will be multiplied by the range between the player and the monster.
Certain attacks also have additional penalties that deal with properties more specific to the attack it belong to. In the end, when the AI is to choose the attack to cast next, the sum of all penalties will be split by the number of penalties that were added in order to get the average/overall penalty. The attack with least penalty will then be used.

Next, I’ve decided to remove the attack hit/miss dice-roll that occured every time either the player or a monster attacked. I felt it was kind of silly and not what I wanted, so as long as the attack hit it’s target physically in the game world it will inflict damage.

evade01 evade02

In order to keep the possability to evade attacks I’ve implemented a way for the player to jump away. The Tech and Soldier classes will perform a dodge-roll and the Cryptic class will teleport a short distance if the player’s moving in any direction while pressing the left Shift-key.

warp

I did bump into a problem though that’s been around all along, but I had forgotten about it completely. As a (melee)monster attacks, its attack will inflict damage the very instant that the AI starts to play the attack-animation, as this made it impossible to dodge attacks- therefore I’ve spent a few hours to sync all AI attacks so that they won’t inflict damage until a certain delay has passed from the moment the animation begins- giving the player a chance to roll away and avoid taking damage from the blow.

To wrap it up for this time, I’ve improved some of the visuals in the game further, alot of particle systems/FX have been tweaked, the blood splatter FX among others and some player animations have been overhauled.

splatter bash

stomp

The blood-stain textures have been updated with a bump-map to give it some nice depth although, I must admit that the bump map might be slightly to deep at this time. I’ll make sure to tune this down slightly before 2.27 release.

stains

Finally, I’ve optimized the AI attack behaviours, AI instruction (ie. pre-scripted “events” that force a monster to go to point A to press button B. This is mainly used for bosses and unique monsters.) behaviours has been optimized aswell and so has the entire Gore/Blood framework, and the Cryptic player-class first ability “Carrier” has been replaced with a new one:

SEQBarrage