DOOM CAPTCHA
(doom-captcha.vercel.app)- DOOM CAPTCHA é um CAPTCHA experimental, com caráter educacional e de entretenimento, que faz a pessoa jogar DOOM® de verdade para provar que é humana
- A implementação principal compila um porte mínimo de Doom para WebAssembly com
Emscriptene conecta o loop do jogo emCcom a interface emJavaScript - Os estados do jogo necessários para a validação do CAPTCHA, como surgimento e morte do jogador e eliminação de inimigos, são enviados para a UI por meio de callbacks em JavaScript
- As opções padrão de execução são
-skill 5,-fast,-warp e1m1e-nomenu, fazendo o jogador entrar direto em um combate difícil, sem menu - Para uso legal, ele foi ajustado para ser compatível com o
wadsharewaredoom1.wad, e é possível conferir o código-fonte e o link de geração da UI v0
Como o Doom roda como CAPTCHA
- DOOM CAPTCHA é um CAPTCHA em que o usuário prova que é humano jogando DOOM®
- A implementação compila um porte mínimo de Doom para
WebAssemblyusandoEmscripten - O loop do jogo em
C, baseado emg_game.c, e a UI do CAPTCHA emJavaScriptforam estruturados para trocar estado entre si - O ponto de partida é um porte mínimo de Doom baseado em
SDL, que pode ser compilado com eficiência paraWebAssembly - Para uso legal, o build foi ajustado para ser compatível com a versão shareware do
wad,doom1.wad
Mudanças no jogo para adaptar ao CAPTCHA
-
Menu e tratamento de renascimento
-
Eventos do jogo enviados para a UI
- A UI do CAPTCHA recebe o estado do jogo por callbacks em JavaScript e usa isso no fluxo de validação
onPlayerBorn: chamado quando o jogador surge ou renasceonPlayerKilled: chamado quando o jogador morreonEnemyKilled: chamado quando o jogador principal elimina um inimigo
-
Dificuldade padrão de execução
- As flags padrão de execução em
d_main.cforam alteradas para criar uma situação mais difícil desde o início -skill 5: define a dificuldade como"Nightmare!"-fast: deixa o jogo mais difícil-warp e1m1: inicia o jogo em um ponto com ação-nomenu: impede que o jogador abra o menu principal
- As flags padrão de execução em
Código-fonte e condições de uso
- É possível ver o resultado gerado da UI v0 e o código-fonte
- Este projeto é baseado na versão shareware de DOOM® disponibilizada para uso não comercial, e DOOM® é uma marca registrada da id Software LLC
1 comentários
Opiniões no Hacker News
Tentei fazer do jeito pretendido, mas era difícil demais; dava para passar na manha ficando no ponto inicial e matando só os inimigos que vinham da direita
Nesses jogos, a precisão da pistola é absurdamente boa, então dá para matar inimigos à distância com alguns tiros; aqui os inimigos atiram de escopeta, que é muito ineficiente em longas distâncias. Como o jogo simula a dispersão dos chumbos de forma irrealisticamente ampla, mesmo que um inimigo distante mire corretamente, o dano é bem pequeno.
Antigamente, quando jogávamos numa LAN NetWare na faculdade, eu vencia pessoas com armas mais fortes, mas menos precisas, apenas mantendo distância. Geralmente era a escopeta, ou a escopeta de cano duplo nas versões posteriores, e todo mundo achava que ela era a mais satisfatória.
Funciona bem até alguém chegar perto por trás; depois de morrer, se você renascer em uma posição decente, dá para encontrar o sujeito rapidamente e se vingar com a pistola. Também funciona contra lança-foguetes, desde que você não leve um acerto direto nem fique em lugares onde o dano de explosão de um tiro errado estrague o plano.
Para falar à moda antiga, é uma estratégia válida em muitos jogos estilo DOOM e seus sucessores. Em HL2, a pistola básica também dispara sem limite enquanto você aperta o botão de tiro, sem intervalo mínimo entre disparos como outras armas, então funciona bem.
Além disso, é só no teclado, então as setas esquerda/direita giram o personagem; em jogos de tiro em primeira pessoa modernos, a gente se acostumou a usá-las para se mover para os lados e a girar com o mouse, então os reflexos ficam todos bagunçados.
Técnica +100, usabilidade -100. +10 pela viagem nostálgica, e também ganhei a autoconsciência de que já não sei mais jogar.
Fazer a pessoa começar esse nível só com a pistola e, pelo que parece, na dificuldade Ultra-Violence ou Nightmare, é praticamente pedir para ela morrer.
Se esta implementação desse suporte ao WASD, que agora é padrão, e permitisse atirar com o botão esquerdo do mouse como no original, teria sido bem fácil provar que sou humano.
É um nível difícil e, se minha memória não falha, um dos níveis secretos. Também parece que o
-fastestá ativado, e fica muito mais difícil por não conseguir fazer strafe. Ainda assim, é muito fofo.À moda antiga, se você segurar Alt junto, dá para se mover lateralmente.
No meu ambiente, o som saiu estranhamente agudo, não sei por quê. Mas combina com essa experiência absurda, então não é grande problema.
Mas é verdade que tenho jogado bastante Doom clássico recentemente.
Tinha monstros demais, precisei tentar 3 ou 4 vezes. Parece um captcha de verdade.
Que monstro é esse que nem dá WASD e, no mínimo, nem Ctrl para atirar? Ainda assim, é um captcha legal.
Toda vez que resolvo um captcha para fazer login no console da AWS, penso que o alvo que isso tenta barrar consegue automatizar facilmente, enquanto a maioria dos usuários sofre por causa desse “recurso”.
Alguns modelos open source conseguem resolver isso mesmo sem esse gatekeeping de “segurança de IA”.
A Apple propôs uma solução para captchas[1], e estou esperando que ela seja padronizada e amplamente adotada.
[1] https://support.apple.com/en-us/102591
Isso claramente não é melhor para a privacidade e dá mais controle à Apple. Prefiro gastar mais 3 segundos no captcha.
Parei de ler o documento de suporte da Apple quando li essa frase.
Um detalhe curioso: os criadores de Doom jogaram cada nível pessoalmente para verificar se era possível concluí-lo começando apenas com a pistola e 50 tiros.
Foi correto dar crédito ao criador original do Doom Captcha no repositório do GitHub. Como as expectativas em relação ao setor de software em geral estão no menor nível de todos os tempos, foi bom ver isso.
O original de alguns anos atrás está aqui:
https://vivirenremoto.github.io/doomcaptcha
https://github.com/vivirenremoto/doomcaptcha
Isso é difícil. Acho que não sou humano.
Faz tempo demais que joguei Doom e, sem movimento lateral, é quase impossível.
Isto foi feito com o assistente de IA v0 da Vercel.
O link do chat está aqui: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0
Pode soar impressionante, mas, tirando adicionar interações triviais como um botão que mostra “loading” por alguns segundos, funcionalmente não é muito diferente de um designer de UI drag-and-drop como o winforms. O antecessor disso, o Visual Basic, já existia nos anos 90.
Mesmo assim, depois de um tempo esse chat fica meio doloroso de ler. A essência é algo como “centralize o texto dentro do botão”, “não está centralizado, coloque no centro”, “por favor, centralize o texto”.
O repositório com o restante do código-fonte está aqui: https://github.com/rauchg/doom-captcha
Também foi preciso modificar o Doom para alguns ajustes, como pular o menu e adicionar os callbacks necessários.