8000 Implement hold note freezing by smoogipoo · Pull Request #9909 · ppy/osu · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Implement hold note freezing #9909

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Aug 24, 2020
Merged

Implement hold note freezing #9909

merged 12 commits into from
Aug 24, 2020

Conversation

smoogipoo
Copy link
Contributor

Resolves #8754

  • If the head is hit and a release has not occurred, the head "freezes" onto the hit target and the body gets shortened.
  • If the hold note is released, it continues scrolling past the hit target forevermore. I'm unsure whether to tie this to having broken on the hold note, but I didn't since right now ticks are sparse enough to the point where a hold can jump from off-screen to on-screen.
  • If the head is missed, the hold note also continues scrolling past the hit target forevermore.

There are two main components to this:

  1. The body needs to resize, and the head's position needs to move along with it.
  2. The tail needs to be masked along with the body. Without masking the tail you get this sort of effect:
    image

It looks a little hacky but I think it makes sense? Suggestions accepted.

@bdach
Copy link
Collaborator
bdach commented Aug 19, 2020

So while the freezing part works pretty cool, what I'm not entirely sold on is scaling down the long note background sprite's height when the head is frozen. On skins that don't have, for a lack of a better phrasing, vertical tonal variation, that works well. But on some skins, like this one, shrinking the height of the long note background looks super off and would probably look a lot better if the texture was the same height, but clipped.

@smoogipoo
Copy link
Contributor Author

Ah you're right about that, good catch! This needs to have another set of masking logic, hmmmmm...

Maybe that's a good thing though, it sounds like it may be possible to combine the tail + body masking and simplify some of this code.

@pull-request-size pull-request-size bot added size/M and removed size/L labels Aug 21, 2020
@smoogipoo
Copy link
Contributor Author

Took me a little while, but I've changed it to use masking. See if that works better for your skin!

Copy link
Collaborator
@bdach bdach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked a few skins, and this definitely looks a lot better across the board - nice work 👍 I think I also get how this works. Mostly a few nits/comment things left.

Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
bdach
bdach previously approved these changes Aug 21, 2020
@enoslayd
Copy link
enoslayd commented Aug 21, 2020

I don't know if i should make an issue even if this isnt merged yet but head notes "bounces" when a map has svs

edit:
(https://osu.ppy.sh/beatmapsets/113283#mania/293926 around 00:10)
(https://osu.ppy.sh/beatmapsets/157896#mania/391999 around 00:25)

@bdach
Copy link
Collaborator
bdach commented Aug 21, 2020

no, there is no point opening issues about prs that aren't merged yet

@smoogipoo
Copy link
Contributor Author
smoogipoo commented Aug 21, 2020

So I've fixed the bouncing but I've left it untested because it seems quite complicated to do so. Ideally TestSceneHoldNoteInput would be used for this but:

  • Need to enforce some scrolling direction otherwise tests could potentially fail.
  • Doing so requires creating a RulesetConfigCache and somehow caching that prior to the DrawableRulesetDependencies of the base OsuTestScene (something we've never done before).

If you really want me to make a test for this please say, but it's going to take some time. I think the reasoning is logical though - time is a linear scale whereas position is non-linear, so position has to be used to figure out the reduction in height.

@bdach
Copy link
Collaborator
bdach commented Aug 21, 2020

fwiw the fix instantly made sense to me as I read it, so as far as I'm concerned I wouldn't insist on a test. I've also tested on one of the beatmaps linked above and it seems good.

Copy link
Collaborator
@bdach bdach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

playtested, seems good - hopefully this approve will stick

@smoogipoo smoogipoo deleted the hold-note-freeze branch May 21, 2021 07:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Long Notes do not mask away (at the judgement line) when being hit
4 participants
0