It's been a little longer than usual, but Build Update #011 has finally rolled out!
› NOTE: All dedicated servers must be updated to work with the current build. ‹
While the original plan was for this update to be the first in a series of PvP-oriented patches, over the last weeks our intrepid code wizard Kris went through good ol' Internet hell in his homeland down under and could barely stay connected. Needless to say, implementing online features without a working connection is tremendously difficult. And by "tremendously difficult", we of course mean "impossible"—kinda like throwing a frag all the way across Depot or hitting the 300 m target on the Shooting Range in low-ready.
On the flip side of the whole connectivity hardship, Kris took the time to work extensively on a much needed area: A.I. And so he did, causing the single player and co-op experience to drastically improve in the process. But we'll go over that in a bit.
Before we move on to this update's highlights and full patch notes: Make sure you're staying updated on GB news, previews, discussions, special offers and giveaways by following our social accounts and joining our Discord if you haven't already. That way you stay in touch with us and the community, and help our online presence grow—and that's always great for GROUND BRANCH.
Alright, here we go:
Initial A.I. overhaul
[i]"I'm starting to think there might be a reason why so few shooters
bother with single player and co-op focus these days…"[/i]
—Kris Rigby, probably
A.I. has certainly had its ups and downs over development. But as mentioned, Kris has taken something awful—internetlessness—and turned it into something beautiful: the initial A.I. overhaul. You can get an idea of how much their behavior has changed in the video below:
To sum up the various changes, A.I. enemies now have variable perception (sight and hearing), react to being shot and flashed (as in "banged"; God, could "flashbang" sound any more ambiguous?), use cover and lean, notice dead bodies and can no longer hit at first contact. Oh, they also do basic call-outs now—placeholder voices for "Contact!" and so on. Here's the long version:
* Patrolling enemies now use the "casual" walking animation. * A.I. sight threshold depends on state, making it easier to approach an idle A.I. than an alert one. * Their sight strength is also modified by float curves for distance and angle to target, making them less likely to notice you from a distance or from the sides. If you manage to sneak up on one, they will no longer be non-reactive to bumping onto. * Hearing strength is modified by float curves for different types of sounds, meaning they're more likely to hear and react to gunshots over footsteps and so on. * One of the most obvious changes: call-outs! "Contact!", "Under fire!" and "Cover me!" are some of the lines you'll hear bots shouting out contextually. The voices are of course placeholder, but they still contribute considerably to the overall combat, giving a sense of communication and often making consequences (such as being hilariously wiped out fifteen seconds into the round) clearer, as well as sometimes giving away their positions. * Enemies now react to being shot at and, depending on their state, will duck or momentarily hesitate before fleeing. * A.I. will use cover while attacking or searching, leaning around obstacles just enough to get a clear shot. * They now notice dead bodies, friendly or otherwise. * Some visible reaction to flashbangs has been added: enemies will now turn around randomly and move shorts distances until the effect wears off. * Finally, they deliberately miss their first shots at a new target for a while. This was done to prevent the impression of getting one-shot out of nowhere, but it's only a first iteration. The deliberate missing will be adjustable in the future based on difficulty level, and able to be fine-tuned via .ini files. * More details in the full patch notes at the end of the post!
› The new A.I. is implemented on all Terrorist Hunt-compatible maps!
As with everything else, this is all work-in-progress, and many of these A.I. improvements are merely a first pass. We'll continue to iterate on A.I. as we move forward—hopefully with your valuable feedback.
The MICH helmet has received a brand new model and texturing, courtesy of our 3D artist Zee. It looks many orders of magnitude more operator than the previous model, with velcro patches, goggle loops and all that tactical jazz. As with the old model, the new MICH accepts the AN/PVS-15 NVG, Headset and Strobe Marker attachments.
Helmet (MICH) comes in black, tan (pictured), green and transitional color schemes.
The fit is a little loose on some of the character heads, but we'll tackle that at a later time.
A vintage FAL has been added as an OPFOR weapon. It's currently unlocked for those who wanna mess around with it, but it doesn't have unique animations or sounds.
Other updates and fixes
* **Character/weapon rotation no longer gets stuck in the customization screens.** WOO! * **The radio squelch sounds have been replaced with new effects**, which are a work in progress. This is Mikson's first sound update to make it into a playable build—the underlying system for most other sounds he's been working on will take a little longer to implement. For now, PRAISE THE NEW SQUELCH! * **_Tactical Light (Compact)_ can now be mounted on top (12 o'clock) forearm rails**. The 12 o'clock position will minimize intrusive muzzle/suppressor shadows, but may interfere with your sight or AN/PEQ-15 placement and usage. Choices, choices… * **WIP map _City_ remains in active development, with some new areas and props**. Check out the progress under Play Offline › Development.
* Character/weapon rotation in the customization screen may not work on first load. Try re-entering customization or reloading/re-joining the server if that happens.
IN OTHER NEWS…
Weapon sounds overhaul: a sneak peek
Put your headphones on and listen to this very short, but very juicy preview for the upcoming sound overhaul:
That's all for this Build Update. You can check out the full change log below, and as always, thank you so much for your continued support! Keep the feedback coming, and see you on the next one.
Build version: 1026
Steam Build ID: 3645609
Size: 1.7 GB
Steam Build ID: 3645614
Size: 51 MB
* fixed Compact Tac Light to be used on top rail * fixed missing #if WITH_EDITOR refs in GBBTTask_MoveToCover causing build failure * fixed incorrect usage of #if WITH_EDITOR in GBNavLinkProxy_Ladder causing build failure * fixed for build in CoverGenerator * fixed curves for AI senses being GC'd. * fixed move and rotate in character and item editor getting stuck on when mousing over menus * fixed adapter spelling for the BP_GalilRailAdapter display name. * fixed night vision getting stuck on when changing kits if you did so with night vision enabled. * fixed exec binds repeating - radio menu etc should now toggle only. * fixed missing value in BP_Explosion_MK13_Stun causing divide by zero warning * fixed warning in WBP_ChatOverlay if an engine message beats the HUD init. * fix for the radio when new sound effects were hearable only for the one who pressed push-to-talk - should work as intended now * fixed AI sight curves going bye-bye due to UE4 Blueprint shenanigans * fixed character voices being replicated long after usage * fixed AGBCharacter::CanBeSeenFrom() resetting sight strength to 1.0f. CONTENT * changed radio start, end and loop sound effects * Added in new SWAT truck vehicle for use in City map * Cleaned up the base emissive master material and added ability to designate separate emissive mask texture along with what color channel to use * Reorganized the Vehicles folder and fixed up redirects * Added weapon: FNFAL (intended for bad guys) * City map * Detailed out new ladder area * Started to add some 'narrative' to the outside space (failed terrorist event) * Updated MICH helmet to new model/materials * Blocking out new Main Menu map * Testing out ideas for now * Cleaned up a lot of marketplace asset collision and LODs * Changed display name of FAL weapon * Storage Facility * Did optimization pass * Built lighting A.I. Initial AI overhaul * removed usage of TacticalAI Plugin for now. * updated all affected C++ and Blueprints * added CoverGenerator by Deams (https://github.com/Deams51/CoverGenerator-UE4) * modified the ever loving shit out of it for our needs * updated GBAIController * created new behaviour trees using a combination of old and new code. * removed references to old AI stuff to prevent log spam * removed unused test voice (me saying "Contact!") * added .modules file to P4 typemap then reconciled to add any that were missing. AI overhaul #2 submit * fixed missing body in /BadGuys/AppMilitant01.kit * fixed CoverGenerator creating stack up points in mid air. * created GBAISense_Hearing - a custom versions of AISense_Hearing * allows sound events to be compared against float curves based on the tag they have. * strength is then multiplied at the source. * created GBAISense_Sight - a custom versions of AISense_Sight * allows sight events to be compared against float curves for distance and peripheral vision. * strength is then multiplied at the source. * created GBAISquad * allows information to be shared more easily between AI that are working together. * tracks members * auto-assigns leader * determines member patrol locations * determines member guard locations * remembers previously searched locations * created GBAIGuardPoint * allows mappers to control where AI should move to when in the "Guard" state (new!). * updated GBAIController * updated to use new GBAISense_Hearing & GBAISense_Sight. * added support for GBAISquad. * added DesiredViewRotatioOffset to control AI view rotation. * added DesiredAimRotationOveride to control AI aim rotation. * added CenterOfMassBone to AISettings. * added basic climb ladder logic to Tick(). * added DeliberateMissTime * while > 0, AI will deliberately aim to the right or left of their target in such a way that will just miss each shot. * additional aim error is added *on top of this*. * velocity aim error is taken into considered to prevent it canceling out the deliberate miss adjustment. * on target threshold is reduced to 1 degree to ensure the AI misses accurately. * lasts 2 seconds in total, though it begins to fading out after 1. * time is not reduced until AI is on target and firing. * moved UpdateSenseData() logic to ActorsPerceptionUpdated() and removed it. * added basic AI Barks. * created Guard state * renamed GBAIPath to GBAIPatrolRoute to reflect its actual use. * updated GBAIPatrolRoute * added ability to control the width at which AI can spread out while patrolling. * scaling the spline along the Y axis will affect the available width at that point along the spline. * patrol route width shown when selected, with any scaling. * improved ValidatePatrolRoute() function * projects each point to navigation mesh and zeros out roll first. * verifies location and width at each point & user specified distances in between each point. * highlights any issues found. * updated GBSpawnPoint & GBSpawnManager classes to work with GBAISquad * added NoTarget cheat for debugging AI * created GBNavLinkProxy to allow for custom C++ nav link base classes. * created GBNavLinkProxy_Ladder to control AI usage of ladders. * updated all affected Blueprints. * created GBNavLinkProxy_Door to control AI usage of doors. * updated all affected Blueprints. * updated DefaultEngine.ini Made sure RuntimeGeneration=DynamicModifiersOnly under [/Script/NavigationSystem.RecastNavMesh] NOTE: This will be reset when ever 'static' is selected! * changed bShouldDiscardSubLevelNavData to False under [/Script/NavigationSystem.NavigationSystemV1] NOTE: This allows us to move nav mesh to sub map if we wish. * updated all TH- game mode maps * all navigation modifiers and links moved to _Geo. * deleted existing recast actors to ensure they were updated to use DynamicModifiersOnly. * added new ladder and door nav links. * added new guard points. * added patrol routes. * renamed AI spawns to make it easier to determine their locations. * updated BP_Door_Swinging * removed old AI logic * added box collision around door core to ensure door core is picked up as a 'dynamic modifier' by the navigation mesh regardless of the the static mesh used. NOTE: Fuck me, the UE4 navigation mesh can be a picky bastard! * updated BP_WindowCover to disable any GBAIGuardPoint behind it when it's enabled. * added missing JAFO patch. * updated all behaviours trees to incorporate basic barks * created BT_Guard * moves from guard point to guard point * scans area based on guard point values set by mapper. * avoids going to a guard point another AI is at or visited recently. * updated BT_Patrol * squad leader determines patrol route and direction. * other squad members spread out behind leader * updated BT_Attack * split up logic into sub BT's. * improved usage of cover by separating leaning & stepping out * includes barrel line check to prevent shooting cover. * updated BT_Search * improved usage of cover by separating leaning & stepping out * improved selection of next search location based on search direction * search direction specified before running the BT. * removed references to assets under local "_OLD_AI" folder that is not on P4 depot. * added GroundBranch/AI to DirectoriesToAlwaysCook in DefaultGame.ini to make sure AI barks are cooked. * added damage sense to AI * rigged up AI to react to being bumped into or having a firearm collide with them. CODE * changed version number from 1025 to 1026 * update ZooKeeper plugin * disabled ElevatePlayer option for now - was being abused. * added MinPlayers to ZKVote to define minimum number of players required to vote. * added check to make sure VoteDuration is at least 10 seconds. * created UGBCharAppearanceFunctionLibrary::ApplyCharAppearanceFromFile() * will take filename of appearance, open the file and apply it directly to character * created UGBCharLoadoutFunctionLibrary::ApplyCharLoadoutFromFile() * will take filename of loadout, open the file and apply it directly to character * added assertion check to UGBGameInstance::OnLoadingScreenFinished() to prevent log when game loads without a front end map * created GBAIFunctionLibrary::ForgetrAll() to access the AIPerceptionComponent::ForgetrAll() * created BT_Stunned for the AI * handles the timer related to how long AI is stunned for * disables/enables sight and hearing AI is stunned/unstunned * makes AI take short steps and turn randomly * once finished, sets AI to search mode * updated BP_Explosion_MK13_Stun * unified code used to stun AI or local player * updated BP_StunAffect * ensured that multiple stuns stack up * switched from timeline to float curve to control stun PP alpha * cleaned up radio sound cues for Mikson (my bad) * made firing volume a variable on UGBBarrelComponent * default set 165. * updated BP_MP5SD5/6 to 70 * added Idle/AlertAffiliationSightThreshold values to AGBAIController. * compares sight strength vs. these values to determine if they should automatically know if they've seen something hostile. * makes it easier to sneak up on AI from sides. * changed BP_Suppressor_Master volume multiplier to 0.8 * rifles should now be slightly harder to pin point than they used to be.```