diff --git a/.vscode/launch.json b/.vscode/launch.json
index 552db4e7b..fce7e9867 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -7,7 +7,7 @@
"request": "launch",
"program": "dotnet",
"args": [
- "${workspaceRoot}/osu.Game.Rulesets.Sentakki.Tests/bin/Debug/net6.0/osu.Game.Rulesets.Sentakki.Tests.dll"
+ "${workspaceRoot}/osu.Game.Rulesets.Sentakki.Tests/bin/Debug/net8.0/osu.Game.Rulesets.Sentakki.Tests.dll"
],
"cwd": "${workspaceRoot}",
"preLaunchTask": "Build",
diff --git a/README.md b/README.md
index 73f338b6b..49ba35ab1 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
![sentakki](assets/logov3.png)
-# sentakki
-
+---
[![.NET Core](https://github.com/LumpBloom7/sentakki/workflows/.NET%20Core/badge.svg)](https://github.com/LumpBloom7/sentakki/actions?query=workflow%3A%22.NET+Core%22)
[![CodeFactor](https://www.codefactor.io/repository/github/lumpbloom7/sentakki/badge)](https://www.codefactor.io/repository/github/lumpbloom7/sentakki)
[![Crowdin](https://badges.crowdin.net/sentakki/localized.svg)](https://crowdin.com/project/sentakki)
@@ -9,12 +8,23 @@
[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E01N56M)
-An attempt to recreate Sega's maimai within osu!lazer, while making it more flexible.
+sentakki is a recreation of maimaiDX for use within osu, taking advantage of the longevity and the osu ecosystem for features such as multiplayer, beatmap listing, and leaderboards.
## Status
All the essential note types have been implemented. Features like editor is being developed on the side, since lazer doesn't support third party ruleset editors yet. PP/diff calc haven't been given considered yet, and it is currently open to ideas.
+## Demo videos
+
+These charts have been ported from maimaiDX, but conversions of osu!std charts are also supported.
+|||
+|:---:|:---:|
+|||
+|||
+
+
+
+
## Trying the ruleset
Prebuilt binaries are provided for users who doesn't want to create a development environment. Releases are guaranteed to work with the latest version of lazer at the time of release.
@@ -32,7 +42,7 @@ Prebuilt binaries are provided for users who doesn't want to create a developmen
Some prerequisites are required before attempting to debug or develop:
-* A desktop platform with the .NET 5 SDK or higher installed.
+* A desktop platform with the .NET 8 SDK or higher installed.
* An IDE with support for C#, providing auto completion and syntax highlighting. I recommend using Visual Studio 2019 or Visual Studio Code.
* Other requirements are shared with osu!lazer and osu!framework
@@ -47,7 +57,7 @@ cd sentakki
To update the source code to the latest commit, run the following command inside the osu directory:
-```she
+```sh
git pull
```
diff --git a/osu.Game.Rulesets.Sentakki.Tests/UI/TestSceneResumeOverlay.cs b/osu.Game.Rulesets.Sentakki.Tests/UI/TestSceneResumeOverlay.cs
deleted file mode 100644
index 3ea7e5e40..000000000
--- a/osu.Game.Rulesets.Sentakki.Tests/UI/TestSceneResumeOverlay.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Cursor;
-using osu.Game.Rulesets.Sentakki.UI;
-using osu.Game.Screens.Play;
-using osu.Game.Tests.Visual;
-
-namespace osu.Game.Rulesets.Sentakki.Tests.UI
-{
- public partial class TestSceneResumeOverlay : OsuTestScene
- {
- protected override Ruleset CreateRuleset() => new SentakkiRuleset();
-
- public TestSceneResumeOverlay()
- {
- CursorContainer cursor;
- ResumeOverlay resume;
-
- Children = new Drawable[]
- {
- cursor = new CursorContainer(),
- resume = new SentakkiResumeOverlay
- {
- GameplayCursor = cursor
- }
- };
-
- AddStep("Show ResumeOverlay", () => resume.Show());
- AddAssert("Is overlay shown?", () => resume.State.Value == Visibility.Visible);
- AddUntilStep("Wait for countdown to end", () => resume.State.Value == Visibility.Hidden);
- }
- }
-}
diff --git a/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs b/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs
index be6a8aca6..ed7e7d86f 100644
--- a/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs
+++ b/osu.Game.Rulesets.Sentakki.Tests/VisualTestRunner.cs
@@ -10,7 +10,7 @@ public static class VisualTestRunner
[STAThread]
public static int Main(string[] args)
{
- using (DesktopGameHost host = Host.GetSuitableDesktopHost(@"osu", new HostOptions { BindIPC = true }))
+ using (DesktopGameHost host = Host.GetSuitableDesktopHost(@"osu"))
{
host.Run(new OsuTestBrowser());
return 0;
diff --git a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj
index d826c593e..a77a708bb 100644
--- a/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj
+++ b/osu.Game.Rulesets.Sentakki.Tests/osu.Game.Rulesets.Sentakki.Tests.csproj
@@ -10,9 +10,8 @@
osu.Game.Rulesets.Sentakki.Tests
-
-
-
+
+
@@ -20,7 +19,7 @@
WinExe
- net6.0
+ net8.0
osu.Game.Rulesets.Sentakki.Tests
diff --git a/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs b/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs
index ed27c5e88..ea945faff 100644
--- a/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs
+++ b/osu.Game.Rulesets.Sentakki/Beatmaps/Converter/SentakkiBeatmapConverter.Slider.cs
@@ -73,7 +73,7 @@ private SentakkiHitObject convertSlider(HitObject original)
},
Lane = lane.NormalizePath(),
StartTime = original.StartTime,
- NodeSamples = nodeSamples,
+ Samples = nodeSamples.FirstOrDefault(),
Break = headBreak
};
diff --git a/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs b/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs
index 22427c89b..7cec144cc 100644
--- a/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs
+++ b/osu.Game.Rulesets.Sentakki/Beatmaps/SentakkiBeatmapConverterOld.cs
@@ -310,7 +310,7 @@ private SentakkiHitObject createTouchNote(HitObject original)
},
Lane = noteLane,
StartTime = original.StartTime,
- NodeSamples = samples,
+ Samples = samples.FirstOrDefault(),
Break = hasBreakHead
};
}
diff --git a/osu.Game.Rulesets.Sentakki/Configuration/SentakkiRulesetConfigManager.cs b/osu.Game.Rulesets.Sentakki/Configuration/SentakkiRulesetConfigManager.cs
index fa6252280..a21cf1281 100644
--- a/osu.Game.Rulesets.Sentakki/Configuration/SentakkiRulesetConfigManager.cs
+++ b/osu.Game.Rulesets.Sentakki/Configuration/SentakkiRulesetConfigManager.cs
@@ -26,7 +26,6 @@ protected override void InitialiseDefaults()
SetDefault(SentakkiRulesetSettings.LaneInputMode, LaneInputMode.Button);
SetDefault(SentakkiRulesetSettings.SnakingSlideBody, true);
SetDefault(SentakkiRulesetSettings.DetailedJudgements, false);
- SetDefault(SentakkiRulesetSettings.BreakSampleVolume, 1.0, 0.0, 1.0, 0.01);
}
public override TrackedSettings CreateTrackedSettings() => new TrackedSettings
@@ -50,6 +49,5 @@ public enum SentakkiRulesetSettings
LaneInputMode,
SnakingSlideBody,
DetailedJudgements,
- BreakSampleVolume
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs b/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs
index bd0e357c1..b96b37437 100644
--- a/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs
+++ b/osu.Game.Rulesets.Sentakki/Judgements/SentakkiJudgementResult.cs
@@ -20,5 +20,5 @@ public SentakkiJudgementResult(HitObject hitObject, Judgement judgement) : base(
}
}
- public bool Critical { get; private set; }
+ public bool Critical { get; set; }
}
diff --git a/osu.Game.Rulesets.Sentakki/Localisation/SentakkiSettingsSubsectionStrings.cs b/osu.Game.Rulesets.Sentakki/Localisation/SentakkiSettingsSubsectionStrings.cs
index 794f29a5e..e237aba2c 100644
--- a/osu.Game.Rulesets.Sentakki/Localisation/SentakkiSettingsSubsectionStrings.cs
+++ b/osu.Game.Rulesets.Sentakki/Localisation/SentakkiSettingsSubsectionStrings.cs
@@ -43,7 +43,7 @@ public static class SentakkiSettingsSubsectionStrings
///
/// "Touch note fade-in speed"
///
- public static LocalisableString TouchNoteFadeInSpeed => new TranslatableString(getKey(@"touch_note_fade_in_speed"), @"Touch note fade-in speed");
+ public static LocalisableString TouchNoteEntrySpeed => new TranslatableString(getKey(@"touch_note_entry_speed"), @"Touch note entry speed");
///
/// "Ring Opacity"
@@ -58,11 +58,6 @@ public static class SentakkiSettingsSubsectionStrings
public static LocalisableString LaneInputModeButton => new TranslatableString(getKey(@"lane_input_mode_button"), @"Button");
public static LocalisableString LaneInputModeSensor => new TranslatableString(getKey(@"lane_input_mode_sensor"), @"Sensor");
- ///
- /// "Break sample volume"
- ///
- public static LocalisableString BreakSampleVolume => new TranslatableString(getKey(@"break_sample_volume"), @"Break sample volume");
-
public static LocalisableString EntrySpeedTooltip(float speed, double time)
=> new TranslatableString(getKey(@"entry_speed_tooltip"), @"{0} ({1}ms)", speed > 10 ? Sonic : $"{speed:N2}", $"{time:N0}");
diff --git a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs
index 13d1a90f9..a8448d704 100644
--- a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs
+++ b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModHardRock.cs
@@ -4,13 +4,15 @@
using osu.Game.Configuration;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects;
+using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.Sentakki.Localisation.Mods;
+using osu.Game.Rulesets.Sentakki.Objects.Drawables;
using osu.Game.Rulesets.Sentakki.Scoring;
namespace osu.Game.Rulesets.Sentakki.Mods
{
- public class SentakkiModHardRock : ModHardRock, IApplicableToHitObject
+ public class SentakkiModHardRock : ModHardRock, IApplicableToHitObject, IApplicableToDrawableHitObject
{
public override double ScoreMultiplier => 1;
@@ -28,6 +30,9 @@ public override void ApplyToDifficulty(BeatmapDifficulty difficulty)
[SettingSource(typeof(SentakkiModHardRockStrings), nameof(SentakkiModHardRockStrings.MinimumResult), nameof(SentakkiModHardRockStrings.MinimumResultDescription))]
public Bindable MinimumValidResult { get; } = new Bindable(SentakkiHitResult.Good);
+ [SettingSource("Enable strict slider tracking")]
+ public Bindable StrictSliderTracking { get; } = new Bindable(false);
+
public void ApplyToHitObject(HitObject hitObject)
{
// Nested HitObjects should get the same treatment
@@ -41,6 +46,14 @@ public void ApplyToHitObject(HitObject hitObject)
shw.JudgementMode = JudgementMode.Value;
}
+ public void ApplyToDrawableHitObject(DrawableHitObject drawable)
+ {
+ if (drawable is not DrawableSlideCheckpoint slideCheckpoint)
+ return;
+
+ slideCheckpoint.StrictSliderTracking = StrictSliderTracking.Value;
+ }
+
public enum SentakkiHitResult
{
Good = 3,
diff --git a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs
index dd1762e6d..4a50394f1 100644
--- a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs
+++ b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModRelax.cs
@@ -16,6 +16,7 @@ public class SentakkiModRelax : Mod, IApplicableAfterBeatmapConversion
public override string Name => "Relax";
public override string Acronym => "RX";
+ public override ModType Type => ModType.DifficultyReduction;
public override LocalisableString Description => "All notes are EX notes, you've got nothing to prove!";
diff --git a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModTouchDevice.cs b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModTouchDevice.cs
index fc072b46f..dd330ad2b 100644
--- a/osu.Game.Rulesets.Sentakki/Mods/SentakkiModTouchDevice.cs
+++ b/osu.Game.Rulesets.Sentakki/Mods/SentakkiModTouchDevice.cs
@@ -1,7 +1,9 @@
+using System;
using osu.Game.Rulesets.Mods;
namespace osu.Game.Rulesets.Sentakki.Mods;
public class SentakkiModTouchDevice : ModTouchDevice
{
+ public override Type[] IncompatibleMods => Array.Empty();
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs
index 31f2ede70..fc0c69d11 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHold.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@@ -66,11 +66,10 @@ private void load()
});
}
- protected override void OnFree()
+ protected override void OnApply()
{
- base.OnFree();
- HoldStartTime = null;
- TotalHoldTime = 0;
+ base.OnApply();
+ isHolding = false;
}
protected override void UpdateInitialTransforms()
@@ -97,42 +96,62 @@ protected override void UpdateInitialTransforms()
.Then().Delay(HitObject.Duration - stretchTime) // Wait until the end of the hold note, while considering how much time we need for shrinking
.ResizeHeightTo(0, stretchTime); // We shrink the hold note as it exits
- if (HoldStartTime == null && !Auto)
+ if (isHolding == false && !Auto)
NoteBody.Delay(animTime).FadeColour(Color4.Gray, 100);
}
}
protected override void CheckForResult(bool userTriggered, double timeOffset)
{
- if (Time.Current > HitObject.GetEndTime())
+ if (!userTriggered)
{
- endHold();
- double totalHoldRatio = TotalHoldTime / ((IHasDuration)HitObject).Duration;
- HitResult result;
-
- if (totalHoldRatio >= .75 || Auto)
- result = HitResult.Great;
- else if (totalHoldRatio >= .5)
- result = HitResult.Good;
- else if (totalHoldRatio >= .25)
- result = HitResult.Ok;
- else
- result = HitResult.Miss;
-
- // This is specifically to accommodate the threshold setting in HR
- if (!HitObject.HitWindows.IsHitResultAllowed(result))
- result = HitResult.Miss;
-
- // Hold is over, but head windows are still active.
- // Only happens on super short holds
- // Force a miss on the head in this case
- if (!headContainer[0].Result.HasResult)
- headContainer[0].MissForcefully();
-
- ApplyResult(result);
+ if (timeOffset >= 0 && Auto)
+ ApplyResult(HitResult.Perfect);
+ else if (timeOffset >= 0 && isHolding)
+ ApplyResult(applyDeductionTo(HitResult.Perfect));
+ else if (!HitObject.HitWindows.CanBeHit(timeOffset: timeOffset))
+ ApplyResult(Result.Judgement.MinResult);
+
+ return;
+ }
+ var result = HitObject.HitWindows.ResultFor(timeOffset);
+
+ if (result == HitResult.None)
+ return;
+
+ if (result < HitResult.Perfect && HitObject.Ex && result.IsHit())
+ result = Result.Judgement.MaxResult;
+
+ ApplyResult(applyDeductionTo(result));
+
+ HitResult applyDeductionTo(HitResult originalResult)
+ {
+ int deduction = (int)Math.Min(Math.Floor(timeNotHeld / 300), 3);
+
+ var newResult = originalResult - deduction;
+
+ if (originalResult <= HitResult.Ok)
+ return HitResult.Ok;
+
+ return newResult;
}
}
+ private double timeNotHeld = 0;
+
+ protected override void Update()
+ {
+ base.Update();
+
+ if (!Head.AllJudged)
+ return;
+
+ if (isHolding)
+ return;
+
+ timeNotHeld += Time.Elapsed;
+ }
+
protected override void UpdateHitStateTransforms(ArmedState state)
{
base.UpdateHitStateTransforms(state);
@@ -190,29 +209,25 @@ protected override void ClearNestedHitObjects()
headContainer.Clear(false);
}
- ///
- /// Time at which the user started holding this hold note. Null if the user is not holding this hold note.
- ///
- public double? HoldStartTime { get; private set; }
-
- public double TotalHoldTime;
+ private SentakkiInputManager sentakkiActionInputManager = null!;
+ internal SentakkiInputManager SentakkiActionInputManager => sentakkiActionInputManager ??= (SentakkiInputManager)GetContainingInputManager();
- private bool beginHoldAt(double timeOffset)
+ private int pressedCount
{
- if (timeOffset < -Head.HitObject.HitWindows.WindowFor(HitResult.Miss))
- return false;
-
- HoldStartTime = Math.Max(Time.Current, HitObject.StartTime);
- return true;
+ get
+ {
+ int count = 0;
+ foreach (var pressedAction in SentakkiActionInputManager.PressedActions)
+ {
+ if (pressedAction == SentakkiAction.Key1 + HitObject.Lane)
+ ++count;
+ }
+
+ return count;
+ }
}
- private void endHold()
- {
- if (HoldStartTime.HasValue)
- TotalHoldTime += Math.Max(Time.Current - HoldStartTime.Value, 0);
-
- HoldStartTime = null;
- }
+ private bool isHolding = false;
public bool OnPressed(KeyBindingPressEvent e)
{
@@ -222,24 +237,36 @@ public bool OnPressed(KeyBindingPressEvent e)
if (e.Action != SentakkiAction.Key1 + HitObject.Lane)
return false;
- if (beginHoldAt(Time.Current - Head.HitObject.StartTime))
- {
- Head.UpdateResult();
- NoteBody.FadeColour(AccentColour.Value, 50);
- }
+ // Passthrough excess inputs to later hitobjects in the same lane
+ if (isHolding)
+ return false;
+
+ double timeOffset = Time.Current - HitObject.StartTime;
+ if (timeOffset < -Head.HitObject.HitWindows.WindowFor(HitResult.Miss))
+ return false;
+
+ Head.UpdateResult();
+ isHolding = true;
+ NoteBody.FadeColour(AccentColour.Value, 50);
return true;
}
public void OnReleased(KeyBindingReleaseEvent e)
{
if (AllJudged) return;
- if (HoldStartTime is null) return;
+ if (!isHolding) return;
if (e.Action != SentakkiAction.Key1 + HitObject.Lane)
return;
- endHold();
+ // We only release the hold once ALL inputs are released
+ // We check for 1 here as drawables receive the event before the counter decrements
+ if (pressedCount > 1)
+ return;
+
+ UpdateResult(true);
+ isHolding = false;
if (!AllJudged)
NoteBody.FadeColour(Color4.Gray, 100);
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHoldHead.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHoldHead.cs
index c9efbd842..c502539a3 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHoldHead.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableHoldHead.cs
@@ -23,9 +23,9 @@ protected override void CheckForResult(bool userTriggered, double timeOffset)
{
if (Auto && timeOffset > 0)
ApplyResult(HitResult.Perfect);
-
- if (!HitObject.HitWindows.CanBeHit(timeOffset))
+ else if (!HitObject.HitWindows.CanBeHit(timeOffset))
ApplyResult(Result.Judgement.MinResult);
+
return;
}
@@ -34,7 +34,7 @@ protected override void CheckForResult(bool userTriggered, double timeOffset)
if (result == HitResult.None)
return;
- if (HitObject.Ex && result.IsHit())
+ if (result < HitResult.Perfect && HitObject.Ex && result.IsHit())
result = Result.Judgement.MaxResult;
ApplyResult(result);
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs
index 39205d96f..3d4099eed 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScoreBonusObject.cs
@@ -19,19 +19,12 @@ public DrawableScoreBonusObject(ScoreBonusObject? hitObject)
public void TriggerResult()
{
- double timeOffset = Math.Abs(Time.Current - HitObject.StartTime);
-
- ApplyResult(r =>
+ ApplyResult((r, dho) =>
{
+ double timeOffset = Math.Abs(Time.Current - HitObject.StartTime);
bool isCrit = r.HitObject.HitWindows.ResultFor(timeOffset) == HitResult.Perfect;
r.Type = isCrit ? r.Judgement.MaxResult : r.Judgement.MinResult;
});
}
-
- public new void ApplyResult(Action application)
- {
- if (!Result.HasResult)
- base.ApplyResult(application);
- }
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs
index 7ec91a1aa..cd4148264 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableScorePaddingObject.cs
@@ -1,6 +1,7 @@
using System;
using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Objects.Drawables;
+using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.Sentakki.Judgements;
namespace osu.Game.Rulesets.Sentakki.Objects.Drawables
@@ -19,10 +20,20 @@ public DrawableScorePaddingObject(ScorePaddingObject? hitObject)
protected override JudgementResult CreateResult(Judgement judgement) => new SentakkiJudgementResult(HitObject, judgement);
- public new void ApplyResult(Action application)
+ public new void ApplyResult(HitResult result)
{
- if (!Result.HasResult)
- base.ApplyResult(application);
+ var SentakkiJudgementResult = (SentakkiJudgementResult)Result;
+ if (result == HitResult.Perfect)
+ {
+ SentakkiJudgementResult.Critical = true;
+ result = Result.Judgement.MaxResult;
+ }
+ else
+ {
+ SentakkiJudgementResult.Critical = false;
+ }
+
+ base.ApplyResult(result);
}
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs
index 16680a0e0..2fb9fb813 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiHitObject.cs
@@ -1,4 +1,3 @@
-using System;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
@@ -7,7 +6,6 @@
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Scoring;
-using osu.Game.Rulesets.Sentakki.Configuration;
using osu.Game.Rulesets.Sentakki.Judgements;
using osu.Game.Rulesets.Sentakki.UI;
using osu.Game.Skinning;
@@ -48,7 +46,7 @@ public DrawableSentakkiHitObject(SentakkiHitObject? hitObject = null)
}
[BackgroundDependencyLoader]
- private void load(SentakkiRulesetConfigManager? sentakkiConfig)
+ private void load()
{
AddRangeInternal(new Drawable[]
{
@@ -56,8 +54,6 @@ private void load(SentakkiRulesetConfigManager? sentakkiConfig)
scoreBonusObjects = new Container(),
breakSample = new PausableSkinnableSound(),
});
-
- sentakkiConfig?.BindWith(SentakkiRulesetSettings.BreakSampleVolume, breakSample.Volume);
}
protected override void LoadSamples()
@@ -134,11 +130,28 @@ protected override void ClearNestedHitObjects()
protected override JudgementResult CreateResult(Judgement judgement) => new SentakkiJudgementResult(HitObject, judgement);
- protected void ApplyResult(HitResult result)
+ protected new void ApplyResult(HitResult result)
{
- void resultApplication(JudgementResult r) => ((SentakkiJudgementResult)r).Type = result;
+ var SentakkiJudgementResult = (SentakkiJudgementResult)Result;
+ if (result == HitResult.Perfect)
+ {
+ SentakkiJudgementResult.Critical = true;
+ result = Result.Judgement.MaxResult;
+ }
+ else
+ {
+ SentakkiJudgementResult.Critical = false;
+ }
+
+ // Judge the scoreBonus
+ foreach (var bonusObject in scoreBonusObjects)
+ bonusObject.TriggerResult();
+
+ // Also give Break note score padding a judgement
+ for (int i = 0; i < scorePaddingObjects.Count; ++i)
+ scorePaddingObjects[^(i + 1)].ApplyResult(result);
- ApplyResult(resultApplication);
+ base.ApplyResult(result);
}
protected override void OnFree()
@@ -172,20 +185,5 @@ protected override void UpdateInitialTransforms()
}
private bool transformResetQueued;
-
- protected new virtual void ApplyResult(Action application)
- {
- // Judge the scoreBonus
- foreach (var bonusObject in scoreBonusObjects)
- bonusObject.TriggerResult();
-
- // Also give Break note score padding a judgement
- for (int i = 0; i < scorePaddingObjects.Count; ++i)
- scorePaddingObjects[^(i + 1)].ApplyResult(application);
-
- // Apply judgement to this object
- if (!Result.HasResult)
- base.ApplyResult(application);
- }
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs
index 3008124ec..e83f4f9bc 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSentakkiLanedHitObject.cs
@@ -1,4 +1,9 @@
using osu.Framework.Allocation;
+using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
+using osu.Game.Rulesets.Objects;
+using osu.Game.Rulesets.Objects.Drawables;
+using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.Sentakki.UI;
namespace osu.Game.Rulesets.Sentakki.Objects.Drawables
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs
index 32dffa16d..efe396d21 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlide.cs
@@ -14,6 +14,8 @@ public partial class DrawableSlide : DrawableSentakkiHitObject
public Container SlideBodies = null!;
public Container SlideTaps = null!;
+ public new Slide HitObject => (Slide)base.HitObject;
+
public DrawableSlide()
: this(null)
{
@@ -44,6 +46,10 @@ private void load()
}
});
}
+ protected override void LoadSamples()
+ {
+ // The slide parent object doesn't need a sample
+ }
protected override void CheckForResult(bool userTriggered, double timeOffset)
{
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs
index e96b81374..7b3565ed1 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideBody.cs
@@ -18,9 +18,7 @@ namespace osu.Game.Rulesets.Sentakki.Objects.Drawables
{
public partial class DrawableSlideBody : DrawableSentakkiLanedHitObject
{
- public override bool RemoveWhenNotAlive => false;
-
- private new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject;
+ public new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject;
public new SlideBody HitObject => (SlideBody)base.HitObject;
// This slide body can only be interacted with iff the slidetap associated with this slide is judged
@@ -78,7 +76,7 @@ private void load()
AddRangeInternal(new Drawable[]
{
Slidepath = new SlideVisual() { Colour = inactive_color },
- SlideStars = new Container
+ SlideStars = new ProxyableContainer
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
@@ -288,5 +286,10 @@ protected override void ClearNestedHitObjects()
base.ClearNestedHitObjects();
SlideCheckpoints.Clear(false);
}
+
+ private partial class ProxyableContainer : Container where T : Drawable
+ {
+ public override bool RemoveWhenNotAlive => false;
+ }
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs
index 94e72ff98..e75525a1b 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpoint.cs
@@ -5,6 +5,8 @@
using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Drawables;
+using osu.Game.Rulesets.Scoring;
+using osu.Game.Rulesets.Sentakki.UI;
namespace osu.Game.Rulesets.Sentakki.Objects.Drawables
{
@@ -19,6 +21,7 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject
public override bool DisplayResult => false;
private new DrawableSlideBody ParentHitObject => (DrawableSlideBody)base.ParentHitObject;
+ private int slideOriginLane => ParentHitObject.ParentHitObject.HitObject.Lane;
// Used to determine the node order
public int ThisIndex;
@@ -28,10 +31,16 @@ public partial class DrawableSlideCheckpoint : DrawableSentakkiHitObject
// All hits can only be done after the slide tap has been judged
public bool IsHittable => ParentHitObject.IsHittable && isPreviousNodeHit();
- private bool isPreviousNodeHit() => ThisIndex < 1 || ParentHitObject.SlideCheckpoints[ThisIndex - 1].IsHit;
+ public bool StrictSliderTracking { get; set; }
+
+ private int trackingLookBehindDistance => StrictSliderTracking ? 1 : 2;
+
+ private bool isPreviousNodeHit() => ThisIndex < trackingLookBehindDistance || ParentHitObject.SlideCheckpoints[ThisIndex - trackingLookBehindDistance].IsHit;
private Container nodes = null!;
+ protected override float SamplePlaybackPosition => (SentakkiExtensions.GetPositionAlongLane(SentakkiPlayfield.INTERSECTDISTANCE, slideOriginLane).X / (SentakkiPlayfield.INTERSECTDISTANCE * 2)) + .5f;
+
public DrawableSlideCheckpoint()
: this(null)
{
@@ -65,7 +74,7 @@ protected override void OnApply()
protected override void CheckForResult(bool userTriggered, double timeOffset)
{
- // Counting hit notes manually to avoid LINQ alloc overhead
+ // Counting hit notes manually to avoid LINQ alloc overhead
int hitNotes = 0;
foreach (var node in nodes)
@@ -78,16 +87,20 @@ protected override void CheckForResult(bool userTriggered, double timeOffset)
ApplyResult(Result.Judgement.MaxResult);
}
- protected override void ApplyResult(Action application)
+ protected new void ApplyResult(HitResult result)
{
if (Judged)
return;
+ // The previous node may not be judged due to slider hit order leniency allowing players to skip up to one node
+ if (ThisIndex > 0)
+ ParentHitObject.SlideCheckpoints[ThisIndex - 1].ApplyResult(result);
+
// Make sure remaining nodes are judged
foreach (var node in nodes)
- node.ApplyResult(application);
+ node.ApplyResult(result);
- base.ApplyResult(application);
+ base.ApplyResult(result);
}
// Forcefully miss this node, used when players fail to complete the slide on time.
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs
index b5aea6596..b9546f99a 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideCheckpointNode.cs
@@ -3,6 +3,7 @@
using osu.Framework.Graphics;
using osu.Framework.Input;
using osu.Game.Rulesets.Judgements;
+using osu.Game.Rulesets.Scoring;
using osuTK;
namespace osu.Game.Rulesets.Sentakki.Objects.Drawables
@@ -34,9 +35,9 @@ public DrawableSlideCheckpointNode(SlideCheckpoint.CheckpointNode? node)
Anchor = Anchor.Centre;
Origin = Anchor.Centre;
RelativeSizeAxes = Axes.None;
- Size = new Vector2(150);
+ Size = new Vector2(200);
CornerExponent = 2f;
- CornerRadius = 75;
+ CornerRadius = 100;
}
protected override void OnApply()
@@ -82,6 +83,12 @@ private bool checkForTouchInput()
return false;
}
- public new void ApplyResult(Action application) => base.ApplyResult(application);
+ public new void ApplyResult(HitResult result)
+ {
+ if (Judged)
+ return;
+
+ base.ApplyResult(result);
+ }
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs
index e666825e6..84728ff7a 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableSlideTap.cs
@@ -8,6 +8,8 @@ public partial class DrawableSlideTap : DrawableTap
{
protected override Drawable CreateTapRepresentation() => new SlideTapPiece();
+ protected new DrawableSlide ParentHitObject => (DrawableSlide)base.ParentHitObject;
+
public DrawableSlideTap()
: this(null)
{
@@ -18,6 +20,14 @@ public DrawableSlideTap(SlideTap? hitObject)
{
}
+ protected override void OnApply()
+ {
+ base.OnApply();
+
+ if (TapVisual is SlideTapPiece note)
+ note.SecondStar.Alpha = ParentHitObject.HitObject.SlideInfoList.Count > 1 ? 1 : 0;
+ }
+
protected override void UpdateInitialTransforms()
{
base.UpdateInitialTransforms();
@@ -29,10 +39,7 @@ protected override void UpdateInitialTransforms()
double spinDuration = baseline_spin_duration * (DrawableSentakkiRuleset?.GameplaySpeed ?? 1);
if (ParentHitObject is DrawableSlide slide)
- {
- spinDuration += ((Slide)slide.HitObject).SlideInfoList.FirstOrDefault()?.Duration ?? 1000;
- note.SecondStar.Alpha = slide.SlideBodies.Count > 1 ? 1 : 0;
- }
+ spinDuration += slide.HitObject.SlideInfoList.FirstOrDefault()?.Duration ?? 1000;
note.Stars.Spin(spinDuration, RotationDirection.Counterclockwise).Loop();
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTap.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTap.cs
index 8735ed310..ac1be9d89 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTap.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTap.cs
@@ -91,7 +91,7 @@ protected override void CheckForResult(bool userTriggered, double timeOffset)
if (result == HitResult.None)
return;
- if (HitObject.Ex && result.IsHit())
+ if (result < HitResult.Perfect && HitObject.Ex && result.IsHit())
result = Result.Judgement.MaxResult;
ApplyResult(result);
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs
index 6f63b82b2..324976d73 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/DrawableTouch.cs
@@ -43,7 +43,7 @@ private void load()
if (DrawableSentakkiRuleset is not null)
AnimationDuration.BindTo(DrawableSentakkiRuleset?.AdjustedTouchAnimDuration);
- Size = new Vector2(100);
+ Size = new Vector2(130);
Origin = Anchor.Centre;
Anchor = Anchor.Centre;
AddRangeInternal(new Drawable[]
@@ -115,7 +115,7 @@ protected override void CheckForResult(bool userTriggered, double timeOffset)
if (timeOffset < 0 && result is not HitResult.Perfect)
return;
- if (HitObject.Ex && result.IsHit())
+ if (result < HitResult.Perfect && HitObject.Ex && result.IsHit())
result = Result.Judgement.MaxResult;
ApplyResult(result);
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideChevron.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideChevron.cs
index fff065711..fab4b15c6 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideChevron.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideChevron.cs
@@ -27,11 +27,5 @@ private void load(TextureStore textures)
Texture = textures.Get("slide"),
});
}
-
- protected override void FreeAfterUse()
- {
- base.FreeAfterUse();
- ClearTransforms();
- }
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideFanChevrons.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideFanChevrons.cs
index 73b8266f9..d9e45ac5e 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideFanChevrons.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideFanChevrons.cs
@@ -1,9 +1,12 @@
+using System;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Effects;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Layout;
+using osu.Framework.Utils;
using osuTK;
using osuTK.Graphics;
@@ -63,17 +66,20 @@ protected override bool OnInvalidate(Invalidation invalidation, InvalidationSour
return base.OnInvalidate(invalidation, source);
}
+ private float chevHeight, chevWidth;
+
public ChevronBackingTexture(float lengthScale, float heightScale)
: base(cachedFrameBuffer: true)
{
- Anchor = Anchor.Centre;
- Origin = Anchor.Centre;
+ chevHeight = 16 + (10 * heightScale);
+ chevWidth = 6 + (210 * lengthScale);
AutoSizeAxes = Axes.Both;
- float chevHeight = 16 + (10 * heightScale);
- float chevWidth = 6 + (210 * lengthScale);
+ BufferedContainer content;
- AddInternal(new Container
+ // Effect container
+ // We are doing this ourelves to increase the padding'
+ AddInternal(content = new Container
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.BottomCentre,
@@ -161,7 +167,15 @@ public ChevronBackingTexture(float lengthScale, float heightScale)
},
},
}
- });
+ }.WithEffect(new GlowEffect
+ {
+ BlurSigma = new Vector2(20),
+ Placement = EffectPlacement.Behind,
+ Colour = Color4.Black
+ }));
+
+ // PadExtent doesn't fully avoid the clipped shadows, we pad with a more conservative estimate
+ content.Padding = new MarginPadding(Blur.KernelSize(25));
}
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideVisual.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideVisual.cs
index ae10abcd9..42a9ca24e 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideVisual.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/Slides/SlideVisual.cs
@@ -194,7 +194,7 @@ public void PerformExitAnimation(double duration)
if (((ISlideChevron)chevron).DisappearThreshold <= Progress)
{
- chevron.FadeOut();
+ chevron.Alpha = 0;
continue;
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs
index 79d313c87..ec423dd8e 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldBody.cs
@@ -13,7 +13,7 @@ public partial class TouchHoldBody : CircularContainer
public readonly TouchHoldProgressPiece ProgressPiece;
private readonly TouchHoldCentrePiece centrePiece;
- public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => centrePiece.ReceivePositionalInputAt(screenSpacePos);
+ public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => ProgressPiece.ReceivePositionalInputAt(screenSpacePos);
public TouchHoldBody()
{
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldCentrePiece.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldCentrePiece.cs
index a6b374921..d28eddb58 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldCentrePiece.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldCentrePiece.cs
@@ -44,7 +44,7 @@ public TouchHoldCentrePiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = 1 },
+ Progress = 1,
Colour = colours.Blue
},
new CircularProgress
@@ -54,7 +54,7 @@ public TouchHoldCentrePiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = .75 },
+ Progress = 0.75 ,
Colour = colours.Green
},
new CircularProgress
@@ -64,7 +64,7 @@ public TouchHoldCentrePiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = .5 },
+ Progress = 0.5 ,
Colour = colours.Yellow,
},
new CircularProgress
@@ -74,7 +74,7 @@ public TouchHoldCentrePiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = .25 },
+ Progress = 0.25 ,
Colour = colours.Red,
},
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldProgressPiece.cs b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldProgressPiece.cs
index db2bd15b5..98b92a7dd 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldProgressPiece.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Drawables/Pieces/TouchHolds/TouchHoldProgressPiece.cs
@@ -48,7 +48,7 @@ public TouchHoldProgressPiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = 0 },
+ Progress = 0,
Colour = colours.Blue
},
greenProgress = new CircularProgress
@@ -58,7 +58,7 @@ public TouchHoldProgressPiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = 0 },
+ Progress = 0,
Colour = colours.Green
},
yellowProgress = new CircularProgress
@@ -68,7 +68,7 @@ public TouchHoldProgressPiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = 0 },
+ Progress = 0,
Colour = colours.Yellow,
},
redProgress = new CircularProgress
@@ -78,7 +78,7 @@ public TouchHoldProgressPiece()
InnerRadius = 1,
Size = Vector2.One,
RelativeSizeAxes = Axes.Both,
- Current = { Value = 0 },
+ Progress = 0,
Colour = colours.Red,
},
}
@@ -87,10 +87,10 @@ public TouchHoldProgressPiece()
ProgressBindable.BindValueChanged(p =>
{
- redProgress.Current.Value = Math.Min(p.NewValue, .25);
- yellowProgress.Current.Value = Math.Min(p.NewValue, .50);
- greenProgress.Current.Value = Math.Min(p.NewValue, .75);
- blueProgress.Current.Value = p.NewValue;
+ redProgress.Progress = Math.Min(p.NewValue, .25);
+ yellowProgress.Progress = Math.Min(p.NewValue, .50);
+ greenProgress.Progress = Math.Min(p.NewValue, .75);
+ blueProgress.Progress = p.NewValue;
});
}
}
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Hold.cs b/osu.Game.Rulesets.Sentakki/Objects/Hold.cs
index e54e5051e..b4052e71a 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Hold.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Hold.cs
@@ -49,7 +49,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok
});
}
- protected override HitWindows CreateHitWindows() => new SentakkiEmptyHitWindows();
+ protected override HitWindows CreateHitWindows() => new SentakkiTapHitWindows();
public class HoldHead : SentakkiLanedHitObject
{
diff --git a/osu.Game.Rulesets.Sentakki/Objects/SentakkiHitObject.cs b/osu.Game.Rulesets.Sentakki/Objects/SentakkiHitObject.cs
index ee08a3055..14ad95dd3 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/SentakkiHitObject.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/SentakkiHitObject.cs
@@ -69,10 +69,30 @@ public HitSampleInfo[] CreateBreakSample()
return new[]
{
- new SentakkiHitSampleInfo("Break", CreateHitSampleInfo().Volume)
+ new BreakSample( CreateHitSampleInfo())
};
}
+ public class BreakSample : HitSampleInfo
+ {
+ public override IEnumerable LookupNames
+ {
+ get
+ {
+ foreach (string name in base.LookupNames)
+ yield return name;
+
+ foreach (string name in base.LookupNames)
+ yield return name.Replace("-max", string.Empty);
+ }
+ }
+
+ public BreakSample(HitSampleInfo sampleInfo)
+ : base("spinnerbonus-max", sampleInfo.Bank, sampleInfo.Suffix, sampleInfo.Volume)
+ {
+ }
+ }
+
// This special hitsample is used for Sentakki specific samples, with doesn't have bank specific variants
public class SentakkiHitSampleInfo : HitSampleInfo, IEquatable
{
diff --git a/osu.Game.Rulesets.Sentakki/Objects/Slide.cs b/osu.Game.Rulesets.Sentakki/Objects/Slide.cs
index 90031644d..d58d19edc 100644
--- a/osu.Game.Rulesets.Sentakki/Objects/Slide.cs
+++ b/osu.Game.Rulesets.Sentakki/Objects/Slide.cs
@@ -27,8 +27,6 @@ public double Duration
set => throw new NotSupportedException();
}
- public IList> NodeSamples = new List>();
-
public double EndTime => StartTime + Duration;
public override Color4 DefaultNoteColour => Color4.Aqua;
@@ -45,7 +43,7 @@ protected override void CreateNestedHitObjects(CancellationToken cancellationTok
{
LaneBindable = { BindTarget = LaneBindable },
StartTime = StartTime,
- Samples = NodeSamples.Any() ? NodeSamples.First() : new List(),
+ Samples = Samples,
Break = Break,
Ex = Ex
});
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.cs.resx
new file mode 100644
index 000000000..80c6ffc8f
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.cs.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Zaměřte se na noty v pruhu. Dotykové noty a těla slidů budou automaticky dokončeny.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.tr.resx
new file mode 100644
index 000000000..d0cf1a55b
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModAutoTouchStrings.tr.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Şerit üzerindeki notalara odaklan. Dokunmalı notalar ve kayan ana notalar otomatik olarak senin için tamamlanacak.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.cs.resx
new file mode 100644
index 000000000..700393952
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.cs.resx
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Počet životů
+
+
+ Získáte pouze malou marži pro chyby.
+
+
+ Počet životů, se kterými začínáte.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.tr.resx
new file mode 100644
index 000000000..9c6a51112
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModChallengeStrings.tr.resx
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Can sayısı
+
+
+ Hata yapmak için çok küçük bir penceren var.
+
+
+ Başladığın can sayısı.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.cs.resx
new file mode 100644
index 000000000..6c7557d11
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.cs.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Odstranit herní prvky zavedené v maimaiDX, pro finální puristy.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.tr.resx
new file mode 100644
index 000000000..987b1e68f
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModClassicStrings.tr.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Finale püristleri için maimaiDX'de oyuna eklenen unsurları kaldırma ayarı.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.cs.resx
new file mode 100644
index 000000000..a381be20f
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.cs.resx
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Některé experimentální funkce, které budou přidány do budoucích verzí sentakki. Autoplay/No-Fail doporučeny. Replaye nejsou podporovány.
+
+
+ Dvojité noty
+ Twin is an adjective.
+
+
+ Povolit více než jednu notu sdílet stejné časování (vyžaduje multitouch)
+
+
+ Dvojité slidy
+ Twin is an adjective.
+
+
+ Umožnit více než jednomu tělu slidu sdílet stejné časování a původ (vyžaduje multitouch)
+
+
+ Větrákové slidy
+ Fan is a adjective, referring to the shape of the Slide.
+
+
+ Povolit občas zobrazovat větrákové slidy (vyžaduje multitouch)
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.tr.resx
new file mode 100644
index 000000000..47177a7ed
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.tr.resx
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ İlerideki sentakki yamalarında eklenecek bazı deneysel özellikler. Otomatik/No-Fail önerilir. Tekrardan oynatma bu modda desteklenmez.
+
+
+ İkiz notalar
+ Twin is an adjective.
+
+
+ Birden fazla notanın aynı zamanlamayı paylaşmasına izin ver (çoklu dokunma özelliğine sahip bir cihaz gerektirir)
+
+
+ İkiz kayan notalar
+ Twin is an adjective.
+
+
+ Birden fazla kayan-notanın aynı zamanlama ve başlangıç noktasını paylaşmasına izin ver (çoklu dokunma özelliğine sahip bir cihaz gerektirir)
+
+
+ Fan şekilli kayan notalar
+ Fan is a adjective, referring to the shape of the Slide.
+
+
+ Fan şekilli kayan notaların ara sıra çıkmasına izin verir (çoklu dokunma özelliğine sahip bir cihaz gerektirir)
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.zh.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.zh.resx
index 37c093d73..cb8bdd4fb 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.zh.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModExperimentalStrings.zh.resx
@@ -59,7 +59,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- 将被添加到未来 sentakki 版本的一些实验性功能。 推荐使用 Autoplay/No-Fail 。 不支持录制游玩。
+ 将被添加到未来 sentakki 版本的一些实验性功能。推荐使用 Autoplay/No-Fail。不支持录制回放。
双音符
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.cs.resx
new file mode 100644
index 000000000..a4c7eefc6
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.cs.resx
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Režim souzení
+
+
+ Režimy souzení určují, jak přísná jsou okna pro zasáhnutí během hry.
+
+
+ Minimální výsledek zásahů
+
+
+ Minimální přijatelný HitResult při hraní. Cokoliv nižší bude zváženo jako miss.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.tr.resx
new file mode 100644
index 000000000..aad2b7275
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHardRockStrings.tr.resx
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Yargılama modu
+
+
+ Yargılama modları, şarkı süresince notaya vuruş pencerenizin ne kadar sıkı olacağını belirler.
+
+
+ Minimum vuruş sonucu
+
+
+ Oyun sırasında kabul edilebilir olan minimum vuruş sonucu. Bunun altındaki her vuruş ıskalama sayılacak.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.cs.resx
new file mode 100644
index 000000000..3f1846d5e
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.cs.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Noty zeslábnou těsně před tím, než je zasáhnete.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.tr.resx
new file mode 100644
index 000000000..71a72f243
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModHiddenStrings.tr.resx
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Notalar tam sen tıklamadan önce kaybolur.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.cs.resx
new file mode 100644
index 000000000..854f18610
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.cs.resx
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Překlopit hrací pole vodorovně, svisle, nebo obojí!
+
+
+ ⇅ Zrcadlit svisle
+
+
+ Zrcadlit celé hrací pole po ose x
+
+
+ ⇆ Zrcadlit vodorovně
+
+
+ Zrcadlit celé hrací pole po ose y
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.tr.resx
new file mode 100644
index 000000000..cf2d94736
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModMirrorStrings.tr.resx
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Oynama alanını yatay, dikey veya aynı anda iki yönde de çevir!
+
+
+ ⇅ Dikey olarak aynala
+
+
+ X ekseni üzerinde bütün oyun alanını aynala
+
+
+ ⇆ Yatay olarak aynala
+
+
+ Y ekseni üzerinde bütün oyun alanını aynala
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.cs.resx
new file mode 100644
index 000000000..113c4f18f
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.cs.resx
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Replikovat pravý zážitek z pračky.
+
+
+ Doba trvání rotace
+
+
+ Doba trvání v sekundách pro dokončení rotace.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.tr.resx
new file mode 100644
index 000000000..8658d9f91
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/Mods/SentakkiModSpinStrings.tr.resx
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Hakiki çamaşır makinesi deneyimini yaratma zamanı.
+
+
+ Dönme süresi
+
+
+ Bir dönmeyi tamamlamak için geçecek saniye.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.cs.resx
new file mode 100644
index 000000000..000925cc3
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.cs.resx
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Tlačítko {0}
+
+
+ Klávesa {0}
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.ja.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.ja.resx
new file mode 100644
index 000000000..e3cf588b0
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.ja.resx
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ {0} ボタン
+
+
+ {0} キー
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.tr.resx
new file mode 100644
index 000000000..14451f348
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiActionStrings.tr.resx
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ {0} tuşu
+
+
+ {0} anahtarı
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.cs.resx
new file mode 100644
index 000000000..97eeca41e
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.cs.resx
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Počet klepnutí
+ Tap is a proper noun.
+
+
+ Počet přidržení
+ Hold is a proper noun.
+
+
+ Počet držených dotyků
+ TouchHold is a proper noun.
+
+
+ Počet dotyků
+ Touch is a proper noun.
+
+
+ Počet slidů
+ Slide is a proper noun.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.ja.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.ja.resx
new file mode 100644
index 000000000..ef35b9ba9
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.ja.resx
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ タップ数
+ Tap is a proper noun.
+
+
+ ホールド数
+ Hold is a proper noun.
+
+
+ タッチホールド数
+ TouchHold is a proper noun.
+
+
+ タッチ数
+ Touch is a proper noun.
+
+
+ スライド数
+ Slide is a proper noun.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.tr.resx
new file mode 100644
index 000000000..6240f4256
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.tr.resx
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Dokunmalı nota sayısı
+ Tap is a proper noun.
+
+
+ Tutmalı nota sayısı
+ Hold is a proper noun.
+
+
+ Tutma ve dokunmalı nota sayısı
+ TouchHold is a proper noun.
+
+
+ Dokunma sayısı
+ Touch is a proper noun.
+
+
+ Kaydırmalı nota sayısı
+ Slide is a proper noun.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.zh.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.zh.resx
index dba861709..7919337a9 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.zh.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiBeatmapStrings.zh.resx
@@ -59,23 +59,23 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- Tap 计数
+ Tap 总数
Tap is a proper noun.
- Hold 计数
+ Hold 总数
Hold is a proper noun.
- TouchHold 计数
+ TouchHold 总数
TouchHold is a proper noun.
- Touch 计数
+ Touch 总数
Touch is a proper noun.
- Slide 计数
+ Slide 总数
Slide is a proper noun.
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.cs.resx
new file mode 100644
index 000000000..2a9b07bba
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.cs.resx
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Připrav se!
+
+
+ Jdeme na to!
+
+
+ Sentakki je vytvořeno s podporou {0}.
+ The placeholder is for the name of a sentakki supporter.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.tr.resx
new file mode 100644
index 000000000..069462187
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiResumeOverlayStrings.tr.resx
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Hazır ol!
+
+
+ Hadi başlayalım!
+
+
+ Sentakki, {0} gibi destekleyiciler sayesinde yaratıldı.
+ The placeholder is for the name of a sentakki supporter.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ca.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ca.resx
index b714cfbad..295c100a5 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ca.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ca.resx
@@ -96,10 +96,6 @@
Sensor
-
- Volum de mostra de Break
- Break is a proper noun, referring to a property on laned notes.
-
Velocitat inicial de nota
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.cs.resx
new file mode 100644
index 000000000..0b52ff146
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.cs.resx
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Zobrazit efekty Kiai
+
+
+ Zobrazit indikátory počátku not
+
+
+ Postupné najíždění slidů
+ "Snaking in" refers to the animation of the Slide extending out telescopically from the origin piece by piece.
+
+
+ Zobrazit detailní rozsudky
+
+
+ Barva kruhů
+
+
+ Výchozí
+
+
+ Barva založena na obtížnosti
+
+
+ Skin
+
+
+ Průhlednost kruhu
+
+
+ Linkový režim vstupu (nevztahuje se na dotyk)
+ "Touch"as in the verb, as in "touchscreen"
+
+
+ Tlačítko
+
+
+ Senzor
+
+
+ Vstupní rychlost not
+
+
+ Rychlost vstupu dotykových not
+
+
+ {0} ({1}ms)
+ The left placeholder is the speed value between 0 - 10, or "Sonic" if too fast. The right placeholder duration value.
+
+
+ Sonic
+ Used when the speed value is greater than 10.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.es.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.es.resx
index ec86c91e1..21d1bf607 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.es.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.es.resx
@@ -96,10 +96,6 @@
Sensor
-
- Volumen de muestra de Break
- Break is a proper noun, referring to a property on laned notes.
-
Velocidad inicial de nota
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.fr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.fr.resx
index dbd56df07..c806ab91e 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.fr.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.fr.resx
@@ -96,10 +96,6 @@
Capteur
-
- Volume des notes Break
- Break is a proper noun, referring to a property on laned notes.
-
Vitesse d'entrée des notes
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ja.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ja.resx
new file mode 100644
index 000000000..bbf892ff9
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ja.resx
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Kiaiエフェクトを表示
+
+
+ ノート開始インジケーターを表示
+
+
+ スライダーを追従
+ "Snaking in" refers to the animation of the Slide extending out telescopically from the origin piece by piece.
+
+
+ 詳細な判定を表示
+
+
+ リングの色
+
+
+ 既定
+
+
+ 難易度の色
+
+
+ スキン
+
+
+ リングの不透明度
+
+
+ レーン入力モード (タッチには適用されません)
+ "Touch"as in the verb, as in "touchscreen"
+
+
+ ボタン
+
+
+ センサー
+
+
+ ノーツ速度
+
+
+ タッチノーツ速度
+
+
+ {0} ({1}ms)
+ The left placeholder is the speed value between 0 - 10, or "Sonic" if too fast. The right placeholder duration value.
+
+
+ Sonic
+ Used when the speed value is greater than 10.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ko.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ko.resx
index b2d9b925f..0495c26ff 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ko.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ko.resx
@@ -96,10 +96,6 @@
센서
-
- 브레이크 샘플 볼륨
- Break is a proper noun, referring to a property on laned notes.
-
노트 진입 속도
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.lv-LV.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.lv-LV.resx
index bf139ba1a..2748c77d2 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.lv-LV.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.lv-LV.resx
@@ -96,10 +96,6 @@
Sensors
-
- Breika nošu skaļums
- Break is a proper noun, referring to a property on laned notes.
-
Nošu ienākšanas ātrums
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.resx
index 489db6962..3ff547aac 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.resx
@@ -96,10 +96,6 @@
Sensor
-
- Break sample volume
- Break is a proper noun, referring to a property on laned notes.
-
Note entry speed
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ru.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ru.resx
index f0724bf2a..ca9d10470 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ru.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.ru.resx
@@ -96,10 +96,6 @@
Сенсор
-
- Громкость сэмпла ноты Break
- Break is a proper noun, referring to a property on laned notes.
-
Скорость появления нот
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.tr.resx
new file mode 100644
index 000000000..41c55e124
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.tr.resx
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Kiai efektlerini göster
+
+
+ Nota başlangıç göstergelerini görüntüle
+
+
+ İçeri kayan notalar
+ "Snaking in" refers to the animation of the Slide extending out telescopically from the origin piece by piece.
+
+
+ Detaylı nota yargılarını göster
+
+
+ Ring rengi
+
+
+ Varsayılan
+
+
+ Zorluğa göre renklendirme
+
+
+ Skin
+
+
+ Ring şeffaflığı
+
+
+ Şerit giriş modu (Dokunma'ya etki etmez)
+ "Touch"as in the verb, as in "touchscreen"
+
+
+ Buton
+
+
+ Sensör
+
+
+ Notaların giriş hızı
+
+
+ Dokunmalı notaların giriş hızı
+
+
+ {0} ({1}ms)
+ The left placeholder is the speed value between 0 - 10, or "Sonic" if too fast. The right placeholder duration value.
+
+
+ Sonic
+ Used when the speed value is greater than 10.
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.zh.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.zh.resx
index 7f35f27c3..07b36de8a 100644
--- a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.zh.resx
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiSettingsSubsectionStrings.zh.resx
@@ -96,10 +96,6 @@
传感器
-
- Break 声音量
- Break is a proper noun, referring to a property on laned notes.
-
音符输入速度
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.cs.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.cs.resx
new file mode 100644
index 000000000..aa536e091
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.cs.resx
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Rozdělení časování
+
+
+ Graf úsudků
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.tr.resx b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.tr.resx
new file mode 100644
index 000000000..47bc56c54
--- /dev/null
+++ b/osu.Game.Rulesets.Sentakki/Resources/Localisation/SentakkiStatisticsStrings.tr.resx
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Zamanlama dağılımı
+
+
+ Yargı haritası
+
+
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Break.wav b/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Break.wav
deleted file mode 100644
index 2a6c9268a..000000000
Binary files a/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Break.wav and /dev/null differ
diff --git a/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Taka.wav b/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Taka.wav
deleted file mode 100644
index e04d318d9..000000000
Binary files a/osu.Game.Rulesets.Sentakki/Resources/Samples/Gameplay/Taka.wav and /dev/null differ
diff --git a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs
index b6b185e3f..95ee0d551 100644
--- a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs
+++ b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiHitWindows.cs
@@ -6,7 +6,7 @@ public abstract class SentakkiHitWindows : HitWindows
{
protected const double timing_unit = 1000 / 60.0; // A single frame
- public HitResult MinimumHitResult = HitResult.None;
+ public HitResult MinimumHitResult = HitResult.Miss;
private SentakkiJudgementMode judgementMode = SentakkiJudgementMode.Normal;
public SentakkiJudgementMode JudgementMode
diff --git a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiScoreProcessor.cs b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiScoreProcessor.cs
index 83df6a761..5ec61cd18 100644
--- a/osu.Game.Rulesets.Sentakki/Scoring/SentakkiScoreProcessor.cs
+++ b/osu.Game.Rulesets.Sentakki/Scoring/SentakkiScoreProcessor.cs
@@ -11,8 +11,8 @@ public SentakkiScoreProcessor(SentakkiRuleset ruleset)
protected override double ComputeTotalScore(double comboProgress, double accuracyProgress, double bonusPortion)
{
- return (200000 * comboProgress)
- + (800000 * Math.Pow(Accuracy.Value, 2 + (2 * Accuracy.Value)) * accuracyProgress)
+ return (10000 * comboProgress)
+ + (990000 * Math.Pow(Accuracy.Value, 2 + (2 * Accuracy.Value)) * accuracyProgress)
+ bonusPortion;
}
}
diff --git a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs
index b27b47364..8d22ca8aa 100644
--- a/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs
+++ b/osu.Game.Rulesets.Sentakki/SentakkiInputManager.cs
@@ -1,9 +1,5 @@
-using System.Collections.Generic;
-using osu.Framework.Extensions.ListExtensions;
-using osu.Framework.Graphics;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
-using osu.Framework.Input.States;
using osu.Framework.Lists;
using osu.Framework.Localisation;
using osu.Game.Rulesets.Sentakki.Localisation;
@@ -38,30 +34,9 @@ protected override bool Handle(UIEvent e)
return base.Handle(e);
}
-
- // We want the press behavior of SimultaneousBindingMode.All, but we want the release behavior of SimultaneousBindingMode.Unique
- // As long as there are more than one input source triggering the action, we manually remove the action from the list once, without propogating the release
- // When the final source is released, we let the original handling take over, which would also propogate the release event
- // This is so that multiple sources (virtual input/key) can trigger a press, but not release until the last key is released
- protected override void PropagateReleased(IEnumerable drawables, InputState state, SentakkiAction released)
- {
- int actionCount = 0;
- var pressed = (List)PressedActions;
-
- for (int i = 0; i < pressed.Count; ++i)
- {
- if (pressed[i] == released && ++actionCount > 1)
- break;
- }
-
- if (actionCount > 1)
- pressed.Remove(released);
- else
- base.PropagateReleased(drawables, state, released);
- }
}
- public SlimReadOnlyListWrapper PressedActions => ((List)KeyBindingContainer.PressedActions).AsSlimReadOnly();
+ public SlimReadOnlyListWrapper PressedActions => KeyBindingContainer.PressedActions;
// For makeshift virtual input handling
public void TriggerPressed(SentakkiAction action) => KeyBindingContainer.TriggerPressed(action);
diff --git a/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/DrawableLine.cs b/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/DrawableLine.cs
index df0dad9b7..5a26ece43 100644
--- a/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/DrawableLine.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/DrawableLine.cs
@@ -50,7 +50,7 @@ protected override void PrepareForUse()
Colour = Entry.Colour;
Rotation = Entry.Rotation;
- line.Current.Value = Entry.AngleRange;
+ line.Progress = Entry.AngleRange;
resetAnimation();
}
diff --git a/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/LineLifetimeEntry.cs b/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/LineLifetimeEntry.cs
index f422da1bf..374dcbe2a 100644
--- a/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/LineLifetimeEntry.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/Components/HitObjectLine/LineLifetimeEntry.cs
@@ -61,7 +61,7 @@ public void UpdateLine()
var hitObject = HitObjects.First();
- Colour = hitObject.Break ? Color4.OrangeRed : hitObject.DefaultNoteColour;
+ Colour = hitObject.NoteColour;
Rotation = hitObject.Lane.GetRotationForLane() - 45;
}
else if (HitObjects.Count > 1)
diff --git a/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs b/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs
index c846afbb7..823fe3283 100644
--- a/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/Components/LiveCounter.cs
@@ -75,7 +75,12 @@ protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint,
float panicDurationMultiplier = 1 * MathF.Pow(0.75f, panicLevel);
float beatMagnitude = 0.1f + (0.05f * panicLevel);
- if (beatIndex % (int)(timingPoint.TimeSignature.Numerator * Math.Max(panicDurationMultiplier, 0.5f)) == 0)
+ int heartbeatFreq = (int)(timingPoint.TimeSignature.Numerator * Math.Max(panicDurationMultiplier, 0.5f));
+
+ if (heartbeatFreq == 0)
+ return;
+
+ if (beatIndex % heartbeatFreq == 0)
{
this.ScaleTo(1 + beatMagnitude, 200 * panicDurationMultiplier)
.Then().ScaleTo(1, 120 * panicDurationMultiplier)
diff --git a/osu.Game.Rulesets.Sentakki/UI/Components/PlayfieldVisualization.cs b/osu.Game.Rulesets.Sentakki/UI/Components/PlayfieldVisualization.cs
index 1f554be69..784f35be7 100644
--- a/osu.Game.Rulesets.Sentakki/UI/Components/PlayfieldVisualization.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/Components/PlayfieldVisualization.cs
@@ -225,13 +225,13 @@ protected override void Draw(IRenderer renderer)
if (audioData[i] < amplitude_dead_zone)
continue;
- float rotation = MathUtils.DegreesToRadians((i / (float)bars_per_visualiser * 360) + (j * 360 / visualiser_rounds));
+ float rotation = float.DegreesToRadians((i / (float)bars_per_visualiser * 360) + (j * 360 / visualiser_rounds));
float rotationCos = MathF.Cos(rotation);
float rotationSin = MathF.Sin(rotation);
// taking the cos and sin to the 0..1 range
var barPosition = new Vector2((rotationCos / 2) + 0.5f, (rotationSin / 2) + 0.5f) * size;
- var barSize = new Vector2(size * MathF.Sqrt(2 * (1 - MathF.Cos(MathUtils.DegreesToRadians(360f / bars_per_visualiser)))) / 2f, bar_length * audioData[i]);
+ var barSize = new Vector2(size * MathF.Sqrt(2 * (1 - MathF.Cos(float.DegreesToRadians(360f / bars_per_visualiser)))) / 2f, bar_length * audioData[i]);
// The distance between the position and the sides of the bar.
var bottomOffset = new Vector2(-rotationSin * barSize.X / 2, rotationCos * barSize.X / 2);
// The distance between the bottom side of the bar and the top side.
diff --git a/osu.Game.Rulesets.Sentakki/UI/DrawableSentakkiRuleset.cs b/osu.Game.Rulesets.Sentakki/UI/DrawableSentakkiRuleset.cs
index c961ef86c..e69cb0562 100644
--- a/osu.Game.Rulesets.Sentakki/UI/DrawableSentakkiRuleset.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/DrawableSentakkiRuleset.cs
@@ -8,6 +8,7 @@
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Beatmaps;
+using osu.Game.Screens.Play;
using osu.Game.Input.Bindings;
using osu.Game.Input.Handlers;
using osu.Game.Replays;
@@ -159,15 +160,8 @@ public void OnReleased(KeyBindingReleaseEvent e) { }
public override DrawableHitObject CreateDrawableRepresentation(SentakkiHitObject h) => null!;
- // protected override ResumeOverlay CreateResumeOverlay() => new SentakkiResumeOverlay();
+ protected override ResumeOverlay CreateResumeOverlay() => new DelayedResumeOverlay();
protected override PassThroughInputManager CreateInputManager() => new SentakkiInputManager(Ruleset.RulesetInfo);
-
- /* public override void RequestResume(Action continueResume)
- {
- ResumeOverlay.GameplayCursor = Cursor;
- ResumeOverlay.ResumeAction = continueResume;
- ResumeOverlay.Show();
- } */
}
}
diff --git a/osu.Game.Rulesets.Sentakki/UI/Lane.cs b/osu.Game.Rulesets.Sentakki/UI/Lane.cs
index f935ce996..c69672446 100644
--- a/osu.Game.Rulesets.Sentakki/UI/Lane.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/Lane.cs
@@ -65,9 +65,12 @@ private void load()
#region Input Handling
- private const float receptor_angle_range = 45 * 1.4f;
+ private const float receptor_angle_range = 45;
private const float receptor_angle_range_mid = receptor_angle_range / 2;
+ private const float receptor_angle_range_inner = receptor_angle_range * 1.4f;
+ private const float receptor_angle_range_inner_mid = receptor_angle_range_inner / 2;
+
private SentakkiInputManager sentakkiActionInputManager = null!;
internal SentakkiInputManager SentakkiActionInputManager => sentakkiActionInputManager ??= (SentakkiInputManager)GetContainingInputManager();
@@ -78,10 +81,12 @@ public override bool ReceivePositionalInputAt(Vector2 screenSpacePos)
var localPos = ToLocalSpace(screenSpacePos);
float distance = Vector2.DistanceSquared(Vector2.Zero, localPos);
- if (distance is < (200 * 200) or > (400 * 400)) return false;
+ if (distance is < (200 * 200) or > (600 * 600)) return false;
+
+ float targetAngleRangeMid = distance > 400 ? receptor_angle_range_mid : receptor_angle_range_inner_mid;
float angleDelta = SentakkiExtensions.GetDeltaAngle(0, Vector2.Zero.GetDegreesFromPosition(localPos));
- if (Math.Abs(angleDelta) > receptor_angle_range_mid) return false;
+ if (Math.Abs(angleDelta) > targetAngleRangeMid) return false;
return true;
}
@@ -126,10 +131,16 @@ private void updateInputState()
private void handleKeyPress(ValueChangedEvent keys)
{
if (keys.NewValue < keys.OldValue)
- SentakkiActionInputManager.TriggerReleased(SentakkiAction.Key1 + LaneNumber);
+ for (int i = 0; i < keys.OldValue - keys.NewValue; ++i)
+ {
+ SentakkiActionInputManager.TriggerReleased(SentakkiAction.Key1 + LaneNumber);
+ }
if (keys.NewValue > keys.OldValue)
- SentakkiActionInputManager.TriggerPressed(SentakkiAction.Key1 + LaneNumber);
+ for (int i = 0; i < keys.NewValue - keys.OldValue; ++i)
+ {
+ SentakkiActionInputManager.TriggerPressed(SentakkiAction.Key1 + LaneNumber);
+ }
}
public bool OnPressed(KeyBindingPressEvent e)
diff --git a/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs b/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs
index 3d5c1c4bb..04e4b3647 100644
--- a/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/LanedPlayfield.cs
@@ -17,6 +17,7 @@ public partial class LanedPlayfield : Playfield
public readonly List Lanes = new List();
private readonly SortedDrawableProxyContainer slideBodyProxyContainer;
+ private readonly SortedDrawableProxyContainer slideStarProxyContainer;
private readonly SortedDrawableProxyContainer lanedNoteProxyContainer;
public readonly LineRenderer HitObjectLineRenderer;
@@ -49,6 +50,7 @@ public LanedPlayfield()
chevronPool = new DrawablePool(100),
HitObjectLineRenderer = new LineRenderer(),
slideBodyProxyContainer = new SortedDrawableProxyContainer(),
+ slideStarProxyContainer = new SortedDrawableProxyContainer(),
LanedHitObjectArea = new Container
{
RelativeSizeAxes = Axes.Both,
@@ -87,7 +89,8 @@ private void onHitObjectLoaded(Drawable hitObject)
switch (hitObject)
{
case DrawableSlideBody s:
- slideBodyProxyContainer.Add(s.CreateProxy(), s);
+ slideBodyProxyContainer.Add(s.Slidepath.CreateProxy(), s);
+ slideStarProxyContainer.Add(s.SlideStars.CreateProxy(), s);
break;
case DrawableTap t:
diff --git a/osu.Game.Rulesets.Sentakki/UI/SentakkiResumeOverlay.cs b/osu.Game.Rulesets.Sentakki/UI/SentakkiResumeOverlay.cs
deleted file mode 100644
index d2eed4bda..000000000
--- a/osu.Game.Rulesets.Sentakki/UI/SentakkiResumeOverlay.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-using System;
-using System.Linq;
-using osu.Framework.Allocation;
-using osu.Framework.Bindables;
-using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
-using osu.Framework.Graphics.Cursor;
-using osu.Framework.Localisation;
-using osu.Framework.Utils;
-using osu.Game.Audio;
-using osu.Game.Beatmaps;
-using osu.Game.Graphics;
-using osu.Game.Graphics.Sprites;
-using osu.Game.Rulesets.Sentakki.Localisation;
-using osu.Game.Screens.Play;
-using osu.Game.Skinning;
-using osuTK.Graphics;
-
-namespace osu.Game.Rulesets.Sentakki.UI
-{
- public partial class SentakkiResumeOverlay : ResumeOverlay
- {
- [Resolved]
- private IBindable beatmap { get; set; } = null!;
-
- [Resolved]
- private DrawableSentakkiRuleset? drawableSentakkiRuleset { get; set; }
-
- // We don't want the default message
- protected override LocalisableString Message => "";
-
- private OsuSpriteText messageText = null!;
-
- private double beatlength;
-
- private double remainingTime = 3500;
-
- private readonly Bindable beatsLeft = new Bindable(4);
- private int barLength;
-
- private SkinnableSound countSound = null!;
-
- private SentakkiCursorContainer? localCursorContainer;
-
- public override CursorContainer? LocalCursor => State.Value == Visibility.Visible ? localCursorContainer : null;
-
- [BackgroundDependencyLoader]
- private void load(OsuColour colours)
- {
- Origin = Anchor.Centre;
- Anchor = Anchor.Centre;
- RelativeSizeAxes = Axes.Both;
- Children = new Drawable[]
- {
- messageText = new OsuSpriteText
- {
- Font = OsuFont.Torus.With(size: 50, weight: FontWeight.SemiBold),
- Colour = colours.Yellow,
- Anchor = Anchor.Centre,
- Origin = Anchor.Centre,
- ShadowColour = new Color4(0f, 0f, 0f, 0.25f)
- },
- countSound = new SkinnableSound(new SampleInfo("Gameplay/Taka"))
- };
-
- beatsLeft.ValueChanged += onCountUpdated;
- }
-
- protected override void Update()
- {
- base.Update();
- if (State.Value == Visibility.Hidden) return;
-
- remainingTime -= Clock.ElapsedFrameTime;
- beatsLeft.Value = (int)Math.Ceiling(remainingTime / beatlength);
- }
-
- protected override void PopIn()
- {
- base.PopIn();
-
- messageText.Text = SentakkiResumeOverlayStrings.GetReady;
-
- var currentTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(beatmap.Value.Track.CurrentTime);
- barLength = currentTimingPoint.TimeSignature.Numerator;
- beatlength = currentTimingPoint.BeatLength / (drawableSentakkiRuleset?.GameplaySpeed ?? 1);
-
- // Reset the countdown, plus a second for preparation
- remainingTime = (barLength * beatlength) + 1000;
-
- if (localCursorContainer == null)
- Add(localCursorContainer = new SentakkiCursorContainer());
-
- localCursorContainer.State.BindTo(GameplayCursor.State);
- GameplayCursor.ActiveCursor.Hide();
- }
-
- protected override void PopOut()
- {
- base.PopOut();
- messageText.Text = SentakkiResumeOverlayStrings.LetsGo;
-
- if (localCursorContainer != null && GameplayCursor?.ActiveCursor != null)
- {
- GameplayCursor.ActiveCursor.Position = localCursorContainer.ActiveCursor.Position;
- }
-
- localCursorContainer?.Expire();
- localCursorContainer = null;
- GameplayCursor?.ActiveCursor?.Show();
- }
-
- private void onCountUpdated(ValueChangedEvent beatsLeft)
- {
- if (beatsLeft.NewValue < barLength && beatsLeft.NewValue < beatsLeft.OldValue)
- {
- countSound?.Play();
-
- messageText.Text = beatsLeft.NewValue.ToString();
- messageText.FinishTransforms();
- messageText.ScaleTo(1.1f, 100).Then().ScaleTo(1, 50);
- }
-
- if (beatsLeft.NewValue <= 0)
- Resume();
- }
- }
-}
diff --git a/osu.Game.Rulesets.Sentakki/UI/SentakkiSettingsSubsection.cs b/osu.Game.Rulesets.Sentakki/UI/SentakkiSettingsSubsection.cs
index 4289b4141..f76f6c63c 100644
--- a/osu.Game.Rulesets.Sentakki/UI/SentakkiSettingsSubsection.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/SentakkiSettingsSubsection.cs
@@ -59,7 +59,7 @@ private void load()
},
new SettingsSlider
{
- LabelText = SentakkiSettingsSubsectionStrings.TouchNoteFadeInSpeed,
+ LabelText = SentakkiSettingsSubsectionStrings.TouchNoteEntrySpeed,
Current = config.GetBindable(SentakkiRulesetSettings.TouchAnimationSpeed),
},
new SettingsSlider
@@ -74,13 +74,6 @@ private void load()
LabelText = SentakkiSettingsSubsectionStrings.LaneInputMode,
Current = config.GetBindable(SentakkiRulesetSettings.LaneInputMode)
},
- new SettingsSlider>
- {
- LabelText = SentakkiSettingsSubsectionStrings.BreakSampleVolume,
- Current = config.GetBindable(SentakkiRulesetSettings.BreakSampleVolume),
- KeyboardStep = 0.01f,
- DisplayAsPercentage = true,
- }
};
}
diff --git a/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs b/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs
index aae1b61d7..784436843 100644
--- a/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs
+++ b/osu.Game.Rulesets.Sentakki/UI/TouchPlayfield.cs
@@ -76,8 +76,6 @@ protected override void Update()
private void handlePointInput(int pointID, bool hasAction, Vector2? pointerPosition)
{
- bool continueEventPropogation = true;
-
foreach (DrawableTouch touch in aliveTouchNotes)
{
if (hasAction && touch.ReceivePositionalInputAt(pointerPosition!.Value))
@@ -85,8 +83,7 @@ private void handlePointInput(int pointID, bool hasAction, Vector2? pointerPosit
if (!touch.PointInteractionState[pointID])
{
touch.PointInteractionState[pointID] = true;
- if (continueEventPropogation)
- continueEventPropogation = !touch.OnNewPointInteraction();
+ touch.OnNewPointInteraction();
}
}
else
diff --git a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj
index 8cfa71f67..e34c654a9 100644
--- a/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj
+++ b/osu.Game.Rulesets.Sentakki/osu.Game.Rulesets.Sentakki.csproj
@@ -2,14 +2,14 @@
sentakki for osu!lazer
TAP, HOLD and SLIDE to the beat.
- net6.0
+ net8.0
Library
AnyCPU
osu.Game.Rulesets.Sentakki
osu.Game.Rulesets.Sentakki
-
+