Sale

GROUND BRANCH is 30% OFF on the Steam Spring Sale!

From March 14th to 21st @ 10am Pacific, you can grab a copy (and indeed as many copies as you want) of GROUND BRANCH with a sweet 30% discount.

You know the drill: spread the word and maybe even get a few extra keys to get yourself and your gaming buds in on the action just in time for the new update and the inevitable uptick in player numbers.

🤍 Consider buying directly from our store!

Valve takes a 30% cut from sales on their store, so if you have a PayPal account and would love us to get the full cut from your purchase, head over to our official store and use code Spring2024 at the checkout to apply the same 30% discount!

💵 Please note that our store operates in USD only, so this might not be a great deal if you're paying in a different currency as we use regional pricing on Steam.

Enjoy the sale!

BUILD UPDATE #014: Hotfix

Hotfix in the house!

We’re fixing the networking issues and broken volume sliders brought in by the previous update, and throwing in a little extra content because why the hell not? “Well, maybe because extra content tends to increase file sizes and you’re calling this a hotfix?”, you might ask rather sarcastically. And to that hypothetical question, we reply: SHUT UP. SHUT UP AND TAKE OUR CONTENT.

Anyway, the rundown is right after this reminder:

📢 The Steam® Summer Sale goes on: GB is 25% OFF!

The Steam® Summer Sale 2019 has another week to burn and our 25% discount is still on.

You know the drill—grab it, gift it, recommend it, share the news.

Every bit helps us get GROUND BRANCH to where we all want it to be.

› We strongly recommend players coming from an older version of the game (pre-v1027) 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.

Build highlights

Networking fixes

Lots of server fixes to address crashes, log spam and various connectivity issues introduced in v1027. Thanks for all the reports!

Fixed audio sliders

Mikson’s new weapon sounds are impressive, but they’re also pretty loud. If you’re not among those of us who gladly risk hearing loss for some extra immersion, you’ll be happy to know the audio sliders are fixed. To make gunshots and related sounds quieter, turn down the SFX slider under Settings › Audio.

Adjustable grenade throw

The grenade arc HUD for estimating throw trajectory can now be adjusted in steps for longer or shorter throws by scrolling up/down with the Mouse Wheel. Let us know how it works for you!

NEW MAP: 747 (Night)

WIP map 747 now has a first implementation of its Night version.

› Terrorist Hunt A.I. placement has been improved for both day and night versions.

NEW GEAR: Shotgun Rail Adapter

Now you can rock the M1014 and SDASS Custom shotguns with a tac light or whatever accessories you wanna fit on them. Simply attach the rail adapter, and then place the desired accessory on either of the side rails.

NEW GEAR: Extended Magazines (G22 and PMAG)

As part of our partnership with Taran Tactical, we’ve added extended base pads for the G22 and PMAG magazines. They’re selectable inside weapon customization under “Magazines”.

  • The G22 magazine extension carries 18+1 rounds.
  • The extended PMAG carries 35+1 rounds.

› We’ll have reasonable trade-offs for these new items once stamina and other systems are implemented.

Gear

Various fixes for kit items and their usage.

Known issues

  • Picking up weapons from the ground is inconsistent and might not work.
  • Running while engaged (i.e. aiming down sights) is using the running animation and may cause a wobbly support arm depending on foregrip location.
  • Game mode Defend is missing Defender spawn boundaries and Attacker freeze period.

Change log

Build version: 1027(.1)

Client

Steam Build ID: 3978385
Size: 1.2 GB

Dedicated server

Steam Build ID: 3978388
Size: 50 MB

FIXES

* FIXED crash if player disconnects shortly after being resurrected by admin
* FIXED crash if a PlayerState without a valid player controller ends up in AGBGameMode::DeadOnlyChat()
* FIXED crash relating to GetGameStateSafe
* FIXED "Too many failures to spawn" causing round to end by removing the related timer all together and just brute forcing all players that can enter play to enter play
* FIXED spawning with a firearm on client, but not on server
* FIXED being able to reload/switch items etc. while sprinting
* FIXED run/walk key cancelling lean when stationary
* FIXED AI attempting to shoot early prevent round from chambering, thus preventing further shooting
* FIXED firearms continuing to fire when put away during full auto
* FIXED change firing mode with trigger pulled
* FIXED missing/bad navigation in areas on 747
* FIXED volume settings for WWise not being applied causing them to reset to 100% next time the game loads
* FIXED 747 map bugs
    * Ability to hop over perimeter fence
    * No texture on wall flag
* FIXED City bugs
    * trash clipping through
    * subway wall poking through street
    * top of ladder collision in way
    * subway walls culling out to early
* FIXED bad shipping container UVs
* FIXED player hanging up on top of truck ladder in 747
* FIXED some missing Physical Material settings on a few rock types in Storage Facility
* FIXED TankerShip insertion info section for player names going offscreen
* FIXED lack of collision on 747 playspace boundary that let players get to non playable areas
* FIXED rifle laser sight allowing multiple versions to be attached to same weapon
* FIXED impassable stair section in City scaffolding
* FIXED odd looking fuel tanks on 747 map (missing textures)
* FIXED potential nullptr in various functions related to character appearance and loadouts by adding IsValid(Character)
* FIXED GBFirearm only binding to reload montages OnMontageEnded() delegate on server/offline, preventing clients from being able to reload more then once
* FIXED game and plugin properties that caused Cooker/UE4 to spam "is not initialized properly" in the log
    NOTE: still need to do a pass on the engine ones
* FIXED references to old/non-existent assets causing cooker to spawn "Unable to find package for cooking"
* FIXED (hopefully) assets causing cooker to spam "X imported blah but it was never saved as an export" in log
    * required opening/saving all maps that use various Blueprints :|
* FIXED missing/bad navigation in areas on 747
* FIXED BP_TerroristHunt_SpawnManager spawn point usage randomisation caused by changing from GB to standard BP macro library
* FIXED green tint in black Field (G2) pants
* FIXED unclamped off-target alpha value in GBFirearm::PrevPosPressed_Implementation()
* FIXED typo in WBP_OpsBoard_InProgressButton preventing from being visible when round was in progress
    NOTE: InPorgress != InProgress
* FIXED WBP_LoadingScreen getting none when trying to access to GameState
* FIXED GBGameMode::GetBestLateComerInsertionPoint() always returning a random insertion point
* FIXED round not ending if player logs out in BP_TerroristHunt, BP_Defend & BP_TeamEilimination
* FIXED "RequestAsyncLoad called with empty or only null assets!" spam caused by call to AsynLoad() in BP_Firearm_Master (doh!)
* FIXED AddDefaultItem() being called on character that is being destroyed causing spawned item to be invalid.
* FIXED being immortal when resurrected by admin (lol)

CONTENT

* Added in shotgun rail adapters to allow for flashlights and other accessories to be used
* Modified aspect ratio and camera angle of main menu
* Small adjustments to player scalability settings so shadows don't go completely away on Low setting causing unfair gameplay advantage
* Adjusted vertical grip hand pose for a better fit 
    * These will get better when the new character meshes/skeleton is in
* City
    * Cleaned up collision around insertion points
    * Added a few solid low walls around center of map for more cover and to reduce long AI sightline a bit
    * Filled in some visible non-playable areas
* Added first go at night version for 747
* Removed odd refraction from default glass material (RR and Depot mainly)
* Added in new Taran Tactical mag extension version of the G22 and PMAG magazines
* Added PhysMat setting to rocks in 747


AUDIO

* added audio sliders functionality for Wwise and music
* assigned all sound effects to SFX class
* Wwise: added missing MK 14 EBR reload sounds
* Wwise: improved unsuppressed MK 14 EBR, AK-74M and AR-15 shots
* lowered falloff distance for FullAutoPunch layer of unsuppressed gunshots


CODE

* assigned outers to all instances of NewObject()
* added validation checks to various methods involving setting/using an insertion point on the player state
* removed usage of gameplay ability system
    * updated all affected C++ and Blueprints
* replaced usage of macros in GB Blueprint Macro Library with native versions
* removed usage of redundant / pointless macros in GB Blueprint Macro Library
* added ToggleRun option to GBPlayerSettings class
* added Reset() Blueprint native function to GBItem
     * causes pouches to refil with last thing they had in them
     * causes firearms to max capacity if not in the process of reloading
* update BP_TargetApplScreen used in some training maps to use new Refill() method on characters items
* replaced usage of GBResetInterface with calls to native AActor::Reset()
* updated BP_Door_Swinging to take player and doors direction into account when incrementally opening
* updated GBGrenade to allow you to adjust throw range using mouse wheel
* removed log spam about montage replication
* removed log spam about player spawning
* improved AI on 747 by correcting Guard points, Patrols routes and the like
* removed DonMeshPainterGlobalActorSpawnParams from GBGameMode - yet to use it server side
* updated player patch support due to DonMeshPainter update
    NOTE : while updated, they are not enabled
* removed stubbs about player patch from GBPlayerController
* updated RBEventManager
    * changed several parameters from TWeakPointers to normal C++ pointers
    * updated FRBListener struct
        * created IsValid() that returns true if object & function are valid
        * changed optional constructor to take normal C++ pointers instead of TWeakPointers
        * removed == operator
* updated RBSurfaceLinkManager
    * changed Get() from using a mutable default to using a SingleTon added to the root set
    * replaced usage of CachedLinkedClasses variable with simply adding the cached classes to the root set
    Both these changes were done to prevent GC issues
* added "Defaults" button to audio, video and gameplay setting screens
* changed default audio volume levels from 10 to 08
* removed stubb from BP_Handgun_Master
* reduced max throw distance in BP_Grenade_Master
* Updated DedicatedServer.bat with all available maps and game types

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.

GROUND BRANCH is 20% OFF on Steam®!

The Steam® Lunar New Year Sale is here, and it’s knocking 20% off of GB’s price tag—only until February 11th.

Spread the word!

Make sure you get the word out to any friends who don’t know about GBmight’ve been on the wall about the game or weren’t sold on the regular price.

The more people playing GB, the more feedback and funding we get. Wanna support development and get the player base growing? Share the news!