73 Commits

Author SHA1 Message Date
17d56f8db0 now completely in sync with master 2025-12-16 20:22:38 +03:00
9637ea1df7 again**2 2025-12-16 19:51:36 +03:00
0940d61f7e try again 2025-12-16 19:47:28 +03:00
e6a6352a9c sync with master fully 2025-12-16 19:39:40 +03:00
Dean Herbert
734c6f933d Merge pull request #36020 from bdach/fail-indicator-right-sound
Fix replay fail indicator not using fail sample from beatmap skin
2025-12-17 01:15:22 +09:00
Dean Herbert
ac213c90cb Merge pull request #36023 from bdach/report-message-pm
Adjust message on successful report to match bancho
2025-12-16 23:52:31 +09:00
Bartłomiej Dach
74ca87c252 Merge pull request #36009 from frenzibyte/fix-skip-button
Fix skip overlay potentially not allowing skipping
2025-12-16 14:58:43 +01:00
Bartłomiej Dach
032912e62b Adjust message on successful report to match bancho
Addresses https://github.com/ppy/osu/discussions/36004.

Not adding localisation because the previous implementation was
`.ToString()`ing anyway.

Would have made the abuse e-mail a link but `mailto:` doesn't work with
`MessageFormatter` and I don't want to go into that right now.

The message *almost* matches stable. The "almost" is because it doesn't
mention the `/ignore` chat command. I was just going to implement the
command, but I went to check what it does, and backed away slowly
because it has like weird scoping to chat, highlights, and PMs, so
`nope.avi`.
2025-12-16 11:20:54 +01:00
Bartłomiej Dach
1e79c56240 Fix replay fail indicator not using fail sample from beatmap skin
Closes https://github.com/ppy/osu/issues/36003.

The duplicated `RulesetSkinProvidingContainer` is unfortunate but it's
either this or I start doing proxy shenanigans.
2025-12-16 09:48:10 +01:00
Dean Herbert
82256ae2de Merge pull request #34807 from mcendu/legacy-pp-counter
Add "legacy" pp counter
2025-12-15 20:24:04 +09:00
Dean Herbert
1142be45ec Update resources 2025-12-15 19:22:11 +09:00
Dean Herbert
dcb6d71287 Adjust constant and documentation slightly 2025-12-15 19:07:46 +09:00
Salman Alshamrani
881a35b382 Fix skip overlay potentially not allowing skipping 2025-12-15 03:54:09 -05:00
Dean Herbert
89d8b402af Merge branch 'master' into legacy-pp-counter 2025-12-15 16:55:51 +09:00
Dean Herbert
1d351002df Merge pull request #36005 from smoogipoo/update-packages
Update localisation analyser packages
2025-12-15 16:15:37 +09:00
Dean Herbert
2606f3a0b5 Merge pull request #35980 from smoogipoo/qp-ux-fixes
Various minor quick play UX fixes
2025-12-12 19:20:17 +09:00
Dan Balasescu
1c463aa060 Automatically accept invitation in queue screen 2025-12-12 18:26:52 +09:00
Dan Balasescu
7853abe8aa Move to queue screen when clicking notification 2025-12-12 18:13:00 +09:00
Dan Balasescu
1aff418981 Reword waiting text 2025-12-12 17:57:50 +09:00
Dean Herbert
62e92bb242 Merge pull request #35971 from smoogipoo/fix-mp-screen-leave
Forcefully leave room on multiplayer exit
2025-12-12 17:06:20 +09:00
Dan Balasescu
79151ae5b4 Remove mention of exception that doesn't exist 2025-12-12 15:46:00 +09:00
Dan Balasescu
c17db2cdd0 Forcefully leave room on multiplayer exit 2025-12-11 20:07:44 +09:00
Dan Balasescu
bbdd70c843 Always perform leave room sequence 2025-12-11 20:07:36 +09:00
Bartłomiej Dach
4250a54245 Merge pull request #35969 from peppy/delay-loading-animation
Slightly delay song select leaderboard's loading placeholder to avoid flashing during local score retrieval
2025-12-11 11:54:27 +01:00
Bartłomiej Dach
40fdb8662e Merge pull request #35966 from peppy/fix-muting-after-gameplay-with-bad-network
Fix audio track potentially muting after gameplay with bad network
2025-12-11 10:57:45 +01:00
Dean Herbert
6ce8b0a4bc Slightly delay song select leaderboard's loading placeholder to avoid flashing during local score retrieval
Closes #35893.
2025-12-11 18:54:38 +09:00
Dean Herbert
b30047def6 Remove audio adjustments immediately on gameplay hotkey overlays
Closes #22164.
2025-12-11 17:57:07 +09:00
Bartłomiej Dach
0ffb86262f Merge pull request #35965 from peppy/debounce-seek-only-when-playing
Fix editor not seeking smoothly when paused
2025-12-11 08:54:36 +01:00
Dean Herbert
f71eb4b980 Debounce track seeks only when track is playing
This fixes the editor no longer seeking smoothly when paused.

Closes https://github.com/ppy/osu/issues/35963.
2025-12-11 16:00:13 +09:00
Dan Balasescu
1faf02e860 Update localisation analyser packages 2025-12-11 13:53:09 +09:00
Dean Herbert
d700375e55 Merge pull request #35843 from SollyBunny/master
Make tracked leaderboard score yellow again
2025-12-11 13:50:59 +09:00
Bartłomiej Dach
095a67c24e Fix dragging volume meter to adjust volume closing overlays if mouse is released outside of overlay content (#35940)
* Add failing test

* Fix dragging volume meter to adjust volume closing overlays if mouse is released outside of overlay content

Fixes https://osu.ppy.sh/community/forums/topics/2159553.
2025-12-11 13:47:08 +09:00
Bartłomiej Dach
86054497d0 Disable save replay on fail overlay when spectating (#35942)
"Closes" https://github.com/ppy/osu/issues/35920.

The button can't easily work anyway since it's not guaranteed that the
spectating user has all of the frames of the replay (think entering
spectate midway through a play).

This matches the results screen in spectator too.
2025-12-11 13:42:15 +09:00
Bartłomiej Dach
c4f7dee82b Fix skin editor sometimes dropping anchor/origin specification on paste (#35957)
* Add failing test for copy->paste not being idempotent

* Ensure all elements on default skins use fixed anchors

`UsesFixedAnchor` defaults to false, i.e. closest anchors. Combined with
manual anchor / origin specs on some drawables, this would get default
skins into impossible states wherein a drawable would use "closest
anchor" but also explicitly specify anchor / origin that aren't closest,
which horribly fails on attempting to copy and paste.

Frankly shocked this has gone unnoticed for this long, and I regret not
vetoing this "feature" more every time I see its tentacles spread to
produce breakage of levels yet unseen.

Does this commit contain major levels of suck? For sure. Do I have any
better ideas that wouldn't consist of a multi-day rewrite or deletion of
this "feature"? No.

* Fix skin editor always applying closest anchor / origin on paste regardless of whether the component uses fixed anchor

Self-explanatory. Should close https://github.com/ppy/osu/issues/29111
along with previous commit.
2025-12-11 13:40:48 +09:00
Bartłomiej Dach
22825f6509 Merge pull request #35958 from bdach/fix-storyboard-samples-not-playing-in-editor
Fix storyboard samples not playing in editor
2025-12-10 14:33:30 +01:00
Bartłomiej Dach
691e8bcd05 Fix storyboard samples not playing in editor
Closes https://github.com/ppy/osu/issues/35954.
2025-12-10 11:20:50 +01:00
Bartłomiej Dach
e68bab4f4b Merge pull request #35802 from Xiragi/gameplay-cursor-size-change
Fix cursor trail detaching from cursor when adjusting cursor scale
2025-12-10 07:34:08 +01:00
Bartłomiej Dach
9430a62af4 Merge pull request #35925 from rrex971/storyboard-alpha-overshoot-handling
Adjust alpha handling for values exceeding 1 for storyboard sprite transforms to match stable behavior.
2025-12-10 07:26:50 +01:00
Dean Herbert
bdac75e542 Merge pull request #31141 from DanielPower/screen-scaling-tablet-output
Scale tablet output size when UI Scaling mode is "Everything"
2025-12-10 01:40:46 +09:00
Dean Herbert
5c2df50714 Add test coverage of weird storyboard sprite behaviour 2025-12-09 19:53:02 +09:00
Bartłomiej Dach
887d280bfa Merge branch 'master' into gameplay-cursor-size-change 2025-12-09 11:51:06 +01:00
Dean Herbert
84db289779 Use modulus instead of previous solution to match stable more closely 2025-12-09 18:57:49 +09:00
Dean Herbert
4c0522b795 Update comment and fix formatting 2025-12-09 18:00:32 +09:00
Bartłomiej Dach
07ea9fe2a4 Merge branch 'master' into screen-scaling-tablet-output 2025-12-09 08:05:20 +01:00
rrex971
f73307876e Also apply alpha logic to StoryboardAnimation sprites too. 2025-12-08 02:19:29 +05:30
rrex971
4e4aa44a02 Override sprite update method to handle alpha values > 1 like stable.
If alpha exceeds 1 during a sprite's alpha transform like in a FadeTo(), it will set it to 0 mimicking stable's behavior.
2025-12-08 02:17:35 +05:30
Chirag Mahesh
a6c001244f Redundant string interpolation 2025-12-06 11:18:18 +00:00
Chirag Mahesh
107098314a Move and refactor TestSceneGameplayCursorSizeChange into Ruleset Osu Tests 2025-12-05 17:23:31 +00:00
Chirag Mahesh
d1d76a76ba Refactor trail scale update logic into a dedicated method 2025-12-05 17:23:29 +00:00
Solly
2a7e71d7fd Merge branch 'master' into master 2025-12-03 09:15:21 +00:00
SollyBunny
0b4f96efc8 Make tracked leaderboard score yellow again 2025-11-29 03:23:13 +00:00
Chirag Mahesh
78c6973298 move cursorScale persistance into OsuCursor and use skinnableCursorScale 2025-11-27 16:39:51 +00:00
Chirag Mahesh
d8d7c80832 Persist cursorScale on skin refresh 2025-11-27 16:09:50 +00:00
Chirag Mahesh
ae33690632 Implement CursorTrail Scaling
- Add CursorScale property to CursorTrail and adjust for scaling
2025-11-27 16:09:50 +00:00
Chirag Mahesh
9e2ea63e70 Revert Changes to Trail Position Calculation
- Revert changes to CursorTrail.cs made during 79bfe7880a
2025-11-27 16:09:49 +00:00
Chirag Mahesh
79bfe7880a Move LocalSpacePosition calculation until the time of render
Would address #35734
2025-11-25 07:37:23 +00:00
Bartłomiej Dach
80fbcd5fbd Move application of scaling to tablet output area to scaling container
It's the safest place for it to be there, really.
2025-11-18 14:49:01 +01:00
Bartłomiej Dach
9c2319b989 Use existing bindables instead of refetching 2025-11-18 14:40:47 +01:00
Bartłomiej Dach
a040143825 Merge branch 'master' into screen-scaling-tablet-output 2025-11-18 14:24:03 +01:00
Bartłomiej Dach
1867aad1a6 Merge branch 'master' into screen-scaling-tablet-output 2025-10-02 08:14:15 +02:00
Du Yijie
b1bc5cae87 Merge branch 'master' into legacy-pp-counter 2025-09-15 14:41:45 +08:00
Daniel Power
038bf3fdda "Conform to aspect ratio" uses scaled area 2025-08-27 20:11:28 -02:30
Daniel Power
61c3aad537 Fix conflict 2025-08-27 20:00:56 -02:30
Daniel Power
3aad0868af Remove duplicated declarations 2025-08-27 19:57:58 -02:30
Daniel Power
973c4c8319 Merge branch 'master' of github.com:ppy/osu into screen-scaling-tablet-output 2025-08-27 19:46:18 -02:30
Du Yijie
ac21f8b960 Implement "legacy" pp counter
There is no pp counter in osu!(stable). However, a "legacy" pp counter
allows skinners to more easily fit a pp counter into their skin's theme.
2025-08-27 11:07:53 +08:00
e78c8fa03d (NOT STABLE!!) Added custom mode using music from MainMenu 2025-08-23 22:54:22 +03:00
Daniel Power
0b3b6468a5 Reflect tablet output area changes in osu-framework 2025-08-16 23:02:28 -02:30
Daniel Power
7d1c54f045 Merge branch 'master' of github.com:ppy/osu into screen-scaling-tablet-output 2025-08-16 22:53:41 -02:30
Daniel Power
fd504e5641 Minor cleanup 2024-12-16 23:17:22 -03:30
Daniel Power
93ed0483b6 Fix TestSceneTabletSettings 2024-12-16 22:59:04 -03:30
Daniel Power
4dd0672aa5 Address screen scale positioning 2024-12-16 21:04:08 -03:30
Daniel Power
66eff14d2b Initial proof of concept for tablet output scaling 2024-12-16 01:17:35 -03:30
22 changed files with 157 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Testing;
using osu.Game.Configuration;
using osu.Game.Skinning;
using osu.Game.Tests.Visual;
using osuTK.Input;
namespace osu.Game.Rulesets.Osu.Tests
{
public partial class TestSceneGameplayCursorSizeChange : PlayerTestScene
{
private const float initial_cursor_size = 1f;
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
[Resolved]
private SkinManager? skins { get; set; }
[BackgroundDependencyLoader]
private void load()
{
if (skins != null) skins.CurrentSkinInfo.Value = skins.DefaultClassicSkin.SkinInfo;
}
[SetUpSteps]
public override void SetUpSteps()
{
base.SetUpSteps();
AddStep("Set gameplay cursor size: 1", () => LocalConfig.SetValue(OsuSetting.GameplayCursorSize, initial_cursor_size));
AddStep("resume player", () => Player.GameplayClockContainer.Start());
AddUntilStep("clock running", () => Player.GameplayClockContainer.IsRunning);
}
[Test]
public void TestPausedChangeCursorSize()
{
AddStep("move cursor to center", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.Centre));
AddStep("move cursor to top left", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.TopLeft));
AddStep("move cursor to center", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.Centre));
AddStep("move cursor to top right", () => InputManager.MoveMouseTo(Player.ScreenSpaceDrawQuad.TopRight));
AddStep("press escape", () => InputManager.Key(Key.Escape));
AddSliderStep("cursor size", 0.1f, 2f, 1f, v => LocalConfig.SetValue(OsuSetting.GameplayCursorSize, v));
}
protected override TestPlayer CreatePlayer(Ruleset ruleset) => new TestPlayer(true, false);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,11 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
namespace osu.Game.Configuration
{
public enum WelcomeMusicMode
{
Default,
Custom
}
}

View File

@@ -0,0 +1,12 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Online.API.Requests
{
public class GetMusicCategoriesRequest : APIRequest<APIBackgroundCategories>
{
protected override string Target => @"https://osu.jvnko.boats/welcome-music/categories";
}
}

View File

@@ -0,0 +1,21 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
using System.Net;
using osu.Game.Online.API.Requests.Responses;
namespace osu.Game.Online.API.Requests
{
public class GetWelcomeMusicRequest : APIRequest<List<APIWelcomeMusic>>
{
private readonly string category;
public GetWelcomeMusicRequest(string category)
{
this.category = category;
}
protected override string Target => $"https://osu.jvnko.boats/welcome-music/list?category={WebUtility.UrlEncode(category)}";
}
}

View File

@@ -0,0 +1,17 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using Newtonsoft.Json;
namespace osu.Game.Online.API.Requests.Responses
{
// Описывает один трек, как он приходит с сервера
public class APIWelcomeMusic
{
[JsonProperty("name")]
public string? Name { get; set; }
[JsonProperty("url")]
public string? Url { get; set; }
}
}

View File

@@ -0,0 +1,44 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Graphics;
using osu.Framework.Localisation;
using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Play.HUD;
using osuTK;
namespace osu.Game.Skinning
{
public partial class LegacyPerformancePointsCounter : PerformancePointsCounter, ISerialisableDrawable
{
protected override double RollingDuration => 1000;
protected override Easing RollingEasing => Easing.Out;
private const float alpha_when_invalid = 0.3f;
public LegacyPerformancePointsCounter()
{
Anchor = Anchor.TopRight;
Origin = Anchor.TopRight;
Scale = new Vector2(0.96f);
}
public override bool IsValid
{
get => base.IsValid;
set
{
if (value == IsValid)
return;
base.IsValid = value;
DrawableCount.FadeTo(value ? 1 : alpha_when_invalid, 1000, Easing.OutQuint);
}
}
protected override LocalisableString FormatCount(int count) => count.ToString($@"0'{LegacySpriteText.PP_SUFFIX_CHAR}'");
protected sealed override OsuSpriteText CreateSpriteText() => new LegacySpriteText(LegacyFont.Score);
}
}