summaryrefslogtreecommitdiff
path: root/src/map/magic-interpreter.t.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/magic-interpreter.t.hpp')
-rw-r--r--src/map/magic-interpreter.t.hpp210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/map/magic-interpreter.t.hpp b/src/map/magic-interpreter.t.hpp
new file mode 100644
index 0000000..f5cb309
--- /dev/null
+++ b/src/map/magic-interpreter.t.hpp
@@ -0,0 +1,210 @@
+#ifndef MAGIC_INTERPRETER_T_HPP
+#define MAGIC_INTERPRETER_T_HPP
+
+#include "../common/utils.hpp"
+
+enum class SPELLARG : uint8_t
+{
+ NONE,
+#define SPELLARG_NONE SPELLARG::NONE
+ PC,
+#define SPELLARG_PC SPELLARG::PC
+ STRING,
+#define SPELLARG_STRING SPELLARG::STRING
+};
+
+enum class TY : uint8_t
+{
+ UNDEF,
+#define TY_UNDEF TY::UNDEF
+ INT,
+#define TY_INT TY::INT
+ DIR,
+#define TY_DIR TY::DIR
+ STRING,
+#define TY_STRING TY::STRING
+ ENTITY,
+#define TY_ENTITY TY::ENTITY
+ LOCATION,
+#define TY_LOCATION TY::LOCATION
+ AREA,
+#define TY_AREA TY::AREA
+ SPELL,
+#define TY_SPELL TY::SPELL
+ INVOCATION,
+#define TY_INVOCATION TY::INVOCATION
+ FAIL = 127,
+#define TY_FAIL TY::FAIL
+
+ NEGATIVE_1 = 255,
+};
+
+// Note: there is also a typedef by this name in <dirent.h>
+// but we should be fine since we never include it.
+// (in the long term we should still rename this though)
+enum class DIR : uint8_t
+{
+ S = 0,
+#define DIR_S DIR::S
+ SW = 1,
+#define DIR_SW DIR::SW
+ W = 2,
+#define DIR_W DIR::W
+ NW = 3,
+#define DIR_NW DIR::NW
+ N = 4,
+#define DIR_N DIR::N
+ NE = 5,
+#define DIR_NE DIR::NE
+ E = 6,
+#define DIR_E DIR::E
+ SE = 7,
+#define DIR_SE DIR::SE
+
+ COUNT,
+};
+
+enum class AREA : uint8_t
+{
+ LOCATION,
+#define AREA_LOCATION AREA::LOCATION
+ UNION,
+#define AREA_UNION AREA::UNION
+ RECT,
+#define AREA_RECT AREA::RECT
+ BAR,
+#define AREA_BAR AREA::BAR
+};
+
+enum class EXPR : uint8_t
+{
+ VAL,
+#define EXPR_VAL EXPR::VAL
+ LOCATION,
+#define EXPR_LOCATION EXPR::LOCATION
+ AREA,
+#define EXPR_AREA EXPR::AREA
+ FUNAPP,
+#define EXPR_FUNAPP EXPR::FUNAPP
+ ID,
+#define EXPR_ID EXPR::ID
+ SPELLFIELD,
+#define EXPR_SPELLFIELD EXPR::SPELLFIELD
+};
+
+// temporary rename to avoid collision with enum value
+// in magic-interpreter-parser
+enum class EFFECT_ : uint8_t
+{
+ SKIP,
+#define EFFECT_SKIP EFFECT_::SKIP
+ ABORT,
+#define EFFECT_ABORT EFFECT_::ABORT
+ ASSIGN,
+#define EFFECT_ASSIGN EFFECT_::ASSIGN
+ FOREACH,
+#define EFFECT_FOREACH EFFECT_::FOREACH
+ FOR,
+#define EFFECT_FOR EFFECT_::FOR
+ IF,
+#define EFFECT_IF EFFECT_::IF
+ SLEEP,
+#define EFFECT_SLEEP EFFECT_::SLEEP
+ // temporary rename to avoid collision with NpcSubtype
+ SCRIPT_,
+#define EFFECT_SCRIPT EFFECT_::SCRIPT_
+ BREAK,
+#define EFFECT_BREAK EFFECT_::BREAK
+ OP,
+#define EFFECT_OP EFFECT_::OP
+ END,
+#define EFFECT_END EFFECT_::END
+ CALL,
+#define EFFECT_CALL EFFECT_::CALL
+};
+
+enum class FOREACH_FILTER : uint8_t
+{
+ MOB,
+#define FOREACH_FILTER_MOB FOREACH_FILTER::MOB
+ PC,
+#define FOREACH_FILTER_PC FOREACH_FILTER::PC
+ ENTITY,
+#define FOREACH_FILTER_ENTITY FOREACH_FILTER::ENTITY
+ TARGET,
+#define FOREACH_FILTER_TARGET FOREACH_FILTER::TARGET
+ SPELL,
+#define FOREACH_FILTER_SPELL FOREACH_FILTER::SPELL
+ NPC,
+#define FOREACH_FILTER_NPC FOREACH_FILTER::NPC
+};
+
+enum class SPELLGUARD : uint8_t
+{
+ CONDITION,
+#define SPELLGUARD_CONDITION SPELLGUARD::CONDITION
+ COMPONENTS,
+#define SPELLGUARD_COMPONENTS SPELLGUARD::COMPONENTS
+ CATALYSTS,
+#define SPELLGUARD_CATALYSTS SPELLGUARD::CATALYSTS
+ CHOICE,
+#define SPELLGUARD_CHOICE SPELLGUARD::CHOICE
+ MANA,
+#define SPELLGUARD_MANA SPELLGUARD::MANA
+ CASTTIME,
+#define SPELLGUARD_CASTTIME SPELLGUARD::CASTTIME
+ EFFECT,
+#define SPELLGUARD_EFFECT SPELLGUARD::EFFECT
+};
+
+namespace e
+{
+enum class SPELL_FLAG : uint8_t
+{
+ ZERO = 0,
+
+ // spell associated not with caster but with place
+ LOCAL = 1 << 0,
+#define SPELL_FLAG_LOCAL SPELL_FLAG::LOCAL
+ // spell invocation never uttered
+ SILENT = 1 << 1,
+#define SPELL_FLAG_SILENT SPELL_FLAG::SILENT
+ // `magic word' only: don't require spellcasting ability
+ NONMAGIC = 1 << 2,
+#define SPELL_FLAG_NONMAGIC SPELL_FLAG::NONMAGIC
+};
+ENUM_BITWISE_OPERATORS(SPELL_FLAG)
+}
+using e::SPELL_FLAG;
+
+enum class CONT_STACK : uint8_t
+{
+ FOREACH,
+#define CONT_STACK_FOREACH CONT_STACK::FOREACH
+ FOR,
+#define CONT_STACK_FOR CONT_STACK::FOR
+ PROC,
+#define CONT_STACK_PROC CONT_STACK::PROC
+};
+
+namespace e
+{
+enum class INVOCATION_FLAG : uint8_t
+{
+ ZERO = 0,
+
+ // Bound directly to the caster (i.e., ignore its location)
+ BOUND = 1 << 0,
+#define INVOCATION_FLAG_BOUND INVOCATION_FLAG::BOUND
+ // Used `abort' to terminate
+ ABORTED = 1 << 1,
+#define INVOCATION_FLAG_ABORTED INVOCATION_FLAG::ABORTED
+ // On magical attacks: if we run out of steam, stop attacking altogether
+ STOPATTACK = 1 << 2,
+#define INVOCATION_FLAG_STOPATTACK INVOCATION_FLAG::STOPATTACK
+};
+ENUM_BITWISE_OPERATORS(INVOCATION_FLAG)
+}
+using e::INVOCATION_FLAG;
+
+#endif // MAGIC_INTERPRETER_T_HPP