跳到主要内容

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 键以加速跳过攻击动画和文本。

战斗策略

决策树

  1. 想要捕捉?→ 削弱对方然后投掷精灵球
  2. 不需要的野生宝可梦?→ 逃跑(RUN)
  3. 有属性优势?→ 使用效果绝佳的招式
  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. 告诉用户:“游戏已保存为 [名称]!说 'play pokemon' 以继续。”
  4. 终止服务器和隧道后台进程

常见陷阱

  • 绝不下载或提供 ROM 文件
  • 在不检查视觉的情况下,不要发送超过 4-5 个动作
  • 离开建筑物后,在向北走之前务必先横向移动
  • 在门/楼梯传送后,始终添加 wait_60 x2-3
  • 通过 RAM 检测对话不可靠——请使用截图验证
  • 在进行高风险遭遇战之前保存
  • 每次重启隧道时,隧道 URL 都会更改