How it works
A CAPTCHA that lets you play DOOM® to prove you’re human (for
educational and entertainment purposes)
The project works by leveraging Emscripten
to compile a
minimal port of Doom to WebAssembly
and enable
intercommunication between the C
-based game runloop (g_game.c
) and the
JavaScript
-based CAPTCHA UI.
Some extensions were made to the game to introduce relevant events
needed for its usage in the context of a CAPTCHA.
-
Started out with a minimal,
SDL
-based port of Doom that
can be efficiently compiled toWebAssembly
-
Tweaked the build to make it compatible with the shareware version of
wad
(doom1.wad
) for legal use -
Introduced new unofficial process flags:
-
-nomenu
(m_menu.c
)
to skip the main menu and jump straight into the game -
-autoreborn
(p_mobj.c
)
to automatically rebirth the player after a 2s delay
-
-
Introduced callbacks into
JS
land to be used by the
CAPTCHA UI:onPlayerBorn
when the player is born or rebornonPlayerKilled
when the player is killed-
onEnemyKilled
when the main player kills an enemy
-
Tweaked the default process flags in
d_main.c
to make the game more challenging:-skill 5
sets the difficulty to “Nightmare!”-fast
makes it even harder-
-warp e1m1
jumpstarts the game to where the action is -
-nomenu
doesn’t let the player trigger the main menu
See the v0 UI generation
or
get the source.
Built on the shareware version of DOOM® released publically for
non-commercial use. DOOM® is a registered trademark of id Software
LLC, a ZeniMax Media company.