Recreating Mudae’s Database (and how I optimised disable lists) (2024)

LilJamJam

·

Follow

6 min read

·

Jun 27, 2022

--

Mudae is a bot within Discord which mainly focuses on games and anime. The biggest feature of Mudae is its waifuroulette game, where users can claim characters from a range of anime, manga, comics or games. To say that Mudae is popular is an understatement, over 2.3 million servers have the bot as of September 2021 and it routinely places strain on Discord’s API services.

When a player claims a character, they become part of the player’s harem and cannot be claimed by anyone else in the server. Naturally, this leads to some stiff competition for the more popular characters. The gacha game also comes with its own currency system, where players can earn virtual currency to use for power ups or trading. There exists dozens of other commands which cover leaderboards, lookups and customisation.

When a user looks up a specific character, they can find several fields of information about the character, including the series, gender, roulette, kakera value, claim rank, likes rank and possible aliases. This is true for every character, but there is no easy way to search up every character or every series. Mudae’s database is not public, so there is no way to get all of the information available. Or is there?

Recreating Mudae’s Database (and how I optimised disable lists) (2)

That’s where I come in. Long story short, I attempted to recreate Mudae’s database. I have information on characters, series, bundles and the relationships between them. Back in 2020, I initially started this with the top 1000 characters using $top and then storing the results. I made gradual improvements and methods over the past year, so now I have information on almost every facet of Mudae’s database.

The database consists of several tables. The character table contains the information of all 80,789 characters in the bot. Each character comes with its own character ID, along with other fields like their name, series, gender, roll type, claim and like ranks, and their kakera value.

Recreating Mudae’s Database (and how I optimised disable lists) (3)

The list of series is covered in a separate table. Each series also comes with its own ID, and covers their character counts in all roulettes. There are over 13,000 series in this table. There is also a separate table for bundles, also with their own IDs. All the counts for each roulette are also shown as well. A separate table covers the connections between bundles and series in a many-to-many relationship. Over 50,000 records exist in this table.

Recreating Mudae’s Database (and how I optimised disable lists) (4)
Recreating Mudae’s Database (and how I optimised disable lists) (5)
Recreating Mudae’s Database (and how I optimised disable lists) (6)

I’ve implemented some extra features in this database, one of which is server tracking. It’s possible to track the status of every character in a particular server, such as their claim status, whether they belong to you and how many keys (or soulkeys) they have. I can also track all of my current soulmates in the same table. This makes it possible to track unclaimed and unsouled characters, and keep track of all characters across any server I’d like.

Recreating Mudae’s Database (and how I optimised disable lists) (7)

Another feature is the search function. You can search for any character and have their information displayed instantly as well as display any close matches. You can also search for series and bundles, which will contain the information of every character in the series or bundle. I can also search for multiple series and characters at once, allowing for fast viewing and editing.

Recreating Mudae’s Database (and how I optimised disable lists) (8)
Recreating Mudae’s Database (and how I optimised disable lists) (9)

But the most powerful use of this database is for disable lists. By using all three tables and some queries, I’m able to disable any bundle and series that I want, and display the updated roulette numbers of all series and bundles without the disabled series. This makes it possible to disable lists to be optimised.

Now this table shows all bundles and how much $wa’s are in them. Let’s say I want to disable the Western and IRL bundles. After inputting them in the exclusion list, all Western and IRL series have been disabled, and the $wa’s have been updated for all the bundles. This enables me to select the best bundles while accounting for overlap, and as a result of this process I ended up making better disable lists than anyone else. For a while I wondered whether this process could be automated so I could find the optimal disable list.

Recreating Mudae’s Database (and how I optimised disable lists) (10)

Earlier this year I came across a GitHub repository by Stephen Huan, where he dives into the statistical models behind Mudae. It’s a fantastic write-up if you’re not daunted by the maths behind it, but my focus was on his section about producing optimal disable lists.

The disable list problem is analogous to the 0/1 knapsack problem encountered in optimisation. By reducing the disable list problem into a integer linear programming (ILP) one, Huan was able to utilise ILP solvers that could solve the corresponding knapsack problem and therefore produce an optimised disable list. He also provided his own Python code to demonstrate this concept with a version of Mudae’s database (albeit a very old version).

Recreating Mudae’s Database (and how I optimised disable lists) (11)

So all I had to do was to repurpose the code so that it could work for my own database. It took a while to accomplish; I had to both change my database into a form that the code could recognise and change the code itself to also compensate for the new data and constraints.

The results were startling. Now I’m able to create optimal disable lists for any roulette, with any overlap size and any amount of slots. What used to take hours to learn and craft disable lists now only takes a few minutes. It only works as long as my database remains updated, however. So new updates and bundles could shake things up.

In the below example I made the program output an optimal 25k disable list for $wa, with 50 slots and with Western and IRL completely disabled via toggles.

Recreating Mudae’s Database (and how I optimised disable lists) (12)
Recreating Mudae’s Database (and how I optimised disable lists) (13)

Firstly, this database (along with the Python program) will NOT be made public. The bot developer Saya has allowed this project to stay up as long as it’s for a personal purpose. This article is just a demo to show that this database exists. A big thanks to Saya for advising me and for the continued development of the bot.

The data used in the database does not automatically update, it must be manually updated by me every time. I usually do this once a month because it’s a tedious process that can last over a day.

There may be some instances where I cannot show all of my findings due to the potential of sharing information that Saya doesn’t want to be public. Exceptions can be made on a case-by-case basis, however sharing general statistics and calculations are allowed.

Are there any features I could add to this database? Are there any stats or information that you’d like to see? You can reach me in Discord in the MudaScience server. Any interesting updates may be covered in a follow-up post, or in the MudaScience server. You can also support Mudae by subscribing to their premium service via Patreon.

Recreating Mudae’s Database (and how I optimised disable lists) (2024)

FAQs

What does disable list do in mudae? ›

A disable list is a list of series or bundles (bundles meaning animation studios or genres, that contain multiple series inside them, hence the name bundle) that are BLOCKED from your rolls, meaning you CANNOT roll them. When you disable characters, you remove them from your rolling pool.

How to disable Limroul Mudae? ›

Using the command $limroul, you can disable all but the most popular characters in each roulette based on their claim ranks.

Can you give unclaimed characters in Mudae? ›

$givecustom is the ONLY command for giving someone an unclaimed character. There is no way to give non-custom characters in this way.

How do I disable player premium in Mudae? ›

You can disable your player premium in specific servers or instances with $toggleplayerpremium. Patreon T2 role in Mudae's main server (role removed at the same time as your pledge)

How to disable western mudae? ›

It represents all Western animanga series in Mudae, but it does not cover games. It is the largest bundle in Mudae. It can be disabled completely with the personal command $togglewestern.

What is the difference between claim rank and like rank in Mudae? ›

Claim ranking is based on the first 10 characters in each active user's harem ($mm). Other characters in a user's harem are not counted. Users should use $sortmarry to put their ten favorite characters first. Like ranks are determined by the global number of likes for each character ($like).

What is the point of kakera Mudae? ›

Kakera are the currency used in Mudae. They look like little crystals of different colors, with each color usually representing a different value. Kakera can be used to get bonuses on Mudae, such as enhanced wishlists, enhanced rolling experience or the possibility to get cosmetic badges.

Top Articles
Latest Posts
Article information

Author: Patricia Veum II

Last Updated:

Views: 6233

Rating: 4.3 / 5 (64 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Patricia Veum II

Birthday: 1994-12-16

Address: 2064 Little Summit, Goldieton, MS 97651-0862

Phone: +6873952696715

Job: Principal Officer

Hobby: Rafting, Cabaret, Candle making, Jigsaw puzzles, Inline skating, Magic, Graffiti

Introduction: My name is Patricia Veum II, I am a vast, combative, smiling, famous, inexpensive, zealous, sparkling person who loves writing and wants to share my knowledge and understanding with you.