summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle/struct/btl_attack.erl')
-rw-r--r-- | src/battle/struct/btl_attack.erl | 101 |
1 files changed, 48 insertions, 53 deletions
diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl index 04302b3..2411529 100644 --- a/src/battle/struct/btl_attack.erl +++ b/src/battle/struct/btl_attack.erl @@ -30,7 +30,7 @@ ( [ get_sequence/3, - get_description_of/5, + get_description_of/3, apply_to_healths/3 ] ). @@ -71,34 +71,15 @@ roll_parry (DefenderStatistics) -> DefenderParryChance = shr_statistics:get_parries(DefenderStatistics), (shr_roll:percentage() =< DefenderParryChance). --spec effect_of_attack +-spec get_damage ( - order(), - shr_statistics:type(), + precision(), + boolean(), shr_omnimods:type(), - shr_statistics:type(), - shr_omnimods:type(), - boolean() + shr_omnimods:type() ) - -> type(). -effect_of_attack (Order, AtkStats, AtkOmni, DefStats, DefOmni, CanParry) -> - ParryIsSuccessful = (CanParry and roll_parry(DefStats)), - - {ActualAtkStats, ActualDefStats} = - case ParryIsSuccessful of - true -> {DefStats, AtkStats}; - false -> {AtkStats, DefStats} - end, - - {ActualAtkOmni, ActualDefOmni} = - case ParryIsSuccessful of - true -> {DefOmni, AtkOmni}; - false -> {AtkOmni, DefOmni} - end, - - Precision = roll_precision(ActualAtkStats, ActualDefStats), - IsCritical = roll_critical_hit(ActualAtkStats), - + -> non_neg_integer(). +get_damage (Precision, IsCritical, ActualAtkOmni, ActualDefOmni) -> S0DamageMultiplier = case Precision of misses -> 0; @@ -109,7 +90,7 @@ effect_of_attack (Order, AtkStats, AtkOmni, DefStats, DefOmni, CanParry) -> S1DamageMultiplier = case IsCritical of true -> (S0DamageMultiplier * 2); - false -> S0DamageMultiplier + _ -> S0DamageMultiplier end, ActualDamage = @@ -120,13 +101,43 @@ effect_of_attack (Order, AtkStats, AtkOmni, DefStats, DefOmni, CanParry) -> ActualDefOmni ), + ActualDamage. + +-spec effect_of_attack + ( + order(), + btl_character_current_data:type(), + btl_character_current_data:type(), + boolean() + ) + -> type(). +effect_of_attack (Order, AtkCurrData, DefCurrData, CanParry) -> + DefStats = btl_character_current_data:get_statistics(DefCurrData), + + ParryIsSuccessful = (CanParry and roll_parry(DefStats)), + + {ActualAtkData, ActualDefData} = + case ParryIsSuccessful of + true -> {DefCurrData, AtkCurrData}; + false -> {AtkCurrData, DefCurrData} + end, + + ActualAtkStats = btl_character_current_data:get_statistics(ActualAtkData), + ActualAtkOmni = btl_character_current_data:get_omnimods(ActualAtkData), + ActualDefStats = btl_character_current_data:get_statistics(ActualDefData), + ActualDefOmni = btl_character_current_data:get_omnimods(ActualDefData), + + Precision = roll_precision(ActualAtkStats, ActualDefStats), + IsCritical = roll_critical_hit(ActualAtkStats), + Damage = get_damage(Precision, IsCritical, ActualAtkOmni, ActualDefOmni), + #attack { order = Order, precision = Precision, is_critical = IsCritical, is_parry = ParryIsSuccessful, - damage = ActualDamage + damage = Damage }. -spec encode_order (order()) -> binary(). @@ -146,42 +157,26 @@ encode_precision (misses) -> <<"m">>. -spec get_description_of ( step(), - shr_statistics:type(), - shr_omnimods:type(), - shr_statistics:type(), - shr_omnimods:type() + btl_character_current_data:type(), + btl_character_current_data:type() ) -> maybe_type(). -get_description_of ({first, CanParry}, AtkStats, AtkOmni, DefStats, DefOmni) -> - effect_of_attack(first, AtkStats, AtkOmni, DefStats, DefOmni, CanParry); -get_description_of ({second, CanParry}, AtkStats, AtkOmni, DefStats, DefOmni) -> +get_description_of ({first, CanParry}, AtkCurrData, DefCurrData) -> + effect_of_attack(first, AtkCurrData, DefCurrData, CanParry); +get_description_of ({second, CanParry}, AtkCurrData, DefCurrData) -> + AtkStats = btl_character_current_data:get_statistics(AtkCurrData), AttackerDoubleAttackChange = shr_statistics:get_double_hits(AtkStats), case shr_roll:percentage() of X when (X =< AttackerDoubleAttackChange) -> - effect_of_attack - ( - second, - AtkStats, - AtkOmni, - DefStats, - DefOmni, - CanParry - ); + effect_of_attack(second, AtkCurrData, DefCurrData, CanParry); _ -> nothing end; -get_description_of -( - {counter, CanParry}, - AtkStats, - AtkOmni, - DefStats, - DefOmni -) -> - effect_of_attack(counter, DefStats, DefOmni, AtkStats, AtkOmni, CanParry). +get_description_of ({counter, CanParry}, AtkCurrData, DefCurrData) -> + effect_of_attack(counter, DefCurrData, AtkCurrData, CanParry). -spec apply_to_healths ( |