From 27e6fba1b383b6045c8ef42a4beea9903359b07d Mon Sep 17 00:00:00 2001 From: nsensfel Date: Tue, 8 Oct 2019 17:12:35 +0200 Subject: ... --- src/battle/mechanic/condition/blt_cond_heal.erl | 19 +-- .../mechanic/skill/blt_skill_attack_anywhere.erl | 52 -------- src/battle/mechanic/skill/blt_skill_shields_up.erl | 40 ------ .../mechanic/skill/btl_skill_attack_anywhere.erl | 52 ++++++++ src/battle/mechanic/skill/btl_skill_shields_up.erl | 40 ++++++ src/battle/mechanic/skill/btl_static_heal.erl | 137 +++++++++++++++++++++ 6 files changed, 240 insertions(+), 100 deletions(-) delete mode 100644 src/battle/mechanic/skill/blt_skill_attack_anywhere.erl delete mode 100644 src/battle/mechanic/skill/blt_skill_shields_up.erl create mode 100644 src/battle/mechanic/skill/btl_skill_attack_anywhere.erl create mode 100644 src/battle/mechanic/skill/btl_skill_shields_up.erl create mode 100644 src/battle/mechanic/skill/btl_static_heal.erl (limited to 'src/battle') diff --git a/src/battle/mechanic/condition/blt_cond_heal.erl b/src/battle/mechanic/condition/blt_cond_heal.erl index dd7a820..2479720 100644 --- a/src/battle/mechanic/condition/blt_cond_heal.erl +++ b/src/battle/mechanic/condition/blt_cond_heal.erl @@ -22,17 +22,20 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec apply ( - non_neg_integer(), - non_neg_integer(), - btl_battle:type() + btl_condition:type(), + btl_character_turn_update:type() ) -> { btl_condition:type(), [ataxic:basic()], - btl_character:type(), - [ataxic:basic()] + btl_character_turn_update:type() }. -apply (Condition, Character) -> - % TODO - {Condition, [], Character, []}. +apply (Condition, Update) -> + {TargetIX, Amount} = + case btl_condition:get_parameter(Condition) of + {StoredTargetIX, StoredAmount} -> {StoredTargetIX, StoredAmount}; + Other -> error({condition, parameter, Other}) + end, + % TODO + {Condition, [], Update}. diff --git a/src/battle/mechanic/skill/blt_skill_attack_anywhere.erl b/src/battle/mechanic/skill/blt_skill_attack_anywhere.erl deleted file mode 100644 index bcc8519..0000000 --- a/src/battle/mechanic/skill/blt_skill_attack_anywhere.erl +++ /dev/null @@ -1,52 +0,0 @@ --module(btl_skill_attack_anywhere). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( - [ - cast/5 - ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec cast - ( - shr_skill:variant(), - non_neg_integer(), - list(non_neg_integer()), - list(shr_location:type()), - btl_character_turn_update:type() - ) -> btl_character_turn_update:type(). -cast (_Variant, UserIX, TargetIXs, _Locations, Update) -> - TargetIX = - case TargetIXs of - [ValTargetIX] -> ValTargetIX; - _ -> error({skill, target, TargetIXs}) - end, - - % TODO: Add condition to Character[UserIX]: - % { - % Effect: Attack Range Increase - % Trigger: Start of Own Attack - % Duration: -1 (Infinite) - % Uses: 1 - % Parameter: Max Value. - - % TODO: Add cast event to Update. - - btl_actions_management:handle - ( - [btl_action:new_attack(UserIX, TargetIX)], - Update - ). diff --git a/src/battle/mechanic/skill/blt_skill_shields_up.erl b/src/battle/mechanic/skill/blt_skill_shields_up.erl deleted file mode 100644 index 32af8c2..0000000 --- a/src/battle/mechanic/skill/blt_skill_shields_up.erl +++ /dev/null @@ -1,40 +0,0 @@ --module(btl_skill_shields_up). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --include("tacticians/skills.hrl") - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( - [ - cast/5 - ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec cast - ( - shr_skill:variant(), - non_neg_integer(), - list(non_neg_integer()), - list(shr_location:type()), - btl_character_turn_update:type() - ) -> btl_character_turn_update:type(). -cast (Variant, _UserIX, TargetIXs, _Locations, Update) -> - % TODO: Add condition to TargetIXs: - % { - % Effect: Defense Percentage Increase - % Trigger: Start of Own Attack, Start of Target Attack - % Duration: {Beta} Turns - % Uses: -1 (Infinite) - % Parameter: {Alpha}. - Update. diff --git a/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl b/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl new file mode 100644 index 0000000..bcc8519 --- /dev/null +++ b/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl @@ -0,0 +1,52 @@ +-module(btl_skill_attack_anywhere). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + cast/5 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec cast + ( + shr_skill:variant(), + non_neg_integer(), + list(non_neg_integer()), + list(shr_location:type()), + btl_character_turn_update:type() + ) -> btl_character_turn_update:type(). +cast (_Variant, UserIX, TargetIXs, _Locations, Update) -> + TargetIX = + case TargetIXs of + [ValTargetIX] -> ValTargetIX; + _ -> error({skill, target, TargetIXs}) + end, + + % TODO: Add condition to Character[UserIX]: + % { + % Effect: Attack Range Increase + % Trigger: Start of Own Attack + % Duration: -1 (Infinite) + % Uses: 1 + % Parameter: Max Value. + + % TODO: Add cast event to Update. + + btl_actions_management:handle + ( + [btl_action:new_attack(UserIX, TargetIX)], + Update + ). diff --git a/src/battle/mechanic/skill/btl_skill_shields_up.erl b/src/battle/mechanic/skill/btl_skill_shields_up.erl new file mode 100644 index 0000000..32af8c2 --- /dev/null +++ b/src/battle/mechanic/skill/btl_skill_shields_up.erl @@ -0,0 +1,40 @@ +-module(btl_skill_shields_up). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("tacticians/skills.hrl") + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + cast/5 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec cast + ( + shr_skill:variant(), + non_neg_integer(), + list(non_neg_integer()), + list(shr_location:type()), + btl_character_turn_update:type() + ) -> btl_character_turn_update:type(). +cast (Variant, _UserIX, TargetIXs, _Locations, Update) -> + % TODO: Add condition to TargetIXs: + % { + % Effect: Defense Percentage Increase + % Trigger: Start of Own Attack, Start of Target Attack + % Duration: {Beta} Turns + % Uses: -1 (Infinite) + % Parameter: {Alpha}. + Update. diff --git a/src/battle/mechanic/skill/btl_static_heal.erl b/src/battle/mechanic/skill/btl_static_heal.erl new file mode 100644 index 0000000..bb67463 --- /dev/null +++ b/src/battle/mechanic/skill/btl_static_heal.erl @@ -0,0 +1,137 @@ +-module(btl_skill_static_heal). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("tacticians/skills.hrl") +-include("tacticians/conditions.hrl") + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + cast/5 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec cast_logic + ( + non_neg_integer(), + non_neg_integer(), + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +cast_logic (TargetIX, Amount, S0Update) -> + Healing = + btl_condition:new + ( + ?CONDITION_EFFECT_HEAL, + [], + -1, + 1, + {TargetIX, HealAmount} + ), + + {_S1Healing, _HealingUpdates, S1Update} = + btl_cond_heal:apply + ( + Healing, + S0Update + ), + + % TODO: Add a btl_turn_result showing the heal to S1Update. + + S1Update. + +-spec group_cast_logic + ( + list(non_neg_integer()), + non_neg_integer(), + non_neg_integer(), + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +group_cast_logic (TargetIXs, MaxTargets, Amount, S0Update) -> + case (length(TargetIXs) > MaxTargets) of + true -> error({skill, target, TargetIXs}); + false -> ok + end, + + lists:foldl + ( + fun (TargetIX, S1Update) -> + cast_logic(Amount, TargetIX, S1Update) + end, + S0Update, + TargetIXs + ). + +-spec player_cast_logic + ( + non_neg_integer(), + non_neg_integer(), + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +player_cast_logic (TargetIX, Amount, S0Update) -> + Characters = todo, %TODO + TargetRef = todo, %TODO + TargetPlayerIX = todo, %TODO + + % TODO: + % apply `cast_logic(Amount, TargetIX, S1Update)` on all characters whose + % PlayerIX == TargetPlayerIX. + S0Update. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec cast + ( + shr_skill:variant(), + non_neg_integer(), + list(non_neg_integer()), + list(shr_location:type()), + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +cast (?SKILL_VARIANT_ALPHA_0, _UserIX, [TargetIX], _Locations, S0Update) -> + cast_logic(20, TargetIX, S0Update); +cast (?SKILL_VARIANT_ALPHA_1, _UserIX, [TargetIX], _Locations, S0Update) -> + cast_logic(40, TargetIX, S0Update); +cast (?SKILL_VARIANT_ALPHA_2, _UserIX, [TargetIX], _Locations, S0Update) -> + cast_logic(60, TargetIX, S0Update); +cast (?SKILL_VARIANT_ALPHA_3, _UserIX, [TargetIX], _Locations, S0Update) -> + cast_logic(80, TargetIX, S0Update); +cast (?SKILL_VARIANT_ALPHA_4, _UserIX, [TargetIX], _Locations, S0Update) -> + cast_logic(100, TargetIX, S0Update); +cast (?SKILL_VARIANT_PHI_0, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 2, 20, S0Update); +cast (?SKILL_VARIANT_PHI_1, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 2, 60, S0Update); +cast (?SKILL_VARIANT_PHI_2, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 2, 100, S0Update); +cast (?SKILL_VARIANT_PHI_3, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 4, 20, S0Update); +cast (?SKILL_VARIANT_PHI_4, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 4, 60, S0Update); +cast (?SKILL_VARIANT_PHI_5, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 4, 100, S0Update); +cast (?SKILL_VARIANT_PHI_6, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 8, 20, S0Update); +cast (?SKILL_VARIANT_PHI_7, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 8, 60, S0Update); +cast (?SKILL_VARIANT_PHI_8, _UserIX, TargetIXs, _Locations, S0Update) -> + group_cast_logic(TargetIXs, 8, 100, S0Update); +cast (?SKILL_VARIANT_PSI_0, _UserIX, [TargetIX], _Locations, S0Update) -> + player_cast_logic(TargetIX, 20, S0Update); +cast (?SKILL_VARIANT_PSI_1, _UserIX, [TargetIX], _Locations, S0Update) -> + player_cast_logic(TargetIX, 40, S0Update); +cast (?SKILL_VARIANT_PSI_2, _UserIX, [TargetIX], _Locations, S0Update) -> + player_cast_logic(TargetIX, 60, S0Update); +cast (?SKILL_VARIANT_PSI_3, _UserIX, [TargetIX], _Locations, S0Update) -> + player_cast_logic(TargetIX, 80, S0Update). -- cgit v1.2.3-70-g09d2