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.6.tar.gz (11.7 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.6-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: coolmapmaker-0.1.6.tar.gz
  • Upload date:
  • Size: 11.7 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.6.tar.gz
Algorithm Hash digest
SHA256 e817726e24fc0369e02b53f5e04f852bcd100267f385f6b6cbf639d41a5c3f0f
MD5 33ed994ce319070cef81ce88920b1e19
BLAKE2b-256 c80c4e18df9bd465bc6d43414a0e6059c71c98060f0dc5d55feb2f8925d1d860

See more details on using hashes here.

Provenance

The following attestation bundles were made for coolmapmaker-0.1.6.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.6-py3-none-any.whl.

File metadata

  • Download URL: coolmapmaker-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 10.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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2f910fed958005ef5b371971aefa3e94515fafbb7f49e77a36ef852eef886404
MD5 b9219eb3e3b0e0d9f5d4c61a0f3f9fc6
BLAKE2b-256 74b1788309c86de03595aa6dae93f0f9088c663b8bd8162c522f98d07d69e084

See more details on using hashes here.

Provenance

The following attestation bundles were made for coolmapmaker-0.1.6-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