Pokemon Player
通過無頭仿真自主遊玩 Pokemon 遊戲。啟動遊戲服務器,從 RAM 讀取結構化遊戲狀態,做出戰略決策,併發送按鈕輸入——全部在終端中完成。
技能元數據
| 來源 | 捆綁(默認安裝) |
| 路徑 | skills/gaming/pokemon-player |
參考:完整 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 文件。 切勿下載或提供 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。提供給用戶的 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:觀察 (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,但不會告訴你周圍有什麼
- ledge(邊緣)、柵欄、標誌、建築門、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 鍵以加速跳過攻擊動畫和文本。
戰鬥策略
決策樹
- 想要捕捉?→ 削弱對方然後投擲精靈球
- 不需要的野生寶可夢?→ 逃跑(RUN)
- 有屬性優勢?→ 使用效果絕佳的招式
- 沒有優勢?→ 使用最強的本系加成(STAB)招式
- HP 較低?→ 切換寶可夢或使用傷藥
第一代屬性相剋表(關鍵對陣)
- 水剋制火、地面、岩石
- 火剋制草、蟲、冰
- 草剋制水、地面、岩石
- 電剋制水、飛行
- 地面剋制火、電、岩石、毒
- 超能力剋制格鬥、毒(在第一代中佔據主導地位!)
第一代特性
- 特殊(Special)數值同時決定特殊招式的攻擊和防禦
- 超能力屬性過於強大(幽靈系招式存在漏洞)
- 暴擊率基於速度(Speed)數值
- 緊束(Wrap)/綁緊(Bind)防止對手行動
- 聚氣(Focus Energy)漏洞:降低暴擊率而非提高
記憶約定
| 前綴 | 用途 | 示例 |
|---|---|---|
| PKM:OBJECTIVE | 當前目標 | 從真新鎮商店獲取包裹 |
| PKM:MAP | 導航知識 | 真新鎮:商店在東北方向 |
| PKM:STRATEGY | 戰鬥/隊伍計劃 | 在挑戰霞之前需要草屬性寶可夢 |
| PKM:PROGRESS | 里程碑追蹤器 | 擊敗勁敵,前往真新鎮 |
| PKM:STUCK | 被困情況 | y=28 處的 ledge,向右走以繞過 |
| PKM:TEAM | 隊伍備註 | 傑尼龜 Lv6,撞擊 + 搖尾巴 |
進度里程碑
- 選擇初始寶可夢
- 交付來自真新鎮商店的包裹,獲得寶可夢圖鑑
- 灰色徽章 — 小剛(岩石)→ 使用水/草屬性
- 藍色徽章 — 霞(水)→ 使用草/電屬性
- 橙色徽章 — 馬志士(電)→ 使用地面屬性
- 彩虹徽章 — 莉佳(草)→ 使用火/冰/飛行屬性
- 粉紅徽章 — 阿桔(毒)→ 使用地面/超能力屬性
- 金色徽章 — 娜姿(超能力)→ 最難的道館
- 深紅徽章 — 夏伯(火)→ 使用水/地面屬性
- 綠色徽章 — 坂木(地面)→ 使用水/草/冰屬性
- 四天王 → 冠軍!
停止遊戲
- 通過
POST /save使用描述性名稱保存遊戲 - 使用
PKM:PROGRESS更新記憶 - 告訴用戶:“遊戲已保存為 [名稱]!說 'play pokemon' 以繼續。”
- 終止服務器和隧道後臺進程
常見陷阱
- 絕不下載或提供 ROM 文件
- 在不檢查視覺的情況下,不要發送超過 4-5 個動作
- 離開建築物後,在向北走之前務必先橫向移動
- 在門/樓梯傳送後,始終添加
wait_60x2-3 - 通過 RAM 檢測對話不可靠——請使用截圖驗證
- 在進行高風險遭遇戰之前保存
- 每次重啟隧道時,隧道 URL 都會更改