Introduction
Welcome to the Rhythm Heaven Groove Modding Docs! This resource contains info on the inner workings of Rhythm Heaven Groove. It can be used to study game functionality, or as reference to install or create your own mods.
Important
These docs are very early in devlopment. Information may be missing or potentially inaccurate, and will change over time as more about the game is learned and more tools are developed.
Caution
Command names are currently temporary, as there is no framework for cue modding. As that is developed, command names will be updated to reflect their usage in the cue modding tools.
If you’re interested in installing mods, check out the Installing Mods category.
If you’re interested in creating mods, check out the Creating Mods category.
Replacing Assets
Currently, with a few non-standard exceptions, the only mods available for Rhythm Heaven Groove are those that replace various assets in the game. These include text, graphics, audio, and tempo files. This guide will show how to install these mods to replace assets in your game.
Important
Right now, there is no proper modloader for Rhythm Heaven Groove. As such, this guide will use RomFS patching provided by Atmosphere or your emulator of choice. In the future, it will be updated with whatever system is developed.
File Structure
RomFS patching requires replaced files to be in exactly the same location as they would be in the original game. A proper folder structure is critical!
First, you’ll need a folder to tell Atmosphere or your emulator to load replaced assets for the game.
Rhythm Heaven Groove’s TitleID is 0100D9F01D474000.
If you are using a modded Switch:
- Create a folder titled
0100D9F01D474000inside/atmosphere/contents/ - Create another folder inside of that titled
romfs
If you are using an emulator:
- Find the mods folder for your game. You may be able to right-click the game in the list and select “Open Mods Location” or something similar.
- Ensure that the folder’s name matches
0100D9F01D474000.
- Ensure that the folder’s name matches
- Inside the folder, create a new folder titled the name of your mod. This can be anything!
- Inside the newly-created mod folder, create one last folder titled
romfs.
Some emulators may have a feature to export the game’s RomFS folder structure. This can be very helpful!
- Right-click the game in the list and select “Dump RomFS” (or something similar)
- If it asks to choose which RomFS to dump, select “Program”
- Select “Skeleton” when it asks for the type of RomFS dump.
- After the dump completes, it should open in a new window.
- You can copy the dumped folders into the mod location you created earlier, inside the
romfsfolder.
These folders don’t contain any game assets, but they do contain the folder structure so you can easily put files into the right place!
If you’re not using an emulator, or your emulator does not have this functionality, you’ll just have to make the folders yourself.
Replacing Text (.msbt)
MSBT files are placed in romfs/mesg/, and organized by region and language.
| Region | Language | Location |
|---|---|---|
| America | English | romfs/mesg/US/USen/ |
| America | Spanish | romfs/mesg/US/USes/ |
| America | French | romfs/mesg/US/USfr/ |
| Europe | English | romfs/mesg/EU/EUen/ |
| Europe | Spanish | romfs/mesg/EU/EUes/ |
| Europe | French | romfs/mesg/EU/EUfr/ |
| Europe | German | romfs/mesg/EU/EUde/ |
| Europe | Italian | romfs/mesg/EU/EUit/ |
| Europe | Dutch | romfs/mesg/EU/EUnl/ |
| Japan | Japanese | romfs/mesg/JP/JPja/ |
| Korea | Korean | romfs/mesg/KR/KRko/ |
| China | Simplified Chinese | romfs/mesg/CN/CNzh/ |
| Taiwan | Traditional Chinese | romfs/mesg/TW/TWzh/ |
Replacing Graphics (.tex and .spr)
Note
tex and spr files do a LOT and i really don’t want to cover every use and folder right now. i’ll do this later.
- zeo
Replacing Audio (.cwv)
Audio files are placed in romfs/sound/sm/.
| Type | Location |
|---|---|
| Minigame Music | romfs/sound/sm/showtime/ |
| Tutorial Music | romfs/sound/sm/tutorial/ |
| Prologue Music | romfs/sound/sm/prologue/ |
| Menu Music | romfs/sound/sm/bgm/ |
| Rating Jingles & Music | romfs/sound/sm/result/ |
SFX are stored in folders according to the menu/mingame/rhythm toy/use. Please see the RHG Modding Chart for all the minigame SFX folders.
For the other SFX folders, there’s too much to list here. Please wait for a proper list of the folders, ask the mod creator, or ask in the RHModding Discord server.
Replacing Tempo (.wmb)
Tempo files are placed in romfs/wavmark/.
| Type | Location |
|---|---|
| Tutorial Tempo | romfs/wavmark/stage/tutorial/ |
| Rhythm Toy Tempo | romfs/wavmark/toy/ |
| Soundboard Tempo | romfs/wavmark/toy/audio_tile/ |
| Drum Lesson Tempo | romfs/wavmark/drumlesson/ |
| Beatspell Tempo | romfs/wavmark/beatspell/ |
| All Other Tempo | romfs/wavmark/stage/showtime/ |
Replacing Fonts (.zs)
Font files should be placed in romfs/mesg/Font/.
Tools & Resources
Below are tools and resources you can use to mod Rhythm Heaven Groove.
General
- RHG Modding Chart: A spreadsheet detailing info about each minigame
- RHModding Discord Server: The primary place for discussion & development of Rhythm Heaven mods for any game in the series. If you have any questions, we’d love to help!
Text
- MSBT Editor Reloaded: A GUI tool for editing MSBT text files. (Windows only)
Audio
- CWVTool: A command-line tool for decoding and encoding cwv audio files
Visuals
- TEXTool: A command-line tool for decoding and encoding tex texture files
Custom Levels
- Metronome: A command-line tool for creating and reading wavmark (wvb) tempo files
Getting Started
(This page seems to tell you how to get set up with mods. However, there is nothing to set up currently. You feel you should return later.)
Global Commands
These commands can be used in any scene.
Commands
FUN_7100514dc0(ticks) - Rest
Function address: 0x7100514dc0
Usage - to be added when tools are developed
Rest for a certain amount of ticks. 480 ticks = 1 beat.
| Argument | Type | Description |
|---|---|---|
ticks | int | The number of ticks to rest for |
FUN_71001366e0(ticks, opacity) - Fade Screen
Function address: 0x71001366e0
Usage - to be added when tools are developed
Fade the screen to opacity over ticks. Opacity ranges from 0 to 1.
Opacity 0 = black screen.
| Argument | Type | Description |
|---|---|---|
opacity | float | The opacity of the gameplay |
ticks | int | The duration of the fade |
FUN_71001399F0() - Initialize Subtitlebox
Function address: 0x71001399F0
Usage - to be added when tools are developed
Initialize the subtitlebox.
FUN_7100139A20() - Set Subtitlebox Text
Function address: 0x7100139A20
Usage - to be added when tools are developed
Sets the text inside the subtitlebox to the provided MSBT string.
FUN_7100139A30() - Force Show Subtitlebox
Function address: 0x7100139A30
Usage - to be added when tools are developed
Forces the subtitlebox to be shown, even when not running the level in a Video Example.
FUN_7100139A10() - Toggle Subtitlebox
Function address: 0x7100139A10
Usage - to be added when tools are developed
Shows/hides the subtitlebox.
Hoop Trundling (SceneRing)
Used in: Hoop Trundling, Remix 1, Remix 8, Hoop Trundling 2, Remix 9, Remix 19, Remix 20, Cast of Characters
Commands
FUN_7100217960(bubbleState) - Hoop
Function address: 0x7100217960
Usage - to be added when tools are developed
Standard hoop cue.
| Argument | Type | Description |
|---|---|---|
bubbleState | int | A bitfield showing which trundlorbs should be bubbles as the hoop passes by. A bit of 0 indicates a bubble, to be silenced on the next cue. The first bit corresponds to the first trundlorb, the second bit is for the second trundlorb, and so on. |
Sneezy Moon (SceneMoon)
Used in: Sneezy Moon, Remix 3, Sneezy Moon 2, Remix 8, Remix 19, Remix 20
Commands
FUN_71001db630(windup) - Green Sneeze
Function address: 0x71001db630
Usage - to be added when tools are developed
A green sneeze with or without a wind-up. The first wind-up sound effect is one beat after the command, and the input is four beats after the command. EEH-choo!
| Argument | Type | Description |
|---|---|---|
windup | bool | If true, the sneeze will have two “eeh” sounds before “EEH-choo!” |
FUN_71001dbbc0(windup) - Red Sneeze
Function address: 0x71001dbbc0
Usage - to be added when tools are developed
A red sneeze with or without a wind-up. The first wind-up sound effect is one beat after the command, and the input is 3.5 beats after the command. IHchoo!
| Argument | Type | Description |
|---|---|---|
windup | bool | If true, the sneeze will have two “ih” sounds before “IHchoo!” |
FUN_71001dc030() - Green Wind-up
Function address: 0x71001dc030
Usage - to be added when tools are developed
A standalone wind-up for a green sneeze consisting of two “eeh” sounds. The first sound effect is one beat after the command.
Can Do (SceneHammer)
Used in: Can Do, Remix 4, Remix 8, Can Do 2, Remix 13, Remix 17, Remix 19, Remix 20
Commands
FUN_71001ab410(landTicks, throw, hitTicks) - Red Can
Function address: 0x71001ab410
Usage - to be added when tools are developed
Spawns a red can.
| Argument | Type | Description |
|---|---|---|
landTicks | int | If the can is thrown, the timing of the can landing. - If this is positive, this is the ticks before the hit position. - If this is negative, this is the ticks after the start of the conveyor belt. |
throw | bool | Whether the can should be thrown or not. |
hitTicks | bool | How many ticks from spawning until the can should be hit. |
FUN_71001abcb0(landTicks, throw, hitTicks) - Blue Can
Function address: 0x71001abcb0
Usage - to be added when tools are developed
Spawns a blue can.
| Argument | Type | Description |
|---|---|---|
landTicks | int | If the can is thrown, the timing of the can landing. - If this is positive, this is the ticks before the hit position. - If this is negative, this is the ticks after the start of the conveyor belt. |
throw | bool | Whether the can should be thrown or not. |
hitTicks | bool | How many ticks from spawning until the can should be hit. |
Sweeper Star (SceneBrush)
Used in: Sweeper Star, Remix 6, Remix 8, Sweeper Star 2, Remix 10, Remix 19, Remix 20
Commands
FUN_710015a560(beats, playUn, fadeUn, countout) - Continuous Sweeping
Function address: 0x710015a560
Usage - to be added when tools are developed
Keep-the-beat sweeping for a given period, starting four beats after the command (with the first input being five beats after the command). Automatically plays the “Un, go!” count-in two beats after the command if this is the first time used in a level, or if a previous Continuous Sweeping command occured with a count-out.
| Argument | Type | Description |
|---|---|---|
beats | int | The number of beats to automatically sweep for after two beats. Starts on a rest. (“Un, go!” rest, sweep, rest, sweep, and so on…) |
playUn | bool | Toggles if the “un” sound should play on the rests while sweeping. |
fadeUn | bool | Toggles if the “un” sound effect should gradually fade out if it was toggled on. |
countout | bool | Toggles the “Three, two, one!” count-out. |
FUN_710015ab00() - Triple Sweep
Function address: 0x710015ab00
Usage - to be added when tools are developed
A triple-sweep pattern. The first sound effect is 3.5 beats after the command, and the first input is five beats after the command.
FUN_710015af40(unknown) - Spin-Spin
Function address: 0x710015af40
Usage - to be added when tools are developed
A “Spin, spin!” pattern. This does not include stopping the spin! The first sound effect is two beats after the command, and the input is four beats after the command.
| Argument | Type | Description |
|---|---|---|
unknown | bool | Unknown functionality. Mostly is set to false. |
FUN_710015b2e0() - Stop Spinning
Function address: 0x710015b2e0
Usage - to be added when tools are developed
The input to stop spinning, four beats after the command.
Soda Hop (SceneRope)
Used in: Soda Hop, Remix 10, Remix 13, Remix 19, Remix 20
Commands
FUN_7100226aa0(ticks, countout) - Jump
Function address: 0x7100226aa0
Usage - to be added when tools are developed
A single jump input. The input is four beats after the command. Automatically plays the “Jump, jump!” count-in two beats after the command if this is the first time used in a level, or if a previous Jump command occured with a count-out.
| Argument | Type | Description |
|---|---|---|
ticks | int | The number of ticks that the jump animation lasts for. Always 480 in-game. |
countout | bool | Toggles the “Three, two, one, stop!” count-out. |
FUN_71002276a0(ticks, stopRope, cutCue) - Double-Under
Function address: 0x71002276a0
Usage - to be added when tools are developed
A double-under pattern. The first sound effect is two beats after the command, and the first input is four beats after the command.
| Argument | Type | Description |
|---|---|---|
ticks | int | The number of ticks that the jump animation lasts for. Always 480 in-game. |
stopRope | bool | Toggles if the rope should be stopped after the double-under or not. |
cutCue | bool | Toggles if the final voice line of the cue should be cut off. Seemingly unused. |
High-Five Fever (SceneClap)
Used in: High-Five Fever, Remix 12, High-Five Fever 2, Remix 15, Remix 17, Remix 20
Commands
FUN_71001646f0() - Count-In
Function address: 0x71001646f0
Usage - to be added when tools are developed
Plays the “One, two, three” count-in. The count-in starts four beats after the command.
FUN_7100164b70() - Count-Out
Function address: 0x7100164b70
Usage - to be added when tools are developed
Plays the “Three, two, one” count-out. The count-out starts four beats after the command.
FUN_71001632d0(type) - High-Five
Function address: 0x71001632d0
Usage - to be added when tools are developed
A single high-five input. The input is four beats after the command.
| Argument | Type | Description |
|---|---|---|
type | int | The type of high-five animation and sound. 0 is a regular high-five, 1 is a double high-five, and 2 is a triple high-five. A regular high-five should only use a value of 0. |
FUN_71001634d0() - Pre-Double High-Five
Function address: 0x71001634d0
Usage - to be added when tools are developed
A high-five input that goes before a double high-five. The input is four beats after the command.
FUN_7100163b30() - Double High-Five
Function address: 0x7100163b30
Usage - to be added when tools are developed
A double high-five pattern. It requires a Pre-Double High-Five command before. The first sound effect is 2.5 beats after the command, and the first input is four beats after the command. Check it out!
FUN_71001634f0() - Pre-Triple High-Five
Function address: 0x71001634f0
Usage - to be added when tools are developed
A high-five input that goes before a triple high-five. The input is four beats after the command.
FUN_71001642F0() - Triple High-Five
Function address: 0x71001642F0
Usage - to be added when tools are developed
A triple high-five pattern. It requires a Pre-Tripled High-Five command before. The first sound effect is one beat after the command, and the first input is 3.5 beats after the command. Here we go!
Germ Aerobics (SceneBacteria)
Used in: Germ Aerobics, Remix 13, Germ Aerobics 2, Remix 15, Remix 18, Remix 20
Commands
FUN_7100146120(beats, countin) - Aerobics
Function address: 0x7100146120
Usage - to be added when tools are developed
Standard aerobics for a specified number of beats. The count-in starts three beats after the command, and the first input is five beats after the command.
| Argument | Type | Description |
|---|---|---|
beats | int | The number of beats that the aerobics should last. |
countin | bool | Toggles if the “Ou-kay!” count-in should play. |
FUN_7100146b50(beats, countin) - Slow Aerobics
Function address: 0x7100146b50
Usage - to be added when tools are developed
Slow aerobics for a specified number of beats. The count-in starts one beat after the command, and the first input is six beats after the command.
| Argument | Type | Description |
|---|---|---|
beats | int | The number of beats that the aerobics should last. |
countin | bool | Toggles if the count-in for slow aerobics should play. |
FUN_7100147cd0() - Triple Aerobics
Function address: 0x7100147cd0
Usage - to be added when tools are developed
A triple aerobics cue. The cue starts three beats after the command, and the first input is five beats after the command.
FUN_71001473a0(unknown) - Stop Aerobics
Function address: 0x71001473a0
Usage - to be added when tools are developed
The cue to stop aerobics, including a final input. The cue starts two beats after the command, and the input is five beats after the command.
| Argument | Type | Description |
|---|---|---|
unknown | int | Unknown functionality. |