
2026/09/26 5:53
私のお気に入りのゲーム「王と盗賊」で frontier モデルの進歩を分析する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
2026 年 2 月〜9 月に、AI モデルは次々とジョーダン・メクナーによる元のアップル II 6502 アセンブリ言語版の『パーシバル・オブ・ペルシャ』を移植し、これは 2012 年の 20 年以上にわたる間、3.5 インチフレキシブルディスクから復元されたものです。現代の C# への変換では、初期ラウンドは Claude Opus 4.6 および OpenAI Codex を使用し、プレイ可能なコンソール/Raylib ビルドを作成しましたが、誤ったエンジンアーキテクチャ(例:タイルごとの移動ではなく、手描きアニメーションフレーム)を維持していました。第 3 ラウンド(Claude Opus 5)では、エンジンが元のフレームシーケンスアーキテクチャに適合するように再構築され、DOS インストール版の PRINCE.EXE から直接アニメーション、ダンジョンアートを、すべての 15 レベルを抽出しました。第 4 ラウンド(Claude Opus 5.5)では、SDLPoP のドキュメントと Dávid Nagy のリバースエンジニアリングされた部屋描画ルーティン(
DosRoomDrawer.cs)を活用し、DOSBox とピクセル単位で検証が行われ、「ランダム」なブロックパターンは決定論的であることが判明しました(部屋/行/列からシードが提供される)。また、PRINCE.EXE の Microsoft EXEPACK 圧縮を解凍して未変更のタイル描画テーブルを読み取り、スクリーンショットクロッピングにおける 1 ピクセルの行オフセットを修正し、「スタencil カラー」に関する以前の理論を否定しました。その結果、レベル 1 の最初の画面には炎を除くわずか 2 ピクセルのみが差異を示しました。同プロジェクトは、隠されたボタン押下の発見も果たし、ゲート打撃音をトリガーすることで、実際には扉が開いていることが確認されました。最終的な C# ポートは、既存の SDLPoP 知識とコミュニティ貢献を大きく依存しており、GPL-3.0-or-later ライセンスの下でリリースされ、元ゲームデータは除外されています(ランタイム時にユーザー自身の DOS ファイルから読み取られます)。クレジットにはジョーダン・メクナー、Dávid Nagy(SDLPoP)、Fabien Sanglard が含まれます。完全なコード履歴は github.com/priyanr/PrinceOfPersia_C-Sharp_Port_By_AI にあり、DosRoomDrawer.cs には Dávid Nagy のライセンス通知が含まれています。本文
AI が逆導入行なう《王子の冒険》移植プロジェクト
1995 年、IBM PC XT で『王子の冒険』(Prince of Persia)を初めてプレイしました。被描影アニメーションによる滑らかな動作や、崖の縁に掛かる王子的姿など、30 年経った今でもその体験はユニークです。
プロジェクトの背景と方法
- 元のコード: 2012 年、乔丹・メクナー(Jordan Mechner)氏が Apple II の 6502 アセンブラ言語で書かれた元コードを復元し公開しました [1]。
- 実験手法: 私が愛する C# を対象として、AI モデルに逆導入を行わせたプロジェクトです。
- 私はコードを直接読んだり修正したりしません。
- 唯一の役割は「プレイテスト」を行い、AI に問題を指摘すること。
- モデル: Frontier シリーズ(Claude Opus 4.6, Codex, Opus 5, Opus 5.5 など)の最新版が登場するごとに実験を繰り返しています。
- 元コードへのリンク: https://github.com/priyanr/PrinceOfPersia_C-Sharp_Port_By_AI
実験の経過:4 つのラウンド
ラウンド 1: Claude Opus 4.6 (2026 年 2 月)
目標: 元のアセンブラコードとカージデータを読み取り、C# コマンドラインアプリに移植する。
- 成果: C# コマンドラインゲーム、レベルエディタ、Raylib グラフィックライブラリ版を作成。元の部屋の構造や衛兵位置を解析。
- 問題点:
- 挙動がまるで『王子』らしくなく、**「プレイ不能」**な状態。
- 図形が混乱し、キャラクターは地面以下に落ちたり、操作が効かなかったりする。
- 原因分析: 元ゲームは手描きアニメーションで動きますが、AI は**「格子網格」**に基づいて移動させてしまい、アニメーションの滑らかさを再現できていませんでした。
ラウンド 2: OpenAI Codex (2026 年 3 月)
目標: ラウンド 1 の成果を元にして、図形品質や挙動を修正する。
- 対応策:
- シャープなピクセルフィルターによるボケ防止。
- 透明な背景エフェクトの適用。
- 城門を通れるようにし、柱のバグを修正。
- 残りの問題: キャラクターの位置がズレたり、固まったりする根本的な**「アーキテクチャの不整合」**は改善されませんでした。「表面だけを磨く」ような結果になりました。
ラウンド 3: Claude Opus 5 (2026 年 9 月)
目標: DOSBox と Windows アプリを制御する機能を追加し、元ゲームと対比させる実験を行う。
- アプローチの転換:
- AI に元 DOS バージョンと比較させ、深夜まで自動テストを続かせた。
- AI はすぐに**「格子駆動ではなくアニメーション駆動」**という構造の問題を発見し、エンジンを再設計。
- 驚異的な能力:
- 独自に DOS ゲームデータの形式を推論。王子的アニメーションやダンジョンアート、15 カージ分の全データを読み取り。
- PRINCE.EXE 内のアニメーションテーブルを見つけ出し、既知値とのクロスチェックを行いながら検証。
- 結果:
- 着地、転身、ラン、ジャンプなど全てのアニメーションが正確に再生されるプレイ可能版を生成。
- ただし、壁や装飾の詳細なピクセル配置は推測によるため完全ではありませんでした。
ラウンド 4: Claude Opus 5.5 (2026 年 9 月):単一プロンプトでの達成
目標: 「城門の位置」や「ブロック配置」の違いを修正し、元ゲームに忠実にする。
- 画期的なアプローチ:
- 推測ではなく、オープンソース移植プロジェクト(SDLPoP)から得た**「部屋の描画ロジック」**を読み込みました [2]。
を使用し、C# に純粋に移植して再現。DosRoomDrawer.cs
- AI が発見した重要な事実:
- ブロックパターンは真正 random ではなく、**「部屋の索引に基づきシードを固定」**していることを特定。
- 城門の閉まる音は、隠れたボタンが押された際の効果音であることを突き止め。
- PRINCE.EXE が圧縮されていることを見つけ、独自に解凍ツールを作成してデータを抽出。
- 最終検証:
- ピクセル単位の比較を行い、第一カージの差異を 8,429 ピクセルからわずか 2 ピクセルまで削減(残りはトーチの揺れによるもの)。
- キャラクターの移動ロジックは完璧ですが、スプライト描画時の向きが逆だと壁に埋まるバグを見つけ、自動で修正を元に戻す**「自己検証メカニズム」**を発揮しました。
至此、各カージの風貌がオリジナルと見分けがつかないほど完成しました。
実験からの教訓
| モデル | 特徴と評価 |
|---|---|
| Opus 4.6 | アセンブラを C# に翻訳できるが、構造を誤って理解。自己診断能力も不足。 |
| Codex | 細かい修正(ピクセル、透明化等)は得意だが、基礎アーキテクチャへの疑問を持たず、実際に動かしてテストする習慣がない。 |
| Opus 5 | 元ゲームとの比較ツールを備えることで、構造問題を診断しエンジン再建。外部データから真の情報を掘り起こす。初のプレイ可能版。 |
| Opus 5.5 | 「元ゲームがどのように実装されているか」を探究する姿勢へ転換。SDLPoP の知識と自己検証により、ピクセル単位で正確に再現。 |
AI が回答:「プロンプト一つでは全ての逆導入は困難です。私は SDLPoP の研究成果を読み込み、そこから移植しました。EXE 内のデータを抽出できたのも、SDLPoP が教えてくれたからです。もし SDLPoP がなければ、独自にアセンブラへの逆コンパイルを行う必要がありますが、それは非常に時間がかかる作業です。」
最大の進歩は、モデルの知能向上だけでなく、**「元ゲームを観察して比較する能力」**を与えたことによるものです [3]。
今後の展望と謝辞
現在ではまだ衛兵のロジックや宮殿カージなどの機能が未完成ですが、より高性能なモデルが登場したらさらに進化するでしょう。
このプロジェクトには、長年にわたり愛され続けてきたゲームへの情熱を持つ先人たちの貢献に感謝いたします。
謝辞
- ジョルダン・メクナー (Jordan Mechner): 『王子の冒険』を制作し、Apple II の元コードを開示しました [1]。
- Dávid Nagy と princed.org コミュニティ: アセンブラから復元した DOS バージョン「SDLPoP」を開発しました [2]。
- 本プロジェクトの基盤である
は、SDLPoP の C# 移植版です。DosRoomDrawer.cs
- 本プロジェクトの基盤である
- FaBien Sanglard: 『王子の冒険』に関する詳細なコード分析報告を提供(fabiensanglard.net) [4]。
ライセンスと免責事項
- このプロジェクトはGPL-3.0-or-laterライセンスの下で配布されます。
- 非商業的なファン作品であり、Ubisoft や Jordan Mechner 社との何ら関係はありません。公式の承認も受けていません。
- ゲームのデータ(グラフィック、音楽など)は使用していません。C# コードは実行時にあなたが所有する DOS バージョンからデータを自動読み込みます。
遊び方
- GitHub リポジトリ: PrinceOfPersia_C-Sharp_Port_By_AI
- ここに、各ラウンドの詳細なプロセスやコードが保存されています。
出典: [1] github.com/jmechner/Prince-of-Persia-Apple-II [2] github.com/NagyD/SDLPoP [4] fabiensanglard.net/prince_of_persia