Killing Floor 2

Killing Floor 2

Controlled Difficulty
blackout  [udvikler] 13. nov. 2016 kl. 1:19
Possible spawn rate changes by TWI in Survivalist update
KF2's survivalist preview became available as a steam beta a day or two ago.

This preview version of KF2 appears to have changed important details in how KFAISpawnManager works, making zeds spawn slower than the did before the preview.

Short version: If you want the v1043 behavior back, the closest way to approximate it is to set SpawnMod=0. KF2 v1043 only honored spawnrate modifiers for the first few squads, after which it effectively forced all modifiers to zero. So, even if you had a positive SpawnMod in v1043, the game forced it to zero in <20 seconds. This behavior was part of TWI's code, and it affected FS, CD, and the vanilla game.

Long version:

On HOE in v1043, time between squad spawns quickly decreased to 1 second (the minimum), assuming that the team killed less than one squad a second on average (~5 zed/sec). "Quickly decreased to 1 second" means after about the 4 +/- 1 squads in a wave, the time between squad spawns was one second. For the rest of the wave, the game effectively forced all spawnrate modifiers to zero. This affected CD, Faked Suite, and the vanilla game with no mods. Internally, this is due to a list in KFAISpawnManager called LeftoverSpawnSquad growing faster than zeds could spawn. When LSS is nonempty, CalcNextGroupSpawnTime() returned zero. LSS was always nonempty after the first few squads, so that method always returned zero. When CNGST() returns zero, the game spawns squads at one per second.

I tested this behavior on both Faked Suite and CD under the non-preview version and observed it on both mods. It happened in both.


On HOE during and after the survivalist preview (v1046 and in the final release version v1048), LeftoverSpawnSquad handling has been altered so that the list is repeatedly emptied during the wave. Whevever LSS is empty, CalcNextGroupSpawnTime() returns a value larger than zero, which results in more time spent waiting before spawning the next squad. This is due to some part of the base game draining LeftoverSpawnSquad faster than it fills, emptying it multiple times in a wave (edit: now that I have the v1048 SDK source, I located where this is happening: KFAISM's GetNextSpawnList() was modified to ensure that LSS drains faster than it can fill on average).

I did some tests with Skell's excellent Faked Suite on both non-preview and preview, because CD doesn't work with the preview but FS does, and because the SDK does not have a preview channel for me to recompile CD with yet.

I added a couple of logging statements inside FS and add -useunpublished to my KF2 options. I didn't alter FS's behavior. My tiny logging patch is in the gist below.

I cleared wave 1 (with cheats) using SpawnMod=0.25, MaxMonsters=32, FakedPlayers=5 as commando. I did this first on non-preview and then again on preview. I didn't change anything except the KF2 version. I kept the logfiles from both runs and compared them.

My logging changes dumped the value returned by CalcNextGroupSpawnTime() every time that function was called. In non-preview, it goes to zero after the first four squads and stays there to the end of the wave. In preview, it occasionally floats back up to 0.4 sec, 0.5 sec, or even 1.0 sec (consider the SpawnMod=0.25 when assessing these numbers). My changes also dump the LeftoverSpawnSquad length. Before preview, LeftoverSpawnSquad contained 203 zeds by the end of wave 1. In preview, it stays in single digits throughout the wave and often reaches zero.

The total additional spawn delay attributable to the preview's change in wave 1 with SpawnMod=0.25, 5 faked, 32 max monsters was 13.69 seconds, compared with an overall wave time of 120~130 seconds. This amounts to about 9~13% slower pace than in non-preview, even with all settings the same.

All of these tests were done with Faked Suite. I expect CD to behave the same, having analyzed the source code for both mods, because relevant changes appear to be inside parts of the base game that neither mod overrides. I just can't test CD yet because it needs to be recompiled but the SDK tools aren't available for the preview yet.

I'm ambivalent about this change. One the one hand, it makes SpawnMod objectively more influential in the middle of long waves. On the other hand, I aim to keep CD's difficulty as stable as possible as the game changes underneath it, and this is a subtle but significant change.

Here's a gist with my log snippets an my FS patch:

https://gist.github.com/notblackout/323bf86c980fe3067b3fcbf9d8601234

Here's a link to Skell's FS source code:

https://mega.nz/#!UAEhRICR!sDC72BVmfWc5vsG-lDKP0cxlgeNgDiltTE9l07c521M

The sha1sum of the FS zipfile I got from that link was dcecf3c2b7e942d093f0ff8c64a93f5d5a98f2f2 (putting this here in case he updates it, so that the change is detectable)

Special thanks to dandyboy66, who has played so much solo challenge that he is capable of detecting an 11% change by feeling alone. I had no idea this behavior had changed until he mentioned that something felt different.
Sidst redigeret af blackout; 18. nov. 2016 kl. 9:02
< >
Viser 1-1 af 1 kommentarer
< >
Viser 1-1 af 1 kommentarer
Per side: 1530 50