User Tools

Site Tools


modding:damage_mechanics

ricorl stub

An explanation of how weapons damage enemies (and, eventually, how enemies damage you!) These documents are based on the Doomsday source code; hopefully most of it should also apply to the original versions of the games and other source ports but I haven't actually checked that.

A Quick Note on Terminology

This article will often use the standard AD&D “xDy” terminology. If you're not familiar with that, it means to roll a y-sided die x times, and sum up the results. (In other words, generate x random numbers between 1 and y, inclusive, and add them together.)

Note the difference between, for example, 5*(1d3) and 5d3. The former can produce only three results (namely 5, 10, or 15) each with equal probability. The latter can produce any value between 5 and 15, inclusive, with values closer to 10 being more likely to occur than values closer to 5 or 15.

Doom Damage Mechanics

Melee-Type Weapons

Non-projectile attacks such as fists, fangs, or chainsaws.

Fists

A player's unarmed attack does 2*(1d10) damage.

Berserk Fist

If the player has collected a Berserk at some point during the level and not died since, an unarmed attack will do 20*(1d10) damage.

Chainsaw

Like the fist, 2*(1d10) per hit. The difference obviously is that the Chainsaw gets in more hits in the same amount of time than using the fist would, though the Chainsaw does have an arguably negiable 1 unit additional range over the fist.

Bullet-Type Weapons

These weapons, when fired, hit their targets practically instantaneously.

Pistol

Fires one pellet worth 5*(1d3) damage.

Shotgun

Fires seven pellets, each worth 5*(1d3) damage, scattered in the general direction the shotgun is aimed. (Each pellet gets a separate damage calculation.)

Super Shotgun

Just like the Shotgun, only 20 pellets are fired instead of 7.

Chaingun

Fires pellets worth 5*(1d3) damage, only more quickly than the Pistol.

Missile-Type Weapons

Missile type weapons all do DP*(1d8) damage, where DP is a damage parameter that depends on the missile type. A chart follows:

Type DP Note
Rocket 20
Plasma 5
BFG9000 100
Troopshot 3 Imp attack
Lost Soul 3
Arachnoplasma 5 Arachnotron attack
Headshot 5 Cacodemon attack
Bruisershot 8 Baron of Hell attack
Fatshot 8 Mancubus attack
Tracer 10 Revenant attack

Some missile attacks may also cause secondary damage upon impact.

Enemy missile attacks do not damage other enemies of the same type. (Players can happily missile each other, though.)

Secondary Damage

Explosives

Not entirely sure how this works exactly, but my here's my best guess. Explosions due to rocket impacts (and exploding barrels) cause 128 damage to anything directly at the center of the explosion; a target x units away from the center of the explosion takes 128 - x damage. (If this is 0 or less, then the target is out of range and no damage is taken.)

For comparison, rocketing a wall at point blank causes 112 damage to the player. (This makes sense when you consider that the player object has a radius of 16 units.)

Cyberdemons and Spider Masterminds are immune to explosive damage. If you intend on rocketing one to death, aim carefully. :)

BFG9000

Upon impact of the BFG9000's main blast, 40 damage traces are sent out at regular intervals from the location of the player who fired the blast. The traces begin at -90 degrees from the direction which the BFG9000 blast was fired (note that this is not necessarily the direction the player is currently facing) and end at +90 degrees. For example, if a BFG blast was fired due north, traces would be sent starting from due east of the firing player to due west.

Any target along a damage trace receives 15d8 damage. (Damage is calculated separately for each trace.) A single target may be hit by multiple traces, especially if the target is at close range to the firing player.

Armor

Player characters have one of three armor classes at any given time depending on the last suit of armor acquired: 0 (no armor), 1 (green armor), or 2 (blue armor). Their effects are as follows:

AC 0: no damage reduction.

AC 1: damage is reduced by 1/3 (round down) or however many armor points are remaining, whichever is smaller.

AC 2: damage is reduced by 1/2 (round down) or however many armor points are remaining, whichever is smaller.

The amount of damage the armor reduces is subtracted from remaining armor points instead of remaining health.

Collecting a small armor bonus does not change AC unless the player is currently at AC 0 (in which case they will be upgraded to AC 1).

Misc Notes

Damage done to a player is halved if playing the “I'm too young to die!” difficulty. This halving occurs before damage reduction due to armor.

Enemy HP table

Pain is the chance (out of 256) of an enemy being briefly stunned by an attack.

Enemy HP Pain
Barrel 20 N/A
Former Human 20 200
Former Sargeant 30 170
Wolf SS 50 170
Imp 60 200
Chaingun Guy 70 170
Commander Keen 100 256
Lost Soul 100 256
Demon 150 180
Spectre 150 180
Boss Brain 250 255
Revenant 300 100
Cacodemon 400 128
Pain Elemental 400 128
Arachnotron 500 128
Hell Knight 500 50
Mancubus 600 80
Archvile 700 10
Baron of Hell 1000 50
Boss Target 1000 N/A
Spider Mastermind 3000 40
Cyberdemon 4000 20

Heretic Damage Mechanics

This section is under construction. For now, enjoy this enemy statistics chart.

Enemy Stats Chart

Pain is the chance (out of 256) of an enemy being briefly stunned by an attack.

Drop is the item an enemy may drop upon defeat.

Drop Chance is the chance (out of 256) that the enemy will drop an item.

Enemy HP Pain Drop Drop Chance
Chicken (Enemy) 10 200
Gargoyle 40 200
Pod 45 255
Fire Gargoyle 80 200
Golem 80 128 Rod Crystal x3 84
Golem Ghost 80 128 Rod Crystal x3 84
Chicken (Player) 100 255
Nitrogolem 100 64 Rod Crystal x3 84
Nitrogolem Ghost 100 64 Rod Crystal x3 84
Sabreclaw 150 32 Lesser Runes x20 84
Disciple 180 64 Claw Orb x10 84
Tome of Power 4
Warrior 200 100 Ethereal Arrows x5 84
Warrior Ghost 200 100 Ethereal Arrows x5 84
Weredragon 220 100 Ethereal Arrows x10 84
Ophidian 280 48 Flame Orb x5 84
Ironlich 700 32 Claw Orb x10 84
Morph Ovum 51
D'Sparil 2000 56
Maulotaur 3000 25 Mystic Urn 51
Flame Orb x10 84
D'Sparil 3500 32

Hexen Damage Mechanics

This section is still under construction.

Armor

Armor handling is a bit more complicated in Hexen than in Heretic or DOOM. Player characters can collect up to 4 pieces of armor, and while a total Armor Class value is shown on the HUD, Hexen keeps track of the condition of each piece separately. (The inventory at the bottom of the automap will show you which pieces of armor are still intact.)

Each piece of armor starts with a set number of Armor Points; the amount of AP each piece is worth varies by class. In addition, players come with a set number of “automatic” AP; unlike the regular pieces of armor these points never deteroriate. The following chart shows the AP values of armor by class as well as the maximum number of total AP a class can have:

Class Auto Armor Shield Helmet Amulet Max
Fighter 15 25 20 15 5 100
Cleric 10 10 25 5 20 90
Mage 5 5 15 10 25 80
Pig 0 0 0 0 0 5

The AC shown on the HUD is the sum of all remaining armor points (including Auto armor) divided by 5.

When a player is hit by an attack doing DMG damage, let “SavedPercent” be the total of the player's current remaing AP. If SavedPercent exceeds 100, set SavedPercent equal to 100. (This check is performed by the damage routine, but I am not aware of any circumstance where AP > 100 is possible.)

Then, let “Saved” equal (DMG * (SavedPercent/100)). If Saved is greater than (2 * SavedPercent), then Saved is set equal to (2 * SavedPercent). After truncating any decimal, Saved is the amount of damage absorbed by armor.

The AP of each piece of armor a character currently has is reduced by (DMG * (FullAP/300)), where FullAP is the value found in the chart above. (Decimals are not truncated in this operation.) If any piece of armor falls below 2 AP, it is destroyed.

An example

Let's assume a fully armored (without the aid of Dragonskin Bracers) Fighter (80 AP/16 AC) is hit by a 250 damage attack. Since he has 80 AP, SavedPercent is also 80 and we let Saved = (250 * .80) = 200. However, since 200 is greater than (2 * SavedPercent) = 160, we must set Saved to 160 instead. Therefore, 90 damage will go through to the Fighter. (Ouch.)

His Armor will be reduced by (250 * 25/300) = ~20.833 points, leaving it with ~4.167 AP remaining.

His Shield will be reduced by (250 * 20/300) = ~16.667 points, leaving it with ~3.333 AP remaining.

His Helmet will be reduced by (250 * 15/300) = 12.5 points, leaving it with 2.5 AP remaining.

His Amulet will be reduced by (250 * 5/300) = ~4.167 points, leaving it with ~0.833 AP. Since this is less than 2, the Amulet is destroyed.

The fighter now has 25 AP left (15 automatic + 10 from what's left of his armor).

Dragonskin Bracers

Using the Dragonskin Bracers artifact attempts to add 5 AP to each piece of armor, in the following order: Armor, Shield, Helmet, Amulet. If adding the 5 AP to a piece would bring the total AP above the player's max AP (see chart above), it will not be added.

If the Bracers add 5 AP to a non-existing piece of armor, it will magically appear in your inventory. :)

Enemy HP Chart

Pain is the chance (out of 256) of an enemy being briefly stunned by an attack.

Enemy HP Pain
Pig 25 128
Afrit 80 1
Stalker 90 96
Wendigo 120 144
Dark Bishop 130 110
Reiver 150 25
Ettin 175 60
Centaur 200 135
Chaos Serpent 250 50
Slaughtaur 250 96
Death Wyvern 640 128
Menelkir 800 50
Traductus 800 50
Zedek 800 50
Maulotaur 2500 25
Heresiarch 5000 10
Korax 5000 20
modding/damage_mechanics.txt · Last modified: 2009-08-13 15:03 by dewbot