メインコンテンツへ移動
AIチュートリアル

AIで拡張された無限のポケモン世界を構築・探索する

Node.jsまたはAIアシスタントでInfinite Pokémonをセットアップし、シングルプレイヤーまたはマルチプレイヤーの世界を開始する方法を解説します。AIなしのチュートリアルプレビューの使い方、マップ生成の設定、永続セーブデータの保護に加え、サーバー権威型設計、Codex連携、操作方法、バックアップ、Dockerオプション、リモートホスティング時の注意点も説明します。

AIで拡張された無限のポケモン世界を構築・探索する

Infinite Pokémonとは?

Infinite Pokémonは、永続的なポケモン風のピクセルアート生物捕獲RPGをプレイできるTypeScriptプロトタイプです。この作品の中心的な実験は、プレイ中も世界の記述が続いていく仕組みです。ローカルAIハーネスは、冒険の記録済み履歴を使って、これから登場する場所、キャラクター、会話、バイオームの選択肢、ストーリーのきっかけを提案します。

Infinite PokémonのゲームプレイとCodexによる世界生成

このプロジェクトでは、AIがゲームの権威ある状態を制御することはできません。移動、衝突判定、バトル、インベントリ、進行状況、その他のゲームルールはサーバーによって適用されます。AIの提案は、世界に追加される前にスキーマ検証、マップ検証、依存関係チェックを通過する必要があります。訪れた場所は安定して維持され、新しい目的地はプレイヤーの先回りで生成・キャッシュできます。

重要: Infinite Pokémonは、教育目的および非商用利用のみを想定した実験的なファンプロジェクトです。任天堂、Creatures、GAME FREAK、またはThe Pokémon Companyの公式製品ではなく、これらの企業とは提携していません。

継続する世界の仕組み

  1. サーバーが権威を持ち続けます。 AIの提案によってトレーナーを移動させたり、勝利を与えたり、衝突判定を回避したり、進行状況を直接変更したりすることはできません。
  2. 世界は実際のイベントを記録します。 各プレイでは、マップ、選択、NPCの記憶、プレイヤー、生成ジョブ、イベント履歴がローカルのSQLiteデータベースに保存されます。
  3. Codexが今後のコンテンツを提案します。 ホストのローカルCodexプロセスは不変スナップショットを読み取り、現在のエンジンと互換性のある範囲内の提案を生成します。
  4. 検証が実行環境を保護します。 スキーマとマップのチェックによって、提案されたコンテンツを受け入れられるかどうかを判断します。
  5. チェックポイントが分岐を支えます。 古いチェックポイントから続行すると、独自のデータベース、記憶、生成コンテキストを持つ別のブランチが作成されます。

現在、このシステムはAIが任意に作成した実行可能なゲームプレイではなく、検証済みでシード設定されたマップテンプレートを使用しています。ハーネスは、名前、説明、NPCプロフィール、あいさつ、バイオームの選択、ストーリーのきっかけ、範囲を限定した地形要素を提供できます。新しい生物、アイテム、乗り物のビジュアルは、検証済みのピクセルアートレシピからレンダリングできますが、外部で生成された画像のインポートには対応していません。

主な機能

  • プレイ単位で永続化されるマップ、イベント、ストーリーの選択、NPCの記憶。
  • サーバー権威型の移動、衝突判定、バトル、インベントリ、進行状況。
  • ホストのローカルCodex接続を使用したシングルプレイヤー探索。
  • モデル呼び出しやトークンを一切使用しない、5エリア構成の有限なチュートリアルプレビュー。
  • 最大8接続の同時接続と64人の保存済みトレーナーに対応したホスト・参加型マルチプレイヤー。
  • 0から3まで設定できるマップ準備の深度。
  • 1から8ブロックまで設定できる同時生成バッチ。
  • 未完成の目的地に対するキュー状況の確認、再試行、キャンセル操作。
  • 不変のチェックポイントと分離されたタイムライン分岐。
  • ショップ、回復、野生の遭遇、ルート上のトレーナー、自転車、育て屋、ハイブリッドタマゴ。
  • ブラウザ、ソースから実行するElectronデスクトップ、オプションのLinux Dockerワークフロー。

前提条件

通常のローカルワークフローでは、Node.js 22.13以降をインストールしてください。Node.js 22.13から22.15までがサポートされていますが、新しいオンラインバックアップAPIを利用できない場合、データベースのバックアップでは短時間ブロッキングするSQLiteのVACUUM INTOフォールバックが使用されます。

Dockerはオプションです。ランタイム依存関係にCodex CLI 0.153.4が含まれているため、別途グローバルなCodex CLIをインストールする必要はありません。ブリッジは、古いグローバル実行ファイルによって互換性が変わるのを防ぐため、プロジェクトローカルのCLIを優先します。

方法1: AIアシスタントでセットアップする

最短のセットアップ方法は、Skills CLIでリポジトリのエントリースキルをインストールすることです。

npx skills add Shellishack/infinite-pokemon --skill infinite-pokemon

続いて、Codexまたは互換性のあるAIアシスタントに次のように依頼します。

$infinite-pokemonを使って、ゲームをセットアップして起動してください。

エントリースキルは、足りないファイルのクローン、前提条件の確認、依存関係のインストール、プロジェクトのビルド、起動までをエージェントが進められるよう案内します。スキルをインストールしただけではソフトウェアは起動しません。リポジトリのソースが必要であり、npx skills add infinite-pokemonはサポートされているグローバルエイリアスではありません。

使用する前に、GitHubのエントリースキルを確認できます。

方法2: 手動でインストールして実行する

リポジトリをクローンまたはダウンロードし、ルートディレクトリでターミナルを開いて、次を実行します。

npm install
npm run build
npm start

http://127.0.0.1:8788で非公開のホストコンソールを開きます。Nodeの組み込みSQLiteサポートによって実験的機能に関する警告が表示される場合がありますが、これはプロジェクトで想定されている警告です。

Codexに接続して世界に入る

  1. シングルプレイヤーを選択します。
  2. ローカル接続がまだ確認されていない場合は、Codexに接続を選択します。
  3. 表示されたトークン使用に関する通知を確認し、承認します。
  4. 求められた場合は、プロバイダーにサインインします。
  5. 短いノンス検証が完了するまで待ちます。成功すると、ゲームは自動的に開始マップに入ります。

検証ではスキルの読み込みやファイルの読み取りは行わず、nonce の確認と、応答が ok であることだけを要求します。接続が完了すると、設定された生成深度に従って、周辺のマップがバックグラウンドで準備されます。検証、失敗した試行、バックグラウンド生成によってプロバイダーの利用枠を消費する場合があり、通常のプロバイダーの制限と料金も適用されます。

有効な接続は再利用されます。承認済みの実行を再起動した後、ゲームはもう一度小さな確認プロンプトを表示して、ローカルのサインインを確認します。この確認に失敗すると、インターフェースは接続操作に戻ります。

チュートリアルプレビューで Codex なしでプレイする

プロバイダーへのアクセスやトークンの使用なしでゲームの仕組みを試すには、Codex 接続画面で Single player、次に Play tutorial preview を選択します。

プレビューには、準備済みの5つの屋外エリアと、それぞれの屋内ルームが含まれています。

  • Willowbrook: 町の広場、庭園、Professor Fern の研究室、独立した家。
  • Whisperwood Trail: 深い森、曲がりくねった道、開けた場所、レンジャーの小屋。
  • Cloverbank River: 花の草原、川、木造の橋、休憩所。
  • Sunbreak Coast: 開けた海、水辺の道、ボードウォーク、沿岸ステーション。
  • Waystone Terraces: ジグザグの道、石造りの段丘、倒れた柱、保管庫のシェルター。

プレビューではモデルへの呼び出しは行われず、新しいマップや NPC の計画も生成されません。境界地点では Codex に接続して、完全な探索へ同じセーブデータで続行できます。トレーナー、発見済みのマップ、チュートリアルの進行状況は保持されます。プレビューのセーブデータは昇格するまで非公開で、元のワールドとは分離されています。マルチプレイヤーは Codex の接続と検証が完了した後にのみ利用できます。

基本操作とゲームプレイ

  • WASD または矢印キーで移動します。
  • NPC、看板、アイテム、ルームコンピューターのすぐ隣に立ち、対象の方を向いて E または Space を押します。
  • 斜め方向からの近接ではインタラクションできません。
  • 見えている建物のドアに歩いて入るか、隣接するタイルからドアの方を向いて E を押します。
  • Escape または START を押すと、パーティー、バッグ、トレーナープロフィール、ジャーナル、マップ、セーブメニューが開きます。
  • もう一度 Escape を押すとメニューが閉じます。

人、看板、柵、壁、家具は移動を妨げます。対象をすり抜けようとせず、インタラクション時は対象の方を向いてください。背の高い草では野生の遭遇が発生することがあり、トレーナーは挑戦を申し込み、ガイドは初心者向けの練習を提供します。屋内の世話係はチームを回復できます。

シェルターには商人や保育係がいる場合があります。物資を購入したり、自転車を購入したり、レベル5の仲間2体を組み合わせてハイブリッドのタマゴを作ったりできます。CODEX、NURSERY、RIDES、RECORDS などの追加メニューは START から利用できます。

マップ生成を設定する

START → SESSION を開くと、生成動作を調整できます。マップ生成深度によって、ホストがどれだけ先までワールドを準備するかが決まります。

  • 深度0: 到着時に生成します。
  • 深度1: 周囲4マップを準備します。これがデフォルトです。
  • 深度2: 12マップを準備します。
  • 深度3: 24マップを準備します。

キューに入った作業ではプレイヤーに最も近いマップが優先され、キャッシュ済みのマップは再利用されます。準備ができていない目的地には、完了したふりをせず、実際のキューまたは生成状況が表示されます。再試行とキャンセルの操作を利用できます。

生成バッチサイズのデフォルトは同時に3ブロックで、1から8まで設定できます。順次生成したい場合や、同時実行する作業を制限したい場合は1を選択してください。深度や同時実行数を増やすと、より広い領域を準備できますが、プロバイダーの使用量と生成処理が増える場合があります。

セーブ、チェックポイント、ブランチを作成する

START → SAVES を開くと、実行データと変更できないチェックポイントを管理できます。SAVE を選択するとチェックポイントが作成されます。以前のチェックポイントから続行すると、ゲームは元のタイムラインを書き換えず、別のブランチを作成します。

各ブランチには、独自のワールド履歴、NPC の記憶、生成コンテキスト、自動セーブデータベースがあります。元の実行データで後から発生したイベントは、新しいブランチの記憶にはなりません。これにより、元の冒険を保持したまま、別の結果を探索できます。

ブラウザーのセーブデータは、現在のブラウザーとオリジンに保存された不透明なセッショントークンに関連付けられます。ホスト名、スキーム、ポートを変更した場合、またはブラウザーのストレージを消去した場合、ゲストブラウザーがトレーナーとの関連付けを失うことがあります。ゲームには手動の復旧キー用インターフェースはありません。

マルチプレイヤーセッションをホストする

  1. タイトル画面で Multiplayer → Host session を選択します。
  2. 必要に応じて、ホストの Codex セッションに接続して検証します。
  3. START → SESSION を開き、ゲスト用アドレスを確認します。
  4. ゲスト用ゲームアドレスは、信頼できるプレイヤーにのみ共有してください。

一人で開始し、後から Session メニューで Enable multiplayer を選択することもできます。ゲストは Multiplayer → Join session を選択し、http://HOST_LAN_ADDRESS:8787 のようなアドレス、またはホストの HTTPS URL を入力します。ニックネームは任意のキャラクター名であり、アカウントではありません。

Codex に接続して生成の利用枠を提供するのはホストだけです。ゲストはホストの現在の実行データと履歴を共有しますが、自分で Codex に接続することはありません。Return to single player を選択すると、現在のゲスト接続が閉じられ、新しい公開参加ができなくなりますが、サーバー側のセーブデータは保持されます。

2つのネットワークポートを理解する

  • 0.0.0.0:8787 はゲスト向けゲームサービスです。マルチプレイヤーが有効な場合にのみ、一般公開を開始できます。
  • 127.0.0.1:8788 は、Codex 接続、生成設定、バックアップ操作を行うための非公開ホストコンソールです。

ポート 8788 を公開したり、リバースプロキシしたりしないでください。 Codex プロセス、認証情報ディレクトリ、ホスト API をゲストに公開しないでください。プロキシまたはトンネルを使用する場合は、ポート 8787 のゲストサービスだけを転送してください。

インターネットでホスティングする場合、リポジトリにはポート 8787 のみをプロキシし、WebSocket に対応する Caddy 設定例が含まれています。プロキシは、同一オリジンチェックのために元の Host ヘッダーを保持する必要があります。自動 NAT トラバーサルとホステッドリレーは含まれていません。

開発版またはデスクトップ版を実行する

開発時は、TypeScript サーバーと Vite ミドルウェアを同時に実行します。

npm run dev

Electron ホストウィンドウを開くには、まずプロジェクトをビルドしてから次を実行します。

npm run build
npm run desktop

Electron モードはパッケージ化されたインストーラーではなく、ソースを実行するデスクトップシェルです。PATH 上に Node.js が必要です。あるいは、NODE_BINARY で絶対パスを指定できます。F11 でフルスクリーンを切り替えるか、次のコマンドで直接フルスクリーンモードを開始します。

npm run desktop:fullscreen

Linux 向けのオプション Docker セットアップ

付属の Compose 設定は Linux 上の Docker Engine を対象とし、ホストネットワークを使用します。ループバック管理リスナーがブリッジインターフェースに配置されず、ローカルから引き続きアクセスできるよう、意図的にポートマッピングを含めていません。

docker compose build
docker compose up -d
docker compose exec game node node_modules/@openai/codex/bin/codex.js login --device-auth

サーバー所有者として、自分で認証を完了してください。world-data ボリュームは /app/data にワールドを保存し、codex-private は /home/node/.codex に認証情報と設定を保存します。両方のボリュームを保持し、アカウント認証情報である codex-private を保護してください。

サーバーエラーを確認するには、次を実行します。

docker compose logs game

docker compose stop はボリュームを保持します。ワールドを保持したい場合は、down --volumes を実行しないでください。README では、Windows と macOS ではこの Compose 設定ではなくネイティブコマンドを使用することを推奨しています。

ワールドをバックアップおよび復元する

ネイティブの npm start は ./data にデータを保存します。Electron は、アプリケーションのユーザーデータ保存場所の下にある world ディレクトリを使用します。複数の起動方法で同じワールドを使用する場合は、INFINITE_DATA_DIR に絶対パスを設定してください。

オンラインデータベースを簡単にバックアップするには、START → SESSION → World settings → Back up world を開きます。バックアップは backups/ の下に書き込まれます。データベースの状態は含まれますが、すべてのコンテキストファイル、生成ログ、非公開の Codex 認証情報が含まれるわけではありません。

完全なアーカイブを作成するには、次の手順を実行します。

  1. サーバーを正常に停止します。
  2. 必要に応じてプレビュー用ディレクトリも含め、データディレクトリ全体をコピーします。
  3. コピーを別のディレクトリに復元します。
  4. INFINITE_DATA_DIR に復元先のディレクトリを設定します。
  5. 必要に応じて再起動し、Codex に再接続します。

稼働中のデータベースを置き換えたり、アクティブな SQLite WAL ファイルから分離したりしないでください。復元したワールドを検証するまで、元のアーカイブを保持してください。

便利な設定変数

  • INFINITE_DATA_DIR: ワールドデータベース、スナップショット、ログ、バックアップ。
  • PORT: ゲームのゲスト向けポート。デフォルトは 8787。
  • ADMIN_PORT: ループバックホストコンソールのポート。デフォルトは 8788。
  • CODEX_EXECUTABLE: オプションの実行ファイルまたは codex.js の上書き指定。シェルラッパーは拒否されます。
  • CODEX_HOME: ホストが管理する Codex 認証および設定ディレクトリ(オプション)。
  • NODE_BINARY: Electron が使用する Node.js 実行ファイル。
  • INFINITE_MAP_TIMEOUT_MS: マップごとの生成期限。デフォルトは 180000、最大値は 600000。

高度なヒント

リモート管理を非公開で転送する

リモートホストでは、オペレーターの非公開シェルから Codex を認証します。

node node_modules/@openai/codex/bin/codex.js login --device-auth

次に、自分のコンピューターからループバック管理ポートを転送します。

ssh -N -L 127.0.0.1:8788:127.0.0.1:8788 operator@your-server

ローカルで http://127.0.0.1:8788 を開きます。この SSH 接続は所有者専用の管理トンネルであり、公開ゲームプロキシではありません。

エンジンを変更する前にテストスイートを使用する

npm test
npm run build
npm run test:movement
npm run test:gameplay
npm run test:preview
npm run test:saves
npm run test:streaming
npm run test:variety
npm run test:e2e
npm run test:desktop

決定論的なフィクスチャにより、プロバイダー呼び出しなしでゲームメカニクスを検証できます。movement および gameplay のブラウザチェックは準備済みプレビューを使用し、Codex 呼び出しが発生しないことを確認します。

必要な場合のみリセットする

ホーム画面の Settings → Full game reset 操作は、セーブデータの管理とは異なります。RESET で確認すると、すべてのプレイ、チェックポイント、生成コンテンツ、進行状況、ゲーム設定が消去されます。また、ゲームによる Codex 承認も忘れられますが、Codex CLI のサインイン状態は維持されます。

現在の制限事項

Infinite Pokémonは完成版ではなく、プロトタイプです。生成には、有限のストレージ、プロバイダーの制限、生成時間、そしてエンジンの現在の語彙による制約があります。地形には検証済みのテンプレートを使用し、AIが任意の実行可能なゲームメカニクスを作成することはありません。トレード、完全なサービスセンターおよび道場システム、外部画像生成からのインポートは、現在の機能ではなく将来の作業として説明されています。

同時接続数8、保存できるトレーナー数64というマルチプレイヤーの制限は、実装上の制限であり、インターネット規模の処理能力を示すものではありません。インターネットでホスティングするには、状況に応じて、運用者がファイアウォール、DNS、HTTPS、ポート転送、またはプライベートトンネルを設定する必要もあります。

結論

Infinite Pokémonは、信頼性の高いサーバー権威型RPGの中核と、範囲を限定したAI支援による世界の継続生成を組み合わせています。まずはトークン不要のプレビューから始め、探索を拡張する準備ができたらCodexに接続し、チェックポイントを使って別の未来を試してください。マルチプレイヤーまたはリモート環境に展開する場合は、ホストのコンソールと認証情報を非公開に保ち、ゲストサービスのみを公開し、データディレクトリ全体のバックアップを維持してください。

ソースコード、ドキュメント、実装メモ、スキル、クレジット、免責事項については、Infinite PokémonのGitHubリポジトリをご覧ください。