Pokemon Player

Игра в Pokemon через headless-эмулятор и чтение RAM.

Метаданные навыка

ИсточникОпциональный — установить командой 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

инфо

Ниже приведено полное определение навыка, которое Hermes Agent загружает при его активации. Именно это видит агент в качестве инструкций, когда навык включён.

Pokemon Player

Игра в Pokemon через headless-эмуляцию с помощью пакета pokemon-agent.

Когда использовать

  • Пользователь говорит «play pokemon», «start pokemon», «pokemon game»
  • Пользователь спрашивает о Pokemon Red, Blue, Yellow, FireRed и т.д.
  • Пользователь хочет понаблюдать, как ИИ играет в Pokemon
  • Пользователь указывает ROM-файл (.gb, .gbc, .gba)

Процедура запуска

1. Первичная настройка (clone, venv, install)

Репозиторий — NousResearch/pokemon-agent на GitHub. Клонируй его, затем создай виртуальное окружение Python 3.10+. Для создания venv и установки пакета в editable-режиме с extra-зависимостью pyboy используй uv (работает быстрее). Если uv недоступен — python -m venv + pip.

Если checkout уже существует (например, ~/pokemon-agent с готовым venv) — просто перейди туда и выполни source .venv/bin/activate вместо повторного клонирования.

Также нужен ROM-файл. Попроси его у пользователя (если делалась предыдущая настройка, он может уже лежать в roms/pokemon_red.gb внутри checkout). НИКОГДА не скачивай и не предоставляй ROM-файлы — всегда запрашивай их у пользователя.

2. Запуск игрового сервера

Из директории pokemon-agent с активированным venv запусти pokemon-agent serve с флагами —rom (путь к ROM) и —port 9876. Запускай в фоне с &. Чтобы возобновить сохранённую игру — добавь —load-state с именем сохранения. Подожди 4 секунды на запуск, затем проверь через GET /health.

3. Настройка живой панели для просмотра пользователем

Используй SSH reverse tunnel через localhost.run, чтобы пользователь мог открыть панель в браузере. Подключись по ssh, пробросив локальный порт 9876 на удалённый порт 80 на keyless-эндпоинт localhost.run (ssh -R 80:localhost:9876 ssh://nokey@localhost.run). Перенаправь вывод в лог-файл, подожди 10 секунд, затем найди grep’ом в логе URL вида .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 после старта.

Игровой цикл

Шаг 1: OBSERVE — проверка состояния И скриншот

GET /state — позиция, HP, бой, диалог. GET /screenshot, сохрани в ~/.hermes/cache/scratch/pokemon.png, затем используй vision_analyze. Делай оба запроса всегда: RAM-состояние даёт цифры, зрение — пространственную картину.

Шаг 2: ORIENT

  • Диалог или текст на экране → пролистай его
  • В бою → атакуй или убегай
  • Команда ранена → иди в Pokemon Center
  • Рядом с целью → двигайся осторожно

Шаг 3: DECIDE

Приоритет: диалог > бой > лечение > сюжетная цель > тренировка > исследование

Шаг 4: ACT — не более 2–4 шагов, затем повторная проверка

POST /action с КОРОТКИМ списком действий (2–4 действия, не 10–15).

Шаг 5: VERIFY — скриншот после каждой серии движений

Сделай скриншот и используй vision_analyze, чтобы убедиться: переместился туда, куда планировал. Это САМЫЙ ВАЖНЫЙ шаг. Без зрения неизбежно заблудишься.

Шаг 6: RECORD — запись прогресса в память с префиксом PKM:

Шаг 7: SAVE — периодически сохраняйся

Справочник по действиям

  • 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, но НЕ показывает, что вокруг
  • Уступы, заборы, знаки, двери зданий, NPC — всё это видно только на скриншоте
  • Задавай модели зрения конкретные вопросы: «what is one tile north of me?»
  • Застрял — сначала скриншот, и только потом пробуй разные направления

Переходы через warp требуют дополнительного ожидания

При проходе через дверь или лестницу экран гаснет во время перехода между картами. ОБЯЗАТЕЛЬНО дождись завершения. Добавляй 2–3 действия wait_60 после любого warp через дверь или лестницу. Без ожидания позиция окажется устаревшей — будет казаться, что всё ещё на старой карте.

Ловушка при выходе из здания

Когда выходишь из здания, персонаж появляется прямо ПЕРЕД дверью. Шаг на север — и снова внутри. ВСЕГДА сначала уйди вбок: 2 клетки влево или вправо, и только потом двигайся в нужном направлении.

Работа с диалогом

В первом поколении текст прокручивается медленно, буква за буквой. Чтобы ускорить: удерживай B 120 кадров, затем нажми A. Повторяй по необходимости. Удержание B выводит текст на максимальной скорости, A — переходит к следующей строке. Действие a_until_dialog_end проверяет флаг диалога в RAM, но он охватывает НЕ ВСЕ текстовые состояния. Если диалог завис — переключись на ручной hold_b + press_a и проверяй через скриншот.

Уступы — односторонние

Уступы (небольшие края обрыва) можно преодолеть только вниз (на юг), подняться вверх (на север) нельзя. Если уступ блокирует движение на север — ищи проход влево или вправо. Определи направление через зрение. Спроси модель зрения явно.

Стратегия навигации

  • Двигайся по 2–4 клетки за раз, затем скриншот для проверки позиции
  • При входе в новую зону — сразу скриншот для ориентировки
  • Спроси модель зрения: «which direction to [destination]?»
  • После 3+ неудачных попыток — скриншот и полная переоценка ситуации
  • Не отправляй по 10–15 движений подряд — промахнёшься мимо цели или застрянешь

Побег от диких покемонов

В меню боя RUN находится внизу справа. Из позиции курсора по умолчанию (FIGHT, вверху слева): нажми down, затем right — курсор окажется на RUN, затем A. Оберни в hold_b для ускорения текста и анимации.

Бой (FIGHT)

В меню боя FIGHT — вверху слева (позиция курсора по умолчанию). Нажми A для входа в выбор приёма, A ещё раз — чтобы использовать первый приём. Затем удерживай B для ускорения анимации атаки и текста.

Стратегия боя

Дерево решений

  1. Хочешь поймать? → Ослабь, затем брось Poke Ball
  2. Дикий покемон не нужен? → RUN
  3. Есть преимущество по типу? → Используй суперэффективный приём
  4. Нет преимущества? → Используй сильнейший STAB-приём
  5. Мало HP? → Смени покемона или используй Potion

Таблица типов Gen 1 (важные связки)

  • Water бьёт Fire, Ground, Rock
  • Fire бьёт Grass, Bug, Ice
  • Grass бьёт Water, Ground, Rock
  • Electric бьёт Water, Flying
  • Ground бьёт Fire, Electric, Rock, Poison
  • Psychic бьёт Fighting, Poison (доминирует в Gen 1!)

Особенности Gen 1

  • Special stat = и атака, И защита для специальных приёмов
  • Тип Psychic перекачан (приёмы Ghost багованы)
  • Критические удары зависят от стата Speed
  • Wrap/Bind не дают сопернику ходить
  • Баг Focus Energy: СНИЖАЕТ шанс крита вместо повышения

Соглашения памяти

ПрефиксНазначениеПример
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

Этапы прохождения

  • Выбери стартового покемона
  • Доставь Parcel из Viridian Mart, получи Pokedex
  • Boulder Badge — Brock (Rock) → используй Water/Grass
  • Cascade Badge — Misty (Water) → используй Grass/Electric
  • Thunder Badge — Lt. Surge (Electric) → используй Ground
  • Rainbow Badge — Erika (Grass) → используй Fire/Ice/Flying
  • Soul Badge — Koga (Poison) → используй Ground/Psychic
  • Marsh Badge — Sabrina (Psychic) → самый сложный зал
  • Volcano Badge — Blaine (Fire) → используй Water/Ground
  • Earth Badge — Giovanni (Ground) → используй Water/Grass/Ice
  • Elite Four → Champion!

Завершение игры

  1. Сохрани игру с описательным именем через POST /save
  2. Обнови память с PKM:PROGRESS
  3. Скажи пользователю: “Game saved as [name]! Say ‘play pokemon’ to resume.”
  4. Заверши фоновые процессы сервера и туннеля

Ошибки, которых нужно избегать

  • НИКОГДА не скачивай и не предоставляй ROM-файлы
  • НЕ отправляй больше 4–5 действий без проверки через зрение
  • После выхода из здания всегда уходи вбок, прежде чем идти на север
  • После warp через дверь/лестницу всегда добавляй wait_60 x2–3
  • Определение диалога через RAM ненадёжно — проверяй скриншотами
  • Сохраняй ДО рискованных встреч
  • URL туннеля меняется при каждом перезапуске
перевод и редактура:

обновлено

⌕ ESC