Monster CR Scaler (2014) – How it works

This page documents the exact steps and formulas used by the Monster CR Scaler for the 2014 ruleset. The goal is transparency so you can understand, audit, and adapt the results at your table.

Inputs

  • Source monster stat block: name, size/type, current challenge_rating, and stats (AC, HP, STR/DEX/CON/INT/WIS/CHA).
  • Optional action list used to estimate DPR from damage expressions (e.g., 1d6+2).
  • Target CR (supports fractional CRs 1/8, 1/4, 1/2 and CR 1–30).
  • Optional bonuses: acEquipment, acRace, and per-ability abilityScoreBonus.

CR row lookup

We look up two rows from the internal 2014 CR matrix: one for the source CR and one for the target CR. Each row contains reference values like proficiency bonus, expected AC, HP, attack bonus, DPR, and save DC.

Implementation: findCRRow(cr) picks the highest row with row.cr ≤ cr.

Damage per round (DPR) estimation

If the monster has actions with damage strings, we estimate average damage for each action and sum:

  • For each token like X d Y (e.g., 2d6), expected value = X × (Y + 1) / 2.
  • An optional flat modifier ±N is added once to that action’s total.
  • Non-dice numbers are parsed as a flat value where possible.

The per-action averages are summed and rounded to nearest integer. If no actions are provided, we use 1.

HP scaling

HP is scaled proportionally from the source monster’s HP to the target row’s expected HP:

hpScale = tgtRow.hp / max(1, srcHP)

finalHP = round(srcHP × hpScale), with a minimum of 1.

AC scaling

  • Compute raw delta: Δ = tgtRow.ac − srcAC.
  • Apply at most ±2 points toward the target: finalAC_raw = clamp(srcAC + sign(Δ) × min(2, |Δ|), 5, 30).
  • Then apply user-supplied bonuses: finalAC = finalAC_raw + acEquipment + acRace (each optional).

Ability score scaling (STR/DEX/CON/INT/WIS/CHA)

We scale ability scores by modifier steps, not by raw points:

  1. Compute CR difference: crDiff = targetCR − sourceCR.
  2. Increase the ability modifier by floor(crDiff / 2) steps. Example: from CR 1 to CR 5, crDiff=4+2 modifier steps.
  3. Map the new modifier back to the nearest canonical score using the standard “score ⇒ modifier” table.
  4. Apply any per-ability bonus (abilityScoreBonus), then clamp to the 1–30 range.

HP and AC are explicitly excluded from this loop since they are handled by the formulas above.

Attack bonus advice

We provide a suggested attack bonus to help you tune actions:

  • Determine the best attack ability modifier: atkAbilityMod = max(mod(STR), mod(DEX)) for the scaled stats.
  • Compute how the matrix’s baseline attack bonus changes: attackDelta = tgtRow.atkb − srcRow.atkb.
  • Adjust for the change in the monster’s own attack stat mod (scaled vs. source): atkAbilityMod − srcAtkMod.
  • Suggested: finalAttackBonus = round(srcRow.atkb + attackDelta + atkAbilityMod − srcAtkMod).

Save DC advice

Suggested save DC starts from the target row’s DC and shifts with the monster’s INT modifier change (as a simple spellcasting‑style proxy):

finalSaveDC = tgtRow.save_dc + (mod(INT_scaled) − mod(INT_source))

DPR reference scale

We also report scaling factors to help you retune damage:

  • srcDPR: estimated from the input actions.
  • tgtDPR: matrix value for target CR.
  • dprScale = tgtDPR / max(1, srcDPR)

Bounds and clamps

  • AC is clamped to 5–30 after all adjustments.
  • Ability scores are clamped to 1–30.
  • HP has a minimum of 1.

Fractional CRs and ranges

The scaler supports CR 1/8, 1/4, 1/2 and 1–30. Internally, target/source rows are selected by ≤ logic, so a non‑listed CR value will use the nearest lower row.

Randomness note

The in‑app 2014 CR matrix spans the DMG ranges and includes some randomized values for AC/HP/DPR within official bands to avoid singular results. The production app uses the real matrix; you can always override outcomes via the bonuses described above.

CR Matrix Reference

These are the complete baseline stat expectations used for scaling.

Challenge RatingProficiency BonusArmor ClassHit PointsAttack BonusDamage per RoundSave DC
02121+1110
1/82127+3310
1/421315+3511
1/221330+4912
121330+4912
221345+41513
321360+52113
421475+52714
5315130+63315
6315145+63915
7315160+64515
8316180+75116
9416200+75716
10417220+76316
11417245+86917
12417260+87517
13518280+88118
14518300+98718
15518325+99318
16518350+109918
17619400+1010519
18619450+1011119
19619500+1111719
20619550+1112319
21719600+1212920
22719650+1213520
23719700+1314120
24719750+1314721
25819800+1415321
26819850+1415921
27819900+1516522
28820950+1517122
299201000+1617722
309211100+1718323

Based on 5e 2014 DMG and 2024 Update guidelines with minor range smoothing.