I set out with the plan to make a game that I could play with my friends and enjoy seeing them grow. The Rider is a Discord RPG bot that allows a server to take on enemies and progress together.
I always wanted to make a multiplayer game and a game where you have chance-based rewards such as Vampire Survivors or Gatcha games. I was inspired by the Discord bot Mudae which allows you to roll for characters from almost anything including real-life people of note. This trading card game had me locked in trying to get my favorite dragon ball or cookie run characters. It also has a completely separate game called Poke-Roll in which every 2 hours you can run a slot machine that gives you Pokemon based on their rarity. These two games in conjunction had me in a chokehold. And that’s when I realized, I can satisfy both of my wants by creating my own Discord bot, and that’s what I did with The Rider.
A study into the difficulties of multiplayer games and the addictive nature of chance based rewards was a major focus when designing The Rider. I believe I was successful in creating a game loop that appeals to many people, as I had my friends who don’t play many games or use Discord, who often come back every 15 minutes to fight.
Enough about why I made it, let’s get into what I made.
$roll
Syntax: $roll
The first thing you must do when using this bot, rolling gives you a weapon based on the rarity of weapons available in the pool. Initially, you are only able to get common(🤍) weapons. When your server defeats the newest enemy, the next level of weapons is unlocked, each with a reduced chance of dropping.

Once you have a weapon, rolling when it is fully enhanced will upgrade it to the next level. If it is not fully enhanced, one pip will be added to the weapon’s enhancement. Any fully enhanced weapons will be added to the $roll pool so that 50% of the time a fully enhanced weapon is chosen. This 50% is split between all fully enhanced weapons in your inventory. This means, that if you are trying to get a new weapon, fully enhancing current weapons will lower your chance of rolling anything else.
Rolling is the main feature you will use, and it becomes available every hour on the hour, allowing you to $roll anytime during that hour. No need to remember the last time you rolled. Personally, this always made me more anxious, but knowing that I can hop in any time during the hour makes me feel less obligated to always have my phone on me.
$equip
Syntax: $equip <Weapon Name>
The next task will be for you to $equip the weapon you have rolled. This is a very simple command that changes the weapon you currently are using, nothing more to it.
As a fun fact of trivia, this command was able to break the game, if you started an attack with a weapon with high combo, then $equip a weapon with high damage and crit, the weapon will attack many times with a strong damage stat. This has since been patched but was a clever use of this command.
$stats
Syntax: $stats <Weapon Name>
To see the stats of any weapon currently available to a server. Weapon stats are broken down as follows:
Name: The name of weapon
Rarity: The rarity of the weapon denoted by a colored heart
Damage: The base damage a weapon will do at lvl 0
Crit Chance: The chance for a weapons damage to multiplied by 2
Crit Max: How many times a weapon can Crit in one attack
Combo Chance: The chance for a weapon to follow up with another attack after this one
Combo Max: How many times a weapon can follow up in one $fight command
If a player tries to see a weapon that exists in the game but the server does not have access to yet, the command will fail.

$baddies
Syntax: $baddies
This command allows you to see what baddies are currently available, how much health they have, and how many players are fighting it right now. This command also pops up when using the $fight command while not having an enemy selected.

$fight
Syntax: $fight [Baddie Name]
$fight is the most used command in the game, allowing you to attack a chosen enemy every 15 min. To start, choose an enemy by using $fight [Baddie] and then $fight again to attack the enemy. This command can also be shortened to $f as it is used frequently enough.

Now, onto my favorite part, the math. Damage calculations are:
(Damage * (Level+1) * Crit) + Players fighting
This calculation is done every time for an attack including combos. Crit is determined by rolling against the Crit Chance and if it successfully Crits, it checks again until it reaches the Crit Max or fails to Crit again. This leads to a potential exponential growth in damage but is less likely to happen than a few crits occurring. An example of tradeoffs for this can be seen in comparing the stats of the common weapons Spear and Knife. Spear has a 45% chance of Critting but maxes out at 5 Crits, on the other hand, Knife only has a 20% chance of Critting but can Crit 10 times. This means however less likely, the Knife has a higher damage ceiling of 2^10(1024) compared to the Spears 2^5(32). But the Knife only has a .00001024% chance of landing this attack while the Spear has a .032% chance assuming the random distribution is equal. In the future, I would love to do a statistics breakdown of each weapon and determine their average damage.
These chances are rolled every time an attack happens, and as a result, weapons with higher combo chances and combo max, will create room for those rare crit chances to happen!
Any damage done is saved in the enemy as gold that will pay out once the baddie is defeated. This calculation is currently 5 *(damage *2 + ((baddies index +1) * 1.5)) for how much gold is added with each attack. ((baddies index +1) * 1.5) This allows players with low damage output the chance to get more gold attacking higher ranking enemies.
This gold is paid out to all players currently fighting that enemy when it is defeated. A running counter is kept for the duration of the fight. If you decide to switch baddies before it is defeated, any gold accumulated will be lost, so be careful in where you decide to put your time.
$buy
Syntax: $buy [Weapon name] [Amount]

Once someone has defeated the enemy that you are fighting, you will be awarded gold. Using $buy will allow you to enhance your weapon with pips and once its fully enhanced, if you $roll it then it will be upgraded and do more damage. Every rarity of weapon is denoted by a different color heart (🤍💛💜💗(❤️🔥)) and each subsequent rarity has 5 additional pips. A Knife(🤍) would be fully enhanced at 5 pips (🤍🤍🤍🤍🤍) but a Sword(💛) would be fully enhanced at 10 pips (💛💛💛💛💛). This also allows for intermediate stages like a Sword with 7 pips(💛💛🤍🤍🤍). To balance the amount of gold in the game, the buying calculation is a bit complicated:
((weapon level +1)^(1.4 + ((weapon rarity + 1)9))) * number bought * 3
This breaks down to each purchase being exponentially more the higher rarity of the weapon. Lets take the example of the Knife and Sword. To fully upgrade a level 1 Knife would cost 43 gold while a level 1 sword would cost 92 gold. This gap will only continue to grow as the level increases!
$weapons
Syntax: $weapons <@Player>
To view your inventory, you can use $weapons. This will show your gold, weapons, weapon levels and pips, and damage done with each weapon. You can also check on your friends stats by using $weapons <@playername>. A simple but extremely useful command to keep tabs on your progress.

$tut
Syntax: $tut
A Discord bot has a lot of commands and can be had to follow, I implemented a tutorial that prompts you as you play. When completing tasks, a tutorial will periodically pop up letting you know what your next step should be. If you for get your place you can always use $tut to find what you should be doing.
$support
Syntax: $support
This command can be interpreted in both needing support and giving support. All it does is link to the support server if you need help as well as my Ko-fi if you like the bot enough to support me!
$vote
Syntax: $vote
This command links to my bots top.gg page where you can leave me a review and vote every 12 hours! I will be implementing new features and voting here will bank gem rolls.
Leave a comment