summaryrefslogblamecommitdiff
path: root/src/map/magic-interpreter.t.hpp
blob: f5cb309ce97baf9be63a8c1c6f87107f4d173db5 (plain) (tree)

















































































































































































































                                                                            
#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