Dungeon Master in Python
Posted: Sun Jul 05, 2026 9:51 pm
The last couple of month.. years(?).. i used the ReDMCSB Source for the Amiga V3.6 and ported all to python. The project is called PyDm.
As you can see from the Source Code, the comments will reference the apropiate C Code, for people to check why something is done like its done:
i included a module : Automap. this checks the world in the space of 3x3 around the char and saves it. Teleporters "invisible" are not shown (So you dont get spoiled). Its a kind of: Convenient Method, instead of you maybe did 30 years ago with pen and paper
I used also the hand icon from the Amiga Version and the Yellow Pointer, which are data fields in the source
All creatures are living in the dungeon like the original.
Here a short demo video of the port with the appearance GODMOG my debug Character 
https://youtu.be/XU9nbs-FwZk
I divided the code into 2 Parts:
Renderer -> PyDM
World -> Basilisk Engine
I will upload the whole source in the next couple of days to my codeberg repository. And also create a Webasm Version and upload it to a website.
Oh, i use my own DMCSB Python module to extract graphics.dat/dungeon.dat, you need to supply it at the assets dir later. Maybe i will write a small "own" format to not get any problems with copyright of a nearly 40 year old game graphics
What else is needed:
pygame-ce
numpy
Will keep you updated.
As you can see from the Source Code, the comments will reference the apropiate C Code, for people to check why something is done like its done:
Code: Select all
def perform_action(champ: Champion, action: Action, has_target: bool, rng: random.Random,
difficulty: int = 1, xp_override: int | None = None) -> str | None:
"""Apply an action's cost to the champion (the F0407 tail, MENU.C:1233-1243) and
grant its skill experience. Returns the base-skill name if the champion gained a
level (for the caller to announce), else ``None``.
With nothing in front to hit (``has_target`` False) it's the "miss" path: the
cooldown and experience are halved (MENU.C:1045-1052) but still applied. Either way
the action is consumed — cooldown set, stamina decremented, (partial) XP granted.
``difficulty`` is the current map's XP multiplier (F0304). ``xp_override`` supplies a
dynamic experience amount (the HEAL action's ``2 + 2*cycles``) that replaces the table
value and is never halved."""https://youtu.be/XU9nbs-FwZk
I divided the code into 2 Parts:
Renderer -> PyDM
World -> Basilisk Engine
I will upload the whole source in the next couple of days to my codeberg repository. And also create a Webasm Version and upload it to a website.
Oh, i use my own DMCSB Python module to extract graphics.dat/dungeon.dat, you need to supply it at the assets dir later. Maybe i will write a small "own" format to not get any problems with copyright of a nearly 40 year old game graphics
What else is needed:
pygame-ce
numpy
Will keep you updated.