DeHackEd support

ZDoom has mostly complete support for DeHackEd patches except for a few text replacements. It also supports BOOM's .bex patches. Because of changes in the way ZDoom handles sounds, sound renamings with DeHackEd patches are no longer supported. (But things can still be given new sounds.) When ZDoom starts, it will look for a lump in any of the loaded wad files named "DEHACKED". If it finds one, it treats it as a DeHackEd patch and automatically loads it. (An alternative patch can also be specified from the command line with the -deh parameter.)

New thing flags

ZDoom offers some new things flags over what was available with the original game. Some of them were available in earlier versions of ZDoom, and some are new now that the Heretic/Hexen source is available. All of these flags are only available by specifying the flag by its name rather by using any specific bit patterns. For instance, if you want 50% translucency, use a line like this in the patch:
Bits = TRANSLUC50
You can specify multiple flags together by separating them by with a comma (,), vertical bar (|), or plus (+). For example, the following three lines are equivalent and make an object bounce and reflective:
Bits = FLOORBOUNCE | REFLECTIVE
Bits = FLOORBOUNCE + REFLECTIVE
Bits = FLOORBOUNCE, REFLECTIVE
You can also combine named flags with bit patterns from a regular DeHackEd patch in the same way. The following line will make a pushable object that hangs from the ceiling:
Bits = 256 | PUSHABLE
(It could just have well been written as Bits = SPAWNCEILING | PUSHABLE.)

The following flags are understood by ZDoom:

Name Meaning
SPECIAL Item can respawn and be picked up
SOLID Blocks other things
SHOOTABLE Can be shot
NOSECTOR Not linked in with a sector (making it invisible)
NOBLOCKMAP Not linked into the blockmap (making it inert)
AMBUSH Will only wake up on sight of a player
JUSTHIT Monster will immediately attack
JUSTATTACKED Will take at least one step back before attacking
SPAWNCEILING Thing hangs from the ceiling
NOGRAVITY Gravity is not applied to the thing
DROPOFF Can fall off ledges
PICKUP Can pickup items (only applicable to player)
NOCLIP Can pass through solid objects
FLOAT Can float up or down
TELEPORT Does not activate special lines when it moves
MISSILE Is a missile
DROPPED Was dropped and will not respawn
SHADOW Drawn with the fuzz effect
NOBLOOD Uses puffs when shot instead of blood
CORPSE Is dead
INFLOAT Is in the middle of a float up or down
COUNTKILL Is a monster
COUNTITEM Is included in the total count of items
SKULLFLY Special handling for a skull in flight
NOTDMATCH Is not spawned in deathmatch
STEALTH Is a stealth monster
TRANSLUC25 Drawn with 25% translucency
TRANSLUC50 Drawn with 50% translucency
TRANSLUC75 Drawn with 75% translucency
LOGRAV Only one-third gravity is applied to it
FLOORBOUNCE Bounces off of floors and walls
SPAWNFLOAT Spawns at a random z location
PUSHABLE Can be pushed
CANSLIDE Can slide along walls
ONMOBJ Is currently standing on top of another thing
PASSMOBJ Can pass under/over other things
CANNOTPUSH Cannot push other things
BOSS Sight and death sounds are played in surround sound
FLOATBOB Objects bobs up and down
DONTDRAWN Is not drawn
IMPACT Can activate projectile hit specials
PUSHWALL Can activate push specials
MCROSS Can activate monster cross specials
PCROSS Can activate projectile cross specials
INVULNERABLE Thing takes no damage
REFLECTIVE Missiles bounce off of it

New code pointers

ZDoom has a few new code pointers. These are only accessible using a [CODEPTR] block.

FireRailgun
FireRailgunLeft
FireRailgunRight
Used by the player to fire a railgun. This must be assigned to one of the player weapon frames. Do not use it with any others.
RailWait
Does absolutely nothing. Again, this should only be assigned to a player weapon frame.
MonsterRail
Used by a monster to fire a railgun.

Customizing the obituaries

Using a [STRINGS] block inside a .bex patch, it is possible to modify the obituary messages printed when a player dies. The following strings are available to be changed (in addition to the ones supported by BOOM):

String Name Standard Text
OB_SUICIDE suicides
OB_FALLING fell too far
OB_CRUSH was squished
OB_EXIT tried to leave
OB_WATER can't swim
OB_SLIME mutated
OB_LAVA melted
OB_BARREL went boom
OB_SPLASH stood in the wrong spot
OB_R_SPLASH should have stood back
OB_ROCKET should have stood back
OB_KILLEDSELF killed %hself
OB_STEALTHBABY thought %g saw an arachnotron
OB_STEALTHVILE thought %g saw an archvile
OB_STEALTHBARON thought %g saw a Baron of Hell
OB_STEALTHCACO thought %g saw a cacodemon
OB_STEALTHCHAINGUY thought %g saw a chaingunner
OB_STEALTHDEMON thought %g saw a demon
OB_STEALTHKNIGHT thought %g saw a Hell Knight
OB_STEALTHIMP thought %g saw an imp
OB_STEALTHFATSO thought %g saw a mancubus
OB_STEALTHUNDEAD thought %g saw a revenant
OB_STEALTHSHOTGUY thought %g saw a sargeant
OB_STEALTHZOMBIE thought %g saw a zombieman
OB_UNDEADHIT was punched by a revenant
OB_IMPHIT was slashed by an imp
OB_CACOHIT got too close to a cacodemon
OB_DEMONHIT was bit by a demon
OB_SPECTREHIT was eaten by a spectre
OB_BARONHIT was ripped open by a Baron of Hell
OB_KNIGHTHIT was gutted by a Hell Knight
OB_ZOMBIE was killed by a zombieman
OB_SHOTGUY was shot by a sargeant
OB_VILE was incinerated by an archvile
OB_UNDEAD couldn't evade a revevant's fireball
OB_FATSO was squashed by a mancubus
OB_CHAINGUY was perforated by a chaingunner
OB_SKULL was spooked by a lost soul
OB_IMP was burned by an imp
OB_CACO was smitten by a cacodemon
OB_BARON was bruised by a Baron of Hell
OB_KNIGHT was splayed by a Hell Knight
OB_SPIDER stood in awe of the spider demon
OB_BABY let an arachnotron get %h
OB_CYBORG was splattered by a cyberdemon
OB_WOLFSS was no match for the past
OB_MPFIST chewed on %s's fist
OB_MPCHAINSAW was mowed over by %s's chainsaw
OB_MPPISTOL was tickled by %s's pea shooter
OB_MPSHOTGUN chewed on %s's boomstick
OB_MPSSHOTGUN was splattered by %s's super shotgun
OB_MPCHAINGUN was mowed down by %s's chaingun
OB_MPROCKET rode %s's rocket
OB_MPR_SPLASH almost dodged %s's rocket
OB_MPPLASMARIFLE was melted by %s's plasma gun
OB_MPBFG_BOOM was splintered by %s's BFG
OB_MPBFG_SPLASH couldn't hide from %s's BFG
OB_MPTELEFRAG was telefragged by %s
OB_DEFAULT died
OB_FRIENDLY1 mows down a teammate
OB_FRIENDLY2 checks %p glasses
OB_FRIENDLY3 gets a frag for the other team
OB_FRIENDLY4 loses another friend
OB_RAILGUN was railed by %s

The name of the player who died is always printed first followed by the obituary string, except for the OB_FRIENDLY? strings, where the name of the killer is printed instead. The obituary strings can contain special % sequences that get substituted with something else when the string is printed. These are:

%g -> he/she/it
%h -> him/her/it
%p -> his/her/its
%s -> name of killer (only works for strings that already have %s above)