#ifndef SCRIPT_HPP #define SCRIPT_HPP #include #include #include "../common/db.hpp" enum class ScriptCode : uint8_t; struct script_data { ScriptCode type; union { int num; const char *str; const ScriptCode *script; } u; }; struct script_stack { int sp, sp_max; struct script_data *stack_data; }; // future improvements coming! class ScriptState { public: struct script_stack *stack; int start, end; int pos, state; int rid, oid; const ScriptCode *script, *new_script; int defsp, new_pos, new_defsp; }; const ScriptCode *parse_script(const char *, int); typedef struct argrec { const char *name; union _aru { int i; const char *s; _aru() = default; _aru(int n) : i(n) {} _aru(const char *z) : s(z) {} } v; } argrec_t; int run_script_l(const ScriptCode *, int, int, int, int, argrec_t *args); int run_script(const ScriptCode *, int, int, int); extern Map scriptlabel_db; extern DMap userfunc_db; void script_config_read(); void do_init_script(void); void do_final_script(void); extern char mapreg_txt[256]; #endif // SCRIPT_HPP