Back

Reference Bpm Manipulation

Contents

Summary

For example, if you have a map that looks like below

 ...
 //Storyboard Layer 4 (Overlay)
 //Storyboard Sound Samples

 [TimingPoints]
 -23,240,4,2,0,50,1,0
 6697,240,4,2,0,50,1,0
 15817,240,4,2,0,50,1,0
 17737,-166.666666666667,4,2,0,50,0,0
 18457,240,4,2,0,25,1,0

 ...

 174702,240,4,2,0,50,1,0
 202782,240,4,2,0,50,1,0
 240222,428.571428571429,4,2,0,50,1,0
 281364,480,4,2,0,50,1,0
 329364,240,4,2,0,50,1,0

 [HitObjects]
 448,192,17737,5,0,0:0:0:0:

 ...

You found out that the map is on reference BPM 200, you would like to change it to 100.

Zero Offset Reference Bpm Line (Z-Line)

(Had the idea of calling it Z-Line because it should be at the end and also it's zero offset.)

Simply add a line of offset 0 (Note: 600 because 60,000/100 = 600)

0,600,4,2,0,50,1,0

at the end, so:

 ...
 174702,240,4,2,0,50,1,0
 202782,240,4,2,0,50,1,0
 240222,428.571428571429,4,2,0,50,1,0
 281364,480,4,2,0,50,1,0
 329364,240,4,2,0,50,1,0
 0,600,4,2,0,50,1,0 < --- HERE

 [HitObjects]
 448,192,17737,5,0,0:0:0:0:

 ...

You would notice that the reference would change. This works for any bpm, not for all offsets though.

You may need to move the offset to the negatives in some rare occasions.

Caveats

This works because osu!'s algorithm assumes a sorted TimingPoint .osu file.

Details

I wrote a small article speculating on why it works.

osu! reference BPM