#ifndef GUARD_SCRIPT_H #define GUARD_SCRIPT_H struct ScriptContext; typedef bool8 (*ScrCmdFunc)(struct ScriptContext *); struct ScriptContext { u8 stackDepth; u8 mode; u8 comparisonResult; u8 (*nativePtr)(void); u8 *scriptPtr; u8 *stack[20]; ScrCmdFunc *cmdTable; ScrCmdFunc *cmdTableEnd; u32 data[4]; }; void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd); u8 SetupBytecodeScript(struct ScriptContext *ctx, void *ptr); void SetupNativeScript(struct ScriptContext *ctx, void *ptr); void StopScript(struct ScriptContext *ctx); u8 RunScript(struct ScriptContext *ctx); u8 ScriptPush(struct ScriptContext *ctx, u8 *ptr); u8 *ScriptPop(struct ScriptContext *ctx); void ScriptJump(struct ScriptContext *ctx, u8 *ptr); void ScriptCall(struct ScriptContext *ctx, u8 *ptr); void ScriptReturn(struct ScriptContext *ctx); u16 ScriptReadHalfword(struct ScriptContext *ctx); u32 ScriptReadWord(struct ScriptContext *ctx); void ScriptContext2_Enable(void); void ScriptContext2_Disable(void); bool8 ScriptContext2_IsEnabled(void); void ScriptContext1_Init(void); bool8 ScriptContext2_RunScript(void); void ScriptContext1_SetupScript(u8 *ptr); void ScriptContext1_Stop(void); void EnableBothScriptContexts(); void ScriptContext2_RunNewScript(u8 *ptr); #endif // GUARD_SCRIPT_H