/* The Lunatic Interpreter, part of EDuke32. Game-side stuff. */ #ifndef EDUKE32_LUNATIC_H_ #define EDUKE32_LUNATIC_H_ #include "lunatic.h" #include "events_defs.h" // MAXEVENTS #include "actors.h" // con_move_t, con_action_t #ifdef __cplusplus extern "C" { #endif extern L_State g_ElState; // actor initialization data typedef struct { con_move_t mov; int16_t movflags; int16_t strength; con_action_t act; uint8_t haveit; // shouldn't be used directly } el_actor_t; extern uint8_t g_elEvents[MAXEVENTS]; // shouldn't be used directly extern el_actor_t g_elActors[MAXTILES]; extern int32_t g_elEventError; extern uint32_t g_eventCalls[MAXEVENTS], g_actorCalls[MAXTILES]; extern double g_eventTotalMs[MAXEVENTS], g_actorTotalMs[MAXTILES], g_actorMinMs[MAXTILES], g_actorMaxMs[MAXTILES]; // -- functions -- void El_PrintTimes(void); void El_ClearErrors(void); void El_DisplayErrors(void); int32_t El_CreateState(L_State *estate, const char *name); void El_DestroyState(L_State *estate); int32_t El_CallEvent(L_State *estate, int32_t eventidx, int32_t iActor, int32_t iPlayer, int32_t lDist, int32_t *iReturn); int32_t El_CallActor(L_State *estate, int32_t actortile, int32_t iActor, int32_t iPlayer, int32_t lDist); extern int8_t el_addNewErrors; // add new errors to display? void El_OnError(const char *str); extern int32_t (*El_RestoreGamevars)(const char *savecode); static inline int32_t El_HaveEvent(int32_t eventidx) { return g_elEvents[eventidx]!=0; } static inline int32_t El_HaveActor(int32_t actortile) { return g_elActors[actortile].haveit!=0; } typedef struct { uint32_t x, y, z, c; } rng_jkiss_t; uint32_t rand_jkiss_u32(rng_jkiss_t *s); double rand_jkiss_dbl(rng_jkiss_t *s); #ifdef __cplusplus } #endif #endif