Melee attack

25 bytes removed, 18:41, 8 July 2018
fix some stuff
'''Melee''' is a word borrowed from [[Wikipedia:French language|French]] (''mêlée'', [[Wikipedia:IPA chart for English|pronounced]] /mε'lε/) meaning hand-to-hand, close-quarters combat. Melee attacks are in contrast to ''ranged attacks'', performed at a distance, such as shooting [[bullet]]s, throwing [[fireball]]s or firing [[rocket]]s.
Melee attacks are featured in [[Doom]], [[Heretic]], [[Hexen]] and [[Strife]]. A number of the Doom [[monsters]] can perform melee attacks in the form of clawing, biting or punching. [[Demon]]s and [[spectre]]s are melee attackers only, while others have both melee and ranged attacks—these are the [[imp]], [[cacodemon]], [[revenant]], [[Hell knight]] and [[baron of Hell]]. [[Player]]s can perform melee attacks using the [[fists]] or the [[chainsaw]]. [[Lost soul]]s may be seen like melee atackers attackers only, but in fact the game treats them like living [[projectile]]s.
== Technical ==
In the [[Doom source code]], there is a constant <tt>{{c|MELEERANGE</tt> }} defined as <tt>{{c|64*FRACUNIT</tt>}}. For a player, this means that a melee attack will be successful only if the target is no farther than 64 map units away. Using the [[angle]] the player is facing, the map point <tt>{{c|MELEERANGE</tt> }} units away is determined trigonometrically. Then the [[hitscan]] function is invoked, which will damage the first vulnerable thing (if any) along the line to that point.
For monsters that have melee attacks, the function <tt>{{c|P_CheckMeleeRange</tt> }} is called, and it returns <tt>{{c|true</tt> }} if a melee attack will be successful. If so, damage is inflicted immediately; if not, a ranged attack (if any) is launched.
In <tt>{{c|P_CheckMeleeRange</tt>}}, <tt>{{c|P_AproxDistance</tt> }} is called first. (Approximate distance is used, presumably, to avoid a time-consuming square root evaluation that calculating distance more precisely would require.) Then, the following code is executed:
if (dist >= MELEERANGE-20*FRACUNIT+pl->info->radius)
return false;
This returns <tt>{{c|false</tt> }} if the calculated distance from the center of the attacker to the closest edge of the target is greater than or equal to 44 map units. Except for [[monster infighting]], the target will be a player (with radius 16) and melee attacks can occur only when the calculated distance is less than 60 map units. Finally, <tt>{{c|P_CheckSight</tt> }} is called to ensure that nothing is in between the attacker and the target.
==See also==
==External links==
* [ Graphics Gems approximate hypotenuse]