Skip to content
/ md-mods Public

Quality of life mods for the hit video game Muse Dash

License

Notifications You must be signed in to change notification settings

bnfour/md-mods

Repository files navigation

Unofficial quality of life modifications for the PC version of the hit video game Muse Dash using MelonLoader.

Disclaimers

  • These mods are unofficial and are not associated with, related to, and/or endorsed by peropero, hasuhasu, and/or XD.
  • USE AT YOUR OWN RISK. NO WARRANTIES.
  • Please read FAQ and have a look at known issues.

Mod list

Currently, this repo contains four mods: two are scoreboard related, another one enhances song select screen, and the last one provides more info about the selected song. They can be used together.

  • Scoreboard characters — shows character/elfin info on the scoreboard
  • True rank — changes "999+" in the scoreboard to an actual rank
  • Album scroll — enables to scroll through current album using Shift keys
  • Song info — shows song's BPM and duration

Scoreboard characters

Mod file: ScoreboardCharacters.dll, also requires UserLibs DLLs

This mod adds buttons to show character and elfin used to obtain the score to the in-game scoreboard:

image simulated for variety, real scoreboards are pretty boring most of the time; see ScoreboardCharacters/etc/randomizer-for-screenshots.patch

These buttons can be clicked, and will set your current character and elfin to these on the button. It will even scroll the selection screens for you.

Image override (advanced)

If you don't like the provided default images on the buttons or the way they are scaled on your screen resolution, an override spritesheet can be provided to the mod to display.

Note

The overriding is designed to not apply any scaling to the images, and the sprites will be placed to the buttons as is.

Image preparation

A good way to start with an override is to use the default spritesheet for your resolution as a template. The defaults are located in ScoreboardCharacters/Resources folder. There's also a bigger source and/or reference image in ScoreboardCharacters/etc.

If there is no default image for your desired resolution, the source/reference can be scaled to form a template. The rest of this section describes the requirements the override image must meet; see "Image override" for the way to enable the override image.

Sprite size

First, pick a size for individual sprites. It's best to use the size that matches the button size for your screen resolution. As a baseline, 〇×1080 resolution uses 40 px sprites. Scale this for your resolution.

For example, 2560×1440 screen size will work best with
40 × 1440 / 1080 = 53 px
sprite size.

Spritesheet resolution

The spritesheet must have 8 sprites (5 characters, 3 elfins) per row -- its width should be 8 times the width of a single sprite. The height must also be divisible by the sprite size, as the sprites are square.
There should be enough rows to cover all existing characters and elfins; for now, an 8×8 grid will suffice, as shown by default spritesheets.

Continuing the example, the size of custom spritesheet for 2560×1440 should be:

  • width: 8 × 53 = 424 px
  • height: 8 × 53 = 424 px
Sprites placement

Use the reference image to place the sprites on the spritesheet. The sprites with numbers on them are placeholders for possible future updates, it's not mandatory to fill them in an override.

Image override

To apply the override, place your custom spritesheet as scoreboard_characters_override.png to MuseDash_Data directory of the game install. You'll see a warning in the console if its dimensions differ from expected values. If you don't see your custom images in the game and there's nothing in the console, double-check the file name and location.

True rank

Mod file: TrueAbove1kRank.dll

This small mod changes mysterious "999+" text in your own scoreboard entry to your actual rank if it lies within 1000–2000 range:

Before After
simulated image, no (you)s were harmed during production simulated image, no (you)s were harmed during production

Note

The game servers only track top 2000 entries. If you score less, there's nothing this mod can do.

Album scroll

Mod file: AlbumScroll.dll

This mod adds an option to quickly scroll to the next album in the song selection menu. Just hold Shift key while scrolling (A/D, ←/→, mouse wheel, on-screen buttons — works with all of these). This will scroll to the closest song from a different album.

Here's a little demo of switching entire albums by single Shift+Arrow key taps:

albumscroll_demo_480.mp4

Tip

It's best to use single taps to scroll albums.

This mod does not play well with "hold to scroll" feature. It might skip an album if a direction key is held long enough to trigger continuous scrolling mode.

Song info

Mod file: SongInfo.dll

This mod adds song's BPM and duration display to the song info screen:

State Illustration
Before can't think of a caption right now >_<
After* the new data is supposed to be symmetrical with the level designer label

Note

The duration is approximate (defined as "the duration of the actual music file used") and does not include the "Music-Ready-Go!" intro. The "Full combo" outro seems to be included though.

Cache (ab)use (advanced; also useless)

This mod uses an external file to store the lengths of the songs obtained locally from the game data. This happens when new songs are added to the game and the mod's built in database becomes outdated. Usually, direct access to game data is avoided because it's a slow operation that slightly lags the game. When song's length is acquired locally, it's cached in an external file.

The file, song_info_override.json, is stored in MuseDash_Data directory of the game install. If there are no overrides to store, the file will not be present.

After a mod update, the gathered overrides are automatically removed from the file if they match with the updated default data. The file itself is removed if no overrides remain.

However, the mod currently does not remove overrides that do not match its own data. Therefore, it's possible to store arbitrary strings in there to be displayed instead of a song's length.

The file itself is a simple string to string JSON dictionary:

  • the key is a song's so called uid; a string in {album id}-{song id} format
  • the value is the string to display; supposed to be the song length

For instance, if the cache file contains

{
  "8-1": "O-oooooooooo AAAAE-A-A-I-A-U- JO-oooooooooooo AAE-O-A-A-U-U-A- E-eee-ee-eee AAAAE-A-E-I-E-A-JO-ooo-oo-oo-oo EEEEO-A-AAA-AAAA"
}

the data for Brain Power will look like this:

the full gif is larger than the entire repo, and the low-res video will also probably look bad stretched, so this will have to do

Yes, the field is set up for scrolling longer strings ¯\_(ツ)_/¯.

To revert to the default display, just remove the entry from the overrides file, ot the file itself.

Warning

If song_info_override.json does not contain valid JSON in expected format, it might get deleted.

Experimental mod

This is not a mod intended for using. Rather, it's a developmental test bed for me to test random stuff without disruption to existing proper mods. For instance, Album scroll mod was first implemented (in a very scuffed way; no, I won't show the code ⇀‸↼‶) here and then moved to its own permanent project.

The project contains the bare minimum for a mod that is successfully loaded; it does nothing except posting a single message in the log.

Installation

These are MelonLoader mods. In order to run these, you need to have it installed. Currently, 0.6.1 Open-Beta of MelonLoader is supported.
Once you have MelonLoader installed, drop the DLLs of desired mods into the Mods folder. Remove to uninstall.

Note

Scoreboard characters mod also requires SkiaSharp libraries to be placed in UserLibs folder. These libraries are included in the download.

Rather than downloading the mods, I suggest (reviewing the source and) building them yourself — this way you'll be sure the mods behave as described. See "Building from source".
Otherwise, please verify the downloads.

Verification

Every published release is accompanied with SHA256 hashes of every DLL. MelonLoader does print these in console when loading mods, but I suggest to verify the hashes before installation.

Frequently Asked Questions

(or, more accurately, "I thought you may want to know this")

Is this cheating?

tl;dr: no

The scoreboard mods show the information the game already receives directly from its API, it's just not shown anywhere by default. You can already get this info, for instance, from musedash.moe scoreboard. In fact, this repo is born from my frustration of having to mirror my track selection in-game to the website on another display. The Album scroll mod only affects the song selection menu. The Song info mod is simply displaying the data from game, too.
The mods provide no advantage for the actual gameplay, only some convinence in preparation stage. You still have to git gud to earn high scores; you just know what character to pick and where exactly on the scoreboard you are.

Unless you count any changes to the game for any purpose as cheating, this is not cheating.

Will I get banned for using these?

tl;dr: probably not, but NO WARRANTIES; USE AT YOUR OWN RISK

As I stated in previous question, I don't believe this is cheating. I've been using these continiously, and my account is still there. But there's a reason for the all-caps section of the license about having no warranties: the devs might think otherwise or break the compatibility (un)intentionally.

Remember that you're using the mods at your own risk. I have warned you many times in this readme.

I have other mods. What about compatibility with them?

tl;dr: ¯\_(ツ)_/¯

The mods are pretty much self-contained, so I think ("think" being the operative word here) they will work with other mods, unless those other mods change the vanilla code too much.

My game is broken because of you and your mods, how can I fix this and blame you?

tl;dr: uninstall, and remember: NO WARRANTIES

If you just want to play the game, removing the mods (and maybe the modloader itself) is always an option.

  • Please make sure you're using supported (0.6.1) version of MelonLoader.
  • Try to remove mods not from this repo.
  • Try to remove mods and/or modloader and check whether the vanilla game is broken too.

If none of these helps, feel free to submit an issue, unless the problem was already reported.

Building from source

This repo is a run-of-the-mill .NET solution targeting .NET 6.

The only gotcha is that some libraries required to build it are not included because of file size (and licensing) issues. Your installation of MelonLoader will generate them for you.

Copy everything from MelonLoader/Managed, MelonLoader/Il2CppAssemblies, and MelonLoader/net6 folders from the game install to the references folder of this repo. All the DLLs should be directly in the references folder, no subfolders.

This should cover the local references for all the projects. (Actually, most of the DLLs are not necessary to build the solution, I just don't plan on keeping an accurate and up to date list of required libraries.)

After that, just run dotnet build.

Enabling SkiaSharp for Scoreboard characters

Scoreboard characters mod uses SkiaSharp library (GitHub, main package NuGet, used native libs NuGet) for image editing. Its DLLs (SkiaSharp.dll, libSkiaSharp.dll) should be placed in UserLibs folder of the modded game install. SkiaSharp is MIT-licensed, and I include these in downloads for convenience.

If you want to get these straight from NuGet instead, you can use dotnet publish command:

dotnet publish -c Release -r win-x64 --no-self-contained ScoreboardCharacters/ScoreboardCharacters.csproj

The SkiaSharp DLLs will be in ScoreboardCharacters/bin/Release/net6.0/win-x64/publish folder.

Why win-x64 runtime? There is no native Muse Dash version for GNU/Linux, and I run the game via Proton, so the Windows binaries should work on both Windows and GNU/Linux for the time being. Mac? No idea.

You can also extract the DLLs from the nupkg files manually. Remember to look for net6.0 and win-x64 monikers.