Path: blob/master/compressed/CompressedState.cpp
939 views
class state {1trace("Welcome to Bit Engine ALT");2trace("press enter",'enter');3ifkeypressed('enter');4fetch('menuALT.cpp');5class ALT {6trace('this is a ALT of the main menu,to return,press 7','7');7trace('you got here by pressing 9 on the main menu screen');8}9ifkeypressed('7');10fetch('mainmenu');11ifkeypressed('down');12fetch('freeplayALT.cpp');13class ALT {14trace('this is a ALT of the freeplay screen,to return,press 7','7');15trace('you got here by pressing 9 on the freeplay screen');16}17ifkeypressed('7');18fetch('freeplay');19ifkeypressed('down');20fetch('creditsALT.cpp');21class ALT {22trace('this is a ALT of the credits screen,to return,press 7','7');23trace('you got here by pressing 9 on the credits screen');24}25ifkeypressed('7');26fetch('credits');27class reset {28trace('outdated,go to echo engine to find new updates','enter','backspace')29}30ifkeypressed('enter');31fetch('https://github.com/LilDrippyMyFnf/Fnf-EchoEngine/releases/tag/0.1.0');32ifkeypressed('backspace');33fetch('storymodemenu');34package;3536#if desktop37import Discord.DiscordClient;38#end39import flash.text.TextField;40import flixel.FlxG;41import flixel.FlxSprite;42import flixel.addons.display.FlxGridOverlay;43import flixel.group.FlxGroup.FlxTypedGroup;44import flixel.math.FlxMath;45import flixel.text.FlxText;46import flixel.util.FlxColor;47import flixel.tweens.FlxTween;48import flixel.tweens.FlxEase;49#if MODS_ALLOWED50import sys.FileSystem;51import sys.io.File;52#end53import lime.utils.Assets;5455using StringTools;5657class CreditsState extends MusicBeatState58{59var curSelected:Int = -1;6061private var grpOptions:FlxTypedGroup<Alphabet>;62private var iconArray:Array<AttachedSprite> = [];63private var creditsStuff:Array<Array<String>> = [];6465var bg:FlxSprite;66var descText:FlxText;67var intendedColor:Int;68var colorTween:FlxTween;69var descBox:AttachedSprite;7071var offsetThing:Float = -75;7273override function create()74{75#if desktop76// Updating Discord Rich Presence77DiscordClient.changePresence("In the Menus", null);78#end7980persistentUpdate = true;81bg = new FlxSprite().loadGraphic(Paths.image('menuDesat'));82add(bg);83bg.screenCenter();8485grpOptions = new FlxTypedGroup<Alphabet>();86add(grpOptions);8788#if MODS_ALLOWED89var path:String = 'modsList.txt';90if(FileSystem.exists(path))91{92var leMods:Array<String> = CoolUtil.coolTextFile(path);93for (i in 0...leMods.length)94{95if(leMods.length > 1 && leMods[0].length > 0) {96var modSplit:Array<String> = leMods[i].split('|');97if(!Paths.ignoreModFolders.contains(modSplit[0].toLowerCase()) && !modsAdded.contains(modSplit[0]))98{99if(modSplit[1] == '1')100pushModCreditsToList(modSplit[0]);101else102modsAdded.push(modSplit[0]);103}104}105}106}107108var arrayOfFolders:Array<String> = Paths.getModDirectories();109arrayOfFolders.push('');110for (folder in arrayOfFolders)111{112pushModCreditsToList(folder);113}114#end115116var pisspoop:Array<Array<String>> = [ //Name - Icon name - Description - Link - BG Color117['Bit Engine Team'],118['MyFnf', 'my', 'Main Programmer of Bit Engine', 'https://twitter.com/goofyahhemoboi', '429E9D'],119['MasterOak', 'oak', 'Bug Handler', 'https://github.com/MasterOak', '3E813A'],120['Stefan[BETA]2008', '2008', 'Android porter', 'https://github.com/StefanBETA2008', 'B42F71'],121['MemeHoovy', 'meme', 'Compile helper', 'https://github.com/MemeHoovy', '5E99DF'],122['Engine Contributors'],123['ArtableBOX', 'box', 'lua programmer', 'https://github.com/ArtableBOX', 'FFFFFF'124['WarlyFarly_GitHub!', 'hub', 'a lil member', 'https://github.com/WarlyFarly_GitHub!', '3E813A'],125['MMbay64', '64', 'headache', 'https://github.com/MMbay64', 'FFFFFF'],126[''],127['Engine Contributors'],128['iFlicky', 'flicky', 'Composer of Psync and Tea Time\nMade the Dialogue Sounds', 'https://twitter.com/flicky_i', '9E29CF'],129['SqirraRNG', 'sqirra', 'Crash Handler and Base code for\nChart Editor\'s Waveform', 'https://twitter.com/gedehari', 'E1843A'],130['PolybiusProxy', 'proxy', '.MP4 Video Loader Library (hxCodec)', 'https://twitter.com/polybiusproxy', 'DCD294'],131['KadeDev', 'kade', 'Fixed some cool stuff on Chart Editor\nand other PRs', 'https://twitter.com/kade0912', '64A250'],132['Keoiki', 'keoiki', 'Note Splash Animations', 'https://twitter.com/Keoiki_', 'D2D2D2'],133['Nebula the Zorua', 'nebula', 'LUA JIT Fork and some Lua reworks', 'https://twitter.com/Nebula_Zorua', '7D40B2'],134['Smokey', 'smokey', 'Sprite Atlas Support', 'https://twitter.com/Smokey_5_', '483D92'],135[''],136["Funkin' Crew"],137['ninjamuffin99', 'ninjamuffin99', "Programmer of Friday Night Funkin'", 'https://twitter.com/ninja_muffin99', 'CF2D2D'],138['PhantomArcade', 'phantomarcade', "Animator of Friday Night Funkin'", 'https://twitter.com/PhantomArcade3K', 'FADC45'],139['evilsk8r', 'evilsk8r', "Artist of Friday Night Funkin'", 'https://twitter.com/evilsk8r', '5ABD4B'],140['kawaisprite', 'kawaisprite', "Composer of Friday Night Funkin'", 'https://twitter.com/kawaisprite', '378FC7'],141];142143for(i in pisspoop){144creditsStuff.push(i);145}146147for (i in 0...creditsStuff.length)148{149var isSelectable:Bool = !unselectableCheck(i);150var optionText:Alphabet = new Alphabet(0, 70 * i, creditsStuff[i][0], !isSelectable, false);151optionText.isMenuItem = true;152optionText.screenCenter(X);153optionText.yAdd -= 70;154if(isSelectable) {155optionText.x -= 70;156}157optionText.forceX = optionText.x;158//optionText.yMult = 90;159optionText.targetY = i;160grpOptions.add(optionText);161162if(isSelectable) {163if(creditsStuff[i][5] != null)164{165Paths.currentModDirectory = creditsStuff[i][5];166}167168var icon:AttachedSprite = new AttachedSprite('credits/' + creditsStuff[i][1]);169icon.xAdd = optionText.width + 10;170icon.sprTracker = optionText;171172// using a FlxGroup is too much fuss!173iconArray.push(icon);174add(icon);175Paths.currentModDirectory = '';176177if(curSelected == -1) curSelected = i;178}179}180181descBox = new AttachedSprite();182descBox.makeGraphic(1, 1, FlxColor.BLACK);183descBox.xAdd = -10;184descBox.yAdd = -10;185descBox.alphaMult = 0.6;186descBox.alpha = 0.6;187add(descBox);188189descText = new FlxText(50, FlxG.height + offsetThing - 25, 1180, "", 32);190descText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER/*, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK*/);191descText.scrollFactor.set();192//descText.borderSize = 2.4;193descBox.sprTracker = descText;194add(descText);195196bg.color = getCurrentBGColor();197intendedColor = bg.color;198changeSelection();199super.create();200}201202var quitting:Bool = false;203var holdTime:Float = 0;204override function update(elapsed:Float)205{206if (FlxG.sound.music.volume < 0.7)207{208FlxG.sound.music.volume += 0.5 * FlxG.elapsed;209}210211if(!quitting)212{213if(creditsStuff.length > 1)214{215var shiftMult:Int = 1;216if(FlxG.keys.pressed.SHIFT) shiftMult = 3;217218var upP = controls.UI_UP_P;219var downP = controls.UI_DOWN_P;220221if (upP)222{223changeSelection(-1 * shiftMult);224holdTime = 0;225}226if (downP)227{228changeSelection(1 * shiftMult);229holdTime = 0;230}231232if(controls.UI_DOWN || controls.UI_UP)233{234var checkLastHold:Int = Math.floor((holdTime - 0.5) * 10);235holdTime += elapsed;236var checkNewHold:Int = Math.floor((holdTime - 0.5) * 10);237238if(holdTime > 0.5 && checkNewHold - checkLastHold > 0)239{240changeSelection((checkNewHold - checkLastHold) * (controls.UI_UP ? -shiftMult : shiftMult));241}242}243}244245if(controls.ACCEPT && (creditsStuff[curSelected][3] == null || creditsStuff[curSelected][3].length > 4)) {246CoolUtil.browserLoad(creditsStuff[curSelected][3]);247}248if (controls.BACK)249{250if(colorTween != null) {251colorTween.cancel();252}253FlxG.sound.play(Paths.sound('cancelMenu'));254MusicBeatState.switchState(new MainMenuState());255quitting = true;256}257}258259for (item in grpOptions.members)260{261if(!item.isBold)262{263var lerpVal:Float = CoolUtil.boundTo(elapsed * 12, 0, 1);264if(item.targetY == 0)265{266var lastX:Float = item.x;267item.screenCenter(X);268item.x = FlxMath.lerp(lastX, item.x - 70, lerpVal);269item.forceX = item.x;270}271else272{273item.x = FlxMath.lerp(item.x, 200 + -40 * Math.abs(item.targetY), lerpVal);274item.forceX = item.x;275}276}277}278super.update(elapsed);279}280281var moveTween:FlxTween = null;282function changeSelection(change:Int = 0)283{284FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);285do {286curSelected += change;287if (curSelected < 0)288curSelected = creditsStuff.length - 1;289if (curSelected >= creditsStuff.length)290curSelected = 0;291} while(unselectableCheck(curSelected));292293var newColor:Int = getCurrentBGColor();294if(newColor != intendedColor) {295if(colorTween != null) {296colorTween.cancel();297}298intendedColor = newColor;299colorTween = FlxTween.color(bg, 1, bg.color, intendedColor, {300onComplete: function(twn:FlxTween) {301colorTween = null;302}303});304}305306var bullShit:Int = 0;307308for (item in grpOptions.members)309{310item.targetY = bullShit - curSelected;311bullShit++;312313if(!unselectableCheck(bullShit-1)) {314item.alpha = 0.6;315if (item.targetY == 0) {316item.alpha = 1;317}318}319}320321descText.text = creditsStuff[curSelected][2];322descText.y = FlxG.height - descText.height + offsetThing - 60;323324if(moveTween != null) moveTween.cancel();325moveTween = FlxTween.tween(descText, {y : descText.y + 75}, 0.25, {ease: FlxEase.sineOut});326327descBox.setGraphicSize(Std.int(descText.width + 20), Std.int(descText.height + 25));328descBox.updateHitbox();329}330331#if MODS_ALLOWED332private var modsAdded:Array<String> = [];333function pushModCreditsToList(folder:String)334{335if(modsAdded.contains(folder)) return;336337var creditsFile:String = null;338if(folder != null && folder.trim().length > 0) creditsFile = Paths.mods(folder + '/data/credits.txt');339else creditsFile = Paths.mods('data/credits.txt');340341if (FileSystem.exists(creditsFile))342{343var firstarray:Array<String> = File.getContent(creditsFile).split('\n');344for(i in firstarray)345{346var arr:Array<String> = i.replace('\\n', '\n').split("::");347if(arr.length >= 5) arr.push(folder);348creditsStuff.push(arr);349}350creditsStuff.push(['']);351}352modsAdded.push(folder);353}354#end355356function getCurrentBGColor() {357var bgColor:String = creditsStuff[curSelected][4];358if(!bgColor.startsWith('0x')) {359bgColor = '0xFF' + bgColor;360}361return Std.parseInt(bgColor);362}363364private function unselectableCheck(num:Int):Bool {365return creditsStuff[num].length <= 1;366}367}368369//had to fix something shit-like370package;371372#if desktop373import Discord.DiscordClient;374#end375import flash.text.TextField;376import flixel.FlxG;377import flixel.FlxSprite;378import flixel.addons.display.FlxGridOverlay;379import flixel.group.FlxGroup.FlxTypedGroup;380import flixel.math.FlxMath;381import flixel.text.FlxText;382import flixel.util.FlxColor;383import lime.utils.Assets;384385using StringTools;386387class FreeplayState extends MusicBeatState388{389var songs:Array<SongMetadata> = [];390391var selector:FlxText;392var curSelected:Int = 0;393var curDifficulty:Int = 1;394395var scoreText:FlxText;396var diffText:FlxText;397var lerpScore:Int = 0;398var intendedScore:Int = 0;399400private var grpSongs:FlxTypedGroup<Alphabet>;401private var curPlaying:Bool = false;402403private var iconArray:Array<HealthIcon> = [];404405override function create()406{407var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist'));408409for (i in 0...initSonglist.length)410{411songs.push(new SongMetadata(initSonglist[i], 1, 'gf'));412}413414/*415if (FlxG.sound.music != null)416{417if (!FlxG.sound.music.playing)418FlxG.sound.playMusic(Paths.music('freakyMenu'));419}420*/421422#if desktop423// Updating Discord Rich Presence424DiscordClient.changePresence("In the Menus", null);425#end426427var isDebug:Bool = false;428429#if debug430isDebug = true;431#end432433if (StoryMenuState.weekUnlocked[2] || isDebug)434addWeek(['StuckBeenDust'], 1, ['bf']);435436if (StoryMenuState.weekUnlocked[2] || isDebug)437addWeek(['Spookeez', 'South', 'Monster'], 2, ['spooky']);438439if (StoryMenuState.weekUnlocked[3] || isDebug)440addWeek(['Pico', 'Philly', 'Blammed'], 3, ['pico']);441442if (StoryMenuState.weekUnlocked[4] || isDebug)443addWeek(['Satin-Panties', 'High', 'Milf'], 4, ['mom']);444445if (StoryMenuState.weekUnlocked[5] || isDebug)446addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5, ['parents-christmas', 'parents-christmas', 'monster-christmas']);447448if (StoryMenuState.weekUnlocked[6] || isDebug)449addWeek(['Senpai', 'Roses', 'Thorns'], 6, ['senpai', 'senpai', 'spirit']);450451// LOAD MUSIC452453// LOAD CHARACTERS454455var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuBGBlue'));456add(bg);457458grpSongs = new FlxTypedGroup<Alphabet>();459add(grpSongs);460461for (i in 0...songs.length)462{463var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i].songName, true, false);464songText.isMenuItem = true;465songText.targetY = i;466grpSongs.add(songText);467468var icon:HealthIcon = new HealthIcon(songs[i].songCharacter);469icon.sprTracker = songText;470471// using a FlxGroup is too much fuss!472iconArray.push(icon);473add(icon);474475// songText.x += 40;476// DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !!477// songText.screenCenter(X);478}479480scoreText = new FlxText(FlxG.width * 0.7, 5, 0, "", 32);481// scoreText.autoSize = false;482scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);483// scoreText.alignment = RIGHT;484485var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 66, 0xFF000000);486scoreBG.alpha = 0.6;487add(scoreBG);488489diffText = new FlxText(scoreText.x, scoreText.y + 36, 0, "", 24);490diffText.font = scoreText.font;491add(diffText);492493add(scoreText);494495changeSelection();496changeDiff();497498// FlxG.sound.playMusic(Paths.music('title'), 0);499// FlxG.sound.music.fadeIn(2, 0, 0.8);500selector = new FlxText();501502selector.size = 40;503selector.text = ">";504// add(selector);505506var swag:Alphabet = new Alphabet(1, 0, "swag");507508// JUST DOIN THIS SHIT FOR TESTING!!!509/*510var md:String = Markdown.markdownToHtml(Assets.getText('CHANGELOG.md'));511512var texFel:TextField = new TextField();513texFel.width = FlxG.width;514texFel.height = FlxG.height;515// texFel.516texFel.htmlText = md;517518FlxG.stage.addChild(texFel);519520// scoreText.textField.htmlText = md;521522trace(md);523*/524525super.create();526}527528public function addSong(songName:String, weekNum:Int, songCharacter:String)529{530songs.push(new SongMetadata(songName, weekNum, songCharacter));531}532533public function addWeek(songs:Array<String>, weekNum:Int, ?songCharacters:Array<String>)534{535if (songCharacters == null)536songCharacters = ['bf'];537538var num:Int = 0;539for (song in songs)540{541addSong(song, weekNum, songCharacters[num]);542543if (songCharacters.length != 1)544num++;545}546}547548override function update(elapsed:Float)549{550super.update(elapsed);551552if (FlxG.sound.music.volume < 0.7)553{554FlxG.sound.music.volume += 0.5 * FlxG.elapsed;555}556557lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, 0.4));558559if (Math.abs(lerpScore - intendedScore) <= 10)560lerpScore = intendedScore;561562scoreText.text = "PERSONAL BEST:" + lerpScore;563564var upP = controls.UP_P;565var downP = controls.DOWN_P;566var accepted = controls.ACCEPT;567568if (upP)569{570changeSelection(-1);571}572if (downP)573{574changeSelection(1);575}576577if (controls.LEFT_P)578changeDiff(-1);579if (controls.RIGHT_P)580changeDiff(1);581582if (controls.BACK)583{584FlxG.switchState(new MainMenuState());585}586587if (accepted)588{589var poop:String = Highscore.formatSong(songs[curSelected].songName.toLowerCase(), curDifficulty);590591trace(poop);592593PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName.toLowerCase());594PlayState.isStoryMode = false;595PlayState.storyDifficulty = curDifficulty;596597PlayState.storyWeek = songs[curSelected].week;598trace('CUR WEEK' + PlayState.storyWeek);599LoadingState.loadAndSwitchState(new PlayState());600}601}602603function changeDiff(change:Int = 0)604{605curDifficulty += change;606607if (curDifficulty < 0)608curDifficulty = 2;609if (curDifficulty > 2)610curDifficulty = 0;611612intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty);613614switch (curDifficulty)615{616case 0:617diffText.text = "EASY";618case 1:619diffText.text = 'NORMAL';620case 2:621diffText.text = "HARD";622case 3:623difftext.text = "ENCORE";624}625}626627function changeSelection(change:Int = 0)628{629FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);630631curSelected += change;632633if (curSelected < 0)634curSelected = songs.length - 1;635if (curSelected >= songs.length)636curSelected = 0;637638// selector.y = (70 * curSelected) + 30;639640intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty);641642#if PRELOAD_ALL643FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);644#end645646var bullShit:Int = 0;647648for (i in 0...iconArray.length)649{650iconArray[i].alpha = 0.6;651}652653iconArray[curSelected].alpha = 1;654655for (item in grpSongs.members)656{657item.targetY = bullShit - curSelected;658bullShit++;659660item.alpha = 0.6;661// item.setGraphicSize(Std.int(item.width * 0.8));662663if (item.targetY == 0)664{665item.alpha = 1;666// item.setGraphicSize(Std.int(item.width));667}668}669}670}671672class SongMetadata673{674public var songName:String = "";675public var week:Int = 0;676public var songCharacter:String = "";677678public function new(song:String, week:Int, songCharacter:String)679{680this.songName = song;681this.week = week;682this.songCharacter = songCharacter;683}684}685package;686687#if desktop688import Discord.DiscordClient;689#end690import flixel.FlxG;691import flixel.FlxSprite;692import flixel.addons.transition.FlxTransitionableState;693import flixel.graphics.frames.FlxAtlasFrames;694import flixel.group.FlxGroup.FlxTypedGroup;695import flixel.group.FlxGroup;696import flixel.math.FlxMath;697import flixel.text.FlxText;698import flixel.tweens.FlxTween;699import flixel.util.FlxColor;700import flixel.util.FlxTimer;701import lime.net.curl.CURLCode;702703using StringTools;704705class StoryMenuState extends MusicBeatState706{707var scoreText:FlxText;708709var weekData:Array<Dynamic> = [710['Tutorial'],711['Bopeebo', 'Fresh', 'Dadbattle'],712['Spookeez', 'South', "Monster"],713['Pico', 'Philly', "Blammed"],714['Satin-Panties', "High", "Milf"],715['Cocoa', 'Eggnog', 'Winter-Horrorland'],716['Senpai', 'Roses', 'Thorns']717];718var curDifficulty:Int = 1;719720public static var weekUnlocked:Array<Bool> = [true, true, true, true, true, true, true];721722var weekCharacters:Array<Dynamic> = [723['dad', 'bf', 'gf'],724['dad', 'bf', 'gf'],725['spooky', 'bf', 'gf'],726['pico', 'bf', 'gf'],727['mom', 'bf', 'gf'],728['parents-christmas', 'bf', 'gf'],729['senpai', 'bf', 'gf']730];731732var weekNames:Array<String> = [733"",734"Daddy Dearest",735"Spooky Month",736"PICO",737"MOMMY MUST MURDER",738"RED SNOW",739"hating simulator ft. moawling"740];741742var txtWeekTitle:FlxText;743744var curWeek:Int = 0;745746var txtTracklist:FlxText;747748var grpWeekText:FlxTypedGroup<MenuItem>;749var grpWeekCharacters:FlxTypedGroup<MenuCharacter>;750751var grpLocks:FlxTypedGroup<FlxSprite>;752753var difficultySelectors:FlxGroup;754var sprDifficulty:FlxSprite;755var leftArrow:FlxSprite;756var rightArrow:FlxSprite;757758override function create()759{760transIn = FlxTransitionableState.defaultTransIn;761transOut = FlxTransitionableState.defaultTransOut;762763if (FlxG.sound.music != null)764{765if (!FlxG.sound.music.playing)766FlxG.sound.playMusic(Paths.music('freakyMenu'));767}768769persistentUpdate = persistentDraw = true;770771scoreText = new FlxText(10, 10, 0, "SCORE: 49324858", 36);772scoreText.setFormat("VCR OSD Mono", 32);773774txtWeekTitle = new FlxText(FlxG.width * 0.7, 10, 0, "", 32);775txtWeekTitle.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, RIGHT);776txtWeekTitle.alpha = 0.7;777778var rankText:FlxText = new FlxText(0, 10);779rankText.text = 'RANK: GREAT';780rankText.setFormat(Paths.font("vcr.ttf"), 32);781rankText.size = scoreText.size;782rankText.screenCenter(X);783784var ui_tex = Paths.getSparrowAtlas('campaign_menu_UI_assets');785var yellowBG:FlxSprite = new FlxSprite(0, 56).makeGraphic(FlxG.width, 400, 0xFFF9CF51);786787grpWeekText = new FlxTypedGroup<MenuItem>();788add(grpWeekText);789790var blackBarThingie:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 56, FlxColor.BLACK);791add(blackBarThingie);792793grpWeekCharacters = new FlxTypedGroup<MenuCharacter>();794795grpLocks = new FlxTypedGroup<FlxSprite>();796add(grpLocks);797798trace("Line 70");799800#if desktop801// Updating Discord Rich Presence802DiscordClient.changePresence("In the Menus", null);803#end804805for (i in 0...weekData.length)806{807var weekThing:MenuItem = new MenuItem(0, yellowBG.y + yellowBG.height + 10, i);808weekThing.y += ((weekThing.height + 20) * i);809weekThing.targetY = i;810grpWeekText.add(weekThing);811812weekThing.screenCenter(X);813weekThing.antialiasing = true;814// weekThing.updateHitbox();815816// Needs an offset thingie817if (!weekUnlocked[i])818{819var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x);820lock.frames = ui_tex;821lock.animation.addByPrefix('lock', 'lock');822lock.animation.play('lock');823lock.ID = i;824lock.antialiasing = true;825grpLocks.add(lock);826}827}828829trace("Line 96");830831for (char in 0...3)832{833var weekCharacterThing:MenuCharacter = new MenuCharacter((FlxG.width * 0.25) * (1 + char) - 150, weekCharacters[curWeek][char]);834weekCharacterThing.y += 70;835weekCharacterThing.antialiasing = true;836switch (weekCharacterThing.character)837{838case 'dad':839weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));840weekCharacterThing.updateHitbox();841842case 'bf':843weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.9));844weekCharacterThing.updateHitbox();845weekCharacterThing.x -= 80;846case 'gf':847weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));848weekCharacterThing.updateHitbox();849case 'pico':850weekCharacterThing.flipX = true;851case 'parents-christmas':852weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.9));853weekCharacterThing.updateHitbox();854}855856grpWeekCharacters.add(weekCharacterThing);857}858859difficultySelectors = new FlxGroup();860add(difficultySelectors);861862trace("Line 124");863864leftArrow = new FlxSprite(grpWeekText.members[0].x + grpWeekText.members[0].width + 10, grpWeekText.members[0].y + 10);865leftArrow.frames = ui_tex;866leftArrow.animation.addByPrefix('idle', "arrow left");867leftArrow.animation.addByPrefix('press', "arrow push left");868leftArrow.animation.play('idle');869difficultySelectors.add(leftArrow);870871sprDifficulty = new FlxSprite(leftArrow.x + 130, leftArrow.y);872sprDifficulty.frames = ui_tex;873sprDifficulty.animation.addByPrefix('easy', 'EASY');874sprDifficulty.animation.addByPrefix('normal', 'NORMAL');875sprDifficulty.animation.addByPrefix('hard', 'HARD');876sprDifficulty.animation.play('easy');877changeDifficulty();878879difficultySelectors.add(sprDifficulty);880881rightArrow = new FlxSprite(sprDifficulty.x + sprDifficulty.width + 50, leftArrow.y);882rightArrow.frames = ui_tex;883rightArrow.animation.addByPrefix('idle', 'arrow right');884rightArrow.animation.addByPrefix('press', "arrow push right", 24, false);885rightArrow.animation.play('idle');886difficultySelectors.add(rightArrow);887888trace("Line 150");889890add(yellowBG);891add(grpWeekCharacters);892893txtTracklist = new FlxText(FlxG.width * 0.05, yellowBG.x + yellowBG.height + 100, 0, "Tracks", 32);894txtTracklist.alignment = CENTER;895txtTracklist.font = rankText.font;896txtTracklist.color = 0xFFe55777;897add(txtTracklist);898// add(rankText);899add(scoreText);900add(txtWeekTitle);901902updateText();903904trace("Line 165");905906super.create();907}908909override function update(elapsed:Float)910{911// scoreText.setFormat('VCR OSD Mono', 32);912lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, 0.5));913914scoreText.text = "WEEK SCORE:" + lerpScore;915916txtWeekTitle.text = weekNames[curWeek].toUpperCase();917txtWeekTitle.x = FlxG.width - (txtWeekTitle.width + 10);918919// FlxG.watch.addQuick('font', scoreText.font);920921difficultySelectors.visible = weekUnlocked[curWeek];922923grpLocks.forEach(function(lock:FlxSprite)924{925lock.y = grpWeekText.members[lock.ID].y;926});927928if (!movedBack)929{930if (!selectedWeek)931{932if (controls.UP_P)933{934changeWeek(-1);935}936937if (controls.DOWN_P)938{939changeWeek(1);940}941942if (controls.RIGHT)943rightArrow.animation.play('press')944else945rightArrow.animation.play('idle');946947if (controls.LEFT)948leftArrow.animation.play('press');949else950leftArrow.animation.play('idle');951952if (controls.RIGHT_P)953changeDifficulty(1);954if (controls.LEFT_P)955changeDifficulty(-1);956}957958if (controls.ACCEPT)959{960selectWeek();961}962}963964if (controls.BACK && !movedBack && !selectedWeek)965{966FlxG.sound.play(Paths.sound('cancelMenu'));967movedBack = true;968FlxG.switchState(new MainMenuState());969}970971super.update(elapsed);972}973974var movedBack:Bool = false;975var selectedWeek:Bool = false;976var stopspamming:Bool = false;977978function selectWeek()979{980if (weekUnlocked[curWeek])981{982if (stopspamming == false)983{984FlxG.sound.play(Paths.sound('confirmMenu'));985986grpWeekText.members[curWeek].startFlashing();987grpWeekCharacters.members[1].animation.play('bfConfirm');988stopspamming = true;989}990991PlayState.storyPlaylist = weekData[curWeek];992PlayState.isStoryMode = true;993selectedWeek = true;994995var diffic = "";996997switch (curDifficulty)998{999case 0:1000diffic = '-easy';1001case 2:1002diffic = '-hard';1003}10041005PlayState.storyDifficulty = curDifficulty;10061007PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + diffic, PlayState.storyPlaylist[0].toLowerCase());1008PlayState.storyWeek = curWeek;1009PlayState.campaignScore = 0;1010new FlxTimer().start(1, function(tmr:FlxTimer)1011{1012LoadingState.loadAndSwitchState(new PlayState(), true);1013});1014}1015}10161017function changeDifficulty(change:Int = 0):Void1018{1019curDifficulty += change;10201021if (curDifficulty < 0)1022curDifficulty = 2;1023if (curDifficulty > 2)1024curDifficulty = 0;10251026sprDifficulty.offset.x = 0;10271028switch (curDifficulty)1029{1030case 0:1031sprDifficulty.animation.play('easy');1032sprDifficulty.offset.x = 20;1033case 1:1034sprDifficulty.animation.play('normal');1035sprDifficulty.offset.x = 70;1036case 2:1037sprDifficulty.animation.play('hard');1038sprDifficulty.offset.x = 20;1039}10401041sprDifficulty.alpha = 0;10421043// USING THESE WEIRD VALUES SO THAT IT DOESNT FLOAT UP1044sprDifficulty.y = leftArrow.y - 15;1045intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);10461047#if !switch1048intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);1049#end10501051FlxTween.tween(sprDifficulty, {y: leftArrow.y + 15, alpha: 1}, 0.07);1052}10531054var lerpScore:Int = 0;1055var intendedScore:Int = 0;10561057function changeWeek(change:Int = 0):Void1058{1059curWeek += change;10601061if (curWeek >= weekData.length)1062curWeek = 0;1063if (curWeek < 0)1064curWeek = weekData.length - 1;10651066var bullShit:Int = 0;10671068for (item in grpWeekText.members)1069{1070item.targetY = bullShit - curWeek;1071if (item.targetY == Std.int(0) && weekUnlocked[curWeek])1072item.alpha = 1;1073else1074item.alpha = 0.6;1075bullShit++;1076}10771078FlxG.sound.play(Paths.sound('scrollMenu'));10791080updateText();1081}10821083function updateText()1084{1085grpWeekCharacters.members[0].animation.play(weekCharacters[curWeek][0]);1086grpWeekCharacters.members[1].animation.play(weekCharacters[curWeek][1]);1087grpWeekCharacters.members[2].animation.play(weekCharacters[curWeek][2]);1088txtTracklist.text = "Tracks\n";10891090switch (grpWeekCharacters.members[0].animation.curAnim.name)1091{1092case 'parents-christmas':1093grpWeekCharacters.members[0].offset.set(200, 200);1094grpWeekCharacters.members[0].setGraphicSize(Std.int(grpWeekCharacters.members[0].width * 0.99));10951096case 'senpai':1097grpWeekCharacters.members[0].offset.set(130, 0);1098grpWeekCharacters.members[0].setGraphicSize(Std.int(grpWeekCharacters.members[0].width * 1.4));10991100case 'mom':1101grpWeekCharacters.members[0].offset.set(100, 200);1102grpWeekCharacters.members[0].setGraphicSize(Std.int(grpWeekCharacters.members[0].width * 1));11031104case 'dad':1105grpWeekCharacters.members[0].offset.set(120, 200);1106grpWeekCharacters.members[0].setGraphicSize(Std.int(grpWeekCharacters.members[0].width * 1));11071108default:1109grpWeekCharacters.members[0].offset.set(100, 100);1110grpWeekCharacters.members[0].setGraphicSize(Std.int(grpWeekCharacters.members[0].width * 1));1111// grpWeekCharacters.members[0].updateHitbox();1112}11131114var stringThing:Array<String> = weekData[curWeek];11151116for (i in stringThing)1117{1118txtTracklist.text += "\n" + i;1119}11201121txtTracklist.text = txtTracklist.text.toUpperCase();11221123txtTracklist.screenCenter(X);1124txtTracklist.x -= FlxG.width * 0.35;11251126#if !switch1127intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);1128#end1129}1130}1131package;11321133#if desktop1134import Discord.DiscordClient;1135#end1136import Section.SwagSection;1137import Song.SwagSong;1138import WiggleEffect.WiggleEffectType;1139import flixel.FlxBasic;1140import flixel.FlxCamera;1141import flixel.FlxG;1142import flixel.FlxGame;1143import flixel.FlxObject;1144import flixel.FlxSprite;1145import flixel.FlxState;1146import flixel.FlxSubState;1147import flixel.addons.display.FlxGridOverlay;1148import flixel.addons.effects.FlxTrail;1149import flixel.addons.effects.FlxTrailArea;1150import flixel.addons.effects.chainable.FlxEffectSprite;1151import flixel.addons.effects.chainable.FlxWaveEffect;1152import flixel.addons.transition.FlxTransitionableState;1153import flixel.graphics.atlas.FlxAtlas;1154import flixel.graphics.frames.FlxAtlasFrames;1155import flixel.group.FlxGroup.FlxTypedGroup;1156import flixel.math.FlxMath;1157import flixel.math.FlxPoint;1158import flixel.math.FlxRect;1159import flixel.system.FlxSound;1160import flixel.text.FlxText;1161import flixel.tweens.FlxEase;1162import flixel.tweens.FlxTween;1163import flixel.ui.FlxBar;1164import flixel.util.FlxCollision;1165import flixel.util.FlxColor;1166import flixel.util.FlxSort;1167import flixel.util.FlxStringUtil;1168import flixel.util.FlxTimer;1169import haxe.Json;1170import lime.utils.Assets;1171import openfl.display.BlendMode;1172import openfl.display.StageQuality;1173import openfl.filters.ShaderFilter;11741175using StringTools;11761177class PlayState extends MusicBeatState {1178public static var curStage:String = '';1179public static var SONG:SwagSong;1180public static var isStoryMode:Bool = false;1181public static var storyWeek:Int = 0;1182public static var storyPlaylist:Array<String> = [];1183public static var storyDifficulty:Int = 1;11841185var halloweenLevel:Bool = false;11861187private var vocals:FlxSound;11881189private var dad:Character;1190private var gf:Character;1191private var boyfriend:Boyfriend;11921193private var notes:FlxTypedGroup<Note>;1194private var unspawnNotes:Array<Note> = [];11951196private var strumLine:FlxSprite;1197private var curSection:Int = 0;11981199private var camFollow:FlxObject;12001201private static var prevCamFollow:FlxObject;12021203private var strumLineNotes:FlxTypedGroup<FlxSprite>;1204private var playerStrums:FlxTypedGroup<FlxSprite>;12051206private var camZooming:Bool = false;1207private var curSong:String = "";12081209private var gfSpeed:Int = 1;1210private var health:Float = 1;1211private var combo:Int = 0;12121213private var healthBarBG:FlxSprite;1214private var healthBar:FlxBar;12151216private var generatedMusic:Bool = false;1217private var startingSong:Bool = false;12181219private var iconP1:HealthIcon;1220private var iconP2:HealthIcon;1221private var camHUD:FlxCamera;1222private var camGame:FlxCamera;12231224var dialogue:Array<String> = ['strange code', '>:]'];12251226var halloweenBG:FlxSprite;1227var isHalloween:Bool = false;12281229var phillyCityLights:FlxTypedGroup<FlxSprite>;1230var phillyTrain:FlxSprite;1231var trainSound:FlxSound;12321233var limo:FlxSprite;1234var grpLimoDancers:FlxTypedGroup<BackgroundDancer>;1235var fastCar:FlxSprite;12361237var upperBoppers:FlxSprite;1238var bottomBoppers:FlxSprite;1239var santa:FlxSprite;12401241var bgGirls:BackgroundGirls;1242var wiggleShit:WiggleEffect = new WiggleEffect();12431244var talking:Bool = true;1245var songScore:Int = 0;1246var scoreTxt:FlxText;12471248public static var campaignScore:Int = 0;12491250var defaultCamZoom:Float = 1.05;12511252public var stepsFuncs:Array<HardcodedEvents> = [];12531254// how big to stretch the pixel art assets1255public static var daPixelZoom:Float = 6;12561257var inCutscene:Bool = false;12581259#if desktop1260// Discord RPC variables1261var storyDifficultyText:String = "";1262var iconRPC:String = "";1263var songLength:Float = 0;1264var detailsText:String = "";1265var detailsPausedText:String = "";1266#end12671268function pushStepEvent(callback:Void->Void, step:Int){1269stepsFuncs.push(new HardcodedEvents(callback, step));1270}12711272public var camBeat:Int = 4;1273/*1274pushStepEvent(function(), yourstephere{1275camBeat = 1;1276});1277*/12781279override public function create() {1280if (FlxG.sound.music != null)1281FlxG.sound.music.stop();12821283// var gameCam:FlxCamera = FlxG.camera;1284camGame = new FlxCamera();1285camHUD = new FlxCamera();1286camHUD.bgColor.alpha = 0;12871288FlxG.cameras.reset(camGame);1289FlxG.cameras.add(camHUD);12901291FlxCamera.defaultCameras = [camGame];12921293persistentUpdate = true;1294persistentDraw = true;12951296if (SONG == null)1297SONG = Song.loadFromJson('tutorial');12981299Conductor.mapBPMChanges(SONG);1300Conductor.changeBPM(SONG.bpm);13011302switch (SONG.song.toLowerCase()) {1303case 'senpai':1304dialogue = CoolUtil.coolTextFile(Paths.txt('senpai/senpaiDialogue'));1305case 'roses':1306dialogue = CoolUtil.coolTextFile(Paths.txt('roses/rosesDialogue'));1307case 'thorns':1308dialogue = CoolUtil.coolTextFile(Paths.txt('thorns/thornsDialogue'));1309}13101311#if desktop1312// Making difficulty text for Discord Rich Presence.1313switch (storyDifficulty) {1314case 0:1315storyDifficultyText = "Easy";1316case 1:1317storyDifficultyText = "Normal";1318case 2:1319storyDifficultyText = "Hard";1320}13211322iconRPC = SONG.player2;13231324// To avoid having duplicate images in Discord assets1325switch (iconRPC) {1326case 'senpai-angry':1327iconRPC = 'senpai';1328case 'monster-christmas':1329iconRPC = 'monster';1330case 'mom-car':1331iconRPC = 'mom';1332}13331334// String that contains the mode defined here so it isn't necessary to call changePresence for each mode1335if (isStoryMode) {1336detailsText = "Story Mode: Week " + storyWeek;1337} else {1338detailsText = "Freeplay";1339}13401341// String for when the game is paused1342detailsPausedText = "Paused - " + detailsText;13431344// Updating Discord Rich Presence.1345DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);1346#end13471348switch (SONG.song.toLowerCase()) {1349case 'spookeez' | 'monster' | 'south':1350{1351curStage = 'spooky';1352halloweenLevel = true;13531354var hallowTex = Paths.getSparrowAtlas('halloween_bg');13551356halloweenBG = new FlxSprite(-200, -100);1357halloweenBG.frames = hallowTex;1358halloweenBG.animation.addByPrefix('idle', 'halloweem bg0');1359halloweenBG.animation.addByPrefix('lightning', 'halloweem bg lightning strike', 24, false);1360halloweenBG.animation.play('idle');1361halloweenBG.antialiasing = true;1362add(halloweenBG);13631364isHalloween = true;1365}1366case 'pico' | 'blammed' | 'philly':1367{1368curStage = 'philly';13691370var bg:FlxSprite = new FlxSprite(-100).loadGraphic(Paths.image('philly/sky'));1371bg.scrollFactor.set(0.1, 0.1);1372add(bg);13731374var city:FlxSprite = new FlxSprite(-10).loadGraphic(Paths.image('philly/city'));1375city.scrollFactor.set(0.3, 0.3);1376city.setGraphicSize(Std.int(city.width * 0.85));1377city.updateHitbox();1378add(city);13791380phillyCityLights = new FlxTypedGroup<FlxSprite>();1381add(phillyCityLights);13821383for (i in 0...5) {1384var light:FlxSprite = new FlxSprite(city.x).loadGraphic(Paths.image('philly/win' + i));1385light.scrollFactor.set(0.3, 0.3);1386light.visible = false;1387light.setGraphicSize(Std.int(light.width * 0.85));1388light.updateHitbox();1389light.antialiasing = true;1390phillyCityLights.add(light);1391}13921393var streetBehind:FlxSprite = new FlxSprite(-40, 50).loadGraphic(Paths.image('philly/behindTrain'));1394add(streetBehind);13951396phillyTrain = new FlxSprite(2000, 360).loadGraphic(Paths.image('philly/train'));1397add(phillyTrain);13981399trainSound = new FlxSound().loadEmbedded(Paths.sound('train_passes'));1400FlxG.sound.list.add(trainSound);14011402// var cityLights:FlxSprite = new FlxSprite().loadGraphic(AssetPaths.win0.png);14031404var street:FlxSprite = new FlxSprite(-40, streetBehind.y).loadGraphic(Paths.image('philly/street'));1405add(street);1406}1407case 'milf' | 'satin-panties' | 'high':1408{1409curStage = 'limo';1410defaultCamZoom = 0.90;14111412var skyBG:FlxSprite = new FlxSprite(-120, -50).loadGraphic(Paths.image('limo/limoSunset'));1413skyBG.scrollFactor.set(0.1, 0.1);1414add(skyBG);14151416var bgLimo:FlxSprite = new FlxSprite(-200, 480);1417bgLimo.frames = Paths.getSparrowAtlas('limo/bgLimo');1418bgLimo.animation.addByPrefix('drive', "background limo pink", 24);1419bgLimo.animation.play('drive');1420bgLimo.scrollFactor.set(0.4, 0.4);1421add(bgLimo);14221423grpLimoDancers = new FlxTypedGroup<BackgroundDancer>();1424add(grpLimoDancers);14251426for (i in 0...5) {1427var dancer:BackgroundDancer = new BackgroundDancer((370 * i) + 130, bgLimo.y - 400);1428dancer.scrollFactor.set(0.4, 0.4);1429grpLimoDancers.add(dancer);1430}14311432var overlayShit:FlxSprite = new FlxSprite(-500, -600).loadGraphic(Paths.image('limo/limoOverlay'));1433overlayShit.alpha = 0.5;1434// add(overlayShit);14351436// var shaderBullshit = new BlendModeEffect(new OverlayShader(), FlxColor.RED);14371438// FlxG.camera.setFilters([new ShaderFilter(cast shaderBullshit.shader)]);14391440// overlayShit.shader = shaderBullshit;14411442var limoTex = Paths.getSparrowAtlas('limo/limoDrive');14431444limo = new FlxSprite(-120, 550);1445limo.frames = limoTex;1446limo.animation.addByPrefix('drive', "Limo stage", 24);1447limo.animation.play('drive');1448limo.antialiasing = true;14491450fastCar = new FlxSprite(-300, 160).loadGraphic(Paths.image('limo/fastCarLol'));1451// add(limo);1452}1453case 'cocoa' | 'eggnog':1454{1455curStage = 'mall';14561457defaultCamZoom = 0.80;14581459var bg:FlxSprite = new FlxSprite(-1000, -500).loadGraphic(Paths.image('christmas/bgWalls'));1460bg.antialiasing = true;1461bg.scrollFactor.set(0.2, 0.2);1462bg.active = false;1463bg.setGraphicSize(Std.int(bg.width * 0.8));1464bg.updateHitbox();1465add(bg);14661467upperBoppers = new FlxSprite(-240, -90);1468upperBoppers.frames = Paths.getSparrowAtlas('christmas/upperBop');1469upperBoppers.animation.addByPrefix('bop', "Upper Crowd Bob", 24, false);1470upperBoppers.antialiasing = true;1471upperBoppers.scrollFactor.set(0.33, 0.33);1472upperBoppers.setGraphicSize(Std.int(upperBoppers.width * 0.85));1473upperBoppers.updateHitbox();1474add(upperBoppers);14751476var bgEscalator:FlxSprite = new FlxSprite(-1100, -600).loadGraphic(Paths.image('christmas/bgEscalator'));1477bgEscalator.antialiasing = true;1478bgEscalator.scrollFactor.set(0.3, 0.3);1479bgEscalator.active = false;1480bgEscalator.setGraphicSize(Std.int(bgEscalator.width * 0.9));1481bgEscalator.updateHitbox();1482add(bgEscalator);14831484var tree:FlxSprite = new FlxSprite(370, -250).loadGraphic(Paths.image('christmas/christmasTree'));1485tree.antialiasing = true;1486tree.scrollFactor.set(0.40, 0.40);1487add(tree);14881489bottomBoppers = new FlxSprite(-300, 140);1490bottomBoppers.frames = Paths.getSparrowAtlas('christmas/bottomBop');1491bottomBoppers.animation.addByPrefix('bop', 'Bottom Level Boppers', 24, false);1492bottomBoppers.antialiasing = true;1493bottomBoppers.scrollFactor.set(0.9, 0.9);1494bottomBoppers.setGraphicSize(Std.int(bottomBoppers.width * 1));1495bottomBoppers.updateHitbox();1496add(bottomBoppers);14971498var fgSnow:FlxSprite = new FlxSprite(-600, 700).loadGraphic(Paths.image('christmas/fgSnow'));1499fgSnow.active = false;1500fgSnow.antialiasing = true;1501add(fgSnow);15021503santa = new FlxSprite(-840, 150);1504santa.frames = Paths.getSparrowAtlas('christmas/santa');1505santa.animation.addByPrefix('idle', 'santa idle in fear', 24, false);1506santa.antialiasing = true;1507add(santa);1508}1509case 'winter-horrorland':1510{1511curStage = 'mallEvil';1512var bg:FlxSprite = new FlxSprite(-400, -500).loadGraphic(Paths.image('christmas/evilBG'));1513bg.antialiasing = true;1514bg.scrollFactor.set(0.2, 0.2);1515bg.active = false;1516bg.setGraphicSize(Std.int(bg.width * 0.8));1517bg.updateHitbox();1518add(bg);15191520var evilTree:FlxSprite = new FlxSprite(300, -300).loadGraphic(Paths.image('christmas/evilTree'));1521evilTree.antialiasing = true;1522evilTree.scrollFactor.set(0.2, 0.2);1523add(evilTree);15241525var evilSnow:FlxSprite = new FlxSprite(-200, 700).loadGraphic(Paths.image("christmas/evilSnow"));1526evilSnow.antialiasing = true;1527add(evilSnow);1528}1529case 'senpai' | 'roses':1530{1531curStage = 'school';15321533// defaultCamZoom = 0.9;15341535var bgSky = new FlxSprite().loadGraphic(Paths.image('weeb/weebSky'));1536bgSky.scrollFactor.set(0.1, 0.1);1537add(bgSky);15381539var repositionShit = -200;15401541var bgSchool:FlxSprite = new FlxSprite(repositionShit, 0).loadGraphic(Paths.image('weeb/weebSchool'));1542bgSchool.scrollFactor.set(0.6, 0.90);1543add(bgSchool);15441545var bgStreet:FlxSprite = new FlxSprite(repositionShit).loadGraphic(Paths.image('weeb/weebStreet'));1546bgStreet.scrollFactor.set(0.95, 0.95);1547add(bgStreet);15481549var fgTrees:FlxSprite = new FlxSprite(repositionShit + 170, 130).loadGraphic(Paths.image('weeb/weebTreesBack'));1550fgTrees.scrollFactor.set(0.9, 0.9);1551add(fgTrees);15521553var bgTrees:FlxSprite = new FlxSprite(repositionShit - 380, -800);1554var treetex = Paths.getPackerAtlas('weeb/weebTrees');1555bgTrees.frames = treetex;1556bgTrees.animation.add('treeLoop', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], 12);1557bgTrees.animation.play('treeLoop');1558bgTrees.scrollFactor.set(0.85, 0.85);1559add(bgTrees);15601561var treeLeaves:FlxSprite = new FlxSprite(repositionShit, -40);1562treeLeaves.frames = Paths.getSparrowAtlas('weeb/petals');1563treeLeaves.animation.addByPrefix('leaves', 'PETALS ALL', 24, true);1564treeLeaves.animation.play('leaves');1565treeLeaves.scrollFactor.set(0.85, 0.85);1566add(treeLeaves);15671568var widShit = Std.int(bgSky.width * 6);15691570bgSky.setGraphicSize(widShit);1571bgSchool.setGraphicSize(widShit);1572bgStreet.setGraphicSize(widShit);1573bgTrees.setGraphicSize(Std.int(widShit * 1.4));1574fgTrees.setGraphicSize(Std.int(widShit * 0.8));1575treeLeaves.setGraphicSize(widShit);15761577fgTrees.updateHitbox();1578bgSky.updateHitbox();1579bgSchool.updateHitbox();1580bgStreet.updateHitbox();1581bgTrees.updateHitbox();1582treeLeaves.updateHitbox();15831584bgGirls = new BackgroundGirls(-100, 190);1585bgGirls.scrollFactor.set(0.9, 0.9);15861587if (SONG.song.toLowerCase() == 'roses') {1588bgGirls.getScared();1589}15901591bgGirls.setGraphicSize(Std.int(bgGirls.width * daPixelZoom));1592bgGirls.updateHitbox();1593add(bgGirls);1594}1595case 'thorns':1596{1597curStage = 'schoolEvil';15981599var waveEffectBG = new FlxWaveEffect(FlxWaveMode.ALL, 2, -1, 3, 2);1600var waveEffectFG = new FlxWaveEffect(FlxWaveMode.ALL, 2, -1, 5, 2);16011602var posX = 400;1603var posY = 200;16041605var bg:FlxSprite = new FlxSprite(posX, posY);1606bg.frames = Paths.getSparrowAtlas('weeb/animatedEvilSchool');1607bg.animation.addByPrefix('idle', 'background 2', 24);1608bg.animation.play('idle');1609bg.scrollFactor.set(0.8, 0.9);1610bg.scale.set(6, 6);1611add(bg);16121613/*1614var bg:FlxSprite = new FlxSprite(posX, posY).loadGraphic(Paths.image('weeb/evilSchoolBG'));1615bg.scale.set(6, 6);1616// bg.setGraphicSize(Std.int(bg.width * 6));1617// bg.updateHitbox();1618add(bg);16191620var fg:FlxSprite = new FlxSprite(posX, posY).loadGraphic(Paths.image('weeb/evilSchoolFG'));1621fg.scale.set(6, 6);1622// fg.setGraphicSize(Std.int(fg.width * 6));1623// fg.updateHitbox();1624add(fg);16251626wiggleShit.effectType = WiggleEffectType.DREAMY;1627wiggleShit.waveAmplitude = 0.01;1628wiggleShit.waveFrequency = 60;1629wiggleShit.waveSpeed = 0.8;1630*/16311632// bg.shader = wiggleShit.shader;1633// fg.shader = wiggleShit.shader;16341635/*1636var waveSprite = new FlxEffectSprite(bg, [waveEffectBG]);1637var waveSpriteFG = new FlxEffectSprite(fg, [waveEffectFG]);16381639// Using scale since setGraphicSize() doesnt work???1640waveSprite.scale.set(6, 6);1641waveSpriteFG.scale.set(6, 6);1642waveSprite.setPosition(posX, posY);1643waveSpriteFG.setPosition(posX, posY);16441645waveSprite.scrollFactor.set(0.7, 0.8);1646waveSpriteFG.scrollFactor.set(0.9, 0.8);16471648// waveSprite.setGraphicSize(Std.int(waveSprite.width * 6));1649// waveSprite.updateHitbox();1650// waveSpriteFG.setGraphicSize(Std.int(fg.width * 6));1651// waveSpriteFG.updateHitbox();16521653add(waveSprite);1654add(waveSpriteFG);1655*/1656}1657default:1658{1659defaultCamZoom = 0.9;1660curStage = 'stage';1661var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic(Paths.image('stageback'));1662bg.antialiasing = true;1663bg.scrollFactor.set(0.9, 0.9);1664bg.active = false;1665add(bg);16661667var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic(Paths.image('stagefront'));1668stageFront.setGraphicSize(Std.int(stageFront.width * 1.1));1669stageFront.updateHitbox();1670stageFront.antialiasing = true;1671stageFront.scrollFactor.set(0.9, 0.9);1672stageFront.active = false;1673add(stageFront);16741675var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic(Paths.image('stagecurtains'));1676stageCurtains.setGraphicSize(Std.int(stageCurtains.width * 0.9));1677stageCurtains.updateHitbox();1678stageCurtains.antialiasing = true;1679stageCurtains.scrollFactor.set(1.3, 1.3);1680stageCurtains.active = false;16811682add(stageCurtains);1683}1684}16851686var gfVersion:String = 'gf';16871688switch (curStage) {1689case 'limo':1690gfVersion = 'gf-car';1691case 'mall' | 'mallEvil':1692gfVersion = 'gf-christmas';1693case 'school':1694gfVersion = 'gf-pixel';1695case 'schoolEvil':1696gfVersion = 'gf-pixel';1697}16981699if (curStage == 'limo')1700gfVersion = 'gf-car';17011702gf = new Character(400, 130, gfVersion);1703gf.scrollFactor.set(0.95, 0.95);17041705dad = new Character(100, 100, SONG.player2);17061707var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y);17081709switch (SONG.player2) {1710case 'gf':1711dad.setPosition(gf.x, gf.y);1712gf.visible = false;1713if (isStoryMode) {1714camPos.x += 600;1715tweenCamIn();1716}17171718case "spooky":1719dad.y += 200;1720case "monster":1721dad.y += 100;1722case 'monster-christmas':1723dad.y += 130;1724case 'dad':1725camPos.x += 400;1726case 'pico':1727camPos.x += 600;1728dad.y += 300;1729case 'parents-christmas':1730dad.x -= 500;1731case 'senpai':1732dad.x += 150;1733dad.y += 360;1734camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);1735case 'senpai-angry':1736dad.x += 150;1737dad.y += 360;1738camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);1739case 'spirit':1740dad.x -= 150;1741dad.y += 100;1742camPos.set(dad.getGraphicMidpoint().x + 300, dad.getGraphicMidpoint().y);1743}17441745boyfriend = new Boyfriend(770, 450, SONG.player1);17461747// REPOSITIONING PER STAGE1748switch (curStage) {1749case 'limo':1750boyfriend.y -= 220;1751boyfriend.x += 260;17521753resetFastCar();1754add(fastCar);17551756case 'mall':1757boyfriend.x += 200;17581759case 'mallEvil':1760boyfriend.x += 320;1761dad.y -= 80;1762case 'school':1763boyfriend.x += 200;1764boyfriend.y += 220;1765gf.x += 180;1766gf.y += 300;1767case 'schoolEvil':1768// trailArea.scrollFactor.set();17691770var evilTrail = new FlxTrail(dad, null, 4, 24, 0.3, 0.069);1771// evilTrail.changeValuesEnabled(false, false, false, false);1772// evilTrail.changeGraphic()1773add(evilTrail);1774// evilTrail.scrollFactor.set(1.1, 1.1);17751776boyfriend.x += 200;1777boyfriend.y += 220;1778gf.x += 180;1779gf.y += 300;1780}17811782add(gf);17831784// Shitty layering but whatev it works LOL1785if (curStage == 'limo')1786add(limo);17871788add(dad);1789add(boyfriend);17901791var doof:DialogueBox = new DialogueBox(false, dialogue);1792// doof.x += 70;1793// doof.y = FlxG.height * 0.5;1794doof.scrollFactor.set();1795doof.finishThing = startCountdown;17961797Conductor.songPosition = -5000;17981799strumLine = new FlxSprite(0, 50).makeGraphic(FlxG.width, 10);1800strumLine.scrollFactor.set();18011802strumLineNotes = new FlxTypedGroup<FlxSprite>();1803add(strumLineNotes);18041805playerStrums = new FlxTypedGroup<FlxSprite>();18061807// startCountdown();18081809generateSong(SONG.song);18101811// add(strumLine);18121813camFollow = new FlxObject(0, 0, 1, 1);18141815camFollow.setPosition(camPos.x, camPos.y);18161817if (prevCamFollow != null) {1818camFollow = prevCamFollow;1819prevCamFollow = null;1820}18211822add(camFollow);18231824FlxG.camera.follow(camFollow, LOCKON, 0.04);1825// FlxG.camera.setScrollBounds(0, FlxG.width, 0, FlxG.height);1826FlxG.camera.zoom = defaultCamZoom;1827FlxG.camera.focusOn(camFollow.getPosition());18281829FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);18301831FlxG.fixedTimestep = false;18321833healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic(Paths.image('healthBar'));1834healthBarBG.screenCenter(X);1835healthBarBG.scrollFactor.set();1836add(healthBarBG);18371838healthBar = new FlxBar(healthBarBG.x + 4, healthBarBG.y + 4, RIGHT_TO_LEFT, Std.int(healthBarBG.width - 8), Std.int(healthBarBG.height - 8), this,1839'health', 0, 2);1840healthBar.scrollFactor.set();1841healthBar.createFilledBar(0xFFFF0000, 0xFF66FF33);1842// healthBar1843add(healthBar);18441845scoreTxt = new FlxText(healthBarBG.x + healthBarBG.width - 190, healthBarBG.y + 30, 0, "", 20);1846scoreTxt.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT);1847scoreTxt.scrollFactor.set();1848add(scoreTxt);18491850iconP1 = new HealthIcon(SONG.player1, true);1851iconP1.y = healthBar.y - (iconP1.height / 2);1852add(iconP1);18531854iconP2 = new HealthIcon(SONG.player2, false);1855iconP2.y = healthBar.y - (iconP2.height / 2);1856add(iconP2);18571858strumLineNotes.cameras = [camHUD];1859notes.cameras = [camHUD];1860healthBar.cameras = [camHUD];1861healthBarBG.cameras = [camHUD];1862iconP1.cameras = [camHUD];1863iconP2.cameras = [camHUD];1864scoreTxt.cameras = [camHUD];1865doof.cameras = [camHUD];18661867startingSong = true;18681869if (isStoryMode) {1870switch (curSong.toLowerCase()) {1871case "winter-horrorland":1872var blackScreen:FlxSprite = new FlxSprite(0, 0).makeGraphic(Std.int(FlxG.width * 2), Std.int(FlxG.height * 2), FlxColor.BLACK);1873add(blackScreen);1874blackScreen.scrollFactor.set();1875camHUD.visible = false;18761877new FlxTimer().start(0.1, function(cum:FlxTimer) {1878remove(blackScreen);1879FlxG.sound.play(Paths.sound('Lights_Turn_On'));1880camFollow.y = -2050;1881camFollow.x += 200;1882FlxG.camera.focusOn(camFollow.getPosition());1883FlxG.camera.zoom = 1.5;18841885new FlxTimer().start(0.8, function(cum:FlxTimer) {1886camHUD.visible = true;1887remove(blackScreen);1888FlxTween.tween(FlxG.camera, {zoom: defaultCamZoom}, 2.5, {1889ease: FlxEase.quadInOut,1890onComplete: function(twn:FlxTween) {1891startCountdown();1892}1893});1894});1895});1896case 'senpai':1897schoolIntro(doof);1898case 'roses':1899FlxG.sound.play(Paths.sound('ANGRY'));1900schoolIntro(doof);1901case 'thorns':1902schoolIntro(doof);1903default:1904startCountdown();1905}1906} else {1907switch (curSong.toLowerCase()) {1908default:1909startCountdown();1910}1911}19121913super.create();1914}19151916function schoolIntro(?dialogueBox:DialogueBox):Void {1917var black:FlxSprite = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, FlxColor.BLACK);1918black.scrollFactor.set();1919add(black);19201921var red:FlxSprite = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, 0xFFff1b31);1922red.scrollFactor.set();19231924var senpaiEvil:FlxSprite = new FlxSprite();1925senpaiEvil.frames = Paths.getSparrowAtlas('weeb/senpaiCrazy');1926senpaiEvil.animation.addByPrefix('idle', 'Senpai Pre Explosion', 24, false);1927senpaiEvil.setGraphicSize(Std.int(senpaiEvil.width * 6));1928senpaiEvil.scrollFactor.set();1929senpaiEvil.updateHitbox();1930senpaiEvil.screenCenter();19311932if (SONG.song.toLowerCase() == 'roses' || SONG.song.toLowerCase() == 'thorns') {1933remove(black);19341935if (SONG.song.toLowerCase() == 'thorns') {1936add(red);1937}1938}19391940new FlxTimer().start(0.3, function(cum:FlxTimer) {1941black.alpha -= 0.15;19421943if (black.alpha > 0) {1944cum.reset(0.3);1945} else {1946if (dialogueBox != null) {1947inCutscene = true;19481949if (SONG.song.toLowerCase() == 'thorns') {1950add(senpaiEvil);1951senpaiEvil.alpha = 0;1952new FlxTimer().start(0.3, function(swagTimer:FlxTimer) {1953senpaiEvil.alpha += 0.15;1954if (senpaiEvil.alpha < 1) {1955swagTimer.reset();1956} else {1957senpaiEvil.animation.play('idle');1958FlxG.sound.play(Paths.sound('Senpai_Dies'), 1, false, null, true, function() {1959remove(senpaiEvil);1960remove(red);1961FlxG.camera.fade(FlxColor.WHITE, 0.01, true, function() {1962add(dialogueBox);1963}, true);1964});1965new FlxTimer().start(3.2, function(deadTime:FlxTimer) {1966FlxG.camera.fade(FlxColor.WHITE, 1.6, false);1967});1968}1969});1970} else {1971add(dialogueBox);1972}1973} else1974startCountdown();19751976remove(black);1977}1978});1979}19801981var startTimer:FlxTimer;1982var perfectMode:Bool = false;19831984function startCountdown():Void {1985inCutscene = false;19861987generateStaticArrows(0);1988generateStaticArrows(1);19891990talking = false;1991startedCountdown = true;1992Conductor.songPosition = 0;1993Conductor.songPosition -= Conductor.crochet * 5;19941995var swagCounter:Int = 0;19961997startTimer = new FlxTimer().start(Conductor.crochet / 1000, function(cum:FlxTimer) {1998dad.dance();1999gf.dance();2000boyfriend.playAnim('idle');20012002var introAssets:Map<String, Array<String>> = new Map<String, Array<String>>();2003introAssets.set('default', ['ready', "set", "go"]);2004introAssets.set('school', ['weeb/pixelUI/ready-pixel', 'weeb/pixelUI/set-pixel', 'weeb/pixelUI/date-pixel']);2005introAssets.set('schoolEvil', ['weeb/pixelUI/ready-pixel', 'weeb/pixelUI/set-pixel', 'weeb/pixelUI/date-pixel']);20062007var introAlts:Array<String> = introAssets.get('default');2008var altSuffix:String = "";20092010for (value in introAssets.keys()) {2011if (value == curStage) {2012introAlts = introAssets.get(value);2013altSuffix = '-pixel';2014}2015}20162017switch (swagCounter) {2018case 0:2019FlxG.sound.play(Paths.sound('intro3'), 0.6);2020case 1:2021var ready:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[0]));2022ready.scrollFactor.set();2023ready.updateHitbox();20242025if (curStage.startsWith('school'))2026ready.setGraphicSize(Std.int(ready.width * daPixelZoom));20272028ready.screenCenter();2029add(ready);2030FlxTween.tween(ready, {y: ready.y += 100, alpha: 0}, Conductor.crochet / 1000, {2031ease: FlxEase.cubeInOut,2032onComplete: function(twn:FlxTween) {2033ready.destroy();2034}2035});2036FlxG.sound.play(Paths.sound('intro2'), 0.6);2037case 2:2038var set:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[1]));2039set.scrollFactor.set();20402041if (curStage.startsWith('school'))2042set.setGraphicSize(Std.int(set.width * daPixelZoom));20432044set.screenCenter();2045add(set);2046FlxTween.tween(set, {y: set.y += 100, alpha: 0}, Conductor.crochet / 1000, {2047ease: FlxEase.cubeInOut,2048onComplete: function(twn:FlxTween) {2049set.destroy();2050}2051});2052FlxG.sound.play(Paths.sound('intro1'), 0.6);2053case 3:2054var go:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[2]));2055go.scrollFactor.set();20562057if (curStage.startsWith('school'))2058go.setGraphicSize(Std.int(go.width * daPixelZoom));20592060go.updateHitbox();20612062go.screenCenter();2063add(go);2064FlxTween.tween(go, {y: go.y += 100, alpha: 0}, Conductor.crochet / 1000, {2065ease: FlxEase.cubeInOut,2066onComplete: function(twn:FlxTween) {2067go.destroy();2068}2069});2070FlxG.sound.play(Paths.sound('introGo'), 0.6);2071case 4:2072}20732074swagCounter += 1;2075// generateSong('fresh');2076}, 5);2077}20782079var previousFrameTime:Int = 0;2080var lastReportedPlayheadPosition:Int = 0;2081var songTime:Float = 0;20822083function startSong():Void {2084startingSong = false;20852086previousFrameTime = FlxG.game.ticks;2087lastReportedPlayheadPosition = 0;20882089if (!paused)2090FlxG.sound.playMusic(Paths.inst(PlayState.SONG.song), 1, false);2091FlxG.sound.music.onComplete = endSong;2092vocals.play();20932094#if desktop2095// Song duration in a float, useful for the time left feature2096songLength = FlxG.sound.music.length;20972098// Updating Discord Rich Presence (with Time Left)2099DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC, true, songLength);2100#end2101}21022103var debugNum:Int = 0;21042105private function generateSong(dataPath:String):Void {21062107var songData = SONG;2108Conductor.changeBPM(songData.bpm);21092110curSong = songData.song;21112112if (SONG.needsVoices)2113vocals = new FlxSound().loadEmbedded(Paths.voices(PlayState.SONG.song));2114else2115vocals = new FlxSound();21162117FlxG.sound.list.add(vocals);21182119notes = new FlxTypedGroup<Note>();2120add(notes);21212122var noteData:Array<SwagSection>;21232124// NEW SHIT2125noteData = songData.notes;21262127var playerCounter:Int = 0;21282129var daBeats:Int = 0; // Not exactly representative of 'daBeats' lol, just how much it has looped21302131var curDenominator = Conductor.timeSignature[1];21322133for (section in noteData) {2134var coolSection:Int = Std.int(section.lengthInSteps / 4);21352136for (songNotes in section.sectionNotes) {2137var daStrumTime:Float = songNotes[0];2138var daNoteData:Int = Std.int(songNotes[1] % 4);21392140var gottaHitNote:Bool = section.mustHitSection;21412142if (songNotes[1] > 3) {2143gottaHitNote = !section.mustHitSection;2144}21452146var oldNote:Note;2147if (unspawnNotes.length > 0)2148oldNote = unspawnNotes[Std.int(unspawnNotes.length - 1)];2149else2150oldNote = null;21512152var swagNote:Note = new Note(daStrumTime, daNoteData, oldNote);2153swagNote.sustainLength = songNotes[2];2154swagNote.scrollFactor.set(0, 0);21552156var susLength:Float = swagNote.sustainLength;21572158susLength = susLength / Conductor.stepCrochet;2159unspawnNotes.push(swagNote);21602161for (susNote in 0...Math.floor(susLength)) {2162oldNote = unspawnNotes[Std.int(unspawnNotes.length - 1)];21632164var sustainNote:Note = new Note(daStrumTime + (Conductor.stepCrochet * susNote) + Conductor.stepCrochet, daNoteData, oldNote, true);2165sustainNote.scrollFactor.set();2166unspawnNotes.push(sustainNote);21672168sustainNote.mustPress = gottaHitNote;21692170if (sustainNote.mustPress) {2171sustainNote.x += FlxG.width / 2; // general offset2172}2173}21742175swagNote.mustPress = gottaHitNote;21762177if (swagNote.mustPress) {2178swagNote.x += FlxG.width / 2; // general offset2179} else {}2180}2181daBeats += 1;2182}21832184unspawnNotes.sort(sortByShit);21852186generatedMusic = true;2187}21882189function sortByShit(Obj1:Note, Obj2:Note):Int {2190return FlxSort.byValues(FlxSort.ASCENDING, Obj1.strumTime, Obj2.strumTime);2191}21922193private function generateStaticArrows(player:Int):Void {2194for (i in 0...4) {2195var babyArrow:FlxSprite = new FlxSprite(0, strumLine.y);21962197switch (curStage) {2198case 'school' | 'schoolEvil':2199babyArrow.loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels'), true, 17, 17);2200babyArrow.animation.add('green', [6]);2201babyArrow.animation.add('red', [7]);2202babyArrow.animation.add('blue', [5]);2203babyArrow.animation.add('purplel', [4]);22042205babyArrow.setGraphicSize(Std.int(babyArrow.width * daPixelZoom));2206babyArrow.updateHitbox();2207babyArrow.antialiasing = false;22082209switch (Math.abs(i)) {2210case 0:2211babyArrow.x += Note.swagWidth * 0;2212babyArrow.animation.add('static', [0]);2213babyArrow.animation.add('pressed', [4, 8], 12, false);2214babyArrow.animation.add('confirm', [12, 16], 24, false);2215case 1:2216babyArrow.x += Note.swagWidth * 1;2217babyArrow.animation.add('static', [1]);2218babyArrow.animation.add('pressed', [5, 9], 12, false);2219babyArrow.animation.add('confirm', [13, 17], 24, false);2220case 2:2221babyArrow.x += Note.swagWidth * 2;2222babyArrow.animation.add('static', [2]);2223babyArrow.animation.add('pressed', [6, 10], 12, false);2224babyArrow.animation.add('confirm', [14, 18], 12, false);2225case 3:2226babyArrow.x += Note.swagWidth * 3;2227babyArrow.animation.add('static', [3]);2228babyArrow.animation.add('pressed', [7, 11], 12, false);2229babyArrow.animation.add('confirm', [15, 19], 24, false);2230}22312232default:2233babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets');2234babyArrow.animation.addByPrefix('green', 'arrowUP');2235babyArrow.animation.addByPrefix('blue', 'arrowDOWN');2236babyArrow.animation.addByPrefix('purple', 'arrowLEFT');2237babyArrow.animation.addByPrefix('red', 'arrowRIGHT');22382239babyArrow.antialiasing = true;2240babyArrow.setGraphicSize(Std.int(babyArrow.width * 0.7));22412242switch (Math.abs(i)) {2243case 0:2244babyArrow.x += Note.swagWidth * 0;2245babyArrow.animation.addByPrefix('static', 'arrowLEFT');2246babyArrow.animation.addByPrefix('pressed', 'left press', 24, false);2247babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false);2248case 1:2249babyArrow.x += Note.swagWidth * 1;2250babyArrow.animation.addByPrefix('static', 'arrowDOWN');2251babyArrow.animation.addByPrefix('pressed', 'down press', 24, false);2252babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false);2253case 2:2254babyArrow.x += Note.swagWidth * 2;2255babyArrow.animation.addByPrefix('static', 'arrowUP');2256babyArrow.animation.addByPrefix('pressed', 'up press', 24, false);2257babyArrow.animation.addByPrefix('confirm', 'up confirm', 24, false);2258case 3:2259babyArrow.x += Note.swagWidth * 3;2260babyArrow.animation.addByPrefix('static', 'arrowRIGHT');2261babyArrow.animation.addByPrefix('pressed', 'right press', 24, false);2262babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false);2263}2264}22652266babyArrow.updateHitbox();2267babyArrow.scrollFactor.set();22682269if (!isStoryMode) {2270babyArrow.y -= 10;2271babyArrow.alpha = 0;2272FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)});2273}22742275babyArrow.ID = i;22762277if (player == 1) {2278playerStrums.add(babyArrow);2279}22802281babyArrow.animation.play('static');2282babyArrow.x += 50;2283babyArrow.x += ((FlxG.width / 2) * player);22842285strumLineNotes.add(babyArrow);2286}2287}22882289function tweenCamIn():Void {2290FlxTween.tween(FlxG.camera, {zoom: 1.3}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut});2291}22922293override function openSubState(SubState:FlxSubState) {2294if (paused) {2295if (FlxG.sound.music != null) {2296FlxG.sound.music.pause();2297vocals.pause();2298}22992300if (!startTimer.finished)2301startTimer.active = false;2302}23032304super.openSubState(SubState);2305}23062307override function closeSubState() {2308if (paused) {2309if (FlxG.sound.music != null && !startingSong) {2310resyncVocals();2311}23122313if (!startTimer.finished)2314startTimer.active = true;2315paused = false;23162317#if desktop2318if (startTimer.finished) {2319DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC, true, songLength - Conductor.songPosition);2320} else {2321DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);2322}2323#end2324}23252326super.closeSubState();2327}23282329override public function onFocus():Void {2330#if desktop2331if (health > 0 && !paused) {2332if (Conductor.songPosition > 0.0) {2333DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC, true, songLength - Conductor.songPosition);2334} else {2335DiscordClient.changePresence(detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);2336}2337}2338#end23392340super.onFocus();2341}23422343override public function onFocusLost():Void {2344#if desktop2345if (health > 0 && !paused) {2346DiscordClient.changePresence(detailsPausedText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);2347}2348#end23492350super.onFocusLost();2351}23522353function resyncVocals():Void {2354vocals.pause();23552356FlxG.sound.music.play();2357Conductor.songPosition = FlxG.sound.music.time;2358vocals.time = Conductor.songPosition;2359vocals.play();2360}23612362private var paused:Bool = false;2363var startedCountdown:Bool = false;2364var canPause:Bool = true;23652366override public function update(elapsed:Float) {2367#if !debug2368perfectMode = false;2369#end23702371if (FlxG.keys.justPressed.NINE) {2372if (iconP1.animation.curAnim.name == 'bf-old')2373iconP1.animation.play(SONG.player1);2374else2375iconP1.animation.play('bf-old');2376}23772378switch (curStage) {2379case 'philly':2380if (trainMoving) {2381trainFrameTiming += elapsed;23822383if (trainFrameTiming >= 1 / 24) {2384updateTrainPos();2385trainFrameTiming = 0;2386}2387}2388}23892390super.update(elapsed);23912392scoreTxt.text = "Score:" + songScore;23932394if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause) {2395persistentUpdate = false;2396persistentDraw = true;2397paused = true;23982399// 1 / 1000 chance for Gitaroo Man easter egg2400if (FlxG.random.bool(0.1)) {2401// gitaroo man easter egg2402FlxG.switchState(new GitarooPause());2403} else2404openSubState(new PauseSubState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y));24052406#if desktop2407DiscordClient.changePresence(detailsPausedText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);2408#end2409}24102411if (FlxG.keys.justPressed.SEVEN) {2412FlxG.switchState(new ChartingState());24132414#if desktop2415DiscordClient.changePresence("Chart Editor", null, null, true);2416#end2417}24182419// FlxG.watch.addQuick('VOL', vocals.amplitudeLeft);2420// FlxG.watch.addQuick('VOLRight', vocals.amplitudeRight);24212422iconP1.setGraphicSize(Std.int(FlxMath.lerp(150, iconP1.width, 0.50)));2423iconP2.setGraphicSize(Std.int(FlxMath.lerp(150, iconP2.width, 0.50)));24242425iconP1.updateHitbox();2426iconP2.updateHitbox();24272428var iconOffset:Int = 26;24292430iconP1.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01) - iconOffset);2431iconP2.x = healthBar.x + (healthBar.width * (FlxMath.remapToRange(healthBar.percent, 0, 100, 100, 0) * 0.01)) - (iconP2.width - iconOffset);24322433if (health > 2)2434health = 2;24352436if (healthBar.percent < 20)2437iconP1.animation.curAnim.curFrame = 1;2438else2439iconP1.animation.curAnim.curFrame = 0;24402441if (healthBar.percent > 80)2442iconP2.animation.curAnim.curFrame = 1;2443else2444iconP2.animation.curAnim.curFrame = 0;24452446#if debug2447if (FlxG.keys.justPressed.EIGHT)2448FlxG.switchState(new AnimationDebug(SONG.player2));2449#end24502451if (startingSong) {2452if (startedCountdown) {2453Conductor.songPosition += FlxG.elapsed * 1000;2454if (Conductor.songPosition >= 0)2455startSong();2456}2457} else {2458// Conductor.songPosition = FlxG.sound.music.time;2459Conductor.songPosition += FlxG.elapsed * 1000;24602461if (!paused) {2462songTime += FlxG.game.ticks - previousFrameTime;2463previousFrameTime = FlxG.game.ticks;24642465// Interpolation type beat2466if (Conductor.lastSongPos != Conductor.songPosition) {2467songTime = (songTime + Conductor.songPosition) / 2;2468Conductor.lastSongPos = Conductor.songPosition;2469// Conductor.songPosition += FlxG.elapsed * 1000;2470// trace('MISSED FRAME');2471}2472}24732474// Conductor.lastSongPos = FlxG.sound.music.time;2475}24762477if (generatedMusic && PlayState.SONG.notes[Std.int(curStep / 16)] != null) {2478if (curBeat % 4 == 0) {2479// trace(PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection);2480}24812482if (camFollow.x != dad.getMidpoint().x + 150 && !PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection) {2483camFollow.setPosition(dad.getMidpoint().x + 150, dad.getMidpoint().y - 100);2484// camFollow.setPosition(lucky.getMidpoint().x - 120, lucky.getMidpoint().y + 210);24852486switch (dad.curCharacter) {2487case 'mom':2488camFollow.y = dad.getMidpoint().y;2489case 'senpai':2490camFollow.y = dad.getMidpoint().y - 430;2491camFollow.x = dad.getMidpoint().x - 100;2492case 'senpai-angry':2493camFollow.y = dad.getMidpoint().y - 430;2494camFollow.x = dad.getMidpoint().x - 100;2495}24962497if (dad.curCharacter == 'mom')2498vocals.volume = 1;24992500if (SONG.song.toLowerCase() == 'tutorial') {2501tweenCamIn();2502}2503}25042505if (PlayState.SONG.notes[Std.int(curStep / 16)].mustHitSection && camFollow.x != boyfriend.getMidpoint().x - 100) {2506camFollow.setPosition(boyfriend.getMidpoint().x - 100, boyfriend.getMidpoint().y - 100);25072508switch (curStage) {2509case 'limo':2510camFollow.x = boyfriend.getMidpoint().x - 300;2511case 'mall':2512camFollow.y = boyfriend.getMidpoint().y - 200;2513case 'school':2514camFollow.x = boyfriend.getMidpoint().x - 200;2515camFollow.y = boyfriend.getMidpoint().y - 200;2516case 'schoolEvil':2517camFollow.x = boyfriend.getMidpoint().x - 200;2518camFollow.y = boyfriend.getMidpoint().y - 200;2519}25202521if (SONG.song.toLowerCase() == 'tutorial') {2522FlxTween.tween(FlxG.camera, {zoom: 1}, (Conductor.stepCrochet * 4 / 1000), {ease: FlxEase.elasticInOut});2523}2524}2525}25262527if (camZooming) {2528FlxG.camera.zoom = FlxMath.lerp(defaultCamZoom, FlxG.camera.zoom, 0.95);2529camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, 0.95);2530}25312532FlxG.watch.addQuick("beatShit", curBeat);2533FlxG.watch.addQuick("stepShit", curStep);25342535if (curSong == 'Fresh') {2536switch (curBeat) {2537case 16:2538camZooming = true;2539gfSpeed = 2;2540case 48:2541gfSpeed = 1;2542case 80:2543gfSpeed = 2;2544case 112:2545gfSpeed = 1;2546case 163:2547// FlxG.sound.music.stop();2548// FlxG.switchState(new TitleState());2549}2550}25512552if (curSong == 'Bopeebo') {2553switch (curBeat) {2554case 128, 129, 130:2555vocals.volume = 0;2556// FlxG.sound.music.stop();2557// FlxG.switchState(new PlayState());2558}2559}2560// better streaming of shit25612562// RESET = Quick Game Over Screen2563if (controls.RESET) {2564health = 0;2565trace("RESET = True");2566}25672568// CHEAT = brandon's a pussy2569if (controls.CHEAT) {2570health += 1;2571trace("User is cheating!");2572}25732574if (health <= 0) {2575boyfriend.stunned = true;25762577persistentUpdate = false;2578persistentDraw = false;2579paused = true;25802581vocals.stop();2582FlxG.sound.music.stop();25832584openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y));25852586// FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y));25872588#if desktop2589// Game Over doesn't get his own variable because it's only used here2590DiscordClient.changePresence("Game Over - " + detailsText, SONG.song + " (" + storyDifficultyText + ")", iconRPC);2591#end2592}25932594if (unspawnNotes[0] != null) {2595if (unspawnNotes[0].strumTime - Conductor.songPosition < 1500) {2596var dunceNote:Note = unspawnNotes[0];2597notes.add(dunceNote);25982599var index:Int = unspawnNotes.indexOf(dunceNote);2600unspawnNotes.splice(index, 1);2601}2602}26032604if (generatedMusic) {2605notes.forEachAlive(function(daNote:Note) {2606if (daNote.y > FlxG.height) {2607daNote.active = false;2608daNote.visible = false;2609} else {2610daNote.visible = true;2611daNote.active = true;2612}26132614daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2)));26152616// i am so fucking sorry for this if condition2617if (daNote.isSustainNote2618&& daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth / 22619&& (!daNote.mustPress || (daNote.wasGoodHit || (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) {2620var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth / 2 - daNote.y, daNote.width * 2, daNote.height * 2);2621swagRect.y /= daNote.scale.y;2622swagRect.height -= swagRect.y;26232624daNote.clipRect = swagRect;2625}26262627if (!daNote.mustPress && daNote.wasGoodHit) {2628if (SONG.song != 'Tutorial')2629camZooming = true;26302631var altAnim:String = "";26322633if (SONG.notes[Math.floor(curStep / 16)] != null) {2634if (SONG.notes[Math.floor(curStep / 16)].altAnim)2635altAnim = '-alt';2636}26372638switch (Math.abs(daNote.noteData)) {2639case 0:2640dad.playAnim('singLEFT' + altAnim, true);2641case 1:2642dad.playAnim('singDOWN' + altAnim, true);2643case 2:2644dad.playAnim('singUP' + altAnim, true);2645case 3:2646dad.playAnim('singRIGHT' + altAnim, true);2647}26482649dad.holdTimer = 0;26502651if (SONG.needsVoices)2652vocals.volume = 1;26532654daNote.kill();2655notes.remove(daNote, true);2656daNote.destroy();2657}26582659// WIP interpolation shit? Need to fix the pause issue2660// daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed));26612662if (daNote.y < -daNote.height) {2663if (daNote.tooLate || !daNote.wasGoodHit) {2664health -= 0.0475;2665vocals.volume = 0;2666}26672668daNote.active = false;2669daNote.visible = false;26702671daNote.kill();2672notes.remove(daNote, true);2673daNote.destroy();2674}2675});2676}26772678if (!inCutscene)2679keyShit();26802681#if debug2682if (FlxG.keys.justPressed.ONE)2683endSong();2684#end2685}26862687function endSong():Void {2688canPause = false;2689FlxG.sound.music.volume = 0;2690vocals.volume = 0;2691if (SONG.validScore) {2692#if !switch2693Highscore.saveScore(SONG.song, songScore, storyDifficulty);2694#end2695}26962697if (isStoryMode) {2698campaignScore += songScore;26992700storyPlaylist.remove(storyPlaylist[0]);27012702if (storyPlaylist.length <= 0) {2703FlxG.sound.playMusic(Paths.music('freakyMenu'));27042705transIn = FlxTransitionableState.defaultTransIn;2706transOut = FlxTransitionableState.defaultTransOut;27072708FlxG.switchState(new StoryMenuState());27092710// if ()2711StoryMenuState.weekUnlocked[Std.int(Math.min(storyWeek + 1, StoryMenuState.weekUnlocked.length - 1))] = true;27122713if (SONG.validScore) {2714NGio.unlockMedal(60961);2715Highscore.saveWeekScore(storyWeek, campaignScore, storyDifficulty);2716}27172718FlxG.save.data.weekUnlocked = StoryMenuState.weekUnlocked;2719FlxG.save.flush();2720} else {2721var difficulty:String = "";27222723if (storyDifficulty == 0)2724difficulty = '-easy';27252726if (storyDifficulty == 2)2727difficulty = '-hard';27282729trace('LOADING NEXT SONG');2730trace(PlayState.storyPlaylist[0].toLowerCase() + difficulty);27312732if (SONG.song.toLowerCase() == 'eggnog') {2733var blackShit:FlxSprite = new FlxSprite(-FlxG.width * FlxG.camera.zoom,2734-FlxG.height * FlxG.camera.zoom).makeGraphic(FlxG.width * 3, FlxG.height * 3, FlxColor.BLACK);2735blackShit.scrollFactor.set();2736add(blackShit);2737camHUD.visible = false;27382739FlxG.sound.play(Paths.sound('Lights_Shut_off'));2740}27412742FlxTransitionableState.skipNextTransIn = true;2743FlxTransitionableState.skipNextTransOut = true;2744prevCamFollow = camFollow;27452746PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]);2747FlxG.sound.music.stop();27482749LoadingState.loadAndSwitchState(new PlayState());2750}2751} else {2752trace('WENT BACK TO FREEPLAY??');2753FlxG.switchState(new FreeplayState());2754}2755}27562757var endingSong:Bool = false;27582759private function popUpScore(strumtime:Float):Void {2760var noteDiff:Float = Math.abs(strumtime - Conductor.songPosition);2761// boyfriend.playAnim('hey');2762vocals.volume = 1;27632764var placement:String = Std.string(combo);27652766var coolText:FlxText = new FlxText(0, 0, 0, placement, 32);2767coolText.screenCenter();2768coolText.x = FlxG.width * 0.55;2769//27702771var rating:FlxSprite = new FlxSprite();2772var score:Int = 350;27732774var daRating:String = "sick";27752776if (noteDiff > Conductor.safeZoneOffset * 0.9) {2777daRating = 'shit';2778score = 50;2779} else if (noteDiff > Conductor.safeZoneOffset * 0.75) {2780daRating = 'bad';2781score = 100;2782} else if (noteDiff > Conductor.safeZoneOffset * 0.2) {2783daRating = 'good';2784score = 200;2785}27862787songScore += score;27882789/* if (combo > 60)2790daRating = 'sick';2791else if (combo > 12)2792daRating = 'good'2793else if (combo > 4)2794daRating = 'bad';2795*/27962797var pixelShitPart1:String = "";2798var pixelShitPart2:String = '';27992800if (curStage.startsWith('school')) {2801pixelShitPart1 = 'weeb/pixelUI/';2802pixelShitPart2 = '-pixel';2803}28042805rating.loadGraphic(Paths.image(pixelShitPart1 + daRating + pixelShitPart2));2806rating.screenCenter();2807rating.x = coolText.x - 40;2808rating.y -= 60;2809rating.acceleration.y = 550;2810rating.velocity.y -= FlxG.random.int(140, 175);2811rating.velocity.x -= FlxG.random.int(0, 10);28122813var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'combo' + pixelShitPart2));2814comboSpr.screenCenter();2815comboSpr.x = coolText.x;2816comboSpr.acceleration.y = 600;2817comboSpr.velocity.y -= 150;28182819comboSpr.velocity.x += FlxG.random.int(1, 10);2820add(rating);28212822if (!curStage.startsWith('school')) {2823rating.setGraphicSize(Std.int(rating.width * 0.7));2824rating.antialiasing = true;2825comboSpr.setGraphicSize(Std.int(comboSpr.width * 0.7));2826comboSpr.antialiasing = true;2827} else {2828rating.setGraphicSize(Std.int(rating.width * daPixelZoom * 0.7));2829comboSpr.setGraphicSize(Std.int(comboSpr.width * daPixelZoom * 0.7));2830}28312832comboSpr.updateHitbox();2833rating.updateHitbox();28342835var seperatedScore:Array<Int> = [];28362837seperatedScore.push(Math.floor(combo / 100));2838seperatedScore.push(Math.floor((combo - (seperatedScore[0] * 100)) / 10));2839seperatedScore.push(combo % 10);28402841var daLoop:Int = 0;2842for (i in seperatedScore) {2843var numScore:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2));2844numScore.screenCenter();2845numScore.x = coolText.x + (43 * daLoop) - 90;2846numScore.y += 80;28472848if (!curStage.startsWith('school')) {2849numScore.antialiasing = true;2850numScore.setGraphicSize(Std.int(numScore.width * 0.5));2851} else {2852numScore.setGraphicSize(Std.int(numScore.width * daPixelZoom));2853}2854numScore.updateHitbox();28552856numScore.acceleration.y = FlxG.random.int(200, 300);2857numScore.velocity.y -= FlxG.random.int(140, 160);2858numScore.velocity.x = FlxG.random.float(-5, 5);28592860if (combo >= 10 || combo == 0)2861add(numScore);28622863FlxTween.tween(numScore, {alpha: 0}, 0.2, {2864onComplete: function(tween:FlxTween) {2865numScore.destroy();2866},2867startDelay: Conductor.crochet * 0.0022868});28692870daLoop++;2871}2872/*2873trace(combo);2874trace(seperatedScore);2875*/28762877coolText.text = Std.string(seperatedScore);2878// add(coolText);28792880FlxTween.tween(rating, {alpha: 0}, 0.2, {2881startDelay: Conductor.crochet * 0.0012882});28832884FlxTween.tween(comboSpr, {alpha: 0}, 0.2, {2885onComplete: function(tween:FlxTween) {2886coolText.destroy();2887comboSpr.destroy();28882889rating.destroy();2890},2891startDelay: Conductor.crochet * 0.0012892});28932894curSection += 1;2895}28962897private function keyShit():Void {2898// HOLDING2899var up = controls.UP;2900var right = controls.RIGHT;2901var down = controls.DOWN;2902var left = controls.LEFT;29032904var upP = controls.UP_P;2905var rightP = controls.RIGHT_P;2906var downP = controls.DOWN_P;2907var leftP = controls.LEFT_P;29082909var upR = controls.UP_R;2910var rightR = controls.RIGHT_R;2911var downR = controls.DOWN_R;2912var leftR = controls.LEFT_R;29132914var controlArray:Array<Bool> = [leftP, downP, upP, rightP];29152916// FlxG.watch.addQuick('asdfa', upP);2917if ((upP || rightP || downP || leftP) && !boyfriend.stunned && generatedMusic) {2918boyfriend.holdTimer = 0;29192920var possibleNotes:Array<Note> = [];29212922var ignoreList:Array<Int> = [];29232924notes.forEachAlive(function(daNote:Note) {2925if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit) {2926// the sorting probably doesn't need to be in here? who cares lol2927possibleNotes.push(daNote);2928possibleNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));29292930ignoreList.push(daNote.noteData);2931}2932});29332934if (possibleNotes.length > 0) {2935var daNote = possibleNotes[0];29362937if (perfectMode)2938noteCheck(true, daNote);29392940// Jump notes2941if (possibleNotes.length >= 2) {2942if (possibleNotes[0].strumTime == possibleNotes[1].strumTime) {2943for (coolNote in possibleNotes) {2944if (controlArray[coolNote.noteData])2945goodNoteHit(coolNote);2946else {2947var inIgnoreList:Bool = false;2948for (shit in 0...ignoreList.length) {2949if (controlArray[ignoreList[shit]])2950inIgnoreList = true;2951}2952if (!inIgnoreList)2953badNoteCheck();2954}2955}2956} else if (possibleNotes[0].noteData == possibleNotes[1].noteData) {2957noteCheck(controlArray[daNote.noteData], daNote);2958} else {2959for (coolNote in possibleNotes) {2960noteCheck(controlArray[coolNote.noteData], coolNote);2961}2962}2963} else // regular notes?2964{2965noteCheck(controlArray[daNote.noteData], daNote);2966}2967/*2968if (controlArray[daNote.noteData])2969goodNoteHit(daNote);2970*/2971// trace(daNote.noteData);2972/*2973switch (daNote.noteData)2974{2975case 2: // NOTES YOU JUST PRESSED2976if (upP || rightP || downP || leftP)2977noteCheck(upP, daNote);2978case 3:2979if (upP || rightP || downP || leftP)2980noteCheck(rightP, daNote);2981case 1:2982if (upP || rightP || downP || leftP)2983noteCheck(downP, daNote);2984case 0:2985if (upP || rightP || downP || leftP)2986noteCheck(leftP, daNote);2987}29882989//this is already done in noteCheck / goodNoteHit2990if (daNote.wasGoodHit)2991{2992daNote.kill();2993notes.remove(daNote, true);2994daNote.destroy();2995}2996*/2997} else {2998badNoteCheck();2999}3000}30013002if ((up || right || down || left) && !boyfriend.stunned && generatedMusic) {3003notes.forEachAlive(function(daNote:Note) {3004if (daNote.canBeHit && daNote.mustPress && daNote.isSustainNote) {3005switch (daNote.noteData) {3006// NOTES YOU ARE HOLDING3007case 0:3008if (left)3009goodNoteHit(daNote);3010case 1:3011if (down)3012goodNoteHit(daNote);3013case 2:3014if (up)3015goodNoteHit(daNote);3016case 3:3017if (right)3018goodNoteHit(daNote);3019}3020}3021});3022}30233024if (boyfriend.holdTimer > Conductor.stepCrochet * 4 * 0.001 && !up && !down && !right && !left) {3025if (boyfriend.animation.curAnim.name.startsWith('sing') && !boyfriend.animation.curAnim.name.endsWith('miss')) {3026boyfriend.playAnim('idle');3027}3028}30293030playerStrums.forEach(function(spr:FlxSprite) {3031switch (spr.ID) {3032case 0:3033if (leftP && spr.animation.curAnim.name != 'confirm')3034spr.animation.play('pressed');3035if (leftR)3036spr.animation.play('static');3037case 1:3038if (downP && spr.animation.curAnim.name != 'confirm')3039spr.animation.play('pressed');3040if (downR)3041spr.animation.play('static');3042case 2:3043if (upP && spr.animation.curAnim.name != 'confirm')3044spr.animation.play('pressed');3045if (upR)3046spr.animation.play('static');3047case 3:3048if (rightP && spr.animation.curAnim.name != 'confirm')3049spr.animation.play('pressed');3050if (rightR)3051spr.animation.play('static');3052}30533054if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school')) {3055spr.centerOffsets();3056spr.offset.x -= 13;3057spr.offset.y -= 13;3058} else3059spr.centerOffsets();3060});3061}30623063function noteMiss(direction:Int = 1):Void {3064if (!boyfriend.stunned) {3065health -= 0.04;3066if (combo > 5 && gf.animOffsets.exists('sad')) {3067gf.playAnim('sad');3068}3069combo = 0;30703071songScore -= 10;30723073FlxG.sound.play(Paths.soundRandom('missnote', 1, 3), FlxG.random.float(0.1, 0.2));3074// FlxG.sound.play(Paths.sound('missnote1'), 1, false);3075// FlxG.log.add('played imss note');30763077boyfriend.stunned = true;30783079// get stunned for 5 seconds3080new FlxTimer().start(5 / 60, function(cum:FlxTimer) {3081boyfriend.stunned = false;3082});30833084switch (direction) {3085case 0:3086boyfriend.playAnim('singLEFTmiss', true);3087case 1:3088boyfriend.playAnim('singDOWNmiss', true);3089case 2:3090boyfriend.playAnim('singUPmiss', true);3091case 3:3092boyfriend.playAnim('singRIGHTmiss', true);3093}3094}3095}30963097function badNoteCheck() {3098// just double pasting this shit cuz fuk u3099// REDO THIS SYSTEM!3100var upP = controls.UP_P;3101var rightP = controls.RIGHT_P;3102var downP = controls.DOWN_P;3103var leftP = controls.LEFT_P;31043105if (leftP)3106noteMiss(0);3107if (downP)3108noteMiss(1);3109if (upP)3110noteMiss(2);3111if (rightP)3112noteMiss(3);3113}31143115function noteCheck(keyP:Bool, note:Note):Void {3116if (keyP)3117goodNoteHit(note);3118else {3119badNoteCheck();3120}3121}31223123function goodNoteHit(note:Note):Void {3124if (!note.wasGoodHit) {3125if (!note.isSustainNote) {3126popUpScore(note.strumTime);3127combo += 1;3128}31293130if (note.noteData >= 0)3131health += 0.023;3132else3133health += 0.004;31343135switch (note.noteData) {3136case 0:3137boyfriend.playAnim('singLEFT', true);3138case 1:3139boyfriend.playAnim('singDOWN', true);3140case 2:3141boyfriend.playAnim('singUP', true);3142case 3:3143boyfriend.playAnim('singRIGHT', true);3144}31453146playerStrums.forEach(function(spr:FlxSprite) {3147if (Math.abs(note.noteData) == spr.ID) {3148spr.animation.play('confirm', true);3149}3150});31513152note.wasGoodHit = true;3153vocals.volume = 1;31543155if (!note.isSustainNote) {3156note.kill();3157notes.remove(note, true);3158note.destroy();3159}3160}3161}31623163var fastCarCanDrive:Bool = true;31643165function resetFastCar():Void {3166fastCar.x = -12600;3167fastCar.y = FlxG.random.int(140, 250);3168fastCar.velocity.x = 0;3169fastCarCanDrive = true;3170}31713172function fastCarDrive() {3173FlxG.sound.play(Paths.soundRandom('carPass', 0, 1), 0.7);31743175fastCar.velocity.x = (FlxG.random.int(170, 220) / FlxG.elapsed) * 3;3176fastCarCanDrive = false;3177new FlxTimer().start(2, function(cum:FlxTimer) {3178resetFastCar();3179});3180}31813182var trainMoving:Bool = false;3183var trainFrameTiming:Float = 0;31843185var trainCars:Int = 8;3186var trainFinishing:Bool = false;3187var trainCooldown:Int = 0;31883189function trainStart():Void {3190trainMoving = true;3191if (!trainSound.playing)3192trainSound.play(true);3193}31943195var startedMoving:Bool = false;31963197function updateTrainPos():Void {3198if (trainSound.time >= 4700) {3199startedMoving = true;3200gf.playAnim('hairBlow');3201}32023203if (startedMoving) {3204phillyTrain.x -= 400;32053206if (phillyTrain.x < -2000 && !trainFinishing) {3207phillyTrain.x = -1150;3208trainCars -= 1;32093210if (trainCars <= 0)3211trainFinishing = true;3212}32133214if (phillyTrain.x < -4000 && trainFinishing)3215trainReset();3216}3217}32183219function trainReset():Void {3220gf.playAnim('hairFall');3221phillyTrain.x = FlxG.width + 200;3222trainMoving = false;3223// trainSound.stop();3224// trainSound.time = 0;3225trainCars = 8;3226trainFinishing = false;3227startedMoving = false;3228}32293230function lightningStrikeShit():Void {3231FlxG.sound.play(Paths.soundRandom('thunder_', 1, 2));3232halloweenBG.animation.play('lightning');32333234lightningStrikeBeat = curBeat;3235lightningOffset = FlxG.random.int(8, 24);32363237boyfriend.playAnim('scared', true);3238gf.playAnim('scared', true);3239}32403241override function stepHit() {3242super.stepHit();3243if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20) {3244resyncVocals();3245}32463247if (dad.curCharacter == 'spooky' && curStep % 4 == 2) {3248// dad.dance();3249}3250}32513252var lightningStrikeBeat:Int = 0;3253var lightningOffset:Int = 8;32543255override function beatHit() {3256super.beatHit();32573258if (generatedMusic) {3259notes.sort(FlxSort.byY, FlxSort.DESCENDING);3260}32613262if (SONG.notes[Math.floor(curStep / 16)] != null) {3263if (SONG.notes[Math.floor(curStep / 16)].changeBPM) {3264Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm);3265FlxG.log.add('CHANGED BPM!');3266}3267// else3268// Conductor.changeBPM(SONG.bpm);32693270// Dad doesnt interupt his own notes3271if (SONG.notes[Math.floor(curStep / 16)].mustHitSection)3272dad.dance();3273}3274// FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM);3275wiggleShit.update(Conductor.crochet);32763277// HARDCODING FOR MILF ZOOMS!3278if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35) {3279FlxG.camera.zoom += 0.015;3280camHUD.zoom += 0.03;3281}32823283if (camZooming && FlxG.camera.zoom < 1.35 && curBeat % camBeat == 0) {3284FlxG.camera.zoom += 0.015;3285camHUD.zoom += 0.03;3286}32873288iconP1.setGraphicSize(Std.int(iconP1.width + 30));3289iconP2.setGraphicSize(Std.int(iconP2.width + 30));32903291iconP1.updateHitbox();3292iconP2.updateHitbox();32933294if (curBeat % gfSpeed == 0) {3295gf.dance();3296}32973298if (!boyfriend.animation.curAnim.name.startsWith("sing")) {3299boyfriend.playAnim('idle');3300}33013302if (curBeat % 8 == 7 && curSong == 'Bopeebo') {3303boyfriend.playAnim('hey', true);3304}33053306if (curBeat % 16 == 15 && SONG.song == 'Tutorial' && dad.curCharacter == 'gf' && curBeat > 16 && curBeat < 48) {3307boyfriend.playAnim('hey', true);3308dad.playAnim('cheer', true);3309}33103311switch (curStage) {3312case 'school':3313bgGirls.dance();33143315case 'mall':3316upperBoppers.animation.play('bop', true);3317bottomBoppers.animation.play('bop', true);3318santa.animation.play('idle', true);33193320case 'limo':3321grpLimoDancers.forEach(function(dancer:BackgroundDancer) {3322dancer.dance();3323});33243325if (FlxG.random.bool(10) && fastCarCanDrive)3326fastCarDrive();3327case "philly":3328if (!trainMoving)3329trainCooldown += 1;33303331if (curBeat % 4 == 0) {3332phillyCityLights.forEach(function(light:FlxSprite) {3333light.visible = false;3334});33353336curLight = FlxG.random.int(0, phillyCityLights.length - 1);33373338phillyCityLights.members[curLight].visible = true;3339// phillyCityLights.members[curLight].alpha = 1;3340}33413342if (curBeat % 8 == 4 && FlxG.random.bool(30) && !trainMoving && trainCooldown > 8) {3343trainCooldown = FlxG.random.int(-4, 0);3344trainStart();3345}3346}33473348if (isHalloween && FlxG.random.bool(10) && curBeat > lightningStrikeBeat + lightningOffset) {3349lightningStrikeShit();3350}3351}33523353var curLight:Int = 0;3354}3355}335633573358