跳到主要內容

Pokemon Player

通過無頭模擬器 + RAM 讀取來玩 Pokemon。

技能元數據

來源可選 — 使用 hermes skills install official/gaming/pokemon-player 安裝
路徑optional-skills/gaming/pokemon-player
平臺linux, macos, windows

參考:完整 SKILL.md

信息

以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理看到的指令。

Pokemon Player

使用 pokemon-agent 包通過無頭模擬玩 Pokemon 遊戲。

何時使用

  • 用戶說“play pokemon”、“start pokemon”、“pokemon game”
  • 用戶詢問關於 Pokemon Red、Blue、Yellow、FireRed 等的問題
  • 用戶希望觀看 AI 玩 Pokemon
  • 用戶引用 ROM 文件(.gb、.gbc、.gba)

啟動流程

1. 首次設置(克隆、虛擬環境、安裝)

GitHub 上的倉庫是 NousResearch/pokemon-agent。克隆它,然後 設置一個 Python 3.10+ 虛擬環境。使用 uv(速度更快,首選) 創建虛擬環境並以可編輯模式安裝帶有 pyboy 額外依賴的包。如果 uv 不可用,則回退到 python3 -m venv + pip。

在此機器上,它已在 /home/teknium/pokemon-agent 設置好, 並準備好了虛擬環境 — 只需 cd 進入該目錄並執行 source .venv/bin/activate。

你還需要一個 ROM 文件。向用戶索取他們的 ROM 文件。在此機器上, 該目錄下存在一個 roms/pokemon_red.gb。 切勿下載或提供 ROM 文件 — 始終向用戶索取。

2. 啟動遊戲服務器

在激活虛擬環境的情況下,從 pokemon-agent 目錄內部,運行 pokemon-agent serve,使用 --rom 指向 ROM 文件,並使用 --port 9876。 使用 & 在後臺運行。 要從保存的遊戲恢復,添加 --load-state 及保存名稱。 等待 4 秒以完成啟動,然後通過 GET /health 進行驗證。

3. 為用戶設置實時儀表板以便觀看

使用 localhost.run 通過 SSH 反向隧道,以便用戶可以在瀏覽器中查看 儀表板。使用 ssh 連接,將本地端口 9876 轉發到 nokey@localhost.run 上的遠程端口 80。將輸出重定向 到日誌文件,等待 10 秒,然後在日誌中 grep 查找 .lhr.life URL。將附加了 /dashboard/ 的 URL 提供給用戶。 隧道 URL 每次都會更改 — 如果重新啟動,請給用戶新的 URL。

保存和加載

何時保存

  • 每 gameplay 15-20 回合
  • 始終在道館戰、勁敵遭遇或高風險戰鬥之前
  • 在進入新城鎮或地下城之前
  • 在任何你不確定的行動之前

如何保存

POST /save 並附帶描述性名稱。良好的示例: before_brock、route1_start、mt_moon_entrance、got_cut

如何加載

POST /load 並附帶保存名稱。

列出可用保存

GET /saves 返回所有已保存的狀態。

服務器啟動時加載

啟動服務器時使用 --load-state 標誌以自動加載保存。 這比啟動後通過 API 加載更快。

遊戲循環

步驟 1:觀察 (OBSERVE) — 檢查狀態並截圖

GET /state 獲取位置、HP、戰鬥、對話信息。 GET /screenshot 並保存到 /tmp/pokemon.png,然後使用 vision_analyze。 務必執行兩者 — RAM 狀態提供數值,視覺提供空間感知。

步驟 2:定位 (ORIENT)

  • 屏幕上有對話/文本 → 推進它
  • 戰鬥中 → 戰鬥或逃跑
  • 隊伍受傷 → 前往 Pokemon 中心
  • 靠近目標 → 小心導航

步驟 3:決策 (DECIDE)

優先級:對話 > 戰鬥 > 治療 > 故事目標 > 訓練 > 探索

步驟 4:行動 (ACT) — 最多移動 2-4 步,然後重新檢查

POST /action 並附帶簡短的動作列表(2-4 個動作,而非 10-15 個)。

步驟 5:驗證 (VERIFY) — 每個移動序列後截圖

截圖並使用 vision_analyze 確認你已移動到預期位置。這是最重要的步驟。沒有視覺反饋,你一定會迷路。

步驟 6:記錄進度到記憶,使用前綴 PKM:

步驟 7:定期保存

動作參考

  • press_a — 確認、交談、選擇
  • press_b — 取消、關閉菜單
  • press_start — 打開遊戲菜單
  • walk_up/down/left/right — 移動一格
  • hold_b_N — 按住 B 鍵 N 幀(用於快速跳過文本)
  • wait_60 — 等待約 1 秒(60 幀)
  • a_until_dialog_end — 重複按 A 直到對話結束

來自經驗的關鍵提示

持續使用視覺

  • 每 2-4 個移動步驟截一次圖
  • RAM 狀態告訴你位置和 HP,但告訴你周圍有什麼
  • 懸崖邊緣、柵欄、標誌、建築門、NPC — 僅通過截圖可見
  • 向視覺模型提出具體問題:“我北邊一格是什麼?”
  • 當卡住時,在嘗試隨機方向之前務必截圖

傳送過渡需要額外等待時間

當穿過門或樓梯時,屏幕會在地圖過渡期間淡出至黑色。你必須等待其完成。在任何門/樓梯傳送後添加 2-3 個 wait_60 動作。如果不等待,位置讀數會過時,你會以為你還在舊地圖中。

建築出口陷阱

當你走出建築時,你會直接出現在門正前方。 如果你向北走,你會直接走回去。務必先側身移動, 向左或向右走 2 格,然後朝預期方向前進。

對話處理

第一代(Gen 1)文本逐字母緩慢滾動。若要快速跳過對話,按住 B 鍵 120 幀,然後按 A 鍵。根據需要重複此操作。按住 B 鍵可使文本以最大速度顯示。然後按 A 鍵進入下一行。 a_until_dialog_end 動作會檢查 RAM 中的對話標誌位,但該標誌位無法捕獲所有文本狀態。如果對話似乎卡住,請改用手動“按住 B + 按 A”的模式,並通過截圖進行驗證。

ledge(懸崖邊緣)是單向的

Ledge(小懸崖邊緣)只能向下(向南)跳下,絕不能向上(向北)攀爬。如果因向北的 ledge 受阻,必須向左或向右移動以找到繞過它的缺口。使用視覺能力識別缺口所在的方向。明確詢問視覺模型。

  • 每次移動 2-4 步,然後截圖檢查位置
  • 進入新區域時,立即截圖以確定方向
  • 詢問視覺模型:“去 [目的地] 該往哪個方向?”
  • 如果嘗試 3 次以上仍被困住,請截圖並重新全面評估
  • 不要連續發送 10-15 個移動指令——你會越過目標或被困住

從野生戰鬥中逃跑

在戰鬥菜單中,“RUN”(逃跑)位於右下角。要從默認光標位置(“FIGHT”,左上角)到達該選項:先按下鍵,再按右鍵將光標移至“RUN”,然後按 A 鍵。使用 hold_b 包裹操作以加速跳過文本/動畫。

戰鬥(FIGHT)

在戰鬥菜單中,“FIGHT”(戰鬥)位於左上角(默認光標位置)。 按 A 鍵進入招式選擇,再次按 A 鍵使用第一個招式。 然後按住 B 鍵以加速跳過攻擊動畫和文本。

戰鬥策略

決策樹

  1. 想要捕捉?→ 削弱對方然後投擲精靈球
  2. 不需要的野生寶可夢?→ 逃跑(RUN)
  3. 有屬性優勢?→ 使用效果絕佳(super-effective)的招式
  4. 無優勢?→ 使用最強的同屬性加成(STAB)招式
  5. HP 較低?→ 切換寶可夢或使用傷藥

第一代屬性剋制表(關鍵對陣)

  • 水系剋制火系、地面系、岩石系
  • 火系剋制草系、蟲系、冰系
  • 草系剋制水系、地面系、岩石系
  • 電系剋制水系、飛行系
  • 地面系剋制火系、電系、岩石系、毒系
  • 超能力系剋制格鬥系、毒系(在第一代中佔據主導地位!)

第一代特性

  • 特殊(Special)數值同時決定特殊招式的攻擊力和防禦力
  • 超能力系過於強大(幽靈系招式存在漏洞)
  • 暴擊率基於速度(Speed)數值
  • 緊束(Wrap)/綁緊(Bind)防止對手行動
  • 聚氣(Focus Energy)漏洞:降低暴擊率而非提高

記憶約定

前綴用途示例
PKM:OBJECTIVE當前目標從常磐超市獲取包裹
PKM:MAP導航知識常磐市:超市在東北方向
PKM:STRATEGY戰鬥/隊伍計劃在挑戰莉佳之前需要草系寶可夢
PKM:PROGRESS里程碑追蹤器擊敗勁敵,前往常磐市
PKM:STUCK被困情況y=28 處的 ledge,向右走以繞過
PKM:TEAM隊伍備註傑尼龜 Lv6,撞擊 + 搖尾巴

進度里程碑

  • 選擇初始寶可夢
  • 交付來自常磐超市的包裹,獲得寶可夢圖鑑
  • 灰色徽章 — 小剛(岩石系)→ 使用水系/草系
  • 藍色徽章 — 莉佳(水系)→ 使用草系/電系
  • 金色徽章 — 馬志士(電系)→ 使用地面系
  • 彩虹徽章 — 莉佳(草系)→ 使用火系/冰系/飛行系
  • 深紅徽章 — 阿桔(毒系)→ 使用地面系/超能力系
  • 黃金徽章 — 娜姿(超能力系)→ 最難的道館
  • 火山徽章 — 夏伯(火系)→ 使用水系/地面系
  • 地球徽章 — 坂木(地面系)→ 使用水系/草系/冰系
  • 四天王 → 冠軍!

停止遊戲

  1. 通過 POST /save 使用描述性名稱保存遊戲
  2. 使用 PKM:PROGRESS 更新記憶
  3. 告知用戶:“遊戲已保存為 [name]!說‘play pokemon’以繼續。”
  4. 終止服務器和隧道後臺進程

陷阱

  • 切勿下載或提供 ROM 文件
  • 在不檢查視覺的情況下,不要發送超過 4-5 個動作
  • 離開建築物後,在向北走之前務必先向側面移動
  • 在門/樓梯傳送後,務必添加 wait_60 x2-3
  • 通過 RAM 檢測對話不可靠 — 需通過截圖驗證
  • 在進行高風險遭遇戰之前保存遊戲
  • 每次重啟隧道時,隧道 URL 都會更改