string ResolveDamage(EntityBehaviour sender, EntityBehaviour reciever, EffectType type, int valueMin, int valueMax, Characteristic charac = Characteristic.CurrentHP) { int baseDamage = GameManager.instance.randomSeed.Next(valueMin, valueMax + 1); float rangeDamage = 1f; float rangeResistance = 1f; float typeDamage = 1f; float typeResistance = 1f; float orientation = 1f; if (charac == Characteristic.CurrentHP) { if (Mathf.Abs(sender.x - reciever.x) + Mathf.Abs(sender.y - reciever.y) <= 1) { rangeDamage = sender.character.stats[Characteristic.ContactDamage]; rangeResistance = reciever.character.stats[Characteristic.ContactResistance]; } else { rangeDamage = sender.character.stats[Characteristic.DistantDamage]; rangeResistance = reciever.character.stats[Characteristic.DistantResistance]; } if (type == EffectType.Magic) { typeDamage = sender.character.stats[Characteristic.MagicDamage]; typeResistance = reciever.character.stats[Characteristic.MagicResistance]; } else { typeDamage = sender.character.stats[Characteristic.PhysicalDamage]; typeResistance = reciever.character.stats[Characteristic.PhysicalResistance]; } } if (sender.orientation == reciever.orientation) { orientation = 1.5f; } else if (sender.orientation == (reciever.orientation + 180) % 360) { orientation = 1.0f; } else { orientation = 1.25f; } int damage = -Mathf.RoundToInt( (baseDamage + (baseDamage * (rangeDamage / rangeResistance - 1)) + (baseDamage * (typeDamage / typeResistance - 1))) * orientation ); if (reciever.character.stats[Characteristic.CurrentHP] <= -damage) { damage = (int)reciever.character.stats[Characteristic.CurrentHP]; reciever.character.stats[Characteristic.CurrentHP] = 0f; reciever.Die(); return(-damage + " (die)"); } reciever.character.stats[Characteristic.CurrentHP] += damage; return(damage.ToString()); }