summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2019-04-24 19:11:58 +0200 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2019-04-24 19:11:58 +0200 |
commit | e68004ee70c9102d00df2925c05d1354a6315bc0 (patch) | |
tree | 45d208c7b21144f7ae6a5b97288b147e8456f29f /src/battle/struct/btl_attack.erl | |
parent | e39c44eabaea7bafa58aa85593b80a6c55f907a3 (diff) |
...
Diffstat (limited to 'src/battle/struct/btl_attack.erl')
-rw-r--r-- | src/battle/struct/btl_attack.erl | 166 |
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 |