Training Stream - Making Game Ready AI, Part 4 - Nov 24, 2015

WHAT
In this multi-part series, and show you how to use all of the relevant systems and features (Behavior Trees, EQS, Navigation Meshes, AnimBlueprints, AnimMontages, and more) to design, create, and optimize AI for use in a game environment with all of the requirements and restrictions that go along with that.

In part 4, we’ll be expanding the service that decides what stat the AI prioritizes, upgrading the EQS to work for all pickups, and also making the pickup objects more unified in function.

Part 3

WHEN
Tuesday, Nov 24th @ 2:00PM-3:00PM ET - Countdown]

WHERE

WHO

  • Sr Training Content Creator
  • Community Manager ]()

Feel free to ask any questions on the topic in the thread below, and remember, while we try to give attention to all inquiries, it’s not always possible to answer’s questions as they come up. This is especially true for off-topic requests, as it’s rather likely that we don’t have the appropriate person around to answer. Thanks for understanding!

Archive is up!

I don’t know if this bug just happened on my end or if it is also in the stream. If it is you should maybe know about it.

I tried to fix the behavior that let the character consume all the food if he just needed it. Even if one food put the stamina level in an acceptable range. I just needed to reset the isHungry variable inside the blackboard because it determined if the character needed to fulfill something or just walk around.

I created a task that just resets the variable and put it behind the useItem task. I noticed that the reset task was never called because the useItem task would always return with no success. Something was wrong with the distance check. I just ignored that check for my project and it worked.

I used the exact same blueprint as in the stream. I don’t think I added/changed something so I assume this bug is in the stream blueprint too. I hope this saves you some debugging.

Heya Neverwere,

Yeap, this is something that needs correcting in our current incarnation (we set the blackboard too soon, we should have set a local bool then once the loop is done set the blackboard equal to the temp bool).

Also, now that we have a stat array for our character and an EQS Generator that knows what stat boosting item we’re looking for, we need to refactor our “food” items to one base food item that can both hurt/harm various stats.

Been following along great so far. Can’t wait for more… Just finished part 3… Can’t wait to see more are we going to cover more actions on part 4 such as going to read a book to boost stats and deciding the differences of stats. Such as Maslow’s hierarchy of needs… Cause currently it would either read a book till it reaches a set point than never. Also I can’t see with how it currently set up it being able to follow something more complex such as a hierarchy of needs

Sorry I think I talked a bit to much about on how I found the bug and missed the important part.

The bug that I wanted to address was inside the use task. For me it would always return no success because the distance check would make the AND false and so set the success also to false. This has never been noticed because all the time I tested it was at the end fn the sequence. If we would add something after it inside the sequence it would never been called and cause a lot of confusion.

I know you have certainly better things to do and I’m sorry to bother you but you have limited time on that stream and I don’t want you to waste it on unnecessary debugging if I already caught the bug causing it.

I know you guys are way past prt 4 of this series… but I am running into an issue to were regardless of what is set in the StatRestore array on the GoodFoodClass, when my AI uses the PlantFoodItem, it sets all his stats to 100… I’ve tried a few different things to test this and cannot figure it out.

https://scontent-dfw1-1.xx.fbcdn.net/hphotos-xlf1/t31.0-8/12711101_1042479662457750_8915741670140888290_o.jpg

Any ideas?

I found it… Don’t know how I overlooked it… I had get StatMax twice instead of get Min and Max… Durka durka