Skip to main content

Gymnasium environment for Street Fighter III: 3rd Strike using the MAME emulator

Project description

SFIII Gym

Latest Tag Pypi version

Code Checks Pytest

Supported OS Python Version Latest Repo Update

License

SFIII Gym

A Gymnasium environment for Street Fighter III: 3rd Strike using the MAME emulator. Train reinforcement learning agents to play one of the most iconic fighting games ever made.

SFIII Gym

Features

  • Gymnasium-compatible — standard reset() / step() / render() API
  • Rich observations — game frame (224×384 RGB), player healths, sides, opponent character, and current stage
  • 15 discrete actions — movement (8 directions + idle) and attacks (6 punch/kick buttons)
  • Configurable difficulty — 8 difficulty levels (1–8)
  • Render modes"human" for live playback, "rgb_array" for headless training

Prerequisites

  • Python ≥ 3.12
  • Linux (MAME emulator requirement)
  • Street Fighter III: 3rd Strike ROM (sfiii3n.zip) — you must legally obtain this ROM and place it in a local directory (e.g. ./rom/)

Installation

pip install sfiii-gym

Or with uv:

uv add sfiii-gym

For development:

git clone https://github.com/alexpalms/sfiii-gym.git
cd sfiii-gym
uv sync

Getting Started

from sfiii_gym import Environment

# Create the environment
env = Environment("env1", "./rom", render_mode="human", throttle=False)
obs, info = env.reset()

cumulative_reward = 0
while True:
    env.render()
    action = env.action_space.sample()  # Replace with your agent's action
    obs, reward, terminated, truncated, info = env.step(action)
    cumulative_reward += reward

    if terminated or truncated:
        print(f"Episode finished — Cumulative Reward: {cumulative_reward}")
        obs, info = env.reset()
        cumulative_reward = 0

Observation Space

Key Space Description
frame Box(0, 255, (224, 384, 3), uint8) Raw game screen (RGB)
healthP1 Box(-1, 160, int16) Player 1 health
healthP2 Box(-1, 160, int16) Player 2 (opponent) health
sideP1 MultiBinary(1) Player 1 side
sideP2 MultiBinary(1) Player 2 side
characterP2 Discrete(20) Opponent character ID
stage Box(1, 10, uint8) Current stage (1–10)

Action Space

Discrete(15) — 0: no-op, 1–8: movement directions, 9–14: attacks (jab, strong, fierce, short, forward, roundhouse).

Configuration

Parameter Type Default Description
env_id str Unique environment identifier
roms_path str Path to directory containing the ROM
difficulty int 6 CPU difficulty level (1–8)
frame_ratio int 6 Frames per step (higher = faster)
render_mode str "rgb_array" "human" or "rgb_array"
throttle bool False Throttle to real-time speed

Repository Structure

sfiii-gym/
├── src/sfiii_gym/          # Main package
│   ├── __init__.py         # Package exports
│   ├── environment.py      # Gymnasium environment implementation
│   ├── actions.py          # Action definitions and mappings
│   ├── steps.py            # Step/observation processing logic
│   └── py.typed            # PEP 561 typing marker
├── tests/
│   ├── unit/               # Unit tests (actions, steps)
│   └── integration/        # Integration tests (env run, Gym API compliance)
├── stubs/MAMEToolkit/      # Type stubs for the MAME emulator toolkit
├── examples/
│   └── run_env.py          # Example script to run the environment
├── rom/                    # ROM directory (not distributed)
└── pyproject.toml          # Project metadata and dependencies

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sfiii_gym-0.1.2.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sfiii_gym-0.1.2-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file sfiii_gym-0.1.2.tar.gz.

File metadata

  • Download URL: sfiii_gym-0.1.2.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sfiii_gym-0.1.2.tar.gz
Algorithm Hash digest
SHA256 25a24428f4e1f1370d0de4b60d3e714e21fa388e5e73753bc620f9e8fb0de0b3
MD5 c9a50e632e4abf5ac78e0d3c8a2da93b
BLAKE2b-256 654f7bc53d38c59cc5c8f0f70cdec7bc0d78dc770be20fd01aa4237f4c3d6f29

See more details on using hashes here.

File details

Details for the file sfiii_gym-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: sfiii_gym-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sfiii_gym-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cbcd21dc2454998cef01a0541526a00f7963a90df15c0132cd95b50353b07361
MD5 b44be04189e9316003dcd6c9d2b2a66d
BLAKE2b-256 89622f5f12ab97aa4a36889d79e02b7c7568a29f87500cb20bcb25b04d32b760

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page