This week I have continued to refine the work that has been done on the AI agents from the last two weeks and implemented the Squad Manager and Swarm AI agents into the main map of our game. I had to implement the Squad manager in a way that it would be able to find both Tomas and Aleksandra’s AI agents and access them so that they could be designated leaders for the Swarm AI’s.
There have been some issues where I made oversights on the implementation but have since corrected these and they have allowed me to reduce further mistakes as I continued to work on the Squad manager and AI’s. We had some navigation issues with the AI’s at first but this was due to some geometry problems that have now been rectified and the AI’s can traverse the terrain correctly and follow their leaders.
One of the technical issues that occurred was that when a leader agent had been killed I needed to remove them from the squad manager and update the children if that was their leader so that they could be reassigned. I believe with Blueprint this proved more difficult because I feel I had to jump through a lot more hoops to get this working, luckily we are beginning to move the AI into C++ code so that its easier to manage and update whilst also providing a consistent behaviour across our networked client. This is a low priority task but I believe and our team believes that it is well worth the time taken to finish porting the code.
The first part of the C++ porting was to create a new Class that would inherit from Unreal Engine 4’s AIController and this class would act as our baseAIController that implements all of the default behaviours for the various AI’s we have. We can then create individual classes for MeleeAIController, RangedAIController and SwarmAIController which all inherit from the baseController class that implements the basic needs such as OnSee and OnHear functionality.
I have implemented an Enum for the various states the AI’s can have and this will replace the states feature on the Blueprint blackboard that we currently use, I feel this will make things a lot simpler because we can simply update our Enum on a per controller basis and each individual AI will know what its current state is.
That’s all for this week and next week we should hopefully see the structure of the C++ AI coming together.
This week I have continued my work on the planning and implementation of the Squad based AI and the Squad Manager that will handle them. I have gone through a few different ideas in how I and the team wanted to work, I believe we have now settled with the Squad Manager assigning swarm agents to either the Larger Melee or Ranged spider or treating those as the swarm’s leader.
Originally the Squad AI would have had a specific type of Squad leader assigned to it but we feel that going with a dynamic approach of assigning squads based on range and what’s local to the swarm would provide better behaviour for the AI.
The current state of the Squad manager is that when the game starts it will search for all of the Melee and Ranged Leaders but also search for the swarm agents, these agents then have their references stored in arrays of their types within the Squad Manager as well as their controllers so that the Squad Manager can interface with them and send them the information they need such as the swarms allocated leader and what the swarm should be doing.
Previously the Squad Manager and Agents would all hold references to one another but I felt this wasn’t a good way to implement the system and the Squad Manager should be the only one who needs to have references to anything below it this is also true for the leader agent not requiring a reference to the children as the children will be instructed by the Squad Manager which has the relevant information about the agents in play.
The next part of the implementation I have planned out and I have an idea on the approach I want to take for this. I plan to have the Squad Manager Send orders to the swarm agents about who their leader is and that they should be following and performing the same actions as their leader. If the leader dies the swarm will retreat to another larger spider in the vicinity and allocate that agent as the leader for the swarm. Hopefully this will provide some interesting behaviour as the agents retreat and act scared when they’re leader has been killed.
Thanks for reading and come back next week for Entry #4 in this series of development blogs.
This week we met on Monday to discuss the current plans for the week and began to discuss what tasks we needed to have done over the next two weeks.
Tuesday we had our meeting to discuss our progress with the team and our module leaders, before this however we were given our tasks and the deadlines for these. Brad and Brett have been put in charge of developing the Wolf and Child characters.
Aleksandra, Tomas and I have been given charge of the AI for the game and we got to work talking about what behaviours we wanted our AI’s to have and the different type of enemy AI that would be included in our end build. We decided to have three types of AI Aleksandra has the task of creating a spider enemy that attacks from a distance and attempts to keep a distance between itself and a target. Tomas has been given the task to develop a melee spider which will move towards the target until it is within attack range and finally I have been given the task of creating a Squad Based AI that will attempt to act with a hive mind.
Each of the AI’s will have generic behaviour for patrolling and when they are alerted to an enemy presence. The custom AI’s will then fall into their own behaviours based on what type of AI they are.
We plan to have some progress made by Tuesday 17th February so that we can show how they will work in our current environment.
I’ve had some ideas for the Squad Based AI that I have shared with the group and I hope it makes the AI feel more intelligent and more group based than acting without any knowledge of any other AI in their squad. I plan to have the Squads AI’s take some behaviour that can be seen in the Halo games where the grunt will retreat when a larger fellow AI has fallen. The plan is to have the Squad Manager look out for the Melee and Ranged spiders dying and if this happens within some proximity of the squad AI they will retreat to another larger AI, hopefully this will present an engaging experience for the players when they’re entering combat.
Thanks for reading and come back next week for the third instalment.
The first two weeks of our project have mostly been planning and deciding on all of the various software we will be using over the course of this project.
The first session we spent just brainstorming ideas and sharing them, we wrote a complete list of every idea that we had and we also built ideas off of other ideas people had. Due to all of us having different thoughts for what we wanted to produce gathering a list of everything we found was a good start as we could later refine this list into a group of features that we would like to be present in our final product.
Alongside this planning we discussed and agreed on the tool sets that we would be using for the development and how people felt about using these tools. Unreal Engine 4 was our choice of engine due to the graphical effects that it can provide along with the use of an Oculus Rift we want to produce a truly immersive experience for our players. Although Unreal Engine 4 has some disadvantages for the programmers we decided overall that the advantages outweighed them.
Secondly we decided to use SVN subrevision for our choice of source control as most of us were familiar with it and we could teach it to anyone who hadn’t used it before. One of our team members has his own server so hosting this SVN isn’t a problem and it allows us to store all of our data locally and backed up safely.
We found the team management website Producteev that we began using but quickly found that it was not suited to our needs and have since moved over to using Teamwork because it allowed for us to set individual tasks to our team members and allow them to be completed on a per person basis rather than everyone having to confirm completion of a task.
Moving into the second week we sat down and went through each individual idea and mechanic and split them off we then decided what idea’s we liked and narrowed down the pool of ideas, as this happened we slowly come to a general idea of what we wanted to produce and as time went on we refined the finer details that lead to the concept that is courage.
During this week and some of this week we have been working on our Product overview document and our presentation. We come together on Google Hangouts to discuss what we wanted to put in our technical document and the presentation how we wanted to represent our concept and what we want from our final product.
After the presentation tonight I feel like everything is on track for a great end product and look forward to moving into full scale development with our team of programmers and artists.
Thanks for reading and come back next week for the next installment.