Ghid operator pentru Pokemon Player

Ce face

pokemon-player permite rularea unui joc Pokemon prin emulator headless, folosind pachetul public pokemon-agent. Serverul local citește starea jocului din RAM — poziție, HP, battle state, dialog — și folosește screenshot-uri pentru orientare vizuală.

Nu este un sistem de „apasă butoane până nimerește”. Loop-ul sigur este: observă starea, ia screenshot, se orientează vizual, decide, execută doar câteva acțiuni, verifică din nou, apoi salvează periodic. RAM-ul oferă numere; imaginea spune dacă două tile-uri mai încolo există o ușă, un gard, un NPC sau o mică nenorocire geometrică.

Ghidul acesta face parte din All guides.

Când îmi folosește

Folosește capabilitatea când vrei ca agentul să pornească, să continue sau să joace Pokemon prin emulator, inclusiv jocuri de tip Pokemon Red, Blue, Yellow, FireRed sau similare.

Trigger-ele canonice sunt:

  • „play pokemon”
  • „start pokemon”
  • „pokemon game”
  • întrebări despre Pokemon Red, Blue, Yellow, FireRed etc.
  • referințe la un ROM .gb, .gbc sau .gba
  • cereri de tip „vreau să văd un AI jucând Pokemon”

Ai nevoie de propriul ROM. Agentul nu descarcă, nu furnizează și nu caută ROM-uri. Dacă ROM-ul nu este disponibil în sesiune, trebuie cerut utilizatorului. Fără ROM, nu există gameplay; doar conversație despre gameplay. Trist, dar legal.

Cum îl invoc / declanșez

Invocarea exactă depinde de runtime, dar procedura tehnică este aceeași.

Prerequisite-uri:

  1. repo-ul NousResearch/pokemon-agent clonat local;
  2. Python 3.10+;
  3. virtual environment activ;
  4. instalare editable cu extra-ul pyboy;
  5. ROM furnizat de utilizator.

uv este varianta preferată pentru venv și instalare rapidă. Dacă nu există, se folosește python3 -m venv și pip.

Pornirea serverului:

pokemon-agent serve --rom <ROM> --port 9876

Pentru reluare dintr-un save:

pokemon-agent serve --rom <ROM> --port 9876 --load-state <save_name>

După pornire, serverul se verifică prin:

GET /health

Dashboard-ul live este opțional. Skill-ul descrie un SSH reverse tunnel prin localhost.run; dacă tunelul pornește, URL-ul generat se oferă cu /dashboard/ adăugat. URL-ul nu este stabil și se schimbă la restart. Dacă tunelul nu pornește, jocul poate rula local fără dashboard public.

Exemplu practic

Spui: „start pokemon cu ROM-ul meu”.

Agentul trebuie să folosească ROM-ul furnizat, să pornească serverul pe portul 9876, să verifice GET /health, apoi să ofere dashboard-ul doar dacă tunelul a fost creat real.

Loop-ul corect:

  1. GET /state
  2. GET /screenshot, salvat temporar
  3. analiză vizuală a screenshot-ului
  4. decizie: dialog, battle, heal, story objective, training sau explore
  5. POST /action cu o listă scurtă, de obicei 2–4 acțiuni
  6. screenshot nou pentru verificare
  7. salvare periodică

Acțiuni disponibile includ:

  • press_a
  • press_b
  • press_start
  • walk_up
  • walk_down
  • walk_left
  • walk_right
  • hold_b_N
  • wait_60
  • a_until_dialog_end

Output / unde aterizează

Output-ul principal este sesiunea de joc rulată de serverul pokemon-agent. Dacă dashboard-ul este disponibil, rezultatul vizibil pentru utilizator este pagina /dashboard/.

Progresul se notează cu prefixe PKM::

PrefixScop
PKM:OBJECTIVEobiectiv curent
PKM:MAPcunoștințe de navigație
PKM:STRATEGYstrategie de luptă sau echipă
PKM:PROGRESSmilestone-uri
PKM:STUCKsituații unde agentul s-a blocat
PKM:TEAMnote despre echipă

Save/load:

  • POST /save cu nume descriptiv, de exemplu before_gym sau town_entrance
  • POST /load cu numele save-ului
  • GET /saves pentru lista save-urilor
  • --load-state <save_name> la pornire pentru încărcare directă

La oprire: salvează jocul, actualizează progresul PKM:PROGRESS, spune utilizatorului numele save-ului și oprește serverul plus tunelul, dacă există.

Limite / gotchas

Nu furnizează ROM-uri. Nu inventează existența unui ROM. Nu pretinde că dashboard-ul public există dacă tunelul nu a pornit.

Vision este obligatoriu. RAM-ul spune poziție și HP; nu spune ce e lângă tine. Screenshot la fiecare 2–4 pași, altfel agentul va ajunge să negocieze cu un gard.

După uși sau scări, adaugă 2–3 acțiuni wait_60. Tranzițiile pot lăsa poziția veche în RAM.

La ieșirea din clădiri apari în fața ușii. Dacă mergi nord, intri înapoi. Întâi sidestep stânga sau dreapta două tile-uri.

Dialogul din Gen 1 curge lent. Pattern robust: hold_b_120, apoi press_a, repetat și verificat vizual. a_until_dialog_end poate rata unele stări de text.

Ledges sunt one-way: se sar doar în jos, nu se urcă. În battle, RUN este jos-dreapta; din cursorul default FIGHT mergi down, right, apoi press_a. FIGHT este sus-stânga; press_a, apoi încă un press_a folosește prima mișcare.