Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

  1. Create a folder titled 0100D9F01D474000 inside /atmosphere/contents/
  2. Create another folder inside of that titled romfs

If you are using an emulator:

  1. 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.
  2. Inside the folder, create a new folder titled the name of your mod. This can be anything!
  3. 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!

  1. Right-click the game in the list and select “Dump RomFS” (or something similar)
  2. If it asks to choose which RomFS to dump, select “Program”
  3. Select “Skeleton” when it asks for the type of RomFS dump.
  4. After the dump completes, it should open in a new window.
  5. You can copy the dumped folders into the mod location you created earlier, inside the romfs folder.

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.

RegionLanguageLocation
AmericaEnglishromfs/mesg/US/USen/
AmericaSpanishromfs/mesg/US/USes/
AmericaFrenchromfs/mesg/US/USfr/
EuropeEnglishromfs/mesg/EU/EUen/
EuropeSpanishromfs/mesg/EU/EUes/
EuropeFrenchromfs/mesg/EU/EUfr/
EuropeGermanromfs/mesg/EU/EUde/
EuropeItalianromfs/mesg/EU/EUit/
EuropeDutchromfs/mesg/EU/EUnl/
JapanJapaneseromfs/mesg/JP/JPja/
KoreaKoreanromfs/mesg/KR/KRko/
ChinaSimplified Chineseromfs/mesg/CN/CNzh/
TaiwanTraditional Chineseromfs/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/.

TypeLocation
Minigame Musicromfs/sound/sm/showtime/
Tutorial Musicromfs/sound/sm/tutorial/
Prologue Musicromfs/sound/sm/prologue/
Menu Musicromfs/sound/sm/bgm/
Rating Jingles & Musicromfs/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/.

TypeLocation
Tutorial Temporomfs/wavmark/stage/tutorial/
Rhythm Toy Temporomfs/wavmark/toy/
Soundboard Temporomfs/wavmark/toy/audio_tile/
Drum Lesson Temporomfs/wavmark/drumlesson/
Beatspell Temporomfs/wavmark/beatspell/
All Other Temporomfs/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

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.

ArgumentTypeDescription
ticksintThe 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.

ArgumentTypeDescription
opacityfloatThe opacity of the screen
ticksintThe 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.

ArgumentTypeDescription
bubbleStateintA 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.

Disc Dog (SceneFlydisc)

Used in: Disc Dog, Remix 1, Remix 8, Disc Dog 2, Remix 11, Remix 18, Remix 20

Commands

FUN_710018d3f0(color, length, soundID, unknown) - Throw Disc

Function address: 0x710018d3f0

Usage - to be added when tools are developed

Whistle, throw, and catch a flying disc. The first whistle sound starts 2 beats after the command, the disc is thrown 4 beats after the command, and the input is 10 beats after the command. Alright!

ArgumentTypeDescription
colorintThe color of the disc. Needs testing.
lengthintThe length from the disc throw until the dog catches the disc, in ticks. The length until the input is one beat less than this.
Always set to 0xF00 ticks (8 beats) ingame.
soundIDintThe sound to play when jumping to catch the disc. Needs testing to find values.
unknownboolUnknown functionality.

FUN_710018C730(background) - Set Background

Function address: 0x710018C730

Usage - to be added when tools are developed

Instantly set the background.

ArgumentTypeDescription
backgroundchar*The name of the background to set. Needs testing.

FUN_710018CBD0(background) - Change Background

Function address: 0x710018CBD0

Usage - to be added when tools are developed

Flip the background over to reveal a new one.

ArgumentTypeDescription
backgroundchar*The name of the background to change to. Needs testing.

Stop N Go N Stop (SceneCars)

Used in: Stop N Go N Stop, Remix 2, Stop N Go N Stop 2, Remix 7, Remix 8, Remix 18, Remix 20

Commands

FUN_71001601d0(pointCue, largeBoost) - Accelerate

Function address: 0x71001601d0

Usage - to be added when tools are developed

An accelerate cue, with or without the two “pointing” sounds and visuals. The first point is 0.5 beats after the command, and the input is 4 beats after the command.

ArgumentTypeDescription
pointCueboolToggles if the two pointing sound effects should play. In the original game, only Remix 7 disables them.
largeBoostboolToggles if the Revlinos should get a larger speed boost when accelerating.

FUN_71001608f0(unknown1, unknown2, unknown3) - Brake

Function address: 0x71001608f0

Usage - to be added when tools are developed

A brake cue. The first sound is 2 beats after the command, and the input is 4 beats after the command.

ArgumentTypeDescription
unknown1longUnknown functionality.
unknown2longUnknown functionality.
unknown3boolUnknown functionality.

Slice N Dice Kitchen (SceneCooking)

Used in: Slice N Dice Kitchen, Remix 3, Remix 8, Slice N Dice Kitchen 2, Remix 14, Remix 18, Remix 19, Remix 20

Commands

FUN_7100178880(unknown1, unknown2) - Single Veggie

Function address: 0x7100178880

Usage - to be added when tools are developed

Throw and catch a single vegetable. The first hum sound is 1.5 beats after the command, and the input is 3 beats after the command. Hm-hm!

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.

FUN_7100178DC0(unknown1, unknown2, unknown3, unknown4) - Broccoli

Function address: 0x7100178DC0

Usage - to be added when tools are developed

Throw and catch 3 broccoli, including the timer beep cue. The first beep sound is 2 beats after the command, and the first input is 3 beats after the command.

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.
unknown3intUnknown functionality.
unknown4intUnknown functionality.

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!

ArgumentTypeDescription
windupboolIf 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!

ArgumentTypeDescription
windupboolIf 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.

Crab Snacks (SceneCrab)

Used in: Crab Snacks, Remix 3, Remix 8, Crab Snacks 2, Remix 12, Remix 16, Remix 20

Commands

FUN_710017bfc0(unknown1, unknown2, unknown3) - Macaron

Function address: 0x710017bfc0

Usage - to be added when tools are developed

Bounce a macaron into the hole. The first bounce is 2 beats after the command, and the input is 6 beats after the command.

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.
unknown3intUnknown functionality.

FUN_710017c770(unknown1, unknown2, unknown3) - Mangosteen

Function address: 0x710017c770

Usage - to be added when tools are developed

Bounce a mangosteen into the hole. The first bounce is 2 beats after the command, and the input is 5 beats after the command.

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.
unknown3intUnknown functionality.

FUN_710017d0d0(unknown1, unknown2, unknown3) - Fava Bean

Function address: 0x710017d0d0

Usage - to be added when tools are developed

Bounce a fava bean into the hole. The first bounce is 2 beats after the command, and the first input is 7 beats after the command.

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.
unknown3intUnknown functionality.

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.

ArgumentTypeDescription
landTicksintIf 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.
throwboolWhether the can should be thrown or not.
hitTicksboolHow 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.

ArgumentTypeDescription
landTicksintIf 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.
throwboolWhether the can should be thrown or not.
hitTicksboolHow many ticks from spawning until the can should be hit.

Backup Spotlight (SceneDancer)

Used in: Backup Spotlight, Remix 4, Remix 8, Backup Spotlight 2, Remix 9, Remix 19, Remix 20

Commands

FUN_7100181c70(beats, voice, startInPosition, stayInPosition) - Start Dance

Function address: 0x7100181c70

Usage - to be added when tools are developed

Repeatedly pose in-place for a certain number of beats, starting 5 beats after the command (and the first input is 6 beats after the command). The first cue sound is 3.5 beats after the command. The count-out will automatically play as the posing ends. Ku-kin!

ArgumentTypeDescription
beatsintThe number of beats to repeatedly pose for.
Starts on a rest.
voiceintSomething to do with the dancer’s voices, obviously. Needs testing!
startInPositionboolToggles if the backup dancers should move to their crouching position before the first pose (i think).
stayInPositionboolToggles if the backup dancers should stay standing after the posing ends (i think).

FUN_7100181210(beats, voice, stayInPosition) - Start Turn And Dance

Function address: 0x7100181210

Usage - to be added when tools are developed

Repeatedly turn and pose for a certain number of beats, starting 5 beats after the command. The direction of the first turn is opposite of the current facing direction (which starts on the right). The first cue sound is 3 beats after the command. The count-out will automatically play as the posing ends. Dan, dan!

ArgumentTypeDescription
beatsintThe number of beats to repeatedly turn and pose for.
voiceintSomething to do with the dancer’s voices, obviously. Needs testing!
stayInPositionboolToggles if the backup dancers should stay standing after the posing ends (i think).

FUN_7100182460(unknown) - Fast Turn

Function address: 0x7100182460

Usage - to be added when tools are developed

A single fast turn. The direction of the turn is opposite of the current facing direction (which starts on the right). The first cue sound is 3.5 beats after the command, and the first input is 5.5 beats after the command.

ArgumentTypeDescription
unknownboolUnknown functionality.

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 4 beats after the command (with the first input being 5 beats after the command). Automatically plays the “Un, go!” count-in 2 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.

ArgumentTypeDescription
beatsintThe number of beats to repeatedly sweep for.
Starts on a rest.
(“Un, go!” rest, sweep, rest, sweep, and so on…)
playUnboolToggles if the “un” sound should play on the rests while sweeping.
fadeUnboolToggles if the “un” sound effect should gradually fade out if
it was toggled on.
countoutboolToggles 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 5 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 2 beats after the command, and the input is 4 beats after the command.

ArgumentTypeDescription
unknownboolUnknown 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, 4 beats after the command.

Quick Hands (SceneGrasp)

Used in: Quick Hands, Remix 9, Quick Hands 2, Remix 12, Remix 17, Remix 19, Remix 20

Commands

FUN_71001a4070(unknown1, unknown2) - Throw Object

Function address: 0x71001a4070

Usage - to be added when tools are developed

Throw and catch a stick or other object. The cue is 2 beats after the command, and the input is 13 beats after the command.

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2boolUnknown functionality.

FUN_71001a48c0() - Double Catch A

Function address: 0x71001a48c0

Usage - to be added when tools are developed

The first double-catch pattern. The first cue sound is 1.75 beats after the command, and the first input is 3.25 beats after the command.

FUN_71001a50b0(unknown) - Double Catch B

Function address: 0x71001a50b0

Usage - to be added when tools are developed

The second double-catch pattern. The first cue sound is 2 beats after the command, and the first input is 3.75 beats after the command.

ArgumentTypeDescription
unknownboolUnknown functionality.

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.

ArgumentTypeDescription
ticksintThe number of ticks that the jump animation lasts for. Always 480 in-game.
countoutboolToggles 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.

ArgumentTypeDescription
ticksintThe number of ticks that the jump animation lasts for. Always 480 in-game.
stopRopeboolToggles if the rope should be stopped after the double-under or not.
cutCueboolToggles if the final voice line of the cue should be cut off.
Seemingly unused.

Space Sentry (SceneGuardian)

Used in: Space Sentry, Remix 11, Space Sentry 2, Remix 14, Remix 19, Remix 20

Commands

FUN_71001a89e0(unknown1, unknown2) - Normal Meteor

Function address: 0x71001a89e0

Usage - to be added when tools are developed

Spawn a regular meteor. The first cue sound is 12 beats after the command, and the input is 14 beats after the command. Hoy hoy ay yah!

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.

FUN_71001a82f0(unknown1, unknown2) - Near Meteor

Function address: 0x71001a82f0

Usage - to be added when tools are developed

Spawn a close-up meteor. The first cue sound is 12 beats after the command, and the input is 14.5 beats after the command. Hu hu hu… ay-ya!

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.

FUN_71001a9120(unknown1, unknown2) - Far Meteor

Function address: 0x71001a9120

Usage - to be added when tools are developed

Spawn a far-away meteor. The first cue sound is 12 beats after the command, and the input is 13.5 beats after the command. Undabada ay… ya!

ArgumentTypeDescription
unknown1intUnknown functionality.
unknown2intUnknown functionality.

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 4 beats after the command.

FUN_7100164b70() - Count-Out

Function address: 0x7100164b70

Usage - to be added when tools are developed

Plays the “Three, two, one, hey” count-out. The count-out starts 4 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 4 beats after the command.

ArgumentTypeDescription
typeintThe 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 4 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 4 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 4 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 1 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) - Regular Aerobics

Function address: 0x7100146120

Usage - to be added when tools are developed

Standard aerobics for a specified number of beats. The count-in starts 3 beats after the command, and the first input is 5 beats after the command.

ArgumentTypeDescription
beatsintThe number of beats that the aerobics should last.
countinboolToggles 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 1 beat after the command, and the first input is 6 beats after the command.

ArgumentTypeDescription
beatsintThe number of beats that the aerobics should last.
countinboolToggles if the count-in for slow aerobics should play.

FUN_7100147cd0() - Quick Aerobics

Function address: 0x7100147cd0

Usage - to be added when tools are developed

A quick aerobics cue. The cue starts 3 beats after the command, and the first input is 5 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 2 beats after the command, and the input is 5 beats after the command.

ArgumentTypeDescription
unknownintUnknown functionality.

Synchro Wings (SceneBirds)

Used in: Synchro Wings, Remix 14, Synchro Wings 2, Remix 15, Remix 18, Remix 20

Commands

FUN_710014a3e0(pattern) - Flap Pattern

Function address: 0x710014a3e0

Usage - to be added when tools are developed

Set a call-and-response pattern. The call starts 1 beat after the command.

ArgumentTypeDescription
patternchar*A string representing the call-and response pattern.

Note

i’m still not quite sure how that pattern string works, more research is needed!
- zeo