Note: this is an archived page for RHRE2. This feature was cut from v3.0.0 onwards.

RHRE2 has experimental Lua scripting support, starting in v2.9.0. Learn about Lua here, and look at the style here. (It should be noted that the style used here tends to lean towards Java's lowerCamelCase and using double-quotes for strings.)

A note on immutability

You must use the add/remove/change (ex: changeCueDuration) methods for the objects provided. Changing their value directly does not affect anything, and will lead to undefined behaviours!

Types

Entity

The entity type is what represents a cue or pattern.

Field Type Description
beat double Beat position of the entity.
duration double Duration of the entity in beats.
track int 1-based track position of the entity. Origin is bottom-left.
id string The ID of the entity.
isPattern bool If the entity is a pattern.
semitone int The adjusted pitch in semitones. May be negative to indicate lower notes.

Tempo Change

The tempo change type is what represents a BPM change in the remix.

Field Type Description
beat float Beat position of the entity.
seconds float Seconds representation of the beat position.
tempo float The new tempo to switch to.

Game

The game type is what represents a databased game in the registry with all its cues and patterns.

Field Type Description
id string ID of the game.
name string Human-readable name of the game.
cues list<cue> Cue table of all the cues implemented for this game.
patterns list<pattern> Pattern table of all the patterns implemented for this game.
series string Gets the series for this game. May be OTHER, TENGOKU, DS, FEVER, MEGAMIX, SIDE, or CUSTOM.
priority int (v2.17.0) The ordering priority for the game list. Count-ins have a higher priority than normal games. Non-canon games have a lower priority.
isRealGame bool (v2.17.0) If the game is a real game or not. Count-ins are not real games. This is used to determine if the game should be displayed in the current game renderer (presentation mode).

Cue

The cue type holds basic information about a cue in the database (and not an Entity!).

Field Type Description
id string ID of the cue.
name string Human-readable name of the cue.
duration float Beat duration.
deprecated list<string> Returns a (possibly empty) list of deprecated IDs.
canAlterPitch bool True if you can scroll to change the pitch.
canAlterDuration bool True if you can stretch/shrink this cue.
introSound string Returns the sound ID if this has an intro sound, nil otherwise. For example, Moai Doo-Wop's "ooo" SFX has an intro sound for the "d" sound at the start.
baseBpm float Returns the base BPM this sound is supposed to be played at, 0.0 otherwise. This is used for Manzai Birds (speed up with BPM).
loops bool True if this sound loops, false otherwise.
pan float (v2.10.4+) The pan of the sound, -1.0 to 1.0.

Pattern

The Pattern object holds information about a pattern in the database.

Field Type Description
id string ID of the pattern.
name string Human-readable name of the pattern.
deprecated list<string> Returns a (possibly empty) list of deprecated IDs.
canAlterDuration bool True if you can stretch/shrink this pattern.
patternCues list<pattern cue> List of pattern cues (see below). Note: these are not the same as normal Cue objects, as they have more metadata (positional, etc.).
autoGenerated bool (v2.10.0) True if auto-generated by the editor.

Pattern Cue

These are a data object for Patterns. Do not confuse them with normal Cues.

Field Type Description
id string ID of the cue to use.
beat float The relative beat position.
track int The relative track position (starts at 1).
duration float The duration of the cue. If less or equal to zero, it indicates inheritance.
semitone int The semitone for the cue. Usually zero.

Global Variables

Here are some global variables provided in the context of each script.

registry

The Registry table. Contains access to the cues and patterns in the registry.

Fields

Fields Type Description
games table<string, game> Map of all the games.
cues table<string, cue> Map of all the cues (ID -> Cue object).
patterns table<string, pattern> Map of all the patterns (ID -> Pattern object).

remix

The Remix table. Contains access to the track, as well as adding/removing entities.

Fields

Field Type Description
entities list<entity> Immutable table of all the cues. The key is the index (1-based), the value is an Entity. See more info on Entities above. To modify, use the functions defined in remix.
playbackStart beat: float Returns the playback start in beats.
musicStart seconds: float Returns the music start in seconds.
tempoChanges table<int, tempo change> Immutable table of all the tempo changes. The key is the index (1-based), the value is a Tempo Change. To modify, use the functions defined in remix.
length beatLength: float Gets the length of the remix in beats.
musicVolume volume: float Gets the volume of the music as a percentage (0.0 to 1.0).
entityCount count: int Returns the number of entities in the remix (cues and patterns).
gamesUsed games: list<string> Returns a list of games used by ID.

Functions

All functions are member functions (you must invoke it through remix:func).

Function Parameters Return Type Description
beatsToSeconds beats: float seconds: float Converts beats to seconds.
secondsToBeats seconds: float beats: float Converts seconds to beats.
addCue id: string, beat: float, track: int, [duration: float] index: int Adds a cue to the remix at the specified beat, track level, and optional duration. The ID determines if it is a pattern or not (patterns use underscores, every other ID uses a forward slash). Tracks are 1-based, and the origin is bottom-left. This will allow intersections. Duration may be less than 0 to indicate inheriting the default duration. Returns the index, or -1 if it failed (duration too short).
removeCue index: int successful: bool Removes a cue based on its index. Returns true if removed, false otherwise.
removeAllCues nothing removed: int Removes all cues from the remix. Returns the number of cues removed.
moveCue index: int, newPos: float successful: bool Moves a cue. Returns true if successful, false otherwise.
changeCueDuration index: int, newDuration: float successful: bool Changes a cue's duration. Returns true if successful, false otherwise. This can fail if the duration is too short (less than 0.125).
changeCueSemitone index: Int, newSemitone: int successful: bool Change's a cue's semitone. Returns true if successful, false otherwise. This will fail if the limit has been reached, or if the cue cannot be changed.
changePlaybackStart newPos: double oldPlayback: float Changes the playback tracker head.
changeMusicStart newPos: double oldMusicStart: float Changes the music tracker head.
changeMusicVolume volume: double oldVolume: float Changes the music volume as a percentage (0.0 to 1.0).
changeMusic absolutePath: string successful: bool Changes the music, loading from an absolute path. Returns true if successful, false otherwise (errors printed to console).
addTempoChange beats: float, tempo: float successful: bool Add a tempo change at the specified beat. Returns the new index, or -1 if it failed. Note that this is the only way to change a tempo change's tempo (remove and re-add).
removeTempoChange beat: float successful: bool Remove a tempo change by its beat position.
findTempoChange beat: float tempoChange: tempo change Find a tempo change by the beat it's on. Returns it if found, nil otherwise.