Add "damagetype" argument to functions for Lua hooks ShouldDamage, MobjDamage, MobjDeath and HurtMsg
This commit is contained in:
parent
35d89a4fbf
commit
ea65e9e54f
|
@ -62,9 +62,9 @@ boolean LUAh_TouchSpecial(mobj_t *special, mobj_t *toucher); // Hook for P_Touch
|
||||||
#define LUAh_MobjFuse(mo) LUAh_MobjHook(mo, hook_MobjFuse) // Hook for mobj->fuse == 0 by mobj type
|
#define LUAh_MobjFuse(mo) LUAh_MobjHook(mo, hook_MobjFuse) // Hook for mobj->fuse == 0 by mobj type
|
||||||
#define LUAh_MobjThinker(mo) LUAh_MobjHook(mo, hook_MobjThinker) // Hook for P_MobjThinker or P_SceneryThinker by mobj type
|
#define LUAh_MobjThinker(mo) LUAh_MobjHook(mo, hook_MobjThinker) // Hook for P_MobjThinker or P_SceneryThinker by mobj type
|
||||||
#define LUAh_BossThinker(mo) LUAh_MobjHook(mo, hook_BossThinker) // Hook for P_GenericBossThinker by mobj type
|
#define LUAh_BossThinker(mo) LUAh_MobjHook(mo, hook_BossThinker) // Hook for P_GenericBossThinker by mobj type
|
||||||
UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage); // Hook for P_DamageMobj by mobj type (Should mobj take damage?)
|
UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype); // Hook for P_DamageMobj by mobj type (Should mobj take damage?)
|
||||||
boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage); // Hook for P_DamageMobj by mobj type (Mobj actually takes damage!)
|
boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype); // Hook for P_DamageMobj by mobj type (Mobj actually takes damage!)
|
||||||
boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source); // Hook for P_KillMobj by mobj type
|
boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype); // Hook for P_KillMobj by mobj type
|
||||||
#define LUAh_BossDeath(mo) LUAh_MobjHook(mo, hook_BossDeath) // Hook for A_BossDeath by mobj type
|
#define LUAh_BossDeath(mo) LUAh_MobjHook(mo, hook_BossDeath) // Hook for A_BossDeath by mobj type
|
||||||
#define LUAh_MobjRemoved(mo) LUAh_MobjHook(mo, hook_MobjRemoved) // Hook for P_RemoveMobj by mobj type
|
#define LUAh_MobjRemoved(mo) LUAh_MobjHook(mo, hook_MobjRemoved) // Hook for P_RemoveMobj by mobj type
|
||||||
#define LUAh_JumpSpecial(player) LUAh_PlayerHook(player, hook_JumpSpecial) // Hook for P_DoJumpStuff (Any-jumping)
|
#define LUAh_JumpSpecial(player) LUAh_PlayerHook(player, hook_JumpSpecial) // Hook for P_DoJumpStuff (Any-jumping)
|
||||||
|
@ -75,7 +75,7 @@ boolean LUAh_BotTiccmd(player_t *bot, ticcmd_t *cmd); // Hook for B_BuildTiccmd
|
||||||
boolean LUAh_BotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd); // Hook for B_BuildTailsTiccmd by skin name
|
boolean LUAh_BotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd); // Hook for B_BuildTailsTiccmd by skin name
|
||||||
boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo, sector_t *sector); // Hook for linedef executors
|
boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo, sector_t *sector); // Hook for linedef executors
|
||||||
boolean LUAh_PlayerMsg(int source, int target, int flags, char *msg); // Hook for chat messages
|
boolean LUAh_PlayerMsg(int source, int target, int flags, char *msg); // Hook for chat messages
|
||||||
boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source); // Hook for hurt messages
|
boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source, UINT8 damagetype); // Hook for hurt messages
|
||||||
#define LUAh_PlayerSpawn(player) LUAh_PlayerHook(player, hook_PlayerSpawn) // Hook for G_SpawnPlayer
|
#define LUAh_PlayerSpawn(player) LUAh_PlayerHook(player, hook_PlayerSpawn) // Hook for G_SpawnPlayer
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -412,7 +412,7 @@ boolean LUAh_TouchSpecial(mobj_t *special, mobj_t *toucher)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook for P_DamageMobj by mobj type (Should mobj take damage?)
|
// Hook for P_DamageMobj by mobj type (Should mobj take damage?)
|
||||||
UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage)
|
UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||||
{
|
{
|
||||||
hook_p hookp;
|
hook_p hookp;
|
||||||
UINT8 shouldDamage = 0; // 0 = default, 1 = force yes, 2 = force no.
|
UINT8 shouldDamage = 0; // 0 = default, 1 = force yes, 2 = force no.
|
||||||
|
@ -431,14 +431,16 @@ UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
||||||
LUA_PushUserdata(gL, source, META_MOBJ);
|
LUA_PushUserdata(gL, source, META_MOBJ);
|
||||||
lua_pushinteger(gL, damage);
|
lua_pushinteger(gL, damage);
|
||||||
|
lua_pushinteger(gL, damagetype);
|
||||||
}
|
}
|
||||||
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
||||||
lua_gettable(gL, LUA_REGISTRYINDEX);
|
lua_gettable(gL, LUA_REGISTRYINDEX);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
if (lua_pcall(gL, 4, 1, 0)) {
|
lua_pushvalue(gL, -6);
|
||||||
|
if (lua_pcall(gL, 5, 1, 0)) {
|
||||||
if (!hookp->error || cv_debug & DBG_LUA)
|
if (!hookp->error || cv_debug & DBG_LUA)
|
||||||
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
||||||
lua_pop(gL, 1);
|
lua_pop(gL, 1);
|
||||||
|
@ -460,7 +462,7 @@ UINT8 LUAh_ShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook for P_DamageMobj by mobj type (Mobj actually takes damage!)
|
// Hook for P_DamageMobj by mobj type (Mobj actually takes damage!)
|
||||||
boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage)
|
boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||||
{
|
{
|
||||||
hook_p hookp;
|
hook_p hookp;
|
||||||
boolean hooked = false;
|
boolean hooked = false;
|
||||||
|
@ -479,14 +481,16 @@ boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
||||||
LUA_PushUserdata(gL, source, META_MOBJ);
|
LUA_PushUserdata(gL, source, META_MOBJ);
|
||||||
lua_pushinteger(gL, damage);
|
lua_pushinteger(gL, damage);
|
||||||
|
lua_pushinteger(gL, damagetype);
|
||||||
}
|
}
|
||||||
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
||||||
lua_gettable(gL, LUA_REGISTRYINDEX);
|
lua_gettable(gL, LUA_REGISTRYINDEX);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
lua_pushvalue(gL, -5);
|
lua_pushvalue(gL, -6);
|
||||||
if (lua_pcall(gL, 4, 1, 0)) {
|
lua_pushvalue(gL, -6);
|
||||||
|
if (lua_pcall(gL, 5, 1, 0)) {
|
||||||
if (!hookp->error || cv_debug & DBG_LUA)
|
if (!hookp->error || cv_debug & DBG_LUA)
|
||||||
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
||||||
lua_pop(gL, 1);
|
lua_pop(gL, 1);
|
||||||
|
@ -503,7 +507,7 @@ boolean LUAh_MobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook for P_KillMobj by mobj type
|
// Hook for P_KillMobj by mobj type
|
||||||
boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype)
|
||||||
{
|
{
|
||||||
hook_p hookp;
|
hook_p hookp;
|
||||||
boolean hooked = false;
|
boolean hooked = false;
|
||||||
|
@ -521,13 +525,15 @@ boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
LUA_PushUserdata(gL, target, META_MOBJ);
|
LUA_PushUserdata(gL, target, META_MOBJ);
|
||||||
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
||||||
LUA_PushUserdata(gL, source, META_MOBJ);
|
LUA_PushUserdata(gL, source, META_MOBJ);
|
||||||
|
lua_pushinteger(gL, damagetype);
|
||||||
}
|
}
|
||||||
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
||||||
lua_gettable(gL, LUA_REGISTRYINDEX);
|
lua_gettable(gL, LUA_REGISTRYINDEX);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
if (lua_pcall(gL, 3, 1, 0)) {
|
lua_pushvalue(gL, -5);
|
||||||
|
if (lua_pcall(gL, 4, 1, 0)) {
|
||||||
if (!hookp->error || cv_debug & DBG_LUA)
|
if (!hookp->error || cv_debug & DBG_LUA)
|
||||||
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
||||||
lua_pop(gL, 1);
|
lua_pop(gL, 1);
|
||||||
|
@ -729,7 +735,7 @@ boolean LUAh_PlayerMsg(int source, int target, int flags, char *msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hook for hurt messages
|
// Hook for hurt messages
|
||||||
boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source)
|
boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source, UINT8 damagetype)
|
||||||
{
|
{
|
||||||
hook_p hookp;
|
hook_p hookp;
|
||||||
boolean hooked = false;
|
boolean hooked = false;
|
||||||
|
@ -747,13 +753,15 @@ boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||||
LUA_PushUserdata(gL, player, META_PLAYER);
|
LUA_PushUserdata(gL, player, META_PLAYER);
|
||||||
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
LUA_PushUserdata(gL, inflictor, META_MOBJ);
|
||||||
LUA_PushUserdata(gL, source, META_MOBJ);
|
LUA_PushUserdata(gL, source, META_MOBJ);
|
||||||
|
lua_pushinteger(gL, damagetype);
|
||||||
}
|
}
|
||||||
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
lua_pushfstring(gL, FMT_HOOKID, hookp->id);
|
||||||
lua_gettable(gL, LUA_REGISTRYINDEX);
|
lua_gettable(gL, LUA_REGISTRYINDEX);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
lua_pushvalue(gL, -4);
|
lua_pushvalue(gL, -5);
|
||||||
if (lua_pcall(gL, 3, 1, 0)) {
|
lua_pushvalue(gL, -5);
|
||||||
|
if (lua_pcall(gL, 4, 1, 0)) {
|
||||||
if (!hookp->error || cv_debug & DBG_LUA)
|
if (!hookp->error || cv_debug & DBG_LUA)
|
||||||
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
CONS_Alert(CONS_WARNING,"%s\n",lua_tostring(gL, -1));
|
||||||
lua_pop(gL, 1);
|
lua_pop(gL, 1);
|
||||||
|
|
|
@ -1565,7 +1565,7 @@ static void P_HitDeathMessages(player_t *player, mobj_t *inflictor, mobj_t *sour
|
||||||
return; // Presumably it's obvious what's happening in splitscreen.
|
return; // Presumably it's obvious what's happening in splitscreen.
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_HurtMsg(player, inflictor, source))
|
if (LUAh_HurtMsg(player, inflictor, source, damagetype))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2037,7 +2037,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
target->health = 0; // This makes it easy to check if something's dead elsewhere.
|
target->health = 0; // This makes it easy to check if something's dead elsewhere.
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_MobjDeath(target, inflictor, source) || P_MobjWasRemoved(target))
|
if (LUAh_MobjDeath(target, inflictor, source, damagetype) || P_MobjWasRemoved(target))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2917,7 +2917,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
// Everything above here can't be forced.
|
// Everything above here can't be forced.
|
||||||
if (!metalrecording)
|
if (!metalrecording)
|
||||||
{
|
{
|
||||||
UINT8 shouldForce = LUAh_ShouldDamage(target, inflictor, source, damage);
|
UINT8 shouldForce = LUAh_ShouldDamage(target, inflictor, source, damage, damagetype);
|
||||||
if (P_MobjWasRemoved(target))
|
if (P_MobjWasRemoved(target))
|
||||||
return (shouldForce == 1); // mobj was removed
|
return (shouldForce == 1); // mobj was removed
|
||||||
if (shouldForce == 1)
|
if (shouldForce == 1)
|
||||||
|
@ -2960,7 +2960,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_MobjDamage(target, inflictor, source, damage) || P_MobjWasRemoved(target))
|
if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype) || P_MobjWasRemoved(target))
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2988,7 +2988,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_MobjDamage(target, inflictor, source, damage) || P_MobjWasRemoved(target))
|
if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype) || P_MobjWasRemoved(target))
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2998,7 +2998,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
else if (target->flags & MF_ENEMY)
|
else if (target->flags & MF_ENEMY)
|
||||||
{
|
{
|
||||||
if (LUAh_MobjDamage(target, inflictor, source, damage) || P_MobjWasRemoved(target))
|
if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype) || P_MobjWasRemoved(target))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3046,7 +3046,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
return false; // Don't run eachother over in special stages and team games and such
|
return false; // Don't run eachother over in special stages and team games and such
|
||||||
}
|
}
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUAh_MobjDamage(target, inflictor, source, damage))
|
if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype))
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
P_NiGHTSDamage(target, source); // -5s :(
|
P_NiGHTSDamage(target, source); // -5s :(
|
||||||
|
@ -3108,7 +3108,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
&& player->powers[pw_super]))
|
&& player->powers[pw_super]))
|
||||||
{
|
{
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (!LUAh_MobjDamage(target, inflictor, source, damage))
|
if (!LUAh_MobjDamage(target, inflictor, source, damage, damagetype))
|
||||||
#endif
|
#endif
|
||||||
P_SuperDamage(player, inflictor, source, damage);
|
P_SuperDamage(player, inflictor, source, damage);
|
||||||
return true;
|
return true;
|
||||||
|
@ -3117,7 +3117,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
else if (LUAh_MobjDamage(target, inflictor, source, damage))
|
else if (LUAh_MobjDamage(target, inflictor, source, damage, damagetype))
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
else if (player->powers[pw_shield] || player->bot) //If One-Hit Shield
|
else if (player->powers[pw_shield] || player->bot) //If One-Hit Shield
|
||||||
|
|
Loading…
Reference in New Issue