Hermes Agent Wiki 非公式・日本語wiki
この skill をそのまま使う: GitHub で原文を見る

英語原文・frontmatter 込みで、Hermes が読み込む実体そのままです(このページの本文は日本語版)。

Pokemon Player

目次

ヘッドレスのエミュレーターと RAM 読み取りでポケモンを遊びます。

skill の情報

提供元 追加 skill — hermes skills install official/gaming/pokemon-player で入れます
パス optional-skills/gaming/pokemon-player
バージョン 1.0.0
作者 Teknium (teknium1), Hermes Agent
ライセンス MIT
対応プラットフォーム linux, macos, windows

参考: SKILL.md 全文

Pokemon Player

pokemon-agent パッケージを使い、ヘッドレスのエミュレーションでポケモンを遊びます。

こんなときに使います

  • 「ポケモンをやって」「ポケモンを始めて」「ポケモンのゲーム」と言われたとき
  • ポケモン赤・緑・青・ピカチュウ・ファイアレッドなどについて聞かれたとき
  • AI がポケモンを遊ぶところを見たいと言われたとき
  • ROM ファイル(.gb、.gbc、.gba)に言及があったとき

起動の手順

1. 初回の準備(クローン、venv、インストール)

リポジトリは GitHub の NousResearch/pokemon-agent です。クローンしたあと、 Python 3.10 以上の仮想環境を用意します。venv の作成とパッケージの インストール(editable モード、pyboy の extra 付き)には uv を使うのが 速くておすすめです。uv が使えない環境なら python3 -m venv と pip で代用します。

すでにチェックアウトがある場合(venv まで整った ~/pokemon-agent など)は、 クローンし直さず、そこへ cd して .venv/bin/activate を source するだけで済みます。

ROM ファイルも必要です。ユーザーが持っているものを尋ねてください(以前の準備で チェックアウト内の roms/pokemon_red.gb に置かれていることもあります)。 ROM ファイルをダウンロードしたり提供したりしてはいけません。必ずユーザーに尋ねます。

2. ゲームサーバーを起動する

venv を有効にした状態で pokemon-agent ディレクトリに入り、 pokemon-agent serve を実行します。--rom に ROM のパスを、--port に 9876 を指定します。 & を付けてバックグラウンドで動かします。 セーブデータから再開するときは --load-state にセーブ名を付けます。 起動を 4 秒待ってから、GET /health で立ち上がりを確かめます。

3. ユーザーが観戦できるダッシュボードを用意する

localhost.run 経由の SSH リバーストンネルを使い、ユーザーがブラウザで ダッシュボードを見られるようにします。ssh で接続し、ローカルの 9876 番ポートを 鍵不要の localhost.run のエンドポイントのリモート 80 番へ転送します (ssh -R 80:localhost:9876 ssh://nokey@localhost.run)。出力はログファイルへ リダイレクトし、10 秒待ってから、ログを grep して .lhr.life の URL を取り出します。 その URL の末尾に /dashboard/ を付けたものをユーザーに伝えます。 トンネルの URL は起動のたびに変わるので、立て直したら新しい URL を伝えてください。

セーブとロード

セーブする場面

  • 15〜20 ターン遊ぶごとに
  • ジムリーダー戦、ライバル戦、危なそうな戦闘の前には必ず
  • 新しい町やダンジョンに入る前に
  • 結果に自信がない行動を取る前に

セーブのしかた

POST /save に、内容がわかる名前を付けて送ります。よい例はこうです。 before_brock、route1_start、mt_moon_entrance、got_cut

ロードのしかた

POST /load にセーブ名を付けて送ります。

セーブの一覧を見る

GET /saves で保存済みの状態がすべて返ります。

サーバー起動時に読み込む

サーバーの起動時に --load-state フラグを付けると、セーブを自動で読み込めます。 起動後に API でロードするより速く済みます。

プレイのループ

ステップ 1: 見る — 状態の確認とスクリーンショットの両方

GET /state で位置、HP、戦闘中かどうか、会話中かどうかを取ります。 GET /screenshot で画像を取り、/tmp/pokemon.png に保存してから vision_analyze にかけます。 必ず両方やってください。RAM の状態は数値を、画像は周囲の様子を教えてくれます。

ステップ 2: 状況をつかむ

  • 画面に会話やテキストが出ている → 先へ送る
  • 戦闘中 → 戦うか逃げる
  • 手持ちが傷ついている → ポケモンセンターへ向かう
  • 目的地が近い → 慎重に進む

ステップ 3: 決める

優先順位: 会話 > 戦闘 > 回復 > ストーリー上の目標 > 育成 > 探索

ステップ 4: 動かす — 一度に 2〜4 歩まで、そのつど確認

POST /action には短い行動リストを渡します(10〜15 個ではなく 2〜4 個)。

ステップ 5: 確かめる — 移動のたびにスクリーンショット

スクリーンショットを撮り、vision_analyze で狙いどおりの場所に動けたか確かめます。 ここがいちばん大事な手順です。画像を見ないと必ず迷子になります。

ステップ 6: 進み具合を PKM: 接頭辞でメモリに記録する

ステップ 7: ときどきセーブする

操作の一覧

  • press_a — 決定、話しかける、選ぶ
  • press_b — キャンセル、メニューを閉じる
  • press_start — ゲーム内メニューを開く
  • walk_up/down/left/right — 1 マス動く
  • hold_b_N — B を N フレーム押し続ける(テキストを早送りするのに使います)
  • wait_60 — 約 1 秒待つ(60 フレーム)
  • a_until_dialog_end — 会話が終わるまで A を押し続ける

実際に遊んでわかったコツ

画像は常に確認する

  • 2〜4 歩動くごとにスクリーンショットを撮ります
  • RAM の状態からは位置と HP はわかりますが、周りに何があるかはわかりません
  • 段差、柵、看板、建物の入口、NPC は、スクリーンショットでしか見えません
  • 画像を見るモデルには具体的に尋ねます。「自分の 1 マス北には何がありますか」のように
  • 行き詰まったら、適当な方向に動く前に必ずスクリーンショットを撮ります

ワープの前後は余分に待つ

扉や階段を通るとき、マップの切り替え中は画面が暗転します。 これが終わるまで必ず待ってください。扉や階段のワープのあとには wait_60 を 2〜3 回入れます。待たないと位置の値が古いままになり、 まだ前のマップにいると勘違いします。

建物から出たときの落とし穴

建物から出ると、扉の真ん前に立った状態になります。 そのまま北へ歩くと、また中へ戻ってしまいます。まず左右どちらかへ 2 マス横に動いてから、行きたい方向へ進んでください。

会話の進め方

第 1 世代のテキストは 1 文字ずつゆっくり流れます。会話を早送りするには、 B を 120 フレーム押し続けてから A を押します。必要なだけ繰り返します。B を 押し続けるとテキストが最速で表示され、そのあと A で次の行へ進みます。 a_until_dialog_end は RAM の会話フラグを見ますが、このフラグは すべてのテキスト状態を拾えるわけではありません。会話が進まないように見えたら、 手動の hold_b + press_a のやり方に切り替え、スクリーンショットで確かめてください。

段差は一方通行

段差(小さな崖のふち)は下(南)へ飛び降りることしかできず、上(北)へは 登れません。北へ進みたいのに段差でふさがれているときは、左右へ動いて 迂回できる隙間を探します。どちらに隙間があるかは画像で確かめます。 画像を見るモデルにはっきり尋ねてください。

  • 一度に 2〜4 歩動かし、そのつどスクリーンショットで位置を確かめます
  • 新しいエリアに入ったら、すぐにスクリーンショットを撮って状況をつかみます
  • 画像を見るモデルに「[目的地] はどちらの方向ですか」と尋ねます
  • 3 回以上行き詰まったら、スクリーンショットを撮って一から考え直します
  • 10〜15 回分の移動をまとめて送ってはいけません。行き過ぎたり、はまったりします

野生ポケモンから逃げる

戦闘メニューの「にげる」は右下にあります。既定のカーソル位置(左上の「たたかう」) から移動するには、下、右の順に押してカーソルを「にげる」へ合わせ、A を押します。 テキストや演出を飛ばすため、hold_b で挟んでください。

戦う(たたかう)

戦闘メニューの「たたかう」は左上(既定のカーソル位置)にあります。 A で技の選択に入り、もう一度 A で 1 つ目の技を使います。 そのあと B を押し続けて、攻撃の演出とテキストを飛ばします。

戦い方

判断の流れ

  1. 捕まえたい → 弱らせてからモンスターボールを投げる
  2. いらない野生ポケモン → にげる
  3. タイプ相性で有利 → 効果抜群の技を使う
  4. 相性で有利でない → いちばん強い、タイプ一致の技を使う
  5. HP が少ない → 交代するか、きずぐすりを使う

第 1 世代のタイプ相性(主なところ)

  • みずは ほのお、じめん、いわ に強い
  • ほのおは くさ、むし、こおり に強い
  • くさは みず、じめん、いわ に強い
  • でんきは みず、ひこう に強い
  • じめんは ほのお、でんき、いわ、どく に強い
  • エスパーは かくとう、どく に強い(第 1 世代では圧倒的です)

第 1 世代ならではの癖

  • とくしゅの値が、特殊技の攻撃側と防御側の両方を兼ねます
  • エスパータイプが強すぎます(ゴーストの技に不具合があります)
  • 急所に当たるかどうかは、すばやさの値で決まります
  • まきつく・しめつけるを受けると、相手は行動できません
  • きあいだめの不具合: 急所率が上がるどころか下がります

メモリの書き方

接頭辞 用途
PKM:OBJECTIVE 今の目標 トキワのフレンドリィショップで小包を受け取る
PKM:MAP 道順の知識 トキワシティ: ショップは北東
PKM:STRATEGY 戦闘・手持ちの方針 カスミの前にくさタイプがほしい
PKM:PROGRESS 進み具合 ライバルに勝ち、トキワへ向かっている
PKM:STUCK 行き詰まった状況 y=28 の段差は右へ回り込む
PKM:TEAM 手持ちのメモ ゼニガメ Lv6、たいあたり + しっぽをふる

ストーリーの節目

  • 最初のポケモンを選ぶ
  • トキワのフレンドリィショップから小包を届け、ポケモン図鑑を受け取る
  • グレーバッジ — タケシ(いわ)→ みず / くさ を使う
  • ブルーバッジ — カスミ(みず)→ くさ / でんき を使う
  • オレンジバッジ — マチス(でんき)→ じめん を使う
  • レインボーバッジ — エリカ(くさ)→ ほのお / こおり / ひこう を使う
  • ピンクバッジ — キョウ(どく)→ じめん / エスパー を使う
  • ゴールドバッジ — ナツメ(エスパー)→ いちばん手強いジムです
  • マリンバッジ — カツラ(ほのお)→ みず / じめん を使う
  • アースバッジ — サカキ(じめん)→ みず / くさ / こおり を使う
  • 四天王 → チャンピオンへ

遊び終えるとき

  1. POST /save で、内容がわかる名前を付けてセーブします
  2. PKM:PROGRESS でメモリを更新します
  3. ユーザーにこう伝えます。「[名前] でセーブしました。続きは『ポケモンをやって』と言ってください」
  4. バックグラウンドで動いているサーバーとトンネルのプロセスを止めます

つまずきやすいところ

  • ROM ファイルをダウンロードしたり提供したりしてはいけません
  • 画像で確かめずに 4〜5 個を超える行動を送ってはいけません
  • 建物から出たら、北へ進む前に必ず横へずれます
  • 扉や階段のワープのあとには必ず wait_60 を 2〜3 回入れます
  • RAM から会話を判定するのはあてになりません。スクリーンショットで確かめてください
  • 危なそうな戦闘の前にはセーブします
  • トンネルの URL は、立て直すたびに変わります