ZDoom-specific bits in BEX
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