| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battlemap/struct/bm_attack.erl')
| -rw-r--r-- | src/battlemap/struct/bm_attack.erl | 63 | 
1 files changed, 30 insertions, 33 deletions
| diff --git a/src/battlemap/struct/bm_attack.erl b/src/battlemap/struct/bm_attack.erl index c647dae..af55606 100644 --- a/src/battlemap/struct/bm_attack.erl +++ b/src/battlemap/struct/bm_attack.erl @@ -86,27 +86,44 @@ roll_parry (DefenderStatistics) ->  -spec effect_of_attack     (        order(), -      sh_statistics:type(), -      sh_statistics:type(), +      bm_character:type(), +      bm_character:type(),        boolean()     )     -> type(). -effect_of_attack (Order, AttackerStatistics, DefenderStatistics, CanParry) -> +effect_of_attack (Order, Attacker, Defender, CanParry) -> +   AttackerStatistics = bm_character:get_statistics(Attacker), +   DefenderStatistics = bm_character:get_statistics(Defender), +     ParryIsSuccessful = (CanParry and roll_parry(DefenderStatistics)), +     {ActualAtkStatistics, ActualDefStatistics} =        case ParryIsSuccessful of           true -> {DefenderStatistics, AttackerStatistics};           false -> {AttackerStatistics, DefenderStatistics}        end, +   {ActualAttacker, ActualDefender} = +      case ParryIsSuccessful of +         true -> {Defender, Attacker}; +         false -> {Attacker, Defender} +      end, + +   ActualDefArmor = sh_armor:from_id(bm_character:get_armor_id(ActualDefender)), +   {ActualAtkWeaponID, _} = bm_character:get_weapon_ids(ActualAttacker), +   ActualAtkWeaponDmgType = +      sh_weapon:get_damage_type(sh_weapon:from_id(ActualAtkWeaponID)),     Precision = roll_precision(ActualAtkStatistics, ActualDefStatistics),     {Damage, IsCritical} = roll_damage(ActualAtkStatistics, ActualDefStatistics), -   ActualDamage = +   S0Damage =        case Precision of           misses -> 0;           grazes -> trunc(Damage / 2);           hits -> Damage        end, +   ArmorResistance = +      sh_armor:get_resistance_to(ActualAtkWeaponDmgType, ActualDefArmor), +   ActualDamage = max(0, (S0Damage - ArmorResistance)),     #attack     { @@ -134,46 +151,26 @@ encode_precision (misses) -> <<"m">>.  -spec get_description_of     (        step(), -      sh_statistics:type(), -      sh_statistics:type() +      bm_character:type(), +      bm_character:type()     )     -> maybe_type(). -get_description_of -( -   {first, CanParry}, -   AttackerStatistics, -   DefenderStatistics -) -> -   effect_of_attack(first, AttackerStatistics, DefenderStatistics, CanParry); -get_description_of -( -   {second, CanParry}, -   AttackerStatistics, -   DefenderStatistics -) -> +get_description_of ({first, CanParry}, Attacker, Defender) -> +   effect_of_attack(first, Attacker, Defender, CanParry); +get_description_of ({second, CanParry}, Attacker, Defender) -> +   AttackerStatistics = bm_character:get_statistics(Attacker),     AttackerDoubleAttackChange =        sh_statistics:get_double_hits(AttackerStatistics),     case sh_roll:percentage() of        X when (X =< AttackerDoubleAttackChange) -> -         effect_of_attack -         ( -            second, -            AttackerStatistics, -            DefenderStatistics, -            CanParry -         ); +         effect_of_attack (second, Attacker, Defender, CanParry);        _ ->           nothing     end; -get_description_of -( -   {counter, CanParry}, -   AttackerStatistics, -   DefenderStatistics -) -> -   effect_of_attack(counter, DefenderStatistics, AttackerStatistics, CanParry). +get_description_of ({counter, CanParry}, Attacker, Defender) -> +   effect_of_attack(counter, Defender, Attacker, CanParry).  -spec apply_to_healths     ( | 


