Long ago, I took an interest in Discord’s API and made a bot. It was a very simple one, using code copied off many different tutorials. It was capable of a few things, saying pong after you said ping, a math command that gave you 5 seconds to respond with the correct answer, a very simple but horrible text based RPG, and a fishing command (That didn’t save the items you caught.) It was mostly me experimenting a lot with user input and bot output, but it was a lot of fun. While the code was horribly optimized, it still did the job.
Well, as the bot’s name and icon would indicate, my next project was Realm of Discourse. This started taking things up a notch, being my first project using SQLite to store user data. This was once again, another text-based RPG, but came with a bit more depth to it. To find fights, a user would simply say “.fight”. This would then give the user a random monster depending on their level, and they could accept by saying yes, or not responding with anything. This came with a “.heal” and a “.mana” command, which would as stated, give mana and health. Also came without health or mana restrictions, allowing people to spam the command endlessly to ensure they never lost a fight.
Battles were also relatively boring, having access to only 3 spells as you leveled up. Fireball was useless once you learned Crackle. Drain became a better .heal late game. That was the only spells available. These spells also made the basic attacks essentially useless, since mana didn’t have a cap. In order to progress further, players were also given a shop to buy items to gain attack, health, and mana. Did I also forget to mention attack was not capped either? This would leave a game that was horribly unbalanced, but honestly a decently fun time sink. It was nothing serious, and I learned quite a bit about design and balance using it.
As a small project, I also made a Fishing Bot to try to figure out inventories. This was a bot that actually stored your items when you fished them up, rather than the only value being the text on a screen. A problem I ran into while making inventories was actually locating the items. The user could use the name, but then problems arose when you had two of the same named items. Discord also doesn’t have built in click API, so I decided to go with IDs. Every time an item was created, it’d assign the next available ID to that specific item. So if you had 3 items, IDs 1, 2, 3, the next item would be given ID 4. This lets users pick out specific items with ease.
So, I decided to try using Heroku to host my fishing bot for free, and to my surprise a problem arose. Heroku didn’t come with data storing, so every time someone would catch a fish, it’d reset their inventory within a few minutes. So Heroku was not really the best method to host my bot, to which I haven’t found the proper alternative yet. But besides that, I decided to move on to a bigger project.
This project was going to be YET ANOTHER TEXT-BASED RPG, but with more RPG themes to it. I started off with classes, each having unique stats, passives, and abilities. This on it’s own gave a lot of depth to the game, each class having a unique play style compared to the others. And rather than having options in fight like, “Attack | Defend | Run”. I just made it so on your turn, you cast any ability you want. Each class having their unique default attack, Cross Bolt, Magic Bolt, and Shock Bolt.
The most difficult thing was programming every single passive and active for each class up to level 50. This was difficult design wise and coding wise. There was a lot to consider for each class, ensuring I was fitting their play style and overall design. Arcanists are spell-flingers, so they have passives like Mana Pool to keep up with their spells and Dual Cast to apply more damage. Engineers are tanks, so they come with an arsenal of abilities to keep their turrets alive while providing some damage in the back line. Scientists are crazy, more of an experimental class having abilities like Time Warp which reverts their stats after 2 turns.
To increase the difficulty of the game, I included “Skill Tests” to each class and their abilities. Some abilities will cast instantly the moment you activate it, but other abilities will come with a question according to your class. Arcanists have to repeat the chants given to them, Engineers have to solve math problems, and Scientists have to solve a simple test. This gave abilities more depth to work with, while also making it feel a little less repetitive when you cast an ability for the 500th time.
I wanted to try utilizing Discord more as an application, so I integrated a role system into the game as well. Depending on the region you were in, you’d get a role to lock you into that area. So if you were in Slimy Slopes, you’d gain access to the Slimy Slopes chat, but not any other region. To travel around, the user would just need to type +travel [Name] to gain access to that area.
I also added in a random events feature. So unlike Realm of Discourse where you’d immediately get a battle every time when you type in .fight, I made the command +explore. This would make it so not only would you have random encounters to battle, but you’d also have random events occur. Sometimes you’d find a legendary item. Sometimes you’d accidentally crush a slime. This, once again, made the game feel a little less repetitive, giving silly random prompts as you explored the area.
I also included a fancy stats page into the game! It came with your stats, balance, equipment, location, and skills. The game felt more like an RPG unlike Realm of Discourse, and it came with a lot more depth due to the skill system, classes, and equipments.
What started as a curiosity for Discord API turned out to be the start of development for a game. It had all started as a basic dungeon command with one battle, to a game with saved stats, levels, and unique battles, to Discord Delta, with shops, forging, equipment, skills, classes, and exploration. I still work on the bot to this day, constantly improving the UI, code, and overall game. Is the game perfect? Definitely not. Is it an improvement from my previous dungeon command? Most certainly.