{/ Эта страница автоматически генерируется из SKILL.md навыка с помощью website/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Pokemon Player

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

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

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

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 туннеля меняется каждый раз — дайте пользователю новый, если перезапустили.

Сохранение и загрузка

Когда сохранять

Как сохранять

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: ОРИЕНТИРУЙТЕСЬ

Шаг 3: РЕШАЙТЕ

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

Шаг 4: ДЕЙСТВУЙТЕ — двигайтесь максимум на 2-4 шага, затем перепроверьте

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

Шаг 5: ПРОВЕРЬТЕ — скриншот после каждой последовательности движений

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

Шаг 6: ЗАПИШИТЕ прогресс в память с префиксом PKM:

Шаг 7: ПЕРИОДИЧЕСКИ СОХРАНЯЙТЕ

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

Критические советы из опыта

ИСПОЛЬЗУЙТЕ ЗРЕНИЕ ПОСТОЯННО

Переходы между локациями требуют дополнительного времени ожидания

При проходе через дверь или лестницу экран темнеет во время смены карты. Вы ДОЛЖНЫ подождать завершения. Добавьте 2-3 wait_60 действия после любого перехода через дверь/лестницу. Без ожидания позиция читается как устаревшая, и вы будете думать, что все еще на старой карте.

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

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

Обработка диалогов

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

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

Уступы (небольшие обрывы) можно только ПРЫГАТЬ ВНИЗ (на юг), никогда не взбираться ВВЕРХ (на север). Если путь на север заблокирован уступом, вы должны пойти влево или вправо, чтобы найти обход. Используйте зрение, чтобы определить, в каком направлении находится проход. Спросите модель зрения явно.

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

Побег из диких битв

В меню битвы RUN находится внизу справа. Чтобы добраться до него из позиции курсора по умолчанию (FIGHT, вверху слева): нажмите вниз, затем вправо, чтобы переместить курсор на RUN, затем нажмите A. Оберните hold_b для ускорения текста/анимаций.

Бой (FIGHT)

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

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

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

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

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

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

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

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

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

Остановка игры

  1. Сохраните игру с описательным именем через POST /save
  2. Обновите память с PKM:PROGRESS
  3. Сообщите пользователю: «Игра сохранена как [имя]! Скажите 'play pokemon', чтобы продолжить.»
  4. Убейте фоновые процессы сервера и туннеля

Ловушки