summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-11 23:39:11 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-10-11 23:39:11 +0200 |
commit | 2df0db54d42a54fe5bec35bdf9996376164c23e7 (patch) | |
tree | a653438a54ac3491237b2bc70f868cd54344b183 /src/battle/mechanic/action | |
parent | 60d0cf646133e70684b727b1b1874b57d9b2fccf (diff) |
...
Diffstat (limited to 'src/battle/mechanic/action')
-rw-r--r-- | src/battle/mechanic/action/btl_action_attack.erl | 136 |
1 files changed, 105 insertions, 31 deletions
diff --git a/src/battle/mechanic/action/btl_action_attack.erl b/src/battle/mechanic/action/btl_action_attack.erl index b9b3eea..0cc0718 100644 --- a/src/battle/mechanic/action/btl_action_attack.erl +++ b/src/battle/mechanic/action/btl_action_attack.erl @@ -24,22 +24,40 @@ btl_character:type(), btl_character_turn_update:type() ) - -> {shr_condition:context(A, B), btl_character_turn_update:type()}. + -> + { + shr_condition:context(A, B), + btl_character:type(), + ataxic:basic(), + btl_character_turn_update:type() + }. apply_conditions ( Context = {Trigger, _ReadOnlyContext, _VolatileContext}, - Actor, + S0Actor, S0Update ) -> - {LastContext, S1Update} = + {LastContext, S1Update, ConditionUpdates} = btl_condition:recursive_apply ( - btl_character:get_conditions_on(Trigger, Actor), + btl_character:get_conditions_on(Trigger, S0Actor), Context, S0Update ), - {LastContext, S1Update}. + S0AllConditions = btl_character:get_conditions(S0Actor), + {S1AllConditions, AllConditionsAtaxiaUpdate} = + btl_condition:ataxia_apply_updates(ConditionUpdates, S0AllConditions), + + {S1Actor, ActorAtaxiaUpdate} = + btl_character:ataxia_set_conditions + ( + S1AllConditions, + AllConditionsAtaxiaUpdate, + S0Actor + ), + + {LastContext, S1Actor, ActorAtaxiaUpdate, S1Update}. -spec roll_for_precision ( @@ -215,38 +233,64 @@ apply_mirror_conditions {ReadOnlyContext, S0VolatileContext}, S0Update ) -> - CharacterIX = btl_action:get_actor_index(Action), + ActorIX = btl_action:get_actor_index(Action), S0Battle = btl_character_turn_update:get_battle(S0Update), - {Character, S1Battle} = - btl_battle:get_resolved_character(CharacterIX, S0Battle), - + {S0Actor, S1Battle} = btl_battle:get_resolved_character(ActorIX, S0Battle), S1Update = btl_character_turn_update:set_battle(S1Battle, S0Update), - {{_TriggerName, _ReadOnlyContext, S1VolatileContext}, S2Update} = + { + {_TriggerName, _ReadOnlyContext, S1VolatileContext}, + S1Actor, + ActorAtaxiaUpdate, + S2Update + } = apply_conditions ( {OwnTriggerName, ReadOnlyContext, S0VolatileContext}, - Character, + S0Actor, S1Update ), - TargetCharacterIX = btl_action:get_target_index(Action), + TargetIX = btl_action:get_target_index(Action), S2Battle = btl_character_turn_update:get_battle(S2Update), + S3Battle = + btl_battle:ataxia_set_character + ( + ActorIX, + S1Actor, + ActorAtaxiaUpdate, + S2Battle + ), - {TargetCharacter, S3Battle} = - btl_battle:get_resolved_character(TargetCharacterIX, S2Battle), - - S3Update = btl_character_turn_update:set_battle(S3Battle, S2Update), + {Target, S4Battle} = btl_battle:get_resolved_character(TargetIX, S3Battle), + S3Update = btl_character_turn_update:set_battle(S4Battle, S2Update), - {{_TriggerName, _ReadOnlyContext, S2VolatileContext}, S4Update} = + { + {_TriggerName, _ReadOnlyContext, S2VolatileContext}, + S1Target, + TargetAtaxiaUpdate, + S4Update + } = apply_conditions ( {OtherTriggerName, ReadOnlyContext, S1VolatileContext}, - TargetCharacter, + Target, S3Update ), - {S2VolatileContext, S4Update}; + S5Battle = btl_character_turn_update:get_battle(S4Update), + S6Battle = + btl_battle:ataxia_set_character + ( + TargetIX, + S1Target, + TargetAtaxiaUpdate, + S5Battle + ), + + S5Update = btl_character_turn_update:set_battle(S6Battle, S4Update), + + {S2VolatileContext, S5Update}; apply_mirror_conditions ( true, @@ -256,38 +300,68 @@ apply_mirror_conditions {ReadOnlyContext, S0VolatileContext}, S0Update ) -> - TargetCharacterIX = btl_action:get_target_index(Action), + TargetIX = btl_action:get_target_index(Action), S0Battle = btl_character_turn_update:get_battle(S0Update), - {TargetCharacter, S1Battle} = - btl_battle:get_resolved_character(TargetCharacterIX, S0Battle), + {S0Target, S1Battle} = + btl_battle:get_resolved_character(TargetIX, S0Battle), S1Update = btl_character_turn_update:set_battle(S1Battle, S0Update), - {{_TriggerName, _ReadOnlyContext, S1VolatileContext}, S2Update} = + { + {_TriggerName, _ReadOnlyContext, S1VolatileContext}, + S1Target, + TargetAtaxiaUpdate, + S2Update + } = apply_conditions ( {OwnTriggerName, ReadOnlyContext, S0VolatileContext}, - TargetCharacter, + S0Target, S1Update ), - CharacterIX = btl_action:get_actor_index(Action), + ActorIX = btl_action:get_actor_index(Action), S2Battle = btl_character_turn_update:get_battle(S2Update), - {Character, S3Battle} = - btl_battle:get_resolved_character(CharacterIX, S2Battle), + {S0Actor, S3Battle} = btl_battle:get_resolved_character(ActorIX, S2Battle), + + S4Battle = + btl_battle:ataxia_set_character + ( + TargetIX, + S1Target, + TargetAtaxiaUpdate, + S3Battle + ), - S3Update = btl_character_turn_update:set_battle(S3Battle, S2Update), + S3Update = btl_character_turn_update:set_battle(S4Battle, S2Update), - {{_TriggerName, _ReadOnlyContext, S2VolatileContext}, S4Update} = + { + {_TriggerName, _ReadOnlyContext, S2VolatileContext}, + S1Actor, + ActorAtaxiaUpdate, + S4Update + } = apply_conditions ( {OtherTriggerName, ReadOnlyContext, S1VolatileContext}, - Character, + S0Actor, S3Update ), - {S2VolatileContext, S4Update}. + S5Battle = btl_character_turn_update:get_battle(S4Update), + S6Battle = + btl_battle:ataxia_set_character + ( + ActorIX, + S1Actor, + ActorAtaxiaUpdate, + S5Battle + ), + + S5Update = btl_character_turn_update:set_battle(S6Battle, S4Update), + + {S2VolatileContext, S5Update}. -spec handle_start_of_attack ( |