https://doom-captcha.vercel.app/ built with v0 & vercel / how it works / @rauchg x How it works A CAPTCHA that lets you play DOOM(r) 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 to WebAssembly * 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 reborn + onPlayerKilled 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(r) released publically for non-commercial use. DOOM(r) is a registered trademark of id Software LLC, a ZeniMax Media company. [ ] Debug [ ] Play DOOM(r) and kill at least 3 monsters Downloading... | - - | Tap to play You died! Try again Use | | - - space 0/3