| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-08 16:18:40 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-08 16:18:40 +0200 | 
| commit | e10b050d9224f52031e3a24521f2c63c33d3b2de (patch) | |
| tree | ba4466b8082cc3a1576afe10561e33c859666bdc /src/battlemap | |
| parent | 0416d506aa9d20f2b65ce0123e9c54798a00411e (diff) | |
Takes armor benefits into account.
Diffstat (limited to 'src/battlemap')
| -rw-r--r-- | src/battlemap/bm_shim.erl | 4 | ||||
| -rw-r--r-- | src/battlemap/game-logic/bm_turn_actions.erl | 7 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_attack.erl | 63 | 
3 files changed, 34 insertions, 40 deletions
| diff --git a/src/battlemap/bm_shim.erl b/src/battlemap/bm_shim.erl index fb5146b..ee11290 100644 --- a/src/battlemap/bm_shim.erl +++ b/src/battlemap/bm_shim.erl @@ -96,8 +96,8 @@ generate_random_characters  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec generate_random_battle () -> bm_battle:type().  generate_random_battle () -> -   BattlemapWidth = sh_roll:between(16, 64), -   BattlemapHeight = sh_roll:between(16, 64), +   BattlemapWidth = sh_roll:between(16, 32), +   BattlemapHeight = sh_roll:between(16, 32),     Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight),     Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []),     PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)], diff --git a/src/battlemap/game-logic/bm_turn_actions.erl b/src/battlemap/game-logic/bm_turn_actions.erl index 0c16bbd..7808d1f 100644 --- a/src/battlemap/game-logic/bm_turn_actions.erl +++ b/src/battlemap/game-logic/bm_turn_actions.erl @@ -195,9 +195,6 @@ handle_attack_sequence     TargetCharacter,     AttackSequence  ) -> -   CharacterStatistics = bm_character:get_statistics(Character), -   TargetCharacterStatistics = bm_character:get_statistics(TargetCharacter), -     AttackPlannedEffects =        lists:map        ( @@ -205,8 +202,8 @@ handle_attack_sequence              bm_attack:get_description_of              (                 AttackStep, -               CharacterStatistics, -               TargetCharacterStatistics +               Character, +               TargetCharacter              )           end,           AttackSequence 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     ( | 


