{/ Эта страница автоматически генерируется из SKILL.md навыка с помощью website/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}
Pokemon Player
Игра в Pokemon через headless-эмуляцию с использованием пакета pokemon-agent.
Когда использовать
- Пользователь говорит «играть в покемонов», «запустить покемонов», «игра покемон»
- Пользователь спрашивает о Pokemon Red, Blue, Yellow, FireRed и т.д.
- Пользователь хочет посмотреть, как ИИ играет в Pokemon
- Пользователь ссылается на ROM-файл (.gb,.gbc,.gba)
Процедура запуска
1. Первоначальная настройка (клонирование, venv, установка)
Репозиторий — NousResearch/pokemon-agent на GitHub. Клонируйте его, затем настройте виртуальное окружение Python 3.10+. Используйте uv (предпочтительно для скорости) для создания venv и установки пакета в режиме редактирования с дополнением pyboy. Если uv недоступен, используйте python3 -m venv + pip.
На этой машине он уже настроен в /home/teknium/pokemon-agent с готовым venv — просто перейдите туда и выполните source.venv/bin/activate.
Вам также понадобится ROM-файл. Спросите его у пользователя. На этой машине один существует в roms/pokemon_red.gb внутри этого каталога. НИКОГДА не загружайте и не предоставляйте ROM-файлы — всегда спрашивайте пользователя.
2. Запустите игровой сервер
Из каталога pokemon-agent с активированным venv выполните pokemon-agent serve с --rom, указывающим на ROM, и --port 9876. Запустите его в фоне с помощью &. Чтобы возобновить с сохраненной игры, добавьте --load-state с именем сохранения. Подождите 4 секунды для запуска, затем проверьте с помощью GET /health.
3. Настройте живую панель для просмотра пользователем
Используйте обратный SSH-туннель через localhost.run, чтобы пользователь мог просматривать панель в своем браузере. Подключитесь через ssh, перенаправляя локальный порт 9876 на удаленный порт 80 на nokey@localhost.run. Перенаправьте вывод в файл журнала, подождите 10 секунд, затем найдите в журнале 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: НАБЛЮДАЙТЕ — проверьте состояние И сделайте скриншот
GET /state для позиции, HP, битвы, диалога. GET /screenshot и сохраните в /tmp/pokemon.png, затем используйте vision_analyze. Всегда делайте ОБА — состояние RAM дает числа, зрение дает пространственное восприятие.
Шаг 2: ОРИЕНТИРУЙТЕСЬ
- Диалог/текст на экране → продвигайте его
- В битве → сражайтесь или убегайте
- Команда ранена → направляйтесь в Pokemon Center
- Рядом с целью → двигайтесь осторожно
Шаг 3: РЕШАЙТЕ
Приоритет: диалог > битва > лечение > сюжетная цель > тренировка > исследование
Шаг 4: ДЕЙСТВУЙТЕ — двигайтесь максимум на 2-4 шага, затем перепроверьте
POST /action с КОРОТКИМ списком действий (2-4 действия, не 10-15).
Шаг 5: ПРОВЕРЬТЕ — скриншот после каждой последовательности движений
Сделайте скриншот и используйте 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, но НЕ то, что вокруг вас
- Уступы, заборы, знаки, двери зданий, NPC — видны только на скриншоте
- Задавайте модели зрения конкретные вопросы: «что находится на одну клетку севернее меня?»
- Когда застряли, всегда делайте скриншот, прежде чем пробовать случайные направления
Переходы между локациями требуют дополнительного времени ожидания
При проходе через дверь или лестницу экран темнеет во время смены карты. Вы ДОЛЖНЫ подождать завершения. Добавьте 2-3 wait_60 действия после любого перехода через дверь/лестницу. Без ожидания позиция читается как устаревшая, и вы будете думать, что все еще на старой карте.
Ловушка выхода из здания
Когда вы выходите из здания, вы появляетесь ПРЯМО ПЕРЕД дверью. Если вы пойдете на север, вы войдете обратно. ВСЕГДА сначала сделайте шаг в сторону, пройдя на 2 клетки влево или вправо, затем продолжайте в нужном направлении.
Обработка диалогов
В Gen 1 текст прокручивается медленно, буква за буквой. Чтобы ускорить диалог, удерживайте B в течение 120 кадров, затем нажмите A. Повторяйте по мере необходимости. Удержание B заставляет текст отображаться на максимальной скорости. Затем нажмите A для перехода к следующей строке. Действие a_until_dialog_end проверяет флаг диалога в RAM, но этот флаг не перехватывает ВСЕ состояния текста. Если диалог кажется зависшим, используйте ручной шаблон hold_b + press_a и проверьте через скриншот.
Уступы — односторонние
Уступы (небольшие обрывы) можно только ПРЫГАТЬ ВНИЗ (на юг), никогда не взбираться ВВЕРХ (на север). Если путь на север заблокирован уступом, вы должны пойти влево или вправо, чтобы найти обход. Используйте зрение, чтобы определить, в каком направлении находится проход. Спросите модель зрения явно.
Стратегия навигации
- Двигайтесь по 2-4 шага за раз, затем делайте скриншот для проверки позиции
- При входе в новую область сразу делайте скриншот для ориентации
- Спросите модель зрения «в каком направлении [пункт назначения]?»
- Если застряли после 3+ попыток, сделайте скриншот и полностью переоцените ситуацию
- Не спамьте 10-15 движений — вы промахнетесь или застрянете
Побег из диких битв
В меню битвы RUN находится внизу справа. Чтобы добраться до него из позиции курсора по умолчанию (FIGHT, вверху слева): нажмите вниз, затем вправо, чтобы переместить курсор на RUN, затем нажмите A. Оберните hold_b для ускорения текста/анимаций.
Бой (FIGHT)
В меню битвы FIGHT находится вверху слева (позиция курсора по умолчанию). Нажмите A для входа в выбор атаки, A снова для использования первой атаки. Затем удерживайте B для ускорения анимаций атак и текста.
Стратегия боя
Дерево решений
- Хотите поймать? → Ослабьте, затем бросьте Poke Ball
- Дикий, не нужен? → RUN
- Есть преимущество по типу? → Используйте суперэффективную атаку
- Нет преимущества? → Используйте самую сильную STAB-атаку
- Низкое 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 stat
- 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!
Остановка игры
- Сохраните игру с описательным именем через POST /save
- Обновите память с PKM:PROGRESS
- Сообщите пользователю: «Игра сохранена как [имя]! Скажите 'play pokemon', чтобы продолжить.»
- Убейте фоновые процессы сервера и туннеля
Ловушки
- НИКОГДА не загружайте и не предоставляйте ROM-файлы
- Не отправляйте более 4-5 действий без проверки зрения
- Всегда делайте шаг в сторону после выхода из зданий, прежде чем идти на север
- Всегда добавляйте wait_60 x2-3 после переходов через двери/лестницы
- Обнаружение диалога через RAM ненадежно — проверяйте скриншотами
- Сохраняйтесь ПЕРЕД рискованными встречами
- URL туннеля меняется каждый раз при его перезапуске