Damage Boost

From Minecraft Parkour Wiki
Revision as of 17:03, 13 February 2023 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Other languages:

Damage Boost is a mechanic that involve taking damage to increase jump height in some way.

This page still needs a clear explanation and code analysis, but the main idea is here.

The player can take damage from natural causes: falling, fire, cacti, poison, etc...

Interestingly, drowning does not affect the player's velocity. In older versions of the game, drowning could trap the player by continuously pushing them downward, though you can still face the same problem in 1.8 with other types of damage, such as poison.

Damage is usually disabled on parkour servers, but this mechanic can be very useful elsewhere, such as parkour map speedruns.



Introduction:

When taking damage, the information is passed to the server through packets, and then back to the player. That is true for both integrated servers (Singleplayer) and dedicated servers (Multiplayer). In the process, the player's movement is modified:

  • When the player's velocity is synchronized with the server, the player keeps approximately the same speed when damaged.
  • When the player's velocity is desynchronized from the server, the player seemingly accelerates when damaged, because it is updated with the expected velocity.


It's not clear when and how the player's velocity gets desynchronized, but here are some known cases:

  • Running off a block and jumping at the last tick
  • Jumping on a slime block
  • Getting off a ladder
  • Being in water or lava

It's suspected that desynchronisation is linked to the fact that the NetHandler calls the jump() method independently from the movement code.


Notes:

  • The phrase "approximately" captures the fact that speed is rounded by 1/8000 towards 0, due to how doubles are stored in the velocity packet
  • Damage taken from natural causes is not the same as knockback, which is applied when the player is hit by an entity.


Synchronized Damage Boost

Taking damage while synchronized with the server conserves the player's velocity over the next tick.

The idea is to use this speed conservation to maintain as much upward speed as possible, which is at the very start of a jump (0.42m/t). When done optimally, the peak of the jump reaches ~1.6685m, allowing the player to jump up 1.625 blocks.


Desynchronized Damage Boost

Desynchronized damage makes the player "accelerate in place" (in reality the player's velocity is simply updated). This downward acceleration can be used by redirecting it the other way around by bouncing on a slime block (or a bed, in 1.12+).

Note that you can take fall damage on a slime block and still bounce, by landing on the outline of the block.

Taking damage in a desynchronized state can have other effects which have yet to be fully understood. In particular, the player can prematurely land from a jump, or even activate an artificial jump.


Interaction with Jump Boost

Obviously, the jump boost effect can be combined with damage boost to jump or bounce even higher. With Jump Boost level 129 or more, while the player isn't able to jump higher (due to the server sending potion effects as bytes instead of unsigned bytes), they are still affected by Damage Boost since it is computed server-side.

Indeed, when the player jumps or lands from a jump and takes damage, they can be flung upwards, with up to 3.9 m/t of initial speed (this upper bound is hard-coded into the velocity packet).

Specifically, for jump boost levels 252 - 256, the player is able to perform a low jump. In this situation, the glitch can be activated very easily.


Note: jump boost levels 129 - 249 can be abused on slime blocks by simply jumping, as the negative speed is converted into a massive bounce.