summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/tacticians/conditions.hrl.m437
-rw-r--r--src/shared/struct/shr_condition.erl35
2 files changed, 72 insertions, 0 deletions
diff --git a/include/tacticians/conditions.hrl.m4 b/include/tacticians/conditions.hrl.m4
new file mode 100644
index 0000000..5c3e537
--- /dev/null
+++ b/include/tacticians/conditions.hrl.m4
@@ -0,0 +1,37 @@
+m4_include(__MAKEFILE_DATA_DIR/condition/trigger.m4.conf)
+
+-define(CONDITION_TRIGGER_START_OF_PLAYER_TURN, __COND_TRIG_START_OF_PLAYER_TURN).
+-define(CONDITION_TRIGGER_END_OF_PLAYER_TURN, __COND_TRIG_END_OF_PLAYER_TURN).
+-define(CONDITION_TRIGGER_START_OF_CHARACTER_TURN, __COND_TRIG_START_OF_CHARACTER_TURN).
+-define(CONDITION_TRIGGER_END_OF_CHARACTER_TURN, __COND_TRIG_END_OF_CHARACTER_TURN).
+
+-define(CONDITION_TRIGGER_START_OF_OWN_ATTACK, __COND_TRIG_START_OF_OWN_ATTACK).
+-define(CONDITION_TRIGGER_END_OF_OWN_ATTACK, __COND_TRIG_END_OF_OWN_ATTACK).
+-define(CONDITION_TRIGGER_START_OF_OWN_HIT, __COND_TRIG_START_OF_OWN_HIT).
+-define(CONDITION_TRIGGER_END_OF_OWN_HIT, __COND_TRIG_END_OF_OWN_HIT).
+
+-define(CONDITION_TRIGGER_OWN_DODGE, __COND_TRIG_OWN_DODGE).
+-define(CONDITION_TRIGGER_OWN_CRITICAL, __COND_TRIG_OWN_CRITICAL).
+-define(CONDITION_TRIGGER_OWN_DOUBLE_HIT, __COND_TRIG_OWN_DOUBLE_HIT).
+-define(CONDITION_TRIGGER_OWN_DAMAGE, __COND_TRIG_OWN_DAMAGE).
+
+-define(CONDITION_TRIGGER_START_OF_TARGET_ATTACK, __COND_TRIG_START_OF_TARGET_ATTACK).
+-define(CONDITION_TRIGGER_END_OF_TARGET_ATTACK, __COND_TRIG_END_OF_TARGET_ATTACK).
+-define(CONDITION_TRIGGER_START_OF_TARGET_HIT, __COND_TRIG_START_OF_TARGET_HIT).
+-define(CONDITION_TRIGGER_END_OF_TARGET_HIT, __COND_TRIG_END_OF_TARGET_HIT).
+
+-define(CONDITION_TRIGGER_TARGET_DODGE, __COND_TRIG_TARGET_DODGE).
+-define(CONDITION_TRIGGER_TARGET_CRITICAL, __COND_TRIG_TARGET_CRITICAL).
+-define(CONDITION_TRIGGER_TARGET_DOUBLE_HIT, __COND_TRIG_TARGET_DOUBLE_HIT).
+-define(CONDITION_TRIGGER_TARGET_DAMAGE, __COND_TRIG_TARGET_DAMAGE).
+
+-define(CONDITION_TRIGGER_MOVEMENT, __COND_TRIG_MOVEMENT).
+-define(CONDITION_TRIGGER_WEAPON_SWITCH, __COND_TRIG_WEAPON_SWITCH).
+-define(CONDITION_TRIGGER_SKILL_USE, __COND_TRIG_SKILL_USE).
+
+-define(CONDITION_TRIGGER_DEATH, __COND_TRIG_DEATH).
+
+-define(CONDITION_TRIGGER_START_OF_BATTLE, __COND_TRIG_START_OF_BATTLE).
+-define(CONDITION_TRIGGER_END_OF_BATTLE, __COND_TRIG_END_OF_BATTLE).
+
+-define(CONDITION_TRIGGER_IMMEDIATELY, __COND_TRIG_IMMEDIATELY).
diff --git a/src/shared/struct/shr_condition.erl b/src/shared/struct/shr_condition.erl
new file mode 100644
index 0000000..5b6f0e9
--- /dev/null
+++ b/src/shared/struct/shr_condition.erl
@@ -0,0 +1,35 @@
+-module(shr_condition).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-type id() :: ataxia_id:type().
+-type trigger() :: atom().
+
+-record
+(
+ condition,
+ {
+ id :: id(),
+ name :: binary(),
+ description :: binary(),
+ triggers :: ordset:ordset(trigger()),
+ effect :: list()
+ }
+).
+
+-opaque type() :: #condition{}.
+
+-export_type([id/0, type/0, trigger/0]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%