From d349e9bf839f5d1b4e41ce43b8281744d755548c Mon Sep 17 00:00:00 2001 From: Louis-Antoine Date: Wed, 21 Oct 2020 22:48:00 +0200 Subject: [PATCH] Only invoke the Lua API for mobj hooks that need it --- src/lua_hooklib.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index a5d4af412..e349dbea8 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -264,6 +264,9 @@ boolean LUAh_MobjHook(mobj_t *mo, enum hook which) I_Assert(mo->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[mo->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -536,6 +539,9 @@ UINT8 LUAh_MobjCollideHook(mobj_t *thing1, mobj_t *thing2, enum hook which) I_Assert(thing1->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[thing1->type])) + return 0; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -615,6 +621,9 @@ UINT8 LUAh_MobjLineCollideHook(mobj_t *thing, line_t *line, enum hook which) I_Assert(thing->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[thing->type])) + return 0; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -695,6 +704,9 @@ boolean LUAh_MobjThinker(mobj_t *mo) I_Assert(mo->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[mo->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -747,10 +759,13 @@ boolean LUAh_TouchSpecial(mobj_t *special, mobj_t *toucher) hook_p hookp; boolean hooked = false; if (!gL || !(hooksAvailable[hook_TouchSpecial/8] & (1<<(hook_TouchSpecial%8)))) - return 0; + return false; I_Assert(special->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[special->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -821,6 +836,9 @@ UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 I_Assert(target->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[target->type])) + return 0; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -908,10 +926,13 @@ boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 hook_p hookp; boolean hooked = false; if (!gL || !(hooksAvailable[hook_MobjDamage/8] & (1<<(hook_MobjDamage%8)))) - return 0; + return false; I_Assert(target->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[target->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -990,10 +1011,13 @@ boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 hook_p hookp; boolean hooked = false; if (!gL || !(hooksAvailable[hook_MobjDeath/8] & (1<<(hook_MobjDeath%8)))) - return 0; + return false; I_Assert(target->type < NUMMOBJTYPES); + if (!(mobjhooks[MT_NULL] || mobjhooks[target->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -1392,6 +1416,9 @@ boolean LUAh_MapThingSpawn(mobj_t *mo, mapthing_t *mthing) if (!gL || !(hooksAvailable[hook_MapThingSpawn/8] & (1<<(hook_MapThingSpawn%8)))) return false; + if (!(mobjhooks[MT_NULL] || mobjhooks[mo->type])) + return false; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage); @@ -1460,6 +1487,9 @@ boolean LUAh_FollowMobj(player_t *player, mobj_t *mobj) if (!gL || !(hooksAvailable[hook_FollowMobj/8] & (1<<(hook_FollowMobj%8)))) return 0; + if (!(mobjhooks[MT_NULL] || mobjhooks[mobj->type])) + return 0; + lua_settop(gL, 0); lua_pushcfunction(gL, LUA_GetErrorMessage);