2P by GN⁺ | ★ favorite | 댓글 1개
  • DOOM CAPTCHA는 사람임을 증명하려면 DOOM®을 직접 플레이하게 만드는 CAPTCHA로, 교육·엔터테인먼트 성격의 실험적 프로젝트임
  • 핵심 구현은 Emscripten으로 최소 Doom 포트를 WebAssembly로 컴파일하고, C 게임 루프와 JavaScript UI를 연결하는 방식임
  • CAPTCHA 판정에 필요한 플레이어 생성·사망, 적 처치 같은 게임 상태는 JavaScript 콜백을 통해 UI로 전달됨
  • 기본 실행 옵션은 -skill 5, -fast, -warp e1m1, -nomenu로 설정되어 메뉴 없이 곧바로 어려운 전투에 들어감
  • 합법적 사용을 위해 shareware waddoom1.wad와 호환되도록 조정했으며, 소스 코드와 v0 UI 생성 링크를 확인할 수 있음

Doom을 CAPTCHA로 실행하는 구조

  • DOOM CAPTCHA는 사용자가 DOOM®을 플레이해 인간임을 증명하는 CAPTCHA임
  • 구현은 Emscripten을 사용해 최소 Doom 포트를 WebAssembly로 컴파일하는 방식임
  • C 기반 게임 루프인 g_game.cJavaScript 기반 CAPTCHA UI가 서로 상태를 주고받을 수 있게 구성됨
  • 시작점은 SDL 기반의 최소 Doom 포트이며, WebAssembly로 효율적으로 컴파일될 수 있음
  • 합법적 사용을 위해 shareware 버전 waddoom1.wad와 호환되도록 빌드를 조정함

CAPTCHA에 맞춘 게임 변경

  • 메뉴와 부활 처리

    • 비공식 실행 플래그를 추가해 CAPTCHA 흐름에 맞게 게임 진행을 단순화함
    • -nomenu: m_menu.c에서 메인 메뉴를 건너뛰고 바로 게임으로 진입함
    • -autoreborn: p_mobj.c에서 플레이어 사망 후 2초 뒤 자동으로 부활시킴
  • UI로 전달되는 게임 이벤트

    • CAPTCHA UI는 JavaScript 콜백으로 게임 상태를 받아 판정 흐름에 활용함
    • onPlayerBorn: 플레이어가 생성되거나 부활할 때 호출됨
    • onPlayerKilled: 플레이어가 사망할 때 호출됨
    • onEnemyKilled: 메인 플레이어가 적을 처치할 때 호출됨
  • 기본 실행 난이도

    • d_main.c의 기본 실행 플래그를 바꿔 처음부터 더 어려운 상황이 되도록 만듦
    • -skill 5: 난이도를 "Nightmare!"로 설정함
    • -fast: 게임을 더 어렵게 만듦
    • -warp e1m1: 액션이 있는 지점에서 게임을 시작함
    • -nomenu: 플레이어가 메인 메뉴를 열 수 없게 함

소스와 사용 조건

  • v0 UI 생성 결과소스 코드를 볼 수 있음
  • 이 프로젝트는 비상업적 사용을 위해 공개된 DOOM® shareware 버전을 기반으로 하며, DOOM®은 id Software LLC의 등록 상표임

댓글과 토론

Hacker News 의견들
  • 의도된 방식으로 해보려 했지만 너무 어려웠고, 시작 지점에 머물면서 오른쪽에서 나오는 적만 잡는 식으로 꼼수 클리어가 가능했음

    • 그 시작 조건이라면 꼼수가 아니라 표준 전술임. 권총만 있거나 다른 무기 탄약이 부족할 때 쓰는 방식임
      이 게임들에서 권총 명중률이 말도 안 되게 좋아서 멀리서 몇 발씩 쏴 적을 잡을 수 있고, 여기 적들은 산탄총을 쏘는데 장거리에서는 매우 비효율적임. 게임이 산탄 퍼짐을 비현실적으로 넓게 시뮬레이션해서, 멀리 있는 적이 정확히 조준해도 피해가 아주 작음
      예전에 대학 NetWare LAN에서 플레이할 때도 거리를 유지하는 것만으로 더 강하지만 덜 정확한 무기를 든 사람들을 이겼음. 보통 산탄총이나 이후 버전의 더블 배럴 산탄총이었고, 다들 그게 가장 통쾌하다고 봤음
      누가 뒤에서 가까이 붙기 전까지는 잘 통하고, 죽은 뒤 괜찮은 위치에서 리스폰되면 그놈을 금방 찾아 권총으로 복수할 수 있음. 로켓 발사기 상대로도 직접 맞지만 않거나 빗나간 폭발 피해가 계획을 망치기 쉬운 곳에만 안 있으면 통함
      예전식으로 말하자면 많은 DOOM류 게임과 그 후계작에서 유효한 방법임. HL2에서도 기본 권총은 발사 버튼을 누르는 만큼 제한 없이 나가고, 다른 무기처럼 최소 발사 간격이 없어서 잘 먹힘
    • 이건 첫 번째 레벨은 아니지만, 해당 레벨에 들어갈 때의 무기 조건은 맞음
      게다가 키보드 전용이라 좌우 화살표가 캐릭터를 회전시키는데, 현대 1인칭 슈터에서는 좌우 이동에 쓰고 마우스로 회전하는 데 익숙해서 반사 신경이 꼬임
    • 모든 것이 클라이언트 측에서 돌아가면 굳이 꼼수를 쓸 필요도 없음. 서버가 실제로 필요한 수의 적을 죽였는지 검증할 방법이 없음
    • 나도 똑같이 했음. 뒤로 가기 화살표를 눌러 물러나고, 1초마다 스페이스바를 누르면 끝임. 30초쯤 뒤에는 캡차가 풀림
    • 이 레벨을 권총 시작으로 두는 건 좀 가혹함. 최소한 산탄총은 줘야 함
  • 기술력은 +100, 사용성은 -100. 추억 여행에는 +10, 이제 내가 게임을 못 한다는 자기 인식도 얻었음

    • 이건 보통 E1M3 뒤에 만나게 되는 비밀 레벨 E1M9임. 일반 진행이라면 이 시점에는 산탄총, 체인건, 로켓 발사기, 아마 방어구까지 얻었을 것임
      이 레벨을 권총만 들고 시작하게 하고, 보기에는 Ultra-Violence나 Nightmare 난이도라면 맞아 죽으라고 비는 셈임
    • 마우스 시점 전환이 없으면 훨씬 어려움. 통과하는 데 10번 넘게 걸렸고, Overwatch에서는 다이아몬드
    • 봇을 상대로 실제로 얼마나 안전한지도 모르겠음. 요즘이면 사람만큼은 DOOM을 플레이하는 AI를 만들 수 있을 것 같음
    • 웃기게도 내 키보드에는 화살표 키가 없음. 다른 레이어에 바인딩해 두긴 했지만 이 구성과는 잘 안 맞음
      이 구현이 이제 표준인 WASD를 지원하고, 원작처럼 마우스 왼쪽 버튼으로 발사할 수 있게 했다면 내가 인간임을 증명하기가 꽤 쉬웠을 것임
  • 어려운 레벨이고, 기억이 맞다면 숨겨진 레벨 중 하나임. -fast가 켜진 느낌도 들고, 좌우 이동을 못 해서 훨씬 더 어려움. 그래도 아주 귀여움

    • 맞음. E1M9이고, 셰어웨어판 비밀 레벨이며 Nightmare 난이도임
      예전 방식대로 Alt를 함께 누르면 좌우 이동할 수 있음
      내 환경에서는 소리가 이상하게 높게 나왔는데 이유는 모르겠음. 이 말도 안 되는 경험에는 어울려서 큰 문제는 아님
    • Linux의 Firefox에서는 좌우 이동이 됨. 운영체제나 브라우저 설정이 막고 있는 것일 수도 있음
    • 실제로 그렇게 어려운가? 모바일에서 안 된다고 가볍게 투덜댈 준비를 했는데, 화면 조작이 잘 됐고 바로 세 놈을 잡는 데 별문제가 없었음
      다만 최근에 클래식 Doom을 꽤 많이 하긴 했음
    • Alt를 누르고 있으면 확실히 좌우 이동 가능함. 적어도 나는 됐음
    • 맞음, E1M9는 권총 시작으로 악명 높게 어려움. 보자마자 알아봤는데, 어린 시절 Doom에 얼마나 시간을 썼는지가 드러남
  • 몬스터가 너무 많아서 3~4번 시도해야 했음. 진짜 캡차 같음

    • 그래서 이걸 패러디로 받아들였음
    • 진짜 CAPTCHA처럼 장애가 있는 사람에게는 지옥임. 10점 만점에 10점
  • 어떤 괴물이 WASD도 안 주고, 최소한 Ctrl 발사도 안 주는 거임? 그래도 멋진 캡차임

    • ijkl;
  • AWS 콘솔에 로그인하려고 캡차를 풀 때마다, 이걸 피하게 만들려는 대상은 쉽게 자동화할 수 있는데 대부분의 사용자는 이 “기능” 때문에 고통받는다는 생각이 듦
    일부 오픈소스 모델은 그런 “AI 안전” 게이트키핑 없이도 풀 수 있음
    Apple이 캡차 해결책을 제안했는데[1], 표준화되어 널리 쓰이길 기다리고 있음
    [1] https://support.apple.com/en-us/102591

    • “앱이나 웹사이트에 로그인할 때 CAPTCHA를 요구하는 대신 Apple 서버가 기기와 Apple Account를 검증하고, 이 검증이 Apple이 확인한 제3자 토큰 발급 서버로 전송되며, 그 서버가 앱이나 웹사이트에 사용자를 검증하는 비공개 접근 토큰을 생성한다”는 방식임
      이건 분명히 개인정보 보호에 더 낫지 않고, Apple에 더 많은 통제권을 줌. 차라리 캡차에 3초 더 쓰겠음
    • “CAPTCHA를 완료할 필요가 없습니다. 앱이나 사이트에 로그인하기만 하면 됩니다”라니, 사양함. 원하지 않음
      그 문장을 읽고 Apple 지원 문서 읽기를 멈췄음
  • 잡학 하나: Doom 제작자들은 각 레벨을 권총과 50발만 들고 시작해도 깰 수 있는지 직접 플레이해서 확인했음

  • GitHub 저장소에서 원래 Doom Captcha 제작자에게 크레딧을 준 건 옳은 일임. 요즘 소프트웨어 업계 전반에 대한 기대치가 역대 최저라서 보기 좋았음
    몇 년 전 원본은 여기임
    https://vivirenremoto.github.io/doomcaptcha
    https://github.com/vivirenremoto/doomcaptcha

  • 이거 어렵네. 나는 인간이 아닌가 봄
    Doom을 한 지 너무 오래됐고, 좌우 이동이 없으면 거의 불가능함

    • 다른 곳에도 나왔지만 Alt + 좌/우를 누르면 좌우 이동
    • 앞으로 가서 몬스터를 유인한 다음 바로 시작 지점으로 돌아와 엄폐하고, 멀리서 하나씩 잡으면 됨. 쉬움
  • 이건 Vercel의 AI 어시스턴트 v0로 만들었음
    채팅 링크는 여기임: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0

    • 여기서 “with”가 꽤 많은 의미를 떠안고 있음. 로그를 훑어보니 AI 어시스턴트가 한 일은 UI 설계뿐이고, 실제 게임은 구현하지 않았던 것으로 보임
      인상적으로 들릴 수 있지만, 몇 초 동안 “loading”을 보여주는 버튼 같은 사소한 상호작용을 더하는 정도를 빼면 기능적으로는 winforms 같은 드래그 앤 드롭 UI 디자이너와 크게 다르지 않음. 그 전신인 Visual Basic도 90년대에 이미 있었음
    • JS 부분은 보이지 않음. 레이아웃을 만드는 데만 어시스턴트를 쓰고, 실제 DOOM 통합 부분은 안 쓴 것 같음
      그래도 그 채팅은 조금 지나면 읽기 괴로워짐. 요지는 “버튼 안 텍스트를 가운데 정렬해”, “가운데가 아니잖아, 가운데로 해”, “제발 텍스트를 가운데로 해” 같은 흐름임
    • 채팅을 읽어봤는데 전부 레이아웃에 대한 세세한 수정뿐이고, 실제로 DOOM이 삽입되는 지점은 없어 보임. 쉬운 부분은 AI에게 시키고 어려운 부분은 직접 코딩한 건지 이해가 안 됨
    • 다른 사람들도 짚었듯이 그건 UI 설정만 한 것임
      나머지 소스가 있는 저장소는 여기임: https://github.com/rauchg/doom-captcha
      메뉴를 건너뛰고 필요한 콜백을 추가하는 등 몇 가지 조정을 위해 Doom도 수정해야 했음