Build Update

BUILD UPDATE #013: Jumbo

It’s been 48 days since our last blog entry, and almost 3 months since our last game update, and while we’re sorry we kept you all waiting that long, we hope Build Update #013 makes up for it.

As predicted in the last Intel Update, #013 has taken a lot longer than usual due to an engine update and a bunch of new things we’ve been putting into GROUND BRANCH that simply required the extra time to get implemented, tested, fixed, re-tested and so on. To summarize, this version includes the long-awaited first sound update, a new PvP game mode, new modes for new maps, some obligatory new gear and a sizeable list of fixes we’ll go over in a bit.

We cannot stress enough how grateful we are for all you guys sticking around and patiently supporting us while we do our best to put this thing together. As always, thank you so much!

Before we go over the highlights, we figure we should let you know that…

🚨 GROUND BRANCH is 25% off on the Steam® Summer Sale! 🚨

We’re right on time with this update for the Steam® Summer Sale 2019. If you haven’t already, this is your chance to grab GROUND BRANCH with a magnificent 25% discount—our biggest discount yet—or maybe convince a few stubborn friends to join you in the tacticool bonanza. You’re now armed with compelling case of a juicy update and a sale launching at the same time, so let’s fill up them servers!

All locked and loaded? Let’s move out.

› We strongly recommend players coming from an older version of the game to delete all files located in %LOCALAPPDATA%\GroundBranch\Saved\Config\WindowsNoEditor. For those who can afford it, a complete reinstall isn’t a bad idea either. If you have control, loadout and other such issues, be sure to try these options.

› NOTE: All dedicated servers must be updated to work with the current build.
› NOTE: Some Controls/Gameplay settings have been reset with this build, regardless of whether you removed config files as suggested. Make sure to reconfigure them to your preferences and sorry for the inconvenience!

Build highlights

Finally, new sounds!

Mikson’s diligent work can finally be experienced in-game as the first batch of (mostly) weapon sounds goes public, along with an ominous main theme to kick off soundtrack and ambience work, and several small soundscape adjustments to volume, attenuation and occlusion values.

JustinRed87 aka Cobra493 previews some of the new sounds. Sounds and menu aren’t up to date despite the video being recent, but should help you get an idea of where they’re headed

Weapon sounds

The following weapons have received their own sound effects, with individual gunshot (with indoor and outdoor tails) and reload SFXs, as well as suppressed versions where applicable (marked with [SD]):

PRIMARY
  • MP5N [SD]
  • MP5SD5, MP5SD6
  • MP7A1, MP7A2 [SD]
  • SDASS Custom
  • MK 18 Mod 1 [SD]
  • AK-74M, AK-74 MI [SD]
  • MK 14 Mod 2 EBR [SD]
  • MK 48 Mod 0
SIDEARMS
  • M1911A1 [SD]
  • MK 25 [SD]

Why do all weapons sound different than before, then? Well, we’re carrying over these finished sounds to the other guns while they’re not done, hence the similarity between several of them too. All submachine guns not listed above are now using the MP5N effect as a placeholder, for instance. Similarly, for now all pistols (M1911 aside) are using the MK 25 sounds, all ARs share the MK 18 sounds, the AKS-74U uses the AK-74M sounds and so on.

Keep in mind that this is a first iteration. Mikson will be fine-tuning everything and updating the rest of the armory (and the entirety of the game’s sound design) as we go, and you can expect actual reverb and things like individual tails for urban vs. rural vs. forested environments.

› Sounds that were previously demoed, such as the M4A1/Block II effects, are being reworked with newly acquired libraries for maximum fidelity.

Other sound changes
  • The M67 Frag explosion sound has been updated with a better placeholder that doesn’t have birds chirping in the background. Chirp-less BOOM.
  • While footstep sounds haven’t been updated yet, they now have proper attenuation, volumes and occlusion depending on movement pace, stance and environment, so you will no longer be hearing them across the map or through multiple floors.
  • Radio and local VOIP have been similarly updated.
  • Local VOIP (default [V]) falloff distance is now 15 meters, so make sure you’re within hearing range—otherwise, switch to radio comms (default [B]).
Known issues
  • We realized too late that bullet whiz sounds aren’t replicating online. Balls. (We’ll try to hotfix that soon.)

NEW GAME MODE: Defend [WIP]

Currently available for Small Town and Power Station (both Day and Night versions), this adversarial (PvP) game mode has one team defend an objective (a laptop), while the other team needs to find and secure it.

DEFENDERS
  • Objective: Eliminate all Attackers or prevent the objective from being secured within the time limit (default* 10 min).
  • Spawns near the objective (which can be in several nearby locations around the selected insertion point) and has a 30-second head start to prepare for the attack.
ATTACKERS
  • Objective: Eliminate all Defenders or secure the objective within the time limit (default 10 min).
  • Can move freely after 30 seconds. This time can be used for last-moment preparations and plans.
  • Once the objective is found, one team member must secure it by holding Use/Interact (default [F]) while facing it for 30 seconds (default time*).

* Round time limit and objective capture time can be configured by the server admin. We encourage players to try different values and see what works best. Let us know how it goes!

› Needless to say, this game mode is a major work-in-progress. It will be refined with further testing and community feedback, and then ported over to more maps.

Known issues

Although we could not replicate the issue, we once had multiple objectives spawning in a single round. If you experience this bug, be sure to report it. Thanks!

NEW MAPS: 747 and City [WIP]

Previously playable under the “Development” game mode, 747 and City are now further along in development and playable on Terrorist Hunt, Team Elimination and Deathmatch. They’re not finished maps, however, so expect some unfinished areas and general bugs and issues. John is on them.

747

CITY

› Yep, they will be getting a night version later on too. Speaking of which…

Storage Facility (Night)

Storage Facility now has a night version, playable on Terrorist Hunt. Don’t forget your NVGs.

Adjusted A.I. behavior

  • Enemy A.I. sight and threat detection distance have both been changed from 50 m to 150 m. This was done to make up for longer engagement ranges, particularly on 747. We’re looking into map-specific values (short term) and a more robust system that accounts for more than a binary distance switch (long term).
  • The distance at which they hear footsteps has been changed from 50 m to 25 m.

Movement speeds

  • Walk and Run speeds have been increased and adjusted slightly. (We’re evaluating adding a slower “sneaking” pace.)
  • These values are experimental and, as everything, subject to change.

Gear

NEW SIDEARM: MK 25

A SEAL favorite, the MK 25 (P226) is a 9 mm service pistol carrying 15+1 rounds.

NEW ATTACHMENT: Sidearm Suppressor

Not really a surprise at this point, but you can now attach a suppressor to any pistol and be all… [starts mimicking several copyrighted stealth action characters]

› As with primary weapons, sidearm suppressors are selectable under the “Muzzle Device” tab.

Foregrips are now gripped

We’ve rigged up a basic implementation of “functional” foregrips. They are now gripped by the character’s support hand—as long as you place within reach, anyway.

Known issues
  • Foregrips will cause a floating hand (as well as a wobbling, dislodged arm) if placed too far forward along the bottom rail. It’s only a first pass, damnit!
  • The hand poses have a generic grip that doesn’t really fit the foregrips yet. Don’t worry—we’ll be tackling that in due time too.
Other gear stuff
  • Pistol holsters are no longer stuck in the 2000s and are worn on a belt extension rather than a thigh rig. We might make it an option in the future.
  • We’ve added a basic suppressor for the MK 14 Mod 2 EBR.
  • The AN/PEQ-15 and AR suppressor have been re-scaled to more accurate dimensions.

Miscellaneous fixes and changes

  • Tired of having to run around the Ready Room between rounds? You now spawn back directly at the Ops Room of your selected team and might save up to a whopping 352 calories in a single session.
  • Fixed targets not coming back up on Shooting Range. Or was it them not going down this time?
  • A long, long list of little things you can check out below.

Change log

Build version: 1027

Client

Steam Build ID: 3953210
Size: 2.8 GB

Dedicated server

Steam Build ID: 3953219
Size: 141 MB

FIXES

* FIXED MP5 flashlight foregrip not covering regular front grip properly
* FIXED rear sight texture misalignment on MK 48
* FIXED glowing white inside of suppressors
* FIXED Rail Cover intersecting with side rails on some ARs
* FIXED tracetag when packaged
* FIXED UWorks GetFriends node in BP_GameInstance 
* FIXED overlapping meshes that showed up in Small Town floors
* FIXED bad collision on boulder pile near one of the Small Town spawns
* FIXED suppressor naming convention for to AK suppressors.
* FIXED suppressor thread naming conventions on AK-based rifles.
* FIXED up suppressor redirectors
* FIXED insertion points on TE-SmallTown
* FIXED GetSortedTeamListWithPlayerCounts() not sorting based on living players correctly.
* FIXED AI walking into river and submerging themselves in Depot map
* FIXED small items around fire barrel in Depot shooting players into the air when stepped on
* FIXED getting sorted team list with player counts
    * this fixes BP_Defend game mode not ending when attackers/defenders are killed.
* FIXED G22 slide render issues
* FIXED missing G22 sight dots
* FIXED incorrect lighting being set to visible if player controller is not spawned BEFORE game class is set in game state.
* FIXED firearms not cycling bolts after first shot when non-semi auto
* FIXED up many redirectors (naughty!)
* FIXED lighting scenario loading on training maps
* FIXED incorrectly multiplied round length by 60 when setting it on game state to be replicated to clients.
* FIXED mini-map origin location and dimensions on TE-PowerStation & DEF-PowerStation
* FIXED OnRoundStageSet() delegate not being called on server.
* FIXED TE-PaintBall
* FIXED targets dropping on ShootingRange_Geo
* FIXED sync'd bad guy/hostage targets on tracks in TargetTest_Geo
* FIXED BP_SpawnProtectionActor not unbinding triggers.
* FIXED missing simple collision geo on S_Forklift_Industrial
* FIXED spawning at weird angles using PlayFromHere option in editor.
* FIXED funky refraction on vehicle windows in 747 
* FIXED incorrect mini-map setup on TE/DM-SmallTown
* FIXED missing collision on two trucks on 747
* FIXED showing death overlay twice in TH standalone
* FIXED not seeing attachments and magazines on non-equipped firearms in RR
* FIXED round end not being checked for if a player disconnects mid-round in Defend game mode
* FIXED BP_GameState and child blueprints attempting to updated UI widgets on dedicated servers
* FIXED reference to reload sound cue references that no longer exist in BP_SDASS_Martial
* FIXED looping full auto sound not stopping on character death.
* FIXED BP_AN_PEQ_Master & BP_IRStrobe causing warnings in new FrontEndMenu.
* FIXED crash relating to incorrect use of SetLifeSpan() in GBGameMode::AddDroppedItem()
* FIXED possible nullptr in GBGameMode::GenericPlayerInitialisation()
* FIXED adding possibly invalid skin asset to asset list in UGBCharLoadoutFunctionLibrary::GetPrimaryAssetIdsFromKit().
* FIXED odd collision at bottom of stairs in TankerShip
* FIXED gap in geo at bottom of stairs in TankerShip
* FIXED BP_LightPost in City causing compile errors/warnings
* FIXED using wrong function to read primary asset ids from appearance string in FrontEndMenu-NEW
* FIXED TH-City not showing up in menus (at least in dev build).
* FIXED missing tree collision in City
* FIXED physics props in City causing player to be thrown across map to their death/laughter.
* FIXED incorrect entries in loadouts used from FrontEntMenu-NEW
* FIXED messed up FriendlyTarget(White) impact effect
* FIXED rotation/movement in character editor from front end menu
* FIXED death overlay missing randomly making people unable to respawn etc.
* FIXED missing team kill prompt by adding ShouldCheckForTeamKills() to various game modes that it was missing from.
* FIXED stun effect not pissing off if the map changes while it is in affect.
* FIXED MP5 TacLight not lighting up when light enabled
* FIXED bug in BP_TerroristHunt that would show death overlay if you left mid round to RR.
* FIXED collision with 747 landing gear
* FIXED possible nullptr in GBGameMode::GetSpawnInfo()
* FIXED ability to add suppressor to MP5SD (should not be able to)
* FIXED bug in BP_OpticalSightComponent where render target size could be set greater than screen resolution
* FIXED bug in GBGameMode causing players to be respawned inside the RR if round count down is cancelled by everyone leaving the Ops Room.
* FIXED reloading shotgun online
* FIXED potential crash caused by bad GBInstigator reference in GBFirearm::RecoilCountUpdated()
* FIXED UMP45 having 3 shots heard in 2-shot burst.
* FIXED casting issue in GBFunctionLibarary::GetGameStateSafe() (I hope)
* FIXED firearms collision considering smoke in smoke grenades in its collision checks.
* FIXED EBR reload always being reloaded without retention.
* FIXED potential crash if character dies as they begin to reload.
* FIXED PhysicalMaterials now have correct density settings.
* FIXED items dropped by AI disappearing during round based games.
* FIXED debug collision on smoke grenade being visible (oops).
* fixed WBP_BugsIssues_Feedback not being set to focusable causing log spam.
* fixed WBP_Settings_Manager not displaying WBP_Settings_Controls as default screen.
* fixed GameInfo button not working and add tooltip.


CONTENT

* NEW MAP - City
    * Still a work in progress
* Terrorist Hunt, Team Elimination and Deathmatch game modes added to 747 and City
* NEW GAMETYPE added - Defend
    * Currently available on Small Town and Power Station maps
* Added night version to Storage Facility

* New main menu concept added
    * New main theme music added

* Better internal organization of suppressors
    * Added in new models to replace old meshes
* Cleaned up Ready Room LODs and unused meshes
* Replaced fuel truck in 747 map with new version
* Adjusted suppressor placement on pistols
* Ready Room
    * Small tweak to floor roughness
    * Added simple steam coming from coffee pot
* 747
    * More work on interior or aircraft
    * Remade moveable stairway prop and materials
    * Optimized lighting in cargo area to make framerate more consistent (no longer using IES light profiles)

* Cleaned up geometry and UVs for cinderblock low wall mesh set

* Removed thigh rigs on pants and moved holster to an extended length belt hook position
    * Thigh-rig setup is still in there if we want to go back to it or add in as an option.

* Scale adjustment to AN/PEQ-15
* New Acacia SpeedTree model added

* New weapon added
    * MK 25 (SIG P226)

* Regenerated LODs for some crate meshes that were causing rendering problems in SmallTown
* Cleaned up some misc geometry issues in PowerStation, presumably from new engine build

* Modified firearms attenuations falloff distance (longer falloff distance)
* Lots of cleanup work done to 747 interior
* Added building label decals to SmallTown buildings for better identification
* Added different volume and falloff distance for each movement pace

* Added first pass of night vision option when spectating
* Created LODs for all weapon and character SkelMeshes that didn't have any already
* Cleaned up some lightmap UV setting on various marketplace assets
* Adjustments to fog in 747 to not be so obvious on interiors
* Remade PowerStation overhead map to better match insertion areas
* Changed some StaticMesh settings in vehicle BPs to make them more efficient to render
* Update StorageFacility geometry
    * Fixed a few places you get could get stuck
    * Adjusted use of blocking volumes and convientientyly conveniently placed boulders to prevent getting outside map bounds.

*  Storage Facility
    * Removed SSAO from outside area to gain 1ms rendering

* Added grid to mini-maps
    * The final presentation will change, just a test for now
* Added simple character lighting PhysAsset reference to various character meshes
* Added Roughness power parameter to main RMAO_Master material
* Moved all RR spawns to 900 m below map so you don't hear the RR shooting range while playing

* First pass on foregrip IK and animations (lots more work to do)

* Changed movement speeds (will test some more)
    * Running/walking forward/forward left + right is faster.
    * Backwards + pure strafing is somewhat slower.
    * Engaged running is wobbly AF now.

* Reworked Main Gate insertion in 747 to provide more cover during entry
* Removed dynamic light from barrel fire particle system used in Depot map

* Reworked AI placement and setup on Storage Facility docks to give less chance of insta kills when peeking over ridge

* Rescaled AR suppressor
* Tons of PhysMat fixes on marketplace stuff for correct material settings
* Removed yellow laser warning label from V3 optic


AUDIO

* Changed local VOIP falloff distance from 30 to 15 meters (might lower it to 10 meters if that's not enough)
* Added air absorption to local VOIP attenuation settings (low-pass filter dependent on distance to the source)
* Changed occlusion settings so it impacts local VOIP in more noticeable way

* Increased AI bark falloff distance 

* Wwise: further BP_Firearm_Master modifications (WIP)
* Wwise: modified AM_Reload_AR15 so it's synchronized with audio
* Wwise: added bullet fly-by sound effects
* Wwise: added AR-15-related sound effects (WIP)
* Wwise: added suppressor sound effects for AR-15
* Wwise: changed audio format to Vorbis
* Wwise: added attenuations, distant shots and trigger pull sound effects for assault rifles
* Wwise: added AK-74M sound effects
* Wwise: fixed Switch for fire selector
* Wwise: added AK-74M sound effects for AKS-74U
* Synchronized AK-74M reload sound effects with the animation 
* Wwise: added MK 48 sound effects
* Wwise: synchronized MK 48 reload animations with sound effects
* ReadyRoom: added spatial audio volumes and acoustic portals
* Added Wwise volumes to all maps
* Wwise: added OpenFeedTray and CloseFeedTray events for LMGs
* Wwise: added MP5N, MP5SD and MP7 sound effects
* Wwise: synchronized reload animations for MP5 and MP7
* Wwise: modified some attenuations
* Wwise: assigned MPX and UMP to MP7 sound effects, added WrackBolt for MPX
* Wwise: added MK 14 EBR sound effects and synchronized its animations with audio
* Wwise: added MK 25 sound effects and synchronized it's animations
* Wwise: added MK 18 unsuppressed shots, assigned to all AR-15 rifles (temporarily)
* Wwise: added shotgun sound effects
* Wwise: assigned all handguns to MK 25 (except for M1911)
* Wwise: synchronized shotgun animations with sound effects
* Wwise: added new MP7 reload sound effects, added new AK-74M unsuppressed shots
* Wwise: turned up SMG tails volume


A.I.

* Adjusted AI curves
    * Sight distance from 50 m to 150 m
    * Footstep distance from 50 m to 25 m
    * Threat distance from 50 m to 150 m
* Disabled crouch behaviour branch BT_Flee


CODE

* updated UE4 to version 4.22.x
* created UGBFunctionLibrary::GetAssetSoftObjPtrs() to quickly get a list of asset pointers, mainly for use in mass processing animation sequences.
* changed lag comp from using timestamp from client to using 1/2 ping
* recompiled WBP_CharacteEditor & WBP_ItemEditor to fix Blueprint complaining about changed C++ class
* began updating lag comp check method to use trace vs special collision channel
* updated GBFirearm to use attached actor alongside sphere component for Wwise volume detection.
* moved CoherentUI plugin from engine to game.
* updated to Prysm-1.2.1.1 from Coherent
* updated GBInsertionPoint class to expose TeamId to instances or child blueprints.
* Integrated Wwise middleware 
* updated use of RecoilCount for better use with Wwise
    * required changes to fire ability, firearm and various blueprints.
* updated GBInsertionPoint
    * added delegate that is fired when insertion point is updated
        * used by widgets to hook directly into insertion points instead of relying on game state etc
    * added bIsActive boolean to enable/disable insertion points

* updated GBFirearm
    * removed OnContinuedFiringEvent()
    * rigged up GBFirearm to be more diligent about when it call OnStartedFiringEvent() and OnStoppedFiringEvent().
    * ensured that OnFiremodeChangedEvent() is called when the barrels spatial sound is spawned.
* created GBUseInterface
    * combines with server replicated function in GBPlayerController for simple using of actors without a gameplay ability
* updated GBRoundManager
    * removed last team and last player checks - should now be done by game mode.
    * renamed CheckForLivingPlayers() to CheckAllDead() to better reflect its actual use.
* created BP_Defend game mode
    * temp name - could just be call TAS (Take And Secure) or AAD (Attack And Defend) etc.
    * Alpha = Attackers
        * Can pick any insertion point they like.
        * Attackers must find and secure laptop by using it.
    * Bravo = Defenders
        * Spawn at insertion point that is randomly chosen each round.
        * Must keep attackers from using laptop near insertion point for X minutes.
    * Either team can also win by killing the other.
* updated WBP_TerroristHunt_OpsBoard to work with changes to GBInsertionPoint  and related widgets.
* updated WBP_TeamElimination to implement player deaths checks to end the round when one team is left alive.
* updated GBGameSession to fix how it registers server
* updated WBP_SinglePlayer & WBP_TrainingScreen to use simple console command instead of HostGame function.
* updated GBGameInstance::HostGame() to create a dedicated server process for testing.

* changed BP_DefendTarget_Laptop to start capturing as long as the Interact key is held down and the mouse is over the laptop.
* changed WBP_DefendTarget_LaptopScreen background from a simple white texture to a screen-like material (M_LaptopScreen).
* removed outlines from all actors except those used by the character / item editor.
* removed various NM_ListenServer references from game module.
* removed ElevatedPlayer default entries in the ZKAdmin class.
* updated GBGameInstance
    * renamed HostGame to CreateDedicatedServer().
    * created TerminateDedicatedServer().
* created WBP_WaitingOnServerOverlay to use with WBP_HostGame

* created C++ version of BP_Character's DefaultAbilities in GBCharacter class.
* added WorldGameplayAbilities to GBGameMode to hold non-default gameplay abilities from actors in the world (e.g. doors).
* updated BP_DefendTarget_LapTop to use much simpler, brute force style way of stopping/starting capture timer.

* added IsValid check to inventory bar in BP_PlayerControlled to prevent possible log spam/other issues
* created FActorGroup struct - basically a copy of FRandomPropGroup
* updated BP_RandomProp to use FActorGroup  instead of FRandomPropGroup
* updated Depot_Geo due to BP_RandomProp changes.
* updated BP_DefenderInsertionPoint to randomise the laptop placement based on logic from the BP_RandomProp Blueprint.
* updated GBGameMode & GBGameState based on latest UE4.22.1 source
    * moved a lot of the authority based logic from GBGameState back to GBGameMode
    * moved a lot of the game mode settings from GBGameState back to GBGameMode
        e.g. bTeamGame, TeamNames.
    * removed / replaced redundant variables/functions
        e.g. bCooperative
    * removed usage of GBPlayerStartManager
        * moved basic logic for ReadyRoomStart usage to GBGameMode
        * created native GetSpawnInfo() that returns location & rotation, rather then actor, to spawn player at.
        FIXME - make it return an actor still with spawn offset instead, allowing it to be used to attach players to vehicles etc on spawn???
    * updated all affected Blueprints and deleted any Blueprint based game states that were no longer in use.
* created GBGameMode::IntiCharAppearanceAndLoadouts()
    * brute force method that calls replicated client function to load the them client side.
* replaced usage of GameStateInitEvent with UGBFunctionLibrary::GetGameStateSafe().
    * the GameStateInitEvent became very sequence/timing important, whereas GetGameStateSafe() works regardless of the order GBGameState arrives or gets it GameModeClass replicated.
    * updated all affected Blueprints
* updated UWorks to 22-16 with official UE4.22 support
    * required updating GBVOIPManager

* replaced usage of round manager and round state with system based off native 4.22 GameMode.
    * updated all affected C++ and Blueprints.
* created GBGameMode::RetryStandalone()
    * allows for resetting rounds and anything else required in both C++ and Blueprint based game modes.
* updated BP_Defend
    * renamed teams from Alpha & Bravo to Attackers & Defenders.
    * added DefenderSetup round stage that gives Defenders 30 seconds to prepare while Attackers are frozen.
    * created WBP_DefendTarget_Highlight for use during DefenderSetup to show Defenders where laptop is.
* moved some insertion point related functions from GBGameState to GBGameMode.
* created GBPlayerController::Freeze() 
    * sets the Unfreeze timer locally, which prevents the player from moving or taking damage.
    * replicated the desired end time to the client and sets the Unfreeze timer based on that minus the replicated server time.
* added GBPlayerController::Unfreeze() override to actually clear the unfreeze timer handle.
* cleaned out old GBGameState functions that were no longer in use.
* removed GBPlayerStartManager class 
    * since moving from player starts to Insertion points, it's not really needed as much.
* removed GBRoundManager & GBRoundState classes.
* recompiled all plugins.

* added checks for RF_ClassDefaultObject in various class constructors and related functions to help improve load performance.
* updated GBGameMode
    * removed existing EnterPlayArea() and renamed SendToPlayArea() to EnterPlayArea() 
        * make it clear that it should be used the first time you leave the RR or join a game without an RR.
    * updated RestartPlayer() to have the same basic functionality SendToPlayArea() had, minus RR checks etc and call to PlayerEnteredPlayArea().
    * renamed SendToReadyRoom() to EnterReadyRoom().
    * created PlayerEnteredReadyRoom() Blueprint native function
        * called from EnterReadyRoom().
        * used to reset round in standalone etc.
    * added bUsesRounds check to default implementation of PlayerEnteredPlayArea() to prevent 5 second freeze when entering non-round based games for the first time.
* updated GBGameState
    * created generic delegate to replace usage of event subsystem
        * seems a bit silly to use events when only one object will ever have the information.
        * updated affected C++ and Blueprints
    * created OnDifficultySet delegate
    * created OnRoundLengthSet delegate
* updated GBGameInstance
    * renamed OnRemoveLoadingScreen to OnLoadingScreenEvent and added a FName param.
* updated WBP_LoadingScreen
    * uses OnLoadingScreenEvent to determine when map has loaded BEFORE checking for lighting scenario.
* created BP_SpawnProtectionActor
    * prevents associated team from taking damage
    * displays warning to and prevents non-associated teams from being able to cause damage
    * is enabled/disabled by round stage.
    * can be associated with any actor that can be overlapped (brush based or otherwise).
* moved BP_TerroristHunt_AIState logic to BP_TerroristHunt_GameState and then removed it.
* created DEF-PowerStation
* updated BTService_Shoot
    * increased shot delay by 0.2 seconds.
    * changed burst range when full auto from 3-5 to 2-4.
    * changed shot delay time from game time + X to X - delta time to bring it inline with other timers in service.
* made GBPlayerState::SetInsertionPoint() BlueprintCallable
* updated BP_TeamElimination
    * insertion points are randomised if none have pre-set teams.
* updated WPB_TeamElimination_OpsBoard and WBP_Defend_OpsBoard
    * created from copy TH version, minus support for difficulty & terrorist count.
    * changed to show objective for each team.
* added variables to control spectating
    * bSpectateFreeCam - enable to flying around freely, no-clipping through world and viewing anything/everyone.
    * bSpectateEnemies - enable to allow following enemies
    * bSpectateForceFirstPerson - enable to force first person mode only when following another player.
    * updated game mode Blueprints where appropriate.
* updated BP_DefendTarget_Laptop to play typing noises locally when in use.
* updated default kits for Alpha, Bravo, Attackers & Defenders.
* updated BP_Deathmatch to add support for randomised player starts with bias based on distance.
* updated BP_StunAffect to remove itself when local player dies.
* updated WBP_ServerPassworldOverlay to submit on pressing Enter (Yay, finally!)
* modified UUWorksInterfaceCoreUser::DecompressVoice() to use older method using MAX_UNCOMPRESSED_BUFFER_SIZE
    * should make VOIP sound better since it was updated.
* updated BP_OpticalSightComponent
    * updated math used to determine RTT size - was still assuming screen would be filled.
    * updated logic to checked what the RTT size should be each tick and re-size accordingly
    FIXME - tweak to remove generating too many RTT's????
* Changed bUseSimpleShadowsForCharacters to True as default
     * Helps performance and can easily be changed by end user

* updated WBP_Tab_Master to add event to more easily set the tab to selected and fire off internal events nicely.
* updated WBP_InGameMenuManager
    * now uses soft class pointer in order to find or create proper screen to switch to
    * should slightly improve load times in editor, game & server.
    * reduces potential issues with Blueprints.
* updated WBP_SwitchScreen_Tab
    * now uses soft class pointer in order to find or create proper screen to switch to
    * should slightly improve load times in editor, game & server.
* updated admin screens.
    * now uses soft class pointer in order to find or create proper screen to switch to
    * should slightly improve load times in editor, game & server.
    * reduces potential issues with Blueprints.
    * updated GBPlayerController::AdminRequest() to use an event delegate, removing the Blueprints to reference each other back and forth.
* updated GBPlayerController
    * changed widget class variables to soft class pointers
    * now async loads widget classes when HUD is first created
    * should slightly improve load times in editor, game & server.
* updated GBGameViewportClient to only bind OnScreenshotCaptured() when requesting a screenshot.* added LadyBugTracker
    * replaced old bugs/issues with simple Report Bug screen using LadyBugTracker.
    * modified LadyBugTracker C++ to support jpg screenshot and additional info in its feedback option.
* removed RBTrelloPlugin (no longer required)
* removed LightMapUEr plugin (no longer used)
* moved ImageUtils.h out of WITH_EDITOR define in Runtimeutilitis.cpp in LadyBugTracker plugin.

* updated GBGameState
    * moved default character appearance/loadout logic to GBGameMode
    * renamed FReplicatedCharRestrictions to FReplicatedPlayerCharProfile and now use it ensure correct profiles are loaded by clients AND for restrictions.
    * created OnRep_PlayCharProfiles() to call InitCharAppearance() and InitCharLoadout() on local player controller for every profile required by game mode.
* updated GBGameMode
    * updated ApplyCharAppearanceAndLoadout() to always requires profile name.
        * fatmarrow pointed out that a blueprint that uses this function is the point of failure, hence the update.
    * updated calls to GBGameState in relation to default character appearance/loadouts
    * changed all calls to ApplyCharAppearanceAndLoadout() in C++/Blueprints to always supply a profile name based on current game mode/team combinations.
    * updated GenericPlayerInitialization() to call InitCharAppearance() and InitCharLoadout() on local player controller for every profile required by game mode.
        * required in stand alone games since the player controller will not be valid at the time when OnRep_PlayCharProfiles() is called.
        * almost identical logic to AGBGameState::OnRep_PlayCharProfiles()
    * removed InitCharAppearancesAndLoadouts() - profiles now replicated on GBGameState.
* removed GBPlayerController::ClientInitCharAppearancesAndLoadouts() - no longer required.
* updated GBPlayerController::InitCharAppearance()
    * only tries to verify skins on user appearance file.
    * will load default if it fails to load user appearance file, fails to generate char appearance or skin validation fails.
    * will error out instead of attempting to generate a random appearance if the default appearance is not found.
    * no longer uses LastUsed subdirectory - updated all affected Blueprints.
* updated GBPlayerController::InitCharLoadout()
    * only tries to verify skins on user loadout file.
    * will load default if it fails to load user loadout file or fails to generate char loadout 
    * will error out instead of attempting to generate a random loadout if the default loadout is not found.
    * no longer uses LastUsed subdirectory - updated all affected Blueprints.
* updated LadyBugTracker
    * changed AddScreenshot() to a latent function
    * changed Feedback() to generate its save directory based on the user saved directory instead of project saved directory (means it should work packaged).
* created GBGameMode::SetRoundLength()
* updated defend game mode support changing capture time via ops board etc
* updated all ops boards to make sure changes worked in standalone for all settings, not just lighting and terrorist count.
* updated BP_DefendTarget_Laptop
    * added server multicast start/stop typing sounds on clients.
    * increased volume of typing sound on.
* removed exec meta from GBPlayerController::SetGodMode() & SetNoTarget()
* updated GBGameMode::GetReadyRoomStart()
* created A_AIBarkWrap_Cue to use as BP_BadGuy's VoiceWrapSoundQue.
* modified FBugTrackingSystem_MantisSoap functions to make sure they call SetLoginData() if username and token is present.
* removed stubs from GBGameMode relating to RR start usage.
* updated GBPouch
    * placed ModularPouchClass reference with ModularPouchId.
        * updated or removed related functions.
    * made UIReplaceWithModular BlueprintCallable,
    * updated character and item editor blueprints to add/remove modular pouches as required.
       * this fixes ammo being listed as "Primary Ammo" and of shotguns multiplying said ammo over and over again.
* updated BP_ModularAmmoPouch_Master
    * changed reference to SetModularPouchClass() to SetMoudularPouchId().
    * added comments to some of the logic to make it easier to follow.
* created BP_Pouch_Ammo_LMG and assigned it to the MK48.
* updated GBGamePlayStatics::NukeActor() function to ensure target is detached from parent and parent is updated.
* updated GBTubeMagComponent to use soft class pointer for its base/default bullet item rather the hard class reference.
* updated GBPlatform to not force defaults if no pouches are attached to it.
* added bSecondShot parameter to GBFirearm::OnContinuedFiringEvent()
* replaced usage of native UE4 audio in BP_Firearm_Master with Wwise events.
* updated GBFirearm
    * no longer calls OnSetFireModeIndex() when BarrelSpatialSoundActor is created.
    * fixed OnStopFiringEvent() being called after an empty shot.
* updated BP_Firearm_Master
    * cleaned up logic around various wwise nodes.
    * created SetFireModeAudioSwitch event and called it from OnEquippedEvent.
* added some Wwise related settings to DefaultGame.ini
* added missing UE4Editor-LadyBugTrackerRuntime.dll from earlier submit.
* updated GBFirearm
    * combined OnStartedFiringEvent() and OnContinuedFiringEvent() in OnFiringEvent() with a NumberOfShots param.
    * added NumberOfShots param to OnStoppedFiringEvent().
* updated BP_Firearm_Master
    * updated to use OnFiringEvent() and check the NumberOfShots param to decide which audio event to post.
    * updated usage of OnStoppedFiring() to not post audio event unless the NumberOfShots is greater than 1.
* updated montage replication code 
    * added support for changing the next section.
    * added support for replicating client play montage to server.
* added DefaultBugTracker.ini & DefaultPlayerSettings.ini to WhitelistConfigFiles for Staging.

* created GBFunctionLibrary::IsGameWorld() - returns true if in a game world, editor or otherwise.
* updated FrontEndMap-NEW
    * add async load step before applying appearances and loadouts.
    * added macro to take out primary/other item, set off target and engaged alphas.
    * added macro to enable laser.
    * added randomised timer to toggle night vision equipment and post process effect.

* updated BP_DefaultHandgunAmmoPouch
     * listens for handgun to be added with magazine, the adds appropriate magazines and stops listening.
* updated BP_ModularAmmoPouch_Master
    * copies actor tags to ensure anything set to DefaultItem is not encoded into a kit.
    * will fail gracefully if it cannot find associated firearm type.
    * removed unnecessary logic
* updated WBP_CharacterEditor
    * will now do the add/remove modular pouches thing and update the summary for everything.
    * added slight delay to UpdateSummary() to allow magazines etc to be spawned in.
    * fixes incorrect secondary mag counts
* updated GBItem
    * will no longer encode items with the actor tag 'DefaultItem'.
* updated GBPouch
    * copies actors tags when replacing itself with modular version
    * will not attach to character if an existing pouch is already attached in the same location (fix for multiple default handgun mag pouches)
* updated GBCharacter
    * removed usage of bCanTakeDamage when in Ready Room.
    * updated CanT
    * removed AddDefaultItems() call in PossessedBy() - now only called once a loadout is applied somewhere.
    * removed bAddedDefaultItems variable and option to not destroy default items from DestroyInventory().
    * added ReadyRoom check to FellOutOfWorld()
    * added ReadyRoom check to Suicide()
    * added CheckStillInWorld() override to ignore KillZ if in ReadyRoom.
    * updated ShouldTakeDamage() to ignore damage if in ReadyRoom.
* updated GBGameMode
    * removed usage of bCanTakeDamage when in Ready Room.
* created BP_GBStaticLightPost to replace related Blueprints in City_Geo.
    * deleted GB versions of said Blueprints and related audio assets.
    * single Blueprint no handles light post, traffic lights and crosswalk, though the latter two do no animate.
* change default PlayerEnteredReadyRoom_Implementation to only change round stage to WaitingForReady if it was PostRoundWait when standalone
* made sure defend laps tops are all hidden when BeginPlay() is called, then randomised when round stage changes to WaitingForReady.
* slightly adjusted spawn protection area in DEF-PowerStation
* changed default setup of BP_M14_EBR_MOD2
* removed usage of gameplay ability based firing and reloads
    * added Pressed/Released() to directly to GBItem class
    * updated all affected C++ and Blueprints.
    * Firemode action is now known as ChangeFiringMode – you've been warned!
* updated firearm reload animations
    * sounds related to reload are now done here instead of inside the firearm Blueprints.
    * logic for reload is now handled by different animation notifiers
* updated GBCharacter
    * updated montage replication based on the system used by the gameplay ability system
* updated GBGameMode
    * new players are put into a waiting list and started as spectators.
    * a timer is used to spawn them in properly once their char appearance and loadouts arrive.
* added Maps/City, Maps/747 & Maps/Test to DirectoriesToAlwaysCook in DefaultGame.ini
* updated TE-Paintball
    * added character editor related actors
    * added triggers to prevent firing outside of the play area
    * added screenshot
* updated WBP_Settings_Controls to update Firemode bind to ChangeFiringMode
* updated WBP_TerroristHunt_Settings to include a Defaults button to reset custom AI settings.
* updated GBPlayerInput version number to 12
* updated GBPlayerController
    * switched from TSoftClassPtr to FSoftClassPath for widgets.
    * renamed FSoftClassPath  to FSoftClassPath 
    * added DeathOverlayWidgetClass as a UPROPERTY() based variable to make sure it isn't GC'd.
    * made sure both in game menu and chat overlay widgets are loaded when client hud class is set.
   * added log warnings if caching GBPlayerState fails.
* updated GBFirearm
    * changed RecoilCountUpdated() to accept RecoilCount as a parameter so it no longer has to have a valid GBInstigator.
    * switched from TSoftClassPtr to FSoftClassPath for montages.
    * added  as a UPROPERTY() based variables to make sure it related montages are not GC'd.
    * improved async loading of Montages in OnBeingEquipped().
    * updated all affected Blueprints.

* changed colour of defend target markers to prevent Scopey beating me
* updated BP_Character to prevent it binding OnPlayerStateReceived() on dedicated server.
* changed all the drag and drop operation colours from green & orange to green & pulsing-green
* changed platforms to use sphere as proxy mesh instead of existing pouch meshes to make it easier to select platform MOLLE points
* improved GBGuardPoint GroupName variable tooltip
* disabled friends buttons from In Game menu.

BUILD UPDATE #012: Creep

Another intended hotfix feature-creeped into a proper update, Build Update #012 is here with difficulty level selection (including custom settings) for Terrorist Hunt, a shorty version of that sweet Midwest Industries tactical AK, and the usual assortment of quality-of-life fixes and additions.

Read on as we highlight the cooler stuff, and don’t forget to leave your feedback, whether it’s in the comments below, forums (BFS · Steam), Discord or any of our social media channels.

› NOTE: All dedicated servers must be updated to work with the current build.
› NOTE: Some Controls/Gameplay settings have been reset with this build.
You will also need to set your Player Name again.

Build highlights

A.I.

Difficulty settings and customizable parameters

Terrorist Hunt now has four A.I. difficulty presets: Untrained, Trained, Experienced and Ludicrous. You can also create a custom A.I. difficulty setting by individually modifying each parameter. How you set up the A.I. difficulty depends on the mode you’re in. Let’s go over them:

Play Offline / Host Game

For single player and listen server multiplayer, simply use the “AI Skill Level” drop-down menu when setting up the Terrorist Hunt game. By selecting “Custom”, you can modify each parameter individually. For information on what each parameter does, simply hover the mouse over the line and it’ll display a tooltip.

› The Center of Mass Bone parameter (which defines what part of the character model the A.I. bots aim for) has 3 “b_Spine” options: b_Spine is closer to the hip, b_Spine2 is near the neck, and b_Spine1 is in between those two points.

The Ops Board (a.k.a. the insertion selection LED Panel) in the Operations Room has also received some configurable settings:

The map’s time of day—as well as the enemy’s expected resistance and difficulty level—can now be set directly from the Ops Board. Please note that these options are only accessible to server admins or offline (single player)!

The difficulty level can be set to any of the four presets, as well as “???”, which uses the custom A.I. preset drawn from whatever values you set in AISettings.ini (located in %LOCALAPPDATA%\GroundBranch\Saved\Windows).

Dedicated servers

For dedicated servers, the server admin can simply use the Ops Board (explained above) or modify the AISettings.ini file manually (%LOCALAPPDATA%\GroundBranch\Saved\Windows).

Distance threshold for aim error

The aim error code has been updated so that the deliberate missing now happens beyond a set distance, controlled by the DeliberateMissDistanceThreshold parameter. Within the set distance, A.I. are not likely to miss. Beyond that distance, the usual deliberate missing (determined by DeliberateMissTime and DeliberateMissBlendOutTime) kicks in.

› Want to disable the deliberate miss property entirely? Simply set DeliberateMissTime to 0 (zero).

It’s worth reminding that the default A.I. presets are, as everything else, subject to change. So make sure to share your experience with the presets and custom A.I. values, as it might be useful for further tweaks.

AK-74 MI CQB

Little sister to the AK-74 MI (formerly MWI), the AK-74 MI CQB has been added to the armory. For now, it’s essentially a better option for close quarters with no drawbacks. Don’t worry: proper stats (range, accuracy, weight etc.) will be worked out in the future for all weapons.

“I like how it’s like the AK but smol” —Jeza (also the author of the above screenshot, shockingly)

Controls guide and loading screen tips

In order to help new players get the grasp of GROUND BRANCH’s less conventional controls schemes, we’ve added a guide for the default controls to the main loading screen. All loading screens now also carry valuable gameplay tips. We’ll be adding more tips as we go—feel free to suggest some of yours!

› The default controls graphic might appear distorted on non-standard (16:9) aspect ratios, despite us specifically telling the engine to account for those. Damn you, UE4! *shakes fist*

Miscellaneous fixes

  • Foliage no longer blocks firearms, nor prevents leaning.
  • The Offset Rail can again be mounted anywhere along the top rails (rather than only the forearm top rail).
  • Mouse sensitivity settings will now be preserved upon change and no longer reset to different values.
  • You can (once again) select the default zero for individual weapons and optics. Go to SettingsGameplay and look under Default Zeros (right-hand column). Add an optic/weapon with the [+] button underneath the list, then set the desired custom zero for it.
  • Fixed broken character and weapon movement/rotation in the Customize Operator screen when it was accessed from the Main Menu. Nope, it’s done broke again. [REDACTED] [home office being trashed in the background]

That’s it for Build Update #012. Until the next time!

P.S. We’d like to thank Rangda for the badass screenshots he’s always providing for the vast majority of announcements and social posts we make. Tier 1 screenies, dude!

Change log

Build version: 1026

Client

Steam Build ID: 3679830
Size: 662 MB

Dedicated server

Steam Build ID: 3679833
Size: 33 MB

FIXES

* FIXED radio volume issue on SmallTown
* FIXED bush in Power Station missing proper bullet collision settings
* FIXED Bush in Power Station with bad visibility collision
* FIXED firearms being obstructed by foliage
* FIXED foliage blocking ability to lean
* FIXED various collision bugs in Storage Facility
* FIXED see through boulder in Storage Facility
* FIXED rendering issue with blinking light in Storage Facility tunnel
* FIXED offset rail being restricted to top rails instead of sight & top rails.
* FIXED mouse sensitivity appearing to reset to some other value when changed in UI while engaging a sight.
    * for such a seemingly small change, it required a lot more work then expected :P
* FIXED not being able to add or edit a default zero entry in the settings menu.
* FIXED Always Run not toggling on/off when set and already in game until you hit Run again
    * will still need to release run key if it is set while run key is held down (get over it)
* FIXED not being able to move/rotate in the character editor from the main menu.
* FIXED crash due to destroying ability system component while an ability had it locked.
* FIXED breaching charges being able to kill targets through a wall.


CONTENT

* small tweaks in radio-related assets
* experimenting with new water material in Depot
* slight update to splash screen


A.I.

* updated GBAIController
    * replaced AimErrorPeriod with simpler AimErrorUpdateInterval
        * controls how often we the aim error alphas are changed (random between -1.0 to 1.0).
    * changed target distance aim error from blend to new to instant switch
    * added aim error based on AI movement speed
    * changed target velocity aim error from blend to new to instant switch
    * added distance threshold to deliberate miss code
        * below this distance the deliberate miss is blended away due to being too close.
    * added SkillLevel support
        * added 4 skill level presets to DefaultAISettings.ini (1-4)
        * added defaults for custom skill level to DefaultAISettings.ini (actual custom saved in AISettings.ini in save directory)
* added Difficulty to GBGameMode
    * currently only controls the AI skill level
        1-4 corresponds to the skill level presets.
        < 1 makes it use what ever custom skill level is defined in by default or under save directory.
    * value is replicated on GBGameState for use with UI elements etc.
* updated WBP_TerroristHunt_Settings to exposed all AI settings
    * required some updates to WBP_Config_XXX widgets to allow settings to be instantly saved.

* updated GBAIController
    * exposed ReactionTimeBase and ReactTimeRandom to settings
    * added bBeSuspicious BB boolean that is set when a non-hostile/non-friendly actor is sensed
        * this is a simple quick solution to getting AI to react to explosions, doors etc for now
        * updated to Blackboard and affect behavior trees.


CODE

* modified DamageMeleeWeapon
    * added option to use mutl instead of single trace
    * added list of surfaces to ignore during trace.
* removed unused animation notifier
* updated WBP_InGameMenuManager to use a single C++ function instead of looping through all child widgets :|

* updated GBPlayerSettings
    * changed all settings to config values and class to a config class
    * forced LoadSettings() to reload the config from disk.
    * created ApplySettings() to ensure config values were applied without the need to called LoadSettings() first.
    * changed default zero struct to use PrimaryAssetDataId instead of a string to hold the info about what item to zero for.
    * removed unneeded default zero functions.
    * changed CrouchType & GrenadeSwitchType from enums to int values so they work with UI widgets more easily.
    * updated all WBP_Settings_XXX to reflect changes
* updated GBAIController::InitSkillLevel() to use a full path to the AISettings.ini
* changed "Ridiculous" to "Ludicrous" to describe skill level 4 for AI
* updated UGBGameplayStatics
    * created new functions CanDamageStaticMesh(), CanDamageSkeletalMesh() & SphereOverlapDamageableComponentsSorted() based of functions prototyped in grenade explosion Blueprint.
    * created ConeOverlapDamageableComponentsSorted() based on SphereOverlapDamageableComponentsSorted() that checks that the component origin OR bounds are within a cone.
* created GBCharacter::CanDamageRadial() as a shortcut to call UGBGameplayStatics::SphereOverlapDamageableComponentsSorted() with require skeletal mesh & appropriate bones
    NOTE: reduce bones checked?
* updated GBGameInstance 
    * added bShowDefaultControls bool with function to clear it.
    * added OnRemoveLoadingScreen delegate for loading screens to use.
    If not bound, will remove any loading screen present.
* rigged up WBP_StartupScreen to show up on initial load
* created WBP_RandomHint
    * used by start up and loading screens to display hints 
    * randomly picks a hint that isn't used until it has gone through all over them, then reset
* fixed initial loading screens defaulting to 1280x720
* re-imported default key map texture at proper resolution
* quick grammar/spelling pass on random hints
* added pulse animation to "Continue" button on WBP_StartupScreen to draw the eye slightly more

BUILD UPDATE #011: Bark

Edit (Mar 15, 2:30 am EST): Corrected Steam build numbers and download sizes.
Edit (Mar 16, 2:14 am EST): Specified customization screen rotation bug.

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:

Build highlights

Initial A.I. overhaul

“I’m starting to think there might be a reason why so few shooters
bother with single player and co-op focus these days…”
—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:

They may look kinda silly at times, but wait until one of these bastards pops up behind you and smokes your ass.

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.

Content

Reworked MICH

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.

FAL (Vintage)

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.

Known issues

  • Customization menu: Character/weapon rotation (click and drag function) doesn’t work when the customization screen is accessed from the Main Menu (via the “Customize Operator” option). It should work normally within maps, however, via locker or workbench.

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:

Damn, that sounds good.

Mmm-mm.

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.

Patch notes

Build version: 1026

Client

Steam Build ID: 3645609
Size: 1.7 GB

Dedicated server

Steam Build ID: 3645614
Size: 51 MB

FIXES

* 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.

BUILD UPDATE #010: Hotfix

Build Update #010 is a small hotfix patch to correct some missing fixes (meant for our last update) and adjust/add a few other things.

› NOTE: All dedicated servers must be updated to work with the newest build. ‹

Highlights and full change log below:

Build highlights

New effect for the AN/PVS-15 night vision goggles

After some UE4 wrestling, John has managed to update the night vision post-process effect with a smoother and more realistic look. The near blur no longer has a “boxy” look, and neither does it cause illuminated reticles to generate that odd geometric pattern when pointing them at nearby objects. It also has a smoother transition between the focused and out-of-focus areas.

New PP effect for NVG, seen here without the circular overlay mask

You may notice a visible “border” around the blur when parts of the weapon are at the foreground of focused objects. That is a limitation of the engine; we might look into better solutions in the future.

Why the blur? Real-life night vision devices have fixed focal ranges, meaning they can’t focus on both near and far objects at the same time. Because of this, operators normally adjust the focus to a medium to far range, leaving very close objects out of focus—which includes sights. That is part of the reason why the AN/PEQ-15 and other IR laser devices play such an important role in nighttime operations, as they produce a beam only visible through night vision and allow the weapon to be aimed without the use of sights, as they become either blurred out beyond utility or simply are difficult to line up with the NVG tubes, among other factors. We’ll be looking into the viability of simulating more of these aspects as we go.

Known issues
  • Materials that use transparency (e.g. sunglasses and facial hair) will appear in focus even within the effect’s range.
  • The intensity (perceived amount of blur) of the effect may vary between maps.

Zeroing

Default sight zero for SMG/PDWs has been changed from 100 m to 50 m.

In addition, you can now see the zero for your current primary weapon setup in the Loadout Summary (right-hand box in the Operator Customization screen):

› We will be adding the ability to set your preferred zero for specific weapons and sights in the future.

A.I. reaction tweak

Immediate aim error for the bots has been increased, hopefully making them even less likely to score insta-kills.

Miscellaneous fixes and changes

  • OKP-7 reticle adjusted to no longer flick in and out of sight.
  • Fixed map list not starting correctly and then cycling to same map over and over again.
  • Fixed usage of the UMP45’s front sight post.
  • Further optimized under-development map City.
  • Also in City: added manhole ladder access between street and underground levels.

BONUS INTEL: What’s going on with the sound design overhaul?

Audio-man Mikson is still working hard on GROUND BRANCH’s sound, and trust me: we’re looking forward to it as much as you are.

The weapon sound system is being developed alongside Kris and is close to completion. In parallel, Mik has been tweaking sound assets and getting them ready for the new system. He’s halfway through the SFX for the current weapons. When both the sound system and SFXs are ready, implementation “shouldn’t be a problem”, in Mik’s own words. Here’s hoping, and go Mikson!

Patch notes

Build version: 1025

Client

Steam Build ID: 3526830
Size: 866 MB

Dedicated server

Steam Build ID: 3526834
Size: 38 MB

FIXES
* fixed admin map list creation UI not clearing list of maps before repopulating resulting in massive list of potential maps
* fixed admin map list creation UI not displaying game mode in the list of entries
* fixed map list not starting correctly and then cycling to same map over and over again.
* fixed round not starting again if you manually go to spectator or RR when round is paused due to death while offline.
* fixed misc skin display names not matching skin short names.
* fixed UMP45 front sight post usage
* fixed bad WorldContextObject in RBEventManagerCallEvent() causing crash
* fixed loadout not being applied to corpse if you become a spectator when dead.

AI
* tweaked AI to use worse aim error instantly and interpolate to improved.

CONTENT
* City Map
* more optimization work in outside area
* added manhole ladder access from street level down to tunnel
* changed some settings in DefaultScalability.ini to make sure the essential PP (post process) settings stay on all settings
* mainly NV blur effect
* OKP-7 reticle updated to make it flicker less
* reworked NVG blur effect to be smoother and more realistic

CODE
* added sight zeros to summary area on character editor.
* changed DefaultIronSIght desired zeros from 100 to 50 on all SMG's.
* added time limit to GBGameState
* added remaining time limit on server info board
* added round length to GBRoundState
* added round duration to TH ops board

BUILD UPDATE #009: Line of Sight

aIt’s been just over a month since our last update, and we’re now nearly a month into 2019, at the end of lovely January. While most of you freeze your asses off and the rest of you—in the southern hemisphere—melt your asses off, this dev team—about 67% frozen asses and 33% melted asses—has been working hard on Build Update #009.

› NOTE: All dedicated servers must be updated to work with the newest build. ‹

This build’s highlights include listen server improvements, some very welcome A.I. adjustments, new controls options and improved default bindings, and fixes galore. Let’s take a closer look at the highlights and, as always, the full change log awaits at the end of the post. Whoop!

Build highlights

Listen servers streamlined

Listen servers have been cleaned up and are a lot more functional with this update. Among the improvements, you can forget about port forwarding and invite your Steam friends directly into your game.

To invite Steam friends into your server, start a listen server (via Host Game in the Main Menu), hit Esc once loaded in and then click Friends in the top menu bar. From there, simply select the friends you’d like to invite and click the Invite button (bottom-right). Once accepted, your friends will be brought straight into your server.

› Listen servers do not appear in the Server Browser. This is intended.

A.I.: Aimbot Interrupted

It took us a while, but we’ve finally managed to tone down the A.I.’s reaction time and accuracy. The days of getting 360-no-scope’d and John Wick’d by seemingly unsuspecting enemies are over, as bots are “much more likely to miss initially and take a moment to correct even after they have turned”, according to Kris. We’ve done quite a bit of testing and those situations where you feel you’ve been unfairly killed were definitely reduced massively.

Vegetation is your friend

Another thing that should make solo and co-op play a lot more satisfying is the fact that foliage will now effectively block the A.I.’s line of sight. It’s a binary system at this point (they either see you or not) with some rough edges to be rounded out, but generally speaking, We can’t see them—they can’t see us™ is now activated. We’ll be upgrading this system with visibility thresholds in the future.

Improved enemy patrol routes

Enemy bots in Power Station, Tanker, Depot and Small Town have received both placement and navmesh updates. Tangos should have more varied spawn points and patrol routes, as well as better overall navigation.

› Storage Facility has not yet been updated with this system.

New enemy skins

We have updated the Depot and Small Town tangos to use new skins and loadouts.

New enemy skins in Depot

New control options and default bindings

Hold Crouch

You can now opt to hold the Crouch key (default C) to remain crouched instead of pressing it to crouch and again to stand up. To select that option, go to Controls > MovementCrouch Type and select Press (Momentary) from the drop-down menu.

Select your preferred reload type

Are you more of a speed reloader than a tactical reloader? You can now invert the control scheme for reloads and make a single press of the Reload key (default R) do a speed reload (where you drop the current magazine) and a double-tap do a tactical reload (where you put the current magazine back into the pouch). To do that, go to Gameplay > Firearm > Reload and select No Retention from the drop-down menu.

New default bindings

We have changed/added the following default bindings:

  • Drop Item (previously Z) is now bound to J to prevent accidental drops.
  • Commo Rose/Radio Menu (previously unbound) is now bound to G.
  • The Console can now also be accessed with Shift + 6 (^).

› You may need to reset your controls and/or delete the files located in %LOCALAPPDATA%\GroundBranch\Saved\Config\WindowsNoEditor for the new default bindings to apply.

The current default control scheme is as follows:

We’ll be adding this key map to the game menus at some point too.

Cleaned up display names for items

We have updated the display names of most in-game equipment for consistency, accuracy and, in some cases, to stay on the safer side of legal matters. We’ll keep updating them as needed.

NEW DEVELOPMENT MAP: City

John has been working on a new urban map called City, accessible in offline play under the “Development” category.

We’re leveraging Epic’s UE4 Marketplace to get more maps in (and playable) faster, though these assets still require a lot of custom work to become GROUND BRANCH maps. Initial focus for “City” will be PvP—as will be the focus of our next major Build Update.

Miscellaneous fixes

  • Aiming down sights no longer defaults to secondary (offset or piggyback) sight.
  • AK-74 MWI iron sights now work properly.
  • The AK Rail Adapter is no longer compatible with the AK-74 MWI.
  • Exorcized Christmas spirit from operators’ facial hair.
  • Purged the insanity-inducing sound loop caused by ejected casings colliding with the environment. [silent fireworks]
  • Radio chat can no longer be heard by the other team while in the Ready Room.
  • Fixed abrupt turning breaking character model spine.
  • Player’s dead body will no longer remain in the map when retrying a solo (offline) Terrorist Hunt.
  • Headset earpieces no longer clip through MICH helmet.

Whoops!

We slipped and a couple of fixes were not checked in before build packaging: Those are the OKP-7 reticle fix and the scope magnification adjustments. We’ll likely release them in a hotfix patch soon. Sorry!

Patch notes

Build version: 1025

Client

Steam Build ID: 3490483
Size: 2.1 MB

Dedicated server

Steam Build ID: 3490501
Size: 45 MB

* FIXED bad material settings on AK suppressor that made it too shiny
* FIXED ability to use AK rail attachment on new AK-74 MWI 
* FIXED ComTac headsets for MICH helmet not fitting properly
* FIXED AK-74 MWI default rear sight getting messed up when no other sights/optics attached
* FIXED incorrect fire selector positions on AK-based weapons
* FIXED white beard in certain lighting conditions
* FIXED initial sight selecting picking secondary sight instead of main
* FIXED incorrect mount setup for PMII 5–25x scope that required only 1 rail slot to mount
* FIXED Small Town Team Elimination spawns being shown outside playable area
* fixed small static mesh actors having simulate physics set to true on server
     * should stop players being shot up in the air randomly on Depot and other maps.
* fixed bug with ToPlayArea/ToReadyRoom admin commands that spawned "puppet" characters (credit Error404)
* fixed SpawnCountMin on GBAISpawnPoint's being set to -1 when SpawnCountMax was 0.
* fixed more misc navmesh issues in Depot
* fixed more misc navmesh issues on Power Station & Tanker Ship
* fixed automatic squad ID assignment in GBAISpawnManager to not use squad id 0 (global squad)
* fixed AI not looping back when reaching the end/start of patrol route that does not branch or loop to itself.
* fixed log spam in GBAIPath
* fixed AGBAISpawnManager::CreateOverDurationTimer() to obey order in which create over duration target spawn points are assigned to it.
* FIXED collision issue on red stairs in Power Station
* FIXED missing steps in Tanker Ship engine room that trapped A.I. in small area
* fixed patrol path on PowerStation that would get AI bunched up
* fixed more misc navmesh issues on PowerStation
* fixed turning quickly causing animation blueprint to break the player's back
* fixed log spam from overly enthusiastic dropped items
* fixed log spam about loadout/appearance reuse
* fixed particle collision causing spamming
* fixed invalid reference in BP_ImpromtuLadder_BFS
* fixed invalid reference in BP_TerroristHunt
* fixed GBGameState() functions GetLightingScenario() & GetLightingScenarioTag() not being public
* fixed possible invalid in BP_RandomProp
* fixed dead body being left behind when click "Try Again" in offline play
* FIXED missing collision on rock near top area on StorageFacility
* fixed own body not having loadout applied on client
* fixed delay on adding name tag to vest platform
* fixed equipped firearm being removed when leaving shooting area in RR
* fixed invalid AI appearances on TH-SmallTown
* fixed navmesh modifier on S_MountainRock
* fixed incorrect collision on American_Elm_Desktop_B_FoliageType
* fixed invite command string not being cleared once used
* fixed name used in for invite screen being blank if no nickname was set by local player
* fixed bug in UWorld that caused NetMode to be standalone when compiled with editor.
* fixed bad placement of red dot in BGLowVis_GunnerM4.kit
* fixed voting commands/server name not showing up
* fixed unexploded breaching charges not being removed on round reset.
* fixed RR roster white boards not showing teams
* fixed nullptr when banning someone that is offline
* fixed LOD not being forced to Zero in item editor
* fixed minor log spam from ZKVote class
* fixed character and items from character editor being replicated to connected clients when listen server host edits their character
* fixed radio being heard by other team when using radio in RR
    * note - can still hear other team talking on radio outside of RR if in close proximity
* fixed angled sights being considered during when picking an initial sight to use.
* fixed VOIP radio not setting last talk time to 0.
* fixed local VOIP in RR when not on a team.
* fixed admin name check in AGBGameMode
* fixed warning about missing game state in WBP_TerroristHunt_Settings while in main menu
* fixed ban message – now just gives expiry date rather than remaining time in seconds.


ENGINE
* wrapped warning about additive animation in AnimNode_SequencePlayer with a WITH_EDITOR define.
    * this is shown in error for GB anyway. This change simply stops the log spam about it.


CONTENT
* Updated holo sight reticles for clearer visuals
* Added in military style laptop prop
    * Can be used for various game modes or as a static map prop
    * BP created that allows for open/close position and on/off

* SmallTown A.I. setup
* Cleaned up some navmesh issues on Small Town and rebuilt lighting

* updated TH-Depot
    * fixed more misc nav mesh issues
    * fixed misc patrol path issues
    * tweaked AI spawn points priorities
    * Did pass on new A.I. paths and setting up spawns
* Optimized plastic hit effect 
* First pass on new City map (Development)
    * SetupLevel streaming volumes so underground isn't rendered at same time as above
    * Cleaned up some LODs and collision on Meshes
    * Added "buffer" areas(stairwells with corners and hallways) between above ground and below ground to mask level streaming
    * Cleaned up a lot of StaticMesh collision and LODs
    * Created DV version of map
* Cleaned up display names for weapons, sights and some attachments.
* Changed collision preset on painted foliage

* Set up proper PhysMaterials on foliage meshes


AI
* added new spline based AI patrol routes on Power Station and Tanker Ship
* improved sorting function in BP_TerroristHunt_AISpawnManager
* tweaked BT_GBAI_Following & BT_GBAI_Patroling update service time.
* tweaked BTService_UpdateTargetPathPosition
* added ShowDebug option "AIaim"
    * shows origin focal point and final focal point adjust for aim error
    * displays aim error info text at AI character.
* added AimErrorAngleDifference curves to AI
    * based on yaw/pitch difference
    * overridden by larger values, ignores small values.
    * after timer based on yaw/pitch difference, leaps to zero.
    * will make AI much more likely to miss initially and take a moment to correct even after they have turned.
* added service to BT_GBAI for determining follow position (BTService_FollowUpdate) instead of just bum rushing them.
* updated AI
    * created BT_GBAI_Patrolling, related service and tasks.
    * created BT_GBAI_Following, related service and tasks.
    * updated BT_GBAI to run new sub-BT's.

* Storage Facility has NOT yet gotten the AI placement reworked with the new system.


CODE
* began updating AI spawning
    * updated GBAISpawnPoint, based of GBInsertionPoint
        * supports from 1 to n AI per point
        * auto-generates spawn offsets allowing for easy squad generation
        * can still be used for individual AI placement
        * supports randomly spawned in min/max range.
        * can be set to active/not active, to enabled or disable their use for spawning AI.
            * useful if you want to disabled a spawn close to a chosen player insertion point.
    * updated GBAISpawnManager
        * only support from GBSpawnActorInterface to GBAISpawnPoint.
        * improved general flow
        * added GetSpawnPoints() with get active only parameter.
* updated TankerShip & PowerStation
    * replaced existing AI Spawns with AI Spawn Points
    * replaced existing way points with new ones.
    * improved nav mesh pathing and pathing in general using nav mesh modifiers and nav link proxies.
    * PowerStation needs some additional fixed spawn points
* moved spatial sound tag support from Blueprint to C++ for Mikson
    * see BP_Firearm_Master OnSpatialSoundTagChanged event.
* added DefaultSpatialSoundTag to world settings
    * use this to set default tag to Inside/Outside as required.
* BP_Firearm_Master: added acoustic space management, firearm type management and fire sound Wwise event (all are currently disabled until the first Wwise update is ready)
* added first set of Wwise events
* updated and moved inventory soundbank (previous one marked for delete)

* added UnfocusedVolumeMultiplier to audio settings (credit lt_delay)
    * Lets you set the volume the game should be at when it loses focus, instead of simply muting everything.
* added press/momentary crouch option (credit AGAM)
* updated GBInsertionPoint based on GBAISpawnPoint
    * default handling of spawn offsets etc is all C++ instead of Blueprint based.
    * updated all affected maps.
* created GBAIPath
    * spline based solution for laying down patrol routes etc
    * supports drag-and-drop branching to other paths or looping to itself.
    * supports basic weighting, with direction and randomised bias.
    * includes in-editor button to validate all path spline points in one go.
    * began laying out new patrol paths in Depot for testing.
* added C++ functions to Get/Set UnfocussedVoulmeMultipliers

* replaced bToggleCrouch=True with CrouchType=1 in DefaultPlayerSettings.ini

* added IAISightTargetInterface to GBCharacter and implemented CanBeSeenFrom
    * needed to be able to quickly test WTF was going on with AI sight traces - this allows for that and more later.

* moved drop default binding from Z to J
* added default binding for radio menu to G
* added Caret as default console key to better support German keyboard layout

* updated GBBulletMovementComponent
    * leveraged unused EPhysicalSurface enumeration to hack in support for ignore bullet collision on certain materials until we update the PM_XXXX assets properly.
    This is to allow us to use complex collision for foliage, but have the bullet ignore collision with leaves.
* created PM_IgnoreBullets for use with materials to make them ignore bullets.
* rigged up GBAIController to read AI sense config sight settings from the AISettings.ini file, based on the lighting scenario (Day/Night)
* updated GBAISpawnManager
    * added bLivingOnly parameter to GetAIControllers.
    * replaced internal AI controller weak pointer array with brute force method using the world controller list.
        * should fix incorrect terrorist count
    * removed OnAllAIControllersDestroyed delegate and related functions.
    * updated all affected C++ and Blueprints.
* added OnCharacterDiedEvent() to GBGameMode
    * FIXME - why not just make the CharacterDied() event a native implementable???

* updated GBGameUserSettings 
    * added ApplyNonResolutionSettings() override.
    * removed need to call ApplySettings(true) GBGameEngine->Init().
* updated GBGameEngine to remove call to GBGameUserSettings->ApplySettings(true) 
* updated copyright date from 2014–2018 to 2014–2019
* added UE_ALLOW_MAP_OVERRIDE_IN_SHIPPING publid definition to GroundBranch.Build.cs
    * should allow the command line from invites to work.
     e.g. steam.123123123123 

* added frame rate limit section under Settings > Video

* added check to BP_Trigger_CustomiseOperator to make sure player is still in trigger before overriding input
    * should fix instances of character editor screen appearing for no reason instead of shooting.
* added check to BP_Trigger_ShootingRangeSafeDirection to make sure player is still in RR and outside trigger before overriding input
    * should fix instances of character not being able to shoot.
* added ServerConnectString to GBPlayerState
* updated WBP_FriendList to use ServerConnectString from GBPlayerState

* added invite loading screen
* setup basic Steam rich presence 
* disabled various stubs to reduce log spam (yay!)
* added stubs to platform to test name tag online (boo!)

* added support for inviting while in-game
* removed need for separate version of loading screen for invites

* updated ZooKeeper to ensure local host of listen server is in the admin list
* updated GBGameSession to ensure local host of listen server is up to date
* improved UGBCharLoadoutFunctionLibrary::DecodeJsonKit_r() error logging when a PrimaryAsset fails to decode
* removed AI Settings stub from GBAIController
* added AI state to GBGameState
* updated WBP_TerroristHunt_Settings to make TerroristCount spinner match current terrorist count
    FIXME - is spinner working properly?

* VOIP icons for other players now appear while in RR or Spectating
* player unique ID's are shown in player list for admins to make it quicker to identify and track trolls/griefers
* added admin check against name changes to prevent trolls/griefers pretending to be an admin
* added additional rosters to RR to show all players near server info and team players inside ops room.
* changed method used to make locker name tags update to one that is more brute force
* added option to player settings to choose what a single tap of reload does (default retention, like it is now)
   * credit to Wächter for the idea

* added radio icon to WBP_VOIPUser
* updated ZKTeamKill
    * team killers list is now properly saved to the TeamKill.ini
    * shortened timers used to check team killer kicking and banning
    * fixed issue in which it would not ban a team killer that was offline
    * added timer to check the last time a team kill was made and reduce the team kill count by one (configurable, default time 30 minutes)