• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

PC Abomination bug

Weird Pup

Member
Jul 17, 2018
14
0
There's an Abomination bug since the Halloween beta.
When it uses the sucking skill, there's a chance for the player to be stuck in that animation.
It happens when the Abomination is interrupted whilst sucking but also when it already dealt the corresponding damage and then just drags you around, even ignoring blocking volumes.
This happened to me on nearly all official maps.
Screenshots attached.
 

Attachments

  • 2085252.1399999969_20191007174113_1.jpg
    2085252.1399999969_20191007174113_1.jpg
    418.5 KB · Views: 5
  • 20191007174050_1.jpg
    20191007174050_1.jpg
    436.2 KB · Views: 5
  • 20191007174112_1.jpg
    20191007174112_1.jpg
    449.6 KB · Views: 5
Found reliable way to reproduce this bug by increasing Gorge's pull range greatly.

It requires at least 2 players to be involved into the Gorge. The second (and, presumably, all the other) player to get sucked in will not be released when Abomination ends its attack.


Edit: the original explanation was a bit off, i hope the video alone is enough.
 
Last edited:
Upvote 0
Found reliable way to reproduce this bug by increasing Gorge's pull range greatly.

It requires at least 2 players to be involved into the Gorge. The second (and, presumably, all the other) player to get sucked in will not be released when Abomination ends its attack.


Related flow would be

KFSM_BloatKing_Gorge -> SpecialMoveEnded -> RemoveVictim -> BloatPawn.RemoveGorgeVictim

Apparently there, in RemoveGorgeVictim in fails to remove all victims except the initial target. I only tested it with one bot but as i said, it only removes the initial target: if bot gets sucked in 1st and then you, bot will be set free and you'll stay locked and vice-versa.

Spoiler!

Thanks @simplecat ! Passing along to QA
 
Upvote 0
Update on this: ignore the explanation i gave, it was incorrect. The video is still relevant though.

Here's another video of what would happen if few players will get sucked in at the same time:


As you can see it releases every odd player in PullVictims list: #1, #3 etc... while every even player stays locked.

The problem is in how two functions of KFSM_BloatKing_Gorge class interract with each other: SpecialMoveEnded and RemoveVictim. In SpecialMoveEnded it loops through the list (PullList) of currently pulled players and for each of them it makes a call for RemoveVictim which removes them from the said list (i.e. PullList) via PullList.RemoveItem(OldVictim)

From what i understand RemoveItem of dynamic array does remove the entry as whole (not set it to null) so every iteration of foreach PullList(PullPawn) shortening this list.

Spoiler!

To illustrate foreach PullList(PullPawn) iterations:

Spoiler!


This solution is likely incorrect since there are calls for RemoveVictim from the other places other than SpecialMoveEnded but if you prevent

PullList.RemoveItem(OldVictim);

from executing in RemoveVictim

it will work fine and all the players will be released.
 
Upvote 0