Loot Drop Probability Calculator
ANA›Life Services Authority›National Calculator Authority›Loot Drop Probability 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; } }
Loot Drop Probability Calculator
Calculate the probability of obtaining a specific loot item at least once given a base drop rate and number of attempts (kills/runs/chests).
Base Drop Rate (%)
Probability of the item dropping on a single attempt (0.0001% – 100%)
Number of Attempts
Total kills, runs, or chests opened (1 – 1,000,000)
Pity Timer (optional)
Guaranteed drop every N attempts (leave blank if no pity system)
Target Probability (%)
Desired probability — calculates attempts needed to reach this chance (1% – 99.9999%)
Calculate Results will appear here.
function looCalc() { const resultDiv = document.getElementById('loo-result');
const dropRateInput = document.getElementById('loo-drop-rate').value.trim(); const attemptsInput = document.getElementById('loo-attempts').value.trim(); const pityInput = document.getElementById('loo-pity').value.trim(); const targetInput = document.getElementById('loo-target-prob').value.trim();
// Validate drop rate if (dropRateInput === '') { resultDiv.innerHTML = 'Please enter a base drop rate.'; return; } const dropRate = parseFloat(dropRateInput); if (isNaN(dropRate) || dropRate 100) { resultDiv.innerHTML = 'Drop rate must be between 0.0001% and 100%.'; return; } const p = dropRate / 100; // probability per attempt
// Validate attempts (optional if target prob is given) let attempts = null; if (attemptsInput !== '') { attempts = parseInt(attemptsInput, 10); if (isNaN(attempts) || attempts 1000000) { resultDiv.innerHTML = 'Attempts must be between 1 and 1,000,000.'; return; } }
// Validate pity (optional) let pity = null; if (pityInput !== '') { pity = parseInt(pityInput, 10); if (isNaN(pity) || pity 1000000) { resultDiv.innerHTML = 'Pity timer must be between 1 and 1,000,000.'; return; } }
// Validate target probability (optional) let targetProb = null; if (targetInput !== '') { targetProb = parseFloat(targetInput); if (isNaN(targetProb) || targetProb = 100) { resultDiv.innerHTML = 'Target probability must be between 1% and 99.9999%.'; return; } }
if (attempts === null && targetProb === null) { resultDiv.innerHTML = 'Please enter either Number of Attempts or a Target Probability (or both).'; return; }
// ── Helper: probability of at least one drop in n attempts WITH pity ── // With pity every K attempts, guaranteed drop occurs at attempt K, 2K, 3K, ... // P(at least one drop in n attempts with pity) uses inclusion-exclusion approximation: // The model treats it as: probability of NOT getting a drop in a full pity cycle of K attempts // = (1-p)^K BUT pity guarantees a drop at attempt K, so P(no drop in cycle) = 0 // More precisely: P(no drop in n attempts with pity) = 0 if n >= pity // For n = pityK) { return 1.0; // pity guarantees at least one drop } // Standard geometric: P(at least one) = 1 - (1-p)^n return 1 - Math.pow(1 - dropP, n); }
// ── Helper: attempts needed to reach target probability (no pity) ── // 1 - (1-p)^n >= T => n >= log(1-T) / log(1-p) function attemptsForTarget(T, dropP) { return Math.ceil(Math.log(1 - T) / Math.log(1 - dropP)); }
// ── Helper: expected attempts to first drop ── // E[X] = 1/p (geometric distribution) // With pity K: E[X] = sum_{k=1}^{K} k * P(first drop at k) // P(first drop at k) = (1-p)^(k-1) * p for k '; const rowStyle = 'style="padding:8px;border-bottom:1px solid #ddd;"';
// Expected attempts to first drop const expAttempts = expectedAttempts(p, pity); html += 'Expected Attempts for First Drop'; html += '' + expAttempts.toFixed(2) + ' attempts';
- // Expected drops per 100 attempts
- const expDropsPer100 = pity !== null
- ? (100 / expAttempts).toFixed(4)
- (100 * p).toFixed(4); html += 'Expected Drops per 100 Attempts'; html += '' + expDropsPer100 + '';
// Probability over given attempts if (attempts !== null) { const prob = probAtLeastOne(attempts, p, pity); const probPct = (prob * 100).toFixed(4); html += 'Probability in ' + attempts.toLocaleString() + ' Attempts'; html += '' + probPct + '%';
- // Expected number of drops in n attempts
- const expDrops = pity !== null
- ? (attempts / expAttempts).toFixed(4)
- (attempts * p).toFixed(4); html += 'Expected Drops in ' + attempts.toLocaleString() + ' Attempts'; html += '' + expDrops + ''; }
// Attempts needed for target probability if (targetProb !== null) { const T = targetProb / 100; let needed; if (pity !== null && T >= 1.0) { needed = pity; } else if (pity !== null) { // With pity: if target = probAtPity) { needed = pity; } else { needed = attemptsForTarget(T, p); needed = Math.min(needed, pity); } } else { needed = attemptsForTarget(T, p); } html += 'Attempts Needed for ' + targetProb + '% Chance'; html += '' + needed.toLocaleString() + ' attempts'; }
// Milestone probabilities (25%, 50%, 75%, 90%, 99%) html += 'Milestone Attempts (no pity)'; const milestones = [25, 50, 75, 90, 99]; milestones.forEach(function(m) { const n = attemptsForTarget(m / 100, p); html += '' + m + '% chance'; html += '' + n.toLocaleString() + ' attempts'; });
html += ''; resultDiv.innerHTML = html; }
#### Formulas Used
Probability of at least one drop in n attempts: P(X ≥ 1) = 1 − (1 − p)n
where p = drop rate per attempt (e.g. 5% → p = 0.05).
Attempts needed to reach target probability T: n = ⌈ log(1 − T) / log(1 − p) ⌉
Expected attempts to first drop (no pity): E[X] = 1 / p (Geometric distribution)
Expected attempts to first drop (with pity K): E[X] = Σk=1K−1 k · (1−p)k−1 · p + K · (1−p)K−1
The pity term adds K × P(no drop in first K−1 attempts), guaranteeing a drop at attempt K.
#### Assumptions & References
- Each attempt is an independent Bernoulli trial with constant probability p.
- The model follows a Geometric distribution — the number of trials until the first success.
- Expected drops in n attempts = n × p (no pity) or n / E[X] (with pity).
- Reference: Feller, W. (1968). An Introduction to Probability Theory and Its Applications, Vol. 1. Wiley.
- Reference: Geometric Distribution — Wikipedia
More Calculators
- Frame Rate & Delta Time Calculator
- Player Progression Curve Calculator
- Structural Drying Equipment Needs Calculator
- Identity Verification Confidence Score Calculator
- Verification Process Turnaround Time Estimator
- EV Home Charging Cost Calculator (Virginia Electricity Rates)
- AI Coding Tool ROI Calculator
-
Vibecoding vs Traditional Development Time Savings Estimator
- Course Completion Rate Analyzer
- Confusion Matrix Metrics Calculator
- Bias-Variance Tradeoff Calculator
- Training Compute & FLOP Estimator
- Credit Hour to Degree Completion Calculator