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); }
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(); } }
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!"; }
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); }
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); }