Tip a developer, click the potion:

About

For any feedback about the site feel free to dm me on Discord at weghuz#1978. I hang around in the DFK discord a lot, you can find me in the hero and price discussion channels.

You can find my most recent analysis of how I use formulas to analyse heroes in DFK here. This is what makes up the "Class Score" I use on this site. You can also find the code in the below section.

The "Growth Score" is a growth based score. It's based on a heroes Stat Growth Values. A medium article about it will come out at some point and then get linked in this section. For now you can find the code that's used below. It's all Javascript.

function ClassScore(hero) {
    let r1 = RemoveBase(hero);
    let r2 = RemoveAverageLevels(r1);
    let r3 = MultiplyBaseByGrowth(r2);
    return SumStats(r3);
}

function RemoveBase(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strength     = hero.strength     - classVars[hero.mainClass].base.str;
    returnHero.dexterity    = hero.dexterity    - classVars[hero.mainClass].base.dex;
    returnHero.agility      = hero.agility      - classVars[hero.mainClass].base.agi;
    returnHero.vitality     = hero.vitality     - classVars[hero.mainClass].base.vit;
    returnHero.endurance    = hero.endurance    - classVars[hero.mainClass].base.end;
    returnHero.intelligence = hero.intelligence - classVars[hero.mainClass].base.int;
    returnHero.wisdom       = hero.wisdom       - classVars[hero.mainClass].base.wis;
    returnHero.luck         = hero.luck         - classVars[hero.mainClass].base.lck;
    return returnHero;
}

function RemoveAverageLevels(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strength     = hero.strength     - classVars[hero.mainClass].growth.str * (hero.level - 1);
    returnHero.dexterity    = hero.dexterity    - classVars[hero.mainClass].growth.dex * (hero.level - 1);
    returnHero.agility      = hero.agility      - classVars[hero.mainClass].growth.agi * (hero.level - 1);
    returnHero.vitality     = hero.vitality     - classVars[hero.mainClass].growth.vit * (hero.level - 1);
    returnHero.endurance    = hero.endurance    - classVars[hero.mainClass].growth.end * (hero.level - 1);
    returnHero.intelligence = hero.intelligence - classVars[hero.mainClass].growth.int * (hero.level - 1);
    returnHero.wisdom       = hero.wisdom       - classVars[hero.mainClass].growth.wis * (hero.level - 1);
    returnHero.luck         = hero.luck         - classVars[hero.mainClass].growth.lck * (hero.level - 1);
    return returnHero;
}

function MultiplyBaseByGrowth(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strength = hero.strength * classVars[hero.mainClass].growth.str;
    returnHero.dexterity = hero.dexterity * classVars[hero.mainClass].growth.dex;
    returnHero.agility = hero.agility * classVars[hero.mainClass].growth.agi;
    returnHero.vitality = hero.vitality * classVars[hero.mainClass].growth.vit;
    returnHero.endurance = hero.endurance * classVars[hero.mainClass].growth.end;
    returnHero.intelligence = hero.intelligence * classVars[hero.mainClass].growth.int;
    returnHero.wisdom = hero.wisdom * classVars[hero.mainClass].growth.wis;
    returnHero.luck = hero.luck * classVars[hero.mainClass].growth.lck;
    return returnHero;
}

function SumStats(hero) {
    let sum = 0;
    sum += hero.strength    ;
    sum += hero.dexterity   ;
    sum += hero.agility     ;
    sum += hero.vitality    ;
    sum += hero.endurance   ;
    sum += hero.intelligence;
    sum += hero.wisdom      ;
    sum += hero.luck;
    return sum.toFixed(2);
}

Growth Score (Medium article will come at some point)

const rarityBonus = [0, 2, 4, 7, 10];

function GrowthScore(hero) {
    GrowthsToRealNumbers(hero);
    let r1 = RemoveBaseGrowth(hero)
    let r2 = AddRarityGrowth(r1);
    let r3 = SumPandSGrowth(r2);
    let r4 = MultiplyGrowthByBaseGrowth(r3);
    let score = SumGrowth(r4);
    return score;
}

function GrowthsToRealNumbers(hero) {
    hero.strengthGrowthP     /= 10000;
    hero.dexterityGrowthP    /= 10000;
    hero.agilityGrowthP      /= 10000;
    hero.vitalityGrowthP     /= 10000;
    hero.enduranceGrowthP    /= 10000;
    hero.intelligenceGrowthP /= 10000;
    hero.wisdomGrowthP       /= 10000;
    hero.luckGrowthP         /= 10000;
    hero.strengthGrowthS     /= 10000;
    hero.dexterityGrowthS    /= 10000;
    hero.agilityGrowthS      /= 10000;
    hero.vitalityGrowthS     /= 10000;
    hero.enduranceGrowthS    /= 10000;
    hero.intelligenceGrowthS /= 10000;
    hero.wisdomGrowthS       /= 10000;
    hero.luckGrowthS         /= 10000;
    return hero;
}

function RemoveBaseGrowth(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strengthGrowthP = hero.strengthGrowthP - classVars[hero.mainClass].growth.str;
    returnHero.dexterityGrowthP = hero.dexterityGrowthP - classVars[hero.mainClass].growth.dex;
    returnHero.agilityGrowthP = hero.agilityGrowthP - classVars[hero.mainClass].growth.agi;
    returnHero.vitalityGrowthP = hero.vitalityGrowthP - classVars[hero.mainClass].growth.vit;
    returnHero.enduranceGrowthP = hero.enduranceGrowthP - classVars[hero.mainClass].growth.end;
    returnHero.intelligenceGrowthP = hero.intelligenceGrowthP - classVars[hero.mainClass].growth.int;
    returnHero.wisdomGrowthP = hero.wisdomGrowthP - classVars[hero.mainClass].growth.wis;
    returnHero.luckGrowthP = hero.luckGrowthP - classVars[hero.mainClass].growth.lck;
    return returnHero;
}

function AddRarityGrowth(hero) {
    let returnHero = Object.assign({}, hero);
    let bonus = rarityBonus[hero.rarity];
    let statBonus = bonus / 40;
    returnHero.strengthGrowthP = hero.strengthGrowthP + statBonus;
    returnHero.dexterityGrowthP = hero.dexterityGrowthP + statBonus;
    returnHero.agilityGrowthP = hero.agilityGrowthP + statBonus;
    returnHero.vitalityGrowthP = hero.vitalityGrowthP + statBonus;
    returnHero.enduranceGrowthP = hero.enduranceGrowthP + statBonus;
    returnHero.intelligenceGrowthP = hero.intelligenceGrowthP + statBonus;
    returnHero.wisdomGrowthP = hero.wisdomGrowthP + statBonus;
    returnHero.luckGrowthP = hero.luckGrowthP + statBonus;
    return returnHero;
}

function SumPandSGrowth(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strengthGrowthP += hero.strengthGrowthS;
    returnHero.dexterityGrowthP += hero.dexterityGrowthS;
    returnHero.agilityGrowthP += hero.agilityGrowthS;
    returnHero.vitalityGrowthP += hero.vitalityGrowthS;
    returnHero.enduranceGrowthP += hero.enduranceGrowthS;
    returnHero.intelligenceGrowthP += hero.intelligenceGrowthS;
    returnHero.wisdomGrowthP += hero.wisdomGrowthS;
    returnHero.luckGrowthP += hero.luckGrowthS;
    return returnHero;
}

function MultiplyGrowthByBaseGrowth(hero) {
    let returnHero = Object.assign({}, hero);
    returnHero.strengthGrowthP = hero.strengthGrowthP * classVars[hero.mainClass].growth.str;
    returnHero.dexterityGrowthP = hero.dexterityGrowthP * classVars[hero.mainClass].growth.dex;
    returnHero.agilityGrowthP = hero.agilityGrowthP * classVars[hero.mainClass].growth.agi;
    returnHero.vitalityGrowthP = hero.vitalityGrowthP * classVars[hero.mainClass].growth.vit;
    returnHero.enduranceGrowthP = hero.enduranceGrowthP * classVars[hero.mainClass].growth.end;
    returnHero.intelligenceGrowthP = hero.intelligenceGrowthP * classVars[hero.mainClass].growth.int;
    returnHero.wisdomGrowthP = hero.wisdomGrowthP * classVars[hero.mainClass].growth.wis;
    returnHero.luckGrowthP = hero.luckGrowthP * classVars[hero.mainClass].growth.lck;
    return returnHero;
}

function SumGrowth(hero) {
    let sum = 0;
    sum += hero.strengthGrowthP     ;
    sum += hero.dexterityGrowthP    ;
    sum += hero.agilityGrowthP      ;
    sum += hero.vitalityGrowthP     ;
    sum += hero.enduranceGrowthP    ;
    sum += hero.intelligenceGrowthP ;
    sum += hero.wisdomGrowthP       ;
    sum += hero.luckGrowthP;
    
    switch (hero.mainClass) {
        case 'DarkKnight':
        case 'Ninja':
        case 'Paladin':
        case 'Summoner': sum = sum * 1.14285;
            break;
        case 'Dragoon':
        case 'Sage': sum = sum * 1.33334;
            break
        case 'DreadKnight': sum = sum * 1.6;
            break;
        default:
            break;
    }
    return sum;
}

Hero Data

var classVars = {
    "Warrior": {
        growth: {
            str: .75,
            dex: .7,
            agi: .5,
            vit: .65,
            end: .65,
            int: .2,
            wis: .2,
            lck: .2
        },
        base: {
            str: 11,
            dex: 8,
            agi: 7,
            vit: 9,
            end: 8,
            int: 5,
            wis: 5,
            lck: 7
        }
    },
    "Knight": {
        growth: {
            str: .7,
            dex: .55,
            agi: .45,
            vit: .75,
            end: .75,
            int: .2,
            wis: .25,
            lck: .35
        },
        base: {
            str: 10,
            dex: 6,
            agi: 6,
            vit: 10,
            end: 10,
            int: 5,
            wis: 6,
            lck: 7
        }
    },
    "Thief": {
        growth: {
            str: .55,
            dex: .55,
            agi: .7,
            vit: .5,
            end: .45,
            int: .25,
            wis: .35,
            lck: .65
        },
        base: {
            str: 7,
            dex: 8,
            agi: 10,
            vit: 6,
            end: 6,
            int: 6,
            wis: 7,
            lck: 10
        }
    },
    "Archer": {
        growth: {
            str: .55,
            dex: .8,
            agi: .5,
            vit: .5,
            end: .6,
            int: .4,
            wis: .25,
            lck: .4
        },
        base: {
            str: 7,
            dex: 12,
            agi: 7,
            vit: 6,
            end: 7,
            int: 7,
            wis: 6,
            lck: 8
        }
    },
    "Priest": {
        growth: {
            str: .3,
            dex: .3,
            agi: .4,
            vit: .5,
            end: .6,
            int: .7,
            wis: .8,
            lck: .4
        },
        base: {
            str: 5,
            dex: 6,
            agi: 6,
            vit: 6,
            end: 7,
            int: 10,
            wis: 13,
            lck: 7
        }
    },
    "Wizard": {
        growth: {
            str: .3,
            dex: .3,
            agi: .4,
            vit: .5,
            end: .5,
            int: .8,
            wis: .8,
            lck: .4
        },
        base: {
            str: 5,
            dex: 6,
            agi: 6,
            vit: 6,
            end: 6,
            int: 12,
            wis: 12,
            lck: 7
        }
    },
    "Monk": {
        growth: {
            str: .6,
            dex: .6,
            agi: .6,
            vit: .6,
            end: .55,
            int: .25,
            wis: .5,
            lck: .3
        },
        base: {
            str: 8,
            dex: 8,
            agi: 8,
            vit: 8,
            end: 8,
            int: 6,
            wis: 8,
            lck: 6
        }
    },
    "Pirate": {
        growth: {
            str: .7,
            dex: .7,
            agi: .5,
            vit: .6,
            end: .55,
            int: .2,
            wis: .2,
            lck: .55
        },
        base: {
            str: 9,
            dex: 9,
            agi: 7,
            vit: 8,
            end: 7,
            int: 5,
            wis: 5,
            lck: 10
        }
    },
    "Paladin": {
        growth: {
            str: .8,
            dex: .4,
            agi: .35,
            vit: .8,
            end: .8,
            int: .3,
            wis: .65,
            lck: .4
        },
        base: {
            str: 10,
            dex: 6,
            agi: 6,
            vit: 10,
            end: 10,
            int: 6,
            wis: 10,
            lck: 7
        }
    },
    "DarkKnight": {
        growth: {
            str: .85,
            dex: .55,
            agi: .35,
            vit: .75,
            end: .6,
            int: .7,
            wis: .35,
            lck: .35
        },
        base: {
            str: 14,
            dex: 7,
            agi: 6,
            vit: 11,
            end: 7,
            int: 8,
            wis: 6,
            lck: 6
        }
    },
    "Summoner": {
        growth: {
            str: .45,
            dex: .45,
            agi: .5,
            vit: .5,
            end: .5,
            int: .85,
            wis: .85,
            lck: .4
        },
        base: {
            str: 6,
            dex: 7,
            agi: 7,
            vit: 6,
            end: 6,
            int: 14,
            wis: 12,
            lck: 7
        }
    },
    "Ninja": {
        growth: {
            str: .5,
            dex: .75,
            agi: .85,
            vit: .5,
            end: .4,
            int: .5,
            wis: .4,
            lck: .6
        },
        base: {
            str: 7,
            dex: 10,
            agi: 12,
            vit: 7,
            end: 6,
            int: 7,
            wis: 6,
            lck: 10
        }
    },
    "Dragoon": {
        growth: {
            str: .8,
            dex: .65,
            agi: .65,
            vit: .6,
            end: .7,
            int: .5,
            wis: .6,
            lck: .5
        },
        base: {
            str: 11,
            dex: 9,
            agi: 8,
            vit: 8,
            end: 10,
            int: 7,
            wis: 9,
            lck: 8
        }
    },
    "Sage": {
        growth: {
            str: .4,
            dex: .4,
            agi: .75,
            vit: .6,
            end: .5,
            int: .9,
            wis: .9,
            lck: .55
        },
        base: {
            str: 6,
            dex: 6,
            agi: 8,
            vit: 7,
            end: 6,
            int: 15,
            wis: 15,
            lck: 7
        }
    },
    "DreadKnight": {
        growth: {
            str: .85,
            dex: .75,
            agi: .6,
            vit: .65,
            end: .75,
            int: .65,
            wis: .65,
            lck: .6
        },
        base: {
            str: 15,
            dex: 8,
            agi: 8,
            vit: 10,
            end: 11,
            int: 8,
            wis: 8,
            lck: 7
        }
    }
}