Draconic Ghoul: Rise back from the dead

Backstory

Codex Fragment — Rebinding Verse, Page 491

He who rises from the earth must carry its weight.

Power returned is never whole.

Beware of the answers you get when you call back the dead.

The dungeon pulsed above him. 

Not a heartbeat, more like a hum

Rhythmic. Deep. Alive.

He woke in the dark. 

His lungs remembered how to draw air.

No breath. Just pain.

A stabbing pain bloomed in the chest.

His body felt different. 

Oozing with a hideous energy.

He tried to move. 

And somehow surged up out of the dirt.

He realized the change was more than in his head.

Horns on his forehead.

Claws where there once were nails.

Scales where there once were robes.

A sage once known. 

Now… a Ghoul.

This is where it begins.

What is Draconic Ghoul?

This project has many faces. 

  • A grim multi-user dungeon (MUD) inspired world,
  • An attempt to build a real-time system using Elixir and Phoenix LiveView from scratch,
  • An outlet for creative writing in a dark epic-fantasy universe,
  • A love letter to games and book series such as Dark SoulsElden Ring, The Stormlight Archives, The Lightbringer many more.

In this world, you’ll play as the Ghoul:

  • Exploring procedurally generated dungeon rooms,
  • Battling enemies and looting artifacts,
  • Sometimes alone, sometimes in a party of up to 5,
  • Occasionally trying to kill the Drake.

But this isn’t just about game mechanics.

It’s about answering questions that show up in every system that dares to scale:

  • What happens when 1,000 players connect at once?
  • What if someone in the raid disconnects in the middle of combat?
  • What if someone tries to cheat?

Whether you’re a game developer, a backend engineer, or an Elixir learner looking to move beyond cloning one more app, I hope this serves you well.

One Step at a Time

The most important thing to keep in mind is simplicity. Trying to approach the systems as if we had a massive scale. And that’d also result in slower iterations than I’d prefer. 

We will not build for 100K sessions on day one. Instead of trying to overengineer, we’ll be striving for something good enough as a baseline. From there, measure and observe how the system responds to a bigger scale. Decisions about advancing the game and the system will be driven by the data we observe and collect.

We’ll start with simple, readable code that:

  • Handles player sessions locally
  • Uses in-memory registries and GenServers
  • Tracks only the essentials: presence, input, world state

As we embark on this journey, I want to leave here a quote from a book I find myself reading at least once a year, Think Like a Rocket Scientist.

All progress in rocket science, movies, and your fill-in-the-blank enterprise takes place in dark rooms. Yet, most of us are afraid of the dark. Panic begins to set in the moment we abandon the comfort of light. We fill the dark room with our worst fears, stockpiled goods waiting for the apocalypse to arrive. 

But uncertainty rarely produces a mushroom cloud. Uncertainty is the joy, the discovery, and the fulfillment of your full potential. Uncertainty means doing things no one has done before and discovering things that, for at least a brief moment, no other person has seen. Life offers more of itself when we treat uncertainty as a friend, not a foe.

Closing Notes

I have a vision of what Draconic Ghoul will look and feel like based on the universe I started building in Beware of DragonsThe vision remains fluid and intended to evolve.

This project serves as a playground for ideas, encompassing technical, narrative, and systemic aspects. My goal is to build something deeply interactive, meaningful to me, and creatively liberating. And through it, become a more grounded engineer, problem-solver, and storyteller.

Next time, we’ll start the project not with feature design or implementation. We’ll tackle just enough infrastructure, observability, and developer experience to move the project forward quickly.

Leave a comment