summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battle/mechanic/skill/btl_skill_attack_anywhere.erl30
-rw-r--r--src/battle/mechanic/skill/btl_skill_shields_up.erl18
-rw-r--r--src/battle/mechanic/skill/btl_skill_static_heal.erl111
-rw-r--r--src/shared/struct/inventory/shr_skill.erl.m4116
4 files changed, 132 insertions, 143 deletions
diff --git a/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl b/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl
index bcc8519..78a0a08 100644
--- a/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl
+++ b/src/battle/mechanic/skill/btl_skill_attack_anywhere.erl
@@ -2,6 +2,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-include("tacticians/conditions.hrl").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -22,31 +23,12 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec cast
(
- shr_skill:variant(),
+ shr_skill:type(),
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
- ).
+ )
+ -> btl_character_turn_update:type().
+cast (_Skill, _UserIX, _TargetIXs, _Locations, S0Update) ->
+ S0Update.
diff --git a/src/battle/mechanic/skill/btl_skill_shields_up.erl b/src/battle/mechanic/skill/btl_skill_shields_up.erl
index 32af8c2..b7873ad 100644
--- a/src/battle/mechanic/skill/btl_skill_shields_up.erl
+++ b/src/battle/mechanic/skill/btl_skill_shields_up.erl
@@ -2,7 +2,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("tacticians/skills.hrl")
+-include("tacticians/conditions.hrl").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -23,18 +23,12 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec cast
(
- shr_skill:variant(),
+ shr_skill:type(),
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.
+ )
+ -> btl_character_turn_update:type().
+cast (_Skill, _UserIX, _TargetIXs, _Locations, S0Update) ->
+ S0Update.
diff --git a/src/battle/mechanic/skill/btl_skill_static_heal.erl b/src/battle/mechanic/skill/btl_skill_static_heal.erl
index 7a9bf35..b1b7018 100644
--- a/src/battle/mechanic/skill/btl_skill_static_heal.erl
+++ b/src/battle/mechanic/skill/btl_skill_static_heal.erl
@@ -2,8 +2,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("tacticians/skills.hrl")
--include("tacticians/conditions.hrl")
+-include("tacticians/conditions.hrl").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -18,120 +17,18 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 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}
- ),
-
- {_S1HealindAndUpdate, 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(),
+ shr_skill:type(),
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).
+cast (_Skill, _UserIX, _TargetIXs, _Locations, S0Update) ->
+ S0Update.
diff --git a/src/shared/struct/inventory/shr_skill.erl.m4 b/src/shared/struct/inventory/shr_skill.erl.m4
new file mode 100644
index 0000000..e1f1a29
--- /dev/null
+++ b/src/shared/struct/inventory/shr_skill.erl.m4
@@ -0,0 +1,116 @@
+-module(shr_skill).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-type id() :: binary().
+
+-record
+(
+ skill,
+ {
+ id :: id(),
+ module :: atom(),
+ name :: binary(),
+ cost :: non_neg_integer(),
+ reserve :: non_neg_integer(),
+ targets :: (non_neg_integer() | -1),
+ locations :: (non_neg_integer() | -1),
+ duration :: (non_neg_integer() | -1),
+ uses :: (non_neg_integer() | -1),
+ chance :: (0..100 | -1),
+ power :: (non_neg_integer() | -1),
+ range :: (non_neg_integer() | -1)
+ }
+).
+
+-opaque type() :: #skill{}.
+
+-export_type([type/0, id/0]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-export
+(
+ [
+ get_id/1,
+ get_module/1,
+ get_name/1,
+ get_cost/1,
+ get_reserve/1,
+ get_targets/1,
+ get_locations/1,
+ get_duration/1,
+ get_uses/1,
+ get_chance/1,
+ get_power/1,
+ get_range/1
+ ]
+).
+
+-export
+(
+ [
+ default/0,
+ default_id/0,
+ from_id/1
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Accessors
+-spec get_id (type()) -> id().
+get_id (Skill) -> Skill#skill.id.
+
+-spec get_module (type()) -> atom().
+get_module (Skill) -> Skill#skill.module.
+
+-spec get_name (type()) -> binary().
+get_name (Skill) -> Skill#skill.name.
+
+-spec get_cost (type()) -> non_neg_integer().
+get_cost (Skill) -> Skill#skill.cost.
+
+-spec get_reserve (type()) -> non_neg_integer().
+get_reserve (Skill) -> Skill#skill.reserve.
+
+-spec get_targets (type()) -> (non_neg_integer() | -1).
+get_targets (Skill) -> Skill#skill.targets.
+
+-spec get_locations (type()) -> (non_neg_integer() | -1).
+get_locations (Skill) -> Skill#skill.locations.
+
+-spec get_duration (type()) -> (non_neg_integer() | -1).
+get_duration (Skill) -> Skill#skill.duration.
+
+-spec get_uses (type()) -> (non_neg_integer() | -1).
+get_uses (Skill) -> Skill#skill.uses.
+
+-spec get_power (type()) -> (non_neg_integer() | -1).
+get_power (Skill) -> Skill#skill.power.
+
+-spec get_chance (type()) -> (0..100 | -1).
+get_chance (Skill) -> Skill#skill.chance.
+
+-spec get_range (type()) -> (non_neg_integer() | -1).
+get_range (Skill) -> Skill#skill.range.
+
+-spec from_id (id()) -> type().
+m4_include(__MAKEFILE_DATA_DIR/skill/global.m4.conf)m4_dnl
+m4_include(__MAKEFILE_DATA_DIR/skill/basic.m4d)m4_dnl
+from_id (_) ->
+ default().
+
+-spec default () -> type().
+default () -> from_id(<<"0">>).
+
+-spec default_id () -> id().
+default_id () -> <<"0">>.