最先端のClaude Opus 5.5で、スーパーファミコンの新作を作った──一晩で実機が動いた推理アドベンチャー<制作編>

スーパーファミコン

最近、Claude Opus 5.5やGPT-6 Astraで「すごいゲームを作った」という話をよく見かけます。3Dのリアルなグラフィックで、どちらかと言えば本格派のものが多い印象です。

普通なら、ここで私も最新のAIでリアルなゲームを……となるところですが、私の辞書に「素直」の二文字はありません。

最先端のOpus 5.5に、スーパーファミコンの新作ゲームを作ってもらいます。もちろん、実機で動かします(断言

作るのは、コマンド選択式の推理アドベンチャーです。レトロゲームのレビュー記事で白状したとおり、私は『ファミコン探偵倶楽部』の筋金入りの信者で、生成AIで実写化する計画まで完走しました。次は、あの手触りの「新作」を遊んでみたくなったのです。

先に結論を書きます。

  • できたのは、スーパーファミコン用の推理アドベンチャーです。 舞台は昭和の終わりの地方で、全6章、2〜3時間を目指しました。SFメモリカセットに書き込み、実機で動いています
  • プログラム(65816のアセンブリ)、シナリオ、絵、音楽、テストまで、作ったのはすべてClaude Code(Opus 5.5)です。 私がしたのは、方向を決めること、ツールの導入を許可すること、実機で確かめることでした
  • 相談から約7時間で、実機で遊べる本編ができました。 夕方6時42分に相談して、翌日の午前1時56分です
  • 私はシナリオを1行も読んでいません。 犯人もトリックも知らないまま、自分で遊ぶためです。ゲームの題名も、タイトル画面で初めて知りました
  • Claude Codeは音を聴けません。 そこで、音源チップのレジスタを毎フレーム読んでピアノロールにして、曲を確かめています
  • 実機でしか出ない不具合は、私が寝ている間にClaude Codeが先回りして探しました。 セーブまわりの不具合を2件見つけて、直しています
  • この記事は、ネタバレなしの<制作編>です。遊んだ感想は、後日の<レビュー編>で書きます

まず、完成品をどうぞ

電源を入れると、「Made with Claude Code」、GEEK OYAJI GAMESのロゴ、タイトル画面の順に出ます。ロゴはブログ映えを狙って私が頼みました(下心
電源を入れると、「Made with Claude Code」、GEEK OYAJI GAMESのロゴ、タイトル画面の順に出ます。ロゴはブログ映えを狙って私が頼みました(下心

電源を入れてから、タイトルのメニューが出るまで6.5秒です。起動画面の2枚は、ブログに載せることを考えて、私が追加をお願いしました。マスコットのOYAJIくんも、ドット絵になって出演しています。

題名は『霜踏み』。この記事でお見せできるのは、ここまでです。ここから先は、私もまだ冒頭の5分しか遊んでいません。見た感じ、とても良い出来です。

作る前に確かめたこと

ライセンスなしで作って、実機で遊んでいいの?

最初に気になったのは、ここでした。Claude Codeが調べた結論は、次のとおりです(法律相談ではありません)。

  • 自分で作ったソフトを、自分のSFメモリに書いて、自分の実機で遊ぶのは、適法と考えてよい。 ライセンスは任天堂との契約の話で、ライセンスなしの開発そのものを禁じる法律はありません
  • SFメモリは任天堂純正のカセットなので、プロテクトを破る必要がない。 書き込みも、決まったコマンドを送るだけです(技術資料)。不正競争防止法が規制しているのは、プロテクトの回避装置などを人に「提供」することで、個人の使用ではありません
  • 純正のSFメモリを書き換えて売るのは危ない。 任天堂の商標が付いたまま中身を変えた品を売るのは、商標権の侵害とされた判例があります。今回は自分で遊ぶだけです

エミュレーターやROMの吸い出しの話は、以前の記事にまとめています。

SFメモリとは

SFメモリは、1997年に任天堂が始めた「ニンテンドウパワー」の書き換え用カセットです。本来はローソンの端末でゲームを書き込むもので、中にはフラッシュメモリ4MB(32Mbit)とセーブ用のSRAMが入っています。今は、オープンソースのOSCRなどで書き込めます。私は手持ちのOSCRを使いました。

4MBあれば、推理アドベンチャーには十分です(今回使ったのは532KBでした)。Claude Codeによると、スーパーファミコン版の『ファミコン探偵倶楽部PartII』も、ニンテンドウパワーで配信された24Mbit(3MB)のゲームだったそうです。

7時間の流れ

相談から本編のファイルができるまで。午前2時すぎに私が寝たあとも、Claude Codeは不具合を探していました(働き者
相談から本編のファイルができるまで。午前2時すぎに私が寝たあとも、Claude Codeは不具合を探していました(働き者
  • 18:42 相談:私が「SFメモリに書いて、実機で遊べる推理アドベンチャーを作りたい」と相談
  • 19:33 開発ツールを導入:Claude Codeがダウンロードの前に確認してきたので、私は許可しただけです
  • 19:40 最初のテストROM:Claude Codeが、画面にカラーバーを出すだけのROMで、ビルドから書き込み用ファイルまでの流れを通しました
  • 21:10 日本語が出た:12×12ドットの日本語が、1文字ずつ表示されるようになりました
  • 21:30ごろ〜23:40 シナリオ:全6章と、別のClaudeによる校閲
  • 23:16〜0:07 絵:私がComfyUIを起動し、Claude Codeが背景25枚と顔11人を生成
  • 1:39 デモが実機で動いた:エンジンの試作版を私がSFメモリに書き、実機で確かめて報告
  • 1:56 本編のファイルが完成
  • 2:15〜3:46 夜通しの不具合探し:私は就寝。Claude Codeが、実機でしか出ない不具合を探していました

私はシナリオを1行も読んでいない

相談を始めて1時間ちょっとの19:53に、私は「できればネタバレなしで遊びたい」とClaude Codeに伝えました。そこからClaude Codeは、私が物語を見ないで済む作り方に切り替えています。

  • 答えは封印フォルダに:シナリオ、事件の設計、攻略手順、場面の絵は、sealed(封印)という名前のフォルダに入れる。私は開かない
  • 報告は数字だけ:進み具合の報告は、「6章、74場面、テスト合格」のような数字と、仕組みの話だけ
  • テストの画面も封印:物語の場面が写るテストのスクリーンショットは、封印フォルダにしか出さない
  • 絵は、作ったらすぐ隠す:画像生成の出力フォルダから封印フォルダへすぐに移し、ComfyUIの履歴からも自分の分を消す
  • 題名も秘密:題名は、タイトル画面で初めて見ました

作らせた本人が、犯人を知らない。自分で作らせたゲームで、自分が探偵役をする。なかなか贅沢な遊び方です(笑

私が決めたのは「枠」だけ

私が決めたのは、Claude Codeが出した選択肢の中から選んだ「枠」だけです。

項目私が選んだもの
舞台昭和の終わりの地方
雰囲気怪談・ホラー寄り
長さ2〜3時間の前後編
難しさ標準(ファミコン探偵倶楽部くらい)

Claude Codeは、既存の推理アドベンチャー24作を調べ、トリックを52の型に分けてから、新しい事件を設計しました。どの作品とも、重なる要素が1つまでになるようにしたそうです。この調査メモには各作品のネタバレが書いてあるので、Claude Codeが私に伝えたのは件数だけでした。

別のClaudeに校閲させ、機械に遊ばせる

シナリオは6章・74場面で、文章は約3万9,000字。聞き込みで分かったことがたまる手帳は、58項目になりました。

書き上げたシナリオを、Claude Codeは別のClaude(サブエージェント)2体に、前半と後半に分けて校閲させています。指摘は、話の食い違いが15件、推理がフェアかどうかが9件、進行が5件、最後の問答まわりが22件。「最短の手順で進んだ人が、問いの前提を聞かないまま問われる」穴も見つかり、Claude Codeが塞ぎました。

詰みがないかは、Claude Codeが機械に遊ばせて確かめています。

  • でたらめに300周:台本をPythonで遊ぶチェッカーを作り、でたらめな選択で300周させて、全部がエンディングに着くこと
  • 根拠の先回り:推理の問いで答えるとき、根拠になる手帳の項目が必ず先に手に入ること
  • 実際にボタンを押す:手書きの攻略手順(167手)を、エミュレーターの上で実際に押してエンディングまで通すこと

エンジンは、Claude Codeが一から書いた

スーパーファミコン用の、オープンソースのアドベンチャーゲームのエンジンは、Claude Codeが探した範囲では見つかりませんでした。そこでClaude Codeは、65816(スーパーファミコンのCPU)のアセンブリで、エンジンを一から書いています。

  • 文字:12×12ドットの日本語。フォントはPixelMplus12で、使う文字だけ(986字)を変換して入れる
  • 絵:場面の絵は240×120ドット、人物の顔は64×64ドット
  • コマンド:いどう・みる・しらべる・きく・みせる・でんわ・かんがえる・メモ・きろく。場面ごとに、使えるものが並ぶ
  • 手帳と推理の問い:聞き込みで分かったことが手帳にたまり、問いでは答えと、その根拠(手帳から選ぶ)を選ぶ
  • セーブ:カセットのSRAM(8KB)に記録する
  • 音:オープンソースのサウンドドライバ、Terrific Audio Driverを使う
エンジンの試作。台本はテスト用で、絵はOYAJIくんです。本編の画面は、ネタバレになるので載せません(私もまだ見ていない場面ばかり
エンジンの試作。台本はテスト用で、絵はOYAJIくんです。本編の画面は、ネタバレになるので載せません(私もまだ見ていない場面ばかり

シナリオは、Claude Codeが作った台本用の簡単な言語で書かれています。これをPythonのコンパイラが命令列に変え、エンジンが1命令ずつ実行する仕組みです。

使ったソフトは、すべて無料です。

用途道具ライセンス
65816のアセンブラcc65(ca65 / ld65)zlib
エミュレーターと自動テストMesen 2GPL-3.0
サウンドドライバTerrific Audio Driverzlib / MIT
日本語フォントPixelMplus12M+ FONT LICENSE
画像生成Z-Image(ComfyUIで実行)Apache-2.0
SFメモリへの書き込みOSCR(私の手持ちの機械)

ROMの容量は、Claude Codeが2MB(16Mbit)に決めました。実際に使ったのは532KBです。

中身容量
場面の絵(背景25枚、タイトル、起動画面)343KB
文章85KB
フォント(986字)31KB
台本(命令列)26KB
顔(11人)22KB
音楽と効果音(サウンドドライバ込み)19KB
プログラム本体5KB

プログラム本体は、わずか5KBです。Claude Codeが書いたコードは、エンジンが約3,500行(アセンブリ)、変換ツールやチェッカーが約2,800行(Python)、テストが約1,300行(LuaとPython)でした。

絵:画像生成AIで描いて、スーファミの色に落とす

絵は、Claude Codeが画像生成AIのZ-Imageで作りました。ComfyUIで、自宅のEVO-X2で1枚1分ほどです。背景が25枚、人物の顔が11人です。

Claude Codeによると、指示文に「16ビットのゲームの背景」と書くと、最初からドット絵ふうの絵が出てきて、色数を落としても崩れにくかったそうです。

スーパーファミコンの絵は、8×8ドットのタイルごとに、16色のパレットを1つ選んで塗ります。Claude Codeは、この制約に合わせて減色するツールも自作しました。1枚の絵に使うパレットは6本で、色の近さは人の目の感じ方に近い色空間(OKLab)で測っています。

減色ツールの例。本編の絵は見せられないので、前回の記事の懐中時計で試しました。これで1枚約14KBです(意外といける
減色ツールの例。本編の絵は見せられないので、前回の記事の懐中時計で試しました。これで1枚約14KBです(意外といける

例に使ったのは、前回の記事でClaude CodeがBlenderで作った懐中時計です。

生成した36枚のうち、9枚はClaude Codeが作り直しています。11月の話なのに青々とした田んぼ、霜のはずが一面の雪景色、人が写り込んだ絵、意味のない英字の看板が入った絵などです。顔は、無地の背景から人物の輪郭を取り出し、頭の大きさと位置を割り出して、64×64ドットに自動で切り抜きました。

音楽:耳のない作曲家

曲は9曲、効果音は9つ。Claude Codeが、楽譜をテキストで書く形式(MML)で作曲しました。音色は、琴、尺八ふうの笛、鐘、弦のパッド、低音、太鼓をClaude CodeがPythonで合成し、ピアノとバイオリンは、Terrific Audio Driverに付いてくるパブリックドメインの音を使っています。

問題は、Claude Codeが音を聴けないことです。そこでClaude Codeは、エミュレーターで音源チップ(S-DSP)のレジスタを毎フレーム読み、8つの声部の音程と音量をピアノロールの図にして確かめました。

タイトル曲の最初の約24秒。横が時間、縦が音の高さです。Claude Codeは、この図で「どの楽器が、いつ、どの高さで鳴ったか」を確かめています(耳の代わり
タイトル曲の最初の約24秒。横が時間、縦が音の高さです。Claude Codeは、この図で「どの楽器が、いつ、どの高さで鳴ったか」を確かめています(耳の代わり

ただ、耳の代わりには限界がありました。1曲目と2曲目には、Claude Codeが音源チップのノイズ機能で「風の音」を入れていました。ノイズには音程がないので、最初のピアノロールには出てこず、Claude Codeはあとから図に1段足しています。ところが、実機で聴いた私には、これが「小さいノイズ」に聞こえました。Claude Codeが吹かせた風は、人間の耳にはただの雑音だったわけです(切ない。報告すると、Claude Codeは風の音を外しました。

曲を聴いた私の感想は、「全体的に演歌っぽい」です(笑。Claude Codeによると、9曲のうち8曲で琴か尺八ふうの笛を使い、陰音階や陽音階といった日本の音階も多く使ったそうです。Claude Codeが楽譜に残したコメントには、1曲だけ「ヨナ抜き短音階の演歌ふう」とまで書いてありました(確信犯

実機で動かす

Claude Codeは、ビルドしたROMから、SFメモリ用の4MBのイメージと、512バイトのマップ(どのゲームをどう読み込むかの情報)を作るツールも書きました。私は、これをOSCRで「Write Flash」「Write mapping」の順に書き込むだけです。

最初に実機で試したのは、本編ではなく、エンジンの試作版(OYAJIくんのテスト用の台本)です。日本語の表示、絵、コマンド、手帳、そして電源を切っても残るセーブまで、全部動きました。見つかった不具合は2つです。

  • つづきからの直後に曲が鳴らない:隣の部屋に移ると鳴りだす。エンジンが「今鳴っている曲」をセーブに入れていなかった
  • 1曲目と2曲目に小さなノイズ:前の節の「風の音」

どちらもClaude Codeが直し、起動画面を足して、本編のファイルができあがりました。ここまでで、相談から7時間14分です。

私が寝ている間に:実機でしか出ない不具合を先回り

本編のファイルを受け取ったところで、「今日はもう遅いので就寝します。引き続きデバッグをお願いします」と伝えて、私は寝ました。

エミュレーターで動くことと、実機で動くことは違います。有名なのは、画面を描いている最中にVRAM(画面用のメモリ)へ書き込むと、実機ではその書き込みが無視されて画面が崩れる、というものです。エミュレーターによっては、これがそのまま動いてしまいます。

そこでClaude Codeは、エミュレーターのMesenに「見張り役」を付けました。

見張ったもの結果
描画中のVRAMなどへの書き込み全編の通しプレイで1,045万回の書き込みを1回ずつ確かめ、描画中は0回。いちばん重い場面でも、転送は描画の合間(垂直帰線期間)が終わる9ライン前までに終わる
でたらめに遊ぶボット(余計なボタン、Bボタン、リセットも混ぜる)15万フレーム(約42分)×6本、各章の頭から5本、エンディングのあと2本。暴走、固まり、スタックのあふれは0
セーブ → リセット → つづきから攻略手順の72か所で試して、読み込んだ中身がセーブしたときと1バイト残らず一致

そして、Claude Codeは本物の不具合を2つ見つけています。

  • デモのセーブを、本編が読み込んでしまう:私のカートには、デモのセーブが残っています。デモと本編のセーブは同じ印を使っていたので、本編を書いた直後のタイトル画面に「つづきから」が出て、選ぶとデモのデータで本編が壊れた状態で始まるところでした。Claude Codeは、セーブにゲームごとの印を入れて直しています
  • 壊れたセーブで、タイトル画面が暴走する:セーブの途中で電源が切れるなどして中身が壊れていると、「つづきから」を出すかどうかの判定のあとで、変な場所へ飛んでいました。前からあった不具合です

1つ目は、私が本編を書き込んで電源を入れれば、必ずタイトル画面に「つづきから」が出ていました。うっかり選んでいたら、と思うとゾッとします。寝ている間に、地雷を撤去してもらっていました(感謝

朝、Claude Codeが直した版を書き込んで、冒頭の5分を遊びました。

人間がやったこと、Claude Codeに任せたこと

人間(私)Claude Code
相談(SFメモリで実機、探偵倶楽部のような推理アドベンチャー)、「ネタバレなしで遊びたい」法律、SFメモリ、開発環境の調査。ネタバレしない作り方(封印フォルダ、数字だけの報告)
枠を選ぶ(昭和の終わりの地方、怪談寄り、2〜3時間、標準の難しさ)既存24作の調査、事件の設計、シナリオ全6章、別のClaude 2体による校閲、詰みのチェック
開発ツールのダウンロードの許可ツールの導入、エンジン(65816のアセンブリ)、変換ツールとコンパイラ(Python)、自動テスト
ComfyUIの起動絵の生成と作り直し、減色、顔の切り抜き、題字
曲の試聴と感想(「演歌っぽい」)作曲(MML)、音色の合成、レジスタのログでの確認
SFメモリへの書き込みと実機での確認(デモ、曲、本編)、不具合の報告、起動画面の注文不具合の修正、起動画面、SFメモリ用ファイルの作成、夜通しの不具合探し
この記事のレビューこの記事の下書きと図

正直、気になっていること

  • 曲の良し悪しを、Claude Codeは判断できません。 レジスタのログで分かるのは、どの楽器がどの高さで鳴ったかまで。演歌っぽいかどうかは、人間の耳でないと分かりません
  • シナリオの出来は、私にもまだ分かりません。 読んでいないので(当然)。面白いかどうかは、<レビュー編>で正直に書きます
  • 実機で確かめたのは、本体1台とSFメモリ1本だけです。 ほかの本体や互換機での動作は確かめていません
  • 絵は、AIが描いたものの色数を落としただけです。 ドット絵職人のような手直しはしていません
  • 見張り役が見張れるのは、分かっている違いだけです。 実機とエミュレーターの違いのうち、知られていないものは見つけられません

まとめ

  • 最先端のAIは、30年以上前のゲーム機の「新作」も作れる。65816のアセンブリから、シナリオ、絵、音楽まで
  • 相談から実機で遊べるまで、約7時間。私がしたのは、方向を決めること、許可すること、実機で確かめること
  • 音が聴けないなら、音源チップのレジスタを読んで図にする。ただし、音程のない音は図に出ない
  • 実機でしか出ない不具合は、エミュレーターに見張り役を付けて先回りする。寝ている間に、セーブまわりの不具合が2つ見つかった
  • 作らせた本人がネタバレを知らないまま遊ぶ、という贅沢もできる

私は今、自分で作らせたゲームを、1人のプレイヤーとして遊んでいます。犯人が誰なのか、私はまだ知りません。遊び終えたら、<レビュー編>で感想を書きます。お楽しみに。

私の辞書に「素直」の二文字はない。犯人の名前も、まだ載っていない。

コメント

タイトルとURLをコピーしました