DOOM CAPTCHA
(doom-captcha.vercel.app)- DOOM CAPTCHA est un CAPTCHA expérimental à visée éducative et ludique qui demande de jouer directement à DOOM® pour prouver qu’on est humain
- L’implémentation centrale consiste à compiler un port minimal de Doom en WebAssembly avec
Emscripten, puis à relier la boucle de jeu enCà l’interfaceJavaScript - Les états de jeu nécessaires à la validation du CAPTCHA, comme l’apparition et la mort du joueur ou l’élimination d’ennemis, sont transmis à l’interface via des callbacks JavaScript
- Les options d’exécution par défaut sont définies sur
-skill 5,-fast,-warp e1m1,-nomenu, ce qui lance immédiatement un combat difficile sans passer par le menu - Pour un usage légal, le projet a été ajusté pour être compatible avec le
wadsharewaredoom1.wad, et il est possible de consulter le code source ainsi que le lien de génération de l’UI v0
Architecture d’exécution de Doom comme CAPTCHA
- DOOM CAPTCHA est un CAPTCHA dans lequel l’utilisateur doit jouer à DOOM® pour prouver qu’il est humain
- L’implémentation repose sur la compilation d’un port minimal de Doom en
WebAssemblyà l’aide deEmscripten - La boucle de jeu en
Cdeg_game.cet l’interface CAPTCHA enJavaScriptsont reliées pour pouvoir échanger leur état - Le point de départ est un port minimal de Doom basé sur
SDL, qui peut être compilé efficacement enWebAssembly - Le build a été ajusté pour être compatible avec le
wadsharewaredoom1.wadafin de permettre un usage légal
Modifications du jeu adaptées au CAPTCHA
-
Menu et gestion de la réapparition
- Des flags d’exécution non officiels ont été ajoutés pour simplifier la progression du jeu et l’adapter au flux du CAPTCHA
-nomenu: dansm_menu.c, le menu principal est ignoré et l’entrée en jeu se fait directement-autoreborn: dansp_mobj.c, le joueur réapparaît automatiquement 2 secondes après sa mort
-
Événements de jeu transmis à l’UI
- L’interface du CAPTCHA reçoit l’état du jeu via des callbacks JavaScript et l’utilise dans le flux de validation
onPlayerBorn: appelé quand le joueur apparaît ou réapparaîtonPlayerKilled: appelé quand le joueur meurtonEnemyKilled: appelé quand le joueur principal élimine un ennemi
-
Niveau de difficulté par défaut
- Les flags d’exécution par défaut de
d_main.cont été modifiés pour rendre la situation plus difficile dès le départ -skill 5: définit la difficulté sur"Nightmare!"-fast: rend le jeu plus difficile-warp e1m1: démarre le jeu à un point où l’action commence immédiatement-nomenu: empêche le joueur d’ouvrir le menu principal
- Les flags d’exécution par défaut de
Sources et conditions d’utilisation
- Il est possible de consulter le résultat de génération de l’UI v0 et le code source
- Ce projet repose sur la version DOOM® shareware publiée pour un usage non commercial, et DOOM® est une marque déposée de id Software LLC
1 commentaires
Avis sur Hacker News
J’ai essayé de le faire de la manière prévue, mais c’était trop difficile ; en restant au point de départ et en ne tuant que les ennemis qui arrivent par la droite, on pouvait le finir avec une astuce
Dans ces jeux, la précision du pistolet est absurdement bonne, ce qui permet de tuer les ennemis de loin en tirant quelques coups, alors qu’ici les ennemis utilisent des fusils à pompe, très inefficaces à longue distance. Le jeu simule une dispersion des plombs irréalistement large, donc même si un ennemi éloigné vise juste, les dégâts sont très faibles.
À l’époque, quand on jouait sur le LAN NetWare de l’université, je battais aussi des gens armés d’armes plus puissantes mais moins précises simplement en gardant mes distances. C’était généralement le fusil à pompe, ou le fusil à double canon dans les versions ultérieures, que tout le monde trouvait le plus jouissif.
Ça marche bien jusqu’à ce que quelqu’un se colle derrière vous ; et si vous réapparaissez à un bon endroit après votre mort, vous pouvez vite retrouver ce type et vous venger au pistolet. Ça marche aussi contre le lance-roquettes tant qu’on n’est pas touché directement et qu’on ne se trouve pas là où les dégâts d’explosion d’un tir raté risquent de ruiner le plan.
Pour le dire à l’ancienne, c’est une méthode valable dans beaucoup de DOOM-like et leurs successeurs. Même dans HL2, le pistolet de base tire sans autre limite que la vitesse à laquelle on appuie sur le bouton de tir, sans intervalle minimal entre les tirs comme les autres armes, donc ça fonctionne bien.
En plus, c’est uniquement au clavier : les flèches gauche/droite font pivoter le personnage, alors que dans les FPS modernes on a l’habitude de s’en servir pour le déplacement latéral et de tourner à la souris, ce qui brouille les réflexes.
Technique : +100, utilisabilité : -100. +10 pour la nostalgie, et j’ai aussi gagné la prise de conscience que je ne sais plus jouer.
Faire commencer ce niveau avec seulement le pistolet, et visiblement en difficulté Ultra-Violence ou Nightmare, c’est demander à se faire massacrer.
Si cette implémentation prenait en charge le désormais standard WASD et permettait de tirer avec le bouton gauche de la souris comme dans l’original, il aurait été assez facile de prouver que je suis humain.
C’est un niveau difficile et, si ma mémoire est bonne, l’un des niveaux cachés. On dirait aussi que
-fastest activé, et c’est beaucoup plus dur sans pouvoir faire de déplacement latéral. Mais c’est quand même adorable.À l’ancienne, on peut faire du déplacement latéral en maintenant Alt.
Chez moi, le son était bizarrement aigu, je ne sais pas pourquoi. Mais ça colle à cette expérience absurde, donc ce n’est pas très grave.
Cela dit, j’ai pas mal joué à Doom classique récemment.
Il y avait trop de monstres, j’ai dû m’y reprendre 3 ou 4 fois. Ça ressemble vraiment à un captcha.
Quel monstre ne fournit même pas WASD, ni au moins Ctrl pour tirer ? Cela dit, c’est un captcha cool.
Chaque fois que je dois résoudre un captcha pour me connecter à la console AWS, je me dis que la cible qu’il est censé empêcher peut facilement automatiser ça, alors que la plupart des utilisateurs souffrent à cause de cette « fonctionnalité ».
Certains modèles open source peuvent les résoudre sans ce genre de filtrage « sécurité IA ».
Apple a proposé une solution aux captchas[1], et j’attends qu’elle soit standardisée et largement adoptée.
[1] https://support.apple.com/en-us/102591
Ce n’est clairement pas mieux pour la vie privée, et ça donne plus de contrôle à Apple. Je préfère encore passer 3 secondes de plus sur un captcha.
J’ai arrêté de lire le document d’assistance Apple à cette phrase.
Petite anecdote : les créateurs de Doom ont vérifié eux-mêmes, en jouant, que chaque niveau pouvait être terminé en commençant seulement avec un pistolet et 50 balles.
C’est bien que le dépôt GitHub crédite le créateur original de Doom Captcha. Les attentes vis-à-vis de l’industrie du logiciel en général sont au plus bas historique, donc c’était agréable à voir.
L’original, d’il y a quelques années, est ici :
https://vivirenremoto.github.io/doomcaptcha
https://github.com/vivirenremoto/doomcaptcha
C’est dur. Je ne dois pas être humain.
Ça fait trop longtemps que je n’ai pas joué à Doom, et sans déplacement latéral c’est presque impossible.
Ça a été fait avec v0, l’assistant IA de Vercel.
Le lien du chat est ici : https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0
Ça peut sembler impressionnant, mais à part ajouter de petites interactions du genre un bouton qui affiche « loading » pendant quelques secondes, fonctionnellement ce n’est pas très différent d’un concepteur d’UI en glisser-déposer à la WinForms. Et son ancêtre, Visual Basic, existait déjà dans les années 90.
Cela dit, au bout d’un moment, ce chat devient pénible à lire. En gros, ça donne : « centre le texte dans le bouton », « ce n’est pas centré, mets-le au centre », « s’il te plaît, centre le texte ».
Le dépôt contenant le reste du source est ici : https://github.com/rauchg/doom-captcha
Il a aussi fallu modifier Doom pour quelques ajustements, comme sauter le menu et ajouter les callbacks nécessaires.