Skip to content

jev-plays-pokemon-red

Pokémon Red on PyBoy where code owns route and arithmetic, Jev picks only at branches, and battle faint predictions are Brier-scored.

DemoprototypeMIT

Overview

jev-plays-pokemon-red plays Pokémon Red with a model that only outputs probabilities. Code reads the Game Boy's memory into a typed snapshot and hands Jev a menu of the moves that are actually legal; an overlay shows Jev's probabilities as bars. The agent walks out of the bedroom, crosses Pallet Town, takes Charmander from Oak and wins the rival battle unaided.

The design is explicit that Jev cannot plan: every route, threshold and calculation is Python, and Jev is asked only where the game branches, not at all between the bedroom and Oak's lab. The README illustrates why branches need a model with two real answers: yes (0.61) to taking Charmander and no (0.58) to nicknaming it, where no fixed button works for both. Every battle turn also asks a faints_this_turn Noul, labelled from what RAM shows next, so calibration can be measured. Reported latency via a gateway shim was a 621 ms median (n=6), about 1.3 decisions per second and $0.14 per hour; calibration is deliberately not published yet because the free tier allowed only tiny samples.

What the decision model decides

TypeQuestionAnswers
ChoiceWhich legal action should be taken at this branch?—
Yes / noDo you want the fire Pokémon, Charmander?yes · no
Yes / nofaints_this_turn: will a Pokémon faint this turn?yes · no

How it works

  1. Read RAM into a typed snapshot
  2. Code handles routine movement and arithmetic
  3. At branches, Jev gets the legal options and returns probabilities
  4. Each battle turn logs a faint prediction scored against RAM
  5. measure reports Brier against base rate and constant predictor

Strengths

  • Model consulted only where it adds value
  • Calibration measured rather than assumed
  • Honest about sample size limits

Caveats

  • Cannot plan; only picks at branches
  • Calibration results not yet available
  • Requires your own ROM and a key

Getting started

uv run jpp play --rom /path/to/your/red.gb --overlay

At a glance

Type
Demo
Status
prototype
Language
Python
Runtime
PyBoy emulator with overlay
Has code
yes
License
MIT
Stars
8

Use cases and integrations

How curated lists describe it

  • Gaming: Pokemon Red on PyBoy where deterministic code owns the route and arithmetic, Jev picks only at branches, and every battle turn's faint prediction is scored by Brier against RAM state.

    yibie/awesome-jev
  • Pokemon Red on PyBoy where deterministic code owns the route and arithmetic and Jev picks only at branches, with every battle turn's faint prediction scored by Brier against the emulator's RAM state.

    AnotiaWang/awesome-decision-models
  • Pokemon Red on PyBoy where Python owns the route and the arithmetic, and Jev chooses only among legal actions at actual branches.

    logicrw/awesome-jev-projects
  • Pokemon Red on PyBoy: code owns the route and the arithmetic, Jev picks at branches in about 100 ms, calibration measured instead of assumed

    wh000wh000/awesome-jev-live
  • Pokemon Red on PyBoy where deterministic code owns the route and arithmetic and Jev picks only at branches, with every battle turn's faint prediction scored by Brier against the emulator's RAM state.

    cobanov/awesome-jev
  • Pokemon Red on PyBoy where code owns the route and the arithmetic, Jev only picks at branches, and every battle turn's faint prediction is scored by Brier against RAM state.

    hellogumbo/awesome-jev
  • Pokemon Red on PyBoy where code owns the route and the arithmetic and Jev only picks at branches, logging a Brier-scored faint prediction against RAM state on every battle turn.

    MrJev/awesome-jev

Frequently asked questions

When is Jev asked?

Only at real branches in the game; code handles routine movement.

How is calibration checked?

Each battle turn's faint prediction is compared with what RAM shows happened, scored by Brier.

Why no calibration numbers yet?

The free tier allowed only about five calls per window, too few for a meaningful score.

Related projects

  • Instrumented 2048 web lab where every move is a Jev Choice over four directions, with probabilities, latency and cost shown live.

    ProjectbetaTypeScript
  • Bilingual turtle-soup (lateral-thinking) puzzle site where Jev acts as host, judging player questions and grading solutions.

    AppbetaTypeScript
  • Browser Minesweeper demo where Jev answers 'is this cell a mine?' for every frontier cell in one request, with an exact solver as fallback.

    ProjectprototypeJavaScript
  • Pandu: tiny local policy networks (2.9K-5K parameters) with calibrated uncertainty that fall back to a teacher when unsure.

    ProjectresearchPython
  • Twenty-questions game where Jev's confidence decides when to stop: it commits, hedges or refuses to guess.

    DemoprototypeTypeScript
  • Harness where Jev or Laya pick DOOM tactics and targets from legal options while a deterministic controller presses buttons.

    ModelresearchPython