The Meteor and The Madman
As most of you know, maybe, maybe not, today I made it my mission to track down a bug that I'd seen one time before in game, and one time in a video that someone sent me on twitter, that had once again revealed itself this morning.
Luckily one of my discord members still had the video tweet and I posted that earlier (was from October) of some weird projectile flying through the sky.
When it happened to me, I had thrown a Gibraltar ult at a team fight so we could get away, and noticed that 2 of the projectiles went wayyy off course. I didn't think much of it at the time, but the "meteor" video that was posted today on reddit reminded me of it. Me being me, if I can help the community know 'what the heck that is' I'll do everything I can to provide as much evidence as possible, so that's what I was starting to do when the new trailer dropped.
After we did the trailer stuff, I went back to the code review and believe I have solved WHY this happens.
First there's a few things you need to know.
1) Gibraltar's ultimate 'beacon' is technically a 'grenade' but it doesn't blow up like one. It uses a fuse timer that starts after the grenade first hits a surface. This is handled by a function on its own.
2) Gibraltar's 'beacon' has a special property that if it hits the bottom of the map, it deletes itself from the game. You can test this by going to into the firing range, getting the ultimate and throwing it over into the water. You'll notice quite quickly that the bombardment never starts. In this case it doesn't start because it never makes 'impact' with anything, since it removes itself from existence.
3) Once Gibraltar's beacon does 'go off' (it uses the fuse timers to handle the first function after it makes impact to cause a small delay between impact and bombardment) the system stores to the object the Position of the beacon (x,y,z). and uses that to determine the radius for where the individual projectiles form the bombardment can hit. They should never hit out side of that radius. This is a behavior the game expects would never be wrong, because the beacon object will always be there until the ult ends. So the position is not checked again for the beacon after this.
4) EACH SHOT of the bombardment uses a function that checks the Position of the beacon object to perform a formula against it and attempt to randomize where each one lands. Else they'd all land in the exact same spot.
So now that you understand how the 2 parts of Gibraltar's ultimate are supposed to work (and they do 99% of the time) I'll explain how you see a projectile from Gibraltar's ultimate - flying sideways and acting like it really hates buildings.
There are a couple of spots on the map where the collision is ... well it's not that great. Our player characters have found these before in the form of rocks that make you invisible, but if our player characters were the size of Gibraltar's beacon, we could find some that would let us slide under the map.
There is a spot (or maybe more than one) up around the gorges that lead into Cap City, where Gibraltar's ultimate beacon will fall through the map, not fast enough to delete itself like when you threw it off the side of the Firing Range before the second part of the ultimate starts, but it still falls off the map regardless. it's also just narrow enough I assume (not tried to reproduce) that it must also trigger the impact portion of the code that starts the countdown for the bombardment.
The fuse that goes between the 'impact' and the start of the bombardment is set for 2 seconds. The reasonable explanation here is that the bombardment phase starts and by the time it hits the 4th or 5 projectile, the beacon has actually fallen all the way through the map and to the 'floor' of the world.
Once that object removes itself from the game, the position that was 'stored' to it, goes with it. (Remember, that POSITION is only checked once then stored when the beacons fuse runs out, it is not updated).
Since each projectile relies on those coordinates to randomize itself within the radius and they no longer exist, 1 of 2 things happen. Either 0,0,0 gets passed back or a null (or absent) set of values get passed back. Either way, the formula to help randomize the the projectile will still happen, thus causing this projectile that should be flying straight down towards the ground to go in another... more horizontal, direction.
Now because the formula is designed to help randomize it within the radius that was reliant on the beacon's position, this means that they will not always fly off horizontal in the same direction. I believe in October we witnessed one that had a much higher Z value, thus flying higher and farther from the area you would normally see it.
When it happened to me, it hit the Skyscraper thats to the north east of the train station in Cap.
When it happened in the "meteor" video it hit right in front of our camera guy.
Hopefully this explains in a semi understandable why how these functions work, and provides some insight as to how crazy bugs can be in programming from time to time. I offered my 2 cents (albeit unwarranted) to a Dev earlier today on a 'band-aid' to patch it, but I'm sure they'll do their own thing.
It's a super rare bug, it's likely not going to be easy to reproduce, but I will try when I have time and try to get some footage.
What we saw this morning however, was not a meteor or a teaser, if it was, we'd be seeing hundreds of posts on reddit of people who are also seeing it, and I'd know because I'd have DMs to read.
Regardless, as always I love you guys and hope this helps. I never mean to be a jerk when I explain this stuff, but it's hard to explain complicated stuff like this on twitter. I'm working on a website where I can post, but that's a story for another day.