-
Notifications
You must be signed in to change notification settings - Fork 6
Custom Events
- Read about beatmap objects first.
- Look at how custom events are structured first: https://github.com/Aeroluna/CustomJSONData?tab=readme-ov-file#custom-events
| Raw JSON | ReMapper |
|---|---|
d |
unsafeData |
t |
type |
Custom events are stored on the difficulty under the customEvents object.
difficulty
└── customEvents
├── animateTrackEvents
├── assignPathAnimationEvents
└── ...
You have 3 options for creating custom events.
You can use the object constructor to create a custom event.
rm.animateTrack(map, {
beat: 2,
duration: 4,
track: 'myTrack',
animation: {
dissolve: [[0, 0], [1, 1]]
}
})When trying to convert events from the Noodle/Chroma/Vivify documentation into ReMapper, you can follow this format:

- The 'beat' property is included in the object
{} - The 'type' property is NOT included in the object
{}you pass because it's already given by the function call (e.g.assignPlayerToTrack). - Additional properties are included in the root object
{}, no need for an extradobject.
You can pass parameters in order of relevance to create a custom event.
rm.animateTrack(map, 2, 'myTrack', 4, {
dissolve: [[0, 0], [1, 1]]
})You can create an "abstract" custom event which is mostly untyped and not preferred if the event already exists in ReMapper.
rm.abstractCustomEvent(map, {
beat: 2,
type: 'AnimateTrack',
unsafeData: {
duration: 4,
dissolve: [[0, 0], [1, 1]]
}
})You also have the option to create the abstract event in order of relevant parameters (beat, type, data).
rm.abstractCustomEvent(map, 2, 'AnimateTrack', {
duration: 4,
dissolve: [[0, 0], [1, 1]]
})Just like how beatmap objects have their customData properties extracted on load, custom events have their d (data) extracted on load.
On load, all the properties that will be directly on the class are taken off of the d object. The remaining d object is given to the class as unsafeData.
// This is a simplified example of what happens on load
const inputJson = {
d: {
duration: 3
}
}
event.duration = inputJson.d.duration
delete inputJson.d.duration
event.unsafeData = inputJson.dOn save, all the d related properties (such as duration) are recombined with unsafeData.
// This is a simplified example of what happens on save
const outputJson = {
d: {
duration: event.duration,
...event.unsafeData
}
}- Info
- Difficulty
- Beatmap Objects
- Gameplay Objects
- Walls
- Basic Notemods
- Note Iterators
- Basic Events
- V3 Events
- Custom Events
- Heck Tracks and Animation
- Easings
- Point Types
- Point Utilities
- Heck Animation Baking
- Heck Animation Settings
Non-Vivify Models
Vivify