3 Commits

Author SHA1 Message Date
43f3a506ea new icon + default logo color 2025-11-11 00:04:18 +03:00
ab51579c27 added quit w/ replay button to pause menu; minor visual changes for ranks 2025-11-10 22:39:10 +03:00
d8e977c05f minor changes to mod scoring, all mods are ranked now
Probably all user-playable mods are ranked by default now,
Mania key mods were reverted to 1.0x score multiplier
2025-11-10 18:52:07 +03:00
18 changed files with 72 additions and 32 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 401 KiB

View File

@@ -14,8 +14,8 @@ namespace osu.Game.Rulesets.Mania.Mods
public override string Acronym => Name;
public abstract int KeyCount { get; }
public override ModType Type => ModType.Conversion;
public override double ScoreMultiplier => 0.9;
public override bool Ranked => UsesDefaultConfiguration;
public override double ScoreMultiplier => 1;
public override bool Ranked => true;
public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
{

View File

@@ -14,6 +14,5 @@ namespace osu.Game.Rulesets.Mania.Mods
public override string Acronym => "1K";
public override IconUsage? Icon => OsuIcon.ModOneKey;
public override LocalisableString Description => @"Play with one key.";
public override bool Ranked => false;
}
}

View File

@@ -14,6 +14,5 @@ namespace osu.Game.Rulesets.Mania.Mods
public override string Acronym => "10K";
public override IconUsage? Icon => OsuIcon.ModTenKeys;
public override LocalisableString Description => @"Play with ten keys.";
public override bool Ranked => false;
}
}

View File

@@ -14,6 +14,5 @@ namespace osu.Game.Rulesets.Mania.Mods
public override string Acronym => "2K";
public override IconUsage? Icon => OsuIcon.ModTwoKeys;
public override LocalisableString Description => @"Play with two keys.";
public override bool Ranked => false;
}
}

View File

@@ -14,6 +14,5 @@ namespace osu.Game.Rulesets.Mania.Mods
public override string Acronym => "3K";
public override IconUsage? Icon => OsuIcon.ModThreeKeys;
public override LocalisableString Description => @"Play with three keys.";
public override bool Ranked => false;
}
}

View File

@@ -42,7 +42,7 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.Ruleset, string.Empty);
SetDefault(OsuSetting.Skin, SkinInfo.ARGON_SKIN.ToString());
SetDefault(OsuSetting.MenuCookieColor, Colour4.FromHex(@"ff66ba"));
SetDefault(OsuSetting.MenuCookieColor, Colour4.FromHex(@"8400FF"));
SetDefault(OsuSetting.BeatmapDetailTab, BeatmapDetailTab.Local);
SetDefault(OsuSetting.BeatmapLeaderboardSortMode, LeaderboardSortMode.Score);

View File

@@ -53,7 +53,7 @@ namespace osu.Game.Online.Leaderboards
Spacing = new Vector2(-3, 0),
Padding = new MarginPadding { Top = -5 },
Colour = GetRankLetterColour(rank),
Font = OsuFont.TorusAlternate.With(size: 42, weight: FontWeight.SemiBold),
Font = OsuFont.TorusAlternate.With(size: 40, weight: FontWeight.Bold),
Text = GetRankLetter(rank),
ShadowColour = Color4.Black.Opacity(0.3f),
ShadowOffset = new Vector2(0, 0.08f),
@@ -72,12 +72,14 @@ namespace osu.Game.Online.Leaderboards
switch (rank)
{
case ScoreRank.SH:
return @"S";
return @"S+";
case ScoreRank.X:
case ScoreRank.XH:
return @"SS";
case ScoreRank.XH:
return @"SS+";
default:
return rank.ToString();
}

View File

@@ -1729,12 +1729,13 @@ namespace osu.Game
{
case IntroScreen intro:
introScreen = intro;
SimpleNotification notification = new SimpleNotification
{
Text = ButtonSystemStrings.GreetingNotification,
Transient = true,
};
Notifications?.Post(notification);
// SimpleNotification notification = new SimpleNotification
// {
// Text = ButtonSystemStrings.GreetingNotification,
// Transient = true,
// PopInSampleName = "",
// };
// Notifications?.Post(notification);
devBuildBanner?.Show();
break;

View File

@@ -30,19 +30,19 @@ namespace osu.Game.Overlays
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
Font = OsuFont.Torus.With(size: 12),
Font = OsuFont.Torus.With(size: 15, weight: FontWeight.Bold),
Colour = colours.GrayF,
Text = $@"jvnkosu! " + game.Version,
Y = -12,
},
new OsuSpriteText
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 15),
Colour = colours.Yellow,
Text = "Experimental version",
Text = $@"jvnkosu! " + game.Version + (game.IsDeployedBuild ? "" : " • Experimental version"),
Y = -3,
},
// new OsuSpriteText
// {
// Anchor = Anchor.BottomCentre,
// Origin = Anchor.BottomCentre,
// Font = OsuFont.Torus.With(weight: FontWeight.Bold, size: 15),
// Colour = colours.Yellow,
// Text = "Experimental version",
// },
new Sprite
{
Anchor = Anchor.BottomCentre,

View File

@@ -110,7 +110,7 @@ namespace osu.Game.Rulesets.Mods
public virtual bool RequiresConfiguration => false;
[JsonIgnore]
public virtual bool Ranked => false;
public virtual bool Ranked => true;
/// <summary>
/// The mods this mod cannot be enabled with.

View File

@@ -23,6 +23,8 @@ namespace osu.Game.Rulesets.Mods
public sealed override bool UserPlayable => false;
public sealed override bool ValidForMultiplayer => false;
public sealed override bool ValidForMultiplayerAsFreeMod => false;
public override bool Ranked => false;
public override Type[] IncompatibleMods => new[] { typeof(ModCinema), typeof(ModRelax), typeof(ModAdaptiveSpeed), typeof(ModTouchDevice) };

View File

@@ -31,6 +31,7 @@ namespace osu.Game.Rulesets.Mods
public override LocalisableString Description => "Watch the video without visual distractions.";
public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(ModAutoplay), typeof(ModNoFail), typeof(ModFailCondition) }).ToArray();
public override bool Ranked => false;
public void ApplyToHUD(HUDOverlay overlay)
{

View File

@@ -18,11 +18,13 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Input.Bindings;
using osuTK;
using osuTK.Graphics;
using osu.Game.Localisation;
using osu.Game.Utils;
using System.Runtime.InteropServices;
namespace osu.Game.Screens.Play
{
@@ -40,6 +42,7 @@ namespace osu.Game.Screens.Play
public Action? OnResume { get; init; }
public Action? OnRetry { get; init; }
public Action? OnQuit { get; init; }
public Action? OnQuitReplay { get; init; }
/// <summary>
/// Action that is invoked when <see cref="GlobalAction.Back"/> is triggered.
@@ -69,6 +72,8 @@ namespace osu.Game.Screens.Play
[Resolved]
private GlobalActionContainer globalAction { get; set; } = null!;
private ShearedButton saveReplay { get; set; } = null!;
protected GameplayMenuOverlay()
{
RelativeSizeAxes = Axes.Both;
@@ -90,7 +95,7 @@ namespace osu.Game.Screens.Play
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Vertical,
Spacing = new Vector2(0, 50),
Spacing = new Vector2(0, 25),
Origin = Anchor.Centre,
Anchor = Anchor.Centre,
Children = new Drawable[]
@@ -118,6 +123,15 @@ namespace osu.Game.Screens.Play
Radius = 50
},
},
saveReplay = new ShearedButton
{
Text = "Quit and save replay",
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Height = 32,
Colour = colours.PurpleLight,
// Visibility = false
},
playInfoText = new OsuTextFlowContainer(cp => cp.Font = OsuFont.GetFont(size: 18))
{
Origin = Anchor.TopCentre,
@@ -138,6 +152,12 @@ namespace osu.Game.Screens.Play
if (OnQuit != null)
AddButton(GameplayMenuOverlayStrings.Quit, new Color4(170, 27, 39, 255), () => OnQuit.Invoke());
if (OnQuitReplay != null)
{
// saveReplay.Visibility = true;
saveReplay.Action = () => OnQuitReplay.Invoke();
}
State.ValueChanged += _ => InternalButtons.Deselect();
updateInfoText();

View File

@@ -516,6 +516,7 @@ namespace osu.Game.Screens.Play
Retries = RestartCount,
OnRetry = () => Restart(),
OnQuit = () => PerformExitWithConfirmation(),
OnQuitReplay = () => PerformExitReplay()
},
},
};
@@ -701,6 +702,20 @@ namespace osu.Game.Screens.Play
return true;
}
// XXX: replays saved from pause screen, when played back, will continue playing past the point player quits
// unfixable because it's not possible to manually trigger a failure in a way that would be recorded (w/o using a mod)
protected void PerformExitReplay()
{
// manually triggering a failure in a messy manner to avoid score submission
GameplayClockContainer.Stop();
GameplayState.HasFailed = true;
updateGameplayState();
ConcludeFailedScore(Score);
prepareAndImportScoreAsync(true);
PerformExit();
}
private void performUserRequestedSkip()
{
// user requested skip

View File

@@ -49,7 +49,7 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
Spacing = new Vector2(-15, 0),
Text = DrawableRank.GetRankLetter(rank),
// Font = OsuFont.Numeric.With(size: 76),
Font = OsuFont.TorusAlternate.With(size: 128, weight: FontWeight.Bold),
Font = OsuFont.TorusAlternate.With(size: 100, weight: FontWeight.Bold),
UseFullGlyphHeight = false
},
superFlash = new BufferedContainer(cachedFrameBuffer: true)
@@ -89,7 +89,7 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
Origin = Anchor.Centre,
Spacing = new Vector2(-15, 0),
Text = DrawableRank.GetRankLetter(rank),
Font = OsuFont.Numeric.With(size: 76),
Font = OsuFont.TorusAlternate.With(size: 100, weight: FontWeight.Bold),
UseFullGlyphHeight = false,
Shadow = false
},

View File

@@ -393,7 +393,7 @@ namespace osu.Game.Screens.SelectV2
Origin = Anchor.Centre,
Spacing = new Vector2(-2),
Colour = DrawableRank.GetRankLetterColour(Score.Rank),
Font = OsuFont.Numeric.With(size: 14),
Font = OsuFont.TorusAlternate.With(size: 24, weight: FontWeight.Bold),
Text = DrawableRank.GetRankLetter(Score.Rank),
ShadowColour = Color4.Black.Opacity(0.3f),
ShadowOffset = new Vector2(0, 0.08f),

View File

@@ -770,6 +770,9 @@ namespace osu.Game.Users
[Description("Samoa")]
WS,
[Description("Gensokyo")]
XG,
[Description("Kosovo")]
XK,