Calculate your Pet's Damage, Resistance, and Accuracy based on Attributes
Calculated Talent Values
Based on your pet's current attribute numbers:
Talent Type
Talent Name (Example)
Exact Value
In-Game Display
*Note: Wizard101 displays rounded integers, but battles often use the precise decimal values. "Fake" 10% stats occur when the value is 9.5%+, but "True" 10% requires higher attributes.
Understanding Wizard101 Pet Stats
In Wizard101, building the perfect pet relies heavily on five core attributes: Strength, Intellect, Agility, Will, and Power. These numbers determine how powerful your pet's talents effectively are. This calculator helps you predict whether your pet has reached the coveted "Full Resistance" or "Max Damage" thresholds.
The "SAP" and "SWP" Formulas
Experienced players often refer to specific attribute combinations when calculating stats:
SAP (Strength, Agility, Power): This combination determines your pet's universal resistance (Spell-Proof and Spell-Defying). If you are building a defensive pet, these are your most critical stats.
SWP (Strength, Will, Power): This combination calculates your pet's damage output (Dealer, Giver, and Boon talents). For offensive pets, maximizing Will and Strength is priority number one.
Formulas Used in This Calculator
The game uses specific mathematical formulas to derive the percentage boosts. Knowing these can help you decide which Pet Jewel (like a Mighty Opal) to affix.
School-Dealer:(2 × Strength + 2 × Will + Power) ÷ 125 (Caps around 10-11%)
Pain-Giver / School-Giver:(2 × Strength + 2 × Will + Power) ÷ 200 (Caps around 6-7%)
Pain-Bringer / School-Boon:(2 × Strength + 2 × Will + Power) ÷ 400 (Caps around 3-4%)
What are "Max Stats"?
The term "Max Stats" historically referred to a pet with 255 Strength, 250 Intellect, 260 Agility, 260 Will, and 250 Power. However, with the introduction of "selfish" talents and jewels like Mighty (+65 Strength) or Thinkin' Cap (+65 Will), these caps can be exceeded to achieve "True 15%" Resist or "True 11%" Dealer damage.
function calculateW101Stats() {
// 1. Get input values
var str = parseFloat(document.getElementById('w101_strength').value) || 0;
var int = parseFloat(document.getElementById('w101_intellect').value) || 0;
var agi = parseFloat(document.getElementById('w101_agility').value) || 0;
var will = parseFloat(document.getElementById('w101_will').value) || 0;
var pow = parseFloat(document.getElementById('w101_power').value) || 0;
// 2. Calculate Derived Values based on W101 Wiki Formulas
// Resistance (Uses SAP: Strength, Agility, Power)
var sap_numerator = (2 * str) + (2 * agi) + pow;
var proof_val = sap_numerator / 125;
var defy_val = sap_numerator / 250;
// Damage (Uses SWP: Strength, Will, Power)
var swp_numerator = (2 * str) + (2 * will) + pow;
var dealer_val = swp_numerator / 125; // 10% talent
var giver_val = swp_numerator / 200; // 6% talent
var boon_val = swp_numerator / 400; // 3% talent
// Accuracy (Uses Strength, Intellect, Agility)
// Sharp-Shot / Sniper formula: (2*Int + 2*Agi + Pow) / 400 for standard?
// Actually typically: (2*Int + 2*Agi + Pow) / 125 is too high.
// Sharp-shot is usually around 6% max. Formula: (2*Int + 2*Agi + Pow) / 250 gives ~5%.
// Let's use the standard generalized formula for calculator completeness.
var acc_numerator = (2 * int) + (2 * agi) + pow;
var sharp_shot_val = acc_numerator / 200; // Approx 6% max
// Pierce (Uses SAP)
var breaker_val = sap_numerator / 400; // Approx 3% max
// 3. Helper function for display
function formatRow(type, name, val) {
var exact = val.toFixed(3) + "%";
var display = Math.round(val) + "%";
return "
" + type + "
" + name + "
" + exact + "
" + display + "
";
}
// 4. Generate Table HTML
var html = "";
// Resist
html += formatRow("Resistance", "Spell-Proof", proof_val);
html += formatRow("Resistance", "Spell-Defying", defy_val);
// Damage
html += formatRow("Damage", "School-Dealer (e.g. Fire-Dealer)", dealer_val);
html += formatRow("Damage", "Pain-Giver / School-Giver", giver_val);
html += formatRow("Damage", "Pain-Bringer / School-Boon", boon_val);
// Accuracy
html += formatRow("Accuracy", "Sharp-Shot", sharp_shot_val);
// Pierce
html += formatRow("Pierce", "Armor Breaker", breaker_val);
// 5. Output to DOM
document.getElementById('w101_table_body').innerHTML = html;
document.getElementById('w101_results').style.display = 'block';
}