Odin Damage Calculation

Results 1 to 2 of 2
  1. #1
    Member Baker is offline
    MemberRank
    Sep 2014 Join Date
    89Posts

    Odin Damage Calculation

    Hey all.

    I'm releasing this because after finding it in the decompiled Odin zone, I incorporated it into my emulator. I figured it would be helpful for fellow emulator developers and even those just working on the server files who want to get a better understanding of how the calculations work.

    Anyway, here they are:

    Bashing (Auto-Attack):

    Spoiler:
    Code:
            internal static int CalculateBashDamage(GameObject attacker, GameObject target, bool isCrit = false)
            {
                var damage = 0.0D;
    
                var minWC = (double) attacker.Stats.CurrentMinDmg + (isCrit ? attacker.Stats.CriticalMinDmg : 0);
                var maxWC = (double) attacker.Stats.CurrentMaxDmg + (isCrit ? attacker.Stats.CriticalMaxDmg : 0);
    
                var minAtkPower = minWC;
                var maxAtkPower = maxWC;
    
                var attackPower = Mathd.Rnd.Next((int) (maxAtkPower - minAtkPower)) + minAtkPower;
                var defensePower = target.Stats.CurrentDef + (double) target.Stats.CurrentEND;
    
                if (defensePower < 1.0D)
                    defensePower = 1.0D;
    
                damage = (attacker.Level + 1) / defensePower * attackPower;
                return (int) damage;
            }


    Skills:
    Spoiler:
    Code:
            internal static int CalculateSkillDamage(GameObject caster, GameObject target, ActiveSkillInstance skill, HitType hitType, bool isCrit = false)
            {
                var damage = 0.0D;
    
                if (hitType == HitType.HT_PY)
                {
                    var minWC = caster.Stats.CurrentMinDmg + (double) skill.Stats.CurrentMinDmg + (isCrit ? caster.Stats.CriticalMinDmg : 0);
                    var maxWC = caster.Stats.CurrentMaxDmg + (double) skill.Stats.CurrentMaxDmg + (isCrit ? caster.Stats.CriticalMaxDmg : 0);
                    var minEmpBonus = 0.0D;
                    var maxEmpBonus = 0.0D;
    
                    var minAtkPower = minWC + minEmpBonus;
                    var maxAtkPower = maxWC + maxEmpBonus;
    
                    var attackPower = Mathd.Rnd.Next((int) (maxAtkPower - minAtkPower)) + minAtkPower;
                    var defensePower = target.Stats.CurrentDef + (double) target.Stats.CurrentEND;
    
                    if (defensePower < 1.0D)
                        defensePower = 1.0D;
    
                    damage = (caster.Level + 1) / defensePower * attackPower;
                    return (int) damage;
                }
    
                if (hitType == HitType.HT_MA)
                {
                    var minMA = caster.Stats.CurrentMinMDmg + (double) skill.Stats.CurrentMinMDmg + (isCrit ? caster.Stats.CriticalMinMDmg : 0);
                    var maxMA = caster.Stats.CurrentMaxMDmg + (double) skill.Stats.CurrentMaxMDmg + (isCrit ? caster.Stats.CriticalMaxMDmg : 0);
                    var minEmpBonus = 0.0D;
                    var maxEmpBonus = 0.0D;
    
                    var minAtkPower = minMA + minEmpBonus;
                    var maxAtkPower = maxMA + maxEmpBonus;
    
                    var attackPower = Mathd.Rnd.Next((int) (maxAtkPower - minAtkPower)) + minAtkPower;
                    var defensePower = target.Stats.CurrentMDef + (double) target.Stats.CurrentSPR;
    
                    if (defensePower < 1.0D)
                        defensePower = 1.0D;
    
                    damage = (caster.Level + 1) / defensePower * attackPower;
                    return (int) damage;
                }
    
                return (int) damage;
            }


    Please note: These snippets are directly from my emulator so they aren't exactly what the zone contains (zone does a lot of separate calculations to obtain values like minDMG, attackPower, etc.)

    Hope this is helpful.

    Best,
    Baker


  2. #2
    Valued Member Black12 is offline
    MemberRank
    Feb 2012 Join Date
    JapanLocation
    119Posts

    Re: Odin Damage Calculation

    For someone.. Odin Zone - > olldby -> 004C271C



Advertisement