diff options
Diffstat (limited to 'src/map/magic-interpreter.t.hpp')
-rw-r--r-- | src/map/magic-interpreter.t.hpp | 210 |
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 |