🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more

rpg-map

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rpg-map

A zero dependency, lightweight and fast library to manipulate RPG images written in Rust.

0.0.3
Maintainers
1

rpg_map

.. image:: https://img.shields.io/pypi/v/rpg_map.svg :target: https://pypi.org/project/rpg_map/ :alt: PyPI version

.. image:: https://readthedocs.org/projects/rpg-map/badge/?version=latest :target: https://rpg-map.readthedocs.io/en/latest/ :alt: Documentation Status

A fast, zero-dependency Python library for visualizing exploration and movement across large pixel-based maps. Built in Rust for speed and efficiency, rpg_map is perfect for turn-based or real-time RPGs, strategy games, and D&D-style map reveals.

Key Features

  • Hides unexplored areas of the map
  • Reveals areas as they're explored or passed through
  • Draws travel paths using A* pathfinding
  • Fast and lightweight with zero Python dependencies
  • Operates directly on pixel data
  • Customizable visual styles and highlight zones
  • Includes examples using static image processing and Pygame

Install

Install via pip:

.. code:: bash

pip install rpg-map

Documentation

Full documentation and examples available at: https://rpg-map.readthedocs.io/

How It Works

The library uses step-by-step image processing to reveal and annotate the map. Here's an overview of the process:

Code:

This is the code which was used to generate the final result of the example steps below:

.. code:: python

from rpg_map import Travel, Map, MapType, PathStyle, PathProgressDisplayType, PathDisplayType from PIL import Image

LOCAL_DIR = "../test_assets/map.png" BACKGROUND_DIR = "../test_assets/background.png" GRID_SIZE = 20 START, END = (198, 390), (172, 223) START_X, START_Y = START

image = Image.open(LOCAL_DIR).convert("RGBA")

get image bytes

image_bytes = list(image.tobytes()) background = Image.open(BACKGROUND_DIR).convert("RGBA")

get background bytes

background_bytes = list(background.tobytes()) map = Map( image_bytes, image.size[0], image.size[1], GRID_SIZE, MapType.Limited, obstacles=[[(160, 240), (134, 253), (234, 257), (208, 239)]], )

travel = Travel(map, START, END) path_bits = Map.draw_background( map.with_dot(START_X, START_Y, (255, 0, 0, 255), 4).draw_path( travel, 1.0, 2, PathStyle.DottedWithOutline((255, 0, 0, 255), (255, 255, 255, 255)), ), background_bytes )

Display the image

image = Image.frombytes("RGBA", (image.width, image.height), path_bits) image.show()

Steps:

Advanced Features

Examples

Check out these demos:

  • examples/static_poc.py <https://github.com/Kile/rpg_map/blob/master/examples/static_poc.py>_ – Generate one image from your code
  • examples/pygame_poc <https://github.com/Kile/rpg_map/blob/master/examples/pygame_poc.py>_ – Interactively do pathfinding to wherever you click
  • examples/readme.py <https://github.com/Kile/rpg_map/blob/master/examples/readme.py>_ – The code used to generate the final image in the steps breakdown in this README

Contributing & Development

We welcome contributions and ideas! If you'd like to work on rpg_map locally, here's how to get started.

Set Up the Development Environment

  • Compile the Rust Extension Locally

    Use maturin to build and install the Rust extension module in your local Python environment:

    .. code:: bash

    maturin develop --features "extension-module"

  • Generate Python Typings ( .pyi )

    The library includes a binary that auto-generates Python type stubs. Run it with:

    .. code:: bash

    cargo run --bin stub_gen --features stubgen

  • Build the Documentation

    The documentation uses Sphinx and can be built locally as follows:

    .. code:: bash

    python3 -venv env && source env/bin/activate cd docs pip3 install -r requirements.txt sphinx-apidoc -o source/ ../ -f make html

    The output will be available in the docs/build/html/ directory.

Additional Notes

  • The Rust project uses pyo3 to create Python bindings — see Cargo.toml for feature flags and build options.
  • Type hints are manually generated via the stub_gen tool, ensuring compatibility with type checkers and IDEs. Interestingly sphinx uses the docs defined in the Rust code though, the pyi file is only for IDE type hinting when using the library.

License

MIT

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts