Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


title: “Pokemon Player — Play Pokemon via headless emulator + RAM reads” sidebar_label: “Pokemon Player” description: “Play Pokemon via headless emulator + RAM reads”

{/* 本页面由 website/scripts/generate-skill-docs.py 根据技能对应的 SKILL.md 文件自动生成。请直接编辑源文件 SKILL.md,而非此页面。 */}

宝可梦游戏玩家

通过无头模拟器结合内存读取功能来玩宝可梦游戏。

技能元数据

来源可选 —— 使用 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 文件

:::info 以下是当触发该技能时 Hermes 所加载的完整技能定义。当技能处于激活状态时,智能体看到的指令即为内容。
::

宝可梦游戏玩家

利用 pokemon-agent 包通过无头模拟器来玩宝可梦游戏。

适用场景

  • 用户说出“玩宝可梦”、“开始玩宝可梦”、“宝可梦游戏”等语句
  • 用户询问关于《宝可梦红》、《宝可梦蓝》、《宝可梦黄》、《火红》等相关内容
  • 用户希望观看人工智能玩宝可梦游戏
  • 用户提及 ROM 文件(.gb、.gbc、.gba 格式)

启动流程

1. 首次设置(克隆仓库、创建虚拟环境、安装依赖)

该项目的 GitHub 地址为 NousResearch/pokemon-agent。首先克隆该仓库,然后创建一个 Python 3.10+ 版本的虚拟环境。推荐使用 uv 工具来快速创建虚拟环境,并以可编辑模式安装包含 pyboy extra 组件的包。如果未安装 uv,则可使用 python -m venv + pip 的方式替代。

如果已有相关设置(例如 ~/pokemon-agent 目录下已存在准备好的虚拟环境),可直接进入该目录并执行 .venv/bin/activate 命令激活环境,无需再次克隆仓库。

您还需要一个ROM文件。请向用户索取该文件(之前的设置可能已在checkout目录下的roms/pokemon_red.gb中存在)。绝不可自行下载或提供ROM文件——务必始终让用户自行提供。

2. 启动游戏服务器

在已激活虚拟环境的pokemon-agent目录中,使用命令pokemon-agent serve,并通过–rom参数指定ROM文件路径,同时设置端口为9876。可使用&符号在后台运行该程序。若要从保存的游戏状态继续,可添加–load-state参数并指定保存文件的名称。等待4秒让服务器启动完成,随后通过GET /health命令验证其运行状态。

3. 设置供用户查看的实时控制面板

通过localhost.run建立SSH反向隧道,以便用户可通过浏览器查看控制面板。执行ssh命令,将本地的9876端口映射到keyless localhost.run端点的远程80端口(命令示例:ssh -R 80:localhost:9876 ssh://nokey@localhost.run)。将输出内容重定向至日志文件,等待10秒后,通过grep命令在日志中查找.lhr.life格式的URL。随后将带有/dashboard/后缀的URL提供给用户。由于隧道地址每次都会变化,若重新启动服务器,请将新地址告知用户。

保存与加载

何时保存

  • 每进行15-20回合游戏后
  • 在参加道馆对战、遭遇对手或进行高风险战斗之前务必保存
  • 进入新城镇或地下城之前
  • 在执行任何不确定的操作之前

如何保存

发送POST /save请求,并附上具有描述性的文件名。推荐名称示例:before_brock、route1_start、mt_moon_entrance、got_cut

如何加载

发送POST /load请求,并指定要加载的保存文件名

查看所有可用保存状态

通过GET /saves命令可列出所有已保存的游戏状态

服务器启动时的加载

在启动服务器时使用 –load-state 参数即可自动加载保存数据。这种方式比启动后再通过 API 加载要快得多。

游戏循环流程

第一步:观察——查看状态并截图

通过 GET /state 获取角色位置、生命值、战斗状态及对话内容。 接着调用 GET /screenshot 将截图保存至 /tmp/pokemon.png,随后使用 vision_analyze 工具进行分析。 这两步必不可少——内存中的状态数据仅提供数值信息,而视觉分析则有助于了解空间方位。

第二步:确定行动方向

  • 屏幕上有对话或文字 → 继续阅读
  • 处于战斗中 → 进行攻击或逃跑
  • 队友受伤 → 前往宝可梦中心治疗
  • 接近目标地点 → 小心移动

第三步:做出决策

行动优先级:对话 > 战斗 > 治疗 > 故事任务 > 训练 > 探索

第四步:执行行动——最多移动2-4步,然后再次检查

通过 POST /action 发送简短的行动列表(包含2-4个动作,而非10-15个)。

第五步:验证——每次行动后都需截图

拍摄截图并使用 vision_analyze 确认是否已移动到预定位置。这是最关键的步骤,若没有视觉辅助,角色极容易迷路。

第六步:使用 PKM:prefix 将进度记录到内存中

第七步:定期保存数据

动作参考

  • 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步就截取一次屏幕截图
  • 内存状态可以显示你的位置和生命值,但无法告知周围环境
  • 壁架、围栏、标识牌、建筑门以及NPC——只能通过截图才能看到
  • 可以向视觉模型提出具体问题,例如:“我正北方向一格处有什么?”
  • 当遇到困境时,务必先截屏,再尝试随机方向前进

穿越门或楼梯时需要额外等待时间

在穿过门或楼梯进行地图切换时,屏幕会逐渐变黑。你必须等待切换完成。在任何通过门或楼梯的穿越操作后,需添加2到3次wait_60指令。如果不等待,系统会认为当前位置信息已过时,从而导致你误以为自己仍在旧地图中。

离开建筑时的陷阱

当你离开建筑物时,会直接出现在门的正前方。如果向北行走,就会又回到建筑内部。务必先向左或向右移动2格以绕到侧面,然后再按原定方向前进。

对话处理

第一代文本显示方式为逐字缓慢滚动。若想加快对话读取速度,可按住B键120帧后再按下A键,根据需要重复此操作。按住B键可使文本以最快速度显示,随后按下A键即可切换到下一行。a_until_dialog_end指令虽能检测内存中的对话状态标志,但该标志无法覆盖所有文本显示情况。如果对话显示出现卡顿,建议采用手动按住B键再按下A键的方式,并通过截图进行确认。

小悬崖为单向通道

小悬崖仅能向下(南方)跳跃,无法向上(北方)攀爬。若前方有通往北方的悬崖阻挡,必须向左或向右寻找其周围的缺口。可利用视觉功能来确定缺口的方位,也可直接向视觉模型询问。

导航策略

  • 每次移动2-4步后,截屏确认当前位置
  • 进入新区域时立即截屏,以便熟悉环境
  • 向视觉模型询问“去[目的地]该往哪个方向走?”
  • 若尝试3次以上仍无法前进,需截屏并重新全面评估情况
  • 避免连续进行10-15次移动——否则容易偏离目标或陷入困境

逃离野战战斗

在战斗菜单中,“逃跑”选项位于右下角。从默认光标位置(左上角的“战斗”选项)前往该选项时:先向下再向右移动光标至“逃跑”选项,随后按下A键。按住hold_b键可加速播放文字与动画内容。

战斗操作(FIGHT)

在战斗菜单中,“战斗”选项位于左上角(即默认光标位置)。按下A键进入招式选择界面,再次按下A键即可使用第一个选中的招式。随后按住B键可加速播放攻击动画及相关文字说明。

战斗策略

决策树

  1. 想捕捉对手?→ 先削弱对手再使用精灵球
  2. 不需要与野兽战斗?→ 立即逃跑
  3. 在属性上占优势?→ 使用超有效招式
  4. 没有属性优势?→ 使用最强且与对手属性相克的招式
  5. 自身生命值较低?→ 更换精灵或使用药水

第一代宝可梦属性相克表(关键对战关系)

  • 水属性能克制火、地面、岩石属性
  • 火属性能克制草、虫、冰属性
  • 草属性能克制水、地面、岩石属性
  • 电属性能克制水、飞行属性
  • 地面属性能克制火、电、岩石、毒属性
  • 心灵属性能克制格斗、毒属性(第一世代中优势显著!)

第一世代的特殊规则

  • 特殊属性值同时决定特殊招式的攻击力和防御力
  • 心灵属性过于强势(幽灵系招式存在漏洞)
  • 临界命中率取决于速度属性值
  • “缠绕/束缚”技能可阻止对手行动
  • “集中能量”技能存在漏洞:会降低临界命中率而非提升它

记忆规范

前缀用途示例
PKM:OBJECTIVE当前目标从翠绿市取回包裹
PKM:MAP导航信息翠绿市:市场位于东北方向
PKM:STRATEGY战斗/团队计划在遇到米斯蒂之前需要草属性宝可梦
PKM:PROGRESS进度追踪击败对手后,前往翠绿市
PKM:STUCK困境描述位于y=28处的平台,需向右绕行才能通过
PKM:TEAM队伍信息水箭龟,等级6,技能为“撞击”+“尾巴攻击”

进度里程碑

  • 选择起始任务
  • 从Viridian Mart运送包裹并获取图鉴
  • Boulder徽章 — Brock(岩石系)→ 使用水系/草系技能
  • Cascade徽章 — Misty(水系)→ 使用草系/电系技能
  • Thunder徽章 — Lt. Surge(电系)→ 使用地面系技能
  • Rainbow徽章 — Erika(草系)→ 使用火系/冰系/飞行系技能
  • Soul徽章 — Koga(毒系)→ 使用地面系/超能力系技能
  • Marsh徽章 — Sabrina(超能力系)→ 最难的道馆
  • Volcano徽章 — Blaine(火系)→ 使用水系/地面系技能
  • Earth徽章 — Giovanni(地面系)→ 使用水系/草系/冰系技能
  • 战胜四强选手 → 成为冠军!

停止游戏

  1. 通过POST /save命令以描述性名称保存游戏
  2. 使用PKM:PROGRESS更新内存状态
  3. 告诉用户:“游戏已保存为[名称]!输入‘play pokemon’即可继续游戏。”
  4. 关闭服务器并终止后台进程

常见问题

  • 绝对不要下载或提供ROM文件
  • 未经确认视野情况,切勿一次性发送超过4-5个动作指令
  • 离开建筑物后前往北方之前,务必先绕道而行
  • 在通过门或楼梯传送后,始终添加wait_60 x2-3的延迟
  • 通过RAM进行对话检测并不可靠——需通过截图进行确认
  • 在面临高风险对战前务必先保存游戏
  • 每次重启后,隧道对应的URL都会发生变化