summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/struct/btl_attack.erl')
-rw-r--r--src/battle/struct/btl_attack.erl101
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
(