Pokemon Player
On this page Игра в Pokemon через headless-эмулятор с чтением RAM.
Skill metadata¶
| Источник | Встроенный (устанавливается по умолчанию) |
| Путь | skills/gaming/pokemon-player |
| ## Reference: full SKILL.md | |
| info | |
| Ниже приведено полное описание навыка, которое Hermes загружает при его активации. Это инструкции, которые видит агент, когда навык активен. | |
| # Pokemon Player | |
Игра в Pokemon через headless-эмуляцию с помощью пакета pokemon-agent. |
|
| ## When to Use | |
| * Пользователь говорит «play pokemon», «start pokemon», «pokemon game» | |
| * Пользователь спрашивает о Pokemon Red, Blue, Yellow, FireRed и т.д. | |
| * Пользователь хочет посмотреть, как ИИ играет в Pokemon | |
| * Пользователь ссылается на ROM-файл (.gb, .gbc, .gba) |
Startup Procedure¶
1\. First-time setup (clone, venv, install)¶
Репозиторий находится на GitHub: NousResearch/pokemon-agent. Склонируйте его, затем настройте виртуальное окружение Python 3.10+. Используйте uv (предпочтительно из-за скорости) для создания venv и установки пакета в режиме editable с расширением pyboy. Если uv недоступен, используйте python3 -m venv + pip. На этой машине он уже настроен в /home/teknium/pokemon-agent с готовым venv — просто перейдите туда и выполните source .venv/bin/activate. Вам также понадобится ROM-файл. Спросите его у пользователя. На этой машине один существует в roms/pokemon_red.gb внутри этой директории. НИКОГДА не загружайте и не предоставляйте ROM-файлы — всегда спрашивайте пользователя.
2\. Start the game server¶
Из директории pokemon-agent с активированным venv запустите pokemon-agent serve с --rom, указывающим на ROM, и --port 9876. Запустите в фоне с &. Чтобы продолжить сохранённую игру, добавьте --load-state с именем сохранения. Подождите 4 секунды для запуска, затем проверьте с помощью GET /health.
3\. Set up live dashboard for user to watch¶
Используйте обратный SSH-туннель через localhost.run, чтобы пользователь мог просматривать дашборд в своём браузере. Подключитесь через ssh, перенаправив локальный порт 9876 на удалённый порт 80 на nokey@localhost.run. Перенаправьте вывод в лог-файл, подождите 10 секунд, затем найдите в логе URL с .lhr.life. Дайте пользователю URL с добавлением /dashboard/. URL туннеля меняется каждый раз — сообщайте пользователю новый при перезапуске.
Save and Load¶
When to save¶
- Каждые 15-20 ходов игры
- ВСЕГДА перед битвами с лидерами залов, встречами с соперником или рискованными боями
- Перед входом в новый город или подземелье
- Перед любым действием, в котором вы не уверены
How to save¶
POST /save с описательным именем. Хорошие примеры: before_brock, route1_start, mt_moon_entrance, got_cut
How to load¶
POST /load с именем сохранения.
List available saves¶
GET /saves возвращает все сохранённые состояния.
Loading on server startup¶
Используйте флаг --load-state при запуске сервера для автоматической загрузки сохранения. Это быстрее, чем загрузка через API после запуска.
The Gameplay Loop¶
Step 1: OBSERVE — check state AND take a screenshot¶
GET /state для получения позиции, HP, статуса боя, диалога. GET /screenshot и сохраните в /tmp/pokemon.png, затем используйте vision_analyze. Всегда делайте ОБА — RAM-состояние даёт числа, vision даёт пространственное восприятие.
Step 2: ORIENT¶
- Диалог/текст на экране → продвинуть его
- В бою → сражаться или убежать
- Отряд ранен → направиться в Pokemon Center
- Рядом с целью → перемещаться осторожно
Step 3: DECIDE¶
Приоритет: диалог > бой > лечение > сюжетная цель > тренировка > исследование
Step 4: ACT — move 2-4 steps max, then re-check¶
POST /action с КОРОТКИМ списком действий (2-4 действия, не 10-15).
Step 5: VERIFY — screenshot after every move sequence¶
Сделайте скриншот и используйте vision_analyze, чтобы подтвердить, что вы переместились туда, куда планировали. Это САМЫЙ ВАЖНЫЙ шаг. Без vision вы ОБЯЗАТЕЛЬНО заблудитесь.
Step 6: RECORD progress to memory with PKM: prefix¶
Step 7: SAVE periodically¶
Action Reference¶
- 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, пока диалог не закончится
Critical Tips from Experience¶
USE VISION CONSTANTLY¶
- Делайте скриншот каждые 2-4 шага движения
- RAM-состояние сообщает позицию и HP, но НЕ то, что вас окружает
- Уступы, заборы, таблички, двери зданий, NPC — видны только на скриншоте
- Задавайте модели vision конкретные вопросы: «что находится на одну клетку севернее меня?»
- Когда застряли, всегда делайте скриншот перед попыткой случайных направлений
Warp Transitions Need Extra Wait Time¶
При проходе через дверь или лестницу экран затемняется во время смены карты. Вы ОБЯЗАНЫ дождаться завершения. Добавляйте 2-3 действия wait_60 после любого прохода через дверь/лестницу. Без ожидания позиция будет устаревшей, и вы будете думать, что всё ещё находитесь на старой карте.
Building Exit Trap¶
Когда вы выходите из здания, вы оказываетесь ПРЯМО ПЕРЕД дверью. Если пойти на север, вы снова войдёте внутрь. ВСЕГДА сначала делайте шаг в сторону, переместившись на 2 клетки влево или вправо, затем продолжайте движение в нужном направлении.
Dialog Handling¶
В 1-м поколении текст прокручивается медленно, буква за буквой. Чтобы ускорить диалог, удерживайте B в течение 120 кадров, затем нажмите A. Повторяйте по необходимости. Удержание B заставляет текст отображаться на максимальной скорости. Затем нажмите A, чтобы перейти к следующей строке. Действие a_until_dialog_end проверяет флаг диалога в RAM, но этот флаг перехватывает НЕ ВСЕ текстовые состояния. Если диалог кажется зависшим, используйте ручной шаблон hold_b + press_a и проверяйте через скриншот.
Ledges Are One-Way¶
Уступы (небольшие обрывы) можно только ПЕРЕПРЫГНУТЬ ВНИЗ (на юг), но НЕЛЬЗЯ забраться наверх (на север). Если путь на север заблокирован уступом, нужно обойти его слева или справа. Используйте vision, чтобы определить, с какой стороны проход. Спрашивайте модель vision явно.
Navigation Strategy¶
- Перемещайтесь по 2-4 шага за раз, затем делайте скриншот для проверки позиции
- При входе в новую область сразу делайте скриншот для ориентации
- Спрашивайте модель vision «в каком направлении [к цели]?»
- Если застряли на 3+ попытки, сделайте скриншот и полностью переоцените ситуацию
- Не выполняйте 10-15 действий подряд — вы проскочите цель или застрянете
Running from Wild Battles¶
В меню битвы RUN (БЕГСТВО) находится в правом нижнем углу. Чтобы добраться до него из позиции курсора по умолчанию (FIGHT, верхний левый угол): нажмите вниз, затем вправо, чтобы переместить курсор на RUN, затем нажмите A. Используйте hold_b для ускорения текста/анимаций.
Battling (FIGHT)¶
В меню битвы FIGHT находится в верхнем левом углу (позиция курсора по умолчанию). Нажмите A для входа в выбор атаки, снова A для использования первой атаки. Затем удерживайте B для ускорения анимаций атак и текста.
Battle Strategy¶
Decision Tree¶
- Хотите поймать? → Ослабить, затем бросить Poke Ball
- Дикий, не нужен? → RUN (БЕЖАТЬ)
- Есть преимущество по типу? → Использовать суперэффективную атаку
- Нет преимущества? → Использовать сильнейшую STAB-атаку
- Мало HP? → Сменить покемона или использовать Potion
Gen 1 Type Chart (key matchups)¶
- Water побеждает Fire, Ground, Rock
- Fire побеждает Grass, Bug, Ice
- Grass побеждает Water, Ground, Rock
- Electric побеждает Water, Flying
- Ground побеждает Fire, Electric, Rock, Poison
- Psychic побеждает Fighting, Poison (доминирует в 1-м поколении!)
Gen 1 Quirks¶
- Характеристика Special = одновременно атака И защита для специальных атак
- Psychic-тип слишком силён (атаки Ghost багованы)
- Критические удары зависят от характеристики Speed
- Wrap/Bind не дают противнику действовать
- Баг Focus Energy: УМЕНЬШАЕТ шанс крита вместо его повышения
Memory Conventions¶
Префикс| Назначение| Пример
|---|---|---
PKM:OBJECTIVE| Текущая цель| Get Parcel from Viridian Mart
PKM:MAP| Информация о навигации| Viridian: mart is northeast
PKM:STRATEGY| Планы битв/команды| Need Grass type before Misty
PKM:PROGRESS| Отслеживание этапов| Beat rival, heading to Viridian
PKM:STUCK| Ситуации застревания| Ledge at y=28 go right to bypass
PKM:TEAM| Заметки о команде| Squirtle Lv6, Tackle + Tail Whip
Progression Milestones¶
- Выбор стартового покемона
- Доставка посылки из Viridian Mart, получение Pokedex
- Boulder Badge — Брок (Rock) → использовать Water/Grass
- Cascade Badge — Мисти (Water) → использовать Grass/Electric
- Thunder Badge — Лейтенант Сёрдж (Electric) → использовать Ground
- Rainbow Badge — Эрика (Grass) → использовать Fire/Ice/Flying
- Soul Badge — Кога (Poison) → использовать Ground/Psychic
- Marsh Badge — Сабрина (Psychic) → сложнейший зал
- Volcano Badge — Блейн (Fire) → использовать Water/Ground
- Earth Badge — Джованни (Ground) → использовать Water/Grass/Ice
- Elite Four → Чемпион!
Stopping Play¶
- Сохраните игру с описательным именем через POST /save
- Обновите память с PKM:PROGRESS
- Сообщите пользователю: «Игра сохранена как [имя]! Скажите 'play pokemon', чтобы продолжить.»
- Завершите процессы сервера и туннеля
Pitfalls¶
- НИКОГДА не загружайте и не предоставляйте ROM-файлы
- Не отправляйте более 4-5 действий без проверки через vision
- Всегда делайте шаг в сторону после выхода из зданий перед движением на север
- Всегда добавляйте wait_60 x2-3 после прохода через двери/лестницы
- Обнаружение диалога через RAM ненадёжно — проверяйте скриншотами
- Сохраняйтесь ПЕРЕД рискованными встречами
-
URL туннеля меняется каждый раз при перезапуске
- Reference: full SKILL.md
- When to Use
- Startup Procedure
- Save and Load
- The Gameplay Loop
- Action Reference
- Critical Tips from Experience
- Battle Strategy
- Memory Conventions
- Progression Milestones
- Stopping Play
- Pitfalls