Enter the percentage chance shown in-game (e.g., 3 for an Ultimate code).
How many Amorphous Materials or outpost runs are you planning?
Understanding Drop Rates in The First Descendant
In The First Descendant, farming for Ultimate Descendants, rare weapons, and stabilizers involves dealing with Random Number Generation (RNG). Whether you are opening Amorphous Material Patterns at a Void Intercept Battle or hacking outposts, the game displays a specific percentage chance for the item you want.
However, probability is not cumulative. Running a mission with a 20% drop rate 5 times does not guarantee a 100% drop. This calculator uses the binomial probability formula to determine your actual likelihood of success over multiple attempts.
Example Scenario:
You are farming for an Ultimate Bunny Stabilizer which has a 3% drop rate from an Amorphous Material. If you farm 50 of these materials:
You might intuitively think 50 * 3% = 150% (Guaranteed).
Reality: You actually have a ~78.2% chance of getting at least one drop. There is still a ~21.8% chance you walk away with nothing.
How to Use This Calculator
Item Drop Rate (%): Input the percentage value shown in the Access Info tab or on the Amorphous Material tooltip. Common values include 3%, 6%, 10%, 15%, 20%, 32%, and 38%.
Number of Runs: Enter how many times you plan to kill the boss, open the pattern, or clear the outpost.
Common TFD Drop Chances & Requirements
Based on statistical analysis, here is the average number of runs required to hit specific confidence intervals for common drop rates found in The First Descendant.
Drop Rate
Item Rarity
Runs for 50% Chance
Runs for 90% Chance
Runs for 99% Chance
3%
Ultimate BP / Red Mods
23 runs
76 runs
152 runs
6%
Rare Mats (Stabilized)
12 runs
38 runs
75 runs
20%
Weapon Parts
4 runs
11 runs
21 runs
38%
Common Mats
2 runs
5 runs
10 runs
The Math: The Gambler's Fallacy
Many players fall victim to the "Gambler's Fallacy," believing that if an item hasn't dropped in a while, it is "due." The First Descendant does not use a pity system (at launch). Every run is an independent event.
The formula used in this calculator is:
P(Success) = 1 – (1 – DropRate)^Runs
This calculates the probability that you will not fail every single time.
function calculateTFDProbability() {
// 1. Get Input Values
var rateInput = document.getElementById('dropRate').value;
var runsInput = document.getElementById('attempts').value;
var resultDiv = document.getElementById('result');
// 2. Validate Inputs
if (rateInput === "" || runsInput === "") {
resultDiv.style.display = "block";
resultDiv.innerHTML = "Please enter both the Drop Rate and Number of Runs.";
return;
}
var rate = parseFloat(rateInput);
var runs = parseInt(runsInput);
if (isNaN(rate) || rate 100) {
resultDiv.style.display = "block";
resultDiv.innerHTML = "Please enter a valid drop rate between 0.01 and 100.";
return;
}
if (isNaN(runs) || runs <= 0) {
resultDiv.style.display = "block";
resultDiv.innerHTML = "Please enter a valid number of runs (at least 1).";
return;
}
// 3. Calculation Logic (Binomial Probability)
// Probability of NOT getting the item in one run
var pFail = 1 – (rate / 100);
// Probability of NOT getting the item in 'runs' attempts
var pFailAll = Math.pow(pFail, runs);
// Probability of getting AT LEAST ONE success
var pSuccess = 1 – pFailAll;
// Convert to percentage
var chancePercent = (pSuccess * 100).toFixed(2);
var failPercent = (pFailAll * 100).toFixed(2);
// Calculate runs needed for 90%, 95%, 99% certainty (Theoretical)
// Formula: n = log(1 – Confidence) / log(1 – rate)
function getRunsForConfidence(confidence) {
return Math.ceil(Math.log(1 – confidence) / Math.log(1 – (rate / 100)));
}
var runs90 = getRunsForConfidence(0.90);
var runs95 = getRunsForConfidence(0.95);
var runs99 = getRunsForConfidence(0.99);
// 4. Build Output HTML
var html = "";
html += "
Results for " + runs + " runs at " + rate + "% drop rate:
";
html += "
";
html += "Chance to get at least 1 item:";
html += "" + chancePercent + "%";
html += "
";
html += "
";
html += "Chance to get NOTHING (Unlucky):";
html += "" + failPercent + "%";
html += "
";
html += "";
html += "
To virtually guarantee this drop:
";
html += "
";
html += "Runs needed for 90% certainty:";
html += "" + runs90 + " runs";
html += "
";
html += "
";
html += "Runs needed for 95% certainty:";
html += "" + runs95 + " runs";
html += "
";
html += "
";
html += "Runs needed for 99% certainty:";
html += "" + runs99 + " runs";
html += "