Reintroduce MF_FIRE
This commit is contained in:
parent
7731e6dc6b
commit
577c0ac4b4
7 changed files with 42 additions and 15 deletions
|
|
@ -5118,7 +5118,7 @@ static INT16 Consistancy(void)
|
|||
|
||||
mo = (mobj_t *)th;
|
||||
|
||||
if (mo->flags & (MF_SPECIAL | MF_SOLID | MF_PUSHABLE | MF_BOSS | MF_MISSILE | MF_SPRING | MF_MONITOR | MF_ENEMY | MF_PAIN | MF_STICKY))
|
||||
if (mo->flags & (MF_SPECIAL | MF_SOLID | MF_PUSHABLE | MF_BOSS | MF_MISSILE | MF_SPRING | MF_MONITOR | MF_FIRE | MF_ENEMY | MF_PAIN | MF_STICKY))
|
||||
{
|
||||
ret -= mo->type;
|
||||
ret += mo->x;
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ const char *const MOBJFLAG_LIST[] = {
|
|||
"SPRING",
|
||||
"MONITOR",
|
||||
"NOTHINK",
|
||||
"FIRE",
|
||||
"NOCLIPHEIGHT",
|
||||
"ENEMY",
|
||||
"SCENERY",
|
||||
|
|
|
|||
|
|
@ -239,6 +239,11 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
P_DamageMobj(toucher, special, special, 1, DMG_NORMAL);
|
||||
return;
|
||||
}
|
||||
else if (special->flags & MF_FIRE)
|
||||
{
|
||||
P_DamageMobj(toucher, special, special, 1, DMG_NORMAL);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// We now identify by object type, not sprite! Tails 04-11-2001
|
||||
|
|
|
|||
|
|
@ -612,6 +612,8 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
if (tm.thing->player && tm.thing->flags & MF_SHOOTABLE && thing->health > 0)
|
||||
{
|
||||
UINT32 damagetype = (tm.thing->info->mass & DMG_TYPEMASK);
|
||||
if (!damagetype && thing->flags & MF_FIRE) // BURN!
|
||||
damagetype = DMG_NORMAL;
|
||||
P_DamageMobj(tm.thing, thing, thing, 1, damagetype);
|
||||
}
|
||||
return BMIT_CONTINUE;
|
||||
|
|
@ -626,6 +628,8 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
if (thing->player && thing->flags & MF_SHOOTABLE && tm.thing->health > 0)
|
||||
{
|
||||
UINT32 damagetype = (tm.thing->info->mass & DMG_TYPEMASK);
|
||||
if (!damagetype && tm.thing->flags & MF_FIRE) // BURN!
|
||||
damagetype = DMG_NORMAL;
|
||||
P_DamageMobj(thing, tm.thing, tm.thing, 1, damagetype);
|
||||
}
|
||||
return BMIT_CONTINUE;
|
||||
|
|
|
|||
16
src/p_mobj.c
16
src/p_mobj.c
|
|
@ -6349,6 +6349,15 @@ static boolean P_MobjPushableThink(mobj_t *mobj)
|
|||
{
|
||||
P_MobjCheckWater(mobj);
|
||||
P_PushableThinker(mobj);
|
||||
|
||||
// Extinguish fire objects in water. (Yes, it's extraordinarily rare to have a pushable flame object, but Brak uses such a case.)
|
||||
if ((mobj->flags & MF_FIRE) && !(mobj->eflags & MFE_TOUCHLAVA)
|
||||
&& (mobj->eflags & (MFE_UNDERWATER | MFE_TOUCHWATER)))
|
||||
{
|
||||
P_KillMobj(mobj, NULL, NULL, 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -8400,6 +8409,13 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
default:
|
||||
// check mobj against possible water content, before movement code
|
||||
P_MobjCheckWater(mobj);
|
||||
// Extinguish fire objects in water
|
||||
if ((mobj->flags & MF_FIRE) && !(mobj->eflags & MFE_TOUCHLAVA)
|
||||
&& (mobj->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER)))
|
||||
{
|
||||
P_KillMobj(mobj, NULL, NULL, 0);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
27
src/p_mobj.h
27
src/p_mobj.h
|
|
@ -141,31 +141,32 @@ typedef enum
|
|||
MF_MONITOR = 1<<17,
|
||||
// Don't run the thinker for this object.
|
||||
MF_NOTHINK = 1<<18,
|
||||
// Fire object. Doesn't harm if you have fire shield.
|
||||
MF_FIRE = 1<<19,
|
||||
// Don't adjust z if below or above floorz/ceilingz
|
||||
MF_NOCLIPHEIGHT = 1<<19,
|
||||
MF_NOCLIPHEIGHT = 1<<20,
|
||||
// This mobj is an enemy!
|
||||
MF_ENEMY = 1<<20,
|
||||
MF_ENEMY = 1<<21,
|
||||
// Scenery (uses scenery thinker).
|
||||
MF_SCENERY = 1<<21,
|
||||
MF_SCENERY = 1<<22,
|
||||
// Painful (shit hurts).
|
||||
MF_PAIN = 1<<22,
|
||||
MF_PAIN = 1<<23,
|
||||
// This mobj will stick to any surface or solid object it touches.
|
||||
MF_STICKY = 1<<23,
|
||||
MF_STICKY = 1<<24,
|
||||
// Object uses terrain effects. (Overlays, footsteps, etc)
|
||||
MF_APPLYTERRAIN = 1<<24,
|
||||
MF_APPLYTERRAIN = 1<<25,
|
||||
// for chase camera, don't be blocked by things (partial clipping)
|
||||
MF_NOCLIPTHING = 1<<25,
|
||||
MF_NOCLIPTHING = 1<<26,
|
||||
// Missile bounces like a grenade.
|
||||
MF_GRENADEBOUNCE = 1<<26,
|
||||
MF_GRENADEBOUNCE = 1<<27,
|
||||
// Run the action thinker on spawn.
|
||||
MF_RUNSPAWNFUNC = 1<<27,
|
||||
MF_RUNSPAWNFUNC = 1<<28,
|
||||
// Don't remap in Encore mode. (Not a drawflag so that it's settable by mobjinfo.)
|
||||
MF_DONTENCOREMAP = 1<<28,
|
||||
MF_DONTENCOREMAP = 1<<29,
|
||||
// Hitbox extends just as far below as above.
|
||||
MF_PICKUPFROMBELOW = 1<<29,
|
||||
MF_PICKUPFROMBELOW = 1<<30,
|
||||
// Bounce off walls and things.
|
||||
MF_BOUNCE = 1<<30,
|
||||
//free = (INT32)(1U<<31),
|
||||
MF_BOUNCE = 1<<31,
|
||||
// no more free slots, next up I suppose we can get rid of shit like MF_BOXICON?
|
||||
} mobjflag_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ static boolean is_tangible (mobj_t *thing)
|
|||
// These objects probably do nothing! :D
|
||||
if ((thing->flags & (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE
|
||||
|MF_PUSHABLE|MF_BOSS|MF_MISSILE|MF_SPRING
|
||||
|MF_MONITOR|MF_ENEMY|MF_PAIN|MF_STICKY
|
||||
|MF_MONITOR|MF_ENEMY|MF_FIRE|MF_PAIN|MF_STICKY
|
||||
|MF_PICKUPFROMBELOW)) == 0U)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue