Not only is this simpler, but it also is more correct (for explanation
why, try holding both shift keys while dragging, and just releasing one
of them - the previous code would briefly turn aspect ratio off).
Closes https://github.com/ppy/osu/issues/28216.
The affected user's database contained six sentakki scores with an empty
hash. When an online score is being imported, an online model (which
does not have a hash) will be transmogrified into a `ScoreInfo` with
an empty hash, which would end up accidentally matching those scores
and basically breaking everything at that point.
To fix, avoid attempting to match anything on empty hash. This does not
break online score matching because for those cases the actual online ID
of the score will be used.
Closes https://github.com/ppy/osu/issues/28215.
`drawable.Position` is a location in the parent's coordinate space, and
`drawable.OriginPosition` is in the drawable's local space and
additionally does not take scale into account.
Closes https://github.com/ppy/osu/issues/28209.
Yes this means that such scores will have a zero total score without
mods in DB and thus might up getting their total recalculated to zero
when we try a mod multiplier rebalance (unless we skip scores with zero
completely I suppose). I also don't really care about that right now.
This is enforced by the localisation analyser after
https://github.com/ppy/osu-localisation-analyser/pull/62, but it appears
the analyser was never actually bumped game-side after that change and
I'm not super sure why, as there does not appear to be a reason to _not_
do that. So this commit does it.
Noticed via `osu-resources` build warnings.
There are also a few other warnings about
https://github.com/ppy/osu/pull/27472. Seems something in crowdin
innards may still be exporting those strings even though they have been
fixed already. Not sure how to address that.
Probably need these to be detected via static analysis at this point
since it's happened again. Might look into the feasibility of making
that happen.