Reintroduce MF_FIRE

This commit is contained in:
NepDisk 2025-01-25 11:20:35 -05:00
parent 7731e6dc6b
commit 577c0ac4b4
7 changed files with 42 additions and 15 deletions

View file

@ -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;

View file

@ -123,6 +123,7 @@ const char *const MOBJFLAG_LIST[] = {
"SPRING",
"MONITOR",
"NOTHINK",
"FIRE",
"NOCLIPHEIGHT",
"ENEMY",
"SCENERY",

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;