Full Speed Swarm

This mod allows all NPCs to stay as active as the game specs require. It also adds a large amount of fixes and code optimizations. It does NOT increase spawn rate or amount.

What does this mod do exactly?

Normal behaviour of a cop

First, let's define what is the normal behaviour of a cop as it's a really important notion to understand how FSS may affect difficulty, depending on the hardware you use.

Imagine there are only you and one unique cop all over the map. In this situation, that cop is always performing at his maximum level of planned efficiency (all reaction delays and check intervals specified by OVERKILL are respected). I consider this as the reference of what OVERKILL designed and wanted in terms of difficulty.

Responsiveness

Before Update 173, task throughput was equal to host's frame rate; it is now set to 60 tasks per second. Above a particular number, more cops means more gap between specified delays/intervals and what really happens.

Steps:

  1. an AI refreshes its sight sense and sees something new;
  2. it takes the decision to change its focus (or not);
  3. it applies stare/pause predefined delays to simulate human reaction times.

With a throughput too low, AI's eyes aren't refreshed fast enough, an unwanted delay is introduced in step 1 and their reflexes get degraded.

Unleash'em all!

This is where Full Speed Swarm comes into play: it lets the game execute as many tasks as required. So even with 100 cops on the map, they all perform as well as if they were alone.

With this point in mind, you can now understand that Full Speed Swarm does not add difficulty, it just helps to reach what was originally designed.

Are there any drawbacks?

No. Knowing that executing more tasks increases CPU workload, I've optimized a lot of things (unchanged behaviour, faster process) to the point that frame rate even goes up when Lua is the bottleneck (though most often, it's engine or GPU). In case it still makes too much of a difference regarding difficulty, you can adjust the maximum tasks throughput in the options menu.

Let's compare 3 playthroughs (heist is Boiling Point on DW difficulty, with 1 player, 3 bots and 2 jokers).


This is base game for reference, its AI tick rate is 60 and it is way too low to handle all NPC correctly. In short, graph shows that all NPC have reflexes delayed by ~1 second, making a joke of difficulty and it gets even worse as cops number grows...

Increasing AI tick rate to 600 eliminates all delay observed in first case. Game gets much more lively but for equivalent situations, frame rate drops by a very noticeable 40 fps.

With FSS, tasks throughput seems lower but it's due to tasks aggregation to reduce management overhead; NPC are refreshed as often as game specifications state for a result similar to second case. But thanks to its code optimizations, frame rate stays very close to what you get with base game.

You can test what you get on your own hardware, here is the tool I've made to generate graphs.

Gameplay changing options

Improved tactics

Cops use different types of approach, attack much more on your flanks and other things. is required for this feature to work well.

Spawn delay

A spawn kill executed at close range of related point delays its next spawn. It's meant to prevent excessive enemy flood when you're sitting on a spawn point.

Nervous game

Enemies' reactions escalate faster. It can be summed up by: aim less, shoot more!

Improved chase

Apply 's path extender to all cops, making them reach players faster.

Fast-paced game

Enhance the difficulty by removing several delays punctuating cops' behaviour. Cops won't run faster, they won't deal more damage, they'll just wait less between each of their actions.

Cop awareness

Make cops to face their enemies and shoot more at them while they move (their firing range is not affected by movement anymore).

Non-gameplay changing options

Task throughput

It defines the maximum amount of tasks executed per second. Tasks going through this manage NPC vision, spawn, corpse removal, etc. Most tasks have a predefined time of execution but if throughput is too low, they get delayed as previously shown in performance graph.

There are only 2 outcomes possible: delayed or normal. It never goes beyond what specifications have stated. A value too high is useless and a value too low introduces delay.

For example, if there are 20 cops requiring 10 refreshes per second, they need 200 tasks/sec. So in this situation, their performance will be:

Walking quality

Setting this option to very high will override the LOD value, making sure a visible character is moved at least once every 2 frames. Ultra does the same except visible characters are moved at every frame. This option is more effective when frame rate is low.

Optimized inputs

On top of better performances of code handling inputs, it also helps to get the best out of single fire weapons having a high fire rate.

Additional features

On my way to optimize whatever I could, I've added to some of the rewritten functions a few off-topic things, including numerous bug fixes.

Despawn management

It fixes all cases of the no-despawn bug for local player (when it happens, all corpses and smokes stay forever). And if you're the host, vanilla clients should be protected too.

Domination process

Friendly AI don't shoot at cops that players are trying to intimidate.

Stealth

During stealth, the maximum interval between 2 sight refreshes is set to a significantly shorter value to prevent civilians starting to notice a player very quickly after he already got too close.

BLT's Delayed Calls

As I wasn't happy with the original implementation, I've replaced this library by one with, on top of being faster, a functional Remove() method and that supports for repetitive calls.

Adaptive LOD updater

It's the tool that gives animation priority to characters in the center of your screen. If there are too many cops, the original updater can't process it all in time and the cops you are focusing on look very laggy. Instead of always processing 1 character per frame, the new system does 1 per group of 25 per frame, giving a much smoother result with very high number of cops.

Panic effect

It will show the real duration of this effect. So if you like to play with perks Muscle or Sociopath, you'll get better feedback!

Mutators

Big Party

A mutator inspired by GoonMod's Excessive Force. The original one spawns more than 2000 cops but no hardware can handle so many. Here you can define approximatively how many cops you will fight by setting its parameter.

Real Elastic

It drastically decreases maximum number of cops, activates all FSS's gameplay changing options and removes grace period for players. Also, maximum stamina depends on your amount of lives, like a wound that slows you down. This mutator requires to work.

Stealthroids

Designed for stealth, it forces NPCs to run. Always. This mutator requires to work.