forum

[Guide] How to create invisible hitobjects

posted
Total Posts
3
Topic Starter
Pikaquim
Doing a mini explanation about how invisible hitobjects work, because they are cool.

Most of these stuff are from my personal observations, so correct me in case I get anything wrong, please.
idk if I'm posting this on the right place, either.

I'm dividing this guide in two parts, so if I linked you from a modding page into here, you should only check the second topic.


The basics of the invisible slider



So what are these invisible objects?
Making it simple, they're sliders with a negative length.

About ~1,5 years ago, someone made this great post describing all the effects of messing up with a slider's length. In there, it was already described how negative length sliders are formed, and how they break the maps.

Even though I tried to know exactly what are invisible sliders & how they are formed, simply way too lazy to look at the code and give a precise answer. But if you want to do it, feel free to do so.
If I were to give an explanation,
I would say that sliders first have their sliderbody calculated, and then the game decides the position of the sliderhead/slidertail. But since our invisible object is a slider with negative length, it has no sliderbody, which causes it to neither have any sliderhead nor slidertail. But this is just speculation, so don't take my word for it, since it might not be accurate.



How to create invisible sliders?
Edit the sliderlength on your .osu file.

All the beatmap information is registered on the .osu file of your beatmap. You can access that file by either going into the beatmap folder, or going to the editor -> File -> Open .osu in notepad.

When editting your .osu file, go to [Hitobjects]. You will find multiple lines - Each line represents a hitobject.
The sliderlength is given by the last number in a slider, so for example, this slider:
144,191,110,2,0,B|317:147|347:186,1,249.375

Has a sliderlength of 249.375 units. By setting this number to a very high value, you get a distorted slider(as seen on the winning aspire entry of last year). By setting it to any negative value, will give you our desired object: An invisible slider. Like so:
144,191,110,2,0,B|317:147|347:186,1,-1


How to use these objects in my beatmap?
As any other hitobject, but keep in mind the invisible sliders flaws, which I will be covering in the next topic.

As you can imagine, those objects are invisible, so you need to give indications on where the player should click in it through another ways. A good suggestion is through storyboard or background video, but that could also be suggested through other hitobjects.
Examples of maps that uses storyboard to indicate where the position of those objects are Aleph-0, Two-torial and Disconnected Hardkore.



The flaws of this technique



They have a different hitwindow
That is compensated by giving the sliders an offset.

All sliders have, by default, a different hitwindow. It's normal to hit the sliderhead and receive 300s, despite having clicked on them during the 100/50 hitwindow. Clicking way too early on a sliderhead also results in a "miss", breaking your combo and not registering your click.
However, invisible sliders don't have a normal hitwindow.
If you click way too early into them, it works the same way as a slider.
However, after the +0ms mark(The precise time the hitobject is on the map), it gives a miss instantaneously.

If I were to guess the reason for that,
I would say its because a slider ends on a slidertail, and after that point your clicks shouldn't be registered anymore. But again, I didn't look at the code enough to conclude that.


This is the hitwindow of a negative length slider.



Hitwindow of negative length sliders on the editor's timeline.


To solve this issue, you can take the current value of the hitwindow, divide if by two - To get the "clickable" hitwindow. Then, you divide this value by two once again - Since half of that value is going to determine for the time the player can hit earlier and the other half for the time the player can hit later on the note. Finally, move the note by that value. This way, the "clickable" hitwindow will be on be on the exact middle of the note.
tl;dr: Get the value of your hitwindow(in yellow on the second image), divide it by four, move the hitobject by that value.


For example, on OD10,
The hitwindow is ±99,5ms for 50s. Meaning that you can hit the object +99,5ms to get a 50 or -99,5ms to get a 50. That is a 199ms hitwindow. (-99,5ms, +99,5ms)

But on our invisible slider, that value is divided by two, since half of it is not registered due to magic.
So our new hitwindow is (-99,5ms, +0ms)

To compensate that, divide 99,5ms by two, and move the hitobject by that value.
Making our new hitwindow (-49,75ms, +49,75ms)

So if you had a hitobject at t: 4000 on an OD10 map, you need to move it to 4049,75.
Since there's no way of using decimals, just round it to 4050ms.


Just keep in mind that there's no way to get a "50" or a "100" from an invisible slider.
Again, always when hitting early on a slider, you always get a 300. Meaning our hitwindow is ±49,75ms for 300s. If you hit it ±50ms, however, it gives a miss.

Checking the overall difficulty chart, you can easily get the value of your offset.
Another example is OD0, ±199,5ms, so the whole hitwindow is around 400ms. Dividing that by four, it's around 100ms for our offset.
A hitobject at t: 1000 needs to be placed at t: 1100 to compensate the weird hitwindow.

Although this is a fix for the issue, it doesn't change the fact that the hitwindow is still halved.


The hitsound of the sliderhead plays at the same time as the slidertail
It is highly recommended to just mute the hitsounds of invisible sliders.

After some testing, it appears that is impossible to avoid this one. Unless you want the player to hear hitsounds twice(which is slightly annoying). This one doesn't really have a fix to it, even though you could storyboard the hitsounds as sound samples, and mute the hitsounds of the invisible sliders.

You can see how to add storyboarded sound samples by using the specifications in this page.





I guess that's everything. Doing this in case anyone screws up their aspire entry for 2018. Even though it's a bit late, since the competition is going to end within a few days. Oh welp, better late than never.
Tell me in case I messed something up, or in case something needs to be updated.
Lott
"After some testing, it appears that is impossible to avoid this one. Unless you want the player to hear hitsounds twice(which is slightly annoying). This one doesn't really have a fix to it, even though you could storyboard the hitsounds as sound samples, and mute the hitsounds of the invisible sliders."

I have a way to fix it. You can put a green line on the invisible hitobject, set the hitsound volume as the current hitsound volume divide by 2. For example, if the hitsound is currently have a 80% volume, set the volume of the green line on the invisible hitobject as 40%. If it doesn't divisible to 2, you can round it, and if it has get to 5% (the minimum), you can get to notepad, and change like this:

The volume
|
V
123456,-50,4,1,0,8,0,0
After change:
123456,-50,4,1,0,4,0,0

I hope this was useful! Thank you for anyone who read and use this!
show more
Please sign in to reply.

New reply