Drinking & Dragons

Math Forumlas for D&D

From Drinking and Dragons

A compilation of important formulas derived from d20 System sources.

Most of these are well known, but posted here as a reference.


Ability Modifiers

modifier = ability / 2 – 5 or modifier = (ability – 10) / 2 , round down.

  • Division is rounded down.
  • Ability should be 0 or greater.

Bonus Spells

bonus = (ability – (spellLevel + 1) * 2) / 8

  • Division is rounded down, to 0 minimum.
  • 0-level spells receive no bonuses.
  • If the ability is less than 10+spellLevel, no spells of that level can be cast.
  • Ability should be 0 or greater.
  • SpellLevel should be between 1 and 9.

Base Attack Bonus

  • goodAttacks = classLevel * 1
  • normAttacks = classLevel * 3 / 4
  • poorAttacks = classLevel * 1 / 2
  • Division is rounded down.
  • ClassLevel should be greater than 0.

Saving Throws

  • goodSave = classLevel / 2 + 2
  • poorSave = classLevel / 3
  • Division is rounded down.
  • ClassLevel should be greater than 0.

Skill Max Ranks

  • inClassMax = characterLevel + 3
  • crossClassMax = (characterLevel + 3) / 2
  • Division is not rounded.
  • CharacterLevel should be greater than 0.

Spell Cost

cost = spellLevel * casterLevel * 10

  • 0-level spells count as ½ spell level.
  • SpellLevel should be between 1 and 9.
  • CasterLevel should be greater than 0.

Treasure and Character Wealth

Neither the treasure tables, nor NPC or PC wealth tables, appear to follow a regular formula.

Speed

encumberedSpeed = baseSpeed * 0.7

  • Rounding is done to the nearest multiple of 5.
  • BaseSpeed should be greater than 0.
  • (Note: The FAQ expands movement table in way that breaks any formula.)

Encumbrance

  • if strength 10, then: maxLoad = strength * 10
  • if strength > 10, then: maxLoad = 1.1487 ^ (strength - 10) * 100
  • Rounding is done to the nearest multiple of 5, 10, 20, or 40 (in steps of 5 strength).
  • Other modifiers may be made per the d20 System for character size, number of legs, etc.
  • Light load is 1/3 the max load; medium load is 2/3 the max load (round down).
  • (Note: 1.1487 approximates 104)
  • Strength should be greater than 0.

Movement

  • movePerHour = speed / 10
  • movePerDay = speed / 10 * 8
  • Terrain modifiers may apply to these figures.
  • Speed should be greater than 0.

Experience Points

requiredXP = level * (level – 1) * 500

  • (Note each level requires an added level * 1000 XP to advance through it.)
  • Level should be greater than 0.

Challenge Ratings

  • Fractional CR 1/2 1/3 1/4 1/6 1/8 1/10
  • Integral CR -1 -2 -3 -4 -5 -6
  • For the following formulas, fractional CRs may be converted to negative integers as above.
  • ChallengeRating should be a fraction as above.

Encounter Levels

EL = challengeRating + 2 * ln(number) / ln(2)

  • (Note that ln(number) / ln(2) = log2 (number).)
  • ChallengeRating should be an integer.
  • Number should be greater than 0.

Experience Awards

  • CD = challengeRating – partyLevel
  • if CD is even, then: award = partyLevel * 2 ^ (CD / 2) * 300
  • if CD is odd and CD < 0, then: award = partyLevel * 2 ^ ((CD+1) / 2) * 200
  • if CD is odd and CD > 0, then: award = partyLevel * 2 ^ ((CD-1) / 2) * 450
  • No award is given if |CD| > 7.
  • PartyLevels of 1 or 2 are treated as 3, except when the CR is 1 or 2.
  • (Note that the first “CD is even” case can be used as an approximation for all cases.)
  • (The second case is basically x2/3 the first.)
  • (The last case is basically x3/2 the first.)
  • ChallengeRating should be an integer.
  • PartyLevel should be greater than 0.