summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-11 23:39:11 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2019-10-11 23:39:11 +0200
commit2df0db54d42a54fe5bec35bdf9996376164c23e7 (patch)
treea653438a54ac3491237b2bc70f868cd54344b183 /src/battle/mechanic/action
parent60d0cf646133e70684b727b1b1874b57d9b2fccf (diff)
...
Diffstat (limited to 'src/battle/mechanic/action')
-rw-r--r--src/battle/mechanic/action/btl_action_attack.erl136
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
(