wip: Old damage hooks
Don't seem to work as of yet.
This commit is contained in:
parent
3be3d83738
commit
1358541f75
4 changed files with 118 additions and 4 deletions
|
|
@ -41,7 +41,13 @@ automatically.
|
|||
X (MobjThinker),/* P_MobjThinker, P_SceneryThinker */\
|
||||
X (BossThinker),/* P_GenericBossThinker */\
|
||||
X (ShouldDamage),/* P_DamageMobj (Should mobj take damage?) */\
|
||||
X (ShouldSpin),/* P_DamageMobj (Should mobj take spinout damage?) */\
|
||||
X (ShouldExplode),/* P_DamageMobj (Should mobj take explosion damage?) */\
|
||||
X (ShouldSquish),/* P_DamageMobj (Should mobj take squish damage?) */\
|
||||
X (MobjDamage),/* P_DamageMobj (Mobj actually takes damage!) */\
|
||||
X (PlayerSpin),/* P_DamageMobj (Mobj actually takes damage!) */\
|
||||
X (PlayerExplode),/* P_DamageMobj (Mobj actually takes damage!) */\
|
||||
X (PlayerSquish),/* P_DamageMobj (Mobj actually takes damage!) */\
|
||||
X (MobjDeath),/* P_KillMobj */\
|
||||
X (BossDeath),/* A_BossDeath */\
|
||||
X (MobjRemoved),/* P_RemoveMobj */\
|
||||
|
|
@ -134,7 +140,13 @@ void LUA_HookThinkFrame(void);
|
|||
int LUA_HookMobjLineCollide(mobj_t *, line_t *);
|
||||
int LUA_HookTouchSpecial(mobj_t *special, mobj_t *toucher);
|
||||
int LUA_HookShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookShouldSpin(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookShouldExplode(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookShouldSquish(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookMobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookPlayerSpin(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookPlayerExplode(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookPlayerSquish(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype);
|
||||
int LUA_HookMobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype);
|
||||
int LUA_HookMobjMoveBlocked(mobj_t *, mobj_t *, line_t *);
|
||||
void LUA_HookSpecialExecute(activator_t *activator, INT32 *args, char **stringargs);
|
||||
|
|
|
|||
|
|
@ -749,10 +749,59 @@ int LUA_HookShouldDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT3
|
|||
MOBJ_HOOK(ShouldDamage), res_force);
|
||||
}
|
||||
|
||||
int LUA_HookShouldSpin(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_NORMAL || damagetype & DMG_WIPEOUT || damagetype & DMG_STING)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(ShouldSpin), res_force);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookShouldExplode(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_EXPLODE || damagetype & DMG_KARMA)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(ShouldExplode), res_force);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookShouldSquish(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_SQUISH)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(ShouldSquish), res_force);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookMobjDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(MobjDamage), res_true);
|
||||
MOBJ_HOOK(MobjDamage), res_true);
|
||||
}
|
||||
|
||||
int LUA_HookPlayerSpin(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_NORMAL || damagetype & DMG_WIPEOUT || damagetype & DMG_STING)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(PlayerSpin), res_true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookPlayerExplode(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_EXPLODE || damagetype & DMG_KARMA)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(PlayerExplode), res_true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookPlayerSquish(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
if (damagetype & DMG_SQUISH)
|
||||
return damage_hook(target, inflictor, source, damage, damagetype,
|
||||
MOBJ_HOOK(PlayerSquish), res_true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LUA_HookMobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damagetype)
|
||||
|
|
|
|||
|
|
@ -197,6 +197,13 @@ static int player_get(lua_State *L)
|
|||
LUA_PushUserdata(L, &plr->oldcmd, META_TICCMD);
|
||||
else if (fastcmp(field,"playerstate"))
|
||||
lua_pushinteger(L, plr->playerstate);
|
||||
else if (fastcmp(field,"health"))
|
||||
{
|
||||
if (plr->mo)
|
||||
lua_pushinteger(L, plr->mo->health);
|
||||
else
|
||||
lua_pushinteger(L, 0);
|
||||
}
|
||||
else if (fastcmp(field,"viewz"))
|
||||
lua_pushfixed(L, plr->viewz);
|
||||
else if (fastcmp(field,"viewheight"))
|
||||
|
|
|
|||
|
|
@ -1864,6 +1864,51 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
return true;
|
||||
}
|
||||
|
||||
// Determines what ShouldX Hook's status should be used.
|
||||
static UINT8 P_ShouldHookDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
UINT8 shouldDamage = LUA_HookShouldDamage(target, inflictor, source, damage, damagetype);
|
||||
UINT8 shouldSpin = LUA_HookShouldSpin(target, inflictor, source, damage, damagetype);
|
||||
UINT8 shouldExplode = LUA_HookShouldExplode(target, inflictor, source, damage, damagetype);
|
||||
UINT8 shouldSquish = LUA_HookShouldSquish(target, inflictor, source, damage, damagetype);
|
||||
UINT8 status;
|
||||
|
||||
status = shouldDamage;
|
||||
|
||||
if (shouldSpin > 0 && ((damagetype & DMG_NORMAL) || (damagetype & DMG_WIPEOUT) || (damagetype & DMG_STING)))
|
||||
status = shouldSpin;
|
||||
else if (shouldExplode > 0 && ((damagetype & DMG_EXPLODE) || (damagetype & DMG_KARMA)))
|
||||
status = shouldExplode;
|
||||
else if (shouldSquish > 0 && (damagetype & DMG_SQUISH))
|
||||
status = shouldSquish;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
// Determines what Damage Hook's status should be used.
|
||||
static UINT8 P_HookDamage(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
UINT8 MobjDamage = LUA_HookMobjDamage(target, inflictor, source, damage, damagetype);
|
||||
UINT8 PlayerSpin = LUA_HookPlayerSpin(target, inflictor, source, damage, damagetype);
|
||||
UINT8 PlayerExplode = LUA_HookPlayerExplode(target, inflictor, source, damage, damagetype);
|
||||
UINT8 PlayerSquish = LUA_HookPlayerSquish(target, inflictor, source, damage, damagetype);
|
||||
UINT8 status;
|
||||
|
||||
status = MobjDamage;
|
||||
|
||||
if (target->type != MT_PLAYER)
|
||||
return status;
|
||||
|
||||
if (PlayerSpin > 0 && ((damagetype & DMG_NORMAL) || (damagetype & DMG_WIPEOUT) || (damagetype & DMG_STING)))
|
||||
status = PlayerSpin;
|
||||
else if (PlayerExplode > 0 && ((damagetype & DMG_EXPLODE) || (damagetype & DMG_KARMA)))
|
||||
status = PlayerExplode;
|
||||
else if (PlayerSquish > 0 && (damagetype & DMG_SQUISH))
|
||||
status = PlayerSquish;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/** Damages an object, which may or may not be a player.
|
||||
* For melee attacks, source and inflictor are the same.
|
||||
*
|
||||
|
|
@ -1881,6 +1926,7 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source,
|
|||
* \todo Clean up this mess, split into multiple functions.
|
||||
* \sa P_KillMobj
|
||||
*/
|
||||
|
||||
boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype)
|
||||
{
|
||||
player_t *player;
|
||||
|
|
@ -1902,7 +1948,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
// Everything above here can't be forced.
|
||||
if (!metalrecording)
|
||||
{
|
||||
UINT8 shouldForce = LUA_HookShouldDamage(target, inflictor, source, damage, damagetype);
|
||||
UINT8 shouldForce = P_ShouldHookDamage(target, inflictor, source, damage, damagetype);
|
||||
if (P_MobjWasRemoved(target))
|
||||
return (shouldForce == 1); // mobj was removed
|
||||
if (shouldForce == 1)
|
||||
|
|
@ -1925,7 +1971,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (!force && target->flags2 & MF2_FRET) // Currently flashing from being hit
|
||||
return false;
|
||||
|
||||
if (LUA_HookMobjDamage(target, inflictor, source, damage, damagetype) || P_MobjWasRemoved(target))
|
||||
if (P_HookDamage(target, inflictor, source, damage, damagetype) || P_MobjWasRemoved(target))
|
||||
return true;
|
||||
|
||||
if (target->health > 1)
|
||||
|
|
@ -1955,7 +2001,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (!P_KillPlayer(player, inflictor, source, damagetype))
|
||||
return false;
|
||||
}
|
||||
else if (LUA_HookMobjDamage(target, inflictor, source, damage, damagetype))
|
||||
else if (P_HookDamage(target, inflictor, source, damage, damagetype))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue