summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battle/mechanic/condition/blt_cond_heal.erl19
-rw-r--r--src/battle/mechanic/skill/btl_skill_attack_anywhere.erl (renamed from src/battle/mechanic/skill/blt_skill_attack_anywhere.erl)0
-rw-r--r--src/battle/mechanic/skill/btl_skill_shields_up.erl (renamed from src/battle/mechanic/skill/blt_skill_shields_up.erl)0
-rw-r--r--src/battle/mechanic/skill/btl_static_heal.erl137
4 files changed, 148 insertions, 8 deletions
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/btl_skill_attack_anywhere.erl
index bcc8519..bcc8519 100644
--- a/src/battle/mechanic/skill/blt_skill_attack_anywhere.erl
+++ b/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl
diff --git a/src/battle/mechanic/skill/blt_skill_shields_up.erl b/src/battle/mechanic/skill/btl_skill_shields_up.erl
index 32af8c2..32af8c2 100644
--- a/src/battle/mechanic/skill/blt_skill_shields_up.erl
+++ b/src/battle/mechanic/skill/btl_skill_shields_up.erl
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).