summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-10-09 17:31:49 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-10-09 17:31:49 +0200
commit85b4344b0aa478ae0a206ba4f0fb9b2e4f14106e (patch)
tree84103d02e420f32c778b008b3638079cc1eee2ba /src/battle/mechanic
parent64cab0e171ab13ced4c36ea40bff393d5093e075 (diff)
Still trying stuff out...
Diffstat (limited to 'src/battle/mechanic')
-rw-r--r--src/battle/mechanic/action/btl_action_attack.erl110
1 files changed, 101 insertions, 9 deletions
diff --git a/src/battle/mechanic/action/btl_action_attack.erl b/src/battle/mechanic/action/btl_action_attack.erl
index 8dc9d5c..399e050 100644
--- a/src/battle/mechanic/action/btl_action_attack.erl
+++ b/src/battle/mechanic/action/btl_action_attack.erl
@@ -9,13 +9,39 @@
-export
(
[
- handle/3
+ handle/2
]
).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec apply_conditions
+ (
+ shr_condition:trigger(),
+ ParameterType,
+ btl_character_turn_update:type()
+ )
+ -> {ParameterType, btl_character_turn_update:type()}.
+apply_conditions
+(
+ TriggerName,
+ S0Parameter,
+ Actor,
+ S0Update
+) ->
+ {
+ {TriggerName, S1Parameter},
+ S1Update
+ } =
+ btl_condition:recursive_apply
+ (
+ btl_character:get_conditions_on(TriggerName, Actor),
+ {TriggerName, S0Parameter},
+ S0Update
+ ),
+ {S1Parameter, S1Update}.
+
-spec roll_precision_modifier
(
shr_attributes:type(),
@@ -587,28 +613,94 @@ apply_luck_decay (Luck) ->
_ -> 0
end.
+-spec apply_battle_frontier_conditions
+ (
+ shr_condition:trigger(),
+ shr_condition:trigger(),
+ btl_action:type(),
+ btl_character_turn_update:type()
+ )
+ -> {btl_action:type(), btl_character_turn_update:type()}.
+apply_battle_frontier_conditions
+(
+ OwnTriggerName,
+ OtherTriggerName,
+ S0Action,
+ S0Update
+) ->
+ CharacterIX = btl_action:get_actor_index(S0Action),
+ S0Battle = btl_character_turn_update:get_battle(S0Update),
+ {Character, S1Battle} =
+ btl_battle:get_resolved_character(CharacterIX, S0Battle),
+
+ S1Update = btl_character_turn_update:set_battle(S1Battle, S0Update),
+
+ {S1Action, S2Update} =
+ apply_conditions
+ (
+ OwnTriggerName,
+ S0Action,
+ Character,
+ S1Update
+ ),
+
+ TargetCharacterIX = btl_action:get_target_index(S1Action),
+ S2Battle = btl_character_turn_update:get_battle(S2Update),
+ {TargetCharacter, S3Battle} =
+ btl_battle:get_resolved_character(TargetCharacterIX, S2Battle),
+
+ S3Update = btl_character_turn_update:set_battle(S3Battle, S2Update),
+
+ {S2Action, S4Update} =
+ apply_conditions
+ (
+ OtherTriggerName,
+ S1Action,
+ TargetCharacter,
+ S3Update
+ ),
+
+ {S2Action, S4Update}.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle
(
btl_action:type(),
- btl_character:type(),
btl_character_turn_update:type()
)
-> {ok, btl_character_turn_update:type()}.
-handle (Action, S0Character, S0Update) ->
- S0Battle = btl_character_turn_update:get_battle(S0Update),
- CharacterIX = btl_action:get_actor_index(Action),
+handle (S0Action, S0Update) ->
+ S1Update = add_targeting_event(S0Action, S0Update),
+ {S1Action, S2Update} =
+ apply_battle_frontier_conditions
+ (
+ ?CONDITION_TRIGGER_START_OF_OWN_ATTACK,
+ ?CONDITION_TRIGGER_START_OF_TARGET_ATTACK,
+ S0Action,
+ S1Update
+ ),
+
+ {AttackSequence, S3Update} = plan_attack_sequence(S1Action, S2Update),
+ {S2Action, S4Update} =
+ handle_attack_sequence(AttackSequence, S1Action, S3Update),
+
+ {S3Action, S2Update} =
+ apply_battle_frontier_conditions
+ (
+ ?CONDITION_TRIGGER_END_OF_OWN_ATTACK,
+ ?CONDITION_TRIGGER_END_OF_TARGET_ATTACK,
+ S0Action,
+ S1Update
+ ),
+
+ {ok, S2Update}.
PlayerIX = btl_character:get_player_index(S0Character),
S0Player = btl_battle:get_player(PlayerIX, S0Battle),
S0PlayerLuck = btl_player:get_luck(S0Player),
- TargetCharacterIX = btl_action:get_target_index(Action),
- {S0TargetCharacter, S1Battle} =
- btl_battle:get_resolved_character(TargetCharacterIX, S0Battle),
-
TargetPlayerIX = btl_character:get_player_index(S0TargetCharacter),
S0TargetPlayer = btl_battle:get_player(TargetPlayerIX, S1Battle),
S0TargetPlayerLuck = btl_player:get_luck(S0TargetPlayer),