Skip to main content

Terminal text-adventure engine with a live minimap overlay.

Project description

coolmapmaker

A terminal text-adventure engine with a live minimap overlay.
Define your rooms and dialogue — the engine handles movement, rendering, and the map.

  +-- SHRINE OF THE NAMELESS  (1x1)           +-------+--+--+--+--+
  |   A stone idol squats in the centre,      |  . .  |  |  |  |  |
  |   ringed with offerings of bone.          +--#----+  |  |  |  |
  |                                           |       .  .  .  |  |
  |   The idol's hollow eyes track you.       +--+--+--+--+----+--+
  +-- 3 exits  [N E S]                        |  |@ |  |  |       |
                                              +--+--+--+--+-------+
  @ Shrine of the Nameless  |  exits: [N E S]  |  WASD/arrows = move  |  Q = quit

Install

pip install coolmapmaker

Or directly from GitHub:

pip install git+https://github.com/sheepishlyroyal/coolmapmaker.git

Quick start

from coolmapmaker import Room, Dungeon

rooms = [
    Room(
        room_id     = "entrance",
        name        = "Cave Entrance",
        description = "Damp stone walls glisten in the torchlight.",
    ),
    Room(
        room_id     = "hall",
        name        = "Great Hall",
        description = "Pillars rise into darkness above a cracked mosaic floor.",
        width  = 2,
        height = 2,
    ),
]

Dungeon(rooms, start_room_id="entrance").run()

Controls: WASD or arrow keys to move. Q or Esc to quit.


Room parameters

Parameter Type Default Description
room_id str required Unique identifier used for start_room_id and exits
name str required Display name shown in narrative and status bar
description str required Atmospheric text shown on room entry
width int 1 Grid cells wide (1–4)
height int 1 Grid cells tall (1–3)
events list[str] [] Random atmospheric lines; falls back to engine defaults if empty
on_enter callable None on_enter(dungeon) called every time the player enters
entry_message str None Override the random "you step through…" line for this room
exits list[str] None Explicit list of room_ids this room connects to. Auto-connects by grid adjacency if None

Dungeon parameters

Parameter Type Default Description
rooms list[Room] required All rooms in the dungeon
start_room_id str random room_id of the starting room
entry_lines list[str] built-in Override the "you step through…" lines
event_lines list[str] built-in Override global atmospheric events
event_chance float 0.55 Probability an atmospheric event fires on entry

Custom logic with on_enter

def treasury_entered(dungeon):
    if dungeon.get_room("shrine")._visited:
        dungeon.print("The chest glows faintly — the idol's blessing.")
    else:
        dungeon.print("The chest is cold and empty.")

Room(
    room_id     = "treasury",
    name        = "Treasury",
    description = "Iron chests line the walls.",
    on_enter    = treasury_entered,
)

dungeon.print(text) appends a line to the narrative from inside a callback.

Minimap legend

Symbol Meaning
@ Your current position
. Visited room floor
# Open door (both rooms visited)
? Passage hint (one side visited)
Unexplored (fog of war)

Publishing your own dungeon

See example/example_game.py for a full working demo.

Requirements

  • Python 3.9+
  • pynput (installed automatically)
  • A proper terminal (not an IDE's embedded console)
  • macOS/Linux: no extra setup. Windows: pynput works natively.

License

MIT

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

coolmapmaker-0.1.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

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

coolmapmaker-0.1.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file coolmapmaker-0.1.0.tar.gz.

File metadata

  • Download URL: coolmapmaker-0.1.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coolmapmaker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1ccad6008b81647c575ec335b17714f9b745a97160bf3b68d1377c4261593397
MD5 14443b6dc9ce00fa3e6402841426dc7c
BLAKE2b-256 0d1b67c8dbec774862b0c3c75cf46f59ae9346a282c1406850ac48aacbf99581

See more details on using hashes here.

Provenance

The following attestation bundles were made for coolmapmaker-0.1.0.tar.gz:

Publisher: publish.yml on sheepishlyroyal/mapmaker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file coolmapmaker-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: coolmapmaker-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for coolmapmaker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 107fd94518a670549e8230738e182aa13e3541f3c3d312c10f9525078daee74d
MD5 e900aa7a768598778d1e02213d1c1f96
BLAKE2b-256 15af90248cd3faa16c487d0bf1ccaefa116b2225b41a1d7311a10462cb5bb3c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for coolmapmaker-0.1.0-py3-none-any.whl:

Publisher: publish.yml on sheepishlyroyal/mapmaker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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