ZDoom-specific bits in BEX

From ZDoom Wiki
Jump to navigation Jump to search

In DeHackEd, you can apply a set of bits to define the properties of a given Thing. Originally this was done with a number. You would check some boxes in DeHackEd and get a number such as 65535 to define several properties. In ZDoom, you can use the numeric bit syntax, but on top of it you can define additional properties. So, if you have an object that already has a bunch of properties you want to keep, but you want to add one more without going through the hassle of recalculating the bits -- or even worse, the property you want to apply to the Thing isn't available in DeHackEd (is ZDoom specific) -- then you can just add "+ MF_SPAWNCEILING" or whatever the bit you want happens to be right after the number. It would look like this: "Bits = 65535 + MF_SPAWNCEILING"

The following is straight out of the source (thanks to Enjay who fetched it for me), but it is out of date. I won't bother formatting this right now because I'm sure somebody will complete the list for me and format it much prettier.

It is safe practice when setting any of these bits to explicitly also set all others you want to be set as well, as sometimes ZDoom will reset certain bits. Usually Randy will fix such a problem if you report it on the forums. Also, last I heard you can't use the MF3 or MF4 bits in DEH/BEX yet.

MF_SPECIAL  = 0x00000001,		// call P_SpecialThing when touched
MF_SOLID  = 0x00000002,
MF_SHOOTABLE  = 0x00000004,	
MF_NOSECTOR  = 0x00000008,		// don't use the sector links
					// (invisible but touchable)
MF_NOBLOCKMAP  = 0x00000010,		// don't use the blocklinks
					// (inert but displayable)
MF_AMBUSH  = 0x00000020,		// actor's Ambush flag
MF_JUSTHIT  = 0x00000040,		// try to attack right back
MF_JUSTATTACKED = 0x00000080,		// take at least one step before attacking
MF_SPAWNCEILING = 0x00000100,		// hang from ceiling instead of floor
MF_NOGRAVITY  = 0x00000200,		// don't apply gravity every tic

// movement flags
MF_DROPOFF  = 0x00000400,		// allow jumps from high places
MF_PICKUP  = 0x00000800,		// for players to pick up items
MF_NOCLIP  = 0x00001000,		// player cheat
MF_SLIDE  = 0x00002000,			// keep info about sliding along walls
MF_FLOAT  = 0x00004000,			// allow moves to any height, no gravity
MF_TELEPORT  = 0x00008000,		// don't cross lines or look at heights
MF_MISSILE  = 0x00010000,		// don't hit same species, explode on block

MF_DROPPED  = 0x00020000,		// dropped by a demon, not level spawned
MF_SHADOW  = 0x00040000,		// actor is hard for monsters to see
MF_NOBLOOD  = 0x00080000,		// don't bleed when shot (use puff)
MF_CORPSE  = 0x00100000,		// don't stop moving halfway off a step
MF_INFLOAT  = 0x00200000,		// floating to a height for a move, don't
					// auto float to target's height
MF_INBOUNCE  = 0x00200000,		// used by Heretic bouncing missiles 

MF_COUNTKILL  = 0x00400000,		// count towards intermission kill total
MF_COUNTITEM  = 0x00800000,		// count towards intermission item total

MF_SKULLFLY  = 0x01000000,		// skull in flight
MF_NOTDMATCH  = 0x02000000,		// don't spawn in death match (key cards)

MF_UNMORPHED  = 0x10000000,		// [RH] Actor is the unmorphed version of something else
MF_NOLIFTDROP  = 0x20000000,		// [RH] Used with MF_NOGRAVITY to avoid dropping with lifts
MF_STEALTH  = 0x40000000,		// [RH] Andy Baker's stealth monsters
MF_ICECORPSE  = 0x80000000,		// a frozen corpse (for blasting) [RH] was 0x800000

// --- mobj.flags2 ---

MF2_LOGRAV  = 0x00000001,		// alternate gravity setting
MF2_WINDTHRUST  = 0x00000002,		// gets pushed around by the wind specials
MF2_BOUNCE1  = 0x00000004,
MF2_BLASTED  = 0x00000008,		// missile will pass through ghosts
MF2_FLY  = 0x00000010,			// fly mode is active
MF2_FLOORCLIP  = 0x00000020,		// if feet are allowed to be clipped
MF2_SPAWNFLOAT  = 0x00000040,		// spawn random float z
MF2_NOTELEPORT  = 0x00000080,		// does not teleport
MF2_RIP  = 0x00000100,			// missile rips through solid targets
MF2_PUSHABLE  = 0x00000200,		// can be pushed by other moving actors
MF2_SLIDE  = 0x00000400,		// slides against walls
MF2_ONMOBJ  = 0x00000800,		// actor is resting on top of another actor
MF2_PASSMOBJ  = 0x00001000,		// Enable z block checking. If on,
					// this flag will allow the actor to
					// pass over/under other actors.
MF2_CANNOTPUSH  = 0x00002000,		// cannot push other pushable mobjs
MF2_THRUGHOST  = 0x00004000,		// missile will pass through ghosts [RH] was 8
MF2_BOSS  = 0x00008000,			// mobj is a major boss
MF2_FIREDAMAGE  = 0x00010000,		// does fire damage
MF2_NODMGTHRUST  = 0x00020000,		// does not thrust target when damaging
MF2_TELESTOMP  = 0x00040000,		// mobj can stomp another
MF2_FLOATBOB  = 0x00080000,		// use float bobbing z movement
MF2_BOUNCE2  = 0x00100000,
MF2_IMPACT  = 0x00200000,		// an MF_MISSILE mobj can activate SPAC_IMPACT
MF2_PUSHWALL  = 0x00400000,		// mobj can push walls
MF2_MCROSS  = 0x00800000,		// can activate monster cross lines
MF2_PCROSS  = 0x01000000,		// can activate projectile cross lines
MF2_CANTLEAVEFLOORPIC = 0x02000000,	// stay within a certain floor type
MF2_NONSHOOTABLE  = 0x04000000,		// mobj is totally non-shootable, 
					// but still considered solid
MF2_INVULNERABLE  = 0x08000000,		// mobj is invulnerable
MF2_DORMANT  = 0x10000000,		// thing is dormant
MF2_ICEDAMAGE  = 0x20000000,		// does ice damage
MF2_SEEKERMISSILE  = 0x40000000,	// is a seeker (for reflection)
MF2_REFLECTIVE  = 0x80000000,		// reflects missiles

// The three types of bounciness are:
// HERETIC - Missile will only bounce off the floor once and then enter
//  its death state. It does not bounce off walls at all.
// HEXEN -  Missile bounces off of walls and floors indefinitely.
// DOOM -  Like Hexen, but the bounce turns off if its vertical velocity
//  is too low.

MF2_BOUNCETYPE  = MF2_BOUNCE1|MF2_BOUNCE2,
MF2_NOBOUNCE  = 0,
MF2_HERETICBOUNCE  = MF2_BOUNCE1,
MF2_HEXENBOUNCE  = MF2_BOUNCE2,
MF2_DOOMBOUNCE  = MF2_BOUNCE1|MF2_BOUNCE2,

// --- mobj.flags3 ---
MF3_FLOORHUGGER  = 0x00000001,		// Missile stays on floor
MF3_CEILINGHUGGER  = 0x00000002,	// Missile stays on ceiling
MF3_NORADIUSDMG  = 0x00000004,		// Actor does not take radius damage
MF3_GHOST  = 0x00000008,		// Actor is a ghost
MF3_ALWAYSPUFF  = 0x00000010,		// Puff always appears, even when hit nothing
MF3_SPECIALFLOORCLIP= 0x00000020,	// Actor uses floorclip for special effect (e.g. Wraith)
MF3_DONTSPLASH  = 0x00000040,		// Thing doesn't make a splash
MF3_NOSIGHTCHECK  = 0x00000080,		// Go after first acceptable target without checking sight
MF3_DONTOVERLAP  = 0x00000100,		// Don't pass over/under other things with this bit set
MF3_DONTMORPH  = 0x00000200,		// Immune to arti_egg
MF3_DONTSQUASH  = 0x00000400,		// Death ball can't squash this actor
MF3_EXPLOCOUNT  = 0x00000800,		// Don't explode until special2 counts to special1
MF3_FULLVOLACTIVE  = 0x00001000,	// Active sound is played at full volume
MF3_ISMONSTER  = 0x00002000,		// Actor is a monster
MF3_SKYEXPLODE  = 0x00004000,		// Explode missile when hitting sky
MF3_STAYMORPHED  = 0x00008000,		// Monster cannot unmorph
MF3_DONTBLAST  = 0x00010000,		// Actor cannot be pushed by blasting
MF3_CANBLAST  = 0x00020000,		// Actor is not a monster but can be blasted
MF3_NOTARGET  = 0x00040000,		// This actor not targeted when it hurts something else
MF3_DONTGIB  = 0x00080000,		// Don't gib this corpse
MF3_NOBLOCKMONST  = 0x00100000,		// Can cross ML_BLOCKMONSTERS lines
MF3_CRASHED  = 0x00200000,		// Actor entered its crash state
MF3_FULLVOLDEATH  = 0x00400000,		// DeathSound is played full volume (for missiles)
MF3_CANBOUNCEWATER  = 0x00800000,	// Missile can bounce on water
MF3_NOWALLBOUNCESND = 0x01000000,	// Don't make noise when bouncing off a wall
MF3_FOILINVUL  = 0x02000000,		// Actor can hurt MF2_INVULNERABLE things
MF3_NOTELEOTHER  = 0x04000000,		// Monster is unaffected by teleport other artifact
MF3_BLOODLESSIMPACT  = 0x08000000,	// Projectile does not leave blood
MF3_NOEXPLODEFLOOR  = 0x10000000,	// Missile stops at floor instead of exploding
MF3_WARNBOT  = 0x20000000,		// Missile warns bot
MF3_PUFFONACTORS  = 0x40000000,		// Puff appears even when hit actors
MF3_HUNTPLAYERS  = 0x80000000,		// Used with TIDtoHate, means to hate players too

// --- mobj.flags4 ---
MF4_NOHATEPLAYERS  = 0x00000001,	// Ignore player attacks
MF4_QUICKTORETALIATE= 0x00000002,	// Always switch targets when hurt