Enemies are one of the main obstacles that players must face in the main game, as well as many custom levels. Upon contact, an enemy will kill the player and send them back to the last checkpoint. If invincibility is on, the enemy phases through the player with no effect.
Enemies can have different sprites assigned to them, though in custom levels they are typically limited to a set of 16×16 sprites used in the main game, which are assigned to all enemies in a single room. Their colour is determined based on the room's chosen tileset colour.
Each enemy moves in a predefined way, allowing for players to time their movement to avoid enemies. Enemies have a variety of movement types, though are normally limited to the cardinal directions in custom levels, with no speed customisation. Internal scripting can be used to spawn enemies with more flexible movement options.
Enemies will usually continue moving in their specified direction until they hit a wall, platform, or the edge of the enemy bounding box or the screen. Enemies can move through spikes, though in versions prior to 2.4, if invincibility is enabled, they will rebound off of spikes like solid tiles. On screens with wrapping enabled, enemies will wrap around to the other side when they reach the edge of the screen. Enemies will not wrap around at wrap lines.
- Many of the enemies' designs found in the main game, among other elements, supposedly originate from dream journals kept by Terry Cavanagh.
- An unused enemy sprite exists in the game's files, which appears as an undulating square with an X inside. Enemies spawned with
createentity()will default to this sprite.