2 ポイント 投稿者 GN⁺ 2025-01-02 | 1件のコメント | WhatsAppで共有
  • DOOM CAPTCHAは、人間であることを証明するためにDOOM®を実際にプレイさせるCAPTCHAで、教育・エンターテインメント性を持つ実験的プロジェクト
  • 中核の実装は、Emscriptenで最小構成のDoom移植版をWebAssemblyにコンパイルし、CのゲームループとJavaScript UIをつなぐ方式
  • CAPTCHA判定に必要な、プレイヤーの生成・死亡、敵の撃破といったゲーム状態は、JavaScriptコールバックを通じてUIへ渡される
  • デフォルトの実行オプションは-skill 5-fast-warp e1m1-nomenuに設定されており、メニューなしで即座に難しい戦闘に入る
  • 合法的な利用のため、sharewareのwadであるdoom1.wadと互換になるよう調整されており、ソースコードとv0 UI生成リンクを確認できる

DoomをCAPTCHAとして実行する構造

  • DOOM CAPTCHAは、ユーザーがDOOM®をプレイして人間であることを証明するCAPTCHA
  • 実装は、Emscriptenを使って最小構成のDoom移植版をWebAssemblyにコンパイルする方式
  • Cベースのゲームループであるg_game.cと、JavaScriptベースのCAPTCHA UIが相互に状態をやり取りできるよう構成されている
  • 出発点はSDLベースの最小Doom移植版で、WebAssemblyへ効率的にコンパイルできる
  • 合法的な利用のため、shareware版wadであるdoom1.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の登録商標

1件のコメント

 
GN⁺ 2025-01-02
Hacker News のコメント
  • 意図されたやり方でやろうとしたが難しすぎて、開始地点に留まりつつ右側から来る敵だけを倒すような抜け道クリアができた

    • その開始条件なら抜け道ではなく標準戦術だよ。拳銃しかないときや、他の武器の弾薬が足りないときに使うやり方だ
      こういうゲームでは拳銃の命中精度がありえないほど高くて、遠距離から数発ずつ撃って敵を倒せるし、ここの敵はショットガンを撃ってくるけど長距離ではとても非効率だ。ゲームが散弾の拡散を非現実的なほど広くシミュレートしているので、遠くの敵が正確に狙っていてもダメージはごく小さい
      昔、大学の NetWare LAN でプレイしていたときも、距離を保つだけで、より強いが精度の低い武器を持った相手に勝てた。たいていはショットガンか、後のバージョンのダブルバレルショットガンで、みんなそれがいちばん痛快だと思っていた
      誰かに背後から接近されるまではよく通用するし、死んだあとでそこそこいい位置にリスポーンできれば、そいつをすぐ見つけて拳銃で仕返しできる。ロケットランチャー相手でも、直撃さえしなければ、あるいは外れた爆風ダメージで計画が崩れやすい場所にいなければ通用する
      昔風に言えば、多くのDOOM系ゲームやその後継作で有効な方法だ。HL2 でも基本の拳銃は発射ボタンを押すだけ無制限に撃てて、他の武器のような最小発射間隔がないので強い
    • これは最初のレベルではないけど、そのレベルに入るときの武器条件としては合っている
      しかもキーボード専用なので左右の矢印キーがキャラクターの回転に使われていて、現代の一人称シューティングでは左右移動に使い、マウスで回転するのに慣れているせいで反射神経が狂う
    • すべてがクライアント側で動いているなら、わざわざ抜け道を使う必要すらない。サーバーには本当に必要な数の敵を倒したか検証する手段がない
    • 自分もまったく同じことをやった。戻る矢印を押して下がり、1秒ごとにスペースバーを押していれば終わる。30秒ほどで CAPTCHA が解除された
    • このレベルをピストルスタートにするのはちょっと厳しすぎる。せめてショットガンは欲しい
  • 技術力は +100、使い勝手は -100。ノスタルジー旅行には +10、そして自分はもうゲームが下手だという自己認識も得た

    • これは通常 E1M3 のあとで出会う秘密レベル E1M9 だ。普通に進めていれば、この時点でショットガン、チェーンガン、ロケットランチャー、たぶんアーマーまで手に入れているはずだ
      このレベルを拳銃だけで始めさせて、見た感じ Ultra-Violence か Nightmare 難易度なら、撃ち殺されることを祈れと言っているようなものだ
    • マウスで視点変更できないとずっと難しい。通過するのに 10 回以上かかったし、Overwatch ではダイヤモンド
    • ボット相手に実際どれだけ安全なのかもわからない。今なら少なくとも人間並みにDOOM をプレイする AIは作れそうだ
    • 面白いことに、自分のキーボードには矢印キーがない。別レイヤーに割り当ててはあるが、この構成とは相性が悪い
      この実装が今では標準のWASDに対応していて、原作のようにマウス左ボタンで発射できたら、自分が人間だと証明するのはかなり簡単だったはずだ
  • 難しいレベルで、記憶が正しければ隠しレベルのひとつだ。-fast が有効な感じもするし、左右移動できないのでずっと難しい。それでもとてもかわいい

    • そう。E1M9 で、シェアウェア版の秘密レベル、しかも Nightmare 難易度だ
      昔のやり方どおり Alt を押しながらなら左右移動できる
      自分の環境では音が妙に高く聞こえたが、理由はわからない。このばかげた体験にはむしろ合っているので大した問題ではない
    • Linux の Firefox では左右移動できる。OS かブラウザの設定でブロックされているのかもしれない
    • 実際そんなに難しいのか? モバイルで動かないと軽く文句を言うつもりだったが、画面操作はちゃんと機能して、すぐに 3 体倒すのにも特に問題はなかった
      ただ最近クラシック Doomをかなり遊んではいる
    • Alt を押しっぱなしなら確かに左右移動できる。少なくとも自分はできた
    • そう、E1M9 はピストルスタートだと悪名高いほど難しい。見た瞬間にわかったが、子どものころ Doom にどれだけ時間を費やしたかがばれる
  • モンスターが多すぎて 3〜4 回は試した。本当にCAPTCHAっぽい

    • だからこれはパロディとして受け取った
    • 本物の CAPTCHA と同じで、障害のある人には地獄だ。10 点満点で 10 点
  • WASD すらなく、せめて Ctrl 射撃すらないなんて、どこの怪物だよ。それでもクールな CAPTCHA だ

    • ijkl;
  • AWS コンソールにログインするたびに CAPTCHA を解くと、こういうものを避けさせたい相手は簡単に自動化できるのに、ほとんどのユーザーはこの「機能」のせいで苦しめられていると思ってしまう
    一部のオープンソースモデルなら、そうした「AI 安全性」のゲートキーピングなしでも解ける
    Apple が CAPTCHA の解決策を提案していて[1]、標準化されて広く使われるのを待っている
    [1] https://support.apple.com/en-us/102591

    • 「アプリや Web サイトにログインするときに CAPTCHA を要求する代わりに、Apple のサーバーがデバイスと Apple Account を検証し、その検証が Apple によって確認された第三者のトークン発行サーバーに送られ、そのサーバーがアプリや Web サイトに対してユーザーを検証するプライベートアクセストークンを生成する」という仕組みだ
      これは明らかにプライバシー保護の面で良くはなく、Apple により大きな支配力を与える。CAPTCHA に 3 秒余計に使うほうがまだいい
    • 「CAPTCHA を完了する必要はありません。アプリやサイトにサインインするだけです」だって。お断りだ。いらない
      その一文を読んだ時点で Apple のサポート文書を読むのをやめた
  • 豆知識ひとつ。Doom の開発者たちは、各レベルが拳銃と 50 発だけで開始してもクリア可能かどうか、実際にプレイして確認していた

  • GitHub リポジトリで元のDoom Captcha 作者にクレジットを入れたのは正しいことだった。最近のソフトウェア業界全体への期待値が史上最低レベルなので、これは見ていて気分がよかった
    数年前のオリジナルはここ
    https://vivirenremoto.github.io/doomcaptcha
    https://github.com/vivirenremoto/doomcaptcha

  • これは難しい。どうやら自分は人間じゃないらしい
    Doom をやるのが久しぶりすぎるし、左右移動がないとほとんど不可能だ

    • 他でも出ているけど、Alt + 左右で左右移動できる
    • 前に出てモンスターをおびき寄せ、それからすぐ開始地点に戻って遮蔽物に隠れ、遠くから 1 体ずつ倒せばいい。簡単だ
  • これは 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 側も修正する必要があった