summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-04-24 19:11:58 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-04-24 19:11:58 +0200
commite68004ee70c9102d00df2925c05d1354a6315bc0 (patch)
tree45d208c7b21144f7ae6a5b97288b147e8456f29f /src/battle/struct/btl_attack.erl
parente39c44eabaea7bafa58aa85593b80a6c55f907a3 (diff)
...
Diffstat (limited to 'src/battle/struct/btl_attack.erl')
-rw-r--r--src/battle/struct/btl_attack.erl166
1 files changed, 93 insertions, 73 deletions
diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl
index f0778f5..481e07f 100644
--- a/src/battle/struct/btl_attack.erl
+++ b/src/battle/struct/btl_attack.erl
@@ -1,5 +1,7 @@
-module(btl_attack).
+% FIXME: this module is mostly mechanics, not structure.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -112,28 +114,40 @@ roll_parry (DefenderStatistics, DefenderLuck) ->
shr_omnimods:type()
)
-> non_neg_integer().
-get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
- S0DamageMultiplier =
- case Precision of
- misses -> 0;
- grazes -> 0.5;
- hits -> 1
- end,
-
- S1DamageMultiplier =
- case IsCritical of
- true -> (S0DamageMultiplier * 2);
- _ -> S0DamageMultiplier
- end,
-
- S2DamageMultiplier = (S1DamageMultiplier * AtkModifier),
+get_damage
+(
+ Precision,
+ IsCritical,
+ StartingDamageMultiplier,
+ AttackerOmnimods,
+ DefenderOmnimods
+) ->
+ ActualDamageMultiplier =
+ (
+ StartingDamageMultiplier
+ *
+ (
+ case Precision of
+ misses -> 0;
+ grazes -> 0.5;
+ hits -> 1
+ end
+ )
+ *
+ (
+ case IsCritical of
+ true -> 2;
+ _ -> 1
+ end
+ )
+ ),
ActualDamage =
shr_omnimods:get_attack_damage
(
- S2DamageMultiplier,
- ActualAtkOmni,
- ActualDefOmni
+ ActualDamageMultiplier,
+ AttackerOmnimods,
+ DefenderOmnimods
),
ActualDamage.
@@ -141,8 +155,8 @@ get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
-spec effect_of_attack
(
order(),
- btl_character_current_data:type(),
- btl_character_current_data:type(),
+ shr_character:type(),
+ shr_character:type(),
boolean(),
integer(),
integer()
@@ -151,57 +165,63 @@ get_damage (Precision, IsCritical, AtkModifier, ActualAtkOmni, ActualDefOmni) ->
effect_of_attack
(
Order,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
AttackerLuck,
DefenderLuck
) ->
- DefStats = btl_character_current_data:get_statistics(DefCurrData),
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% Roll parry to see if the roles have to be swapped. %%%%%%%%%%%%%%%%%%%%%
+ DefenderStats = shr_character:get_statistics(Defender),
{ParryIsSuccessful, ParryPositiveLuckMod, ParryNegativeLuckMod} =
case CanParry of
- true -> roll_parry(DefStats, DefenderLuck);
+ true -> roll_parry(DefenderStats, DefenderLuck);
false -> {false, 0, 0}
end,
{
- ActualAtkData,
- ActualDefData,
- ActualAtkLuck,
- ActualDefLuck
+ ActualAttacker,
+ ActualDefender,
+ ActualAttackerLuck,
+ ActualDefenderLuck
} =
case ParryIsSuccessful of
- true -> {DefCurrData, AtkCurrData, DefenderLuck, AttackerLuck};
- false -> {AtkCurrData, DefCurrData, AttackerLuck, DefenderLuck}
+ true -> {Defender, Attacker, DefenderLuck, AttackerLuck};
+ false -> {Attacker, Defender, AttackerLuck, DefenderLuck}
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),
+ ActualAttackerStats = shr_character:get_statistics(ActualAttacker),
+ ActualAttackerOmnimods = shr_character:get_omnimods(ActualAttacker),
+ ActualDefenderStats = shr_character:get_statistics(ActualDefender),
+ ActualDefenderOmnimods = shr_character:get_omnimods(ActualDefender),
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{Precision, PrecisionPositiveLuckMod, PrecisionNegativeLuckMod} =
roll_precision
(
- ActualAtkStats,
- ActualDefStats,
- ActualDefLuck
+ ActualAttackerStats,
+ ActualDefenderStats,
+ ActualDefenderLuck
),
{IsCritical, CriticalPositiveLuckMod, CriticalNegativeLuckMod} =
- roll_critical_hit(ActualAtkStats, ActualAtkLuck),
+ roll_critical_hit(ActualAttackerStats, ActualAttackerLuck),
+
+ ActualAttackerDamageModifier =
+ shr_statistics:get_damage_modifier(ActualAttackerStats),
- AtkDamageModifier = shr_statistics:get_damage_modifier(ActualAtkStats),
Damage =
get_damage
(
Precision,
IsCritical,
- AtkDamageModifier,
- ActualAtkOmni,
- ActualDefOmni
+ ActualAttackerDamageModifier,
+ ActualAttackerOmnimods,
+ ActualDefenderOmnimods
),
{FinalAttackerLuckMod, FinalDefenderLuckMod} =
@@ -311,8 +331,8 @@ encode_precision (misses) -> <<"m">>.
-spec get_description_of
(
step(),
- btl_character_current_data:type(),
- btl_character_current_data:type(),
+ shr_character:type(),
+ shr_character:type(),
integer(),
integer()
)
@@ -320,36 +340,36 @@ encode_precision (misses) -> <<"m">>.
get_description_of
(
{first, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
effect_of_attack
(
first,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
- AtkLuck,
- DefLuck
+ AttackerLuck,
+ DefenderLuck
);
get_description_of
(
{second, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
- AtkStats = btl_character_current_data:get_statistics(AtkCurrData),
+ AttackerStats = shr_character:get_statistics(Attacker),
AttackerDoubleAttackChance =
- shr_statistics:get_double_hits(AtkStats),
+ shr_statistics:get_double_hits(AttackerStats),
{_Roll, IsSuccessful, PositiveModifier, NegativeModifier} =
- shr_roll:percentage_with_luck(AttackerDoubleAttackChance, AtkLuck),
+ shr_roll:percentage_with_luck(AttackerDoubleAttackChance, AttackerLuck),
- NewAtkLuck = (AtkLuck + PositiveModifier),
- NewDefLuck = (DefLuck + NegativeModifier),
+ NewAttackerLuck = (AttackerLuck + PositiveModifier),
+ NewDefenderLuck = (DefenderLuck + NegativeModifier),
case IsSuccessful of
true ->
@@ -357,11 +377,11 @@ get_description_of
effect_of_attack
(
second,
- AtkCurrData,
- DefCurrData,
+ Attacker,
+ Defender,
CanParry,
- NewAtkLuck,
- NewDefLuck
+ NewAttackerLuck,
+ NewDefenderLuck
),
Result#attack
@@ -377,19 +397,19 @@ get_description_of
get_description_of
(
{counter, CanParry},
- AtkCurrData,
- DefCurrData,
- AtkLuck,
- DefLuck
+ Attacker,
+ Defender,
+ AttackerLuck,
+ DefenderLuck
) ->
effect_of_attack
(
counter,
- DefCurrData,
- AtkCurrData,
+ Defender,
+ Attacker,
CanParry,
- DefLuck,
- AtkLuck
+ DefenderLuck,
+ AttackerLuck
).
-spec apply_to_healths_and_lucks