--:--:-- UTC LINK ONLINE BACK TO TIMELINE
PROJECT DOSSIER
2019

MoD

Creator + lead — senior capstone, built by a six-person team

A framework bot that runs hand-crafted text-adventure worlds (MUDs) inside Discord, with cross-server shared game state.

discordgamessystemsleadership Node.jsdiscord.jsServerlessDocker
PROBLEM
MUDs — multiplayer text adventures — normally need their own server and a telnet client, an insecure and technical barrier that dissuades modern users. There was no easy way to run one where the social layer (and the auth) already lived: Discord. And no reusable skeleton for authoring new worlds rather than rebuilding the engine each time.
APPROACH
Build the bot as a reusable engine — 'a skeleton on which to drape the flesh of world-building' — that loads hand-crafted game modules and simulates a terminal-style environment over Discord. Lean on Discord itself as the secure client: its HTTPS / 2FA / IP-locked account system means there's no login system to build. Persist per-player state in a non-relational database (DynamoDB) keyed by user, so the same world can be entered from different servers while keeping each player's session private, and run it on AWS EC2.
EXECUTION

MoD was something I had been stewing on for a while in my final year of undergrad. In high school I had dabbled with MUDs like Achaea, and more single-player webbish text games like Syrth. I was also familiar with Nethack. At the time I was re-visiting those designs and motifs via a game by Lena Raine's (under her Radical Dreamland studio), ESC.

In the college I was in, seniors did capstone projects. The default option was to pick a project from a pile and join a group. The pile was made by companies submitting projects to the school, with a handful of professor projects too.

From the outset, I thought that'd be super lame. So I took the alt path: I spent time with my mentor prof writing up a 3-page project proposal. At the time I was also working ~25 hrs a week doing fullstack for a local web dev company. I had gotten a decent handle on React, and had started dabbling with Discord bots via the Node and Python libs. The plan went through several iterations. I have included here the final proposal doc, along with the rest of the docs we used to track project progress. Looking back I feel a bit of pride.

Anyways, so the way student projects work is that they're submitted to a roundtable where a majority of professors and interested parties have to okay the plan. Mine went through fine. The next 6 months were a lot of learning to help team members. I assisted with tool use learning, and even had 1:1 sessions for some group members who struggled to get through their tasks. This was a formative experience.

We went through a few alterations of the architecture, but by the end of things, we had a fully working, modular MUD system. As basic as it was, it was kinda damn cool. You could sign up by being in a server with the bot that was the external bridge to the internal node server. From there, you could use your DM with the bot as a pseudo-CLI. This was prior to a lot of major Discord bot changes, and so we had to make a lot more tiny decisions around things like, what's the invocation prefix token? We used different ones throughout the process; I think the final iteration dropped them altogether. I figured out you could model an NPC dialogue tree as a state machine, and made a hacky system where item effects used eval() on database-stored scripts. I've attached a few pictures of the working system.

It was a lot of fun, and I've been considering revisiting it to make the combat more emoji oriented (emojis can be read by Discord bots, effectively buttons).

OUTCOME
My senior capstone — the idea and submission doc were mine, greenlit by a roundtable of 12 professors in Louisiana Tech's Computer Science department, then built out with a six-person senior-project team. A working MUD framework + demo dungeon, runnable as a hosted Discord bot; the most-starred of my public projects. (Hosted instance has since lapsed as I moved to other work.)
GALLERY
LINKS