The fix is just disabling the animation. It works I guess.
---
- Closes https://github.com/ppy/osu/issues/37042
Currently in Mania, you can change the scroll speed for a brief period
during the beginning of a song. However this scroll speed change occurs
over a short period of time, which causes a bunch of extra hit object
updates, causing major fps and latency drops.
This fix simply replaces the dampening with an immediate scroll speed
update. Since the scroll speed can only be updated for a short time at
the beginning of the song, providing immediate visual feedback on the
scroll speed makes sense to me. However another potential solution would
be to filter the TimeRange Value updates to keep the gradual scroll
speed visual change, while greatly reducing the number of updates to the
hit objects currently on screen.
If there is any feedback I would greatly appreciate it as this is my
first issue here. I had ran both inspectCode.ps1 and the code formatter
before creating the merge request. Thank you.
Before fix:
https://github.com/user-attachments/assets/55e30894-7341-414a-af2e-2ec051c3a252
After fix:
https://github.com/user-attachments/assets/c085d33f-c0ae-45dd-8131-e79a5682b9ca
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
In discussions, we've come to the conclusion to attempt to use a
chat-bubble system to minimise the effective area of the chat. In
particular, the results screen doesn't give us enough space to display
the full chat box without overlapping the main screen content.
This PR both adds the chat to the results screen, and reworks it to use
such a bubble system (not sure what to call it, IM style?).
https://github.com/user-attachments/assets/a8a88c51-8a9d-4a03-92b6-621112a15a41
- New messages are previewed for 3 seconds.
- When focusing and unfocusing the textbox, the history moves into
expanded state (show the most recent 10 messages) or collapsed state
(fade messages out ASAP).
This is a bit of an initial implementation to get a feel of how it
behaves, and there's more that can be done such as adding colours,
improving the transforms, perhaps adding it to the intro screen
(post-animation) but the structure's a bit weird atm.
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
This was mentioned in vivi's feedback. Basically now the card backside
is always loaded and there, rather than faffing with switching the
content around.
> Cards have a stale grey background when they are spawning in before
they get changed into the cards they’re supposed to be. This can be
changed to the backside of the card or maybe a bright white card. Makes
it look less placeholdery.
Keeping it simple for now. Can probably hide it when not in use in the
future.
Man this "storyboard replaces background" baloney has taken hours of
bugfixing alone. So many forehead indentations from stepping onto this
stupid rake.
This still fails in one more case: when you download a no-video variant
of a beatmap that has video, but then edit it, all of the flags on
storyboard will claim that the beatmap has a storyboard that replaces a
background, but the video asset is missing, so the background will still
be black. There's currently no way to check for this and the simplest
way to address this as far as I can see would be reverting
https://github.com/ppy/osu/pull/37038 and going with the non-refactor
route to fix https://github.com/ppy/osu/issues/36875 instead. The
alternative is adding all sorts of weird jingles and checks in the
storyboard machinery that can be used to be able to tell that a video
was supposed to be present in the storyboard but is missing.
Also when entering editor on a map that has background video and
storyboard enabled the background will be black until you hit play.
Something to do with `Video` idiosyncrasies for sure.
Closes https://github.com/ppy/osu/issues/37104 maybe? Kind of?
Partially? I don't know. This is all very low effort because I'm not
confident about digging this ditch any deeper, but just PRing a direct
revert would feel pretty offensive I guess?
- Simplifies track handling by not attaching to the global beatmap, not
looping, and moving into `GameplayWarmupScreen` where the beatmap is
set.
- The main idea here is that the transition period until gameplay is so
short (~10 seconds) that we don't need to account for the track ever
looping in the first place.
- Fixes the track not playing from its preview point (feedback item
mentioned in some meeting a while back).
This is definitely going to conflict with @nekodex 's work, sorry about
that. It's a bit of a much-of-a-muchness change (imo) if the conclusion
is to wait for ongoing work first.
Updates can fail on macOS when osu! is run outside /Applications or
~/Applications, but users currently get no actionable guidance.
Add a startup notification that warns when the install location is
outside those directories, and skip this check for package-managed
installs where in-app updates are not used.
Resolves#36662.
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
Addresses https://github.com/ppy/osu/discussions/37090.
Filename and format almost match stable with the exception of:
- adding `chat-` prefix to export filename to distinguish from
everything else in the `exports` folder
- adding date to message timestamps as stable writes time only
Specifically the one used on the daily challenge screen. Was bugging me
that playlists/multi have that old yellow header design used, so I've
changed it. Will probably come in handy once the footer/leaderboard
changes are in.
Also localized the headers while at it.
Multiplayer:

Playlists:

The only thing I'm wondering about is whether the detail thing
(participant count/playlist length) should be using the highlight colour
here. The old design had them be yellow, but I feel like the pink on
this one stands out too much.
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
## Changes
- Extract / Move l10n initialisation methods
- Add analyser support for tournament project
For the tournament client, it's a bit different around l10n
initialisation compared with the main client. `TournamentGame` needs to
show warning boxes for bracket errors and window size warnings, and we
may make l10n support ready in advance.
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
Closes https://github.com/ppy/osu/issues/37006 visually.
Note that this adds a brief fade in on entering `PlayerLoader` from
`OnlinePlayScreen`s due to actually loading the background at this
point. I think this is fine.
TL;DR the clock was being set too late, causing more transforms to be
created than necessary.
This solves the issue by way of a refactor (sorry). Overall this should
simplify handling of things as more of the logic is shared with the
known good-state `BeatmapBackgroundWithStoryboard`.
I did try without a refactor (just delaying the creation until the clock
arrives) but this version made more sense because background generally
expect to do their main load in BDL to aid in smooth transitions. And we
can't get the clock by there. (although arguably we could just use a
similar method to `BeatmapBackgroundWithStoryboard` and forego using the
editor clock).
Of note, I removed the black background overdraw hack. There are edge
cases where it will lead to weird transitions, but these are far and few
between. Basically you need a storyboard which sets the flag to hide the
beatmap background and has transparency in it. This is no longer as
flagrantly bad as things used to be (which led to the inline fix) as far
as I can tell, but feel free to prove me wrong. If this is a blocker
I'll probably just add a permanent black box (which does fix this).
Closes#36875.
The compatibility export was creating .osu files with CRLF line endings
on Windows and LF line endings on Linux/macOS, because StreamWriter
defaults to Environment.NewLine.
This caused the server to detect spurious file changes when a mapper
alternated between platforms, leading to unnecessary wipes of local
scores and noise in the beatmap update history.
Fix by explicitly setting NewLine = "\r\n" on the StreamWriter, ensuring
CRLF is always used regardless of platform.
Closes#36846
---------
Co-authored-by: Dean Herbert <pe@ppy.sh>
Fixes https://github.com/ppy/osu/issues/29223
This fixes several issues around hold note dimming.
Notice in the following video:
- The tail piece of the first note not getting dimmed.
- The body of the second note not responding to dimming at all.
https://github.com/user-attachments/assets/8e51053d-8d88-4e48-909b-79218d65917b
Then, notice in the following video:
- The body piece of the second note is dimmed from the very beginning.
https://github.com/user-attachments/assets/a514c630-5c72-4ba5-96d5-472bae1058b3
This requires a specific setup whereby the hold note and its components
must be reused from the pool. In particular:
1. The hold note must be long. So long that by the time the tail becomes
on screen, the body will already have dimmed.
2. The hold note must be re-used from the pool. We can induce this by
setting the pool sizes to 1 in
[`Column.cs`](https://github.com/ppy/osu/blob/780ce2666099c22d1e0673cafab544418b5d14b0/osu.Game.Rulesets.Mania/UI/Column.cs#L121-L123).
3. The second hold note should be placed far enough in the timeline that
the first hold note dies by the time it becomes visible.
4. Scroll speed should be adjusted to fit the above constraints.
I haven't done a full deep dive into exactly _why_ this is happening, so
the fix here is hand-wavy. That said, just by looking at the old code in
`LegacyBodyPiece` you'll get a feeling that something's bound to go
wrong;
- It never resets the `missingFadeTime` state.
- It never resets the colours back to `Color4.White`.
- It applies transforms onto external components.
- It jumps through hoops to figure out how to set `missingFadeTime`.
My hope is that these changes first bring some sanity in the process,
and if it breaks again I'll consider doing a more proper root cause
(I've had this issue in the back of my mind for about 1 year).
With this PR, they now behave as expected:
https://github.com/user-attachments/assets/140b37c5-cf84-44ba-b797-86ac6d8130c8https://github.com/user-attachments/assets/6f2342a4-6a9a-4941-a55a-24a357f27c25
Fixes#36645
The IsolatedPhrase match mode in FilterCriteria used \s (whitespace) as
word boundaries, meaning a search term had to be surrounded by spaces
(or start/end of string) to match.
This caused songs with titles like
'Music Theme "Some Artist"' to not appear when searching for "Some
Artist", since the phrase was bounded by quote characters rather than
spaces.
This change extends the boundary pattern to also accept Unicode
punctuation (\p{P}) alongside whitespace, so terms surrounded by quotes,
commas are correctly matched as isolated phrases.
Tests have been added to cover searching for terms adjacent to
punctuation boundaries
(TestCriteriaMatchingTermsAdjacentToPunctuation).
Tests cover the example mentioned above.
Code inspector with no errors and tests passing.
Initially reported on
[discord](https://discord.com/channels/188630481301012481/1097318920991559880/1481649645167054878).
`return` instead of `continue` led to the loop exiting too early if
there was an `EffectControlPoint` in the list before a
`TimingControlPoint`.
Behaviour can be reproduced with topdiff on this
[mapset](https://osu.ppy.sh/beatmapsets/1884175#osu/4027941). When
opened, all timing points on kiai start don't show up in the timeline.
If you disable/enable the effects section on one of those timing points
the order changes and it becomes visible again.
Right click is a very obfuscated UX which most users won't find. This
makes more sense to the average user (probably).
Caveat: clicking away actually sends clicks to underlying UI. This is
not the case in macOS or windows (locally, same app; globally it still
sends clicks to other windows).
Coming from https://github.com/ppy/osu/discussions/36926.
---------
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
1% is not precise enough to push accuracy to high enough levels.
Increasing the precision of the mod will make it more useful for a
larger amount of players who want to push their accuracy to their
absolute limits. This does come with the caveat that it's impossible to
achieve over 99.9% accuracy on many short maps, but I don't think it
really matters if high enough settings act like the Perfect mod on short
enough maps.
Co-authored-by: evill <jlkdsf;ajfklsjd@123.n>
https://github.com/user-attachments/assets/042311f1-b8c3-479b-a173-13b93fe2c5cc
- `/roll` command is now supported in multiplayer chat for all players
(don't need to be a referee).
- Referees are shown in the room with a special status.
- Tournament mode rooms can be locked, which prevents users from
changing team (and slot, whenever those get brought back). When the room
is locked, the user team indicator shows a padlock icon on top to
indicate the lock state.
---
- Related: https://github.com/ppy/osu-server-spectator/issues/406
Grab-bag because I really don't think splitting this into 3 PRs is very
helpful.
I was going to add an animation for rolling but I had a go on Friday and
my attempt got more or less the same reception as a wet fart so I'm not
trying again. Someone else can if so inclined. I have completely lost
trust in my design senses.
Contrary to stable the roll results are completely ephemeral and go away
when the room is re-entered. This could be both considered good and bad.
Not for me to say.
I noticed that going into the dashboard overlay currently requests
global user presence, which is not required for the friends display.
This could create additional load (client and server) where unnecessary.
Based on feedback I've heard more than once ([most
recently](https://github.com/ppy/osu/discussions/36933)), there's too
much overlap compared to stable. And it can sound a bit "jumbled" as a
result, especially when transitioning between two songs with loud and
"complex" audio.
This also fixes noticeable audio glitching that some users may have been
experiencing when switching tracks.
---
Unless there's any very loud objections, I'd ask that review is on the
code not the audible change. This is the kind of change that I tweak to
my personal spec and then push out to hear the general reaction.
### b8d0dfe2ed Better default preview time
based on global fade
This is an oversight. The preview point wasn't being offset to account
for the fade in. This is something we do when generating web-side
previews, which allows for the actual preview point to be audible,
rather than mid-fade.
### 8de323b68c Adjust fade in and fade out
during track transitions to reduce overlap
Yes, I'm aware that the delay is not accounted for in the constant. This
is intentional because it sounds better. I want this to be an internal
adjustment which is not to be considered by any external usages of those
constants. Just sounds better.
### aab01b0fe5 Remove weird/dated schedule
usage
This causes audible artifacts in playback. The track is not set to zero
volume early enough. Original change was made in [this ancient
PR](https://github.com/ppy/osu/pull/9792) (see
[commit](https://github.com/ppy/osu/commit/688e4479506645bdacee7cdc7ae9ee9deaa5f1b4)).
The original failure does not occur. Tests still pass. I'd argue that if
we encounter this again, it's an issue at the call site, not this code.
This is a drive-by fix, as I noticed this glitching while working on the
main issue here. Arguably should be it's own PR 🤷 .
Arguably we should just nuke the now playing overlay playlist window
completely as the functionality was gimped when search was removed. Now
it doesn't seek to the currently playing track, nor play sequentially,
nor do anything useful.
---------
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
Suffixed tags are build releases, which are triggered manually for now
(via private project).
Tags without suffix are the ones that we want to build the nuget
packages and such.
Alternative to / closes https://github.com/smoogipoo/osu/pull/189
See also https://github.com/ppy/osu-server-spectator/pull/439
- Automatic beatmap download and notification of beatmap availability
moved to `RankedPlayBeatmapAvailabilityTracker` - now a self-contained
object to handle this miscellaneous logic.
- Beatmap set now happens when the `GameplayWarmup` screen is entered.
It's been a while.
Notes:
- `SharpCompress` usages changed a bit. Manually adjusted these, mostly
just renames or adjusted parameters.
- nUnit 3 -> 4 migrated using
https://gist.github.com/peppy/07994386d793a117350cb5f24b156585. there's
a mode in this script to update to the newer `Assert.That` syntax but it
requires fixes and couldn't really be bothered.
- DeepEqual nuked as the only usage was on a disabled test. The reason
it's disabled has been merged upstream, but it's failing for other
(realm) reasons which I don't think is worthwhile to investigate for
now.
- This bumps Moq. I think the author is back in a sensible headspace and
the new version has the stupid shit removed, so probably okay? Nice to
be on a level playing field with packages for once in a long time.
- Automapper is silly, but we've discussed this elsewhere.
- `TestRealmKeyBindingStore` failures are a wildcard, but fixed by using
a more standardised testing method. Dunno why, don't care.
---------
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
Continuation of https://github.com/ppy/osu-server-spectator/issues/406
Operations in question being:
- (un)locking rooms / `!mp (un)lock` (prevents players from changing
team, will also include slots when slots are implemented)
- rolling / `!roll` (frequently used in coin toss type situations, will
receive nice animation to go with it)