| 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     ( | 


