Rocket Ammo not being depleted bug

So in the last community update on 8/3, it was mentioned there were some high profile bugs being worked on for the big fall update. This bug may have been fixed silently (it was never in any release notes that I saw), but if it wasn’t, I wanted to bring it to the community/343’s attention so it can hopefully be fixed.

This bug is hard to reproduce, but this isn’t simply “lag”. This is an error with the game logic on the server. With the right debug tools (like tunable latency), I’m sure the 343 QA team would be able to arrive a solid 10/10 repro. What happens is that sometimes you can shoot a rocket, die right after, but the ammo isn’t depleted from the rockets.

If you are familiar with networked real time games, your first thought is probably to assume that what I saw when this happened wasn’t a true, server verified rocket. Instead it was just a client side approximation, created to give the player instant feedback. Being a professional video game software engineer myself, this was my first thought. But to counteract that I present exhibit A:

This was captured using Halo 5’s theater, which is a server accurate record of the events of the game. As you can see, I fire a rocket, die, but get a kill from the grave. So that rocket was a “real” server verified rocket. But, after I spawn and run straight to pick up my rockets, surprisingly I find the clip full.
I haven’t worked in the Halo engine (though I’d would very much like the opportunity), but I have encountered similar bugs in other networked FPS games I’ve worked on.
So with that being said, if I had to venture a guess as to what was happening here, I bet the message from the person who killed me is reaching the server slightly before the message about me shooting the rocket (or they reach at the same tick, and messages about deaths/kills are prioritized to be processed before shoot events, as they should be). So my death gets processed, but then the shoot event gets processed. The rocket is verified as legit on the server, but when it goes to decrement the ammo count, it is expecting the rockets to be in possession of an alive player. Since I am already dead, that fails and thus the ammo isn’t depleted.

Like I said, I’m just guessing here, but I would love to have the opportunity to come work at 343 and find out for real what the problem is and fix this bug, along with many more.

This isn’t isolated to Rockets. Every weapon does it. I’ve had it happen with Sniper Rifles, Rockets, etc. Even with the right conditions grenades can be too. It’s due to the latency leeway that the system allows. On the faster player’s screen they could fire a weapon and by the time its registered as fired the player is already killed and that data sent to the server and gets there minisucle-y faster.

If you’ve ever realized it being a problem…it’s not a HUGE issue. However, doing this same thing by killing a guy in a turret on a vehicle just frames before he shoots will result in you dying and getting a suicide. It’s the same logic at play. Weapons can fire and not deplete the last round of ammo if its shot and you dying is registered by the server before the data that the weapon was fired.

> 2533274795739611;2:
> This isn’t isolated to Rockets. Every weapon does it. I’ve had it happen with Sniper Rifles, Rockets, etc. Even with the right conditions grenades can be too. It’s due to the latency leeway that the system allows. On the faster player’s screen they could fire a weapon and by the time its registered as fired the player is already killed and that data sent to the server and gets there minisucle-y faster.
>
> If you’ve ever realized it being a problem…it’s not a HUGE issue. However, doing this same thing by killing a guy in a turret on a vehicle just frames before he shoots will result in you dying and getting a suicide. It’s the same logic at play. Weapons can fire and not deplete the last round of ammo if its shot and you dying is registered by the server before the data that the weapon was fired.

I very highly doubt it happens with Sniper Rifles, considering the projectile model is hitscan for that weapon but never say never, especially when I’m not familiar with the codebase.

Nevertheless, the bug here isn’t quit what you are saying. What you are talking about is simply a discrepancy between client side instant feedback and the server’s version of events. That is simply the problem of the lag, and can never be fixed. The speed of light will always limit the speed of communication.

The problem here is that getting a rocket kill and depleting the ammo from the rocket launcher should never be decoupled events. The act of shooting a rocket (and all that goes into that, including creating the rocket and removing the ammo from the weapon) should be an atomic action. Lag isn’t the problem here. It’s simply an error in logic on the server in how the messages from the clients are processed.

So in your scenario, if on my box I am still alive and I shoot the rockets, but on the server I am already dead (or a message that I will be dead is already in route), the weapon can fake “fire” on my screen and play the animation/sound. That is acceptable and good for player feedback. But in that instance, the server should never create a real, server authoritative, damage-causing rocket.

> 2533274840643768;3:
> > 2533274795739611;2:
> > This isn’t isolated to Rockets. Every weapon does it. I’ve had it happen with Sniper Rifles, Rockets, etc. Even with the right conditions grenades can be too. It’s due to the latency leeway that the system allows. On the faster player’s screen they could fire a weapon and by the time its registered as fired the player is already killed and that data sent to the server and gets there minisucle-y faster.
> >
> > If you’ve ever realized it being a problem…it’s not a HUGE issue. However, doing this same thing by killing a guy in a turret on a vehicle just frames before he shoots will result in you dying and getting a suicide. It’s the same logic at play. Weapons can fire and not deplete the last round of ammo if its shot and you dying is registered by the server before the data that the weapon was fired.
>
> I very highly doubt it happens with Sniper Rifles, considering the projectile model is hitscan for that weapon but never say never, especially when I’m not familiar with the codebase.
>
> Nevertheless, the bug here isn’t quit what you are saying. What you are talking about is simply a discrepancy between client side instant feedback and the server’s version of events. That is simply the problem of the lag, and can never be fixed. The speed of light will always limit the speed of communication.
>
> The problem here is that getting a rocket kill and depleting the ammo from the rocket launcher should never be decoupled events. The act of shooting a rocket (and all that goes into that, including creating the rocket and removing the ammo from the weapon) should be an atomic action. Lag isn’t the problem here. It’s simply an error in logic on the server in how the messages from the clients are processed.
>
> So in your scenario, if on my box I am still alive and I shoot the rockets, but on the server I am already dead (or a message that I will be dead is already in route), the weapon can fake “fire” on my screen and play the animation/sound. That is acceptable and good for player feedback. But in that instance, the server should never create a real, server authoritative, damage-causing rocket.

I can name at least 5 times I’ve shot my last sniper bullet and died at the exact same time and the sniper still drop with 1 round left.

No, I’m not saying its creating a fake scenario. What I’m saying is, there’s like a leeway system for hit registration, lets just say 50ms. In this 50ms, you can do whatever to get melee’s tied with others, shots fired that still manage to kill, even if that person registered a shot against you that kills you. As long as you do your action within this 50ms timeframe, it will count. Now, when I say people “trade” surely you’ve noticed that sometimes you’ll clearly kill them first but they’ll still tie you just slightly later on the killfeed. This is that leeway system you’re noticing allowing their hit to register as well even though they’re 50ms behind your connection. It’s to make the game more fair due to latency being a constant factor no matter what. So, say you die, but your death gets to the server first, but you fired your rocket within this 50ms timeframe before you are dead. You die at the same time you shot your rocket, the game appropriately registers your shot going off within 50ms of death, but doesn’t deduct the ammo because…well, you’re already dead. That’s all it is.

> 2533274795739611;4:
> > 2533274840643768;3:
> > > 2533274795739611;2:
> > > You die at the same time you shot your rocket, the game appropriately registers your shot going off within 50ms of death, but doesn’t deduct the ammo because…well, you’re already dead. That’s all it is.

Everything you said up until this point is correct. Everything you described is a fundamental reality of playing online, and Halo has some great solutions to deal with the ever existing, never-to-go-away problem of lag that level the playing field for all players in a match. But it is 100% a bug that the server does not deplete the ammo. The message regarding the rocket being shot has reached the server and been verified. I shouldn’t have to be alive for the ammo to be depleted. The server has the information and needs to process it correctly.

> 2533274840643768;5:
> > 2533274795739611;4:
> > > 2533274840643768;3:
> > > > 2533274795739611;2:
> > > > You die at the same time you shot your rocket, the game appropriately registers your shot going off within 50ms of death, but doesn’t deduct the ammo because…well, you’re already dead. That’s all it is.
>
> Everything you said up until this point is correct. Everything you described is a fundamental reality of playing online, and Halo has some great solutions to deal with the ever existing, never-to-go-away problem of lag that level the playing field for all players in a match. But it is 100% a bug that the server does not deplete the ammo. The message regarding the rocket being shot has reached the server and been verified. I shouldn’t have to be alive for the ammo to be depleted. The server has the information and needs to process it correctly.

Never said it’s not a bug. I just said it’s not isolated to Rockets and can happen with any weapon.