diff --git a/source/PlayState.hx b/source/PlayState.hx index 544da27..7078d9d 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -94,6 +94,7 @@ class PlayState extends MusicBeatState public static var rep:Replay; public static var loadRep:Bool = false; + public static var inResults:Bool = false; public static var noteBools:Array = [false, false, false, false]; @@ -214,6 +215,7 @@ class PlayState extends MusicBeatState var funneEffect:FlxSprite; var inCutscene:Bool = false; + var usedTimeTravel:Bool = false; public static var repPresses:Int = 0; public static var repReleases:Int = 0; @@ -279,6 +281,7 @@ class PlayState extends MusicBeatState highestCombo = 0; repPresses = 0; repReleases = 0; + inResults = false; PlayStateChangeables.useDownscroll = FlxG.save.data.downscroll; PlayStateChangeables.safeFrames = FlxG.save.data.frames; @@ -2308,6 +2311,45 @@ class PlayState extends MusicBeatState } #end } + + if(FlxG.keys.justPressed.TWO) { //Go 10 seconds into the future, credit: Shadow Mario#9396 + if (!usedTimeTravel && Conductor.songPosition + 10000 < FlxG.sound.music.length) + { + usedTimeTravel = true; + FlxG.sound.music.pause(); + vocals.pause(); + Conductor.songPosition += 10000; + notes.forEachAlive(function(daNote:Note) + { + if(daNote.strumTime - 500 < Conductor.songPosition) { + daNote.active = false; + daNote.visible = false; + + + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } + }); + for (i in 0...unspawnNotes.length) { + var daNote:Note = unspawnNotes[0]; + if(daNote.strumTime - 500 >= Conductor.songPosition) { + break; + } + unspawnNotes.splice(unspawnNotes.indexOf(daNote), 1); + } + + FlxG.sound.music.time = Conductor.songPosition; + FlxG.sound.music.play(); + + vocals.time = Conductor.songPosition; + vocals.play(); + new FlxTimer().start(0.5, function(tmr:FlxTimer) + { + usedTimeTravel = false; + }); + } + } #end if (startingSong) @@ -2565,34 +2607,39 @@ class PlayState extends MusicBeatState if (health <= 0) { - boyfriend.stunned = true; + if (!usedTimeTravel) + { + boyfriend.stunned = true; - persistentUpdate = false; - persistentDraw = false; - paused = true; + persistentUpdate = false; + persistentDraw = false; + paused = true; - vocals.stop(); - FlxG.sound.music.stop(); + vocals.stop(); + FlxG.sound.music.stop(); - openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); - #if windows - // Game Over doesn't get his own variable because it's only used here - DiscordClient.changePresence("GAME OVER -- " - + SONG.song - + " (" - + storyDifficultyText - + ") " - + Ratings.GenerateLetterRank(accuracy), - "\nAcc: " - + HelperFunctions.truncateFloat(accuracy, 2) - + "% | Score: " - + songScore - + " | Misses: " - + misses, iconRPC); - #end + #if windows + // Game Over doesn't get his own variable because it's only used here + DiscordClient.changePresence("GAME OVER -- " + + SONG.song + + " (" + + storyDifficultyText + + ") " + + Ratings.GenerateLetterRank(accuracy), + "\nAcc: " + + HelperFunctions.truncateFloat(accuracy, 2) + + "% | Score: " + + songScore + + " | Misses: " + + misses, iconRPC); + #end - // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + } + else + health = 0.01; } if (FlxG.save.data.resetButton) { @@ -3044,10 +3091,17 @@ class PlayState extends MusicBeatState FlxG.sound.music.stop(); vocals.stop(); if (FlxG.save.data.scoreScreen) + { openSubState(new ResultsScreen()); + new FlxTimer().start(1, function(tmr:FlxTimer) + { + inResults = true; + }); + } else { FlxG.sound.playMusic(Paths.music('freakyMenu')); + Conductor.changeBPM(102); FlxG.switchState(new StoryMenuState()); } @@ -3114,8 +3168,14 @@ class PlayState extends MusicBeatState FlxG.sound.music.stop(); vocals.stop(); - if (FlxG.save.data.scoreScreen) + if (FlxG.save.data.scoreScreen) + { openSubState(new ResultsScreen()); + new FlxTimer().start(1, function(tmr:FlxTimer) + { + inResults = true; + }); + } else FlxG.switchState(new FreeplayState()); } diff --git a/source/ResultsScreen.hx b/source/ResultsScreen.hx index 77d62f2..fe4fb92 100644 --- a/source/ResultsScreen.hx +++ b/source/ResultsScreen.hx @@ -54,10 +54,13 @@ class ResultsScreen extends FlxSubState background.scrollFactor.set(); add(background); - music = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true); - music.volume = 0; - music.play(false, FlxG.random.int(0, Std.int(music.length / 2))); - FlxG.sound.list.add(music); + if (!PlayState.inResults) + { + music = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true); + music.volume = 0; + music.play(false, FlxG.random.int(0, Std.int(music.length / 2))); + FlxG.sound.list.add(music); + } background.alpha = 0; @@ -168,8 +171,8 @@ class ResultsScreen extends FlxSubState override function update(elapsed:Float) { - if (music.volume < 0.5) - music.volume += 0.01 * elapsed; + if (music != null && music.volume < 0.5) + music.volume += 0.01 * elapsed; // keybinds @@ -194,6 +197,7 @@ class ResultsScreen extends FlxSubState if (PlayState.isStoryMode) { FlxG.sound.playMusic(Paths.music('freakyMenu')); + Conductor.changeBPM(102); FlxG.switchState(new MainMenuState()); } else @@ -265,7 +269,8 @@ class ResultsScreen extends FlxSubState var poop:String = Highscore.formatSong(songFormat, PlayState.storyDifficulty); - music.fadeOut(0.3); + if (music != null) + music.fadeOut(0.3); PlayState.SONG = Song.loadFromJson(poop, PlayState.SONG.song); PlayState.isStoryMode = false;