This post is going to be a bit of a long one as I have done a fair bit in the way of the of AI without updating my logs. Call it a crazy time of year. The challenges with the timing has left me with many short burst of productivity, which in itself is actually kind of cool to go through as I feel it will help promoting a more scrum style development process, relieving pressure towards the end of the project. Never the less, I will start with the breakdown of what I have done since my last update.
I feel that already there are possibilities emerging here that will respect history, but also respect this particular cultures historical identity. Things like clothing colours, tabards, helmets and cloaks are all, from what I can tell at this moment, okay to get a bit of creative licensing on. I also shouldn't forget that the possibility of using English style armour and chain mail shouldn't be ruled out as this wasn't uncommon at the time.
As a common feature in fight sequences, targeting enemy NPCs allows for more fluid movement and enables orbiting which puts the focus on attacking combos. This is definitely what I would like to achieve.
Post 12: Combo Attacks; Part 2 Today I elaborated on what I had done previously with the combos. As it stood, I had a character with a fairy janky 2-part…
Tonight I jumped on to getting Bob armed and started implementing attacking animations / sounds. I started by grabbing a starter model kit off the Epic Store, which contained a two handed sword. Although this will not be the sword I will end up using, it's a good start as I want the player to use a customisable Claymore / Bastard sword. My next step was to create two sockets in the character skeleton. One of these was on the characters back and the other in the right hand of the bone rig. From there, I created a function that triggers when the player pushes the '1' key, effectively equipping and unequipping the sword by attaching it to either of the sockets and smoothing it out with a vector move call to. I then grabbed an animation from Mixamo.com that could serve as either an equipping or unequipping the weapon. Unfortunately it's only really useful as a single sword animation, but it will do for now. From there I delayed out the socket attached to coincide with when the right hand in the animation was closest to the hilt and the vector move takes care of the rest. Finally, I localised the equip animation to the arms of the character so that if they were running and they wanted to equip the sword, their legs wouldn't go crazy. Next I started on the attacking and combo animations. First, I setup the left mouse button as an input. Next I setup a function that would a) auto equip the sword if it already weren't equipped and b) set a selection that would occur depending on a integer that would increase when the player clicked in succession. This selector contains three different attack animations. It kind of works, but still needs a bit of refining. I'll double back later. Finally, I added sound cues in the animations for grunts and sword swings that would randomly pick from a variety. The audio, no doubt will be replaced, but this is a problem for a later date. I'll upload a video of the WIP when I refine it a little more. For now, here's some screen shots.
So I decided to start getting into some of the cooler stuff (well I think it's cooler). The first on the list was a little foray into creating a bit of NPC AI. The first step was figuring out how to implement the movement and have the ability to call on it. What I ended up doing was creating a master moveable character that would serve as the parent of the player and all other NPCs. All I really had to do to prep was to take the Camera and Spring Arm off. I created an AI class that would contain all of the NPC logic. I then placed a Nav Mesh into the level, with a pretty wide span and put a Nav Invoker into the NPC child that would act as a localiser of the Nav calculations. There are a couple of options in the project settings that I changed in order to make this work too: Nav Mesh / Runtime / Runtime Generation -----> Dynamic Nav Mesh / Runtime / Observed Paths Interval -------> 0.5 Navigation System / Navigation Enforcing / Generate Navigation Only Around Navigation Invokers --------> True Navigation System / Navigation System / Auto Create Navigation Data ------> True At this point, I thought I would implement a basic function that would get the NPC to run towards the character. This could be handy for attacking cycles, attention grabs and cinematics. In the AI Class, I put in a basic location function that would get the location of the player, the location of the NPC, average them out (to find the direction) and then send the NPC on that path. All in all, this turned out as well as I could hope for, seeing as this is pretty new to me.
This week was polishing off the final parts, for now, of the atmospheric stuff. Mostly it revolved around polishing a few things and fixing some elements that weren't quite up to my liking. These included fixing the fog settings so that the lower ground had a visibility range of more than 30cm. The other fix was to do with the lighting on the ground and exempting it from automatic lighting effects. This was implemented for better night time visibility and general play experience. The wind system was consolidated even more and the direction can now be dictated specifically. Finally, the grass now moves in a SEMI wave movement. I found the plugin included with the grass to be too intense and left the bigger bushes waving around quite violently. They now receive a value that equates to 1/4 of that of the grass. Finally I implented and consolodated the variable inputs of the included grass squashing mechanics. These will require a revisit as I believe that the player cylinder collider is somehow being offset slightly to the right. For now, I'm going to move on to AI, as the current environment has turned out far better than I thought that it would.
Post 8: Atmosphere; Part 2 Just a quick one today. I implemented a forest using the Procedural Foliage Volume and Foliage Types. This was as simple as: Creating a Procedural…
This week I decided to focus on implementing atmospheric conditions. These can be used to effect at any point in the game, so I would need to centralise their controls in a global set of parameters. I started off by creating this and thinking about all the different weather conditions that I could implement. I started off with rain as this seemed fairly easy to think about. First port of call was to include a control for the glossiness of the terrain textures. This was achieved by running a variable parameter to the specular levels said texture. The parameter is based out of the global controller and referenced in the landscape material. This same method could be used on the grass and bush models to continue the wet look throughout the world. The next step was to create a weather controller that would sit above the player and play particle effects directly above them. This is a good way to save resources and still have a good looking effect. I also added a parameter to the global controller that would control the wind effect on the grass and injected that into the existing controller. Finally I created a function that would do the following: Find the global parameters and a) Play rain noises. b) increase the wind effect on the grass. c) play the rain particle effect. d) turn down the 'gloom' on the clouds so that they would appear to be darker. This was all put on a timer, to test and the screen shots will up uploaded below when I double back. The next addition was a day / night cycle. This was utilised using the global light source and through a little bit of math it will now rotate according to a 'time' float. I also implemented a moon with cycles, but am currently having issues with the masking - I will have to double back when I figure out a solution. To enhance the concept of the time of day, the light sources and atmospheric fog tinting were hooked up to the zenith and horizon colours, which are altered automatically by the engine depending on the time of day. This has lead to some stunning effects and with a little more tweaking, should potentially yield some visually stunning results.