forum

SV Changes Guide

posted
Total Posts
23
Topic Starter
Agka
(Warning. Work in progress. Please add any corrections you might want to.)

It is well known a great count of users love SV changes.

Fast and cool effects that are able to add a LOT onto a map. But, for a newbie mapper, they can end up being a MESS. Big time.

Effects
First of all, SV changes are to be used as transition effects when they are short- Avoid effects that cover notes.
What does this mean?

You can add SV changes based effects from A to B as the notes in this section is clear.


When it's not


Second of all, you need to make sure it's either sightreadable or predictable.

Making sightreadable SV changes is hard, until you have in mind one single truth that applies to players past the beginner stage:
Players look ahead what they're going to play.

This leads us to the following: The next notes need to be on the horizon (viewable by the player) on a section that uses effects and is short enough. As long as the change looks like the rate of the section (generally 1x, 0.75x or whatever for whatever value you're using during that section) it's going to be sightreadable.

So, we have to try to go and make that section always look as 1x.

Warning: Maths ahead.
Let's say the duration of the section is 1, and the beginning of the section is 0.
You have two sections, separated by SV changes A and B, that cover the fraction of the section, S.
A rate of the section S such as 1x would be R.
We have P and Q adding up to 1 (the whole of the section) so that

P+Q = 1

and

P*S + Q*S = S

And we later have changes A and B to account, as well as the section's rate:

APS+BQS = RS

If we were to use A (the first SV change's value) and replace Q for Q=1-P then
APS+B(1-P)S = RS

Then..

AP+B(1-P) = R

Since the section doesn't last 0 units.

We're looking for B (The second SV change we're going to use) so we have

(R - AP) / (1-P) = B

So, remembering P is the fraction of the section S that A is in effect, this formula makes you pick A (First SV change) R (Destination Rate) and P (Fraction of the section S residing from 0 to 1)

I made a tool to calculate this with ease, with some other possibly useful tools.
http://zardoru.github.io/sv-tools/

You can derive all kinds of cool effects having this in mind- Bumps, Quadratic slowdowns, Linear slowdowns, Inverse Bumps, Glitch effects and whatnot.

For example, let's say we wanted to make bump effects. A small, short bump effect that is a short speedup followed by a short slowdown.

If the effect is on a notable section for its SV changes AND music (You can probably tell this by noting that you're going to do this effect a lot of times in a consistent way through this section) you're in the clear, the player will catch up very well on the second playthrough.

Otherwise, if it's an effect taking place on a DnB song for instance that is not going to be repeated a lot, you should aim for 1x.
So, let's say we're going to use a 1.5x for this section's effect, and that it's going to last half the section.
(R-AP)/(1-P)
1 - 1.5*0.5 / (0.5)
0.25 / 0.5
0.5

Our second SV effect would be 0.5 after half that section has passed.
Finally, the changes look like


Predictable effects come in the "Consistent" flavor and the "Intuitive" flavor. Making intuitive predictable effects is very hard, so prefer using 1x-looking effects when in doubt.

Long Sections
SV changes that cover the whole section instead are way more lenient- you can add those as long as the sections you put it in are consistently using that velocity.

To elaborate- Suppose we have a slow section on a song. If we decided to do a SV change that covered that section first of all you must make sure of two things:

-The note density of the section is at most 1/2 for 0.5x sv changes. (Keep it readable.)
-Any further sections that use similar music must use a similar note density.

Do NOT use sv changes above 1x for long sections. Ever. However, if you use that multiplier on a majority of the song, normalize that as 1x- and divide all other sv changes by what you needed to divide that one to get 1x.

In other words

New SV Change = Old SV Change / Value used to turn picked value into 1x

for all sections within the map.

Smooth transitions
Slowdowns and speedups sometimes can be easier to sightread when you use smooth transitions. What is this about? Rather simply, it's a series of sv changes that go from A to B, where A is not equal to B.



This is not an ideal case, an ideal case would be dividing a section in N parts (N >= 2) where N parts decrease/increase by K constantly.

Divide section S in 8 parts since it lasts 8 beats, for instance.
We're going from 1x to 2x so 1/8 = K (0.125)
We'd have 8 sections from the first beat that increase by .125 every beat until you get to the 2x section.

If you're using values such as 4x, 2x, 1x, 0.5x and 0.25x, you need to make sure the section is long enough (in seconds) so that the player has time to react and the change is sightreadable.

Behaviour

This is an important bit. Whenever you place an SV change, and afterwards place a BPM change, the BPM change will reset the SV to 1x.
Have this in mind when designing maps. I consider this to be a bug since SV changes being applied until the next one appears should be the right behaviour on principle rather than until a BPM change appears. Note that overlapping an SV change and a BPM change is not frowned upon unless the SV change does literally nothing, because it does change the speed to be SV change times the bpm.

If your SV changes are getting in the way of readability reconsider them!
Maiz94
This would be pretty useful for new mania mappers to learn this SV change. Requesting for this thread to be stickied. :P
Bobbias
Amazing post. I need to get off my ass and write more.

Agka wrote:

Do NOT use sv changes above 1x for long sections. Ever.
I think I love you.
MMzz

ishimaru94 wrote:

This would be pretty useful for new mania mappers to learn this SV change. Requesting for this thread to be stickied. :P
If you say so.

Neat guide.
Hanyuu
Nice :) A few more different applications of sv changes and some more examples would be handy aswell.
xxbidiao
Actually SV-based speed changing is far easier to be used comparing to BPM-based ones.

I have a document teaching you how to calculate different kind of BPM-based speed change, which has tens of pages. Though now you just have to ensure that the Sv changes are reasonable XD

Yeah that means you usually don't need such calculation and can make map neat unlike in BPM based BMS.
PyaKura
Great guide. Much appreciated. ~
Topic Starter
Agka
I made a bit of an update regarding behaviour of SV changes, since they're reset when a BPM change appears, and it's probably important to have that in mind.
Tear
Awesome guide, it was a good base for more interesting SV effects 8-)
puxtu
all hail to Agka-sama \o/
AncuL
that arrow on the image
AthenaQuincy
This very helpful for new mapper mania =w=) thanks
Crono
Just something I found also to be helpful after reading this guide. Going into edit mode on a map with lots of SV changes helps idiots like me better understand it after comparing the mathematics to the SV changes, most notably the important A and B and looking at the transitions used.

Maps from pro SV mappers like __M A S__ are good to look at. His maps are genius imo. Crazy hard for me sure, but his SVs make them really fun as well.
pporse
wow this thread is very helpful for me !
Topic Starter
Agka
08:07 Agka: okay
08:07 Agka: let's say you're at... idk
08:07 Agka: 02:00:881 -
08:08 Agka: urk measure is slightly off)
08:08 Evening: welp red lines
08:08 Agka: 02:02:214 - the measure ends here, right?
08:08 Evening: should be still _kinda_ doable
08:08 Agka: yeah
08:09 Evening: ye
08:09 Agka: so 2214 - 0881 = 1233ms/measure
08:09 Evening: wait uh
08:09 Evening: 02:00:960 - i think it's here
08:09 Evening: the 1st one
08:09 Agka: ah, alright
08:10 Agka: that's 1154/measure
08:10 Evening: yep
08:10 Agka: okay, let's say we want to put a sine wave on 4 measures from 02:00:960
08:10 Agka: we want to put it every 4th of a beat so that's 16 divisions per cycle
08:11 Agka: so time start would be... 60000 * 2 + 960
08:11 Agka: 120960
08:11 Agka: a measure is 1233ms/measure and we want a full sine wave to happen through this measure
08:11 Agka: so 1233 is the time duration
08:12 Agka: we want this thing to wave around 1 so we replace return 1; with
08:12 Agka: Math.sin(2 * Math.PI * x) * 0.2 + 1.0;
08:12 Agka: (x is the fraction of the cycle)
08:13 Evening: aaa getting rusty with math
08:13 Evening: mmmmmm uhhhh lemme see
08:13 Agka: it's a sine wave that moves between 0.8 and 1.2
08:13 Evening: must M be capitalized
08:13 Evening: in the func
08:13 Agka: Yep.
08:14 Evening: alright
08:14 Agka: since a cycle is a full measure
08:14 Agka: we want 4 full measures so that is, 4 cycles
08:14 Agka: now we can click over "do it" and voila
08:15 Agka: ``(actually, I think my divisions per cycle is off by one, but hey)
08:16 Evening: http://puu.sh/mco16/8e05b0778b.png i think i did something wrong
08:16 Agka: pi is capitalized
https://osu.ppy.sh/b/795147 was used for testing.

Some details: the first x passed for a cycle is going to be 0. Further Xes will be the i-th iteration divided by the divisions per cycle.
This is useful to know if you want to generate a buttload of bump effects. So like, you can set it to 2 divisions per cycle, use the period you're going to use for bumps and use in the function something like this:
if (x == 0) return 1.5; else return 0.5;
JamesHappy
wow nice
katiexie
I hate SV
Evening

katiexie wrote:

I hate SV
like and subscribe for more social experiments


(don't necro something with a post that harbors 0 value)
katiexie

Evening wrote:

katiexie wrote:

I hate SV
like and subscribe for more social experiments


(don't necro something with a post that harbors 0 value)
Oh,Evening。hello。Anytime I play a map ,when the speed suddenly becomes fast or slow ,I will miss a lot of notes even fail,then I will become annoy。so I hate SV and prefer to play the maps that does not have SV
M i a u
Thank u
show more
Please sign in to reply.

New reply