Pathfinder Character XP & Leveling Calculator

ANALife Services AuthorityNational Calculator Authority›Pathfinder Character XP & Leveling Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

Pathfinder Character XP & Leveling Calculator

Calculate experience points (XP) needed to reach the next level, XP earned from encounters based on Challenge Rating (CR), and track your character's progression using official Pathfinder rules.

Current Character Level (1–19)

Current XP

Party Size (number of players)

Encounter Challenge Rating (CR 1/8 to 30)

CR 1/8 CR 1/6 CR 1/4 CR 1/3 CR 1/2 CR 1 CR 2 CR 3 CR 4 CR 5 CR 6 CR 7 CR 8 CR 9 CR 10 CR 11 CR 12 CR 13 CR 14 CR 15 CR 16 CR 17 CR 18 CR 19 CR 20 CR 21 CR 22 CR 23 CR 24 CR 25 CR 26 CR 27 CR 28 CR 29 CR 30

XP Progression Track

Slow Medium Fast

Calculate Results will appear here.

function patCalc() { var resultDiv = document.getElementById('pat-result');

var currentLevel = parseInt(document.getElementById('pat-current-level').value); var currentXP = parseInt(document.getElementById('pat-current-xp').value); var partySize = parseInt(document.getElementById('pat-party-size').value); var encounterCR = parseFloat(document.getElementById('pat-encounter-cr').value); var track = document.getElementById('pat-xp-track').value;

// --- Input Validation --- if (isNaN(currentLevel) || currentLevel 19) { resultDiv.innerHTML = 'Please enter a valid character level between 1 and 19.'; return; } if (isNaN(currentXP) || currentXP Current XP must be 0 or greater.'; return; } if (isNaN(partySize) || partySize 10) { resultDiv.innerHTML = 'Party size must be between 1 and 10.'; return; }

// --- XP Thresholds per Track (Pathfinder Core Rulebook, Table 3-1) --- // Index = level (1-based), value = total XP needed to REACH that level var xpThresholds = { slow: [ 0, // level 1 starts at 0 3000, // level 2 7500, // level 3 14000, // level 4 23000, // level 5 35000, // level 6 53000, // level 7 77000, // level 8 115000, // level 9 160000, // level 10 235000, // level 11 330000, // level 12 475000, // level 13 665000, // level 14 955000, // level 15 1350000, // level 16 1900000, // level 17 2700000, // level 18 3850000, // level 19 5350000 // level 20 ], medium: [ 0, 2000, 5000, 9000, 15000, 23000, 35000, 51000, 75000, 105000, 155000, 220000, 315000, 445000, 635000, 890000, 1300000, 1800000, 2550000, 3600000 ], fast: [ 0, 1300, 3300, 6000, 10000, 15000, 23000, 34000, 50000, 71000, 105000, 145000, 210000, 295000, 425000, 600000, 850000, 1200000, 1700000, 2400000 ] };

var thresholds = xpThresholds[track];

// XP needed to reach next level var xpForCurrentLevel = thresholds[currentLevel - 1]; var xpForNextLevel = thresholds[currentLevel]; // level 20 cap var xpNeededTotal = xpForNextLevel; var xpNeededFromNow = xpForNextLevel - currentXP; var xpIntoLevel = currentXP - xpForCurrentLevel; var xpThisLevel = xpForNextLevel - xpForCurrentLevel; var progressPct = Math.min(100, Math.max(0, Math.round((xpIntoLevel / xpThisLevel) * 100)));

if (currentLevel >= 20) { resultDiv.innerHTML = 'Your character is already at the maximum level (20)!'; return; }

// --- Base XP per CR (Pathfinder Core Rulebook, Table 12-2) --- // Total XP for the encounter (split among party of 4 by default) var crXPTable = { 0.125: 50, 0.167: 65, 0.25: 100, 0.333: 135, 0.5: 200, 1: 400, 2: 600, 3: 800, 4: 1200, 5: 1600, 6: 2400, 7: 3200, 8: 4800, 9: 6400, 10: 9600, 11: 12800, 12: 19200, 13: 25600, 14: 38400, 15: 51200, 16: 76800, 17: 102400, 18: 153600, 19: 204800, 20: 307200, 21: 409600, 22: 614400, 23: 819200, 24: 1228800, 25: 1638400, 26: 2457600, 27: 3276800, 28: 4915200, 29: 6553600, 30: 9830400 };

var baseEncounterXP = crXPTable[encounterCR] || 0;

// XP per character = base XP / party size (Pathfinder splits encounter XP equally) var xpPerCharacter = Math.round(baseEncounterXP / partySize);

// Encounters needed to level up
var encountersNeeded = (xpPerCharacter > 0)
? Math.ceil(Math.max(0, xpNeededFromNow) / xpPerCharacter)
'N/A';

// XP after this encounter var xpAfterEncounter = currentXP + xpPerCharacter; var levelAfterEncounter = currentLevel; for (var lv = currentLevel; lv = thresholds[lv]) { levelAfterEncounter = lv; } else { break; } } var levelUp = (levelAfterEncounter > currentLevel) ? ' (Level Up!)' : '';

// Format numbers with commas function fmt(n) { return n.toLocaleString(); }

// CR display label var crLabels = { 0.125: '1/8', 0.167: '1/6', 0.25: '1/4', 0.333: '1/3', 0.5: '1/2' }; var crDisplay = crLabels[encounterCR] || encounterCR;

// Progress bar HTML var barColor = progressPct >= 75 ? '#4caf50' : progressPct >= 40 ? '#ff9800' : '#2196f3'; var progressBar = '' + '' + '' + progressPct + '% through Level ' + currentLevel + '';

resultDiv.innerHTML = '### Results ' + '' + 'Current Level' + currentLevel + ' → ' + (currentLevel + 1) + '' + 'XP Track' + track.charAt(0).toUpperCase() + track.slice(1) + '' + 'Current XP' + fmt(currentXP) + ' XP' + 'XP Needed for Level ' + (currentLevel + 1) + '' + fmt(xpForNextLevel) + ' XP' + 'XP Still Needed' + fmt(Math.max(0, xpNeededFromNow)) + ' XP' + '' + progressBar + '' + '' + 'Encounter CRCR ' + crDisplay + '' + 'Total Encounter XP (CR ' + crDisplay + ')' + fmt(baseEncounterXP) + ' XP' + 'Party Size' + partySize + ' players' + 'XP per Character' + fmt(xpPerCharacter) + ' XP' + 'XP After This Encounter' + fmt(xpAfterEncounter) + ' XP' + levelUp + '' + 'Encounters Needed to Level Up' + (typeof encountersNeeded === 'number' ? encountersNeeded : encountersNeeded) + '' + ''; }

#### Formulas Used

XP per Character from Encounter: XP per Character = Base Encounter XP (by CR) ÷ Party Size

XP Still Needed to Level: XP Needed = XP Threshold for Next Level − Current XP

Encounters to Level Up: Encounters = ⌈XP Needed ÷ XP per Character⌉

Level Progress %: Progress = (Current XP − XP at Current Level Start) ÷ (XP at Next Level − XP at Current Level Start) × 100

#### Assumptions & References

More Calculators

Read Next

Contingency Fee Vs Hourly Fee Cost Comparator ANA › Life Services Authority › National Calculator Authority › Contingency Fee vs.

Nebraska Small Claims Court Limit Checker ANA › Life Services Authority › National Calculator Authority › Nebraska Small Claims Court Limit Checker .calc-container {...

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References