Enter the denominator (e.g., enter 512 for a 1/512 drop)
Probability of getting at least drop(s):
0.00%
Likelihood of being this Dry:–
Percentile Rank:–
Understanding OSRS Drop Rates & Probability
In Old School RuneScape (OSRS), acquiring rare items is governed by a Random Number Generator (RNG). This OSRS Drop Calculator helps you understand the statistical likelihood of obtaining a specific item based on your Kill Count (KC) and the item's drop rate.
How the Math Works (Binomial Distribution)
Many players assume that if an item has a drop rate of 1/512, killing the monster 512 times guarantees the drop. Statistically, this is incorrect. This is known as the Gambler's Fallacy.
The 63% Rule: If you kill a monster X times for a 1/X drop, you only have a ~63.2% chance of receiving the item at least once. This is derived from the formula: 1 - (1 - 1/Rate)^Kills
What does "Going Dry" mean?
"Going dry" is a community term used when a player exceeds the drop rate denominator without receiving the item. For example, if you are 1,000 kills into a 1/512 grind without a drop, you are considered dry.
On Rate (1x): ~63% of players will have the drop.
2x Rate (Double KC): ~86% of players will have the drop.
3x Rate (Triple KC): ~95% of players will have the drop.
4x Rate: ~98% of players will have the drop.
Using the Calculator
To use this tool for your Iron or Main account grinds:
Drop Rate (1 in X): Enter the denominator found on the OSRS Wiki (e.g., enter 5000 for a Pet or 400 for a CG Seed).
Number of Kills: Input your current Kill Count (KC) or the number of chests opened.
Target Drops: Usually 1, but enter higher numbers if you are hunting for duplicate items (e.g., Abyssal Bludgeon pieces or Hydra Ring pieces).
Interpreting the Results
The calculator outputs your cumulative probability. If the result says "80%", it means that in 100 parallel universes, 80 of your characters would have obtained the item by this kill count, while 20 would still be dry.
function calculateDropChance() {
// 1. Get input values
var rateInput = document.getElementById("dropRateDenominator").value;
var killsInput = document.getElementById("killCount").value;
var targetInput = document.getElementById("targetDrops").value;
// 2. Validate inputs
var rate = parseFloat(rateInput);
var kills = parseFloat(killsInput);
var target = parseInt(targetInput);
if (isNaN(rate) || rate <= 0) {
alert("Please enter a valid Drop Rate Denominator (greater than 0).");
return;
}
if (isNaN(kills) || kills < 0) {
alert("Please enter a valid Kill Count (0 or more).");
return;
}
if (isNaN(target) || target = 1) = 1 – P(X = 0) = 1 – q^n
var probability = 0;
if (target === 1) {
var chanceZeroDrops = Math.pow(q, kills);
probability = 1.0 – chanceZeroDrops;
} else {
// For target > 1, we need to sum probabilities of getting 0, 1, …, target-1 drops
// and subtract that sum from 1.
// P(X >= k) = 1 – sum(P(X=i)) for i=0 to k-1
var sumProb = 0;
// Iterate from 0 to target-1
for (var i = 0; i 99.9999 && percentVal 99.99%";
} else {
percentageResult.innerText = percentVal.toFixed(2) + "%";
}
// Calculate Dryness (Inverse)
// If probability is 63%, that means 63% have it, 37% don't.
// You are in the 37% "dry" category if you don't have it yet.
var dryness = (1.0 – probability) * 100;
// Formatting Interpretation
var dryFormatted = dryness.toFixed(2) + "%";
var percentileFormatted = "Top " + (100 – dryness).toFixed(2) + "% unlucky";
drynessResult.innerText = dryFormatted + " chance of having 0 drops";
// Logic for specific text feedback
var text = "";
var color = "#333";
if (percentVal = 50 && percentVal = 86 && percentVal = 95) {
text = "You are extremely dry. RNG is not on your side today.";
percentileResult.innerText = "Extremely Unlucky";
color = "#c0392b";
}
interpretationText.innerText = text;
interpretationText.style.color = color;
}
// Helper function for Log Factorial approximation to handle large numbers (Stirling's approx not needed for small k, but safe logic for N choose K)
// Actually, since target is usually small, we can just do multiplicative calculation for nCk
// nCk = n * (n-1) * … * (n-k+1) / k!
function logCombination(n, k) {
if (k n) {
return -Infinity; // Impossible
}
if (k === 0 || k === n) {
return 0; // log(1) = 0
}
if (k > n / 2) {
k = n – k;
}
var logRes = 0;
for (var i = 1; i <= k; i++) {
logRes += Math.log(n – i + 1) – Math.log(i);
}
return logRes;
}