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.2.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.2-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: coolmapmaker-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 f11804fc5d7a068849c77a0b6aa70d8fa56e862092fd36b4c2fa0c4bb04973c6
MD5 d59296f6346a8d3908bba6a26599f431
BLAKE2b-256 02e31bc7b0dfb02f80046adff9bb0e75f04f35d206b19f6d8b4ec50dfd6738fc

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: coolmapmaker-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 69a4046ff6b89e02103abc932f5ed60b27c870ae3311329afd99e809746973d1
MD5 b2f5471ceb4ad73aec28568593d30a2c
BLAKE2b-256 ac0842bc2bfb3148f74363d362af792270b7eb440380bcd0fe52668b23a628ee

See more details on using hashes here.

Provenance

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