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 文件
宝可梦游戏玩家
利用 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键可加速播放攻击动画及相关文字说明。
战斗策略
决策树
- 想捕捉对手?→ 先削弱对手再使用精灵球
- 不需要与野兽战斗?→ 立即逃跑
- 在属性上占优势?→ 使用超有效招式
- 没有属性优势?→ 使用最强且与对手属性相克的招式
- 自身生命值较低?→ 更换精灵或使用药水
第一代宝可梦属性相克表(关键对战关系)
- 水属性能克制火、地面、岩石属性
- 火属性能克制草、虫、冰属性
- 草属性能克制水、地面、岩石属性
- 电属性能克制水、飞行属性
- 地面属性能克制火、电、岩石、毒属性
- 心灵属性能克制格斗、毒属性(第一世代中优势显著!)
第一世代的特殊规则
- 特殊属性值同时决定特殊招式的攻击力和防御力
- 心灵属性过于强势(幽灵系招式存在漏洞)
- 临界命中率取决于速度属性值
- “缠绕/束缚”技能可阻止对手行动
- “集中能量”技能存在漏洞:会降低临界命中率而非提升它
记忆规范
| 前缀 | 用途 | 示例 |
|---|---|---|
| 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(地面系)→ 使用水系/草系/冰系技能
- 战胜四强选手 → 成为冠军!
停止游戏
- 通过POST /save命令以描述性名称保存游戏
- 使用PKM:PROGRESS更新内存状态
- 告诉用户:“游戏已保存为[名称]!输入‘play pokemon’即可继续游戏。”
- 关闭服务器并终止后台进程
常见问题
- 绝对不要下载或提供ROM文件
- 未经确认视野情况,切勿一次性发送超过4-5个动作指令
- 离开建筑物后前往北方之前,务必先绕道而行
- 在通过门或楼梯传送后,始终添加wait_60 x2-3的延迟
- 通过RAM进行对话检测并不可靠——需通过截图进行确认
- 在面临高风险对战前务必先保存游戏
- 每次重启后,隧道对应的URL都会发生变化