Chart Data Format
Chart data is stored inassets/data/songs/[id]/[id]-chart.json:
Chart Data Fields
String
required
Chart format version (currently “2.2.4”)
Map<String, Float>
required
Scroll speed for each difficulty (controls note speed)
Array<SongEventData>
required
Array of song events (camera focus, animations, etc.)
Map<String, Array<SongNoteData>>
required
Note data for each difficulty
String
Tool or person that generated this chart
Song Note Data
Each note is defined with minimal data:Note Fields
Float
required
Time when the note should be hit (format depends on song’s
timeFormat)Int
required
Note direction/lane (0-3 for opponent, 4-7 for player)
- 0/4 = Left
- 1/5 = Down
- 2/6 = Up
- 3/7 = Right
Float
default:"0"
Hold note length in milliseconds (0 = regular note, >0 = sustain)
String
Note kind ID for special note types (e.g., “mine”, “hurt”)
Note Direction Mapping
Opponent strumline (left side):0= Left1= Down2= Up3= Right
4= Left5= Down6= Up7= Right
Note Types
Regular Notes
Standard notes that must be hit:Hold Notes (Sustains)
Notes that must be held down:l field defines the hold duration.
Hold note scoring:
- Player must hit the note head
- Player must hold the key for the sustain duration
- Releasing early breaks the hold
- Each sustain “segment” can award points
Special Note Kinds
Note kinds modify behavior:- Default (no
kfield): Standard note - Custom kinds defined in
assets/data/notekind/directory
- Change note appearance
- Modify hit behavior
- Award different points
- Trigger special effects
Song Events
Events trigger gameplay actions at specific times:Event Structure
Float
required
Time when event triggers (in song’s time format)
String
required
Event kind/type identifier
Dynamic
Event-specific data (can be any JSON-serializable value)
Built-in Events
FocusCamera
Changes camera focus to a character:char: Character index (0 = player, 1 = opponent, 2 = girlfriend)duration: Optional tween duration in seconds
ZoomCamera
Changes camera zoom level:zoom: Target zoom levelduration: Tween duration in seconds
PlayAnimation
Plays animation on a character or prop:target: Character or prop nameanim: Animation nameforce: Whether to interrupt current animation
SetCameraBop
Controls camera bopping:intensity: Bop strength (zoom amount)rate: Bop every X beats (e.g., 4 = every 4 beats)
Scroll Speed
Controls how fast notes move:1.0= Default speed<1.0= Slower (more reaction time)>1.0= Faster (less reaction time)- Typical range: 0.8 - 3.0
- Higher values = notes approach faster
- Lower values = more time to react
- Does NOT affect timing windows
- Purely visual speed change
Chart Organization
Per-Difficulty Charts
Each difficulty has separate note data:- Easy: Fewer notes, simpler patterns, longer gaps
- Normal: Moderate note density, basic patterns
- Hard: Higher density, complex patterns, more sustains
Shared Events
Events are shared across all difficulties:Note Patterns
Single Notes
Basic rhythm:Chords
Multiple simultaneous notes:t: 1000).
Rolls
Rapid sequential notes:Holds (Sustains)
Long notes:Jacks
Repeated notes in same lane:Timing Precision
Chart timing uses the song’s time format:Milliseconds (Most Common)
Ticks
divisions: 96:
- 1 beat = 96 ticks
- 1/4 beat = 24 ticks
- 1/16 beat = 6 ticks
Step Alignment
Notes should align to musical steps: 4/4 time, 120 BPM:- 1 beat = 500ms
- 1 step (1/4 beat) = 125ms
- Quarter notes: 500ms apart
- Eighth notes: 250ms apart
- Sixteenth notes: 125ms apart
- Thirty-second notes: 62.5ms apart
Loading Charts
Charts are loaded via the Song system:Charting Best Practices
1. Follow the Music
Align notes to musical beats:- Use strong beats for emphasis
- Match note patterns to melody
- Use holds for sustained notes
2. Difficulty Progression
Easy:- Simple patterns
- Mostly single notes
- Clear beat alignment
- Minimal holds
- Moderate complexity
- Some chords (2 notes)
- Basic patterns
- Occasional holds
- Complex patterns
- Frequent chords
- Fast rolls
- Long holds
- Creative patterns
3. Playtest Extensively
- Test on different difficulties
- Check timing accuracy
- Verify event triggers
- Ensure patterns are fair
4. Use Events Effectively
- Camera focus on singing character
- Zoom for emphasis
- Animations at key moments
- Don’t overuse effects
5. Balance Opponent and Player
- Opponent notes (d: 0-3) during their sections
- Player notes (d: 4-7) during player sections
- Can overlap during duets
Example: Complete Chart
- Camera focus changes at 0ms and 8000ms
- Camera zoom at 12000ms
- Opponent notes (d: 0-3) from 1000-3000ms
- Player notes (d: 4-7) from 8000ms onward
- Various patterns: singles, holds, chords, rolls
