diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollJudgement.cs index 4663d00bdc..e1a630e6b7 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollJudgement.cs @@ -9,8 +9,8 @@ namespace osu.Game.Rulesets.Taiko.Judgements { public override bool AffectsCombo => false; - public override bool AffectsHP => false; - protected override int NumericResultFor(HitResult result) => 0; + + protected override double HealthIncreaseFor(HitResult result) => 0; } } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs index 446dd0d11b..b2adf45bab 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoDrumRollTickJudgement.cs @@ -19,5 +19,16 @@ namespace osu.Game.Rulesets.Taiko.Judgements return 200; } } + + protected override double HealthIncreaseFor(HitResult result) + { + switch(result) + { + default: + return 0; + case HitResult.Great: + return 0.0000003; + } + } } } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoJudgement.cs index 386495bf1b..f43227ecca 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoJudgement.cs @@ -9,12 +9,7 @@ namespace osu.Game.Rulesets.Taiko.Judgements public class TaikoJudgement : Judgement { public override HitResult MaxResult => HitResult.Great; - - /// - /// Whether this should affect user's hitpoints. - /// - public virtual bool AffectsHP => true; - + /// /// Computes the numeric result value for the combo portion of the score. /// @@ -32,5 +27,32 @@ namespace osu.Game.Rulesets.Taiko.Judgements return 300; } } + + /// + /// Retrieves the numeric health increase of a . + /// + /// The to find the numeric health increase for. + /// The numeric health increase of . + protected virtual double HealthIncreaseFor(HitResult result) + { + switch (result) + { + default: + return 0; + case HitResult.Miss: + return -1.0; + case HitResult.Good: + return 1.1; + case HitResult.Great: + return 3.0; + } + } + + /// + /// Retrieves the numeric health increase of a . + /// + /// The to find the numeric health increase for. + /// The numeric health increase of . + public double HealthIncreaseFor(JudgementResult result) => HealthIncreaseFor(result.Type); } } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs index 2665540d07..81dfaf4cc3 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongJudgement.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Rulesets.Scoring; + namespace osu.Game.Rulesets.Taiko.Judgements { public class TaikoStrongJudgement : TaikoJudgement { // MainObject already changes the HP - public override bool AffectsHP => false; + protected override double HealthIncreaseFor(HitResult result) => 0; public override bool AffectsCombo => false; } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellJudgement.cs index b913f5d730..ca89d4d0e5 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellJudgement.cs @@ -9,6 +9,15 @@ namespace osu.Game.Rulesets.Taiko.Judgements { public override bool AffectsCombo => false; - protected override int NumericResultFor(HitResult result) => 0; + protected override double HealthIncreaseFor(HitResult result) + { + switch(result) + { + default: + return 0; + case HitResult.Miss: + return -0.65; + } + } } } diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellTickJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellTickJudgement.cs index 8dd03796ea..448c16dad6 100644 --- a/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellTickJudgement.cs +++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoSwellTickJudgement.cs @@ -9,17 +9,8 @@ namespace osu.Game.Rulesets.Taiko.Judgements { public override bool AffectsCombo => false; - public override bool AffectsHP => false; + protected override int NumericResultFor(HitResult result) => 0; - protected override int NumericResultFor(HitResult result) - { - switch (result) - { - default: - return 0; - case HitResult.Great: - return 300; - } - } + protected override double HealthIncreaseFor(HitResult result) => 0; } } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs index 48731388cb..8c19e64de6 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs @@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables } var result = HitObject.HitWindows.ResultFor(timeOffset); - if (result == HitResult.None) + if (result <= HitResult.Miss) return; if (!validActionPressed) diff --git a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs index b791d889ee..50989cef7c 100644 --- a/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs +++ b/osu.Game.Rulesets.Taiko/Scoring/TaikoScoreProcessor.cs @@ -73,11 +73,8 @@ namespace osu.Game.Rulesets.Taiko.Scoring /// protected override bool DefaultFailCondition => JudgedHits == MaxHits && Health.Value <= 0.5; - private double hpIncreaseTick; - private double hpIncreaseGreat; - private double hpIncreaseGood; - private double hpIncreaseMiss; - private double hpIncreaseMissSwell; + private double hpMultiplier; + private double hpMissMultiplier; public TaikoScoreProcessor(RulesetContainer rulesetContainer) : base(rulesetContainer) @@ -88,49 +85,25 @@ namespace osu.Game.Rulesets.Taiko.Scoring { base.ApplyBeatmap(beatmap); - double hpMultiplierNormal = 1 / (hp_hit_great * beatmap.HitObjects.FindAll(o => o is Hit).Count * BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, 0.5, 0.75, 0.98)); + hpMultiplier = 0.01 / (hp_hit_great * beatmap.HitObjects.FindAll(o => o is Hit).Count * BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, 0.5, 0.75, 0.98)); - hpIncreaseTick = hp_hit_tick; - hpIncreaseGreat = hpMultiplierNormal * hp_hit_great; - hpIncreaseGood = hpMultiplierNormal * hp_hit_good; - hpIncreaseMiss = BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, hp_miss_min, hp_miss_mid, hp_miss_max); - hpIncreaseMissSwell = BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, swell_hp_miss_min, swell_hp_miss_mid, swell_hp_miss_max); + hpMissMultiplier = BeatmapDifficulty.DifficultyRange(beatmap.BeatmapInfo.BaseDifficulty.DrainRate, 0.0018, 0.0075, 0.0120); } protected override void ApplyResult(JudgementResult result) { base.ApplyResult(result); - if (!((TaikoJudgement)result.Judgement).AffectsHP) - return; - - bool isSwell = false; - bool isTick = result.Judgement is TaikoDrumRollTickJudgement; - - if(!isTick) - isSwell = result.Judgement is TaikoSwellJudgement; - - // Apply HP changes - switch (result.Type) + if (result.Judgement is TaikoJudgement taikoJudgement) { - case HitResult.Miss: - // Missing ticks shouldn't drop HP - if (isSwell) - Health.Value += hpIncreaseMissSwell; - else if (!isTick) - Health.Value += hpIncreaseMiss; - break; - case HitResult.Good: - // Swells shouldn't increase HP - if (!isSwell) - Health.Value += hpIncreaseGood; - break; - case HitResult.Great: - if (isTick) - Health.Value += hpIncreaseTick; - else if(!isSwell) - Health.Value += hpIncreaseGreat; - break; + double hpIncrease = taikoJudgement.HealthIncreaseFor(result); + + if (result.Type == HitResult.Miss) + hpIncrease *= hpMissMultiplier; + else + hpIncrease *= hpMultiplier; + + Health.Value += hpIncrease; } } diff --git a/osu.sln.DotSettings b/osu.sln.DotSettings index 38288bc912..d6882282e6 100644 --- a/osu.sln.DotSettings +++ b/osu.sln.DotSettings @@ -200,7 +200,6 @@ GL GLSL HID - HP HUD ID IP