Пример #1
0
        internal override void OnCompletion()
        {
            base.OnCompletion();
            HitObjectManagerMania manager = (HitObjectManagerMania)hitObjectManager;

            player.HaxCheck();
            CurrentScore.TotalScore = (int)Math.Round(CurrentScore.TotalScoreDouble);
            if (CurrentScore.TotalScore == 999999)
            {
                CurrentScore.TotalScore = 1000000;//some round issue.
            }
            if ((CurrentScore.CountMiss + CurrentScore.Count50 + CurrentScore.Count100) == 0 && ((float)CurrentScore.CountKatu / CurrentScore.TotalHits) < 0.1)
            {
                CurrentScore.Perfect = true;
            }
            else
            {
                CurrentScore.Perfect = false;
            }

            //remove invalid mods
            CurrentScore.EnabledMods = StageMania.CanonicalKeyMods(BeatmapManager.Current, CurrentScore.EnabledMods);

            if (manager.PressHaxCount > manager.CountNormal * 2 / 3) // 67% normal notes
            {
                Player.flag |= BadFlags.FastPress;
            }

            haxCheckCount++;
            player.UpdateChecksum();

            Debug.Print("Fast press: {0}", manager.PressHaxCount);
        }
Пример #2
0
        internal override void InitializeModSettings()
        {
            HitObjectManagerMania manager = (HitObjectManagerMania)hitObjectManager;

            //Don't consider score increase mods to not go over mania max
            double multiplier = ModManager.ScoreMultiplier(Player.currentScore.EnabledMods & ~(Mods.ScoreIncreaseMods), Player.Mode, manager.Beatmap);

            ScoreMultiplier = (double)JudgementMania.ScoreMax / manager.CountTotal * multiplier;

            if (!ModManager.CheckActive(Player.currentScore.EnabledMods, Mods.SuddenDeath))
            {
                if (ModManager.CheckActive(Player.currentScore.EnabledMods, Mods.Easy))
                {
                    Recoveries = 2;
                }
            }

            if (ModManager.CheckActive(Player.currentScore.EnabledMods, Mods.Flashlight))
            {
                spriteManagerFlashlight = new SpriteManager(true);

                s_Flashlight       = new pSprite(null, Fields.Storyboard, Origins.CentreLeft, Clocks.Game, new Vector2(0, 220), 1, true, Color.White);
                s_Flashlight.Scale = 1.4F;

                spriteManagerFlashlight.Add(s_Flashlight);
                loadFlashlight();
            }
        }
Пример #3
0
        internal override void CreateAutoplayReplay()
        {
            InputManager.ReplayScore.Replay = new List <bReplayFrame>();
            List <bReplayFrame> replay = InputManager.ReplayScore.Replay;

            HitObjectManagerMania homMania = hitObjectManager as HitObjectManagerMania;

            replay.Add(new bReplayFrame(0, 0, speed, pButtonState.None));
            for (int i = 0; i < hitObjectManager.hitObjectsCount; i++)
            {
                HitCircleMania note = (HitCircleMania)hitObjectManager.hitObjects[i];

                if (note.EndTime < InputManager.ReplayStartTime)
                {
                    note.IsHit = true;
                    continue;
                }

                int val = 0;
                //inputmanager adjust hit position based on NeedAdjust
                //Change columns back to thier original to fit the input require.
                if (hitObjectManager.ManiaStage.SpecialStyleRight)
                {
                    val = hitObjectManager.ManiaStage.Columns[note.Column == hitObjectManager.ManiaStage.Columns.Count - 1 ? 0 : note.Column + 1].KeyValue;
                }
                else
                {
                    val = note.Column.KeyValue;
                }
                InsertReplay(replay, note.StartTime, val);
                if (note.ManiaType == ManiaNoteType.Long)
                {
                    //find exist frames
                    replay.ForEach(f =>
                    {
                        if (f.time <= note.StartTime)
                        {
                            return;
                        }
                        if (f.time >= note.EndTime)
                        {
                            return;
                        }
                        f.mouseX = MergeValue((int)f.mouseX, val);
                    });
                    InsertReplay(replay, note.EndTime - 1, -val);
                }
                else
                {
                    InsertReplay(replay, note.StartTime + 1, -val);
                }
            }

            Player.currentScore.Replay     = InputManager.ReplayScore.Replay;
            Player.currentScore.PlayerName = "osu!topus!";
        }
Пример #4
0
        internal override IncreaseScoreType Hit()
        {
            if (IsHit)
            {
                return(HitValue);
            }
            IsHit    = true;
            HitValue = IncreaseScoreType.MissMania;
            if (Pressed)
            {
                int accuracy = Math.Abs(TimePress - StartTime);
                HitObjectManagerMania homMania = hitObjectManager as HitObjectManagerMania;

                if (accuracy <= homMania.HitWindow300g)
                {
                    HitValue = IncreaseScoreType.ManiaHit300g;
                }
                else if (accuracy <= homMania.HitWindow300)
                {
                    HitValue = IncreaseScoreType.ManiaHit300;
                }
                else if (accuracy <= homMania.HitWindow200)
                {
                    HitValue = IncreaseScoreType.ManiaHit200;
                }
                else if (accuracy <= homMania.HitWindow100)
                {
                    HitValue = IncreaseScoreType.ManiaHit100;
                }
                else if (accuracy <= homMania.HitWindow50)
                {
                    HitValue = IncreaseScoreType.ManiaHit50;
                }

                PlaySound();
            }
            if (HitValue > IncreaseScoreType.ManiaHit50)
            {
                Finish();
            }
            else
            {
                Miss();
            }

            return(HitValue);
        }
Пример #5
0
        internal override IncreaseScoreType Hit()
        {
            s_body.RunAnimation = false;
            lastScoreTime       = -1;
            UpdateMissing();

            if (IsHit)
            {
                return(HitValue);
            }

            if (AudioEngine.Time < StartTime + hitObjectManager.HitWindow50 && TimePress == 0)
            {
                return(IncreaseScoreType.Ignore);
            }

            if (AudioEngine.Time < EndTime - hitObjectManager.HitWindow50)
            {
                if (Pressed)
                {
                    return(IncreaseScoreType.Ignore);
                }
                else
                {
                    StopSound();
                    ((HitObjectManagerMania)hitObjectManager).UnfreezeNote(this);
                    hasHoldBreak = true;
                    return(IncreaseScoreType.MissManiaHoldBreak);
                }
            }

            if (AudioEngine.Time < EndTime + hitObjectManager.HitWindow50 && Pressed)
            {
                return(IncreaseScoreType.Ignore);
            }

            StopSound();
            IsHit    = true;
            HitValue = IncreaseScoreType.MissMania;

            int start = 0;

            if (TimePress < StartTime - hitObjectManager.HitWindow50)
            {
                start = EndTime - 1;   //hit too early ,set a 0 value
            }
            else if (TimePress < StartTime)
            {
                start = StartTime + (StartTime - TimePress);
            }
            else
            {
                start = TimePress;
            }

            int end = 0;

            if (Pressed) //still holding
            {
                end = AudioEngine.Time;
            }
            else if (TimeRelease > EndTime)
            {
                end = EndTime - (TimeRelease - EndTime);
            }
            else
            {
                end = TimeRelease;
            }

            //depends on how long player hold the key.
            int   total     = EndTime - StartTime;
            int   hold      = Math.Abs(end - start);
            int   diffStart = Math.Abs(start - StartTime);
            int   diffEnd   = Math.Abs(end - EndTime);
            int   diffTotal = diffStart + diffEnd;
            float percent   = (float)(end - start) / Length;

            HitObjectManagerMania homMania = hitObjectManager as HitObjectManagerMania;

            if (end < EndTime - homMania.HitWindow50)
            {
                HitValue = IncreaseScoreType.MissMania; //is there any reason this was Miss instead of MissBemani?
            }
            else if (diffStart <= homMania.HitWindow300g * 1.2 && diffTotal <= homMania.HitWindow300g * 2.4)
            {
                HitValue = IncreaseScoreType.ManiaHit300g;
            }
            else if (diffStart <= homMania.HitWindow300 * 1.1 && diffTotal <= homMania.HitWindow300 * 2.2)
            {
                HitValue = IncreaseScoreType.ManiaHit300;
            }
            else if (diffStart <= homMania.HitWindow200 && diffTotal <= homMania.HitWindow200 * 2)
            {
                HitValue = IncreaseScoreType.ManiaHit200;
            }
            else if (diffStart <= homMania.HitWindow100 && diffTotal <= homMania.HitWindow100 * 2)
            {
                HitValue = IncreaseScoreType.ManiaHit100;
            }
            else
            {
                HitValue = IncreaseScoreType.ManiaHit50;
            }

            if (HitValue >= IncreaseScoreType.ManiaHit300 && hasHoldBreak)
            {
                HitValue = IncreaseScoreType.ManiaHit200;
            }
            //Bug fix: If let go and just hit rear, get 50.
            //  if (hitValue == IncreaseScoreType.BemaniHit50 && hasHoldBreak)
            //      hitValue = IncreaseScoreType.MissBemani;

            if (HitValue > 0)
            {
                PlaySound();
            }

            //Only scroll past if it already should be, or if released too early
            if (HitValue < 0 || hasHoldBreak || AudioEngine.Time < EndTime - hitObjectManager.HitWindow50)
            {
                Miss();
            }
            else
            {
                Finish();
            }

            return(HitValue);
        }