DOOM CAPTCHA
(doom-captcha.vercel.app)- DOOM CAPTCHAは、人間であることを証明するためにDOOM®を実際にプレイさせるCAPTCHAで、教育・エンターテインメント性を持つ実験的プロジェクト
- 中核の実装は、
Emscriptenで最小構成のDoom移植版をWebAssemblyにコンパイルし、CのゲームループとJavaScriptUIをつなぐ方式 - 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向けのゲーム変更
-
メニューと復活処理
-
UIへ渡されるゲームイベント
- CAPTCHA UIはJavaScriptコールバックでゲーム状態を受け取り、判定フローに活用する
onPlayerBorn: プレイヤーが生成または復活したときに呼ばれるonPlayerKilled: プレイヤーが死亡したときに呼ばれるonEnemyKilled: メインプレイヤーが敵を倒したときに呼ばれる
-
デフォルト実行難易度
d_main.cのデフォルト実行フラグを変更し、最初からより難しい状況になるようにしている-skill 5: 難易度を"Nightmare!"に設定-fast: ゲームをより難しくする-warp e1m1: アクションのある地点からゲームを開始-nomenu: プレイヤーがメインメニューを開けないようにする
1件のコメント
Hacker News のコメント
意図されたやり方でやろうとしたが難しすぎて、開始地点に留まりつつ右側から来る敵だけを倒すような抜け道クリアができた
こういうゲームでは拳銃の命中精度がありえないほど高くて、遠距離から数発ずつ撃って敵を倒せるし、ここの敵はショットガンを撃ってくるけど長距離ではとても非効率だ。ゲームが散弾の拡散を非現実的なほど広くシミュレートしているので、遠くの敵が正確に狙っていてもダメージはごく小さい
昔、大学の NetWare LAN でプレイしていたときも、距離を保つだけで、より強いが精度の低い武器を持った相手に勝てた。たいていはショットガンか、後のバージョンのダブルバレルショットガンで、みんなそれがいちばん痛快だと思っていた
誰かに背後から接近されるまではよく通用するし、死んだあとでそこそこいい位置にリスポーンできれば、そいつをすぐ見つけて拳銃で仕返しできる。ロケットランチャー相手でも、直撃さえしなければ、あるいは外れた爆風ダメージで計画が崩れやすい場所にいなければ通用する
昔風に言えば、多くのDOOM系ゲームやその後継作で有効な方法だ。HL2 でも基本の拳銃は発射ボタンを押すだけ無制限に撃てて、他の武器のような最小発射間隔がないので強い
しかもキーボード専用なので左右の矢印キーがキャラクターの回転に使われていて、現代の一人称シューティングでは左右移動に使い、マウスで回転するのに慣れているせいで反射神経が狂う
技術力は +100、使い勝手は -100。ノスタルジー旅行には +10、そして自分はもうゲームが下手だという自己認識も得た
このレベルを拳銃だけで始めさせて、見た感じ Ultra-Violence か Nightmare 難易度なら、撃ち殺されることを祈れと言っているようなものだ
この実装が今では標準のWASDに対応していて、原作のようにマウス左ボタンで発射できたら、自分が人間だと証明するのはかなり簡単だったはずだ
難しいレベルで、記憶が正しければ隠しレベルのひとつだ。
-fastが有効な感じもするし、左右移動できないのでずっと難しい。それでもとてもかわいい昔のやり方どおり Alt を押しながらなら左右移動できる
自分の環境では音が妙に高く聞こえたが、理由はわからない。このばかげた体験にはむしろ合っているので大した問題ではない
ただ最近クラシック Doomをかなり遊んではいる
モンスターが多すぎて 3〜4 回は試した。本当にCAPTCHAっぽい
WASD すらなく、せめて Ctrl 射撃すらないなんて、どこの怪物だよ。それでもクールな CAPTCHA だ
AWS コンソールにログインするたびに CAPTCHA を解くと、こういうものを避けさせたい相手は簡単に自動化できるのに、ほとんどのユーザーはこの「機能」のせいで苦しめられていると思ってしまう
一部のオープンソースモデルなら、そうした「AI 安全性」のゲートキーピングなしでも解ける
Apple が CAPTCHA の解決策を提案していて[1]、標準化されて広く使われるのを待っている
[1] https://support.apple.com/en-us/102591
これは明らかにプライバシー保護の面で良くはなく、Apple により大きな支配力を与える。CAPTCHA に 3 秒余計に使うほうがまだいい
その一文を読んだ時点で Apple のサポート文書を読むのをやめた
豆知識ひとつ。Doom の開発者たちは、各レベルが拳銃と 50 発だけで開始してもクリア可能かどうか、実際にプレイして確認していた
GitHub リポジトリで元のDoom Captcha 作者にクレジットを入れたのは正しいことだった。最近のソフトウェア業界全体への期待値が史上最低レベルなので、これは見ていて気分がよかった
数年前のオリジナルはここ
https://vivirenremoto.github.io/doomcaptcha
https://github.com/vivirenremoto/doomcaptcha
これは難しい。どうやら自分は人間じゃないらしい
Doom をやるのが久しぶりすぎるし、左右移動がないとほとんど不可能だ
これは Vercel の AI アシスタント v0 で作られた
チャットへのリンクはこれ: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0
印象的には聞こえるかもしれないが、数秒間「loading」を表示するボタンのような些細なインタラクションを足す程度を除けば、機能的には winforms のようなドラッグ&ドロップ UI デザイナーと大差ない。その前身である Visual Basic も 90 年代にはすでにあった
それでも、そのチャットは少しすると読んでいてつらくなる。要するに「ボタン内のテキストを中央揃えにして」「中央じゃない、中央にして」「お願いだからテキストを中央にして」という流れだ
残りのソースがあるリポジトリはここ: https://github.com/rauchg/doom-captcha
メニューをスキップしたり必要なコールバックを追加したりするなど、いくつかの調整のために Doom 側も修正する必要があった