From b72d44b1e805c5b142bac0543126ffae6df94119 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Wed, 5 Sep 2018 22:54:07 +0200 Subject: [PATCH 01/14] Added OsuModDeflate class and adjusted OsuRuleset.cs --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 44 +++++++++++++++++++++ osu.Game.Rulesets.Osu/OsuRuleset.cs | 5 +++ 2 files changed, 49 insertions(+) create mode 100644 osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs new file mode 100644 index 0000000000..ec80537a52 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Game.Graphics; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects.Drawables; +using System.Collections.Generic; + +namespace osu.Game.Rulesets.Osu.Mods +{ + public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + { + public override string Name => "Deflate"; + public override string ShortenedName => "DF"; + public override FontAwesome Icon => FontAwesome.fa_compress; + public override ModType Type => ModType.Fun; + public override string Description => "Become one with the approach circle..."; + public override double ScoreMultiplier => 1; + + public void ApplyToDrawableHitObjects(IEnumerable drawables) + { + foreach (var drawable in drawables) + drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; + } + + protected void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + { + if (!(drawable is DrawableHitCircle d)) + return; + + d.ApproachCircle.Hide(); + var h = d.HitObject; + + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + { + var origScale = d.Scale; + d.ScaleTo(1.1f); + d.ScaleTo(origScale, h.TimePreempt); + } + } + } +} diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index fa6e9a018a..461f7188c9 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -117,6 +117,11 @@ namespace osu.Game.Rulesets.Osu new OsuModRelax(), new OsuModAutopilot(), }; + case ModType.Fun: + return new Mod[] + { + new OsuModDeflate(), + }; default: return new Mod[] { }; } From 9a5127d506e255ab70ae00d2a4ad83bbe27d2c73 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:29:55 +0200 Subject: [PATCH 02/14] fixed object scale upon hit --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index ec80537a52..8c6f82dee4 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -29,15 +29,14 @@ namespace osu.Game.Rulesets.Osu.Mods { if (!(drawable is DrawableHitCircle d)) return; - d.ApproachCircle.Hide(); var h = d.HitObject; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) { var origScale = d.Scale; - d.ScaleTo(1.1f); - d.ScaleTo(origScale, h.TimePreempt); + d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that + .Then() + .ScaleTo(origScale, h.TimePreempt); } } } From 98042eb7d4aaec3e53530b6ffbc2bff2b014ea71 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:46:36 +0200 Subject: [PATCH 03/14] add the default fadeout-while-scaling-up to clicked objects --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 8c6f82dee4..a4f841f188 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -36,7 +36,9 @@ namespace osu.Game.Rulesets.Osu.Mods var origScale = d.Scale; d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that .Then() - .ScaleTo(origScale, h.TimePreempt); + .ScaleTo(origScale, h.TimePreempt) + .Then() + .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo } } } From 8b09935c378b38f72f8c7429d1ed84a3fdf5e198 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:49:52 +0200 Subject: [PATCH 04/14] previous commit only added scaling-up (oops), this one includes fading --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index a4f841f188..db46d3992a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -38,6 +38,7 @@ namespace osu.Game.Rulesets.Osu.Mods .Then() .ScaleTo(origScale, h.TimePreempt) .Then() + .FadeOut(800) .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo } } From 01a4c8d92b5556d1757adb7a828a8ffbe7bc5d7c Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Oct 2018 12:11:19 +0200 Subject: [PATCH 05/14] Add deflate mod to OsuRuleset.cs --- osu.Game.Rulesets.Osu/OsuRuleset.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index 6736d10dab..30dd9c73d6 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -121,6 +121,7 @@ namespace osu.Game.Rulesets.Osu return new Mod[] { new OsuModTransform(), new OsuModWiggle(), + new OsuModDeflate(), }; default: return new Mod[] { }; From 0ae9c78c38ce3cd33b3b3cfce14234050ad6b05f Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Oct 2018 12:29:21 +0200 Subject: [PATCH 06/14] set drawableOnApplyCustomUpdateState private to make AppVeyor happy :) --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index db46d3992a..d61d552ce2 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Osu.Mods drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; } - protected void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) { if (!(drawable is DrawableHitCircle d)) return; From 951ac30de8a6db2af540b7aef26f5fb352b41330 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Wed, 10 Oct 2018 01:36:37 +0200 Subject: [PATCH 07/14] ArmedState now considered, SliderBody now deflates (TODO: handle slider's nested objects) --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 55 +++++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index d61d552ce2..f5be85158f 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -7,6 +7,7 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; using System.Collections.Generic; +using OpenTK; namespace osu.Game.Rulesets.Osu.Mods { @@ -27,19 +28,53 @@ namespace osu.Game.Rulesets.Osu.Mods private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) { - if (!(drawable is DrawableHitCircle d)) + if (!(drawable is DrawableOsuHitObject d)) return; - d.ApproachCircle.Hide(); + var h = d.HitObject; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + + switch (drawable) { - var origScale = d.Scale; - d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that - .Then() - .ScaleTo(origScale, h.TimePreempt) - .Then() - .FadeOut(800) - .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo + case DrawableHitCircle c: + c.ApproachCircle.Hide(); + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + { + var origScale = d.Scale; + d.ScaleTo(1.1f, 1) + .Then() + .ScaleTo(origScale, h.TimePreempt); + } + switch (state) + { + case ArmedState.Miss: + d.FadeOut(100); + break; + case ArmedState.Hit: + d.FadeOut(800) + .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); + break; + } + break; + case DrawableSlider s: + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + { + float origPathWidth = s.Body.PathWidth; + var origBodySize = s.Body.Size; + var origBodyDrawPos = s.Body.DrawPosition; + + s.Body.MoveTo(origBodyDrawPos - new Vector2(origPathWidth), 1) + .Then() + .MoveTo(origBodyDrawPos, h.TimePreempt); + + s.Body.ResizeTo(origBodySize * 2, 1) + .Then() + .ResizeTo(origBodySize, h.TimePreempt); + + s.Body.TransformTo("PathWidth", origPathWidth * 2, 1) + .Then() + .TransformTo("PathWidth", origPathWidth, h.TimePreempt); + } + break; } } } From 19efa1cafb33859e7444d981790a5c90c42e3f70 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 20:55:42 +0200 Subject: [PATCH 08/14] Added TestCase, first RepeatPoint now deflates aswell --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 27 +- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 + osu.Game.Tests/Visual/TestCaseDeflate.cs | 637 ++++++++++++++++++ 3 files changed, 655 insertions(+), 11 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseDeflate.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index f5be85158f..a049248021 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -33,6 +33,8 @@ namespace osu.Game.Rulesets.Osu.Mods var h = d.HitObject; + float rescale = 2; + switch (drawable) { case DrawableHitCircle c: @@ -55,6 +57,7 @@ namespace osu.Game.Rulesets.Osu.Mods break; } break; + case DrawableSlider s: using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) { @@ -62,19 +65,21 @@ namespace osu.Game.Rulesets.Osu.Mods var origBodySize = s.Body.Size; var origBodyDrawPos = s.Body.DrawPosition; - s.Body.MoveTo(origBodyDrawPos - new Vector2(origPathWidth), 1) - .Then() - .MoveTo(origBodyDrawPos, h.TimePreempt); - - s.Body.ResizeTo(origBodySize * 2, 1) - .Then() - .ResizeTo(origBodySize, h.TimePreempt); - - s.Body.TransformTo("PathWidth", origPathWidth * 2, 1) - .Then() - .TransformTo("PathWidth", origPathWidth, h.TimePreempt); + // Fits nicely for CS=4, too big on lower CS, too small on higher CS + s.Body.Animate( + b => b.MoveTo(origBodyDrawPos - new Vector2(origPathWidth)).MoveTo(origBodyDrawPos, h.TimePreempt), + b => b.ResizeTo(origBodySize * rescale).ResizeTo(origBodySize, h.TimePreempt), + b => b.TransformTo("PathWidth", origPathWidth * rescale).TransformTo("PathWidth", origPathWidth, h.TimePreempt) + ); } break; + case DrawableRepeatPoint rp: + if (!rp.IsFirstRepeat) + break; + var origSizeRP = rp.Size; + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + rp.ResizeTo(origSizeRP * rescale).ResizeTo(origSizeRP, h.TimePreempt); + break; } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index dfe7937e81..65b6b5b004 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -41,6 +41,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables }; } + public bool IsFirstRepeat => repeatPoint.RepeatIndex == 0; + protected override void CheckForResult(bool userTriggered, double timeOffset) { if (repeatPoint.StartTime <= Time.Current) diff --git a/osu.Game.Tests/Visual/TestCaseDeflate.cs b/osu.Game.Tests/Visual/TestCaseDeflate.cs new file mode 100644 index 0000000000..8a24e2414c --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseDeflate.cs @@ -0,0 +1,637 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.ComponentModel; +using System.IO; +using System.Text; +using System.Linq; +using osu.Game.Beatmaps; +using osu.Game.Rulesets; +using Decoder = osu.Game.Beatmaps.Formats.Decoder; +using osu.Game.Rulesets.Osu.Mods; +using osu.Game.Screens.Play; +using osu.Game.Rulesets.Scoring; + +namespace osu.Game.Tests.Visual +{ + [Description("Player instantiated with an deflate mod.")] + public class TestCaseDeflate : TestCasePlayer + { + protected override IBeatmap CreateBeatmap(Ruleset ruleset) + { + Beatmap beatmap; + using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) + using (var reader = new StreamReader(stream)) + beatmap = Decoder.GetDecoder(reader).Decode(reader); + beatmap.BeatmapInfo.Ruleset = ruleset.RulesetInfo; + beatmap.BeatmapInfo.BaseDifficulty.CircleSize = 4; + return beatmap; + } + + protected override Player CreatePlayer(Ruleset ruleset) + { + Beatmap.Value.Mods.Value = Beatmap.Value.Mods.Value.Concat(new[] { ruleset.GetAutoplayMod(), ruleset.GetAllMods().First(mod => mod is OsuModDeflate) }); + return new ScoreAccessiblePlayer + { + AllowPause = false, + AllowLeadIn = false, + AllowResults = false, + }; + } + + protected override bool ContinueCondition(Player player) => base.ContinueCondition(player) && ((ScoreAccessiblePlayer)player).ScoreProcessor.TotalScore > 0; + + private class ScoreAccessiblePlayer : Player + { + public new ScoreProcessor ScoreProcessor => base.ScoreProcessor; + } + + private const string test_beatmap_data = + @"osu file format v14 + +[General] +AudioFilename: R4V3 B0Y - S3RL Feat Krystal.mp3 +AudioLeadIn: 0 +PreviewTime: 56176 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 12382,23354,34325,45297,56268,67240,78211,89182,100154,111125,122097,128605,133068,144040,155011,165982,175582 +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 3.799998 + +[Metadata] +Title:R4V3 B0Y +TitleUnicode:R4V3 B0Y +Artist:S3RL feat Krystal +ArtistUnicode:S3RL feat Krystal +Creator:DeRandom Otaku +Version:FCL's H4RD +Source: +Tags:happy hardcore EMFA music rave boy Shmiklak FCL ByBy ByBy13 ByBy_Chan Marvollo M_a_r_v_o_l_l_o +BeatmapID:1056070 +BeatmapSetID:481451 + +[Difficulty] +HPDrainRate:5 +CircleSize:4 +OverallDifficulty:6 +ApproachRate:7.5 +SliderMultiplier:1.4 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,'BG.jpg',0,0 +//Break Periods +2,89376,99323 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +34,342.857142857143,4,1,1,100,1,0 +34,-133.333333333333,4,1,1,100,0,0 +1405,-133.333333333333,4,2,1,70,0,0 +12376,-125,4,2,2,70,0,0 +21976,-100,4,2,2,45,0,0 +23348,-100,4,2,2,85,0,0 +26091,-100,4,2,2,85,0,0 +31576,-100,4,2,2,85,0,0 +34319,-100,4,2,2,85,0,0 +37062,-100,4,2,2,85,0,0 +42462,-100,4,2,2,5,0,0 +42548,-100,4,2,2,85,0,0 +43919,-100,4,2,2,65,0,0 +45291,-100,4,2,2,50,0,0 +50691,-100,4,2,2,5,0,0 +50776,-100,4,2,2,50,0,0 +56262,-100,4,2,2,90,0,1 +65862,-125,4,2,2,90,0,0 +67234,-100,4,2,2,90,0,1 +72719,-100,4,2,2,90,0,1 +76834,-125,4,2,2,45,0,0 +78205,-125,4,2,0,50,0,0 +100148,-125,4,2,2,50,0,0 +100491,-125,4,2,0,50,0,0 +111119,-100,4,2,2,50,0,0 +116091,-100,4,2,2,10,0,0 +116262,-100,4,2,2,50,0,0 +116434,-100,4,2,2,10,0,0 +116605,-100,4,2,2,50,0,0 +121748,-133.333333333333,4,2,2,50,0,0 +122091,-100,4,2,2,50,0,0 +127576,-100,4,2,2,50,0,0 +130319,-90.9090909090909,4,2,2,50,0,0 +131005,-83.3333333333333,4,2,2,50,0,0 +131691,-76.9230769230769,4,2,2,50,0,0 +132376,-133.333333333333,4,2,2,50,0,0 +133062,-100,4,2,2,90,0,1 +135719,-100,4,2,2,5,0,1 +135805,-100,4,2,2,90,0,1 +141205,-100,4,2,2,5,0,1 +141291,-100,4,2,2,90,0,1 +142662,-100,4,2,2,70,0,0 +143691,-100,4,2,2,40,0,0 +144034,-100,4,2,2,90,0,1 +146691,-100,4,2,2,5,0,1 +146776,-100,4,2,2,90,0,1 +152176,-100,4,2,2,5,0,1 +152262,-100,4,2,2,90,0,1 +154662,-100,4,2,2,60,0,1 +155005,-100,4,2,2,75,0,0 +165976,-100,4,2,2,75,0,0 +171462,-133.333333333333,4,2,2,60,0,0 +174205,-153.846153846153,4,2,2,50,0,0 +174891,-153.846153846154,4,2,2,40,0,0 +175576,-100,4,2,2,25,0,0 +176262,-125,4,2,2,25,0,0 +176605,-125,4,2,2,15,0,0 + + +[Colours] + Combo1 : 0,255,255 +Combo2 : 17,255,17 +Combo3 : 0,128,192 +Combo4 : 124,0,249 + +[HitObjects] +138,122,34,6,0,L|133:229,3,105.000004005432,0|0|0|0,2:0|2:0|2:0|2:0,2:2:0:0: +133,226,1405,6,0,L|248:220,1,105.000004005432,2|2,1:2|0:0,0:0:0:0: +339,341,2091,2,0,L|222:338,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +133,226,2776,2,0,P|128:187|129:158,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: +188,123,3119,2,0,P|193:84|190:55,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: +262,34,3462,2,0,P|290:62|366:69,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +431,74,3976,1,0,0:0:0:0: +496,117,4148,6,0,L|503:229,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +456,286,4662,1,0,0:0:0:0: +408,349,4834,2,0,L|296:356,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +172,266,5519,2,0,P|155:216|165:148,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +206,101,6034,1,0,0:0:0:0: +239,172,6205,2,0,L|361:162,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +494,260,6891,6,0,B|443:252|443:252|386:267,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +324,308,7405,1,0,0:0:0:0: +248,287,7576,2,0,L|241:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +169,202,7919,2,0,L|176:142,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +239,104,8262,2,0,P|282:119|345:101,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +416,92,8776,1,0,0:0:0:0: +484,132,8948,2,0,L|491:195,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +445,249,9291,2,0,L|452:312,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +388,349,9634,6,0,P|354:328|289:335,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +216,360,10148,1,0,0:0:0:0: +143,328,10319,2,0,L|72:315,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +102,240,10662,2,0,L|173:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +224,195,11005,5,2,0:0:0:0: +160,148,11176,1,0,0:0:0:0: +233,120,11348,1,2,0:0:0:0: +172,69,11519,1,0,0:0:0:0: +247,45,11691,2,0,P|285:39|314:43,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +355,95,12034,2,0,P|378:105|399:121,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +482,162,12376,6,0,P|450:190|445:261,1,112,2|2,0:0|0:0,0:0:0:0: +298,342,13062,2,0,P|296:287|259:247,1,112,2|2,0:0|0:0,0:0:0:0: +132,135,13748,2,0,L|127:62,1,56,2|0,0:0|0:0,0:0:0:0: +209,57,14091,2,0,L|235:-11,1,56,2|0,0:0|0:0,0:0:0:0: +304,41,14434,2,0,P|348:52|380:44,2,56,2|0|2,0:0|0:0|0:0,0:0:0:0: +272,119,14948,1,0,0:0:0:0: +335,173,15119,6,0,L|340:298,1,112,2|2,0:0|0:0,0:0:0:0: +274,339,15634,1,0,0:0:0:0: +216,278,15805,2,0,B|165:262|165:262|86:278,1,112,2|2,0:0|0:0,0:0:0:0: +5,139,16491,2,0,B|56:123|56:123|135:139,1,112,2|2,0:0|0:0,0:0:0:0: +189,171,17005,1,0,0:0:0:0: +257,123,17176,2,0,L|379:117,1,112,2|2,0:0|0:0,0:0:0:0: +434,171,17691,1,0,0:0:0:0: +434,171,17776,1,0,0:0:0:0: +434,171,17862,6,0,P|450:218|426:288,1,112,2|2,0:0|0:0,0:0:0:0: +356,308,18376,1,0,0:0:0:0: +288,261,18548,2,0,L|207:258,1,56,2|0,0:0|0:0,0:0:0:0: +170,316,18891,2,0,L|89:319,1,56,2|0,0:0|0:0,0:0:0:0: +38,234,19234,2,0,P|110:237|160:210,1,112,2|2,0:0|0:0,0:0:0:0: +179,144,19748,1,0,0:0:0:0: +104,105,19919,2,0,L|100:31,1,56,2|0,0:0|0:0,0:0:0:0: +179,18,20262,2,0,L|210:8,3,28,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +247,8,20605,6,0,P|236:48|268:122,1,112,2|2,0:0|0:0,0:0:0:0: +311,178,21119,1,0,0:0:0:0: +288,259,21291,2,0,L|286:330,1,56,2|0,0:0|0:0,0:0:0:0: +363,349,21634,2,0,L|361:293,1,56,2|0,0:0|0:0,0:0:0:0: +408,231,21976,5,0,0:0:0:0: +462,125,23005,2,0,L|469:80,3,35 +499,48,23348,6,0,L|348:53,1,140,4|0,1:2|1:0,0:0:0:0: +178,161,24034,1,0,1:0:0:0: +244,241,24205,1,0,0:0:0:0: +244,241,24291,2,0,L|365:231,1,105,0|0,0:0|0:0,0:0:0:0: +434,292,24719,2,0,P|423:335|439:379,1,70,0|0,1:0|0:0,0:0:0:0: +325,333,25062,2,0,P|329:298|319:265,1,70,0|0,1:0|0:0,0:0:0:0: +250,185,25405,1,0,1:0:0:0: +308,135,25576,1,0,0:0:0:0: +213,111,25748,2,0,L|203:64,2,35,0|0|0,1:0|0:0|0:0,0:0:0:0: +146,183,26091,6,0,L|44:180,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +202,370,26776,1,0,1:0:0:0: +253,288,26948,1,0,0:0:0:0: +253,288,27034,2,0,B|236:237|236:237|246:176,1,105,0|0,0:0|0:0,0:0:0:0: +318,112,27462,2,0,L|466:102,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +139,224,28491,2,0,P|110:228|77:229,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +69,267,28834,6,0,P|131:258|212:289,1,140,0|0,1:0|1:0,0:0:0:0: +402,217,29519,1,0,1:0:0:0: +303,180,29691,1,0,0:0:0:0: +303,180,29776,2,0,P|288:123|299:60,1,105,0|0,0:0|0:0,0:0:0:0: +200,26,30205,2,0,P|155:51|54:21,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +166,125,31062,1,0,0:0:0:0: +242,197,31234,2,0,L|246:257,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +293,248,31576,6,0,L|139:246,1,140,0|0,1:0|1:0,0:0:0:0: +66,307,32091,1,0,0:0:0:0: +71,202,32262,2,0,L|84:35,1,140,0|0,1:0|1:0,0:0:0:0: +289,23,32948,5,0,0:0:0:0: +218,53,33119,1,0,0:0:0:0: +176,118,33291,2,0,P|174:157|190:205,2,70,0|0|0,0:0|0:0|0:0,0:0:0:0: +176,118,34148,1,8,0:0:0:0: +265,172,34319,6,0,L|418:174,1,140,4|0,1:2|1:0,0:0:0:0: +440,273,34834,1,0,0:0:0:0: +337,253,35005,2,0,P|281:253|235:345,1,140,0|0,1:0|1:0,0:0:0:0: +232,315,35519,1,0,0:0:0:0: +130,341,35691,2,0,L|36:328,1,70,0|0,1:0|0:0,0:0:0:0: +95,231,36034,2,0,L|15:179,1,70,0|0,1:0|0:0,0:0:0:0: +110,119,36376,2,0,L|59:38,1,70,0|0,1:0|0:0,0:0:0:0: +185,0,36719,1,0,1:0:0:0: +185,0,36805,2,0,L|193:69,1,70,0|0,0:0|0:0,0:0:0:0: +224,85,37062,6,0,L|307:102,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +262,183,37576,1,0,0:0:0:0: +185,253,37748,2,0,P|117:286|52:236,1,140,0|0,1:0|1:0,0:0:0:0: +116,166,38262,1,0,0:0:0:0: +185,253,38434,2,0,P|222:247|281:246,1,70,0|0,1:0|0:0,0:0:0:0: +344,299,38776,2,0,P|380:310|433:333,1,70,0|0,1:0|0:0,0:0:0:0: +500,267,39119,1,0,1:0:0:0: +379,96,39462,2,0,L|374:53,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +395,12,39805,6,0,L|224:2,1,140,0|0,1:0|1:0,0:0:0:0: +172,69,40319,1,0,0:0:0:0: +267,112,40491,2,0,P|250:151|275:259,1,140,0|0,1:0|1:0,0:0:0:0: +264,244,41005,1,0,0:0:0:0: +182,309,41176,2,0,P|155:264|127:236,1,70,0|0,1:0|0:0,0:0:0:0: +69,176,41519,2,0,P|96:131|124:103,1,70,0|0,1:0|0:0,0:0:0:0: +202,71,41862,1,0,1:0:0:0: +179,173,42034,1,0,0:0:0:0: +137,37,42205,1,0,1:0:0:0: +137,37,42291,2,0,L|35:33,1,70,0|0,0:0|0:0,0:0:0:0: +23,63,42548,6,0,B|6:161|6:161|23:218,1,140,0|0,1:0|1:0,0:0:0:0: +62,295,43062,1,0,0:0:0:0: +141,226,43234,1,0,1:0:0:0: +168,348,43405,1,0,0:0:0:0: +168,348,43491,2,0,L|295:355,1,105,0|0,0:0|0:0,0:0:0:0: +367,309,43919,1,0,0:0:0:0: +201,89,45291,6,0,L|279:83,1,70,2|0,0:0|0:0,0:0:0:0: +201,162,45634,2,0,L|279:156,1,70,2|0,0:0|0:0,0:0:0:0: +202,235,45976,2,0,L|280:229,1,70,2|0,0:0|0:0,0:0:0:0: +202,308,46319,2,0,L|280:302,1,70,2|0,0:0|0:0,0:0:0:0: +411,345,46662,6,0,P|368:344|311:362,1,70,2|0,0:0|0:0,0:0:0:0: +399,261,47005,2,0,P|360:241|301:234,1,70,2|0,0:0|0:0,0:0:0:0: +427,187,47348,2,0,P|400:153|349:121,1,70,2|0,0:0|0:0,0:0:0:0: +484,134,47691,2,0,P|473:91|441:41,1,70,2|0,0:0|0:0,0:0:0:0: +348,30,48034,6,0,B|308:39|308:39|264:31,1,70,2|0,0:0|0:0,0:0:0:0: +205,108,48376,2,0,B|245:117|245:117|289:109,1,70,2|0,0:0|0:0,0:0:0:0: +345,188,48719,2,0,B|305:197|305:197|261:189,1,70,2|0,0:0|0:0,0:0:0:0: +199,263,49062,2,0,B|239:272|239:272|283:264,1,70,2|0,0:0|0:0,0:0:0:0: +345,188,49405,6,0,L|354:101,1,70,2|0,0:0|0:0,0:0:0:0: +252,150,49748,2,0,L|243:63,1,70,2|0,0:0|0:0,0:0:0:0: +146,118,50091,2,0,P|123:75|90:43,1,70,2|0,0:0|0:0,0:0:0:0: +8,28,50434,2,0,L|6:177,1,140,10|2,0:0|0:0,0:0:0:0: +93,242,50948,5,0,0:0:0:0: +93,242,51119,2,0,L|190:238,1,70,2|0,0:0|0:0,0:0:0:0: +239,311,51462,2,0,L|308:313,1,70,2|0,0:0|0:0,0:0:0:0: +393,250,51805,1,2,0:0:0:0: +429,348,51976,1,0,0:0:0:0: +429,348,52319,5,0,0:0:0:0: +486,259,52491,2,0,P|487:222|486:172,1,70,2|0,0:0|0:0,0:0:0:0: +382,170,52834,2,0,P|367:136|345:91,1,70,2|0,0:0|0:0,0:0:0:0: +261,55,53176,1,2,0:0:0:0: +242,158,53348,1,0,0:0:0:0: +242,158,53519,6,0,L|70:148,1,140,8|8,0:0|0:0,0:0:0:0: +196,338,54205,2,0,L|205:214,2,105,8|8|8,0:0|0:0|0:0,0:0:0:0: +296,304,54891,5,8,0:0:0:0: +296,304,55062,1,8,0:0:0:0: +327,203,55234,1,8,0:0:0:0: +327,203,55405,1,8,0:0:0:0: +355,102,55576,2,0,L|342:44,3,35,8|8|8|8,0:0|0:0|0:0|0:0,0:0:0:0: +365,18,55919,2,0,P|305:35|246:17,1,105,0|0,0:0|0:0,0:0:0:0: +230,40,56262,5,0,1:0:0:0: +285,129,56434,1,0,0:0:0:0: +223,213,56605,2,0,L|134:207,1,70,0|0,1:0|0:0,0:0:0:0: +66,267,56948,2,0,P|55:317|63:357,1,70,0|0,1:0|0:0,0:0:0:0: +156,369,57291,1,0,1:0:0:0: +156,369,57462,1,0,0:0:0:0: +318,236,57805,5,0,0:0:0:0: +250,155,57976,2,0,L|254:68,1,70,0|0,1:0|0:0,0:0:0:0: +349,42,58319,2,0,P|397:52|447:48,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +253,85,58834,1,0,0:0:0:0: +169,21,59005,6,0,L|22:18,1,140,0|0,1:0|1:0,0:0:0:0: +9,121,59519,1,0,0:0:0:0: +53,216,59691,1,0,1:0:0:0: +53,216,59862,2,0,L|130:212,1,70,0|0,0:0|1:0,0:0:0:0: +220,252,60205,1,0,0:0:0:0: +173,158,60376,5,0,1:0:0:0: +173,158,60462,1,0,0:0:0:0: +173,158,60548,2,0,P|169:112|176:70,1,70,0|0,0:0|1:0,0:0:0:0: +253,22,60891,1,0,0:0:0:0: +302,114,61062,2,0,L|450:111,1,140,2|2,0:0|0:0,0:0:0:0: +503,196,61576,1,8,0:0:0:0: +503,196,61748,5,0,1:0:0:0: +411,247,61919,2,0,L|406:328,1,70,0|0,0:0|1:0,0:0:0:0: +317,372,62262,1,0,0:0:0:0: +216,340,62434,2,0,L|208:247,1,70,0|0,1:0|0:0,0:0:0:0: +250,173,62776,2,0,P|263:124|255:77,1,70,0|0,1:0|0:0,0:0:0:0: +58,51,63291,5,0,0:0:0:0: +18,148,63462,2,0,P|28:185|22:232,1,70,0|0,1:0|0:0,0:0:0:0: +17,321,63805,2,0,P|51:322|85:312,1,70,0|0,1:0|0:0,0:0:0:0: +172,254,64148,1,0,1:0:0:0: +172,254,64319,1,0,0:0:0:0: +240,334,64491,6,0,B|300:320|300:320|393:333,1,140,0|0,1:0|1:0,0:0:0:0: +466,274,65005,1,0,0:0:0:0: +408,186,65176,2,0,P|401:138|406:98,1,70,0|0,1:0|0:0,0:0:0:0: +298,101,65519,2,0,P|305:53|300:13,1,70,0|0,1:0|0:0,0:0:0:0: +303,31,65862,6,0,L|177:28,1,112,2|0,0:0|0:0,0:0:0:0: +124,79,66376,1,0,0:0:0:0: +200,113,66548,2,0,L|261:111,1,56 +134,161,66891,2,0,L|126:196,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +89,224,67234,6,0,L|203:220,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +239,260,67576,2,0,P|292:270|365:248,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +390,227,67919,2,0,L|400:133,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +372,69,68262,1,0,1:0:0:0: +251,140,68491,1,0,0:0:0:0: +251,140,68605,6,0,P|194:130|131:146,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +105,180,68948,2,0,B|97:228|97:228|115:297,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +166,310,69291,1,0,1:0:0:0: +275,223,69519,1,0,0:0:0:0: +332,263,69634,2,0,L|436:258,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +499,298,69976,6,0,P|507:243|449:180,1,140,0|0,1:0|1:0,0:0:0:0: +328,131,70548,1,0,0:0:0:0: +278,180,70662,2,0,P|230:192|182:178,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +122,155,71005,2,0,L|28:151,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +11,219,71348,6,0,P|2:248|0:281,2,46.6666666666667,0|0|0,1:0|0:0|0:0,0:0:0:0: +28,151,71691,2,0,B|44:105|44:105|26:42,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +88,20,72034,2,0,L|243:16,1,140,2|2,0:0|0:0,0:0:0:0: +227,16,72719,6,0,P|215:75|218:109,1,70,0|0,1:0|0:0,0:0:0:0: +299,148,73062,2,0,P|311:207|308:241,1,70,0|0,1:0|0:0,0:0:0:0: +260,308,73405,1,0,1:0:0:0: +260,308,73576,1,0,0:0:0:0: +361,278,73748,2,0,L|463:273,1,70,0|0,1:0|0:0,0:0:0:0: +494,74,74262,5,0,0:0:0:0: +430,157,74434,2,0,P|394:163|338:153,1,70,0|0,1:0|0:0,0:0:0:0: +280,93,74776,2,0,P|245:90|210:96,1,70,0|0,1:0|0:0,0:0:0:0: +121,152,75119,2,0,L|111:235,1,70,0|0,1:0|0:0,0:0:0:0: +61,328,75462,6,0,P|117:309|214:344,1,140,0|0,1:0|1:0,0:0:0:0: +296,303,75976,1,0,0:0:0:0: +213,237,76148,2,0,L|208:148,1,70,0|0,1:0|0:0,0:0:0:0: +307,204,76491,2,0,L|312:115,1,70,0|0,1:0|0:0,0:0:0:0: +270,59,76834,6,0,P|241:55|195:64,1,56,0|0,0:0|0:0,0:0:0:0: +172,130,77176,2,0,P|144:138|106:166,1,56 +65,215,77519,2,0,B|61:260|61:260|76:287|76:287|71:331,1,112 +71,322,78205,6,0,P|130:294|193:287,1,112 +288,161,78891,2,0,P|229:133|166:126,1,112 +22,84,79576,6,0,L|18:20,1,56 +100,46,79919,2,0,P|136:51|173:39,1,56,0|0,0:0|0:0,0:0:0:0: +234,19,80262,2,0,B|280:36|280:36|365:20,1,112,0|0,0:0|0:0,0:0:0:0: +341,24,80948,6,0,L|332:160,1,112 +333,135,81462,1,0,0:0:0:0: +277,198,81634,2,0,P|228:183|152:187,1,112,0|0,0:0|0:0,0:0:0:0: +64,315,82319,6,0,L|61:191,1,112 +61,203,82834,1,0,0:0:0:0: +107,133,83005,2,0,P|119:105|82:13,1,112,0|0,0:0|0:0,0:0:0:0: +100,28,83691,6,0,L|180:24,1,56,2|0,0:0|0:0,0:0:0:0: +224,74,84034,1,0,0:0:0:0: +224,74,84205,1,0,0:0:0:0: +289,21,84376,2,0,P|325:17|367:28,1,56,2|0,0:0|0:0,0:0:0:0: +369,100,84719,2,0,P|403:111|436:139,1,56,2|0,0:0|0:0,0:0:0:0: +481,208,85062,6,0,L|414:204,1,56,2|0,0:0|0:0,0:0:0:0: +367,266,85405,1,0,0:0:0:0: +367,266,85576,1,0,0:0:0:0: +307,206,85748,2,0,P|298:175|299:138,1,56,2|0,0:0|0:0,0:0:0:0: +213,154,86091,2,0,P|217:122|234:88,1,56,2|0,0:0|0:0,0:0:0:0: +168,18,86434,6,0,B|87:16|87:16|123:49,1,112,2|0,0:0|0:0,0:0:0:0: +81,116,86948,1,0,0:0:0:0: +117,191,87119,2,0,P|155:198|188:192,1,56,2|0,0:0|0:0,0:0:0:0: +230,256,87462,2,0,P|257:249|285:250,1,56,2|0,0:0|0:0,0:0:0:0: +359,290,87805,5,2,0:0:0:0: +359,290,87976,1,0,0:0:0:0: +389,211,88148,1,0,0:0:0:0: +389,211,88319,1,0,0:0:0:0: +466,177,88491,2,0,B|483:139|483:139|472:54,2,112,2|2|4,0:0|0:0|0:3,0:0:0:0: +185,144,100148,6,0,P|137:124|63:139,1,112,4|2,1:2|0:0,0:0:0:0: +35,189,100662,1,2,0:0:0:0: +35,189,100834,2,0,L|27:318,1,112,2|2,0:0|0:0,0:0:0:0: +164,352,101519,1,2,0:3:0:0: +297,294,101862,2,0,L|428:300,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +281,222,102719,1,2,0:0:0:0: +305,153,102891,5,2,0:3:0:0: +225,274,103234,2,0,P|183:292|107:272,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +305,153,104262,1,2,0:3:0:0: +186,67,104605,2,0,B|148:52|148:52|54:66,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +256,48,105462,1,2,0:0:0:0: +326,30,105634,5,2,0:3:0:0: +428,132,105976,2,0,L|434:266,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +308,216,107005,1,2,0:3:0:0: +189,131,107348,2,0,P|147:120|77:142,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +230,190,108205,1,2,0:0:0:0: +233,262,108376,6,0,L|239:322,1,56,2|0,0:3|0:0,0:0:0:0: +311,325,108719,2,0,L|316:269,1,56,2|2,0:0|0:0,0:0:0:0: +369,219,109062,2,0,L|361:107,2,112,2|2|0,0:0|0:0|0:0,0:0:0:0: +81,124,110776,2,0,L|92:77,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +77,52,111119,6,0,L|238:47,1,140,2|2,0:0|0:0,0:0:0:0: +290,102,111634,1,0,0:0:0:0: +349,33,111805,2,0,L|435:29,1,70,2|0,0:0|0:0,0:0:0:0: +439,118,112148,2,0,L|518:150,1,70,2|0,0:0|0:0,0:0:0:0: +426,309,112662,5,0,0:0:0:0: +379,230,112834,2,0,P|338:227|295:238,1,70,2|0,0:0|0:0,0:0:0:0: +237,286,113176,1,2,0:0:0:0: +237,286,113348,1,0,0:0:0:0: +172,221,113519,2,0,L|165:128,1,70,2|0,0:0|0:0,0:0:0:0: +166,151,114034,5,0,0:0:0:0: +237,94,114205,2,0,P|278:84|334:88,1,70,2|0,0:0|0:0,0:0:0:0: +375,142,114548,2,0,P|409:143|443:152,1,70,2|0,0:0|0:0,0:0:0:0: +496,226,114891,2,0,L|502:313,1,70,2|0,0:0|0:0,0:0:0:0: +434,358,115234,5,2,0:0:0:0: +434,358,115319,1,0,0:0:0:0: +434,358,115405,2,0,L|333:347,2,70,0|2|0,0:0|0:0|0:0,0:0:0:0: +398,273,115919,2,0,L|411:117,1,140,2|2,0:0|0:0,0:0:0:0: +255,34,116605,6,0,P|211:59|119:19,1,140,2|2,0:0|0:0,0:0:0:0: +45,68,117119,1,0,0:0:0:0: +108,133,117291,2,0,L|115:214,1,70,2|0,0:0|0:0,0:0:0:0: +197,240,117634,2,0,L|190:321,1,70,2|0,0:0|0:0,0:0:0:0: +363,369,118148,5,0,0:0:0:0: +332,283,118319,2,0,P|329:226|345:193,1,70,2|0,0:0|0:0,0:0:0:0: +386,140,118662,1,2,0:0:0:0: +386,140,118834,1,0,0:0:0:0: +331,67,119005,2,0,L|239:63,1,70,2|0,0:0|0:0,0:0:0:0: +261,63,119519,5,0,0:0:0:0: +198,129,119691,2,0,P|159:137|111:126,1,70,2|0,0:0|0:0,0:0:0:0: +68,201,120034,2,0,P|60:240|71:288,1,70,2|0,0:0|0:0,0:0:0:0: +128,333,120376,2,0,L|221:325,1,70,2|0,0:0|0:0,0:0:0:0: +282,293,120719,5,2,0:0:0:0: +282,293,121062,1,2,0:0:0:0: +282,293,121405,1,2,0:0:0:0: +282,293,121748,2,0,L|383:298,1,78.7500030040742,2|0,0:0|0:0,0:0:0:0: +403,281,122091,6,0,L|395:114,1,140,0|0,1:0|0:0,0:0:0:0: +221,91,122776,2,0,L|214:230,1,140,0|0,0:0|0:0,0:0:0:0: +354,347,123462,2,0,P|389:364|474:287,1,140,0|0,0:0|0:0,0:0:0:0: +329,202,124148,2,0,P|294:185|209:262,1,140,0|0,0:0|0:0,0:0:0:0: +68,341,124834,6,0,L|59:269,1,70,0|0,0:0|0:0,0:0:0:0: +139,313,125176,2,0,L|130:241,1,70,0|0,0:0|0:0,0:0:0:0: +211,286,125519,2,0,L|202:214,1,70,0|0,0:0|0:0,0:0:0:0: +282,260,125862,2,0,L|273:188,1,70,0|0,0:0|0:0,0:0:0:0: +192,108,126205,6,0,P|162:100|107:103,1,70 +172,192,126548,2,0,P|142:181|87:179,1,70 +146,274,126891,2,0,P|117:260|63:254,1,70 +110,354,127234,2,0,P|83:338|29:327,1,70 +150,279,127576,5,0,0:0:0:0: +150,279,127748,1,0,0:0:0:0: +242,327,127919,1,0,0:0:0:0: +242,327,128091,1,0,0:0:0:0: +285,232,128262,2,0,L|379:227,1,70,0|0,0:0|0:0,0:0:0:0: +422,166,128605,2,0,L|491:169,1,70,0|0,0:0|0:0,0:0:0:0: +441,76,128948,5,0,0:0:0:0: +441,76,129119,1,0,0:0:0:0: +388,150,129291,1,0,0:0:0:0: +388,150,129462,1,0,0:0:0:0: +338,73,129634,2,0,P|286:69|238:75,1,70,0|0,0:0|0:0,0:0:0:0: +210,140,129976,2,0,P|175:141|140:137,1,70,0|0,0:0|0:0,0:0:0:0: +79,205,130319,6,0,L|68:260,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +108,267,130662,2,0,L|115:319,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +145,334,131005,6,0,P|169:324|197:323,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +220,339,131348,2,0,P|237:335|263:321,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +289,300,131691,6,0,L|294:258,14,22.7499989585877,0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +314,240,132376,6,0,B|356:235|356:235|374:221|374:221|433:213,1,105.000004005432,0|0,0:0|0:0,0:0:0:0: +444,142,132891,1,0,0:0:0:0: +444,142,132976,1,0,0:0:0:0: +444,142,133062,6,0,B|461:90|461:90|446:-12,1,140,4|0,1:2|1:0,0:0:0:0: +238,15,133748,1,0,1:0:0:0: +181,103,133919,1,0,0:0:0:0: +181,103,134005,2,0,L|310:99,1,105,0|0,0:0|0:0,0:0:0:0: +366,167,134434,6,0,P|378:224|363:254,1,70,0|0,1:0|0:0,0:0:0:0: +276,270,134776,2,0,P|262:326|236:347,1,70,0|0,1:0|0:0,0:0:0:0: +151,356,135119,1,0,1:0:0:0: +61,300,135291,1,0,0:0:0:0: +164,254,135462,1,0,1:0:0:0: +164,254,135548,2,0,L|174:156,1,70 +195,162,135805,6,0,P|243:178|290:168,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +148,67,136319,1,0,0:0:0:0: +148,67,136491,1,0,1:0:0:0: +247,98,136662,1,0,0:0:0:0: +247,98,136748,2,0,B|286:80|286:80|372:100,1,105,0|0,0:0|0:0,0:0:0:0: +432,154,137176,6,0,L|437:294,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +307,324,138205,2,0,P|282:331|245:328,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +246,309,138548,6,0,P|201:298|114:358,1,140,0|0,1:0|1:0,0:0:0:0: +19,157,139234,1,0,1:0:0:0: +113,112,139405,1,0,0:0:0:0: +113,112,139491,2,0,P|153:134|236:108,1,105,0|0,0:0|0:0,0:0:0:0: +310,159,139919,6,0,P|276:209|172:226,1,140,0|0,1:0|1:0,0:0:0:0: +387,334,140605,2,0,L|381:238,1,70,0|0,1:0|0:0,0:0:0:0: +450,183,140948,1,0,1:0:0:0: +450,183,141034,2,0,L|456:87,1,70,0|0,0:0|0:0,0:0:0:0: +434,85,141291,6,0,P|399:71|337:77,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +468,292,141976,1,0,1:0:0:0: +377,238,142148,1,0,0:0:0:0: +377,238,142234,2,0,P|327:245|261:229,1,105 +178,185,142662,5,2,0:0:0:0: +178,185,143005,1,2,0:0:0:0: +178,185,143348,1,0,0:0:0:0: +178,185,143691,2,0,L|171:266,1,70,0|0,0:0|0:0,0:0:0:0: +171,254,144034,6,0,P|224:241|320:257,1,140,4|0,1:2|1:0,0:0:0:0: +408,282,144548,1,0,0:0:0:0: +480,205,144719,1,0,1:0:0:0: +433,116,144891,1,0,0:0:0:0: +433,116,144976,2,0,L|443:2,1,105,0|0,0:0|0:0,0:0:0:0: +337,69,145405,6,0,P|303:79|242:60,1,70,0|0,1:0|0:0,0:0:0:0: +172,116,145748,2,0,L|86:103,1,70,0|0,1:0|0:0,0:0:0:0: +38,188,146091,1,0,1:0:0:0: +38,188,146262,1,0,0:0:0:0: +110,264,146434,1,0,1:0:0:0: +110,264,146519,2,0,L|196:251,1,70,0|0,0:0|0:0,0:0:0:0: +208,269,146776,6,0,P|246:279|300:266,1,70,0|0,1:0|0:0,0:0:0:0: +369,227,147119,1,0,1:0:0:0: +369,227,147462,1,0,1:0:0:0: +312,138,147634,1,0,0:0:0:0: +312,138,147719,2,0,P|302:86|316:15,1,105,0|0,0:0|0:0,0:0:0:0: +210,71,148148,6,0,B|159:84|159:84|45:57,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +410,132,149176,2,0,P|421:151|426:191,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +458,203,149519,6,0,P|408:195|334:253,1,140,0|0,1:0|1:0,0:0:0:0: +232,232,150034,1,0,0:0:0:0: +309,162,150205,1,0,1:0:0:0: +192,144,150376,1,0,0:0:0:0: +192,144,150462,2,0,L|188:19,1,105,0|0,0:0|0:0,0:0:0:0: +112,155,150891,6,0,P|139:204|239:212,1,140,0|0,1:0|1:0,0:0:0:0: +216,221,151405,1,0,0:0:0:0: +296,288,151576,2,0,L|398:280,1,70,0|0,1:0|0:0,0:0:0:0: +445,213,151919,1,0,1:0:0:0: +445,213,152005,2,0,L|452:111,1,70,0|0,0:0|0:0,0:0:0:0: +434,113,152262,6,0,P|428:66|434:17,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +352,180,152776,1,0,0:0:0:0: +352,180,152948,2,0,B|287:163|287:163|183:186,1,140,0|0,1:0|1:0,0:0:0:0: +215,178,153634,6,0,P|163:175|121:181,1,70,0|0,1:0|0:0,0:0:0:0: +106,274,153976,2,0,L|200:277,1,70,0|0,1:0|0:0,0:0:0:0: +264,329,154319,1,0,1:0:0:0: +264,329,154662,1,0,0:0:0:0: +360,286,154834,2,0,L|365:255,2,17.5,0|0|0,0:0|0:0|0:0,0:0:0:0: +376,312,155005,6,0,L|542:302,1,140,4|0,1:2|1:0,0:0:0:0: +460,213,155519,1,0,0:0:0:0: +460,213,155691,2,0,L|466:132,1,70,0|0,1:0|0:0,0:0:0:0: +363,113,156034,2,0,L|357:32,1,70,0|0,1:0|0:0,0:0:0:0: +253,34,156376,6,0,P|224:40|168:26,1,70,0|0,1:0|0:0,0:0:0:0: +101,98,156719,1,0,1:0:0:0: +101,98,156891,1,0,0:0:0:0: +190,152,157062,2,0,L|195:247,1,70,0|0,1:0|0:0,0:0:0:0: +290,274,157405,2,0,P|303:225|295:182,1,70,0|0,1:0|0:0,0:0:0:0: +271,105,157748,6,0,B|354:84|354:84|425:103,1,140,0|0,1:0|1:0,0:0:0:0: +484,169,158262,1,0,0:0:0:0: +484,169,158434,2,0,P|492:218|484:257,1,70,0|0,1:0|0:0,0:0:0:0: +396,286,158776,2,0,P|388:335|396:374,1,70,0|0,1:0|0:0,0:0:0:0: +285,341,159119,5,0,1:0:0:0: +285,341,159291,1,0,0:0:0:0: +210,267,159462,2,0,L|214:175,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +129,334,159976,1,0,0:0:0:0: +51,262,160148,2,0,P|40:217|43:169,1,70,0|0,1:0|0:0,0:0:0:0: +125,104,160491,6,0,L|298:97,1,140,0|0,1:0|1:0,0:0:0:0: +341,170,161005,1,0,0:0:0:0: +373,70,161176,2,0,L|377:-8,1,70,0|0,1:0|0:0,0:0:0:0: +468,51,161519,1,0,1:0:0:0: +468,51,161691,1,0,0:0:0:0: +424,146,161862,6,0,P|419:203|429:235,1,70,0|0,1:0|0:0,0:0:0:0: +467,309,162205,2,0,L|388:311,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +421,214,162719,1,0,0:0:0:0: +332,271,162891,2,0,P|321:309|343:361,1,70,0|0,1:0|0:0,0:0:0:0: +225,359,163234,6,0,P|162:331|86:357,1,140,0|0,1:0|1:0,0:0:0:0: +26,270,163748,1,0,0:0:0:0: +26,270,163919,2,0,L|30:169,1,70,0|0,1:0|0:0,0:0:0:0: +112,136,164262,2,0,L|108:35,1,70,0|0,1:0|0:0,0:0:0:0: +207,103,164605,6,0,P|272:122|351:76,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +291,296,165634,1,0,1:0:0:0: +364,221,165805,1,8,0:0:0:0: +364,221,165891,1,0,0:0:0:0: +364,221,165976,6,0,P|373:159|328:87,1,140,4|0,1:2|1:0,0:0:0:0: +175,93,166662,2,0,P|140:152|148:221,1,140,0|0,1:0|1:0,0:0:0:0: +256,356,167348,2,0,L|256:212,1,140,0|0,1:0|1:0,0:0:0:0: +152,88,168034,1,0,1:0:0:0: +360,88,168376,1,0,1:0:0:0: +284,300,168719,6,0,P|216:308|157:273,1,140,0|0,1:0|1:0,0:0:0:0: +157,111,169405,2,0,P|216:76|285:84,1,140,0|0,1:0|1:0,0:0:0:0: +420,192,170091,2,0,L|276:192,1,140,0|0,1:0|1:0,0:0:0:0: +152,296,170777,1,0,1:0:0:0: +152,88,171119,1,0,1:0:0:0: +152,88,171291,1,0,0:0:0:0: +152,88,171462,6,0,L|264:88,1,105.000004005432,6|2,0:0|0:0,0:0:0:0: +392,176,172148,2,0,L|280:176,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +160,272,172834,2,0,L|272:272,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +400,352,173519,2,0,L|288:352,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +105,324,174205,6,0,P|85:285|89:219,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: +95,219,174719,1,0,0:0:0:0: +103,197,174891,2,0,L|99:88,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: +240,73,175576,5,0,0:0:0:0: +265,106,175919,1,0,0:0:0:0: +279,136,176262,2,0,B|314:129|351:139|351:139|329:100,1,112"; + } +} From a876beeadaa5123a0ae148eb9e16a8a29765d96a Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 21:34:24 +0200 Subject: [PATCH 09/14] Variable adjustments --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index a049248021..2638d5bf78 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Osu.Mods var h = d.HitObject; - float rescale = 2; + const float rescale = 2; switch (drawable) { @@ -76,9 +76,9 @@ namespace osu.Game.Rulesets.Osu.Mods case DrawableRepeatPoint rp: if (!rp.IsFirstRepeat) break; - var origSizeRP = rp.Size; + var origSizeRp = rp.Size; using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) - rp.ResizeTo(origSizeRP * rescale).ResizeTo(origSizeRP, h.TimePreempt); + rp.ResizeTo(origSizeRp * rescale).ResizeTo(origSizeRp, h.TimePreempt); break; } } From f087c43b49c10fd99a0d3822a97c9a4dc6ae7025 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 22:31:35 +0200 Subject: [PATCH 10/14] Nvm about the new TestCase :^) --- osu.Game.Tests/Visual/TestCaseDeflate.cs | 637 ----------------------- 1 file changed, 637 deletions(-) delete mode 100644 osu.Game.Tests/Visual/TestCaseDeflate.cs diff --git a/osu.Game.Tests/Visual/TestCaseDeflate.cs b/osu.Game.Tests/Visual/TestCaseDeflate.cs deleted file mode 100644 index 8a24e2414c..0000000000 --- a/osu.Game.Tests/Visual/TestCaseDeflate.cs +++ /dev/null @@ -1,637 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System.ComponentModel; -using System.IO; -using System.Text; -using System.Linq; -using osu.Game.Beatmaps; -using osu.Game.Rulesets; -using Decoder = osu.Game.Beatmaps.Formats.Decoder; -using osu.Game.Rulesets.Osu.Mods; -using osu.Game.Screens.Play; -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Tests.Visual -{ - [Description("Player instantiated with an deflate mod.")] - public class TestCaseDeflate : TestCasePlayer - { - protected override IBeatmap CreateBeatmap(Ruleset ruleset) - { - Beatmap beatmap; - using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) - using (var reader = new StreamReader(stream)) - beatmap = Decoder.GetDecoder(reader).Decode(reader); - beatmap.BeatmapInfo.Ruleset = ruleset.RulesetInfo; - beatmap.BeatmapInfo.BaseDifficulty.CircleSize = 4; - return beatmap; - } - - protected override Player CreatePlayer(Ruleset ruleset) - { - Beatmap.Value.Mods.Value = Beatmap.Value.Mods.Value.Concat(new[] { ruleset.GetAutoplayMod(), ruleset.GetAllMods().First(mod => mod is OsuModDeflate) }); - return new ScoreAccessiblePlayer - { - AllowPause = false, - AllowLeadIn = false, - AllowResults = false, - }; - } - - protected override bool ContinueCondition(Player player) => base.ContinueCondition(player) && ((ScoreAccessiblePlayer)player).ScoreProcessor.TotalScore > 0; - - private class ScoreAccessiblePlayer : Player - { - public new ScoreProcessor ScoreProcessor => base.ScoreProcessor; - } - - private const string test_beatmap_data = - @"osu file format v14 - -[General] -AudioFilename: R4V3 B0Y - S3RL Feat Krystal.mp3 -AudioLeadIn: 0 -PreviewTime: 56176 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 12382,23354,34325,45297,56268,67240,78211,89182,100154,111125,122097,128605,133068,144040,155011,165982,175582 -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 3.799998 - -[Metadata] -Title:R4V3 B0Y -TitleUnicode:R4V3 B0Y -Artist:S3RL feat Krystal -ArtistUnicode:S3RL feat Krystal -Creator:DeRandom Otaku -Version:FCL's H4RD -Source: -Tags:happy hardcore EMFA music rave boy Shmiklak FCL ByBy ByBy13 ByBy_Chan Marvollo M_a_r_v_o_l_l_o -BeatmapID:1056070 -BeatmapSetID:481451 - -[Difficulty] -HPDrainRate:5 -CircleSize:4 -OverallDifficulty:6 -ApproachRate:7.5 -SliderMultiplier:1.4 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,'BG.jpg',0,0 -//Break Periods -2,89376,99323 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -34,342.857142857143,4,1,1,100,1,0 -34,-133.333333333333,4,1,1,100,0,0 -1405,-133.333333333333,4,2,1,70,0,0 -12376,-125,4,2,2,70,0,0 -21976,-100,4,2,2,45,0,0 -23348,-100,4,2,2,85,0,0 -26091,-100,4,2,2,85,0,0 -31576,-100,4,2,2,85,0,0 -34319,-100,4,2,2,85,0,0 -37062,-100,4,2,2,85,0,0 -42462,-100,4,2,2,5,0,0 -42548,-100,4,2,2,85,0,0 -43919,-100,4,2,2,65,0,0 -45291,-100,4,2,2,50,0,0 -50691,-100,4,2,2,5,0,0 -50776,-100,4,2,2,50,0,0 -56262,-100,4,2,2,90,0,1 -65862,-125,4,2,2,90,0,0 -67234,-100,4,2,2,90,0,1 -72719,-100,4,2,2,90,0,1 -76834,-125,4,2,2,45,0,0 -78205,-125,4,2,0,50,0,0 -100148,-125,4,2,2,50,0,0 -100491,-125,4,2,0,50,0,0 -111119,-100,4,2,2,50,0,0 -116091,-100,4,2,2,10,0,0 -116262,-100,4,2,2,50,0,0 -116434,-100,4,2,2,10,0,0 -116605,-100,4,2,2,50,0,0 -121748,-133.333333333333,4,2,2,50,0,0 -122091,-100,4,2,2,50,0,0 -127576,-100,4,2,2,50,0,0 -130319,-90.9090909090909,4,2,2,50,0,0 -131005,-83.3333333333333,4,2,2,50,0,0 -131691,-76.9230769230769,4,2,2,50,0,0 -132376,-133.333333333333,4,2,2,50,0,0 -133062,-100,4,2,2,90,0,1 -135719,-100,4,2,2,5,0,1 -135805,-100,4,2,2,90,0,1 -141205,-100,4,2,2,5,0,1 -141291,-100,4,2,2,90,0,1 -142662,-100,4,2,2,70,0,0 -143691,-100,4,2,2,40,0,0 -144034,-100,4,2,2,90,0,1 -146691,-100,4,2,2,5,0,1 -146776,-100,4,2,2,90,0,1 -152176,-100,4,2,2,5,0,1 -152262,-100,4,2,2,90,0,1 -154662,-100,4,2,2,60,0,1 -155005,-100,4,2,2,75,0,0 -165976,-100,4,2,2,75,0,0 -171462,-133.333333333333,4,2,2,60,0,0 -174205,-153.846153846153,4,2,2,50,0,0 -174891,-153.846153846154,4,2,2,40,0,0 -175576,-100,4,2,2,25,0,0 -176262,-125,4,2,2,25,0,0 -176605,-125,4,2,2,15,0,0 - - -[Colours] - Combo1 : 0,255,255 -Combo2 : 17,255,17 -Combo3 : 0,128,192 -Combo4 : 124,0,249 - -[HitObjects] -138,122,34,6,0,L|133:229,3,105.000004005432,0|0|0|0,2:0|2:0|2:0|2:0,2:2:0:0: -133,226,1405,6,0,L|248:220,1,105.000004005432,2|2,1:2|0:0,0:0:0:0: -339,341,2091,2,0,L|222:338,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -133,226,2776,2,0,P|128:187|129:158,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: -188,123,3119,2,0,P|193:84|190:55,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: -262,34,3462,2,0,P|290:62|366:69,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -431,74,3976,1,0,0:0:0:0: -496,117,4148,6,0,L|503:229,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -456,286,4662,1,0,0:0:0:0: -408,349,4834,2,0,L|296:356,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -172,266,5519,2,0,P|155:216|165:148,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -206,101,6034,1,0,0:0:0:0: -239,172,6205,2,0,L|361:162,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -494,260,6891,6,0,B|443:252|443:252|386:267,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -324,308,7405,1,0,0:0:0:0: -248,287,7576,2,0,L|241:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -169,202,7919,2,0,L|176:142,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -239,104,8262,2,0,P|282:119|345:101,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -416,92,8776,1,0,0:0:0:0: -484,132,8948,2,0,L|491:195,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -445,249,9291,2,0,L|452:312,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -388,349,9634,6,0,P|354:328|289:335,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -216,360,10148,1,0,0:0:0:0: -143,328,10319,2,0,L|72:315,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -102,240,10662,2,0,L|173:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -224,195,11005,5,2,0:0:0:0: -160,148,11176,1,0,0:0:0:0: -233,120,11348,1,2,0:0:0:0: -172,69,11519,1,0,0:0:0:0: -247,45,11691,2,0,P|285:39|314:43,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -355,95,12034,2,0,P|378:105|399:121,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -482,162,12376,6,0,P|450:190|445:261,1,112,2|2,0:0|0:0,0:0:0:0: -298,342,13062,2,0,P|296:287|259:247,1,112,2|2,0:0|0:0,0:0:0:0: -132,135,13748,2,0,L|127:62,1,56,2|0,0:0|0:0,0:0:0:0: -209,57,14091,2,0,L|235:-11,1,56,2|0,0:0|0:0,0:0:0:0: -304,41,14434,2,0,P|348:52|380:44,2,56,2|0|2,0:0|0:0|0:0,0:0:0:0: -272,119,14948,1,0,0:0:0:0: -335,173,15119,6,0,L|340:298,1,112,2|2,0:0|0:0,0:0:0:0: -274,339,15634,1,0,0:0:0:0: -216,278,15805,2,0,B|165:262|165:262|86:278,1,112,2|2,0:0|0:0,0:0:0:0: -5,139,16491,2,0,B|56:123|56:123|135:139,1,112,2|2,0:0|0:0,0:0:0:0: -189,171,17005,1,0,0:0:0:0: -257,123,17176,2,0,L|379:117,1,112,2|2,0:0|0:0,0:0:0:0: -434,171,17691,1,0,0:0:0:0: -434,171,17776,1,0,0:0:0:0: -434,171,17862,6,0,P|450:218|426:288,1,112,2|2,0:0|0:0,0:0:0:0: -356,308,18376,1,0,0:0:0:0: -288,261,18548,2,0,L|207:258,1,56,2|0,0:0|0:0,0:0:0:0: -170,316,18891,2,0,L|89:319,1,56,2|0,0:0|0:0,0:0:0:0: -38,234,19234,2,0,P|110:237|160:210,1,112,2|2,0:0|0:0,0:0:0:0: -179,144,19748,1,0,0:0:0:0: -104,105,19919,2,0,L|100:31,1,56,2|0,0:0|0:0,0:0:0:0: -179,18,20262,2,0,L|210:8,3,28,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -247,8,20605,6,0,P|236:48|268:122,1,112,2|2,0:0|0:0,0:0:0:0: -311,178,21119,1,0,0:0:0:0: -288,259,21291,2,0,L|286:330,1,56,2|0,0:0|0:0,0:0:0:0: -363,349,21634,2,0,L|361:293,1,56,2|0,0:0|0:0,0:0:0:0: -408,231,21976,5,0,0:0:0:0: -462,125,23005,2,0,L|469:80,3,35 -499,48,23348,6,0,L|348:53,1,140,4|0,1:2|1:0,0:0:0:0: -178,161,24034,1,0,1:0:0:0: -244,241,24205,1,0,0:0:0:0: -244,241,24291,2,0,L|365:231,1,105,0|0,0:0|0:0,0:0:0:0: -434,292,24719,2,0,P|423:335|439:379,1,70,0|0,1:0|0:0,0:0:0:0: -325,333,25062,2,0,P|329:298|319:265,1,70,0|0,1:0|0:0,0:0:0:0: -250,185,25405,1,0,1:0:0:0: -308,135,25576,1,0,0:0:0:0: -213,111,25748,2,0,L|203:64,2,35,0|0|0,1:0|0:0|0:0,0:0:0:0: -146,183,26091,6,0,L|44:180,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -202,370,26776,1,0,1:0:0:0: -253,288,26948,1,0,0:0:0:0: -253,288,27034,2,0,B|236:237|236:237|246:176,1,105,0|0,0:0|0:0,0:0:0:0: -318,112,27462,2,0,L|466:102,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -139,224,28491,2,0,P|110:228|77:229,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -69,267,28834,6,0,P|131:258|212:289,1,140,0|0,1:0|1:0,0:0:0:0: -402,217,29519,1,0,1:0:0:0: -303,180,29691,1,0,0:0:0:0: -303,180,29776,2,0,P|288:123|299:60,1,105,0|0,0:0|0:0,0:0:0:0: -200,26,30205,2,0,P|155:51|54:21,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -166,125,31062,1,0,0:0:0:0: -242,197,31234,2,0,L|246:257,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -293,248,31576,6,0,L|139:246,1,140,0|0,1:0|1:0,0:0:0:0: -66,307,32091,1,0,0:0:0:0: -71,202,32262,2,0,L|84:35,1,140,0|0,1:0|1:0,0:0:0:0: -289,23,32948,5,0,0:0:0:0: -218,53,33119,1,0,0:0:0:0: -176,118,33291,2,0,P|174:157|190:205,2,70,0|0|0,0:0|0:0|0:0,0:0:0:0: -176,118,34148,1,8,0:0:0:0: -265,172,34319,6,0,L|418:174,1,140,4|0,1:2|1:0,0:0:0:0: -440,273,34834,1,0,0:0:0:0: -337,253,35005,2,0,P|281:253|235:345,1,140,0|0,1:0|1:0,0:0:0:0: -232,315,35519,1,0,0:0:0:0: -130,341,35691,2,0,L|36:328,1,70,0|0,1:0|0:0,0:0:0:0: -95,231,36034,2,0,L|15:179,1,70,0|0,1:0|0:0,0:0:0:0: -110,119,36376,2,0,L|59:38,1,70,0|0,1:0|0:0,0:0:0:0: -185,0,36719,1,0,1:0:0:0: -185,0,36805,2,0,L|193:69,1,70,0|0,0:0|0:0,0:0:0:0: -224,85,37062,6,0,L|307:102,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -262,183,37576,1,0,0:0:0:0: -185,253,37748,2,0,P|117:286|52:236,1,140,0|0,1:0|1:0,0:0:0:0: -116,166,38262,1,0,0:0:0:0: -185,253,38434,2,0,P|222:247|281:246,1,70,0|0,1:0|0:0,0:0:0:0: -344,299,38776,2,0,P|380:310|433:333,1,70,0|0,1:0|0:0,0:0:0:0: -500,267,39119,1,0,1:0:0:0: -379,96,39462,2,0,L|374:53,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -395,12,39805,6,0,L|224:2,1,140,0|0,1:0|1:0,0:0:0:0: -172,69,40319,1,0,0:0:0:0: -267,112,40491,2,0,P|250:151|275:259,1,140,0|0,1:0|1:0,0:0:0:0: -264,244,41005,1,0,0:0:0:0: -182,309,41176,2,0,P|155:264|127:236,1,70,0|0,1:0|0:0,0:0:0:0: -69,176,41519,2,0,P|96:131|124:103,1,70,0|0,1:0|0:0,0:0:0:0: -202,71,41862,1,0,1:0:0:0: -179,173,42034,1,0,0:0:0:0: -137,37,42205,1,0,1:0:0:0: -137,37,42291,2,0,L|35:33,1,70,0|0,0:0|0:0,0:0:0:0: -23,63,42548,6,0,B|6:161|6:161|23:218,1,140,0|0,1:0|1:0,0:0:0:0: -62,295,43062,1,0,0:0:0:0: -141,226,43234,1,0,1:0:0:0: -168,348,43405,1,0,0:0:0:0: -168,348,43491,2,0,L|295:355,1,105,0|0,0:0|0:0,0:0:0:0: -367,309,43919,1,0,0:0:0:0: -201,89,45291,6,0,L|279:83,1,70,2|0,0:0|0:0,0:0:0:0: -201,162,45634,2,0,L|279:156,1,70,2|0,0:0|0:0,0:0:0:0: -202,235,45976,2,0,L|280:229,1,70,2|0,0:0|0:0,0:0:0:0: -202,308,46319,2,0,L|280:302,1,70,2|0,0:0|0:0,0:0:0:0: -411,345,46662,6,0,P|368:344|311:362,1,70,2|0,0:0|0:0,0:0:0:0: -399,261,47005,2,0,P|360:241|301:234,1,70,2|0,0:0|0:0,0:0:0:0: -427,187,47348,2,0,P|400:153|349:121,1,70,2|0,0:0|0:0,0:0:0:0: -484,134,47691,2,0,P|473:91|441:41,1,70,2|0,0:0|0:0,0:0:0:0: -348,30,48034,6,0,B|308:39|308:39|264:31,1,70,2|0,0:0|0:0,0:0:0:0: -205,108,48376,2,0,B|245:117|245:117|289:109,1,70,2|0,0:0|0:0,0:0:0:0: -345,188,48719,2,0,B|305:197|305:197|261:189,1,70,2|0,0:0|0:0,0:0:0:0: -199,263,49062,2,0,B|239:272|239:272|283:264,1,70,2|0,0:0|0:0,0:0:0:0: -345,188,49405,6,0,L|354:101,1,70,2|0,0:0|0:0,0:0:0:0: -252,150,49748,2,0,L|243:63,1,70,2|0,0:0|0:0,0:0:0:0: -146,118,50091,2,0,P|123:75|90:43,1,70,2|0,0:0|0:0,0:0:0:0: -8,28,50434,2,0,L|6:177,1,140,10|2,0:0|0:0,0:0:0:0: -93,242,50948,5,0,0:0:0:0: -93,242,51119,2,0,L|190:238,1,70,2|0,0:0|0:0,0:0:0:0: -239,311,51462,2,0,L|308:313,1,70,2|0,0:0|0:0,0:0:0:0: -393,250,51805,1,2,0:0:0:0: -429,348,51976,1,0,0:0:0:0: -429,348,52319,5,0,0:0:0:0: -486,259,52491,2,0,P|487:222|486:172,1,70,2|0,0:0|0:0,0:0:0:0: -382,170,52834,2,0,P|367:136|345:91,1,70,2|0,0:0|0:0,0:0:0:0: -261,55,53176,1,2,0:0:0:0: -242,158,53348,1,0,0:0:0:0: -242,158,53519,6,0,L|70:148,1,140,8|8,0:0|0:0,0:0:0:0: -196,338,54205,2,0,L|205:214,2,105,8|8|8,0:0|0:0|0:0,0:0:0:0: -296,304,54891,5,8,0:0:0:0: -296,304,55062,1,8,0:0:0:0: -327,203,55234,1,8,0:0:0:0: -327,203,55405,1,8,0:0:0:0: -355,102,55576,2,0,L|342:44,3,35,8|8|8|8,0:0|0:0|0:0|0:0,0:0:0:0: -365,18,55919,2,0,P|305:35|246:17,1,105,0|0,0:0|0:0,0:0:0:0: -230,40,56262,5,0,1:0:0:0: -285,129,56434,1,0,0:0:0:0: -223,213,56605,2,0,L|134:207,1,70,0|0,1:0|0:0,0:0:0:0: -66,267,56948,2,0,P|55:317|63:357,1,70,0|0,1:0|0:0,0:0:0:0: -156,369,57291,1,0,1:0:0:0: -156,369,57462,1,0,0:0:0:0: -318,236,57805,5,0,0:0:0:0: -250,155,57976,2,0,L|254:68,1,70,0|0,1:0|0:0,0:0:0:0: -349,42,58319,2,0,P|397:52|447:48,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -253,85,58834,1,0,0:0:0:0: -169,21,59005,6,0,L|22:18,1,140,0|0,1:0|1:0,0:0:0:0: -9,121,59519,1,0,0:0:0:0: -53,216,59691,1,0,1:0:0:0: -53,216,59862,2,0,L|130:212,1,70,0|0,0:0|1:0,0:0:0:0: -220,252,60205,1,0,0:0:0:0: -173,158,60376,5,0,1:0:0:0: -173,158,60462,1,0,0:0:0:0: -173,158,60548,2,0,P|169:112|176:70,1,70,0|0,0:0|1:0,0:0:0:0: -253,22,60891,1,0,0:0:0:0: -302,114,61062,2,0,L|450:111,1,140,2|2,0:0|0:0,0:0:0:0: -503,196,61576,1,8,0:0:0:0: -503,196,61748,5,0,1:0:0:0: -411,247,61919,2,0,L|406:328,1,70,0|0,0:0|1:0,0:0:0:0: -317,372,62262,1,0,0:0:0:0: -216,340,62434,2,0,L|208:247,1,70,0|0,1:0|0:0,0:0:0:0: -250,173,62776,2,0,P|263:124|255:77,1,70,0|0,1:0|0:0,0:0:0:0: -58,51,63291,5,0,0:0:0:0: -18,148,63462,2,0,P|28:185|22:232,1,70,0|0,1:0|0:0,0:0:0:0: -17,321,63805,2,0,P|51:322|85:312,1,70,0|0,1:0|0:0,0:0:0:0: -172,254,64148,1,0,1:0:0:0: -172,254,64319,1,0,0:0:0:0: -240,334,64491,6,0,B|300:320|300:320|393:333,1,140,0|0,1:0|1:0,0:0:0:0: -466,274,65005,1,0,0:0:0:0: -408,186,65176,2,0,P|401:138|406:98,1,70,0|0,1:0|0:0,0:0:0:0: -298,101,65519,2,0,P|305:53|300:13,1,70,0|0,1:0|0:0,0:0:0:0: -303,31,65862,6,0,L|177:28,1,112,2|0,0:0|0:0,0:0:0:0: -124,79,66376,1,0,0:0:0:0: -200,113,66548,2,0,L|261:111,1,56 -134,161,66891,2,0,L|126:196,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -89,224,67234,6,0,L|203:220,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -239,260,67576,2,0,P|292:270|365:248,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -390,227,67919,2,0,L|400:133,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -372,69,68262,1,0,1:0:0:0: -251,140,68491,1,0,0:0:0:0: -251,140,68605,6,0,P|194:130|131:146,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -105,180,68948,2,0,B|97:228|97:228|115:297,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -166,310,69291,1,0,1:0:0:0: -275,223,69519,1,0,0:0:0:0: -332,263,69634,2,0,L|436:258,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -499,298,69976,6,0,P|507:243|449:180,1,140,0|0,1:0|1:0,0:0:0:0: -328,131,70548,1,0,0:0:0:0: -278,180,70662,2,0,P|230:192|182:178,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -122,155,71005,2,0,L|28:151,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -11,219,71348,6,0,P|2:248|0:281,2,46.6666666666667,0|0|0,1:0|0:0|0:0,0:0:0:0: -28,151,71691,2,0,B|44:105|44:105|26:42,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -88,20,72034,2,0,L|243:16,1,140,2|2,0:0|0:0,0:0:0:0: -227,16,72719,6,0,P|215:75|218:109,1,70,0|0,1:0|0:0,0:0:0:0: -299,148,73062,2,0,P|311:207|308:241,1,70,0|0,1:0|0:0,0:0:0:0: -260,308,73405,1,0,1:0:0:0: -260,308,73576,1,0,0:0:0:0: -361,278,73748,2,0,L|463:273,1,70,0|0,1:0|0:0,0:0:0:0: -494,74,74262,5,0,0:0:0:0: -430,157,74434,2,0,P|394:163|338:153,1,70,0|0,1:0|0:0,0:0:0:0: -280,93,74776,2,0,P|245:90|210:96,1,70,0|0,1:0|0:0,0:0:0:0: -121,152,75119,2,0,L|111:235,1,70,0|0,1:0|0:0,0:0:0:0: -61,328,75462,6,0,P|117:309|214:344,1,140,0|0,1:0|1:0,0:0:0:0: -296,303,75976,1,0,0:0:0:0: -213,237,76148,2,0,L|208:148,1,70,0|0,1:0|0:0,0:0:0:0: -307,204,76491,2,0,L|312:115,1,70,0|0,1:0|0:0,0:0:0:0: -270,59,76834,6,0,P|241:55|195:64,1,56,0|0,0:0|0:0,0:0:0:0: -172,130,77176,2,0,P|144:138|106:166,1,56 -65,215,77519,2,0,B|61:260|61:260|76:287|76:287|71:331,1,112 -71,322,78205,6,0,P|130:294|193:287,1,112 -288,161,78891,2,0,P|229:133|166:126,1,112 -22,84,79576,6,0,L|18:20,1,56 -100,46,79919,2,0,P|136:51|173:39,1,56,0|0,0:0|0:0,0:0:0:0: -234,19,80262,2,0,B|280:36|280:36|365:20,1,112,0|0,0:0|0:0,0:0:0:0: -341,24,80948,6,0,L|332:160,1,112 -333,135,81462,1,0,0:0:0:0: -277,198,81634,2,0,P|228:183|152:187,1,112,0|0,0:0|0:0,0:0:0:0: -64,315,82319,6,0,L|61:191,1,112 -61,203,82834,1,0,0:0:0:0: -107,133,83005,2,0,P|119:105|82:13,1,112,0|0,0:0|0:0,0:0:0:0: -100,28,83691,6,0,L|180:24,1,56,2|0,0:0|0:0,0:0:0:0: -224,74,84034,1,0,0:0:0:0: -224,74,84205,1,0,0:0:0:0: -289,21,84376,2,0,P|325:17|367:28,1,56,2|0,0:0|0:0,0:0:0:0: -369,100,84719,2,0,P|403:111|436:139,1,56,2|0,0:0|0:0,0:0:0:0: -481,208,85062,6,0,L|414:204,1,56,2|0,0:0|0:0,0:0:0:0: -367,266,85405,1,0,0:0:0:0: -367,266,85576,1,0,0:0:0:0: -307,206,85748,2,0,P|298:175|299:138,1,56,2|0,0:0|0:0,0:0:0:0: -213,154,86091,2,0,P|217:122|234:88,1,56,2|0,0:0|0:0,0:0:0:0: -168,18,86434,6,0,B|87:16|87:16|123:49,1,112,2|0,0:0|0:0,0:0:0:0: -81,116,86948,1,0,0:0:0:0: -117,191,87119,2,0,P|155:198|188:192,1,56,2|0,0:0|0:0,0:0:0:0: -230,256,87462,2,0,P|257:249|285:250,1,56,2|0,0:0|0:0,0:0:0:0: -359,290,87805,5,2,0:0:0:0: -359,290,87976,1,0,0:0:0:0: -389,211,88148,1,0,0:0:0:0: -389,211,88319,1,0,0:0:0:0: -466,177,88491,2,0,B|483:139|483:139|472:54,2,112,2|2|4,0:0|0:0|0:3,0:0:0:0: -185,144,100148,6,0,P|137:124|63:139,1,112,4|2,1:2|0:0,0:0:0:0: -35,189,100662,1,2,0:0:0:0: -35,189,100834,2,0,L|27:318,1,112,2|2,0:0|0:0,0:0:0:0: -164,352,101519,1,2,0:3:0:0: -297,294,101862,2,0,L|428:300,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -281,222,102719,1,2,0:0:0:0: -305,153,102891,5,2,0:3:0:0: -225,274,103234,2,0,P|183:292|107:272,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -305,153,104262,1,2,0:3:0:0: -186,67,104605,2,0,B|148:52|148:52|54:66,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -256,48,105462,1,2,0:0:0:0: -326,30,105634,5,2,0:3:0:0: -428,132,105976,2,0,L|434:266,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -308,216,107005,1,2,0:3:0:0: -189,131,107348,2,0,P|147:120|77:142,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -230,190,108205,1,2,0:0:0:0: -233,262,108376,6,0,L|239:322,1,56,2|0,0:3|0:0,0:0:0:0: -311,325,108719,2,0,L|316:269,1,56,2|2,0:0|0:0,0:0:0:0: -369,219,109062,2,0,L|361:107,2,112,2|2|0,0:0|0:0|0:0,0:0:0:0: -81,124,110776,2,0,L|92:77,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -77,52,111119,6,0,L|238:47,1,140,2|2,0:0|0:0,0:0:0:0: -290,102,111634,1,0,0:0:0:0: -349,33,111805,2,0,L|435:29,1,70,2|0,0:0|0:0,0:0:0:0: -439,118,112148,2,0,L|518:150,1,70,2|0,0:0|0:0,0:0:0:0: -426,309,112662,5,0,0:0:0:0: -379,230,112834,2,0,P|338:227|295:238,1,70,2|0,0:0|0:0,0:0:0:0: -237,286,113176,1,2,0:0:0:0: -237,286,113348,1,0,0:0:0:0: -172,221,113519,2,0,L|165:128,1,70,2|0,0:0|0:0,0:0:0:0: -166,151,114034,5,0,0:0:0:0: -237,94,114205,2,0,P|278:84|334:88,1,70,2|0,0:0|0:0,0:0:0:0: -375,142,114548,2,0,P|409:143|443:152,1,70,2|0,0:0|0:0,0:0:0:0: -496,226,114891,2,0,L|502:313,1,70,2|0,0:0|0:0,0:0:0:0: -434,358,115234,5,2,0:0:0:0: -434,358,115319,1,0,0:0:0:0: -434,358,115405,2,0,L|333:347,2,70,0|2|0,0:0|0:0|0:0,0:0:0:0: -398,273,115919,2,0,L|411:117,1,140,2|2,0:0|0:0,0:0:0:0: -255,34,116605,6,0,P|211:59|119:19,1,140,2|2,0:0|0:0,0:0:0:0: -45,68,117119,1,0,0:0:0:0: -108,133,117291,2,0,L|115:214,1,70,2|0,0:0|0:0,0:0:0:0: -197,240,117634,2,0,L|190:321,1,70,2|0,0:0|0:0,0:0:0:0: -363,369,118148,5,0,0:0:0:0: -332,283,118319,2,0,P|329:226|345:193,1,70,2|0,0:0|0:0,0:0:0:0: -386,140,118662,1,2,0:0:0:0: -386,140,118834,1,0,0:0:0:0: -331,67,119005,2,0,L|239:63,1,70,2|0,0:0|0:0,0:0:0:0: -261,63,119519,5,0,0:0:0:0: -198,129,119691,2,0,P|159:137|111:126,1,70,2|0,0:0|0:0,0:0:0:0: -68,201,120034,2,0,P|60:240|71:288,1,70,2|0,0:0|0:0,0:0:0:0: -128,333,120376,2,0,L|221:325,1,70,2|0,0:0|0:0,0:0:0:0: -282,293,120719,5,2,0:0:0:0: -282,293,121062,1,2,0:0:0:0: -282,293,121405,1,2,0:0:0:0: -282,293,121748,2,0,L|383:298,1,78.7500030040742,2|0,0:0|0:0,0:0:0:0: -403,281,122091,6,0,L|395:114,1,140,0|0,1:0|0:0,0:0:0:0: -221,91,122776,2,0,L|214:230,1,140,0|0,0:0|0:0,0:0:0:0: -354,347,123462,2,0,P|389:364|474:287,1,140,0|0,0:0|0:0,0:0:0:0: -329,202,124148,2,0,P|294:185|209:262,1,140,0|0,0:0|0:0,0:0:0:0: -68,341,124834,6,0,L|59:269,1,70,0|0,0:0|0:0,0:0:0:0: -139,313,125176,2,0,L|130:241,1,70,0|0,0:0|0:0,0:0:0:0: -211,286,125519,2,0,L|202:214,1,70,0|0,0:0|0:0,0:0:0:0: -282,260,125862,2,0,L|273:188,1,70,0|0,0:0|0:0,0:0:0:0: -192,108,126205,6,0,P|162:100|107:103,1,70 -172,192,126548,2,0,P|142:181|87:179,1,70 -146,274,126891,2,0,P|117:260|63:254,1,70 -110,354,127234,2,0,P|83:338|29:327,1,70 -150,279,127576,5,0,0:0:0:0: -150,279,127748,1,0,0:0:0:0: -242,327,127919,1,0,0:0:0:0: -242,327,128091,1,0,0:0:0:0: -285,232,128262,2,0,L|379:227,1,70,0|0,0:0|0:0,0:0:0:0: -422,166,128605,2,0,L|491:169,1,70,0|0,0:0|0:0,0:0:0:0: -441,76,128948,5,0,0:0:0:0: -441,76,129119,1,0,0:0:0:0: -388,150,129291,1,0,0:0:0:0: -388,150,129462,1,0,0:0:0:0: -338,73,129634,2,0,P|286:69|238:75,1,70,0|0,0:0|0:0,0:0:0:0: -210,140,129976,2,0,P|175:141|140:137,1,70,0|0,0:0|0:0,0:0:0:0: -79,205,130319,6,0,L|68:260,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -108,267,130662,2,0,L|115:319,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -145,334,131005,6,0,P|169:324|197:323,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -220,339,131348,2,0,P|237:335|263:321,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -289,300,131691,6,0,L|294:258,14,22.7499989585877,0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -314,240,132376,6,0,B|356:235|356:235|374:221|374:221|433:213,1,105.000004005432,0|0,0:0|0:0,0:0:0:0: -444,142,132891,1,0,0:0:0:0: -444,142,132976,1,0,0:0:0:0: -444,142,133062,6,0,B|461:90|461:90|446:-12,1,140,4|0,1:2|1:0,0:0:0:0: -238,15,133748,1,0,1:0:0:0: -181,103,133919,1,0,0:0:0:0: -181,103,134005,2,0,L|310:99,1,105,0|0,0:0|0:0,0:0:0:0: -366,167,134434,6,0,P|378:224|363:254,1,70,0|0,1:0|0:0,0:0:0:0: -276,270,134776,2,0,P|262:326|236:347,1,70,0|0,1:0|0:0,0:0:0:0: -151,356,135119,1,0,1:0:0:0: -61,300,135291,1,0,0:0:0:0: -164,254,135462,1,0,1:0:0:0: -164,254,135548,2,0,L|174:156,1,70 -195,162,135805,6,0,P|243:178|290:168,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -148,67,136319,1,0,0:0:0:0: -148,67,136491,1,0,1:0:0:0: -247,98,136662,1,0,0:0:0:0: -247,98,136748,2,0,B|286:80|286:80|372:100,1,105,0|0,0:0|0:0,0:0:0:0: -432,154,137176,6,0,L|437:294,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -307,324,138205,2,0,P|282:331|245:328,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -246,309,138548,6,0,P|201:298|114:358,1,140,0|0,1:0|1:0,0:0:0:0: -19,157,139234,1,0,1:0:0:0: -113,112,139405,1,0,0:0:0:0: -113,112,139491,2,0,P|153:134|236:108,1,105,0|0,0:0|0:0,0:0:0:0: -310,159,139919,6,0,P|276:209|172:226,1,140,0|0,1:0|1:0,0:0:0:0: -387,334,140605,2,0,L|381:238,1,70,0|0,1:0|0:0,0:0:0:0: -450,183,140948,1,0,1:0:0:0: -450,183,141034,2,0,L|456:87,1,70,0|0,0:0|0:0,0:0:0:0: -434,85,141291,6,0,P|399:71|337:77,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -468,292,141976,1,0,1:0:0:0: -377,238,142148,1,0,0:0:0:0: -377,238,142234,2,0,P|327:245|261:229,1,105 -178,185,142662,5,2,0:0:0:0: -178,185,143005,1,2,0:0:0:0: -178,185,143348,1,0,0:0:0:0: -178,185,143691,2,0,L|171:266,1,70,0|0,0:0|0:0,0:0:0:0: -171,254,144034,6,0,P|224:241|320:257,1,140,4|0,1:2|1:0,0:0:0:0: -408,282,144548,1,0,0:0:0:0: -480,205,144719,1,0,1:0:0:0: -433,116,144891,1,0,0:0:0:0: -433,116,144976,2,0,L|443:2,1,105,0|0,0:0|0:0,0:0:0:0: -337,69,145405,6,0,P|303:79|242:60,1,70,0|0,1:0|0:0,0:0:0:0: -172,116,145748,2,0,L|86:103,1,70,0|0,1:0|0:0,0:0:0:0: -38,188,146091,1,0,1:0:0:0: -38,188,146262,1,0,0:0:0:0: -110,264,146434,1,0,1:0:0:0: -110,264,146519,2,0,L|196:251,1,70,0|0,0:0|0:0,0:0:0:0: -208,269,146776,6,0,P|246:279|300:266,1,70,0|0,1:0|0:0,0:0:0:0: -369,227,147119,1,0,1:0:0:0: -369,227,147462,1,0,1:0:0:0: -312,138,147634,1,0,0:0:0:0: -312,138,147719,2,0,P|302:86|316:15,1,105,0|0,0:0|0:0,0:0:0:0: -210,71,148148,6,0,B|159:84|159:84|45:57,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -410,132,149176,2,0,P|421:151|426:191,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -458,203,149519,6,0,P|408:195|334:253,1,140,0|0,1:0|1:0,0:0:0:0: -232,232,150034,1,0,0:0:0:0: -309,162,150205,1,0,1:0:0:0: -192,144,150376,1,0,0:0:0:0: -192,144,150462,2,0,L|188:19,1,105,0|0,0:0|0:0,0:0:0:0: -112,155,150891,6,0,P|139:204|239:212,1,140,0|0,1:0|1:0,0:0:0:0: -216,221,151405,1,0,0:0:0:0: -296,288,151576,2,0,L|398:280,1,70,0|0,1:0|0:0,0:0:0:0: -445,213,151919,1,0,1:0:0:0: -445,213,152005,2,0,L|452:111,1,70,0|0,0:0|0:0,0:0:0:0: -434,113,152262,6,0,P|428:66|434:17,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -352,180,152776,1,0,0:0:0:0: -352,180,152948,2,0,B|287:163|287:163|183:186,1,140,0|0,1:0|1:0,0:0:0:0: -215,178,153634,6,0,P|163:175|121:181,1,70,0|0,1:0|0:0,0:0:0:0: -106,274,153976,2,0,L|200:277,1,70,0|0,1:0|0:0,0:0:0:0: -264,329,154319,1,0,1:0:0:0: -264,329,154662,1,0,0:0:0:0: -360,286,154834,2,0,L|365:255,2,17.5,0|0|0,0:0|0:0|0:0,0:0:0:0: -376,312,155005,6,0,L|542:302,1,140,4|0,1:2|1:0,0:0:0:0: -460,213,155519,1,0,0:0:0:0: -460,213,155691,2,0,L|466:132,1,70,0|0,1:0|0:0,0:0:0:0: -363,113,156034,2,0,L|357:32,1,70,0|0,1:0|0:0,0:0:0:0: -253,34,156376,6,0,P|224:40|168:26,1,70,0|0,1:0|0:0,0:0:0:0: -101,98,156719,1,0,1:0:0:0: -101,98,156891,1,0,0:0:0:0: -190,152,157062,2,0,L|195:247,1,70,0|0,1:0|0:0,0:0:0:0: -290,274,157405,2,0,P|303:225|295:182,1,70,0|0,1:0|0:0,0:0:0:0: -271,105,157748,6,0,B|354:84|354:84|425:103,1,140,0|0,1:0|1:0,0:0:0:0: -484,169,158262,1,0,0:0:0:0: -484,169,158434,2,0,P|492:218|484:257,1,70,0|0,1:0|0:0,0:0:0:0: -396,286,158776,2,0,P|388:335|396:374,1,70,0|0,1:0|0:0,0:0:0:0: -285,341,159119,5,0,1:0:0:0: -285,341,159291,1,0,0:0:0:0: -210,267,159462,2,0,L|214:175,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -129,334,159976,1,0,0:0:0:0: -51,262,160148,2,0,P|40:217|43:169,1,70,0|0,1:0|0:0,0:0:0:0: -125,104,160491,6,0,L|298:97,1,140,0|0,1:0|1:0,0:0:0:0: -341,170,161005,1,0,0:0:0:0: -373,70,161176,2,0,L|377:-8,1,70,0|0,1:0|0:0,0:0:0:0: -468,51,161519,1,0,1:0:0:0: -468,51,161691,1,0,0:0:0:0: -424,146,161862,6,0,P|419:203|429:235,1,70,0|0,1:0|0:0,0:0:0:0: -467,309,162205,2,0,L|388:311,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -421,214,162719,1,0,0:0:0:0: -332,271,162891,2,0,P|321:309|343:361,1,70,0|0,1:0|0:0,0:0:0:0: -225,359,163234,6,0,P|162:331|86:357,1,140,0|0,1:0|1:0,0:0:0:0: -26,270,163748,1,0,0:0:0:0: -26,270,163919,2,0,L|30:169,1,70,0|0,1:0|0:0,0:0:0:0: -112,136,164262,2,0,L|108:35,1,70,0|0,1:0|0:0,0:0:0:0: -207,103,164605,6,0,P|272:122|351:76,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -291,296,165634,1,0,1:0:0:0: -364,221,165805,1,8,0:0:0:0: -364,221,165891,1,0,0:0:0:0: -364,221,165976,6,0,P|373:159|328:87,1,140,4|0,1:2|1:0,0:0:0:0: -175,93,166662,2,0,P|140:152|148:221,1,140,0|0,1:0|1:0,0:0:0:0: -256,356,167348,2,0,L|256:212,1,140,0|0,1:0|1:0,0:0:0:0: -152,88,168034,1,0,1:0:0:0: -360,88,168376,1,0,1:0:0:0: -284,300,168719,6,0,P|216:308|157:273,1,140,0|0,1:0|1:0,0:0:0:0: -157,111,169405,2,0,P|216:76|285:84,1,140,0|0,1:0|1:0,0:0:0:0: -420,192,170091,2,0,L|276:192,1,140,0|0,1:0|1:0,0:0:0:0: -152,296,170777,1,0,1:0:0:0: -152,88,171119,1,0,1:0:0:0: -152,88,171291,1,0,0:0:0:0: -152,88,171462,6,0,L|264:88,1,105.000004005432,6|2,0:0|0:0,0:0:0:0: -392,176,172148,2,0,L|280:176,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -160,272,172834,2,0,L|272:272,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -400,352,173519,2,0,L|288:352,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -105,324,174205,6,0,P|85:285|89:219,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: -95,219,174719,1,0,0:0:0:0: -103,197,174891,2,0,L|99:88,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: -240,73,175576,5,0,0:0:0:0: -265,106,175919,1,0,0:0:0:0: -279,136,176262,2,0,B|314:129|351:139|351:139|329:100,1,112"; - } -} From cd5e1bc4b14297e4f4fd694240ab97f5b0f15df8 Mon Sep 17 00:00:00 2001 From: MaxOhnh Date: Mon, 1 Jul 2019 13:55:09 +0200 Subject: [PATCH 11/14] Replace deflate progress with modified copy-paste of grow mod --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 106 ++++++++++---------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 2638d5bf78..56f64d14b8 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,84 +1,84 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Bindables; using osu.Framework.Graphics; -using osu.Game.Graphics; +using osu.Framework.Graphics.Sprites; +using osu.Game.Configuration; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; -using System.Collections.Generic; -using OpenTK; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + public class OsuModDeflate : Mod, IReadFromConfig, IApplicableToDrawableHitObjects { public override string Name => "Deflate"; - public override string ShortenedName => "DF"; - public override FontAwesome Icon => FontAwesome.fa_compress; + + public override string Acronym => "DF"; + + public override IconUsage Icon => FontAwesome.Solid.CompressArrowsAlt; + public override ModType Type => ModType.Fun; + public override string Description => "Become one with the approach circle..."; + public override double ScoreMultiplier => 1; + private Bindable increaseFirstObjectVisibility = new Bindable(); + + public void ReadFromConfig(OsuConfigManager config) + { + increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); + } + public void ApplyToDrawableHitObjects(IEnumerable drawables) { - foreach (var drawable in drawables) - drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; + foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + { + switch (drawable) + { + case DrawableSpinner _: + continue; + + default: + drawable.ApplyCustomUpdateState += ApplyCustomState; + break; + } + } } - private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) { - if (!(drawable is DrawableOsuHitObject d)) - return; - - var h = d.HitObject; - - const float rescale = 2; + var h = (OsuHitObject)drawable.HitObject; + // apply grow effect switch (drawable) { - case DrawableHitCircle c: - c.ApproachCircle.Hide(); - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) - { - var origScale = d.Scale; - d.ScaleTo(1.1f, 1) - .Then() - .ScaleTo(origScale, h.TimePreempt); - } - switch (state) - { - case ArmedState.Miss: - d.FadeOut(100); - break; - case ArmedState.Hit: - d.FadeOut(800) - .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); - break; - } + case DrawableSliderHead _: + case DrawableSliderTail _: + // special cases we should *not* be scaling. break; - case DrawableSlider s: - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + case DrawableSlider _: + case DrawableHitCircle _: { - float origPathWidth = s.Body.PathWidth; - var origBodySize = s.Body.Size; - var origBodyDrawPos = s.Body.DrawPosition; - - // Fits nicely for CS=4, too big on lower CS, too small on higher CS - s.Body.Animate( - b => b.MoveTo(origBodyDrawPos - new Vector2(origPathWidth)).MoveTo(origBodyDrawPos, h.TimePreempt), - b => b.ResizeTo(origBodySize * rescale).ResizeTo(origBodySize, h.TimePreempt), - b => b.TransformTo("PathWidth", origPathWidth * rescale).TransformTo("PathWidth", origPathWidth, h.TimePreempt) - ); - } - break; - case DrawableRepeatPoint rp: - if (!rp.IsFirstRepeat) + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod break; - var origSizeRp = rp.Size; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) - rp.ResizeTo(origSizeRp * rescale).ResizeTo(origSizeRp, h.TimePreempt); + } + } + + // remove approach circles + switch (drawable) + { + case DrawableHitCircle circle: + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + circle.ApproachCircle.Hide(); break; } } From 02b9e89f431b3164f5850587ae6eca5df3d67b44 Mon Sep 17 00:00:00 2001 From: MaxOhnh Date: Mon, 1 Jul 2019 14:46:17 +0200 Subject: [PATCH 12/14] Removed old unnecessary change, updated license header and apply deflating onto first object regardless --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 15 ++++----------- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 -- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 56f64d14b8..56bb55c13e 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using System.Linq; @@ -14,7 +14,7 @@ using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects { public override string Name => "Deflate"; @@ -28,16 +28,9 @@ namespace osu.Game.Rulesets.Osu.Mods public override double ScoreMultiplier => 1; - private Bindable increaseFirstObjectVisibility = new Bindable(); - - public void ReadFromConfig(OsuConfigManager config) - { - increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); - } - public void ApplyToDrawableHitObjects(IEnumerable drawables) { - foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + foreach (var drawable in drawables) { switch (drawable) { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index 29a84b53a9..cce6dfe106 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -41,8 +41,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables }; } - public bool IsFirstRepeat => repeatPoint.RepeatIndex == 0; - protected override void CheckForResult(bool userTriggered, double timeOffset) { if (repeatPoint.StartTime <= Time.Current) From 48a828b7466a6ce369d4d977af8670ca1c38f889 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Jul 2019 17:49:37 +0200 Subject: [PATCH 13/14] Removed redundant imports and fixed indentation --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 56bb55c13e..cbefc42c3b 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -2,11 +2,8 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; -using System.Linq; -using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Configuration; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; @@ -58,11 +55,11 @@ namespace osu.Game.Rulesets.Osu.Mods case DrawableSlider _: case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod - break; - } + { + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod + break; + } } // remove approach circles From cc9a28afa81042a16284b7ce11d9164d548261a1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 19:42:16 +0900 Subject: [PATCH 14/14] Add shared base class for both mod imlpementations --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 62 +------------- osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs | 70 +--------------- .../Mods/OsuModeObjectScaleTween.cs | 84 +++++++++++++++++++ 3 files changed, 89 insertions(+), 127 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index cbefc42c3b..adca95cf8a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,17 +1,11 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Collections.Generic; -using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + public class OsuModDeflate : OsuModeObjectScaleTween { public override string Name => "Deflate"; @@ -19,58 +13,8 @@ namespace osu.Game.Rulesets.Osu.Mods public override IconUsage Icon => FontAwesome.Solid.CompressArrowsAlt; - public override ModType Type => ModType.Fun; + public override string Description => "Hit them at the right size!"; - public override string Description => "Become one with the approach circle..."; - - public override double ScoreMultiplier => 1; - - public void ApplyToDrawableHitObjects(IEnumerable drawables) - { - foreach (var drawable in drawables) - { - switch (drawable) - { - case DrawableSpinner _: - continue; - - default: - drawable.ApplyCustomUpdateState += ApplyCustomState; - break; - } - } - } - - protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) - { - var h = (OsuHitObject)drawable.HitObject; - - // apply grow effect - switch (drawable) - { - case DrawableSliderHead _: - case DrawableSliderTail _: - // special cases we should *not* be scaling. - break; - - case DrawableSlider _: - case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod - break; - } - } - - // remove approach circles - switch (drawable) - { - case DrawableHitCircle circle: - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - circle.ApproachCircle.Hide(); - break; - } - } + protected override float StartScale => 2f; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs b/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs index 8072dc09c1..3c81203ad7 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs @@ -1,20 +1,11 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Collections.Generic; -using System.Linq; -using osu.Framework.Bindables; -using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Configuration; -using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - internal class OsuModGrow : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + internal class OsuModGrow : OsuModeObjectScaleTween { public override string Name => "Grow"; @@ -22,65 +13,8 @@ namespace osu.Game.Rulesets.Osu.Mods public override IconUsage Icon => FontAwesome.Solid.ArrowsAltV; - public override ModType Type => ModType.Fun; - public override string Description => "Hit them at the right size!"; - public override double ScoreMultiplier => 1; - - private Bindable increaseFirstObjectVisibility = new Bindable(); - - public void ReadFromConfig(OsuConfigManager config) - { - increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); - } - - public void ApplyToDrawableHitObjects(IEnumerable drawables) - { - foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) - { - switch (drawable) - { - case DrawableSpinner _: - continue; - - default: - drawable.ApplyCustomUpdateState += ApplyCustomState; - break; - } - } - } - - protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) - { - var h = (OsuHitObject)drawable.HitObject; - - // apply grow effect - switch (drawable) - { - case DrawableSliderHead _: - case DrawableSliderTail _: - // special cases we should *not* be scaling. - break; - - case DrawableSlider _: - case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(0.5f).Then().ScaleTo(1, h.TimePreempt, Easing.OutSine); - break; - } - } - - // remove approach circles - switch (drawable) - { - case DrawableHitCircle circle: - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - circle.ApproachCircle.Hide(); - break; - } - } + protected override float StartScale => 0.5f; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs b/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs new file mode 100644 index 0000000000..ad6a15718a --- /dev/null +++ b/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs @@ -0,0 +1,84 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Game.Configuration; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.Objects.Drawables; + +namespace osu.Game.Rulesets.Osu.Mods +{ + /// + /// Adjusts the size of hit objects during their fade in animation. + /// + public abstract class OsuModeObjectScaleTween : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + { + public override ModType Type => ModType.Fun; + + public override double ScoreMultiplier => 1; + + protected virtual float StartScale => 1; + + protected virtual float EndScale => 1; + + private Bindable increaseFirstObjectVisibility = new Bindable(); + + public void ReadFromConfig(OsuConfigManager config) + { + increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); + } + + public void ApplyToDrawableHitObjects(IEnumerable drawables) + { + foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + { + switch (drawable) + { + case DrawableSpinner _: + continue; + + default: + drawable.ApplyCustomUpdateState += ApplyCustomState; + break; + } + } + } + + protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) + { + var h = (OsuHitObject)drawable.HitObject; + + // apply grow effect + switch (drawable) + { + case DrawableSliderHead _: + case DrawableSliderTail _: + // special cases we should *not* be scaling. + break; + + case DrawableSlider _: + case DrawableHitCircle _: + { + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(StartScale).Then().ScaleTo(EndScale, h.TimePreempt, Easing.OutSine); + break; + } + } + + // remove approach circles + switch (drawable) + { + case DrawableHitCircle circle: + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + circle.ApproachCircle.Hide(); + break; + } + } + } +}