Skip to content

Experimental and optional features

Mads Ynddal edited this page Apr 19, 2020 · 15 revisions

You can always run pyboy --help to find an overview of available features and options:

$ python -m pyboy --help
usage: __main__.py [-h] [-b BOOTROM] [--profiling]
                   [--log-level {ERROR,WARNING,INFO,DEBUG,DISABLE}]
                   [--color-palette COLOR_PALETTE] [-l [LOADSTATE]]
                   [-w {SDL2,OpenGL,headless,dummy}] [-s SCALE]
                   [--disable-renderer] [-d] [--no-input] [--autopause]
                   [--record-input] [--rewind] [--game-wrapper]
                   ROM

PyBoy -- Game Boy emulator written in Python

positional arguments:
  ROM                   Path to a Game Boy compatible ROM file

optional arguments:
  -h, --help            show this help message and exit
  -b BOOTROM, --bootrom BOOTROM
                        Path to a boot-ROM file
  --profiling           Enable opcode profiling (internal use)
  --log-level {ERROR,WARNING,INFO,DEBUG,DISABLE}
                        Set logging level
  --color-palette COLOR_PALETTE
                        Four comma seperated, hexadecimal, RGB values for
                        colors (i.e. "FFFFFF,999999,555555,000000")
  -l [LOADSTATE], --loadstate [LOADSTATE]
                        Load state from file. If filepath is specified, it
                        will load the given path. Otherwise, it will
                        automatically locate a saved state next to the ROM
                        file.
  -w {SDL2,OpenGL,headless,dummy}, --window-type {SDL2,OpenGL,headless,dummy}, --window {SDL2,OpenGL,headless,dummy}
                        Specify window-type to use
  -s SCALE, --scale SCALE
                        The scaling multiplier for the window
  --disable-renderer    Disables screen rendering for higher performance
  -d, --debug           Enable emulator debugging mode
  --no-input            Disable all user-input (mostly for autonomous testing)
  --autopause           Enable auto-pausing when window looses focus
  --record-input        Record user input and save to a file (internal use)
  --rewind              Enable rewind function
  --game-wrapper        Enable game wrapper for the current game

Warning: Features marked with (internal use) might be subject to change.

Game Windows

PyBoy is bundled with several window implementations. The recommended is SDL2, and its installation is described in the installation instructions.

The installations instructions here, will be sparse, as they are mostly for the technically interested.

  1. SDL2 : Covered by the default installation.
  2. OpenGL : Install OpenGL and FreeGLUT through the system's package manager. Install pyopengl and optionally pyopengl-accelerate through pip.
  3. dummy : No installation required.
  4. headless : No installation required. Used for rendering to a buffer.

The "window" can be chosen via the arguments supplied to Python. For example:

python3 -m pyboy gamerom.gb --window SDL2

Screen Recording

If the pillow package is available, PyBoy can record video from the screen and save it in a .gif file. This requires the following additional dependencies:

# Linux
sudo apt install libsdl2-dev libtiff5-dev libjpeg8-dev zlib1g-dev

# Mac
brew install libjpeg libtiff

Install the pillow package with pip:

python3 -m pip install pillow

PyBoy will detect whether pillow is present, and screen recording can be triggered with the I key.

Rewind Time

By providing the --rewind flag when starting PyBoy, you'll be able to pause the emulation, and rewind the game (for example before you lost the game).

Use the , and . keys to wind backwards and forwards.

Debugging

By providing the --debug flag when starting PyBoy, you'll be presented with multiple windows showing the inner workings of the graphics of PyBoy.

Clone this wiki locally