I think most recognize the following scenario:
- You shoot 6 clustered rockets and see them explode on someone kneecaps yet he lives with no apparent damage.
- You run behind a teammate and he takes a rocket to the face but mysteriously he lives. 1 second later you are killed by a now invisible rocket.
UT has two kinds of projectiles:
The ones with bNetTemporary=False
- Bio
- Shock balls
- Flak balls
The above projectiles have the following properties:
- They are never invisible unless you have packet loss
- They will never become "ghost" projectiles unless you have packet loss
- When you see them explode you can be certain they exploded at that location on the server
The other group has bNetTemporary=True
- Plasma spheres
- Rippers
- Flak shrapnel
- Rockets and grenades
UT is more lazy with these projectiles. They use tearoff replication meaning that a harmless visual version is sent to the client while a deadly invisible version exists on the server. Even with 0% pl and 0 ms ping the server and client are rarely completely synchronous due to the servers limited tickrate. This means the following happen frequently even with a flawless connection:
- Invisible but lethal projectiles.
- Visible but harmless projectiles.
- You see projectiles detonate on a player but they dont draw blood and he takes no damage.
This is all by design. UT is optimized aggressively to use as little bandwidth as possible, and considering the number of players that used 56k at UTs release it does make some sense. Today tearoff replication is pointless however.
So I wrote a small mutator that changes all projectiles to bNetTemporary=false. The mutator is called RocketsFix.RocketsFixMut and has the following options:
- bDebug; (clientside option)
- bFixRockets; (serverside option)
- bFixFlak; (serverside option)
- bFixPulse; (serverside option)
- bFixRipper; (serverside option)
Which should be self explanatory except bDebug. This variable displays a shockimpact whenever a client detects a collision even if the server does not. So if you shoot a projectile against an opponent and you see a shockwave but the projectile continues then this is an example of where the original tearoff projectile would have turned invisible while still being deadly. The bDebug var only applies to secondary ripper, rockets and grenades.
Note: If bFixFlak or bFixRockets are true the flak cannon and/or the rocket launcher will be replaced with a similar version (UT_eightball_fix and UT_FlakCannon_fix). This means that binds using getweapon will no longer work but switchweapon will. TIW weapons cause the same problem.
Edit: Removed attachment. See updated version below
- You shoot 6 clustered rockets and see them explode on someone kneecaps yet he lives with no apparent damage.
- You run behind a teammate and he takes a rocket to the face but mysteriously he lives. 1 second later you are killed by a now invisible rocket.
UT has two kinds of projectiles:
The ones with bNetTemporary=False
- Bio
- Shock balls
- Flak balls
The above projectiles have the following properties:
- They are never invisible unless you have packet loss
- They will never become "ghost" projectiles unless you have packet loss
- When you see them explode you can be certain they exploded at that location on the server
The other group has bNetTemporary=True
- Plasma spheres
- Rippers
- Flak shrapnel
- Rockets and grenades
UT is more lazy with these projectiles. They use tearoff replication meaning that a harmless visual version is sent to the client while a deadly invisible version exists on the server. Even with 0% pl and 0 ms ping the server and client are rarely completely synchronous due to the servers limited tickrate. This means the following happen frequently even with a flawless connection:
- Invisible but lethal projectiles.
- Visible but harmless projectiles.
- You see projectiles detonate on a player but they dont draw blood and he takes no damage.
This is all by design. UT is optimized aggressively to use as little bandwidth as possible, and considering the number of players that used 56k at UTs release it does make some sense. Today tearoff replication is pointless however.
So I wrote a small mutator that changes all projectiles to bNetTemporary=false. The mutator is called RocketsFix.RocketsFixMut and has the following options:
- bDebug; (clientside option)
- bFixRockets; (serverside option)
- bFixFlak; (serverside option)
- bFixPulse; (serverside option)
- bFixRipper; (serverside option)
Which should be self explanatory except bDebug. This variable displays a shockimpact whenever a client detects a collision even if the server does not. So if you shoot a projectile against an opponent and you see a shockwave but the projectile continues then this is an example of where the original tearoff projectile would have turned invisible while still being deadly. The bDebug var only applies to secondary ripper, rockets and grenades.
Note: If bFixFlak or bFixRockets are true the flak cannon and/or the rocket launcher will be replaced with a similar version (UT_eightball_fix and UT_FlakCannon_fix). This means that binds using getweapon will no longer work but switchweapon will. TIW weapons cause the same problem.
Edit: Removed attachment. See updated version below
Last edited: