| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-28 23:31:29 +0100 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-01-28 23:31:29 +0100 | 
| commit | c116cb57903333bec870d50df180fbcb624f21ff (patch) | |
| tree | 5153b61f3ce12ec15cf3656c95520d5523f5323d /src/battle | |
| parent | dc988b5aa72204954b2034615d644c703b35d294 (diff) | |
...
Diffstat (limited to 'src/battle')
| -rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_attack.erl | 200 | ||||
| -rw-r--r-- | src/battle/struct/btl_attack.erl | 12 | 
2 files changed, 127 insertions, 85 deletions
| diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl index a414588..150d7b5 100644 --- a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl @@ -16,15 +16,17 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +  -spec handle_attack_sequence     (        btl_character_current_data:type(),        non_neg_integer(),        btl_character_current_data:type(),        non_neg_integer(), -      list(btl_attack:step()),        integer(), -      integer() +      integer(), +      list(btl_attack:step()), +      list(btl_attack:type())     )     ->     { @@ -36,61 +38,73 @@     }.  handle_attack_sequence  ( -   CharacterCurrentData, +   _CharacterCurrentData,     CharacterCurrentHealth, -   TargetCurrentData, +   _TargetCurrentData,     TargetCurrentHealth, +   AttackerLuck, +   DefenderLuck,     AttackSequence, +   Result +) +when +( +   (CharacterCurrentHealth == 0) +   or (TargetCurrentHealth == 0) +   or (AttackSequence == []) +) -> +   { +      lists:reverse(Result), +      CharacterCurrentHealth, +      TargetCurrentHealth, +      AttackerLuck, +      DefenderLuck +   }; +handle_attack_sequence +( +   CharacterCurrentData, +   AttackerHealth, +   TargetCurrentData, +   DefenderHealth,     AttackerLuck, -   DefenderLuck +   DefenderLuck, +   [NextAttack | AttackSequence], +   Result  ) -> -   % TODO lists:foldl over AttackSequence to take luck into account. -   AttackPlannedEffects = -      lists:map +   {AttackEffect, NewAttackerLuck, NewDefenderLuck} = +      btl_attack:get_description_of        ( -         fun (AttackStep) -> -            btl_attack:get_description_of -            ( -               AttackStep, -               CharacterCurrentData, -               TargetCurrentData, -               AttackerLuck, -               DefenderLuck -            ) -         end, -         AttackSequence +         NextAttack, +         CharacterCurrentData, +         TargetCurrentData, +         AttackerLuck, +         DefenderLuck        ), -   lists:foldl -   ( -      fun +   {AttackResult, NewAttackerHealth, NewDefenderHealth} = +      btl_attack:apply_to_healths        ( -         AttackEffectCandidate, -         {AttackValidEffects, AttackerHealth, DefenderHealth} -      ) -> -         {AttackResult, NewAttackerHealth, NewDefenderHealth} = -            btl_attack:apply_to_healths -            ( -               AttackEffectCandidate, -               AttackerHealth, -               DefenderHealth -            ), -         case AttackResult of -            nothing -> {AttackValidEffects, AttackerHealth, DefenderHealth}; -            _ -> -               { -                  (AttackValidEffects ++ [AttackResult]), -                  NewAttackerHealth, -                  NewDefenderHealth -               } -         end +         AttackEffect, +         AttackerHealth, +         DefenderHealth +      ), + +   NextResult = +      case AttackResult of +         nothing -> Result; +         _ -> [AttackResult|Result]        end, -      { -         [], -         CharacterCurrentHealth, -         TargetCurrentHealth -      }, -      AttackPlannedEffects + +   handle_attack_sequence +   ( +      CharacterCurrentData, +      NewAttackerHealth, +      TargetCurrentData, +      NewDefenderHealth, +      NewAttackerLuck, +      NewDefenderLuck, +      AttackSequence, +      NextResult     ).  -spec get_attack_sequence @@ -115,8 +129,6 @@ get_attack_sequence (Character, TargetCharacter) ->     btl_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon). - -  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -133,21 +145,16 @@ handle (BattleAction, Update) ->     CharacterIX = btl_character_turn_data:get_character_ix(Data),     CharacterCurrentData =        btl_character_turn_data:get_character_current_data(Data), -   AttackingPlayer = -      btl_battle:get_player(btl_character:get_player_ix(Character), Battle), +   AttackingPlayerIX = btl_character:get_player_index(Character), +   AttackingPlayer = btl_battle:get_player(AttackingPlayerIX, Battle),     AttackingPlayerLuck = btl_player:get_luck(AttackingPlayer), -     Map = btl_battle:get_map(Battle),     TargetIX = btl_battle_action:get_target_ix(BattleAction),     TargetCharacter = btl_battle:get_character(TargetIX, Battle),     TargetCurrentData = btl_character_current_data:new(TargetCharacter, Map), -   DefendingPlayer = -      btl_battle:get_player -      ( -         btl_character:get_player_ix(TargetCharacter), -         Battle -      ), +   DefendingPlayerIX = btl_character:get_player_index(TargetCharacter), +   DefendingPlayer = btl_battle:get_player(DefendingPlayerIX, Battle),     DefendingPlayerLuck = btl_player:get_luck(DefendingPlayer),     true = btl_character:get_is_alive(TargetCharacter), @@ -158,8 +165,8 @@ handle (BattleAction, Update) ->        AttackEffects,        RemainingAttackerHealth,        RemainingDefenderHealth, -      _NewAttackerLuck, -      _NewDefenderLuck +      NewAttackerLuck, +      NewDefenderLuck     } =        handle_attack_sequence        ( @@ -167,26 +174,39 @@ handle (BattleAction, Update) ->           btl_character:get_current_health(Character),           TargetCurrentData,           btl_character:get_current_health(TargetCharacter), -         AttackSequence,           AttackingPlayerLuck, -         DefendingPlayerLuck +         DefendingPlayerLuck, +         AttackSequence, +         []        ),     % TODO: update lucks... +   NextAttackingPlayer = btl_player:set_luck(NewAttackerLuck, AttackingPlayer), +   NextDefendingPlayer = btl_player:set_luck(NewDefenderLuck, DefendingPlayer),     UpdatedCharacter =        btl_character:set_current_health(RemainingAttackerHealth, Character),     UpdatedBattle = -      btl_battle:set_character +      btl_battle:set_player        ( -         TargetIX, -         btl_character:set_current_health +         DefendingPlayerIX, +         NextDefendingPlayer, +         btl_battle:set_player           ( -            RemainingDefenderHealth, -            TargetCharacter -         ), -         Battle +            AttackingPlayerIX, +            NextAttackingPlayer, +            btl_battle:set_character +            ( +               TargetIX, +               btl_character:set_current_health +               ( +                  RemainingDefenderHealth, +                  TargetCharacter +               ), +               Battle +            ) +         )        ),     S0Data = btl_character_turn_data:set_battle(UpdatedBattle, Data), @@ -230,6 +250,35 @@ handle (BattleAction, Update) ->           )        ), +   DBQuery2 = +      ataxic:update_field +      ( +         btl_battle:get_players_field(), +         ataxic:sequence +         ( +            [ +               ataxic_sugar:update_orddict_element +               ( +                  DefendingPlayerIX, +                  ataxic:update_field +                  ( +                     btl_player:get_luck_field(), +                     ataxic:constant(NewDefenderLuck) +                  ) +               ), +               ataxic_sugar:update_orddict_element +               ( +                  AttackingPlayerIX, +                  ataxic:update_field +                  ( +                     btl_player:get_luck_field(), +                     ataxic:constant(NewAttackerLuck) +                  ) +               ) +            ] +         ) +      ), +     S0Update =        btl_character_turn_update:add_to_timeline        ( @@ -239,22 +288,23 @@ handle (BattleAction, Update) ->        ),     S1Update = btl_character_turn_update:add_to_db(DBQuery1, S0Update), -   S2Update = btl_character_turn_update:set_data(S1Data, S1Update), +   S2Update = btl_character_turn_update:add_to_db(DBQuery2, S1Update), +   S3Update = btl_character_turn_update:set_data(S1Data, S2Update), -   S3Update = +   S4Update =        btl_victory:handle_character_lost_health        (           CharacterIX,           RemainingAttackerHealth, -         S2Update +         S3Update        ), -   S4Update = +   S5Update =        btl_victory:handle_character_lost_health        (           TargetIX,           RemainingDefenderHealth, -         S3Update +         S4Update        ), -   S4Update. +   S5Update. diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl index 6286e41..769f3e3 100644 --- a/src/battle/struct/btl_attack.erl +++ b/src/battle/struct/btl_attack.erl @@ -91,11 +91,7 @@ roll_precision  roll_critical_hit (AttackerStatistics, AttackerLuck) ->     CriticalHitChance = shr_statistics:get_critical_hits(AttackerStatistics),     {_Roll, IsSuccess, NewLuck} = -      shr_roll:percentage_with_luck -      ( -         CriticalHitChance, -         AttackerLuck -      ), +      shr_roll:percentage_with_luck(CriticalHitChance, AttackerLuck),     {IsSuccess, NewLuck}. @@ -108,11 +104,7 @@ roll_critical_hit (AttackerStatistics, AttackerLuck) ->  roll_parry (DefenderStatistics, DefenderLuck) ->     DefenderParryChance = shr_statistics:get_parries(DefenderStatistics),     {_Roll, IsSuccess, NewLuck} = -      shr_roll:percentage_with_luck -      ( -         DefenderParryChance, -         DefenderLuck -      ), +      shr_roll:percentage_with_luck(DefenderParryChance, DefenderLuck),     {IsSuccess, NewLuck}. | 


