Update Lua compat logic for Damage
This commit is contained in:
parent
95a018c82c
commit
e883c6968e
2 changed files with 14 additions and 3 deletions
|
|
@ -1850,7 +1850,9 @@ static int lib_pDamageMobj(lua_State *L)
|
|||
damage = (INT32)luaL_optinteger(L, 4, 1);
|
||||
|
||||
if ((damage == 10000) && lua_isnil(L, 5))
|
||||
damagetype = DMG_TIMEOVER;
|
||||
damagetype = DMG_INSTAKILL;
|
||||
else if ((damage == 42000) && lua_isnil(L, 5))
|
||||
damagetype = DMG_SPECTATOR;
|
||||
else
|
||||
damagetype = (UINT8)luaL_optinteger(L, 5, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -2047,6 +2047,7 @@ static UINT8 P_ShouldHookDamage(mobj_t *target, mobj_t *inflictor, mobj_t *sourc
|
|||
{
|
||||
boolean targetisplayer = false;
|
||||
const boolean killer = (damagetype & DMG_DEATHMASK);
|
||||
const boolean specdamage = (damagetype == DMG_SPECTATOR);
|
||||
INT32 use_damage = damage;
|
||||
|
||||
if (target && (!P_MobjWasRemoved(target)) && target->player)
|
||||
|
|
@ -2054,7 +2055,12 @@ static UINT8 P_ShouldHookDamage(mobj_t *target, mobj_t *inflictor, mobj_t *sourc
|
|||
targetisplayer = true;
|
||||
}
|
||||
|
||||
if (lua_compatmode && targetisplayer && killer)
|
||||
if (lua_compatmode && targetisplayer && specdamage)
|
||||
{
|
||||
// Before the introduction of dedicated damage types, this magic number was used to kill spectator players.
|
||||
use_damage = 42000;
|
||||
}
|
||||
else if (lua_compatmode && targetisplayer && killer)
|
||||
{
|
||||
// Before the introduction of dedicated damage types, this magic number was used to kill players.
|
||||
use_damage = 10000;
|
||||
|
|
@ -2068,7 +2074,7 @@ static UINT8 P_ShouldHookDamage(mobj_t *target, mobj_t *inflictor, mobj_t *sourc
|
|||
const UINT8 type = (damagetype & DMG_TYPEMASK);
|
||||
status = shouldDamage;
|
||||
|
||||
if (!killer)
|
||||
if (!killer && !specdamage)
|
||||
{
|
||||
if (shouldSpin > 0 && ((type == DMG_NORMAL) || (type == DMG_WIPEOUT) || (type == DMG_FLIPOVER)))
|
||||
status = shouldSpin;
|
||||
|
|
@ -2116,6 +2122,9 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
if (damagetype != DMG_SPECTATOR && target->player && target->player->spectator)
|
||||
return false;
|
||||
|
||||
if (damagetype == DMG_SPECTATOR && target->player && target->player->spectator)
|
||||
damagetype = DMG_INSTAKILL;
|
||||
|
||||
if (!P_MobjWasRemoved(source) && source->player && source->player->spectator)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue