With the enemy devided into multiple scripts we also changed how we select our enemies. A generator script and one prefab allows us to easily pick the enemy we want with the desired abillities, this all thanks to developer Quinten.
All these changes caused some bugs and erros but they could be resolved .
Alongside these major changes we also have a new type of enemy.
The new model, thanks to our artist Matthias is a bit different than the other two but still fits the same genre as the other two.
Our enemies are almost complete but their are still some challenges to overcome. The biggest one is making our enemy aware of its surroundings and make the enemy more agressive. Because we don’t use navigation meshes this is not an easy task.
We , being developers Brecht and Nick are trying to overcome this challenge.
The goal is to make our enemy smart enough to try and see where the player went when visual contact has been lost.
Their was also a bug where it would look like the enemy had lost sight of you but was in fact still attacking. This bug and two small others have also been fixed.
To create more player feedback the enemies have been given images for when they detect you and when they lose sight of you.
A red explanationmark for when detected and a yellow question mark for when lost.
Together with developer Nick we fixed some bugs who were causing trouble with the player detection system.
The enemy would suddenly lose sight of the player, even when the player was just in front of him. This bug was caused by the projectile the enemy fired blocking the raycast. This was fixed by using a layermask and so ignoring the projectile.
The melee attack now performs the entire animation before checking if another attack can be done, this fixed a bug where you could run away before the attack was completed.
A special thanks to developer Nick for helping with these fixes!
The enemies now have a melee attack and dying animation resulting in a more real combat experience. The melee enemy now stands apart from the regular enemy with his new weapon.
The new animations: Melee and dying
There have been also some changes to the code. A gravity bug has been removed and some loops have been optimised.
During the easter holiday our artist updated the enemies with new weapon meshes, the healthbar also got a tweak and the actual image will later be updated.
Along with positionprediction the enemies now have a spread factor that will function as an errormargin for shooting, this will make the combat a little more unpredicting.
Now the focus will be to make sure the combat remains fluent ,make sure the enemy doesn’t get stuck in certain positions and make the enemy more aggressive and challenging.
To make the enemy more challenging we have given them the abillity to predict the position of the player. The older attacks could easily be evaded but with this abillity the combat gets a little more dynamic.
There have also been some changes in the behaviour of the enemies and together with developer Nick a rotation bug has been fixed.
For now the focus will be to expand the protocol when the player is no longer in sight.
The enemies have received a model upgrade and their own animations thanks to our artist Mathias and developer Nick.
The enemies have gotten small improvements to their behaviour and some protocols have been rewritten. The enemies now have the abillity to look further than their normal viewing range when being hit by the player from long distances.
The enemy healthbar has also been fixed, the healthbar tended to get seperated from the enemy when turning the camera rapidly.
By checking if the enemy is visible by the camera(WordToViewport) this issue could be resolved. But this healthbar will eventually be replaced with a newer version.
The next goal is to make our enemies more challenging but still keep an eye on the performance.
The enemies have gotten some changes in the code to improve their performance but the biggest change is of course the model.
The cylindrical enemies are gone and replaced by models provided by our artist and they are big, here is a size comparison between our player and the enemies.
The trident is their main weapon for melee and long range use ,in game it looks like this.
Our enemy has gotten an upgrade, apart from some code rewriting, the enemy now has a healthbar on top indicating its current health and now fires a new projectile.
The enemy projectile is a dark shadow ball, the opposite of the players weapon the light ball. When hit the player will lose a portion of it’s health.
Apart from the long range attack the enemy now has the abillity to perform a melee attack at the player. When the player is in sight the enemy will charge at the player and chase him until he is in reach to attack. This attack will do more damage but the enemy has a delay between attacks. As seen in the picture the red enemy will fire projectiles while the other enemy is a melee attacker charging towards the player.
The enemy is now also more customizable, a variaty of settings ranging from the different behaviours, certain abillity’s, health settings, damage settings,… These variables let us create different types of enemies and can be expanded later on
The focus for now will be to improve the flow of the enemies, improve their behaviours and most importantly make sure they are optimised for the future.
The player has the ability to learn how to hide. This stealth modus makes him invisible to bystanding enemies. Making it easier to avoid a battle.
When in stealth mode, the light of the lantern will go out for a small period of time, so the player has the change to get past a patrolling enemy.
This modus is not permanent so your timing has to be right or there may be a change you get spotted. To make things even more interesting some enemies will be immune to this modus so sneaking past them won’t be easy.
Enemy AI Small Demo Clip
Enemy’s will have the ability to patrol certain areas in order to make a stealth approach more difficult.
This waypoints system is made with a NavMeshAgent.
Checking if the player is visible or not by using a Raycast to see if objects are blocking the line of sight.
But first checking the distance between the player and the enemy.
If the player is within that visible range then check if objects, like for example a wall, aren’t blocking the line of sight.
The enemy’s Field of View is also limited, so use objects to get past them without confrontation.