| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2019-06-04 15:46:32 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2019-06-04 15:46:32 +0200 | 
| commit | 1aec9784102855c4bf2e5d2ad9a945166aed2051 (patch) | |
| tree | f6849f76d4bd426c2fd94da88b9b668316c53e86 /src | |
| parent | 124cc7160d80bc9fcafd1a1592fa046ef44d6ef7 (diff) | |
...
Diffstat (limited to 'src')
| -rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_attack.erl | 2 | ||||
| -rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_opportunity_attack.erl | 220 | ||||
| -rw-r--r-- | src/battle/struct/btl_attack.erl | 23 | ||||
| -rw-r--r-- | src/battle/struct/btl_battle.erl | 33 | 
4 files changed, 101 insertions, 177 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 af4c53b..2b032a0 100644 --- a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl @@ -326,7 +326,7 @@ handle (BattleAction, Update) ->        end,     S6Update = -      case (RemainingAttackerHealth > 0) of +      case (RemainingDefenderHealth > 0) of           true -> S5Update;           false ->              btl_victory_progression:handle_character_loss diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_opportunity_attack.erl b/src/battle/mechanic/turn_action/btl_turn_actions_opportunity_attack.erl index 7d6a1c5..c1dbbdd 100644 --- a/src/battle/mechanic/turn_action/btl_turn_actions_opportunity_attack.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_opportunity_attack.erl @@ -17,105 +17,6 @@  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle_attack_sequence -   ( -      btl_character:type(), -      non_neg_integer(), -      btl_character:type(), -      non_neg_integer(), -      integer(), -      integer(), -      list(btl_attack:step()), -      list(btl_attack:type()) -   ) -   -> -   { -      list(btl_attack:type()), -      non_neg_integer(), -      non_neg_integer(), -      integer(), -      integer() -   }. -handle_attack_sequence -( -   _Character, -   CharacterCurrentHealth, -   _TargetCharacter, -   TargetCurrentHealth, -   AttackerLuck, -   DefenderLuck, -   AttackSequence, -   Result -) -when -( -   (CharacterCurrentHealth == 0) -   or (TargetCurrentHealth == 0) -   or (AttackSequence == []) -) -> -   { -      lists:reverse(Result), -      CharacterCurrentHealth, -      TargetCurrentHealth, -      AttackerLuck, -      DefenderLuck -   }; -handle_attack_sequence -( -   Character, -   AttackerHealth, -   TargetCharacter, -   DefenderHealth, -   AttackerLuck, -   DefenderLuck, -   [NextAttack | AttackSequence], -   Result -) -> -   AttackEffect = -      btl_attack:get_description_of -      ( -         NextAttack, -         btl_character:get_base_character(Character), -         btl_character:get_base_character(TargetCharacter), -         AttackerLuck, -         DefenderLuck -      ), - -   { -      AttackResult, -      NewAttackerHealth, -      NewAttackerLuck, -      NewDefenderHealth, -      NewDefenderLuck -   } = -      btl_attack:apply_to_healths_and_lucks -      ( -         AttackEffect, -         AttackerHealth, -         AttackerLuck, -         DefenderHealth, -         DefenderLuck -      ), - -   NextResult = -      case AttackResult of -         {nothing, _, _} -> Result; -         _ -> [AttackResult|Result] -      end, - -   handle_attack_sequence -   ( -      Character, -      NewAttackerHealth, -      TargetCharacter, -      NewDefenderHealth, -      NewAttackerLuck, -      NewDefenderLuck, -      AttackSequence, -      NextResult -   ). - -  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -133,87 +34,67 @@ handle (BattleAction, Update) ->     DefendingPlayer = btl_battle:get_player(DefendingPlayerIX, Battle),     DefendingPlayerLuck = btl_player:get_luck(DefendingPlayer), -   ActorIX = btl_action:get_target_ix(BattleAction), -   Map = btl_battle:get_map(Battle), -   ActorCharacterRef = btl_battle:get_character(ActorIX, Battle), -   ActorCharacter = -      btl_character:resolve -      ( -         shr_tile:get_omnimods -         ( -            shr_tile:from_id -            ( -               shr_tile_instance:get_tile_id -               ( -                  shr_map:get_tile_instance -                  ( -                     btl_character:get_location(ActorCharacterRef), -                     Map -                  ) -               ) -            ) -         ), -         ActorCharacterRef -      ), +   AttackerIX = btl_action:get_target_ix(BattleAction), +   AttackerRef = btl_battle:get_character(AttackerIX, Battle), +   Attacker = btl_battle:resolve_character(AttackerRef, Battle), -   AttackingPlayerIX = btl_character:get_player_index(ActorCharacter), +   AttackingPlayerIX = btl_character:get_player_index(Attacker),     AttackingPlayer = btl_battle:get_player(AttackingPlayerIX, Battle),     AttackingPlayerLuck = btl_player:get_luck(AttackingPlayer), -   AttackSequence = btl_attack:attack_of_opportunity(), +   Attack = btl_attack:attack_of_opportunity(), + +   AttackEffect = +      btl_attack:get_description_of +      ( +         Attack, +         btl_character:get_base_character(Character), +         btl_character:get_base_character(Attacker), +         AttackingPlayerLuck, +         DefendingPlayerLuck +      ),     { -      AttackEffects, -      RemainingAttackerHealth, -      RemainingDefenderHealth, -      NewAttackerLuck, -      NewDefenderLuck +      AttackResult, +      NewAttackerHealth, +      S0NewAttackerLuck, +      NewDefenderHealth, +      S0NewDefenderLuck     } = -      handle_attack_sequence +      btl_attack:apply_to_healths_and_lucks        ( -         Character, -         btl_character:get_current_health(Character), -         ActorCharacter, -         btl_character:get_current_health(ActorCharacter), +         AttackEffect, +         btl_character:get_current_health(Attacker),           AttackingPlayerLuck, -         DefendingPlayerLuck, -         AttackSequence, -         [] +         btl_character:get_current_health(Character), +         DefendingPlayerLuck        ), -   S0NewAttackerLuck = -      case {(NewAttackerLuck =< -2), (NewAttackerLuck >= 2)}  of -         {true, _} -> (NewAttackerLuck + 2); -         {_, true} -> (NewAttackerLuck - 2); +   S1NewAttackerLuck = +      case {(S0NewAttackerLuck =< -2), (S0NewAttackerLuck >= 2)}  of +         {true, _} -> (S0NewAttackerLuck + 2); +         {_, true} -> (S0NewAttackerLuck - 2);           _ -> 0        end, -   S0NewDefenderLuck = -      case {(NewDefenderLuck =< -2), (NewDefenderLuck >= 2)}  of -         {true, _} -> (NewDefenderLuck + 2); -         {_, true} -> (NewDefenderLuck - 2); +   S1NewDefenderLuck = +      case {(S0NewDefenderLuck =< -2), (S0NewDefenderLuck >= 2)}  of +         {true, _} -> (S0NewDefenderLuck + 2); +         {_, true} -> (S0NewDefenderLuck - 2);           _ -> 0        end,     {UpdatedAttackingPlayer, AttackingPlayerAtaxiaUpdate} = -      btl_player:ataxia_set_luck(S0NewAttackerLuck, AttackingPlayer), +      btl_player:ataxia_set_luck(S1NewAttackerLuck, AttackingPlayer),     {UpdatedDefendingPlayer, DefendingPlayerAtaxiaUpdate} = -      btl_player:ataxia_set_luck(S0NewDefenderLuck, DefendingPlayer), +      btl_player:ataxia_set_luck(S1NewDefenderLuck, DefendingPlayer),     {UpdatedCharacter, CharacterAtaxiaUpdate} = -      btl_character:ataxia_set_current_health -      ( -         RemainingAttackerHealth, -         Character -      ), +      btl_character:ataxia_set_current_health(NewDefenderHealth, Character), -   {UpdatedTargetCharacterRef, TargetCharacterRefAtaxiaUpdate} = -      btl_character:ataxia_set_current_health -      ( -         RemainingDefenderHealth, -         TargetCharacterRef -      ), +   {UpdatedAttackerRef, AttackerRefAtaxiaUpdate} = +      btl_character:ataxia_set_current_health(NewAttackerHealth, AttackerRef),     {S0Battle, BattleAtaxiaUpdate0} =        btl_battle:ataxia_set_player @@ -236,9 +117,9 @@ handle (BattleAction, Update) ->     {S2Battle, BattleAtaxiaUpdate2} =        btl_battle:ataxia_set_character        ( -         TargetIX, -         UpdatedTargetCharacterRef, -         TargetCharacterRefAtaxiaUpdate, +         AttackerIX, +         UpdatedAttackerRef, +         AttackerRefAtaxiaUpdate,           S1Battle        ), @@ -278,9 +159,9 @@ handle (BattleAction, Update) ->     TimelineItem =        btl_turn_result:new_character_attacked        ( +         AttackerIX,           btl_character_turn_update:get_character_ix(S3Update), -         TargetIX, -         AttackEffects, +         AttackResult,           S0NewAttackerLuck,           S0NewDefenderLuck        ), @@ -288,21 +169,10 @@ handle (BattleAction, Update) ->     S4Update = btl_character_turn_update:add_to_timeline(TimelineItem, S3Update),     S5Update = -      case (RemainingAttackerHealth > 0) of +      case (NewDefenderHealth > 0) of           true -> S4Update;           false ->              btl_victory_progression:handle_character_loss(Character, S4Update)        end, -   S6Update = -      case (RemainingAttackerHealth > 0) of -         true -> S5Update; -         false -> -            btl_victory_progression:handle_character_loss -            ( -               TargetCharacterRef, -               S5Update -            ) -      end, - -   {ok, S6Update}. +   {ok, S5Update}. diff --git a/src/battle/struct/btl_attack.erl b/src/battle/struct/btl_attack.erl index 189cb0e..6d7f32e 100644 --- a/src/battle/struct/btl_attack.erl +++ b/src/battle/struct/btl_attack.erl @@ -36,7 +36,7 @@        get_sequence/3,        get_description_of/5,        apply_to_healths_and_lucks/5, -      new_opportunity/2, +      attack_of_opportunity/0     ]  ). @@ -411,8 +411,26 @@ get_description_of        CanParry,        DefenderLuck,        AttackerLuck +   ); +get_description_of +( +   opportunity, +   Attacker, +   Defender, +   AttackerLuck, +   DefenderLuck +) -> +   effect_of_attack +   ( +      opportunity, +      Attacker, +      Defender, +      false, +      AttackerLuck, +      DefenderLuck     ). +  -spec apply_to_healths_and_lucks     (        maybe_type(), @@ -555,6 +573,9 @@ get_sequence (AttackRange, AttackerWeapon, DefenderWeapon) ->        _ -> [First, Second]     end. +-spec attack_of_opportunity () -> opportunity. +attack_of_opportunity () -> opportunity. +  -spec encode (type()) -> {list(any())}.  encode (Attack) ->     Order = Attack#attack.order, diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index aedd8da..c1f4d68 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -89,6 +89,13 @@     ]  ). +-export +( +   [ +     resolve_character/2 +   ] +). +  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -468,6 +475,32 @@ new (Map) ->        current_player_turn = btl_player_turn:new(0, 0)     }. +-spec resolve_character +   ( +      btl_character:unresolved(), +      type() +   ) +   -> btl_character:type(). +resolve_character (CharacterRef, Battle) -> +   btl_character:resolve +   ( +      shr_tile:get_omnimods +      ( +         shr_tile:from_id +         ( +            shr_tile_instance:get_tile_id +            ( +               shr_map:get_tile_instance +               ( +                  btl_character:get_location(CharacterRef), +                  Battle#battle.map +               ) +            ) +         ) +      ), +      CharacterRef +   ). +  -spec get_characters_field () -> non_neg_integer().  get_characters_field () -> #battle.characters. | 


