From 3f7281a95be7dc348523112435b4d9ba4af5bbac Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 21:56:49 +0300 Subject: [PATCH 01/32] readme rewritten --- extra/readme.txt | 68 ++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/extra/readme.txt b/extra/readme.txt index 99aa167..e2e38a3 100644 --- a/extra/readme.txt +++ b/extra/readme.txt @@ -15,48 +15,29 @@ | | | (_| (_| \/ | ) | (_) | ) |_ \/ (- (_| | ) / _/ / -HEY -Thanks for downloadin Friday Night FUNKIN' -If you downloaded this from any other place than ninja-muffin24.itch.io/FUNKIN -You might be in DANGER!!! +HEY! Yeah, YOU! +Thanks for downloadin Friday Night FUNKIN' GRAPHEX ENGINE! -The Itch.io release is the only official source for the desktop (PC, Mac, Linux) versions of the game! -As of right now, the game is FREE! If you paid for it, you got SCAMMED! +THANKS FOR DOWNLOADING!! -Now that that's out of the way.... -THANKS FOR DOWNLOADIN. -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- - PERMISSIONS XDDDD -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- +----------------------------------------------------------- + PERMISSIONS: -Little info, you have FULL PERMISSION to stream, letsplay, meme, shitpost, do WHATEVER you want with the game. -Use the music in videos you do, use art, ANYTHING. GO CRAZY BRO. +You can stream, record or modify this engine for your purposes, but please, consider leaving a word +about maker of this engine ":) (About Xale, yeah) -If you do make any sort of video, it would be a bro move if you linked the game and spread the word -Play On Newgrounds - https://www.newgrounds.com/portal/view/770371 -Support on Itch.io - https://ninja-muffin24.itch.io/funkin - -If not no biggie we don't fully hate you only kinda no biggie. - - -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- +----------------------------------------------------------- INFO AND LINKS -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- - -If you wanna dig around, the game is fully open source on Github -https://github.com/ninjamuffin99/Funkin - -It's made in Haxe / HaxeFlixel +----------------------------------------------------------- -MUSIC IS ON SPOTIFY AND BANDCAMP AND EVERYWHERE ELSE PROB TOO -https://kawaisprite.bandcamp.com/album/friday-night-funkin-ost-vol-1 +If you wanna dig around, the engine is fully open source on Github and ready for you to modify it :D +https://github.com/xalethecat/fnf-grafex - -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- +----------------------------------------------------------- FINAL WORDS / CREDITS -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#- +----------------------------------------------------------- Friday Night Funkin' is made by ninjamuffin99 (programmer), PhantomArcade (animator), kawaisprite (musician), and evilsk8r (artist) @@ -65,10 +46,18 @@ https://twitter.com/phantomarcade3k https://twitter.com/kawaisprite https://twitter.com/evilsk8r +Graphex is Created by XaleTheCat (Lead Coder - (https://github.com/xalethecat)) and PurpleSnake (Secondhand Coder) + +Psych Engine is created by ShadowMario (Coder - (https://twitter.com/Shadow_Mario_)), RiverOaken (Artist - (https://twitter.com/river_oaken)) and Keoiki (Additional Assets Help - (https://twitter.com/Keoiki_)) + + Pico is created by Tom Fulp Skid and Pump are created by SrPelo BassetFilms did music for lemon monster songs +Play On Newgrounds - https://www.newgrounds.com/portal/view/770371 +Support on Itch.io - https://ninja-muffin24.itch.io/funkin + Final important thing, this is made with the support and love to and from Newgrounds.com. Go to newgrounds, we love newgrounds. newgrounds good. How many times do I gotta damn say it. Newgrounds newgrounds newgrounds newgrounds @@ -76,17 +65,4 @@ I love Tom Fulp. - Cameron ♪(´▽`) -################################################################################## - - _ _ _____ _ _ ____ ____ ___ _ _ _ _ ____ ____ -| \ | | | ____| | | | | / ___| | _ \ / _ \ | | | | | \ | | | _ \ / ___| -| \| | | _| | | /\ | | | | _ | |_) | | | | | | | | | | \| | | | | | \___ \ -| |\ | | |___ \ V V / | |_| | | _ < | |_| | | |_| | | |\ | | |_| | ___) | -|_| \_| |_____| \_/\_/ \____| |_| \_\ \___/ \___/ |_| \_| |____/ |____/ - _ _ _ ___ ___ __ _ _ _ _ _ -|_ | | |_ |_) \_/ | |_| | |\ | /__ |_ |_ | | |_ |_) \_/ / \ |\ | |_ -|_ \/ |_ | \ | | | | _|_ | \| \_| o |_)\/ |_ \/ |_ | \ | \_/ | \| |_ o - / / - -################################################################################## -i stole this from stamper. \ No newline at end of file +-- Modified by Xale :D \ No newline at end of file From 45f4eea780cae4a96a96b86e1167aabe20acc3b5 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 22:02:16 +0300 Subject: [PATCH 02/32] readme rewritten too --- README.md | 70 +++++++++++-------------------------------------------- 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 8727e13..e733f7d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Friday Night Funkin' - Psych Engine +# Friday Night Funkin' - Graphex Engine ## Credits: ### Psych Engine: @@ -10,61 +10,17 @@ * Xale - Lead Coding, Artist * PurpleSnake - Coding, Assets +##Brand New GameMenu! +* All States in one script. +* Better graphic! (TODO) +* Faster loading. +* Optimizied and Cleaned Code. -## Atleast one change to every week: -### Week 1: - * New Dad Left sing sprite - * Unused stage lights are now used -### Week 2: - * Both BF and Skid & Pump does "Hey!" animations - * Thunders does a quick light flash and zooms the camera in slightly - * Added a quick transition/cutscene to Monster -### Week 3: - * BF does "Hey!" during Philly Nice - * Blammed has a cool new colors flash during that sick part of the song -### Week 4: - * Better hair physics for Mom/Boyfriend (Maybe even slightly better than Week 7's :eyes:) - * Henchmen die during all songs. Yeah :( -### Week 5: - * Bottom Boppers and GF does "Hey!" animations during Cocoa and Eggnog - * On Winter Horrorland, GF bops her head slower in some parts of the song. -### Week 6: - * On Thorns, the HUD is hidden during the cutscene - * Also there's the Background girls being spooky during the "Hey!" parts of the Instrumental +## AND MORE! +* Cool new Chart Editor changes and countless bug fixes +* Character Editor menu (Press 8 during a song) +* Credits menu +* Options menu: +* And other! -## Cool new Chart Editor changes and countless bug fixes -![an](https://user-images.githubusercontent.com/44785097/130653801-3bdaf3e0-3499-4bc5-ba95-95225567c445.jpg) -* You can now chart "Event" notes, which are bookmarks that trigger specific actions that usually were hardcoded on the vanilla version of the game. -* Your song's BPM can now have decimal values -* You can manually adjust a Note's strum time if you're really going for milisecond precision -* You can change a note's type on the Editor, it comes with two example types: - * Alt Animation: Forces an alt animation to play, useful for songs like Ugh/Stress - * Hey: Forces a "Hey" animation instead of the base Sing animation, if Boyfriend hits this note, Girlfriend will do a "Hey!" too. - * Hurt Note: Hitting this note will make you take damage equivalent to 15% of your health (5% if it's a sustain note piece). - -## Character Editor menu (Press 8 during a song) -![611204265433b](https://user-images.githubusercontent.com/44785097/130653956-3b15d82e-328c-4a59-8cf7-1d2b17c05f9a.jpg) - - -## Story mode menu rework: -![](https://i.imgur.com/UB2EKpV.png) -* Added a different BG to every song (less Tutorial) -* All menu characters are now in individual spritesheets, makes modding it easier. - -## Credits menu -![](https://i.imgur.com/NdIQt3d.png) -* You can add a head icon, name, description and a Redirect link for when the player presses Enter while the item is currently selected. - -## Awards/Achievements -* The engine comes with 16 example achievements that you can mess with and learn how it works (Check Achievements.hx and search for "checkForAchievement" on PlayState.hx) - -## Options menu: -* You can change Note colors, Controls and Preferences there. - * On Preferences you can toggle Downscroll, Anti-Aliasing, Framerate, Low Quality, Note Splashes, Hide Hud elements, Flashing Lights, etc. - -## Other gameplay features: -* When the enemy hits a note, it plays the note hit animation on their strum, just like when the player hits a note. -* Lag doesn't impact the camera movement and player icon scaling anymore. -* Some stuff based on Week 7's changes has been put in (Background colors on Freeplay, Note splashes) -* You can reset your Score on Freeplay/Story Mode by pressing Reset button. -* You can listen to a song on Freeplay by pressing Space once. +# Thank you for downloading this Engine! We hope you are glad with it ":) From 2998df31854e56e57f4b9b675e15126989de9626 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 22:51:17 +0300 Subject: [PATCH 03/32] ALL IN ONA GAME MENU! --- .../uselessScripts}/CreditsState.hx | 0 .../uselessScripts}/FreeplayState.hx | 0 .../uselessScripts}/OptionsState.hx | 0 .../uselessScripts}/StoryMenuState.hx | 0 source/Data.hx | 7 + source/Discord.hx | 2 +- source/GameDimensions.hx | 7 - source/GameMenuState.hx | 2212 +++++++++++++++++ source/GameOverSubstate.hx | 3 + source/GlobalVideo.hx | 6 + .../{MainMenuState.hx => OldMainMenuState.hx} | 3 +- source/PauseSubState.hx | 3 + source/PlayState.hx | 3 + source/TitleState.hx | 104 +- 14 files changed, 2259 insertions(+), 91 deletions(-) rename {source => extra/uselessScripts}/CreditsState.hx (100%) rename {source => extra/uselessScripts}/FreeplayState.hx (100%) rename {source => extra/uselessScripts}/OptionsState.hx (100%) rename {source => extra/uselessScripts}/StoryMenuState.hx (100%) create mode 100644 source/Data.hx delete mode 100644 source/GameDimensions.hx create mode 100644 source/GameMenuState.hx rename source/{MainMenuState.hx => OldMainMenuState.hx} (98%) diff --git a/source/CreditsState.hx b/extra/uselessScripts/CreditsState.hx similarity index 100% rename from source/CreditsState.hx rename to extra/uselessScripts/CreditsState.hx diff --git a/source/FreeplayState.hx b/extra/uselessScripts/FreeplayState.hx similarity index 100% rename from source/FreeplayState.hx rename to extra/uselessScripts/FreeplayState.hx diff --git a/source/OptionsState.hx b/extra/uselessScripts/OptionsState.hx similarity index 100% rename from source/OptionsState.hx rename to extra/uselessScripts/OptionsState.hx diff --git a/source/StoryMenuState.hx b/extra/uselessScripts/StoryMenuState.hx similarity index 100% rename from source/StoryMenuState.hx rename to extra/uselessScripts/StoryMenuState.hx diff --git a/source/Data.hx b/source/Data.hx new file mode 100644 index 0000000..6f686da --- /dev/null +++ b/source/Data.hx @@ -0,0 +1,7 @@ +package; + +class Data +{ + public static var psychEngineVersion:String = '0.3.1'; //This is also used for Discord RPC - ShadowMario + public static var modEngineVersion:String = 'b0.0.3'; +} \ No newline at end of file diff --git a/source/Discord.hx b/source/Discord.hx index 4f38162..bdffa4d 100644 --- a/source/Discord.hx +++ b/source/Discord.hx @@ -75,7 +75,7 @@ class DiscordClient details: details, state: state, largeImageKey: 'logo', - largeImageText: "Graphex " + MainMenuState.modEngineVersion, + largeImageText: "Graphex " + Data.modEngineVersion, smallImageKey : smallImageKey, // Obtained times are in milliseconds so they are divided so Discord can use it startTimestamp : Std.int(startTimestamp / 1000), diff --git a/source/GameDimensions.hx b/source/GameDimensions.hx deleted file mode 100644 index db4a62a..0000000 --- a/source/GameDimensions.hx +++ /dev/null @@ -1,7 +0,0 @@ -package; - -class GameDimensions -{ - public static var width:Int = 1280; - public static var height:Int = 720; -} \ No newline at end of file diff --git a/source/GameMenuState.hx b/source/GameMenuState.hx new file mode 100644 index 0000000..334b71d --- /dev/null +++ b/source/GameMenuState.hx @@ -0,0 +1,2212 @@ +package; + +#if desktop +import Discord.DiscordClient; +#end +import flixel.FlxG; +import flixel.FlxObject; +import flixel.FlxSprite; +import flixel.FlxCamera; +import flixel.addons.transition.FlxTransitionableState; +import flixel.effects.FlxFlicker; +import flixel.graphics.frames.FlxAtlasFrames; +import flixel.group.FlxGroup.FlxTypedGroup; +import flixel.text.FlxText; +import flixel.math.FlxMath; +import flixel.tweens.FlxEase; +import flixel.tweens.FlxTween; +import flixel.util.FlxColor; +import lime.app.Application; +import flixel.system.FlxSound; +import openfl.utils.Assets as OpenFlAssets; +import flixel.group.FlxGroup; +import flixel.util.FlxTimer; +import flixel.input.keyboard.FlxKey; +import flixel.graphics.FlxGraphic; +import Controls; + +using StringTools; + +class GameMenuState extends MusicBeatState +{ + override function create() + { + MusicBeatState.switchState(new GameMenuState.MainMenuState()); + } + +} + +class MainMenuState extends MusicBeatState +{ + public static var curSelected:Int = 0; + + var menuItems:FlxTypedGroup; + private var camGame:FlxCamera; + + var optionShit:Array = ['story_mode', 'freeplay', 'credits', 'options']; + + var magenta:FlxSprite; + var camFollow:FlxObject; + var camFollowPos:FlxObject; + + override function create() + { + #if desktop + DiscordClient.changePresence("In the Menu", null); + #end + + camGame = new FlxCamera(); + + FlxG.cameras.reset(camGame); + FlxCamera.defaultCameras = [camGame]; + + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + + persistentUpdate = persistentDraw = true; + + var yScroll:Float = Math.max(0.25 - (0.05 * (optionShit.length - 4)), 0.1); + var bg:FlxSprite = new FlxSprite(-80).loadGraphic(Paths.image('menuBG')); + bg.scrollFactor.set(0, yScroll); + bg.setGraphicSize(Std.int(bg.width * 1.175)); + bg.updateHitbox(); + bg.screenCenter(); + bg.antialiasing = ClientPrefs.globalAntialiasing; + add(bg); + + camFollow = new FlxObject(0, 0, 1, 1); + camFollowPos = new FlxObject(0, 0, 1, 1); + add(camFollow); + add(camFollowPos); + + magenta = new FlxSprite(-80).loadGraphic(Paths.image('menuDesat')); + magenta.scrollFactor.set(0, yScroll); + magenta.setGraphicSize(Std.int(magenta.width * 1.175)); + magenta.updateHitbox(); + magenta.screenCenter(); + magenta.visible = false; + magenta.antialiasing = ClientPrefs.globalAntialiasing; + magenta.color = 0xFFfd719b; + add(magenta); + + menuItems = new FlxTypedGroup(); + add(menuItems); + + for (i in 0...optionShit.length) + { + var offset:Float = 108 - (Math.max(optionShit.length, 4) - 4) * 80; + var menuItem:FlxSprite = new FlxSprite(0, (i * 140) + offset); + menuItem.frames = Paths.getSparrowAtlas('mainmenu/menu_' + optionShit[i]); + menuItem.animation.addByPrefix('idle', optionShit[i] + " basic", 24); + menuItem.animation.addByPrefix('selected', optionShit[i] + " white", 24); + menuItem.animation.play('idle'); + menuItem.ID = i; + menuItem.screenCenter(X); + menuItems.add(menuItem); + var scr:Float = (optionShit.length - 4) * 0.135; + if(optionShit.length < 6) scr = 0; + menuItem.scrollFactor.set(0, scr); + menuItem.antialiasing = ClientPrefs.globalAntialiasing; + menuItem.updateHitbox(); + } + + FlxG.camera.follow(camFollowPos, null, 1); + + var versionShit:FlxText = new FlxText(12, FlxG.height - 64, 0, "Grafex Engine v" + Data.modEngineVersion, 12); + versionShit.scrollFactor.set(); + versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + add(versionShit); + var versionShit:FlxText = new FlxText(12, FlxG.height - 44, 0, "Psych Engine v" + Data.psychEngineVersion, 12); + versionShit.scrollFactor.set(); + versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + add(versionShit); + var versionShit:FlxText = new FlxText(12, FlxG.height - 24, 0, "Friday Night Funkin' v" + Application.current.meta.get('version'), 12); + versionShit.scrollFactor.set(); + versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + add(versionShit); + + changeItem(); + + super.create(); + } + + var selectedSomethin:Bool = false; + + override function update(elapsed:Float) + { + if (FlxG.sound.music.volume < 0.8) + { + FlxG.sound.music.volume += 0.5 * FlxG.elapsed; + } + + var lerpVal:Float = CoolUtil.boundTo(elapsed * 5.6, 0, 1); + camFollowPos.setPosition(FlxMath.lerp(camFollowPos.x, camFollow.x, lerpVal), FlxMath.lerp(camFollowPos.y, camFollow.y, lerpVal)); + + if (!selectedSomethin) + { + if (controls.UI_UP_P) + { + FlxG.sound.play(Paths.sound('scrollMenu')); + changeItem(-1); + } + + if (controls.UI_DOWN_P) + { + FlxG.sound.play(Paths.sound('scrollMenu')); + changeItem(1); + } + + if (controls.BACK) + { + MusicBeatState.switchState(new TitleState()); + } + + if (controls.ACCEPT) + { + selectedSomethin = true; + FlxG.sound.play(Paths.sound('confirmMenu')); + if(ClientPrefs.flashing) FlxFlicker.flicker(magenta, 1.1, 0.15, false); + menuItems.forEach(function(spr:FlxSprite) + { + if (curSelected != spr.ID) + { + FlxTween.tween(spr, {alpha: 0}, 0.4, { + ease: FlxEase.quadOut, + onComplete: function(twn:FlxTween) + { + spr.kill(); + } + }); + } + else + { + FlxFlicker.flicker(spr, 1, 0.06, false, false, function(flick:FlxFlicker) + { + var daChoice:String = optionShit[curSelected]; + switch (daChoice) + { + case 'story_mode': + MusicBeatState.switchState(new StoryMenuState()); + case 'freeplay': + MusicBeatState.switchState(new FreeplayState()); + case 'credits': + MusicBeatState.switchState(new CreditsState()); + case 'options': + MusicBeatState.switchState(new OptionsState()); + } + }); + } + }); + } + } + + super.update(elapsed); + + menuItems.forEach(function(spr:FlxSprite) + { + spr.screenCenter(X); + }); + } + + function changeItem(huh:Int = 0) + { + curSelected += huh; + + if (curSelected >= menuItems.length) + curSelected = 0; + if (curSelected < 0) + curSelected = menuItems.length - 1; + + menuItems.forEach(function(spr:FlxSprite) + { + spr.animation.play('idle'); + spr.offset.y = 0; + spr.offset.x = -100; + spr.updateHitbox(); + + if (spr.ID == curSelected) + { + spr.animation.play('selected'); + camFollow.setPosition(spr.getGraphicMidpoint().x, spr.getGraphicMidpoint().y); + spr.offset.x = 0.15 * (spr.frameWidth / 2 + 180); + spr.offset.y = 0.15 * spr.frameHeight; + FlxG.log.add(spr.frameWidth); + } + }); + } +} + +class CreditsState extends MusicBeatState +{ + var curSelected:Int = 1; + + private var grpOptions:FlxTypedGroup; + private var iconArray:Array = []; + + private static var creditsStuff:Array = [ //Name - Icon name - Description - Link - BG Color + ['Psych Engine Team'], + ['Shadow Mario','shadowmario','Main Programmer of Psych Engine','https://twitter.com/Shadow_Mario_',0xFFFFDD33], + ['RiverOaken','riveroaken','Main Artist/Animator of Psych Engine','https://twitter.com/river_oaken',0xFFC30085], + ['Keoiki','keoiki','Note Splash Animations','https://twitter.com/Keoiki_',0xFFFFFFFF], + [''], + ['Graphex Team'], + ['XaleTheCat','xale','Lead Developer of Grafex Mod','https://github.com/XaleTheCat', 0xFFFFBB1B], + ['PurpleSnake','snake','Developer of Grafex Mod','https://github.com/PurpleSSSnake', 0xFF6475F3], + [''], + ["Funkin' Crew"], + ['ninjamuffin99', 'ninjamuffin99', "Programmer of Friday Night Funkin'", 'https://twitter.com/ninja_muffin99', 0xFFF73838], + ['PhantomArcade', 'phantomarcade', "Animator of Friday Night Funkin'", 'https://twitter.com/PhantomArcade3K', 0xFFFFBB1B], + ['evilsk8r', 'evilsk8r', "Artist of Friday Night Funkin'", 'https://twitter.com/evilsk8r', 0xFF53E52C], + ['kawaisprite', 'kawaisprite', "Composer of Friday Night Funkin'", 'https://twitter.com/kawaisprite', 0xFF6475F3] + ]; + + var bg:FlxSprite; + var descText:FlxText; + var intendedColor:Int; + var colorTween:FlxTween; + + override function create() + { + #if desktop + // Updating Discord Rich Presence + DiscordClient.changePresence("In the Menus", null); + #end + + bg = new FlxSprite().loadGraphic(Paths.image('menuDesat')); + add(bg); + + grpOptions = new FlxTypedGroup(); + add(grpOptions); + + for (i in 0...creditsStuff.length) + { + var isSelectable:Bool = !unselectableCheck(i); + var optionText:Alphabet = new Alphabet(0, 70 * i, creditsStuff[i][0], !isSelectable, false); + optionText.isMenuItem = true; + optionText.screenCenter(X); + if(isSelectable) { + optionText.x -= 70; + } + optionText.forceX = optionText.x; + optionText.targetY = i; + grpOptions.add(optionText); + + if(isSelectable) { + var icon:AttachedSprite = new AttachedSprite('credits/' + creditsStuff[i][1]); + icon.xAdd = optionText.width + 10; + icon.sprTracker = optionText; + + iconArray.push(icon); + add(icon); + } + } + + descText = new FlxText(50, 600, 1180, "", 32); + descText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + descText.scrollFactor.set(); + descText.borderSize = 2.4; + add(descText); + + bg.color = creditsStuff[curSelected][4]; + intendedColor = bg.color; + changeSelection(); + super.create(); + } + + override function update(elapsed:Float) + { + if (FlxG.sound.music.volume < 0.7) + { + FlxG.sound.music.volume += 0.5 * FlxG.elapsed; + } + + var upP = controls.UI_UP_P; + var downP = controls.UI_DOWN_P; + + if (upP) + { + changeSelection(-1); + } + if (downP) + { + changeSelection(1); + } + + if (controls.BACK) + { + if(colorTween != null) { + colorTween.cancel(); + } + FlxG.sound.play(Paths.sound('cancelMenu')); + MusicBeatState.switchState(new MainMenuState()); + } + if(controls.ACCEPT) { + CoolUtil.browserLoad(creditsStuff[curSelected][3]); + } + super.update(elapsed); + } + + function changeSelection(change:Int = 0) + { + FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); + do { + curSelected += change; + if (curSelected < 0) + curSelected = creditsStuff.length - 1; + if (curSelected >= creditsStuff.length) + curSelected = 0; + } while(unselectableCheck(curSelected)); + + var newColor:Int = creditsStuff[curSelected][4]; + if(newColor != intendedColor) { + if(colorTween != null) { + colorTween.cancel(); + } + intendedColor = newColor; + colorTween = FlxTween.color(bg, 1, bg.color, intendedColor, { + onComplete: function(twn:FlxTween) { + colorTween = null; + } + }); + } + + var bullShit:Int = 0; + + for (item in grpOptions.members) + { + item.targetY = bullShit - curSelected; + bullShit++; + + if(!unselectableCheck(bullShit-1)) { + item.alpha = 0.6; + if (item.targetY == 0) { + item.alpha = 1; + } + } + } + descText.text = creditsStuff[curSelected][2]; + } + + private function unselectableCheck(num:Int):Bool { + return creditsStuff[num].length <= 1; + } +} + +class FreeplayState extends MusicBeatState +{ + //Character head icons for your songs + static var songsHeads:Array = [ + ['dad'], //Week 1 + ['spooky', 'spooky', 'monster'], //Week 2 + ['pico'], //Week 3 + ['mom'], //Week 4 + ['parents', 'parents', 'monster'], //Week 5 + ['senpai', 'senpai', 'spirit'] //Week 6 + ]; + + var songs:Array = []; + + var selector:FlxText; + private static var curSelected:Int = 0; + private static var curDifficulty:Int = 1; + + var scoreBG:FlxSprite; + var scoreText:FlxText; + var diffText:FlxText; + var lerpScore:Int = 0; + var lerpRating:Float = 0; + var intendedScore:Int = 0; + var intendedRating:Float = 0; + public static var bpm:Float = 0; + + private var grpSongs:FlxTypedGroup; + private var curPlaying:Bool = false; + + private var iconArray:Array = []; + public static var coolColors:Array = []; + + var bg:FlxSprite; + var intendedColor:Int; + var colorTween:FlxTween; + + override function create() + { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); + for (i in 0...initSonglist.length) + { + var songArray:Array = initSonglist[i].split(":"); + addSong(songArray[0], 0, songArray[1]); + songs[songs.length-1].color = Std.parseInt(songArray[2]); + } + var colorsList = CoolUtil.coolTextFile(Paths.txt('freeplayColors')); + for (i in 0...colorsList.length) + { + coolColors.push(Std.parseInt(colorsList[i])); + } + + #if desktop + DiscordClient.changePresence("In the Menu", null); + #end + + for (i in 1...WeekData.songsNames.length) { + #if !debug + if (StoryMenuState.weekUnlocked[i]) + #end + addWeek(WeekData.songsNames[i], i, songsHeads[i-1]); + } + + bg = new FlxSprite().loadGraphic(Paths.image('menuDesat')); + add(bg); + + grpSongs = new FlxTypedGroup(); + add(grpSongs); + + for (i in 0...songs.length) + { + var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i].songName, true, false); + songText.isMenuItem = true; + songText.targetY = i; + grpSongs.add(songText); + + var icon:HealthIcon = new HealthIcon(songs[i].songCharacter); + icon.sprTracker = songText; + + iconArray.push(icon); + add(icon); + } + + scoreText = new FlxText(FlxG.width * 0.7, 5, 0, "", 32); + scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT); + + scoreBG = new FlxSprite(scoreText.x - 6, 0).makeGraphic(1, 66, 0xFF000000); + scoreBG.alpha = 0.6; + add(scoreBG); + + diffText = new FlxText(scoreText.x, scoreText.y + 36, 0, "", 24); + diffText.font = scoreText.font; + add(diffText); + + add(scoreText); + + bg.color = songs[curSelected].color; + intendedColor = bg.color; + changeSelection(); + changeDiff(); + + var swag:Alphabet = new Alphabet(1, 0, "swag"); + + var textBG:FlxSprite = new FlxSprite(0, FlxG.height - 26).makeGraphic(FlxG.width, 26, 0xFF000000); + textBG.alpha = 0.6; + add(textBG); + #if PRELOAD_ALL + var leText:String = "Press SPACE to listen to this Song / Press RESET to Reset your Score and Accuracy."; + #else + var leText:String = "Press RESET to Reset your Score and Accuracy."; + #end + var text:FlxText = new FlxText(textBG.x, textBG.y + 4, FlxG.width, leText, 18); + text.setFormat(Paths.font("vcr.ttf"), 18, FlxColor.WHITE, RIGHT); + text.scrollFactor.set(); + add(text); + super.create(); + } + + override function closeSubState() { + changeSelection(); + super.closeSubState(); + } + + public function addSong(songName:String, weekNum:Int, songCharacter:String) + { + songs.push(new SongMetadata(songName, weekNum, songCharacter)); + } + + public function addWeek(songs:Array, weekNum:Int, ?songCharacters:Array) + { + if (songCharacters == null) + songCharacters = ['bf']; + + var num:Int = 0; + for (song in songs) + { + addSong(song, weekNum, songCharacters[num]); + + if (songCharacters.length != 1) + num++; + } + } + + var instPlaying:Int = -1; + private static var vocals:FlxSound = null; + override function update(elapsed:Float) + { + if (FlxG.sound.music.volume < 0.7) + { + FlxG.sound.music.volume += 0.5 * FlxG.elapsed; + } + + lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, CoolUtil.boundTo(elapsed * 24, 0, 1))); + lerpRating = FlxMath.lerp(lerpRating, intendedRating, CoolUtil.boundTo(elapsed * 12, 0, 1)); + + if (Math.abs(lerpScore - intendedScore) <= 10) + lerpScore = intendedScore; + if (Math.abs(lerpRating - intendedRating) <= 0.01) + lerpRating = intendedRating; + + scoreText.text = 'PERSONAL BEST: ' + lerpScore + ' (' + Math.floor(lerpRating * 100) + '%)'; + positionHighscore(); + + var upP = controls.UI_UP_P; + var downP = controls.UI_DOWN_P; + var accepted = controls.ACCEPT; + var space = FlxG.keys.justPressed.SPACE; + + if (upP) + { + changeSelection(-1); + } + if (downP) + { + changeSelection(1); + } + + if (controls.UI_LEFT_P) + changeDiff(-1); + if (controls.UI_RIGHT_P) + changeDiff(1); + + if (controls.BACK) + { + if(colorTween != null) { + colorTween.cancel(); + } + MusicBeatState.switchState(new MainMenuState()); + } + + #if PRELOAD_ALL + if(space && instPlaying != curSelected) + { + destroyFreeplayVocals(); + var poop:String = Highscore.formatSong(songs[curSelected].songName.toLowerCase(), curDifficulty); + PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName.toLowerCase()); + if (PlayState.SONG.needsVoices) + vocals = new FlxSound().loadEmbedded(Paths.voices(PlayState.SONG.song)); + else + vocals = new FlxSound(); + + FlxG.sound.list.add(vocals); + FlxG.sound.playMusic(Paths.inst(PlayState.SONG.song), 0.7); + vocals.play(); + vocals.persist = true; + vocals.looped = true; + vocals.volume = 0.7; + instPlaying = curSelected; + } + else #end if (accepted) + { + var songLowercase:String = songs[curSelected].songName.toLowerCase(); + var poop:String = Highscore.formatSong(songLowercase, curDifficulty); + if(!OpenFlAssets.exists(Paths.json(songLowercase + '/' + poop))) { + poop = songLowercase; + curDifficulty = 1; + trace('Couldnt find file'); + } + trace(poop); + + PlayState.SONG = Song.loadFromJson(poop, songLowercase); + PlayState.isStoryMode = false; + PlayState.storyDifficulty = curDifficulty; + + PlayState.storyWeek = songs[curSelected].week; + trace('CURRENT WEEK: ' + WeekData.getCurrentWeekNumber()); + if(colorTween != null) { + colorTween.cancel(); + } + LoadingState.loadAndSwitchState(new PlayState()); + + FlxG.sound.music.volume = 0; + + destroyFreeplayVocals(); + } + else if(controls.RESET) + { + openSubState(new ResetScoreSubState(songs[curSelected].songName, curDifficulty, songs[curSelected].songCharacter)); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + super.update(elapsed); + } + + public static function destroyFreeplayVocals() { + if(vocals != null) { + vocals.stop(); + vocals.destroy(); + } + vocals = null; + } + + function changeDiff(change:Int = 0) + { + curDifficulty += change; + + if (curDifficulty < 0) + curDifficulty = CoolUtil.difficultyStuff.length-1; + if (curDifficulty >= CoolUtil.difficultyStuff.length) + curDifficulty = 0; + + #if !switch + intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); + intendedRating = Highscore.getRating(songs[curSelected].songName, curDifficulty); + #end + + PlayState.storyDifficulty = curDifficulty; + diffText.text = '< ' + CoolUtil.difficultyString() + ' >'; + positionHighscore(); + } + + function changeSelection(change:Int = 0) + { + FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); + + curSelected += change; + + if (curSelected < 0) + curSelected = songs.length - 1; + if (curSelected >= songs.length) + curSelected = 0; + + var newColor:Int = songs[curSelected].color; + if(newColor != intendedColor) { + if(colorTween != null) { + colorTween.cancel(); + } + intendedColor = newColor; + colorTween = FlxTween.color(bg, 1, bg.color, intendedColor, { + onComplete: function(twn:FlxTween) { + colorTween = null; + } + }); + } + + #if !switch + intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); + intendedRating = Highscore.getRating(songs[curSelected].songName, curDifficulty); + #end + + var bullShit:Int = 0; + + for (i in 0...iconArray.length) + { + iconArray[i].alpha = 0.6; + } + + iconArray[curSelected].alpha = 1; + + for (item in grpSongs.members) + { + item.targetY = bullShit - curSelected; + bullShit++; + + item.alpha = 0.6; + + if (item.targetY == 0) + { + item.alpha = 1; + } + } + changeDiff(); + } + + private function positionHighscore() { + scoreText.x = FlxG.width - scoreText.width - 6; + + scoreBG.scale.x = FlxG.width - scoreText.x + 6; + scoreBG.x = FlxG.width - (scoreBG.scale.x / 2); + diffText.x = Std.int(scoreBG.x + (scoreBG.width / 2)); + diffText.x -= diffText.width / 2; + } +} + +class SongMetadata +{ + public var songName:String = ""; + public var week:Int = 0; + public var songCharacter:String = ""; + public var color:Int = -7179779; + + public function new(song:String, week:Int, songCharacter:String) + { + this.songName = song; + this.week = week; + this.songCharacter = songCharacter; + if(week < FreeplayState.coolColors.length) { + this.color = FreeplayState.coolColors[week]; + } + } +} + +class StoryMenuState extends MusicBeatState +{ + // Wether you have to beat the previous week for playing this one + // Not recommended, as people usually download your mod for, you know, + // playing just the modded week then delete it. + // defaults to True + public static var weekUnlocked:Array = [ + true, //Tutorial + true, //Week 1 + true, //Week 2 + true, //Week 3 + true, //Week 4 + true, //Week 5 + true //Week 6 + ]; + + //It works like this: + // ['Left character', 'Center character', 'Right character'] + var weekCharacters:Array = [ + ['dad', 'bf', 'gf'], + ['dad', 'bf', 'gf'], + ['spooky', 'bf', 'gf'], + ['pico', 'bf', 'gf'], + ['mom', 'bf', 'gf'], + ['parents-christmas', 'bf', 'gf'], + ['senpai', 'bf', 'gf'] + ]; + + //The week's name, displayed on top-right + var weekNames:Array = [ + "", + "Daddy Dearest", + "Spooky Month", + "PICO", + "MOMMY MUST MURDER", + "RED SNOW", + "hating simulator ft. moawling" + ]; + + //Background asset name, the background files are stored on assets/preload/menubackgrounds/ + var weekBackground:Array = [ + 'stage', + 'stage', + 'halloween', + 'philly', + 'limo', + 'christmas', + 'school' + ]; + + var scoreText:FlxText; + + private static var curDifficulty:Int = 1; + + var txtWeekTitle:FlxText; + var bgSprite:FlxSprite; + + private static var curWeek:Int = 0; + + var txtTracklist:FlxText; + + var grpWeekText:FlxTypedGroup; + var grpWeekCharacters:FlxTypedGroup; + + var grpLocks:FlxTypedGroup; + + var difficultySelectors:FlxGroup; + var sprDifficultyGroup:FlxTypedGroup; + var leftArrow:FlxSprite; + var rightArrow:FlxSprite; + + override function create() + { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + + persistentUpdate = persistentDraw = true; + + scoreText = new FlxText(10, 10, 0, "SCORE: 49324858", 36); + scoreText.setFormat("VCR OSD Mono", 32); + + txtWeekTitle = new FlxText(FlxG.width * 0.7, 10, 0, "", 32); + txtWeekTitle.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, RIGHT); + txtWeekTitle.alpha = 0.7; + + var rankText:FlxText = new FlxText(0, 10); + rankText.text = 'RANK: GREAT'; + rankText.setFormat(Paths.font("vcr.ttf"), 32); + rankText.size = scoreText.size; + rankText.screenCenter(X); + + var ui_tex = Paths.getSparrowAtlas('campaign_menu_UI_assets'); + bgSprite = new FlxSprite(0, 56); + bgSprite.antialiasing = ClientPrefs.globalAntialiasing; + + grpWeekText = new FlxTypedGroup(); + add(grpWeekText); + + var blackBarThingie:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 56, FlxColor.BLACK); + add(blackBarThingie); + + grpWeekCharacters = new FlxTypedGroup(); + + grpLocks = new FlxTypedGroup(); + add(grpLocks); + + #if desktop + // Updating Discord Rich Presence + DiscordClient.changePresence("In the Menus", null); + #end + + for (i in 0...WeekData.songsNames.length) + { + var weekThing:MenuItem = new MenuItem(0, bgSprite.y + 396, i); + weekThing.y += ((weekThing.height + 20) * i); + weekThing.targetY = i; + grpWeekText.add(weekThing); + + weekThing.screenCenter(X); + weekThing.antialiasing = ClientPrefs.globalAntialiasing; + // weekThing.updateHitbox(); + + // Needs an offset thingie + if (i < weekUnlocked.length && !weekUnlocked[i]) + { + var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x); + lock.frames = ui_tex; + lock.animation.addByPrefix('lock', 'lock'); + lock.animation.play('lock'); + lock.ID = i; + lock.antialiasing = ClientPrefs.globalAntialiasing; + grpLocks.add(lock); + } + } + + for (char in 0...3) + { + var weekCharacterThing:MenuCharacter = new MenuCharacter((FlxG.width * 0.25) * (1 + char) - 150, weekCharacters[0][char]); + weekCharacterThing.y += 70; + weekCharacterThing.antialiasing = ClientPrefs.globalAntialiasing; + grpWeekCharacters.add(weekCharacterThing); + } + + difficultySelectors = new FlxGroup(); + add(difficultySelectors); + + leftArrow = new FlxSprite(grpWeekText.members[0].x + grpWeekText.members[0].width + 10, grpWeekText.members[0].y + 10); + leftArrow.frames = ui_tex; + leftArrow.animation.addByPrefix('idle', "arrow left"); + leftArrow.animation.addByPrefix('press', "arrow push left"); + leftArrow.animation.play('idle'); + leftArrow.antialiasing = ClientPrefs.globalAntialiasing; + difficultySelectors.add(leftArrow); + + sprDifficultyGroup = new FlxTypedGroup(); + add(sprDifficultyGroup); + + + for (i in 0...CoolUtil.difficultyStuff.length) { + var sprDifficulty:FlxSprite = new FlxSprite(leftArrow.x + 60, leftArrow.y).loadGraphic(Paths.image('menudifficulties/' + CoolUtil.difficultyStuff[i][0].toLowerCase())); + sprDifficulty.x += (308 - sprDifficulty.width) / 2; + sprDifficulty.ID = i; + sprDifficulty.antialiasing = ClientPrefs.globalAntialiasing; + sprDifficultyGroup.add(sprDifficulty); + } + changeDifficulty(); + + difficultySelectors.add(sprDifficultyGroup); + + rightArrow = new FlxSprite(leftArrow.x + 376, leftArrow.y); + rightArrow.frames = ui_tex; + rightArrow.animation.addByPrefix('idle', 'arrow right'); + rightArrow.animation.addByPrefix('press', "arrow push right", 24, false); + rightArrow.animation.play('idle'); + rightArrow.antialiasing = ClientPrefs.globalAntialiasing; + difficultySelectors.add(rightArrow); + + add(bgSprite); + add(grpWeekCharacters); + + var tracksSprite:FlxSprite = new FlxSprite(FlxG.width * 0.07, bgSprite.y + 435).loadGraphic(Paths.image('Menu_Tracks')); + tracksSprite.antialiasing = ClientPrefs.globalAntialiasing; + add(tracksSprite); + + txtTracklist = new FlxText(FlxG.width * 0.05, tracksSprite.y + 60, 0, "", 32); + txtTracklist.alignment = CENTER; + txtTracklist.font = rankText.font; + txtTracklist.color = 0xFFe55777; + add(txtTracklist); + // add(rankText); + add(scoreText); + add(txtWeekTitle); + + changeWeek(); + + super.create(); + } + + override function closeSubState() { + persistentUpdate = true; + changeWeek(); + super.closeSubState(); + } + + override function update(elapsed:Float) + { + // scoreText.setFormat('VCR OSD Mono', 32); + lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, CoolUtil.boundTo(elapsed * 30, 0, 1))); + if(Math.abs(intendedScore - lerpScore) < 10) lerpScore = intendedScore; + + scoreText.text = "WEEK SCORE:" + lerpScore; + + // FlxG.watch.addQuick('font', scoreText.font); + + difficultySelectors.visible = weekUnlocked[curWeek]; + + grpLocks.forEach(function(lock:FlxSprite) + { + lock.y = grpWeekText.members[lock.ID].y; + }); + + if (!movedBack && !selectedWeek) + { + if (controls.UI_UP_P) + { + changeWeek(-1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + if (controls.UI_DOWN_P) + { + changeWeek(1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + if (controls.UI_RIGHT) + rightArrow.animation.play('press') + else + rightArrow.animation.play('idle'); + + if (controls.UI_LEFT) + leftArrow.animation.play('press'); + else + leftArrow.animation.play('idle'); + + if (controls.UI_RIGHT_P) + changeDifficulty(1); + if (controls.UI_LEFT_P) + changeDifficulty(-1); + + if (controls.ACCEPT) + { + selectWeek(); + } + else if(controls.RESET) + { + persistentUpdate = false; + openSubState(new ResetScoreSubState('', curDifficulty, '', curWeek)); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + } + + if (controls.BACK && !movedBack && !selectedWeek) + { + FlxG.sound.play(Paths.sound('cancelMenu')); + movedBack = true; + MusicBeatState.switchState(new MainMenuState()); + } + + super.update(elapsed); + } + + var movedBack:Bool = false; + var selectedWeek:Bool = false; + var stopspamming:Bool = false; + + function selectWeek() + { + if (curWeek >= weekUnlocked.length || weekUnlocked[curWeek]) + { + if (stopspamming == false) + { + FlxG.sound.play(Paths.sound('confirmMenu')); + + grpWeekText.members[curWeek].startFlashing(); + grpWeekCharacters.members[1].animation.play('confirm'); + stopspamming = true; + } + + // We can't use Dynamic Array .copy() because that crashes HTML5, here's a workaround. + var songArray:Array = []; + var leWeek:Array = WeekData.songsNames[curWeek]; + for (i in 0...leWeek.length) { + songArray.push(leWeek[i]); + } + + // I'm a motherfucking genious + PlayState.storyPlaylist = songArray; + PlayState.isStoryMode = true; + selectedWeek = true; + + var diffic = CoolUtil.difficultyStuff[curDifficulty][1]; + if(diffic == null) diffic = ''; + + PlayState.storyDifficulty = curDifficulty; + + PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + diffic, PlayState.storyPlaylist[0].toLowerCase()); + PlayState.storyWeek = curWeek; + PlayState.campaignScore = 0; + PlayState.campaignMisses = 0; + new FlxTimer().start(1, function(tmr:FlxTimer) + { + LoadingState.loadAndSwitchState(new PlayState(), true); + FreeplayState.destroyFreeplayVocals(); + }); + } + } + + function changeDifficulty(change:Int = 0):Void + { + curDifficulty += change; + + if (curDifficulty < 0) + curDifficulty = CoolUtil.difficultyStuff.length-1; + if (curDifficulty >= CoolUtil.difficultyStuff.length) + curDifficulty = 0; + + sprDifficultyGroup.forEach(function(spr:FlxSprite) { + spr.visible = false; + if(curDifficulty == spr.ID) { + spr.visible = true; + spr.alpha = 0; + spr.y = leftArrow.y - 15; + FlxTween.tween(spr, {y: leftArrow.y + 15, alpha: 1}, 0.07); + } + }); + + #if !switch + intendedScore = Highscore.getWeekScore(WeekData.getWeekNumber(curWeek), curDifficulty); + #end + } + + var lerpScore:Int = 0; + var intendedScore:Int = 0; + + function changeWeek(change:Int = 0):Void + { + curWeek += change; + + if (curWeek >= WeekData.songsNames.length) + curWeek = 0; + if (curWeek < 0) + curWeek = WeekData.songsNames.length - 1; + + var leName:String = ''; + if(curWeek < weekNames.length) { + leName = weekNames[curWeek]; + } + + txtWeekTitle.text = leName.toUpperCase(); + txtWeekTitle.x = FlxG.width - (txtWeekTitle.width + 10); + + var bullShit:Int = 0; + + for (item in grpWeekText.members) + { + item.targetY = bullShit - curWeek; + if (item.targetY == Std.int(0) && weekUnlocked[curWeek]) + item.alpha = 1; + else + item.alpha = 0.6; + bullShit++; + } + + var assetName:String = weekBackground[0]; + if(curWeek < weekBackground.length) assetName = weekBackground[curWeek]; + + bgSprite.loadGraphic(Paths.image('menubackgrounds/menu_' + assetName)); + updateText(); + } + + function updateText() + { + var weekArray:Array = weekCharacters[0]; + if(curWeek < weekCharacters.length) weekArray = weekCharacters[curWeek]; + + for (i in 0...grpWeekCharacters.length) { + grpWeekCharacters.members[i].changeCharacter(weekArray[i]); + } + + var stringThing:Array = WeekData.songsNames[curWeek]; + + txtTracklist.text = ''; + for (i in 0...stringThing.length) + { + txtTracklist.text += stringThing[i] + '\n'; + } + + txtTracklist.text = StringTools.replace(txtTracklist.text, '-', ' '); + txtTracklist.text = txtTracklist.text.toUpperCase(); + + txtTracklist.screenCenter(X); + txtTracklist.x -= FlxG.width * 0.35; + + #if !switch + intendedScore = Highscore.getWeekScore(WeekData.getWeekNumber(curWeek), curDifficulty); + #end + } +} + +class OptionsState extends MusicBeatState +{ + var options:Array = ['Notes', 'Controls', 'Preferences']; + private var grpOptions:FlxTypedGroup; + private static var curSelected:Int = 0; + public static var menuBG:FlxSprite; + public static var vin:FlxSprite; + + override function create() { + #if desktop + DiscordClient.changePresence("Options Menu", null); + #end + + FlxG.sound.playMusic(Paths.music("configurator"), 1, true); + + menuBG = new FlxSprite().loadGraphic(Paths.image('menuDesat')); + menuBG.color = 0xFFea71fd; + menuBG.setGraphicSize(Std.int(menuBG.width * 1.1)); + menuBG.updateHitbox(); + menuBG.screenCenter(); + menuBG.antialiasing = ClientPrefs.globalAntialiasing; + add(menuBG); + + vin = new FlxSprite().loadGraphic(Paths.image('vin')); + + vin.setGraphicSize(Std.int(vin.width * 1)); + vin.updateHitbox(); + vin.screenCenter(); + vin.antialiasing = ClientPrefs.globalAntialiasing; + + + grpOptions = new FlxTypedGroup(); + add(grpOptions); + + for (i in 0...options.length) + { + var optionText:Alphabet = new Alphabet(0, 0, options[i], true, false); + optionText.screenCenter(); + optionText.y += (100 * (i - (options.length / 2))) + 50; + grpOptions.add(optionText); + } + changeSelection(); + + add(vin); + super.create(); + } + + override function closeSubState() { + super.closeSubState(); + ClientPrefs.saveSettings(); + changeSelection(); + } + + override function update(elapsed:Float) { + super.update(elapsed); + + if (controls.UI_UP_P) { + changeSelection(-1); + } + if (controls.UI_DOWN_P) { + changeSelection(1); + } + + if (controls.BACK) { + FlxG.sound.play(Paths.sound('cancelMenu')); + FlxG.sound.music.stop(); + MusicBeatState.switchState(new MainMenuState()); + } + + if (controls.ACCEPT) { + for (item in grpOptions.members) { + item.alpha = 0; + } + + switch(options[curSelected]) { + case 'Notes': + openSubState(new NotesSubstate()); + + case 'Controls': + openSubState(new ControlsSubstate()); + + case 'Preferences': + openSubState(new PreferencesSubstate()); + } + } + } + + function changeSelection(change:Int = 0) { + curSelected += change; + if (curSelected < 0) + curSelected = options.length - 1; + if (curSelected >= options.length) + curSelected = 0; + + var bullShit:Int = 0; + + for (item in grpOptions.members) { + item.targetY = bullShit - curSelected; + bullShit++; + + item.alpha = 0.6; + if (item.targetY == 0) { + item.alpha = 1; + } + } + } +} + + + +class NotesSubstate extends MusicBeatSubstate +{ + private static var curSelected:Int = 0; + private static var typeSelected:Int = 0; + private var grpNumbers:FlxTypedGroup; + private var grpNotes:FlxTypedGroup; + private var shaderArray:Array = []; + var curValue:Float = 0; + var holdTime:Float = 0; + var hsvText:Alphabet; + var nextAccept:Int = 5; + + var posX = 250; + public function new() { + super(); + + grpNotes = new FlxTypedGroup(); + add(grpNotes); + grpNumbers = new FlxTypedGroup(); + add(grpNumbers); + + for (i in 0...ClientPrefs.arrowHSV.length) { + var yPos:Float = (165 * i) + 35; + for (j in 0...3) { + var optionText:Alphabet = new Alphabet(0, yPos, Std.string(ClientPrefs.arrowHSV[i][j])); + optionText.x = posX + (225 * j) + 100 - ((optionText.lettersArray.length * 90) / 2); + grpNumbers.add(optionText); + } + + var note:FlxSprite = new FlxSprite(posX - 70, yPos); + note.frames = Paths.getSparrowAtlas('NOTE_assets'); + switch(i) { + case 0: + note.animation.addByPrefix('idle', 'purple0'); + case 1: + note.animation.addByPrefix('idle', 'blue0'); + case 2: + note.animation.addByPrefix('idle', 'green0'); + case 3: + note.animation.addByPrefix('idle', 'red0'); + } + note.animation.play('idle'); + note.antialiasing = ClientPrefs.globalAntialiasing; + grpNotes.add(note); + + var newShader:ColorSwap = new ColorSwap(); + note.shader = newShader.shader; + newShader.hue = ClientPrefs.arrowHSV[i][0] / 360; + newShader.saturation = ClientPrefs.arrowHSV[i][1] / 100; + newShader.brightness = ClientPrefs.arrowHSV[i][2] / 100; + shaderArray.push(newShader); + } + hsvText = new Alphabet(0, 0, "Hue Saturation Brightness", false, false, 0, 0.65); + add(hsvText); + changeSelection(); + } + + var changingNote:Bool = false; + var hsvTextOffsets:Array = [240, 90]; + override function update(elapsed:Float) { + if(changingNote) { + if(holdTime < 0.5) { + if(controls.UI_LEFT_P) { + updateValue(-1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } else if(controls.UI_RIGHT_P) { + updateValue(1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } else if(controls.RESET) { + resetValue(curSelected, typeSelected); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if(controls.UI_LEFT_R || controls.UI_RIGHT_R) { + holdTime = 0; + } else if(controls.UI_LEFT || controls.UI_RIGHT) { + holdTime += elapsed; + } + } else { + var add:Float = 90; + switch(typeSelected) { + case 1 | 2: add = 50; + } + if(controls.UI_LEFT) { + updateValue(elapsed * -add); + } else if(controls.UI_RIGHT) { + updateValue(elapsed * add); + } + if(controls.UI_LEFT_R || controls.UI_RIGHT_R) { + FlxG.sound.play(Paths.sound('scrollMenu')); + holdTime = 0; + } + } + } else { + if (controls.UI_UP_P) { + changeSelection(-1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if (controls.UI_DOWN_P) { + changeSelection(1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if (controls.UI_LEFT_P) { + changeType(-1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if (controls.UI_RIGHT_P) { + changeType(1); + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if(controls.RESET) { + for (i in 0...3) { + resetValue(curSelected, i); + } + FlxG.sound.play(Paths.sound('scrollMenu')); + } + if (controls.ACCEPT && nextAccept <= 0) { + FlxG.sound.play(Paths.sound('scrollMenu')); + changingNote = true; + holdTime = 0; + for (i in 0...grpNumbers.length) { + var item = grpNumbers.members[i]; + item.alpha = 0; + if ((curSelected * 3) + typeSelected == i) { + item.alpha = 1; + } + } + for (i in 0...grpNotes.length) { + var item = grpNotes.members[i]; + item.alpha = 0; + if (curSelected == i) { + item.alpha = 1; + } + } + super.update(elapsed); + return; + } + } + + var lerpVal:Float = CoolUtil.boundTo(elapsed * 9.6, 0, 1); + for (i in 0...grpNotes.length) { + var item = grpNotes.members[i]; + var intendedPos:Float = posX - 70; + if (curSelected == i) { + item.x = FlxMath.lerp(item.x, intendedPos + 100, lerpVal); + } else { + item.x = FlxMath.lerp(item.x, intendedPos, lerpVal); + } + for (j in 0...3) { + var item2 = grpNumbers.members[(i * 3) + j]; + item2.x = item.x + 265 + (225 * (j % 3)) - (30 * item2.lettersArray.length) / 2; + if(ClientPrefs.arrowHSV[i][j] < 0) { + item2.x -= 20; + } + } + + if(curSelected == i) { + hsvText.setPosition(item.x + hsvTextOffsets[0], item.y - hsvTextOffsets[1]); + } + } + + if (controls.BACK || (changingNote && controls.ACCEPT)) { + changeSelection(); + if(!changingNote) { + grpNumbers.forEachAlive(function(spr:Alphabet) { + spr.alpha = 0; + }); + grpNotes.forEachAlive(function(spr:FlxSprite) { + spr.alpha = 0; + }); + close(); + } + changingNote = false; + FlxG.sound.play(Paths.sound('cancelMenu')); + } + + if(nextAccept > 0) { + nextAccept -= 1; + } + super.update(elapsed); + } + + function changeSelection(change:Int = 0) { + curSelected += change; + if (curSelected < 0) + curSelected = ClientPrefs.arrowHSV.length-1; + if (curSelected >= ClientPrefs.arrowHSV.length) + curSelected = 0; + + curValue = ClientPrefs.arrowHSV[curSelected][typeSelected]; + updateValue(); + + for (i in 0...grpNumbers.length) { + var item = grpNumbers.members[i]; + item.alpha = 0.6; + if ((curSelected * 3) + typeSelected == i) { + item.alpha = 1; + } + } + for (i in 0...grpNotes.length) { + var item = grpNotes.members[i]; + item.alpha = 0.6; + item.scale.set(1, 1); + if (curSelected == i) { + item.alpha = 1; + item.scale.set(1.2, 1.2); + hsvText.setPosition(item.x + hsvTextOffsets[0], item.y - hsvTextOffsets[1]); + } + } + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + function changeType(change:Int = 0) { + typeSelected += change; + if (typeSelected < 0) + typeSelected = 2; + if (typeSelected > 2) + typeSelected = 0; + + curValue = ClientPrefs.arrowHSV[curSelected][typeSelected]; + updateValue(); + + for (i in 0...grpNumbers.length) { + var item = grpNumbers.members[i]; + item.alpha = 0.6; + if ((curSelected * 3) + typeSelected == i) { + item.alpha = 1; + } + } + } + + function resetValue(selected:Int, type:Int) { + curValue = 0; + ClientPrefs.arrowHSV[selected][type] = 0; + switch(type) { + case 0: shaderArray[selected].hue = 0; + case 1: shaderArray[selected].saturation = 0; + case 2: shaderArray[selected].brightness = 0; + } + grpNumbers.members[(selected * 3) + type].changeText('0'); + } + function updateValue(change:Float = 0) { + curValue += change; + var roundedValue:Int = Math.round(curValue); + var max:Float = 180; + switch(typeSelected) { + case 1 | 2: max = 100; + } + + if(roundedValue < -max) { + curValue = -max; + } else if(roundedValue > max) { + curValue = max; + } + roundedValue = Math.round(curValue); + ClientPrefs.arrowHSV[curSelected][typeSelected] = roundedValue; + + switch(typeSelected) { + case 0: shaderArray[curSelected].hue = roundedValue / 360; + case 1: shaderArray[curSelected].saturation = roundedValue / 100; + case 2: shaderArray[curSelected].brightness = roundedValue / 100; + } + grpNumbers.members[(curSelected * 3) + typeSelected].changeText(Std.string(roundedValue)); + } +} + + + +class ControlsSubstate extends MusicBeatSubstate { + private static var curSelected:Int = 1; + private static var curAlt:Bool = false; + + private static var defaultKey:String = 'Reset to Default Keys'; + + var optionShit:Array = [ + 'NOTES', + ClientPrefs.keyBinds[0][1], + ClientPrefs.keyBinds[1][1], + ClientPrefs.keyBinds[2][1], + ClientPrefs.keyBinds[3][1], + '', + 'UI', + ClientPrefs.keyBinds[4][1], + ClientPrefs.keyBinds[5][1], + ClientPrefs.keyBinds[6][1], + ClientPrefs.keyBinds[7][1], + '', + ClientPrefs.keyBinds[8][1], + ClientPrefs.keyBinds[9][1], + ClientPrefs.keyBinds[10][1], + ClientPrefs.keyBinds[11][1], + '', + defaultKey]; + + private var grpOptions:FlxTypedGroup; + private var grpInputs:Array = []; + private var controlArray:Array = []; + var rebindingKey:Int = -1; + var nextAccept:Int = 5; + + public function new() { + super(); + grpOptions = new FlxTypedGroup(); + add(grpOptions); + + controlArray = ClientPrefs.lastControls.copy(); + for (i in 0...optionShit.length) { + var isCentered:Bool = false; + var isDefaultKey:Bool = (optionShit[i] == defaultKey); + if(unselectableCheck(i, true)) { + isCentered = true; + } + + var optionText:Alphabet = new Alphabet(0, (10 * i), optionShit[i], (!isCentered || isDefaultKey), false); + optionText.isMenuItem = true; + if(isCentered) { + optionText.screenCenter(X); + optionText.forceX = optionText.x; + optionText.yAdd = -55; + } else { + optionText.forceX = 200; + } + optionText.yMult = 60; + optionText.targetY = i; + grpOptions.add(optionText); + + if(!isCentered) { + addBindTexts(optionText); + } + } + changeSelection(); + } + + var leaving:Bool = false; + var bindingTime:Float = 0; + override function update(elapsed:Float) { + if(rebindingKey < 0) { + if (controls.UI_UP_P) { + changeSelection(-1); + } + if (controls.UI_DOWN_P) { + changeSelection(1); + } + if (controls.UI_LEFT_P || controls.UI_RIGHT_P) { + changeAlt(); + } + + if (controls.BACK) { + ClientPrefs.reloadControls(controlArray); + grpOptions.forEachAlive(function(spr:Alphabet) { + spr.alpha = 0; + }); + for (i in 0...grpInputs.length) { + var spr:AttachedText = grpInputs[i]; + if(spr != null) { + spr.alpha = 0; + } + } + close(); + FlxG.sound.play(Paths.sound('cancelMenu')); + } + + if(controls.ACCEPT && nextAccept <= 0) { + if(optionShit[curSelected] == defaultKey) { + controlArray = ClientPrefs.defaultKeys.copy(); + reloadKeys(); + changeSelection(); + FlxG.sound.play(Paths.sound('confirmMenu')); + } else { + bindingTime = 0; + rebindingKey = getSelectedKey(); + if(rebindingKey > -1) { + grpInputs[rebindingKey].visible = false; + FlxG.sound.play(Paths.sound('scrollMenu')); + } else { + FlxG.log.warn('Error! No input found/badly configured'); + FlxG.sound.play(Paths.sound('cancelMenu')); + } + } + } + } else { + var keyPressed:Int = FlxG.keys.firstJustPressed(); + if (keyPressed > -1) { + controlArray[rebindingKey] = keyPressed; + var opposite:Int = rebindingKey + (rebindingKey % 2 == 1 ? -1 : 1); + trace('Rebinded key with ID: ' + rebindingKey + ', Opposite is: ' + opposite); + if(controlArray[opposite] == controlArray[rebindingKey]) { + controlArray[opposite] = NONE; + } + + reloadKeys(); + FlxG.sound.play(Paths.sound('confirmMenu')); + rebindingKey = -1; + } + + bindingTime += elapsed; + if(bindingTime > 5) { + grpInputs[rebindingKey].visible = true; + FlxG.sound.play(Paths.sound('scrollMenu')); + rebindingKey = -1; + bindingTime = 0; + } + } + + if(nextAccept > 0) { + nextAccept -= 1; + } + super.update(elapsed); + } + + function changeSelection(change:Int = 0) { + do { + curSelected += change; + if (curSelected < 0) + curSelected = optionShit.length - 1; + if (curSelected >= optionShit.length) + curSelected = 0; + } while(unselectableCheck(curSelected)); + + var bullShit:Int = 0; + + for (i in 0...grpInputs.length) { + grpInputs[i].alpha = 0.6; + } + + for (item in grpOptions.members) { + item.targetY = bullShit - curSelected; + bullShit++; + + if(!unselectableCheck(bullShit-1)) { + item.alpha = 0.6; + if (item.targetY == 0) { + item.alpha = 1; + for (i in 0...grpInputs.length) { + if(grpInputs[i].sprTracker == item && grpInputs[i].isAlt == curAlt) { + grpInputs[i].alpha = 1; + } + } + } + } + } + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + function changeAlt() { + curAlt = !curAlt; + for (i in 0...grpInputs.length) { + if(grpInputs[i].sprTracker == grpOptions.members[curSelected]) { + grpInputs[i].alpha = 0.6; + if(grpInputs[i].isAlt == curAlt) { + grpInputs[i].alpha = 1; + } + } + } + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + private function unselectableCheck(num:Int, ?checkDefaultKey:Bool = false):Bool { + if(optionShit[num] == defaultKey) { + return checkDefaultKey; + } + + for (i in 0...ClientPrefs.keyBinds.length) { + if(ClientPrefs.keyBinds[i][1] == optionShit[num]) { + return false; + } + } + return true; + } + + private function getSelectedKey():Int { + var altValue:Int = (curAlt ? 1 : 0); + for (i in 0...ClientPrefs.keyBinds.length) { + if(ClientPrefs.keyBinds[i][1] == optionShit[curSelected]) { + return i*2 + altValue; + } + } + return -1; + } + + private function addBindTexts(optionText:Alphabet) { + var text1 = new AttachedText(InputFormatter.getKeyName(controlArray[grpInputs.length]), 400, -55); + text1.setPosition(optionText.x + 400, optionText.y - 55); + text1.sprTracker = optionText; + grpInputs.push(text1); + add(text1); + + var text2 = new AttachedText(InputFormatter.getKeyName(controlArray[grpInputs.length]), 650, -55); + text2.setPosition(optionText.x + 650, optionText.y - 55); + text2.sprTracker = optionText; + text2.isAlt = true; + grpInputs.push(text2); + add(text2); + } + + function reloadKeys() { + while(grpInputs.length > 0) { + var item:AttachedText = grpInputs[0]; + grpInputs.remove(item); + remove(item); + } + + for (i in 0...grpOptions.length) { + if(!unselectableCheck(i, true)) { + addBindTexts(grpOptions.members[i]); + } + } + + + var bullShit:Int = 0; + for (i in 0...grpInputs.length) { + grpInputs[i].alpha = 0.6; + } + + for (item in grpOptions.members) { + item.targetY = bullShit - curSelected; + bullShit++; + + if(!unselectableCheck(bullShit-1)) { + item.alpha = 0.6; + if (item.targetY == 0) { + item.alpha = 1; + for (i in 0...grpInputs.length) { + if(grpInputs[i].sprTracker == item && grpInputs[i].isAlt == curAlt) { + grpInputs[i].alpha = 1; + } + } + } + } + } + } +} + + + +class PreferencesSubstate extends MusicBeatSubstate +{ + private static var curSelected:Int = 0; + static var unselectableOptions:Array = [ + 'GRAPHICS', + 'GAMEPLAY' + ]; + static var noCheckbox:Array = [ + 'Framerate', + 'Note Delay' + ]; + + static var options:Array = [ + 'GRAPHICS', + 'Low Quality', + 'Anti-Aliasing', + 'Persistent Cached Data', + #if !html5 + 'Framerate', //Apparently 120FPS isn't correctly supported on Browser? Probably it has some V-Sync shit enabled by default, idk + #end + 'GAMEPLAY', + 'Downscroll', + 'Ghost Tapping', + 'Note Delay', + 'Note Splashes', + 'Hide HUD', + 'Flashing Lights', + 'Camera Zooms' + #if !mobile + ,'FPS Counter' + #end + ]; + + private var grpOptions:FlxTypedGroup; + private var checkboxArray:Array = []; + private var checkboxNumber:Array = []; + private var grpTexts:FlxTypedGroup; + private var textNumber:Array = []; + + private var characterLayer:FlxTypedGroup; + private var showCharacter:Character = null; + private var descText:FlxText; + + public function new() + { + super(); + characterLayer = new FlxTypedGroup(); + add(characterLayer); + + grpOptions = new FlxTypedGroup(); + add(grpOptions); + + grpTexts = new FlxTypedGroup(); + add(grpTexts); + + for (i in 0...options.length) + { + var isCentered:Bool = unselectableCheck(i); + var optionText:Alphabet = new Alphabet(0, 70 * i, options[i], false, false); + optionText.isMenuItem = true; + if(isCentered) { + optionText.screenCenter(X); + optionText.forceX = optionText.x; + } else { + optionText.x += 300; + optionText.forceX = 300; + } + optionText.yMult = 90; + optionText.targetY = i; + grpOptions.add(optionText); + + if(!isCentered) { + var useCheckbox:Bool = true; + for (j in 0...noCheckbox.length) { + if(options[i] == noCheckbox[j]) { + useCheckbox = false; + break; + } + } + + if(useCheckbox) { + var checkbox:CheckboxThingie = new CheckboxThingie(optionText.x - 105, optionText.y, false); + checkbox.sprTracker = optionText; + checkboxArray.push(checkbox); + checkboxNumber.push(i); + add(checkbox); + } else { + var valueText:AttachedText = new AttachedText('0', optionText.width + 80); + valueText.sprTracker = optionText; + grpTexts.add(valueText); + textNumber.push(i); + } + } + } + + descText = new FlxText(50, 600, 1180, "", 32); + descText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, CENTER, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); + descText.scrollFactor.set(); + descText.borderSize = 2.4; + add(descText); + + for (i in 0...options.length) { + if(!unselectableCheck(i)) { + curSelected = i; + break; + } + } + changeSelection(); + reloadValues(); + } + + var nextAccept:Int = 5; + var holdTime:Float = 0; + override function update(elapsed:Float) + { + if (controls.UI_UP_P) + { + changeSelection(-1); + } + if (controls.UI_DOWN_P) + { + changeSelection(1); + } + + if (controls.BACK) { + grpOptions.forEachAlive(function(spr:Alphabet) { + spr.alpha = 0; + }); + grpTexts.forEachAlive(function(spr:AttachedText) { + spr.alpha = 0; + }); + for (i in 0...checkboxArray.length) { + var spr:CheckboxThingie = checkboxArray[i]; + if(spr != null) { + spr.alpha = 0; + } + } + if(showCharacter != null) { + showCharacter.alpha = 0; + } + descText.alpha = 0; + close(); + FlxG.sound.play(Paths.sound('cancelMenu')); + } + + var usesCheckbox = true; + for (i in 0...noCheckbox.length) { + if(options[curSelected] == noCheckbox[i]) { + usesCheckbox = false; + break; + } + } + + if(usesCheckbox) { + if(controls.ACCEPT && nextAccept <= 0) { + switch(options[curSelected]) { + case 'FPS Counter': + ClientPrefs.showFPS = !ClientPrefs.showFPS; + if(Main.fpsVar != null) + Main.fpsVar.visible = ClientPrefs.showFPS; + + case 'Low Quality': + ClientPrefs.lowQuality = !ClientPrefs.lowQuality; + + case 'Anti-Aliasing': + ClientPrefs.globalAntialiasing = !ClientPrefs.globalAntialiasing; + showCharacter.antialiasing = ClientPrefs.globalAntialiasing; + for (item in grpOptions) { + item.antialiasing = ClientPrefs.globalAntialiasing; + } + for (i in 0...checkboxArray.length) { + var spr:CheckboxThingie = checkboxArray[i]; + if(spr != null) { + spr.antialiasing = ClientPrefs.globalAntialiasing; + } + } + OptionsState.menuBG.antialiasing = ClientPrefs.globalAntialiasing; + + case 'Note Splashes': + ClientPrefs.noteSplashes = !ClientPrefs.noteSplashes; + + case 'Flashing Lights': + ClientPrefs.flashing = !ClientPrefs.flashing; + + case 'Violence': + ClientPrefs.violence = !ClientPrefs.violence; + + case 'Swearing': + ClientPrefs.cursing = !ClientPrefs.cursing; + + case 'Downscroll': + ClientPrefs.downScroll = !ClientPrefs.downScroll; + + case 'Middlescroll': + ClientPrefs.middleScroll = !ClientPrefs.middleScroll; + + case 'Ghost Tapping': + ClientPrefs.ghostTapping = !ClientPrefs.ghostTapping; + + case 'Camera Zooms': + ClientPrefs.camZooms = !ClientPrefs.camZooms; + + case 'Hide HUD': + ClientPrefs.hideHud = !ClientPrefs.hideHud; + + case 'Persistent Cached Data': + ClientPrefs.imagesPersist = !ClientPrefs.imagesPersist; + FlxGraphic.defaultPersist = ClientPrefs.imagesPersist; + } + FlxG.sound.play(Paths.sound('scrollMenu')); + reloadValues(); + } + } else { + if(controls.UI_LEFT || controls.UI_RIGHT) { + var add:Int = controls.UI_LEFT ? -1 : 1; + if(holdTime > 0.5 || controls.UI_LEFT_P || controls.UI_RIGHT_P) + switch(options[curSelected]) { + case 'Framerate': + ClientPrefs.framerate += add; + if(ClientPrefs.framerate < 60) ClientPrefs.framerate = 60; + else if(ClientPrefs.framerate > 240) ClientPrefs.framerate = 240; + + if(ClientPrefs.framerate > FlxG.drawFramerate) { + FlxG.updateFramerate = ClientPrefs.framerate; + FlxG.drawFramerate = ClientPrefs.framerate; + } else { + FlxG.drawFramerate = ClientPrefs.framerate; + FlxG.updateFramerate = ClientPrefs.framerate; + } + case 'Note Delay': + var mult:Int = 1; + if(holdTime > 1.5) { //Double speed after 1.5 seconds holding + mult = 2; + } + ClientPrefs.noteOffset += add * mult; + if(ClientPrefs.noteOffset < 0) ClientPrefs.noteOffset = 0; + else if(ClientPrefs.noteOffset > 500) ClientPrefs.noteOffset = 500; + } + reloadValues(); + + if(holdTime <= 0) FlxG.sound.play(Paths.sound('scrollMenu')); + holdTime += elapsed; + } else { + holdTime = 0; + } + } + + if(showCharacter != null && showCharacter.animation.curAnim.finished) { + showCharacter.dance(); + } + + if(nextAccept > 0) { + nextAccept -= 1; + } + super.update(elapsed); + } + + function changeSelection(change:Int = 0) + { + do { + curSelected += change; + if (curSelected < 0) + curSelected = options.length - 1; + if (curSelected >= options.length) + curSelected = 0; + } while(unselectableCheck(curSelected)); + + var daText:String = ''; + switch(options[curSelected]) { + case 'Framerate': + daText = "Pretty self explanatory, isn't it?\nDefault value is 60."; + case 'Note Delay': + daText = "Changes how late a note is spawned.\nUseful for preventing audio lag from wireless earphones."; + case 'FPS Counter': + daText = "If unchecked, hides FPS Counter."; + case 'Low Quality': + daText = "If checked, disables some background details,\ndecreases loading times and improves performance."; + case 'Persistent Cached Data': + daText = "If checked, images loaded will stay in memory\nuntil the game is closed, this increases memory usage,\nbut basically makes reloading times instant."; + case 'Anti-Aliasing': + daText = "If unchecked, disables anti-aliasing, increases performance\nat the cost of the graphics not looking as smooth."; + case 'Downscroll': + daText = "If checked, notes go Down instead of Up, simple enough."; + case 'Middlescroll': + daText = "If checked, hides Opponent's notes and your notes get centered."; + case 'Ghost Tapping': + daText = "If checked, you won't get misses from pressing keys\nwhile there are no notes able to be hit."; + case 'Swearing': + daText = "If unchecked, your mom won't be angry at you."; + case 'Violence': + daText = "If unchecked, you won't get disgusted as frequently."; + case 'Note Splashes': + daText = "If unchecked, hitting \"Sick!\" notes won't show particles."; + case 'Flashing Lights': + daText = "Uncheck this if you're sensitive to flashing lights!"; + case 'Camera Zooms': + daText = "If unchecked, the camera won't zoom in on a beat hit."; + case 'Hide HUD': + daText = "If checked, hides most HUD elements."; + } + descText.text = daText; + + var bullShit:Int = 0; + + for (item in grpOptions.members) { + item.targetY = bullShit - curSelected; + bullShit++; + + if(!unselectableCheck(bullShit-1)) { + item.alpha = 0.6; + if (item.targetY == 0) { + item.alpha = 1; + } + + for (j in 0...checkboxArray.length) { + var tracker:FlxSprite = checkboxArray[j].sprTracker; + if(tracker == item) { + checkboxArray[j].alpha = item.alpha; + break; + } + } + } + } + for (i in 0...grpTexts.members.length) { + var text:AttachedText = grpTexts.members[i]; + if(text != null) { + text.alpha = 0.6; + if(textNumber[i] == curSelected) { + text.alpha = 1; + } + } + } + + if(options[curSelected] == 'Anti-Aliasing') { + if(showCharacter == null) { + showCharacter = new Character(840, 170, 'bf', true); + showCharacter.setGraphicSize(Std.int(showCharacter.width * 0.8)); + showCharacter.updateHitbox(); + showCharacter.dance(); + characterLayer.add(showCharacter); + } + } else if(showCharacter != null) { + characterLayer.clear(); + showCharacter = null; + } + FlxG.sound.play(Paths.sound('scrollMenu')); + } + + function reloadValues() { + for (i in 0...checkboxArray.length) { + var checkbox:CheckboxThingie = checkboxArray[i]; + if(checkbox != null) { + var daValue:Bool = false; + switch(options[checkboxNumber[i]]) { + case 'FPS Counter': + daValue = ClientPrefs.showFPS; + case 'Low Quality': + daValue = ClientPrefs.lowQuality; + case 'Anti-Aliasing': + daValue = ClientPrefs.globalAntialiasing; + case 'Note Splashes': + daValue = ClientPrefs.noteSplashes; + case 'Flashing Lights': + daValue = ClientPrefs.flashing; + case 'Downscroll': + daValue = ClientPrefs.downScroll; + case 'Middlescroll': + daValue = ClientPrefs.middleScroll; + case 'Ghost Tapping': + daValue = ClientPrefs.ghostTapping; + case 'Swearing': + daValue = ClientPrefs.cursing; + case 'Violence': + daValue = ClientPrefs.violence; + case 'Camera Zooms': + daValue = ClientPrefs.camZooms; + case 'Hide HUD': + daValue = ClientPrefs.hideHud; + case 'Persistent Cached Data': + daValue = ClientPrefs.imagesPersist; + } + checkbox.daValue = daValue; + } + } + for (i in 0...grpTexts.members.length) { + var text:AttachedText = grpTexts.members[i]; + if(text != null) { + var daText:String = ''; + switch(options[textNumber[i]]) { + case 'Framerate': + daText = '' + ClientPrefs.framerate; + case 'Note Delay': + daText = ClientPrefs.noteOffset + 'ms'; + } + var lastTracker:FlxSprite = text.sprTracker; + text.sprTracker = null; + text.changeText(daText); + text.sprTracker = lastTracker; + } + } + } + + private function unselectableCheck(num:Int):Bool { + for (i in 0...unselectableOptions.length) { + if(options[num] == unselectableOptions[i]) { + return true; + } + } + return options[num] == ''; + } +} \ No newline at end of file diff --git a/source/GameOverSubstate.hx b/source/GameOverSubstate.hx index 2ec77c5..2b942e3 100644 --- a/source/GameOverSubstate.hx +++ b/source/GameOverSubstate.hx @@ -9,6 +9,9 @@ import flixel.util.FlxColor; import flixel.util.FlxTimer; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; +// This used for working all-in-one script ":) - Xale +import GameMenuState; +// --- class GameOverSubstate extends MusicBeatSubstate { diff --git a/source/GlobalVideo.hx b/source/GlobalVideo.hx index 2c4f707..dba4ac7 100644 --- a/source/GlobalVideo.hx +++ b/source/GlobalVideo.hx @@ -92,4 +92,10 @@ class GlobalVideo return null; } +} + +class GameDimensions +{ + public static var width:Int = 1280; + public static var height:Int = 720; } \ No newline at end of file diff --git a/source/MainMenuState.hx b/source/OldMainMenuState.hx similarity index 98% rename from source/MainMenuState.hx rename to source/OldMainMenuState.hx index 503a141..99a5867 100644 --- a/source/MainMenuState.hx +++ b/source/OldMainMenuState.hx @@ -20,7 +20,7 @@ import lime.app.Application; using StringTools; -class MainMenuState extends MusicBeatState +class OldMainMenuState extends MusicBeatState { public static var psychEngineVersion:String = '0.3.1'; //This is also used for Discord RPC - ShadowMario public static var modEngineVersion:String = 'b0.0.2'; @@ -211,6 +211,7 @@ class MainMenuState extends MusicBeatState { spr.animation.play('idle'); spr.offset.y = 0; + spr.offset.x = -100; spr.updateHitbox(); if (spr.ID == curSelected) diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index 3a3a280..9677fcd 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -12,6 +12,9 @@ import flixel.text.FlxText; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxColor; +// This used for working all-in-one script ":) - Xale +import GameMenuState; +// --- class PauseSubState extends MusicBeatSubstate { diff --git a/source/PlayState.hx b/source/PlayState.hx index 110a2ce..a4bc6a2 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -3,6 +3,9 @@ package; #if desktop import Discord.DiscordClient; #end +// This used for working all-in-one script ":) - Xale +import GameMenuState; +// --- import Section.SwagSection; import Song.SwagSong; import WiggleEffect.WiggleEffectType; diff --git a/source/TitleState.hx b/source/TitleState.hx index 9e191c0..d19dfe0 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -4,6 +4,9 @@ package; import Discord.DiscordClient; import sys.thread.Thread; #end +// This used for working all-in-one script ":) - Xale +import GameMenuState; +// --- import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxState; @@ -12,7 +15,6 @@ import flixel.addons.display.FlxGridOverlay; import flixel.addons.transition.FlxTransitionSprite.GraphicTransTileDiamond; import flixel.addons.transition.FlxTransitionableState; import flixel.addons.transition.TransitionData; -//import flixel.graphics.FlxGraphic; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup; import flixel.input.gamepad.FlxGamepad; @@ -51,19 +53,22 @@ class TitleState extends MusicBeatState override public function create():Void { #if (polymod && !html5) - if (sys.FileSystem.exists('mods/')) { + if (sys.FileSystem.exists('mods/')) + { var folders:Array = []; - for (file in sys.FileSystem.readDirectory('mods/')) { + for (file in sys.FileSystem.readDirectory('mods/')) + { var path = haxe.io.Path.join(['mods/', file]); - if (sys.FileSystem.isDirectory(path)) { + if (sys.FileSystem.isDirectory(path)) + { folders.push(file); } } - if(folders.length > 0) { + if(folders.length > 0) + { polymod.Polymod.init({modRoot: "mods", dirs: folders}); } } - //Gonna finish this later, probably #end FlxG.game.focusLostFramerate = 60; FlxG.sound.muteKeys = muteKeys; @@ -73,9 +78,6 @@ class TitleState extends MusicBeatState PlayerSettings.init(); curWacky = FlxG.random.getObject(getIntroTextShit()); - - // DEBUG BULLSHIT - swagShader = new ColorSwap(); super.create(); @@ -86,32 +88,26 @@ class TitleState extends MusicBeatState if (FlxG.save.data.weekUnlocked != null) { - // FIX LATER!!! - // WEEK UNLOCK PROGRESSION!! - // StoryMenuState.weekUnlocked = FlxG.save.data.weekUnlocked; - if (StoryMenuState.weekUnlocked.length < 4) StoryMenuState.weekUnlocked.insert(0, true); - // QUICK PATCH OOPS! if (!StoryMenuState.weekUnlocked[0]) StoryMenuState.weekUnlocked[0] = true; } FlxG.mouse.visible = false; - #if FREEPLAY - MusicBeatState.switchState(new FreeplayState()); - #elseif CHARTING - MusicBeatState.switchState(new ChartingState()); - #else - if(FlxG.save.data.flashing == null && !FlashingState.leftState) { + if(FlxG.save.data.flashing == null && !FlashingState.leftState) + { FlxTransitionableState.skipNextTransIn = true; FlxTransitionableState.skipNextTransOut = true; MusicBeatState.switchState(new FlashingState()); - } else { + } + else + { #if desktop DiscordClient.initialize(); - Application.current.onExit.add (function (exitCode) { + Application.current.onExit.add (function (exitCode) + { DiscordClient.shutdown(); }); #end @@ -120,7 +116,6 @@ class TitleState extends MusicBeatState startIntro(); }); } - #end } var logoBl:FlxSprite; @@ -133,28 +128,8 @@ class TitleState extends MusicBeatState { if (!initialized) { - /*var diamond:FlxGraphic = FlxGraphic.fromClass(GraphicTransTileDiamond); - diamond.persist = true; - diamond.destroyOnNoUse = false; - - FlxTransitionableState.defaultTransIn = new TransitionData(FADE, FlxColor.BLACK, 1, new FlxPoint(0, -1), {asset: diamond, width: 32, height: 32}, - new FlxRect(-300, -300, FlxG.width * 1.8, FlxG.height * 1.8)); - FlxTransitionableState.defaultTransOut = new TransitionData(FADE, FlxColor.BLACK, 0.7, new FlxPoint(0, 1), - {asset: diamond, width: 32, height: 32}, new FlxRect(-300, -300, FlxG.width * 1.8, FlxG.height * 1.8)); - - transIn = FlxTransitionableState.defaultTransIn; - transOut = FlxTransitionableState.defaultTransOut;*/ - - // HAD TO MODIFY SOME BACKEND SHIT - // IF THIS PR IS HERE IF ITS ACCEPTED UR GOOD TO GO - // https://github.com/HaxeFlixel/flixel-addons/pull/348 - - // var music:FlxSound = new FlxSound(); - // music.loadStream(Paths.music('freakyMenu')); - // FlxG.sound.list.add(music); - // music.play(); - - if(FlxG.sound.music == null) { + if(FlxG.sound.music == null) + { FlxG.sound.playMusic(Paths.music('freakyMenu'), 0); FlxG.sound.music.fadeIn(4, 0, 0.7); @@ -165,9 +140,6 @@ class TitleState extends MusicBeatState persistentUpdate = true; var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK); - // bg.antialiasing = ClientPrefs.globalAntialiasing; - // bg.setGraphicSize(Std.int(bg.width * 0.6)); - // bg.updateHitbox(); add(bg); logoBl = new FlxSprite(-150, -100); @@ -176,8 +148,6 @@ class TitleState extends MusicBeatState logoBl.animation.addByPrefix('bump', 'logo bumpin', 24); logoBl.animation.play('bump'); logoBl.updateHitbox(); - // logoBl.screenCenter(); - // logoBl.color = FlxColor.BLACK; swagShader = new ColorSwap(); gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07); @@ -197,16 +167,11 @@ class TitleState extends MusicBeatState titleText.antialiasing = ClientPrefs.globalAntialiasing; titleText.animation.play('idle'); titleText.updateHitbox(); - // titleText.screenCenter(X); add(titleText); var logo:FlxSprite = new FlxSprite().loadGraphic(Paths.image('logo')); logo.screenCenter(); logo.antialiasing = ClientPrefs.globalAntialiasing; - // add(logo); - - // FlxTween.tween(logoBl, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG}); - // FlxTween.tween(logo, {y: logoBl.y + 50}, 0.6, {ease: FlxEase.quadInOut, type: PINGPONG, startDelay: 0.1}); credGroup = new FlxGroup(); add(credGroup); @@ -218,8 +183,6 @@ class TitleState extends MusicBeatState credTextShit = new Alphabet(0, 0, "", true); credTextShit.screenCenter(); - // credTextShit.alignment = CENTER; - credTextShit.visible = false; logoSpr = new FlxSprite(0, FlxG.height * 0.4).loadGraphic(Paths.image('titlelogo')); @@ -236,8 +199,6 @@ class TitleState extends MusicBeatState skipIntro(); else initialized = true; - - // credGroup.add(credTextShit); } function getIntroTextShit():Array> @@ -261,7 +222,6 @@ class TitleState extends MusicBeatState { if (FlxG.sound.music != null) Conductor.songPosition = FlxG.sound.music.time; - // FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude); if (FlxG.keys.justPressed.F) { @@ -303,14 +263,12 @@ class TitleState extends MusicBeatState FlxTween.tween(FlxG.camera, {y: FlxG.height}, 2, {ease: FlxEase.expoIn, startDelay: -0.1}); transitioning = true; - // FlxG.sound.music.stop(); new FlxTimer().start(3, function(tmr:FlxTimer) { - MusicBeatState.switchState(new MainMenuState()); + MusicBeatState.switchState(new GameMenuState()); closedState = true; }); - // FlxG.sound.play(Paths.music('titleShoot'), 0.7); } if (pressedEnter && !skippedIntro) @@ -379,49 +337,31 @@ class TitleState extends MusicBeatState { case 1: createCoolText(['Graphex Engine by'], 45); - // credTextShit.visible = true; case 3: addMoreText('XaleTheCat', 45); addMoreText('PurpleSnake', 45); - // credTextShit.text += '\npresent...'; - // credTextShit.addText(); case 4: deleteCoolText(); - // credTextShit.visible = false; - // credTextShit.text = 'In association \nwith'; - // credTextShit.screenCenter(); case 5: createCoolText(['This is a mod to'], -60); case 7: addMoreText('This game right below lol', -60); logoSpr.visible = true; - // credTextShit.text += '\nNewgrounds'; case 8: deleteCoolText(); logoSpr.visible = false; - // credTextShit.visible = false; - - // credTextShit.text = 'Shoutouts Tom Fulp'; - // credTextShit.screenCenter(); case 9: createCoolText([curWacky[0]]); - // credTextShit.visible = true; case 11: addMoreText(curWacky[1]); - // credTextShit.text += '\nlmao'; case 12: deleteCoolText(); - // credTextShit.visible = false; - // credTextShit.text = "Friday"; - // credTextShit.screenCenter(); case 13: addMoreText('Friday'); - // credTextShit.visible = true; case 14: addMoreText('Night'); - // credTextShit.text += '\nNight'; case 15: - addMoreText('Funkin'); // credTextShit.text += '\nFunkin'; + addMoreText('Funkin'); case 16: skipIntro(); From b855388a6e6a0edddeadaf37d1ef2b02aca3a956 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 22:52:56 +0300 Subject: [PATCH 04/32] moved useless script --- .../uselessScripts/MainMenuState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename source/OldMainMenuState.hx => extra/uselessScripts/MainMenuState.hx (99%) diff --git a/source/OldMainMenuState.hx b/extra/uselessScripts/MainMenuState.hx similarity index 99% rename from source/OldMainMenuState.hx rename to extra/uselessScripts/MainMenuState.hx index 99a5867..81bc622 100644 --- a/source/OldMainMenuState.hx +++ b/extra/uselessScripts/MainMenuState.hx @@ -20,7 +20,7 @@ import lime.app.Application; using StringTools; -class OldMainMenuState extends MusicBeatState +class MainMenuState extends MusicBeatState { public static var psychEngineVersion:String = '0.3.1'; //This is also used for Discord RPC - ShadowMario public static var modEngineVersion:String = 'b0.0.2'; From 00e437b1de349ea59dbb0282a7ca9d40a2af3d29 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 23:12:22 +0300 Subject: [PATCH 05/32] Combined ClientPrefs and Data scripts --- source/Alphabet.hx | 16 +-- source/AttachedSprite.hx | 1 + source/AttachedText.hx | 1 + source/BGSprite.hx | 1 + source/BackgroundDancer.hx | 1 + source/Character.hx | 1 + source/CharacterEditorState.hx | 1 + source/CheckboxThingie.hx | 1 + source/ClientPrefs.hx | 196 --------------------------------- source/Data.hx | 192 +++++++++++++++++++++++++++++++- source/DialogueBoxNew.hx | 7 +- source/Discord.hx | 6 +- source/FlashingState.hx | 1 + source/FunkinLua.hx | 1 + source/GameMenuState.hx | 7 +- source/HealthIcon.hx | 1 + source/LoadingState.hx | 1 + source/Main.hx | 1 + source/MenuCharacter.hx | 1 + source/MenuItem.hx | 1 + source/MusicBeatState.hx | 1 + source/Note.hx | 1 + source/NoteSplash.hx | 1 + source/PlayState.hx | 3 +- source/StrumNote.hx | 1 + source/TitleState.hx | 1 + 26 files changed, 223 insertions(+), 223 deletions(-) delete mode 100644 source/ClientPrefs.hx diff --git a/source/Alphabet.hx b/source/Alphabet.hx index 8832404..dc73d36 100644 --- a/source/Alphabet.hx +++ b/source/Alphabet.hx @@ -7,12 +7,10 @@ import flixel.group.FlxSpriteGroup; import flixel.math.FlxMath; import flixel.util.FlxTimer; import flixel.system.FlxSound; +import Data; using StringTools; -/** - * Loosley based on FlxTypeText lolol - */ class Alphabet extends FlxSpriteGroup { public var delay:Float = 0.05; @@ -119,10 +117,6 @@ class Alphabet extends FlxSpriteGroup var xPos:Float = 0; for (character in splitWords) { - // if (character.fastCodeAt() == " ") - // { - // } - var spaceChar:Bool = (character == " " || character == "-" || character == "_"); if (spaceChar) { @@ -145,7 +139,6 @@ class Alphabet extends FlxSpriteGroup } consecutiveSpaces = 0; - // var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0, textSize); var letter:AlphaCharacter = new AlphaCharacter(xPos, 0, textSize); if (isBold) @@ -185,8 +178,6 @@ class Alphabet extends FlxSpriteGroup lastSprite = letter; } - - // loopNum += 1; } } @@ -207,8 +198,6 @@ class Alphabet extends FlxSpriteGroup _finalText = text; doSplitWords(); - // trace(arrayShit); - if(speed <= 0) { while(loopNum < splitWords.length) { timerCheck(); @@ -253,8 +242,6 @@ class Alphabet extends FlxSpriteGroup { lastSprite.updateHitbox(); xPos += lastSprite.width + 3; - // if (isBold) - // xPos -= 80; } else { @@ -267,7 +254,6 @@ class Alphabet extends FlxSpriteGroup } consecutiveSpaces = 0; - // var letter:AlphaCharacter = new AlphaCharacter(30 * loopNum, 0, textSize); var letter:AlphaCharacter = new AlphaCharacter(xPos, 55 * yMulti, textSize); letter.row = curRow; if (isBold) diff --git a/source/AttachedSprite.hx b/source/AttachedSprite.hx index 07d5cc9..057d81c 100644 --- a/source/AttachedSprite.hx +++ b/source/AttachedSprite.hx @@ -1,6 +1,7 @@ package; import flixel.FlxSprite; +import Data; using StringTools; diff --git a/source/AttachedText.hx b/source/AttachedText.hx index 454f97d..5fda9f0 100644 --- a/source/AttachedText.hx +++ b/source/AttachedText.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class AttachedText extends Alphabet { diff --git a/source/BGSprite.hx b/source/BGSprite.hx index 5e357c5..c4b7234 100644 --- a/source/BGSprite.hx +++ b/source/BGSprite.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class BGSprite extends FlxSprite { diff --git a/source/BackgroundDancer.hx b/source/BackgroundDancer.hx index 733c340..0542ade 100644 --- a/source/BackgroundDancer.hx +++ b/source/BackgroundDancer.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class BackgroundDancer extends FlxSprite { diff --git a/source/Character.hx b/source/Character.hx index bb500ff..a97cda3 100644 --- a/source/Character.hx +++ b/source/Character.hx @@ -14,6 +14,7 @@ import sys.FileSystem; import openfl.utils.Assets; import haxe.Json; import haxe.format.JsonParser; +import Data; using StringTools; diff --git a/source/CharacterEditorState.hx b/source/CharacterEditorState.hx index 3e9e17b..276e644 100644 --- a/source/CharacterEditorState.hx +++ b/source/CharacterEditorState.hx @@ -31,6 +31,7 @@ import haxe.Json; import Character; import flixel.system.debug.interaction.tools.Pointer.GraphicCursorCross; import lime.system.Clipboard; +import Data; #if MODS_ALLOWED import sys.FileSystem; diff --git a/source/CheckboxThingie.hx b/source/CheckboxThingie.hx index 76e9a19..b81cce2 100644 --- a/source/CheckboxThingie.hx +++ b/source/CheckboxThingie.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class CheckboxThingie extends FlxSprite { diff --git a/source/ClientPrefs.hx b/source/ClientPrefs.hx deleted file mode 100644 index 405bb54..0000000 --- a/source/ClientPrefs.hx +++ /dev/null @@ -1,196 +0,0 @@ -package; - -import flixel.FlxG; -import flixel.util.FlxSave; -import flixel.input.keyboard.FlxKey; -import flixel.graphics.FlxGraphic; -import Controls; - -class ClientPrefs { - //TO DO: Redo ClientPrefs in a way that isn't too stupid - public static var downScroll:Bool = false; - public static var middleScroll:Bool = false; - public static var showFPS:Bool = true; - public static var flashing:Bool = true; - public static var globalAntialiasing:Bool = true; - public static var noteSplashes:Bool = true; - public static var lowQuality:Bool = false; - public static var framerate:Int = 60; - public static var cursing:Bool = true; - public static var violence:Bool = true; - public static var camZooms:Bool = true; - public static var hideHud:Bool = false; - public static var noteOffset:Int = 0; - public static var arrowHSV:Array> = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; - public static var imagesPersist:Bool = false; - public static var ghostTapping:Bool = true; - public static var hideTime:Bool = false; - - public static var defaultKeys:Array = [ - A, LEFT, //Note Left - S, DOWN, //Note Down - W, UP, //Note Up - D, RIGHT, //Note Right - - A, LEFT, //UI Left - S, DOWN, //UI Down - W, UP, //UI Up - D, RIGHT, //UI Right - - R, NONE, //Reset - SPACE, ENTER, //Accept - BACKSPACE, ESCAPE, //Back - ENTER, ESCAPE //Pause - ]; - //Every key has two binds, these binds are defined on defaultKeys! If you want your control to be changeable, you have to add it on ControlsSubState (inside OptionsState)'s list - public static var keyBinds:Array = [ - //Key Bind, Name for ControlsSubState - [Control.NOTE_LEFT, 'Left'], - [Control.NOTE_DOWN, 'Down'], - [Control.NOTE_UP, 'Up'], - [Control.NOTE_RIGHT, 'Right'], - - [Control.UI_LEFT, 'Left '], //Added a space for not conflicting on ControlsSubState - [Control.UI_DOWN, 'Down '], //Added a space for not conflicting on ControlsSubState - [Control.UI_UP, 'Up '], //Added a space for not conflicting on ControlsSubState - [Control.UI_RIGHT, 'Right '], //Added a space for not conflicting on ControlsSubState - - [Control.RESET, 'Reset'], - [Control.ACCEPT, 'Accept'], - [Control.BACK, 'Back'], - [Control.PAUSE, 'Pause'] - ]; - public static var lastControls:Array = defaultKeys.copy(); - - public static function saveSettings() { - FlxG.save.data.downScroll = downScroll; - FlxG.save.data.middleScroll = middleScroll; - FlxG.save.data.showFPS = showFPS; - FlxG.save.data.flashing = flashing; - FlxG.save.data.globalAntialiasing = globalAntialiasing; - FlxG.save.data.noteSplashes = noteSplashes; - FlxG.save.data.lowQuality = lowQuality; - FlxG.save.data.framerate = framerate; - FlxG.save.data.cursing = cursing; - FlxG.save.data.violence = violence; - FlxG.save.data.camZooms = camZooms; - FlxG.save.data.noteOffset = noteOffset; - FlxG.save.data.hideHud = hideHud; - FlxG.save.data.arrowHSV = arrowHSV; - FlxG.save.data.imagesPersist = imagesPersist; - FlxG.save.data.ghostTapping = ghostTapping; - FlxG.save.data.hideTime = hideTime; - - var save:FlxSave = new FlxSave(); - save.bind('controls', 'ninjamuffin99'); //Placing this in a separate save so that it can be manually deleted without removing your Score and stuff - save.data.customControls = lastControls; - save.flush(); - FlxG.log.add("Settings saved!"); - } - - public static function loadPrefs() { - if(FlxG.save.data.downScroll != null) { - downScroll = FlxG.save.data.downScroll; - } - if(FlxG.save.data.middleScroll != null) { - middleScroll = FlxG.save.data.middleScroll; - } - if(FlxG.save.data.showFPS != null) { - showFPS = FlxG.save.data.showFPS; - if(Main.fpsVar != null) { - Main.fpsVar.visible = showFPS; - } - } - if(FlxG.save.data.flashing != null) { - flashing = FlxG.save.data.flashing; - } - if(FlxG.save.data.globalAntialiasing != null) { - globalAntialiasing = FlxG.save.data.globalAntialiasing; - } - if(FlxG.save.data.noteSplashes != null) { - noteSplashes = FlxG.save.data.noteSplashes; - } - if(FlxG.save.data.lowQuality != null) { - lowQuality = FlxG.save.data.lowQuality; - } - if(FlxG.save.data.framerate != null) { - framerate = FlxG.save.data.framerate; - if(framerate > FlxG.drawFramerate) { - FlxG.updateFramerate = framerate; - FlxG.drawFramerate = framerate; - } else { - FlxG.drawFramerate = framerate; - FlxG.updateFramerate = framerate; - } - } - /*if(FlxG.save.data.cursing != null) { - cursing = FlxG.save.data.cursing; - } - if(FlxG.save.data.violence != null) { - violence = FlxG.save.data.violence; - }*/ - if(FlxG.save.data.camZooms != null) { - camZooms = FlxG.save.data.camZooms; - } - if(FlxG.save.data.hideHud != null) { - hideHud = FlxG.save.data.hideHud; - } - if(FlxG.save.data.noteOffset != null) { - noteOffset = FlxG.save.data.noteOffset; - } - if(FlxG.save.data.arrowHSV != null) { - arrowHSV = FlxG.save.data.arrowHSV; - } - if(FlxG.save.data.imagesPersist != null) { - imagesPersist = FlxG.save.data.imagesPersist; - FlxGraphic.defaultPersist = ClientPrefs.imagesPersist; - } - if(FlxG.save.data.ghostTapping != null) { - ghostTapping = FlxG.save.data.ghostTapping; - } - if(FlxG.save.data.hideTime != null) { - hideTime = FlxG.save.data.hideTime; - } - - var save:FlxSave = new FlxSave(); - save.bind('controls', 'ninjamuffin99'); - if(save != null && save.data.customControls != null) { - reloadControls(save.data.customControls); - } - } - - public static function reloadControls(newKeys:Array) { - ClientPrefs.removeControls(ClientPrefs.lastControls); - ClientPrefs.lastControls = newKeys.copy(); - ClientPrefs.loadControls(ClientPrefs.lastControls); - } - - private static function removeControls(controlArray:Array) { - for (i in 0...keyBinds.length) { - var controlValue:Int = i*2; - var controlsToRemove:Array = []; - for (j in 0...2) { - if(controlArray[controlValue+j] != NONE) { - controlsToRemove.push(controlArray[controlValue+j]); - } - } - if(controlsToRemove.length > 0) { - PlayerSettings.player1.controls.unbindKeys(keyBinds[i][0], controlsToRemove); - } - } - } - private static function loadControls(controlArray:Array) { - for (i in 0...keyBinds.length) { - var controlValue:Int = i*2; - var controlsToAdd:Array = []; - for (j in 0...2) { - if(controlArray[controlValue+j] != NONE) { - controlsToAdd.push(controlArray[controlValue+j]); - } - } - if(controlsToAdd.length > 0) { - PlayerSettings.player1.controls.bindKeys(keyBinds[i][0], controlsToAdd); - } - } - } -} \ No newline at end of file diff --git a/source/Data.hx b/source/Data.hx index 6f686da..c83c220 100644 --- a/source/Data.hx +++ b/source/Data.hx @@ -1,7 +1,195 @@ package; -class Data +import flixel.FlxG; +import flixel.util.FlxSave; +import flixel.input.keyboard.FlxKey; +import flixel.graphics.FlxGraphic; +import Controls; + +class ClientPrefs { + public static var downScroll:Bool = false; + public static var middleScroll:Bool = false; + public static var showFPS:Bool = true; + public static var flashing:Bool = true; + public static var globalAntialiasing:Bool = true; + public static var noteSplashes:Bool = true; + public static var lowQuality:Bool = false; + public static var framerate:Int = 60; + public static var cursing:Bool = true; + public static var violence:Bool = true; + public static var camZooms:Bool = true; + public static var hideHud:Bool = false; + public static var noteOffset:Int = 0; + public static var arrowHSV:Array> = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]; + public static var imagesPersist:Bool = false; + public static var ghostTapping:Bool = true; + public static var hideTime:Bool = false; + + public static var defaultKeys:Array = [ + A, LEFT, //Note Left + S, DOWN, //Note Down + W, UP, //Note Up + D, RIGHT, //Note Right + + A, LEFT, //UI Left + S, DOWN, //UI Down + W, UP, //UI Up + D, RIGHT, //UI Right + + R, NONE, //Reset + SPACE, ENTER, //Accept + BACKSPACE, ESCAPE, //Back + ENTER, ESCAPE //Pause + ]; + //Every key has two binds, these binds are defined on defaultKeys! If you want your control to be changeable, you have to add it on ControlsSubState (inside OptionsState)'s list + public static var keyBinds:Array = [ + //Key Bind, Name for ControlsSubState + [Control.NOTE_LEFT, 'Left'], + [Control.NOTE_DOWN, 'Down'], + [Control.NOTE_UP, 'Up'], + [Control.NOTE_RIGHT, 'Right'], + + [Control.UI_LEFT, 'Left '], //Added a space for not conflicting on ControlsSubState + [Control.UI_DOWN, 'Down '], //Added a space for not conflicting on ControlsSubState + [Control.UI_UP, 'Up '], //Added a space for not conflicting on ControlsSubState + [Control.UI_RIGHT, 'Right '], //Added a space for not conflicting on ControlsSubState + + [Control.RESET, 'Reset'], + [Control.ACCEPT, 'Accept'], + [Control.BACK, 'Back'], + [Control.PAUSE, 'Pause'] + ]; + public static var lastControls:Array = defaultKeys.copy(); + + public static function saveSettings() { + FlxG.save.data.downScroll = downScroll; + FlxG.save.data.middleScroll = middleScroll; + FlxG.save.data.showFPS = showFPS; + FlxG.save.data.flashing = flashing; + FlxG.save.data.globalAntialiasing = globalAntialiasing; + FlxG.save.data.noteSplashes = noteSplashes; + FlxG.save.data.lowQuality = lowQuality; + FlxG.save.data.framerate = framerate; + FlxG.save.data.cursing = cursing; + FlxG.save.data.violence = violence; + FlxG.save.data.camZooms = camZooms; + FlxG.save.data.noteOffset = noteOffset; + FlxG.save.data.hideHud = hideHud; + FlxG.save.data.arrowHSV = arrowHSV; + FlxG.save.data.imagesPersist = imagesPersist; + FlxG.save.data.ghostTapping = ghostTapping; + FlxG.save.data.hideTime = hideTime; + + var save:FlxSave = new FlxSave(); + save.bind('controls', 'xale'); //Placing this in a separate save so that it can be manually deleted without removing your Score and stuff + save.data.customControls = lastControls; + save.flush(); + FlxG.log.add("Settings saved!"); + } + + public static function loadPrefs() { + if(FlxG.save.data.downScroll != null) { + downScroll = FlxG.save.data.downScroll; + } + if(FlxG.save.data.middleScroll != null) { + middleScroll = FlxG.save.data.middleScroll; + } + if(FlxG.save.data.showFPS != null) { + showFPS = FlxG.save.data.showFPS; + if(Main.fpsVar != null) { + Main.fpsVar.visible = showFPS; + } + } + if(FlxG.save.data.flashing != null) { + flashing = FlxG.save.data.flashing; + } + if(FlxG.save.data.globalAntialiasing != null) { + globalAntialiasing = FlxG.save.data.globalAntialiasing; + } + if(FlxG.save.data.noteSplashes != null) { + noteSplashes = FlxG.save.data.noteSplashes; + } + if(FlxG.save.data.lowQuality != null) { + lowQuality = FlxG.save.data.lowQuality; + } + if(FlxG.save.data.framerate != null) { + framerate = FlxG.save.data.framerate; + if(framerate > FlxG.drawFramerate) { + FlxG.updateFramerate = framerate; + FlxG.drawFramerate = framerate; + } else { + FlxG.drawFramerate = framerate; + FlxG.updateFramerate = framerate; + } + } + if(FlxG.save.data.camZooms != null) { + camZooms = FlxG.save.data.camZooms; + } + if(FlxG.save.data.hideHud != null) { + hideHud = FlxG.save.data.hideHud; + } + if(FlxG.save.data.noteOffset != null) { + noteOffset = FlxG.save.data.noteOffset; + } + if(FlxG.save.data.arrowHSV != null) { + arrowHSV = FlxG.save.data.arrowHSV; + } + if(FlxG.save.data.imagesPersist != null) { + imagesPersist = FlxG.save.data.imagesPersist; + FlxGraphic.defaultPersist = ClientPrefs.imagesPersist; + } + if(FlxG.save.data.ghostTapping != null) { + ghostTapping = FlxG.save.data.ghostTapping; + } + if(FlxG.save.data.hideTime != null) { + hideTime = FlxG.save.data.hideTime; + } + + var save:FlxSave = new FlxSave(); + save.bind('controls', 'ninjamuffin99'); + if(save != null && save.data.customControls != null) { + reloadControls(save.data.customControls); + } + } + + public static function reloadControls(newKeys:Array) { + ClientPrefs.removeControls(ClientPrefs.lastControls); + ClientPrefs.lastControls = newKeys.copy(); + ClientPrefs.loadControls(ClientPrefs.lastControls); + } + + private static function removeControls(controlArray:Array) { + for (i in 0...keyBinds.length) { + var controlValue:Int = i*2; + var controlsToRemove:Array = []; + for (j in 0...2) { + if(controlArray[controlValue+j] != NONE) { + controlsToRemove.push(controlArray[controlValue+j]); + } + } + if(controlsToRemove.length > 0) { + PlayerSettings.player1.controls.unbindKeys(keyBinds[i][0], controlsToRemove); + } + } + } + private static function loadControls(controlArray:Array) { + for (i in 0...keyBinds.length) { + var controlValue:Int = i*2; + var controlsToAdd:Array = []; + for (j in 0...2) { + if(controlArray[controlValue+j] != NONE) { + controlsToAdd.push(controlArray[controlValue+j]); + } + } + if(controlsToAdd.length > 0) { + PlayerSettings.player1.controls.bindKeys(keyBinds[i][0], controlsToAdd); + } + } + } +} + +class EngineData { - public static var psychEngineVersion:String = '0.3.1'; //This is also used for Discord RPC - ShadowMario + public static var psychEngineVersion:String = '0.3.1'; public static var modEngineVersion:String = 'b0.0.3'; } \ No newline at end of file diff --git a/source/DialogueBoxNew.hx b/source/DialogueBoxNew.hx index 65d37ff..fa9f85b 100644 --- a/source/DialogueBoxNew.hx +++ b/source/DialogueBoxNew.hx @@ -10,10 +10,10 @@ import flixel.text.FlxText; import flixel.util.FlxColor; import flixel.util.FlxTimer; import flixel.FlxSubState; +import Data; using StringTools; -// TO DO: Clean code? Maybe? idk class DialogueBoxNew extends FlxSpriteGroup { var dialogue:Alphabet; @@ -44,7 +44,7 @@ class DialogueBoxNew extends FlxSpriteGroup char.animation.addByPrefix('talk', 'bftalkloop', 24, true); //During dialogue char.flipX = !char.flipX; - // THIS IS EXAMPLE! + // THIS IS EXAMPLE!! /*case 'CHAR': char.frames = Paths.getSparrowAtlas('dialogue/FILENAME'); char.animation.addByPrefix('talkIdle', 'NAME IN XML', 24, true); //Dialogue ended @@ -53,7 +53,8 @@ class DialogueBoxNew extends FlxSpriteGroup char.animation.addByPrefix('angry', 'NAME IN XML', 24, true); //During dialogue, but CHAR is ANGRY lmao char.animation.addByPrefix('unamusedIdle', 'NAME IN XML', 24, true); //Dialogue ended, but CHAR is UNAMUSED lmao char.animation.addByPrefix('unamused', 'NAME IN XML', 24, true); //During dialogue, but CHAR is UNAMUSED lmao - char.y -= 140;*/ // Sample is by Xale, Script is by ShadowMario + char.y -= 140;*/ + // Sample is by Xale, Script is by ShadowMario } char.animation.play('talkIdle', true); } diff --git a/source/Discord.hx b/source/Discord.hx index bdffa4d..9d050ba 100644 --- a/source/Discord.hx +++ b/source/Discord.hx @@ -2,6 +2,7 @@ package; import Sys.sleep; import discord_rpc.DiscordRpc; +import Data; using StringTools; @@ -22,7 +23,6 @@ class DiscordClient { DiscordRpc.process(); sleep(2); - //trace("Discord Client Update"); } DiscordRpc.shutdown(); @@ -75,13 +75,11 @@ class DiscordClient details: details, state: state, largeImageKey: 'logo', - largeImageText: "Graphex " + Data.modEngineVersion, + largeImageText: "Graphex " + EngineData.modEngineVersion, smallImageKey : smallImageKey, // Obtained times are in milliseconds so they are divided so Discord can use it startTimestamp : Std.int(startTimestamp / 1000), endTimestamp : Std.int(endTimestamp / 1000) }); - - //trace('Discord RPC Updated. Arguments: $details, $state, $smallImageKey, $hasStartTimestamp, $endTimestamp'); } } diff --git a/source/FlashingState.hx b/source/FlashingState.hx index 8c5017b..2c26a16 100644 --- a/source/FlashingState.hx +++ b/source/FlashingState.hx @@ -10,6 +10,7 @@ import lime.app.Application; import flixel.addons.transition.FlxTransitionableState; import flixel.tweens.FlxTween; import flixel.util.FlxTimer; +import Data; class FlashingState extends MusicBeatState { diff --git a/source/FunkinLua.hx b/source/FunkinLua.hx index f1d0cb2..c0076e5 100644 --- a/source/FunkinLua.hx +++ b/source/FunkinLua.hx @@ -19,6 +19,7 @@ import sys.io.File; #end import Type.ValueType; import Controls; +import Data; using StringTools; diff --git a/source/GameMenuState.hx b/source/GameMenuState.hx index 334b71d..042c458 100644 --- a/source/GameMenuState.hx +++ b/source/GameMenuState.hx @@ -3,6 +3,9 @@ package; #if desktop import Discord.DiscordClient; #end +// This shit used for script count optimization ":) - XaleTheCat +import Data; +// --- import flixel.FlxG; import flixel.FlxObject; import flixel.FlxSprite; @@ -112,11 +115,11 @@ class MainMenuState extends MusicBeatState FlxG.camera.follow(camFollowPos, null, 1); - var versionShit:FlxText = new FlxText(12, FlxG.height - 64, 0, "Grafex Engine v" + Data.modEngineVersion, 12); + var versionShit:FlxText = new FlxText(12, FlxG.height - 64, 0, "Grafex Engine v" + EngineData.modEngineVersion, 12); versionShit.scrollFactor.set(); versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(versionShit); - var versionShit:FlxText = new FlxText(12, FlxG.height - 44, 0, "Psych Engine v" + Data.psychEngineVersion, 12); + var versionShit:FlxText = new FlxText(12, FlxG.height - 44, 0, "Psych Engine v" + EngineData.psychEngineVersion, 12); versionShit.scrollFactor.set(); versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(versionShit); diff --git a/source/HealthIcon.hx b/source/HealthIcon.hx index d694636..2599a13 100644 --- a/source/HealthIcon.hx +++ b/source/HealthIcon.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import openfl.utils.Assets as OpenFlAssets; +import Data; using StringTools; diff --git a/source/LoadingState.hx b/source/LoadingState.hx index a1cde21..a520e4b 100644 --- a/source/LoadingState.hx +++ b/source/LoadingState.hx @@ -8,6 +8,7 @@ import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; import flixel.util.FlxTimer; import flixel.math.FlxMath; +import Data; import openfl.utils.Assets; import lime.utils.Assets as LimeAssets; diff --git a/source/Main.hx b/source/Main.hx index f337c59..bd8c078 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -8,6 +8,7 @@ import openfl.Lib; import openfl.display.FPS; import openfl.display.Sprite; import openfl.events.Event; +import Data; #if cpp import webm.WebmPlayer; diff --git a/source/MenuCharacter.hx b/source/MenuCharacter.hx index d33cd4b..2e7a3d4 100644 --- a/source/MenuCharacter.hx +++ b/source/MenuCharacter.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class MenuCharacter extends FlxSprite { diff --git a/source/MenuItem.hx b/source/MenuItem.hx index 5429c9a..4fadc5a 100644 --- a/source/MenuItem.hx +++ b/source/MenuItem.hx @@ -6,6 +6,7 @@ import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxSpriteGroup; import flixel.math.FlxMath; import flixel.util.FlxColor; +import Data; class MenuItem extends FlxSpriteGroup { diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index 5b9e574..73baf61 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -12,6 +12,7 @@ import flixel.FlxSprite; import flixel.util.FlxColor; import flixel.util.FlxGradient; import flixel.FlxState; +import Data; class MusicBeatState extends FlxUIState { diff --git a/source/Note.hx b/source/Note.hx index 1012011..335fc5c 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -6,6 +6,7 @@ import flixel.graphics.frames.FlxAtlasFrames; import flixel.math.FlxMath; import flixel.util.FlxColor; import flash.display.BitmapData; +import Data; using StringTools; diff --git a/source/NoteSplash.hx b/source/NoteSplash.hx index b99b0de..1e616ba 100644 --- a/source/NoteSplash.hx +++ b/source/NoteSplash.hx @@ -3,6 +3,7 @@ package; import flixel.FlxG; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; class NoteSplash extends FlxSprite { diff --git a/source/PlayState.hx b/source/PlayState.hx index a4bc6a2..ccc7be8 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -3,8 +3,9 @@ package; #if desktop import Discord.DiscordClient; #end -// This used for working all-in-one script ":) - Xale +// This used for working all-in-one script and optimization ":) - Xale import GameMenuState; +import Data; // --- import Section.SwagSection; import Song.SwagSong; diff --git a/source/StrumNote.hx b/source/StrumNote.hx index c0c38fc..475ba2a 100644 --- a/source/StrumNote.hx +++ b/source/StrumNote.hx @@ -2,6 +2,7 @@ package; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; +import Data; using StringTools; diff --git a/source/TitleState.hx b/source/TitleState.hx index d19dfe0..af52434 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -29,6 +29,7 @@ import flixel.util.FlxColor; import flixel.util.FlxTimer; import lime.app.Application; import openfl.Assets; +import Data; using StringTools; From ff7374b1de2a965e67e6009f4f12812e90b4fc20 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 23:14:57 +0300 Subject: [PATCH 06/32] Code cleaning from TRACEs --- source/Conductor.hx | 5 ----- source/Discord.hx | 13 ------------- source/PlayState.hx | 47 +++++++++++++++++++++++---------------------- 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/source/Conductor.hx b/source/Conductor.hx index 9f3f500..3b47b3e 100644 --- a/source/Conductor.hx +++ b/source/Conductor.hx @@ -2,10 +2,6 @@ package; import Song.SwagSong; -/** - * ... - * @author - */ typedef BPMChangeEvent = { @@ -56,7 +52,6 @@ class Conductor totalSteps += deltaSteps; totalPos += ((60 / curBPM) * 1000 / 4) * deltaSteps; } - trace("new BPM map BUDDY " + bpmChangeMap); } public static function changeBPM(newBpm:Float) diff --git a/source/Discord.hx b/source/Discord.hx index 9d050ba..7244825 100644 --- a/source/Discord.hx +++ b/source/Discord.hx @@ -10,14 +10,12 @@ class DiscordClient { public function new() { - trace("Discord Client starting..."); DiscordRpc.start({ clientID: "886589338345947156", onReady: onReady, onError: onError, onDisconnected: onDisconnected }); - trace("Discord Client started."); while (true) { @@ -43,23 +41,12 @@ class DiscordClient }); } - static function onError(_code:Int, _message:String) - { - trace('Error! $_code : $_message'); - } - - static function onDisconnected(_code:Int, _message:String) - { - trace('Disconnected! $_code : $_message'); - } - public static function initialize() { var DiscordDaemon = sys.thread.Thread.create(() -> { new DiscordClient(); }); - trace("Discord Client initialized"); } public static function changePresence(details:String, state:Null, ?smallImageKey : String, ?hasStartTimestamp : Bool, ?endTimestamp: Float) diff --git a/source/PlayState.hx b/source/PlayState.hx index ccc7be8..6ebb526 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1955,8 +1955,8 @@ class PlayState extends MusicBeatState camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, CoolUtil.boundTo(1 - (elapsed * 3.125), 0, 1)); } - FlxG.watch.addQuick("beatShit", curBeat); - FlxG.watch.addQuick("stepShit", curStep); + FlxG.watch.addQuick("beatHit", curBeat); + FlxG.watch.addQuick("stepHit", curStep); if (health <= 0 && !practiceMode) { @@ -2098,7 +2098,8 @@ class PlayState extends MusicBeatState vocals.volume = 1; var time:Float = 0.15; - if(daNote.isSustainNote && !daNote.animation.curAnim.name.endsWith('end')) { + if(daNote.isSustainNote && !daNote.animation.curAnim.name.endsWith('end')) + { time += 0.15; } StrumPlayAnim(true, Std.int(Math.abs(daNote.noteData)) % 4, time); @@ -2112,12 +2113,16 @@ class PlayState extends MusicBeatState } } - if(daNote.mustPress && cpuControlled) { - if(daNote.isSustainNote) { - if(daNote.canBeHit) { + if(daNote.mustPress && cpuControlled) + { + if(daNote.isSustainNote) + { + if(daNote.canBeHit) + { goodNoteHit(daNote); } - } else if(daNote.strumTime <= Conductor.songPosition) { + } else if(daNote.strumTime <= Conductor.songPosition) + { goodNoteHit(daNote); } } @@ -2131,9 +2136,11 @@ class PlayState extends MusicBeatState { if (daNote.tooLate || !daNote.wasGoodHit) { - if(!endingSong) { + if(!endingSong) + { //Dupe note removing - NinjaMuffin (Xale supposes ._ .) - notes.forEachAlive(function(note:Note) { + notes.forEachAlive(function(note:Note) + { if (daNote != note && daNote.mustPress && daNote.noteData == note.noteData && daNote.isSustainNote == note.isSustainNote && Math.abs(daNote.strumTime - note.strumTime) < 10) { note.kill(); notes.remove(note, true); @@ -2141,7 +2148,8 @@ class PlayState extends MusicBeatState } }); - switch(daNote.noteType) { + switch(daNote.noteType) + { case 3: //By default "noteType = 3" is hurt note... This does nothing -w-" - Xale @@ -2151,7 +2159,8 @@ class PlayState extends MusicBeatState vocals.volume = 0; RecalculateRating(); - if(ClientPrefs.ghostTapping) { + if(ClientPrefs.ghostTapping) + { switch (daNote.noteData % 4) { case 0: @@ -2181,10 +2190,12 @@ class PlayState extends MusicBeatState } - while(eventNotes.length > 0) { + while(eventNotes.length > 0) + { var early:Float = eventNoteEarlyTrigger(eventNotes[0]); var leStrumTime:Float = eventNotes[0][0]; - if(Conductor.songPosition < leStrumTime - early) { + if(Conductor.songPosition < leStrumTime - early) + { break; } @@ -2446,7 +2457,6 @@ class PlayState extends MusicBeatState } case 'Play Animation': - trace('Anim to play: ' + value1); var val2:Int = Std.parseInt(value2); if(Math.isNaN(val2)) val2 = 0; @@ -2677,9 +2687,6 @@ class PlayState extends MusicBeatState { var difficulty:String = '' + CoolUtil.difficultyStuff[storyDifficulty][1]; - trace('LOADING NEXT SONG'); - trace(PlayState.storyPlaylist[0].toLowerCase() + difficulty); - var winterHorrorlandNext = (SONG.song.toLowerCase() == "eggnog"); if (winterHorrorlandNext) { @@ -2712,7 +2719,6 @@ class PlayState extends MusicBeatState } else { - trace('WENT BACK TO FREEPLAY??'); MusicBeatState.switchState(new FreeplayState()); FlxG.sound.playMusic(Paths.music('freakyMenu')); usedPractice = false; @@ -3390,11 +3396,6 @@ class PlayState extends MusicBeatState { super.beatHit(); - if(lastBeatHit >= curBeat) { - trace('BEAT HIT: ' + curBeat + ', LAST HIT: ' + lastBeatHit); - return; - } - if (generatedMusic) { notes.sort(FlxSort.byY, ClientPrefs.downScroll ? FlxSort.ASCENDING : FlxSort.DESCENDING); From 8b6e6f26836462e4abcbfce8381e93380abd93e0 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 23:23:18 +0300 Subject: [PATCH 07/32] Trace in video scripts cleaned --- source/Discord.hx | 10 +++++++++ source/GlobalVideo.hx | 5 +---- source/VideoHandler.hx | 12 +++++------ source/VideoState.hx | 49 +++--------------------------------------- source/WebmHandler.hx | 3 +-- 5 files changed, 21 insertions(+), 58 deletions(-) diff --git a/source/Discord.hx b/source/Discord.hx index 7244825..f81b6b3 100644 --- a/source/Discord.hx +++ b/source/Discord.hx @@ -41,6 +41,16 @@ class DiscordClient }); } + static function onError(_code:Int, _message:String) + { + // I deleted traces, so this does nothing now - Xale + } + + static function onDisconnected(_code:Int, _message:String) + { + // I deleted traces, so this does nothing now - Xale + } + public static function initialize() { var DiscordDaemon = sys.thread.Thread.create(() -> diff --git a/source/GlobalVideo.hx b/source/GlobalVideo.hx index dba4ac7..8ed9f2b 100644 --- a/source/GlobalVideo.hx +++ b/source/GlobalVideo.hx @@ -50,14 +50,11 @@ class GlobalVideo var width:Float = GameDimensions.width; var height:Float = GameDimensions.height; - //trace("AH: " + stageWidth); - //trace(width); - var ratioX:Float = height / width; var ratioY:Float = width / height; var appliedWidth:Float = stageHeight * ratioY; var appliedHeight:Float = stageWidth * ratioX; - //trace(appliedWidth); + var remainingX:Float = stageWidth - appliedWidth; var remainingY:Float = stageHeight - appliedHeight; remainingX = remainingX / 2; diff --git a/source/VideoHandler.hx b/source/VideoHandler.hx index 1b01699..8a502ae 100644 --- a/source/VideoHandler.hx +++ b/source/VideoHandler.hx @@ -68,15 +68,15 @@ class VideoHandler } - public function netStream_onAsyncError (event:AsyncErrorEvent):Void { - - trace ("Error loading video"); - + public function netStream_onAsyncError (event:AsyncErrorEvent):Void + { + // does nothing - Xale } - public function netConnection_onNetStatus (event:NetStatusEvent):Void { - trace (event.info.code); + public function netConnection_onNetStatus (event:NetStatusEvent):Void + { + // does nothing - Xale } public function play():Void diff --git a/source/VideoState.hx b/source/VideoState.hx index 55a48bf..c09d713 100644 --- a/source/VideoState.hx +++ b/source/VideoState.hx @@ -55,16 +55,6 @@ class VideoState extends MusicBeatState leSource = source; transClass = toTrans; - - /*if (GlobalVideo.get() != null) { - GlobalVideo.get().hide(); - GlobalVideo.get().stop(); - - } - if (frameSkipLimit != -1 && GlobalVideo.isWebm && GlobalVideo.get() == null) - { - GlobalVideo.getWebm().webm.SKIP_STEP_LIMIT = frameSkipLimit; - }*/ } override function create() @@ -109,12 +99,10 @@ class VideoState extends MusicBeatState { if (Assets.exists(leSource.replace(".webm", ".ogg"), MUSIC) || Assets.exists(leSource.replace(".webm", ".ogg"), SOUND)) { - //if (!vidSound.playing) useSound = true; vidSound = FlxG.sound.play(leSource.replace(".webm", ".ogg")); } } - //if (doneSomeShit) GlobalVideo.get().source(leSource); GlobalVideo.get().clearPause(); if (GlobalVideo.isWebm) @@ -126,27 +114,11 @@ class VideoState extends MusicBeatState { GlobalVideo.get().restart(); } else { - //if (!vidSound.playing) GlobalVideo.get().play(); } - - /*if (useSound) - {*/ - //vidSound = FlxG.sound.play(leSource.replace(".webm", ".ogg")); - - /*new FlxTimer().start(0.1, function(tmr:FlxTimer) - {*/ - vidSound.time = vidSound.length * soundMultiplier; - /*new FlxTimer().start(1.2, function(tmr:FlxTimer) - { - if (useSound) - { - vidSound.time = vidSound.length * soundMultiplier; - } - }, 0);*/ - doShit = true; - //}, 1); - //} + + vidSound.time = vidSound.length * soundMultiplier; + doShit = true; if (autoPause && FlxG.sound.music != null && FlxG.sound.music.playing) { @@ -209,20 +181,6 @@ class VideoState extends MusicBeatState { GlobalVideo.get().restart(); } - /*if (FlxG.keys.justPressed.P) - { - txt.text = pauseText; - trace("PRESSED PAUSE"); - GlobalVideo.get().togglePause(); - if (GlobalVideo.get().paused) - { - GlobalVideo.get().alpha(); - } else { - GlobalVideo.get().unalpha(); - txt.text = defaultText; - txt.visible = false; - } - }*/ if (GlobalVideo.get().ended || GlobalVideo.get().stopped) { @@ -251,7 +209,6 @@ class VideoState extends MusicBeatState FlxG.sound.music.resume(); } FlxG.autoPause = true; - /*GlobalVideo.get().hide();*/ GlobalVideo.get().stop(); FlxG.switchState(transClass); } diff --git a/source/WebmHandler.hx b/source/WebmHandler.hx index a3c7dad..d6d762c 100644 --- a/source/WebmHandler.hx +++ b/source/WebmHandler.hx @@ -143,7 +143,6 @@ class WebmHandler public function onEnd():Void { - trace("IT ENDED!"); ended = true; } @@ -170,7 +169,7 @@ class WebmHandler public var webm:Sprite; public function new() { - trace("THIS IS ANDROID! or some shit..."); + // does nothing ._ . - Xale } #end } \ No newline at end of file From fdd1f61eb5be367cdbadb991d3ff48eb0e41c779 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Mon, 13 Sep 2021 23:28:38 +0300 Subject: [PATCH 08/32] Spooky scene Y fixed --- source/PlayState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/PlayState.hx b/source/PlayState.hx index 6ebb526..119143d 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -285,9 +285,9 @@ class PlayState extends MusicBeatState curStage = 'spooky'; if(!ClientPrefs.lowQuality) { - halloweenBG = new BGSprite('halloween_bg', -200, -100, ['halloweem bg0', 'halloweem bg lightning strike']); + halloweenBG = new BGSprite('halloween_bg', -200, -80, ['halloweem bg0', 'halloweem bg lightning strike']); } else { - halloweenBG = new BGSprite('halloween_bg_low', -200, -100); + halloweenBG = new BGSprite('halloween_bg_low', -200, -80); } add(halloweenBG); From be8dcfd8aa53c205c53332ce941041ed0bc343db Mon Sep 17 00:00:00 2001 From: xalethecat Date: Tue, 14 Sep 2021 00:02:30 +0300 Subject: [PATCH 09/32] cleaning #n --- {source => extra/uselessScripts}/import.hx | 0 source/MusicBeatState.hx | 4 +--- 2 files changed, 1 insertion(+), 3 deletions(-) rename {source => extra/uselessScripts}/import.hx (100%) diff --git a/source/import.hx b/extra/uselessScripts/import.hx similarity index 100% rename from source/import.hx rename to extra/uselessScripts/import.hx diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index 73baf61..f386bf3 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -86,12 +86,10 @@ class MusicBeatState extends FlxUIState CustomFadeTransition.finishCallback = function() { FlxG.resetState(); }; - //trace('resetted'); } else { CustomFadeTransition.finishCallback = function() { FlxG.switchState(nextState); }; - //trace('changed state'); } return; } @@ -117,6 +115,6 @@ class MusicBeatState extends FlxUIState public function beatHit():Void { - //do literally nothing dumbass + //does nothing } } From 544d7a5b4d3edadd060478d2badc6873316605b1 Mon Sep 17 00:00:00 2001 From: xalethecat Date: Tue, 14 Sep 2021 00:02:43 +0300 Subject: [PATCH 10/32] vintage added --- assets/preload/images/vin.png | Bin 0 -> 233502 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/preload/images/vin.png diff --git a/assets/preload/images/vin.png b/assets/preload/images/vin.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf59fee7d76a60f3f02d92bea3fef3511bf1f4f GIT binary patch literal 233502 zcmWifdq9$B|Nm=kwT`a2b~;PV3vo>1B!q%O=k(WhJuPhDuRfBihzK?kKZ5n{m1?1bzj%#`n=!o*QfaF z_@kRQ_-$CVYSreLFAsmSYSmk7SFL(u^lk5ZRq}Fa?y6O*^HQUuzmAEH{^08@d`fEi z535%F8~XiM;jzv`JG#NtxIe%({=!0LjUcX?XS7eB_n#E;8zOn;0oALS5GtUv=zfC(|Z`=wTycyL6 z@2be@c~=mJ{QE`LugkZ>CAuHGPJDg>N!@m4arx{42#3>U{=q#yd+yJIQx*PQQ(Xt6 z>z>MpU2*?<)LQ-^@^IRYu%}<{erx@PM<)xmtXuym_y=p-{*k4<_dX9i(ssiyJmRZ= z(-H9(f9F3s9{TEkjL3`svVp|WQT25>>bE!e;2B%Sdv6<8mGJe{fY!{Z9d9Gw*q)+D zy3gWZzO3Ul4X=J@{7uO|1>@;P7JhYs&z-($&U^Q!-kS zL@i*?_zf%8baO-Lauve^m^x1XqtNVL^YB zFDi)K!xaI zH?F40q~XS&9XVL%T8D0Al{CptwmrXZu0fqW4qc45^ycI*4(B~^ zy$6Mh)6f+~e(r;|-<=nlqd>=XX~PZfsb#?9!>^`ziR+Mq) zodA1p+BFd@>2LTbAo2mrXB|6F6P&+Hv^4>YK9a(BoMR*4Pdnml;REJ4A)<~)5%_(F zHO;2$n9WvU`m>-agSbw12=W;i8}0kIs@>H8Za5)?UckV`s-^pt3@lTIu&SAo$D zG`I!>R(3Be{X!`dJ*Wzc=)oHs$ivC{`T-%AQ1@CmvXt~Exra7I7ge=ZHE5zzmeuT; zwxLSRhO;==@hD4bWoR!YGC|sq1DZ5yqO>j)(3UVG+@W`W#cayjbIN=a4xS=@))R>j zDk#NB-pUR@$np%B#mYb=qt-{c4jGyGTN@D`9|*)Y8SPcM$jr1Fy*4Ar8eobXo{SSL zGM1P{&geAmXjN@%rDAN!z0a|e`iJ}qfUs@P%!!+I5PzD`<=g7JTisKKXYA`DfzTO2-l z=l0fh`_);;0vpqwy+;sEb?0v7Abxm^T4)XyqIHC5C);Sbop!oyC=3Bb5L=Cdj|rgl z*j!b!KAu2%5!RV&`@=_sRdw-AHMN(=O9HDaNu6TWIYW%iG}aFI@=P6E)HiZeGkfU+ znxdUx-$|`P`ZI{dYH` zwcwKKIXI+^`lp)e5}q$i4eW_r$K^{bcDku-aB5oKeWy*QYBFk1lz(gO*ZP8eyopnp zDHnxFae6x)Xy$I9=WS?+@C0VumA;Ta zj(2d9>6&6LL+5-aG$CUWpLqUft>yh-Ogq)jXdJwGCM{pWmis;k?(od+-|wCoN(so7 z9BlvGbU&G1I&^ZoBmFckyulHTw0|7-Jes!pFoN>m>*6WXa|66Xx-$4fMh3_YOfuZe zG)Me8Iyf$){(0ikI5!ZM$A0acD%*p2J%MYIcju-ufQtgPW0MzwNAot zY`t|X<&wa&9fMU#s}ZPYsbRL4`oaAX*%unZtmWAWXYbwNOKrDm%BD(Oyq%0HXuT7i z%2ZT5E3t-{s?edmDhWIlbi^xbM@YOnS2J5oH_Ev7Mx(Fj@d=fpHTf^_>tcLv?lrz5g1w}0k@017ikr(v>nU5fC%@fy?$wP_ z=h)pgV*WaW5`Y%Ftmj)T$6Tp}dzvlTD{-_h#TwK^U{zaHiRMakv2h_q+1=DP*l^$e zRSRX3yYrfLgb&#aSq8nT=s0Q?gmnom7AA-|+dAxe|Kdqg8;LVR(6C^F&i-4p?$ zOSKdw4tUpu?x*c&ln@x=mrI27P&_$y6rAM9IV0?i|ESQ=Lkj;vuOc+TWNlK(%$p4h z0c=D%BzoSt6g3A+cPTG1;A0xz7&p}D#C--CQDXa>p*(2ep~`!ih1z?~GAK5biC&li zs6XyclM5Ccycf9`a{FEU%GtJ|ttRyOM-|yWy453xnevitoL14ZlB6^T%MRxMqf+Kb zbFiBUC!OAw!*|(!R77d!1F7vb_%AcbwFtr&H}A?5f@_kkn2?jukV5oheWE*OUtY{2;mo^(Q^i6}E zp*sbb{|-ALSI#!Gy|+ua`}ahDsqihOp7lVNs1W=ZcouVX#b8(C!uB?-H34I@R6o`8 z+{^k3El-xaya%&@)O5G2p!ib-J}aX1t;Wj=+_Z_(pWk-t(h(Dt4@FrW2Acz+MyAe z90{A}CM`dNHBB_TIjR_QHU>q9UaM9M)(TFwDcRfz^bd9ojot4y#laNmC954UVxS0jQO^3``Eemyk(md!A8k9SJ@x#Lk`8+ zyH;X(LVPyuLCgcsG+vQJ_9Oqehn=))mtK(Up6ZY3*?`9LYghNQ_WSR3Qhm`KiHQ8B zAc|<#ybY6t`J{oB!WV)EQl|{z!g!GaS#|j=IlqUnBsl+wB2}>1s)N=(slGd`XIl{$ zc_5mAr74pCNaIB~$M$J=PNFY< zZ^Q@q%20r4Tih@XHExR!MWl;(>8`1$X*98vxf3Q1>GZFwk?D2zQ+W1XKhx&RaN=oO zaQkyuS;+-%gy+-dQ^mMu1Z4J2hhM_?MqtKqiwcyt!wRnlxPP_z#%_% ziwQs?(4sj)+bCM-V-NM$;VuNE2QroY`r?G~+?n?b`@?xm3GbZxLxq&>D#FN|0rp1XDgjLpKJXj@P6_s;!l#w<-^WB;9#y;Cm#Q)hZ(t4 zYu*K`W1{KYipeA$5l)_*VLJe);S{6B<2#7597DI(_}EKojGLJrX~3^EQsKOMD3(MD z*Rm@MctYSn^aT~wy~lJCa{J~NnU>DLR9vzheh&w|;o8K5qlGkVyHy#&TzA=dvQrt@ zJ*svJ1_*))HMw)pA5z$1e^DMqO{+9Y>&nAi)!m#qAa?^j_%LGn-G-vj|9`?2o}fxD zkv7{pAG!=?-8Xaj-3$XU9*q?%L{BU}E&)Y!HBydmLcOFLuN3-Pm(}*n8Li{!zaX7+ zrSufuC=srh)TUq*nz&yz*q_Xg%8x|YLF7-ll@OCtEMdgZ^l$O_^Mg*TNUASfVk+x4 zLx`aTQEV%1Y}eL3wZl=do0!-(U3c25-T;xcNOCM~Qz8E`Ku41g0>imp+}r zhxkg#zCYzkC`$D&)?f$}0gO>0=Qc z_gwo@rzb`+y`bbbF0bUrVSUdT>nAi zQO$(9b0rh2E1B8Yxy`j8iGi(SB8*qQCI5gK8YkV5rXvWdezU+3fr7;8H6xmT92&{B zG;uHNbfSi1Q!r$Jz`|P08$+&1AKl9i#O|x-Y6X=q`C{{tnBPS4DlpFz*$YwRl_)qSrw0&8albMU@GqP?ElJ-%5dox@igE9jCb7Ar z3Gq#!gNhqx+Onl+vDBoX1B)D|2mtgI28(jh(z7*$a7;vLv_Y;8p&wht~?K=5(~E}!_& z$#hcyF102@^i9-4j2L{*9I3WAeI5CoIyTs%gNwV+X*L^iQALUjEJLrMeX0}n!!LL5 zcj_?27W-#fl{NXWo2wtUg(*0y7K+65cSDBl`*?@xwc)Hw+Xak? zOSDVqwo;eQe9o0HF8*cWNUlC&Iv|-wx^rpP9I^(f%cQWEvt`_<3xCj}%!^W3AVe(B+?wwo=yW12C5#3oRSZD8Ds# zZ(J!Hm)V%H<5Fh39W#_6s7(GDOK@)L#Y0=q1XV(SQo0EU^{vt=fy3lis=P|$$FYHc z2w-zpur&nN zM{U_fnCBU)I9rOF2Q3HWF7~>pHu5BN4dv^p4aDDrxll=FUvr!-$}*yPYW>#yyY`+n z8@Nx7g@|6!jrCL+oAJxD0j}Lo#O>n>u~~T`m?p1pr+AdJnJJqP`~+x^X@^tVa2*SB zclObtke+YNnnXm&)Hs>hBd9TWZ}kT;?g0c^(- zLA~;OYkZUXBsXf#YYQwk*Wxzv0%thdRHekCCcbd)b0(Ic*p3Rs>F}YYYNpi?pu9Aj zI|)mvScW@Tq~*-a6e0mcoF+9(8a~oCP@>k=_zdu&hwEXRUH#!}6DWjP>B*=8dvBf7 zF0jL>4&Xq1L!o$odgw$if|b=_pCjKbi3P3aj0a3wP$y*-`>Zyr>HZ$Z|XwI^c+h%xl>^69+1c!1U4!SWfbu*!oLTh^)_WMHW z5$KCdMh=t4ZJ; ztb}b$Uoa@q756;7}Mi@Oid6g#|gPa#u(ktP;5$#(yH|5zPQ~z!)#%BH@ z1k#nL5^QWP1PVNOdZ!lQ~?qkCnX?#@zRj7ME7zsxDA3&T%ncHF8}X zKl5!5@0pcF$(_)|e^XS7N|Z!wu>z&0Uk?nuDPJfvzFz)zqwHCNYjbUsUG>_L!8Q)? z)xObpQH)ek6;!hiDQ>v@D$dpZ%n+-)d4)M4(?<=HJ~p132r)~|W9qgf0t5H>3$uDN zf-h5#nekB6k9GHJZ#^&0f48x_bOJ`5J@mx|7;%($HHohmHTaT=%*qrrLAMJ>J5_@$ZAXm*78w z_2BzuHDN7K3~uJFv$=ZT%tpHAv3JRUNNs-5>y=*IqspIpuwV%@5Ef_4gA)#UI6Yk% zDj>oYHT#LM9htiiM%%H3s1+S>f6`S<*N1jJNQ>^7`F%M?)w%~gR8$l8ghnPN)WMW8 zN>9-O7t@c3g~!&5z&PoG)S35loT=xbD(}H&ghO_Ts`zAVOnW2^QO6CG!0wvE)}5Be zlJxT-Gg0VDpdr1rN(<202uda7<1ZIf`cq^nKfB-yShKVCDw$>cZPx-Cpq{@83`c$K z|E_r?ue3jhBa8}aM)$ko58Kqa$DCu5cTT6((V;kFh&+yx#u*6Q_dpETOJ;GuEpdD%O`>Z=ibD%Eq0;GtIgf zo1Cf@(KXvjJwyu+QS%(BP$cnm5I^N56Px}5byj)Y+yx8OND)hqgC4#fp-mRpi*YHl z{9bLUwTolZq;iZZ5~%R>l3#$NiaiLFYVUHra_oIZ7e*H+#u{#$%5emvdK{8|-KL9I z`U9xdXGwyZ)}b{hHd|X`0tOl~30pmCO5|1*do`yGsVl~9zQE^9y&l!*Fwc{r6f?@Q zv64x`n_1!Z;GPku*X#GBmTt~Msj9k>M8Iw&EFMZLv0;@gwk|5mzovI*kQL4J_aO3l zs`me_1ZL!u?t-#|0CYp8CX))8UPZL@>4G(##be9L(LkeCld~of9CSAi(6) zU-eP2z@Of73a|9$r$Iud7ughPU@dd8@kUnQqH9@)rsruY#T5 zUSOK(fX6{sjzL$U5HK0*-W)W9Yw>jA745{=EG}kcHEnn|CUsXbI7EBzBlf!Tr4PxH zQ?4hn&*Y@>@_qAF-ComoUbERXBgPy+z2u@ed_*Gqu6_OggFE|HQeBcRWlVm!w& z^~6Y#J(JXP{^uLD8xz{+mx?}nvRya=+&jpWA;l9bC8`9rqevkd>rk|PS&Fpu;|PnJ zh;n3W2wo31_5$W_c++4@)%|s&?3|xz|2a0pHx3;(F8W?P< z32a6tBJ5TBk@mlPlP7E3zMR0~g-<0Il#FKr$Ot+Ew_I=?$;MLV zS+dpIe2B5wp{%)F8&len7HsgJdyDT(F-XzSe0pPO+754Cpgm?Yr#*cHaBqPOS@prt>?{CBV+!fWUog{8QzZ{h5LP9`~23V;2@KE1mAd1vqTxuD;m$7yXoWc?!E zEsI6_ChVHqSbHAxT=Y!sEUd~j{|i0t|B*X;`;W%%+{LjcSIo{0ich(TRYX!@9g-YU zMPr{cOl6+d|0{rz#9R*F8`|8 zjz@!i2ZomSE#};Up3!rE>TdGq;tp6}xYaa8)a&<2?VlOrg7RUL6Uqa`s4I(O_k7US zOGq`#7Ue-)39u=%YasWZ!;hUsrS{l>mYzM^Ir%f;OPgkXiV6z1*e%_87tDh4Y&YkEEd{6w*OvhNs$C4ZV+cp4q{@d%&?O|0iMFvg)&YK*3)(R zXkGQ-$>@?a7+5Vofz#b^Y^Ent5eQrm$kYP`~miqM>~t zT#jN|EAqu9Nzg(!JROC$FvBgID3VMa{7$&{V#mc=psC1Y6P2Ua3Fg z`5ou7czzG}Ua)_U*j_HPP?+qvw3A%Qu(cx;7$Z?{n3nh*_)8|B;UpPOSgJk9bts(W z0-)YHo)Wdy$Jx}Qu@CBHxXFh(nXlqJ^X^Q(sj4SrN*Y^L%u)Hs@3;Qhgue*;i$)Sj za#dAbigM z`?4#G-^EEzC&#_slpv^B;Zm`iMyCeN51G`X>uYWv?P+FT;QHk)k`^<6%E;;PQx#Xt z4g_mQW$5Rd8ItkthTxO{ZLMqlOvjnmb?pbli25Pq<;DET5bj7;aT`q@N-s-WSd-ON z6WUecG8pP?F}?!)Usvhd_$jX*j0oP%tz(Mf$Zy)lk;V5Zooe1fu?G}i$?dRdSyQL% zNmLfqdJp{DdA;3doK%_JL8UiqFN)*pQZ=$nA=hsuQgura5&(@r$?=qPiyPVWKy-m^ ze(4ujGcGmE!&LH6?0e9lSsIvBDYkIQhqjAlQj5xtERJgs>K61q1)d&ncHehk$u?@O4QoE#vXD0!g+yOPG|3YVbp4Jjt%MHU>OY8YZrHO|Eh*A{wT3)*a zrzvr75}j|m>FX`>8<;k%%A2GHGO+jyabUvBO*6yo139%FX)o8HeX(2GOW`jE5eFCh zEs}~}s1Z6MC#2MhaeDtS=)lmx%XgSdh50h>DZ>vnQ_SF71Xe_}EVZx{8$G_{BEJHZ zU4I?*kI%s`Ulc~5aP%`YPo?n%ZY6)+eP|-&Wv?%L^21ivsWsa5^03-^V{>qSR9a%I zs`qXV6Mie&|0%!DksQ~o9#F=Ehx2s~FO&fVQwn~Kr`0;VEyA|@>!?Mru;(EiC^dGLXq#f^%*Ji8NlR|rt% zB6Q`J7{ozc{6SlJ-mD%;C;$tFE>UOe2VB8?+_2{AUiTiA0daY@BcL**cU(CglRMiq z9#LPdz(~%#lxKg(evU3JG71f__R`B%B{FrM(m4nVr!u$;`Mh*^{_N#PgiHl? zyP_!#+f4N)Rn~OuI9*$%Y<-=tWvI#MJZVD*;gP=lLyuZzXENFmo`0J&a<#U%#1G%f zss)#d?JCE)y8b3$Y=+nR>|0Yf8R8Gc#U|b&s8)Z(v*^MD0f#}v+v!gHzBWU4>kQ^` zGM>%#+)eWx|0Lfc;ow-qApu}Y2qP+^HmZlZh=kx!}I;=~rIarEy@Xaj4Mivi~_=YgnMtn8aA2@;w zbCNfYrOuEhueK!LhXzJ=$1+Ncs!`Sgp*CkQGQLlAcAdoRUOOp5kl)$ZH4Zs%p+aj> z^+UsmbSjVXd85Huh!BP;Nz2r*Ow%lOt_)FcGKNkh5-sM>C)qs>nN3VE*=mU#3cc`G z+MMfp&bagT#__4t+F*V!&wdfa+ypc$OFJjy_UfUSW+@ZI6kYhh{lxE_eDzi1FlmnJ;Mw018CD)Y(Z^n2FlWg*Tcw&h?q3 z`w=J)4DJyJtxf&=#k!#qVNvZyDRmLfgg8YKg7wc>G;r5CX!GT;jr9Dq=2lq76SPwn z8wzF-j$+%pI3t|l&9xomDK!wlhj z(_`A>rWR+E5n~Mj+}Lp${Pp&y+E^c1f0N|1w0P)MW2yUUle1zaei3vp{(ObmT5MGB z46ft)9m;*hOCifx#AaEG%z0p%eJM!BafT!ybKFI~sJ=mjwzNa`a_j=5Ms*nSV_zH? z;9At;L0Ahe5o>spD#N2PCnuVDsbz>*s2_fq0LO)3Grlu++Iyu$Eq|X@=lnrpG=O3* z=FpF6?Q1j<6BS@1N4sJiQT0>WBYSlF=Ek8pMi-A|-%?`!5SK04YC0olVz&f~<0^aQ zJs}ChR!s&nd!Kd*rnILv)3Vtq(-qfj{-OtoaXs-$M5`6ddr%oJK7SfvX|rq?a370x zL+z!sj2X=9t&rpKj9ljdv<1o3w`3(=1XDluP;rraEXrcv!eIw6Q!d0w=y&TOy7iNE z^DFv_Sb*0yikxwc9tHI(qY9zUC$aY`PxkE3>rx`Md#lotBus7U7Q*AG^FFFInErw( zpixs5M$DS?T2j8sLFL7Y-)V=CLlnoS_{K|$PI%=L`9p(uQ=A%W$4$(grWOX@*)9xU zH+kRty0~j&*JeKvkR4Y}dee46rAteDX2F`)>oWzO*myH*cy<@a?y+M{>UjJ7Z4Bke zGcU5ERtffVy%c0pmN9MAq<;UjDxLDW%Dox8|2r>bP;Xr7a{^FwJ@|ChT9eBdnGmI58{n)iS2>Q;%CHv4h7HLB> zmAU#ijAi&jfOfCDi*sz{ws{m<4Cuo1apjH-lHlp0YpPcjVasB9n z)7*+^iP5R1{2}Zcv_%ys*|)E20#cXbo~ zUbiT*qC+{-wm;nXJLbJmS$5g_?2@Uxuu?^`6u-2IXQ|SSme4t5XKdLaiMQr_gw`#D z(vN1lJ3sK7CVX6rw*iSC`>|3#c#qc90!s%mBDptN2LfAR+|hmG4} zcKH+SNRvhy3J?94YRFnXK2Z5ozo|kxM z(&t@!*ywrssUCjmi6_l^$0n?yOH=7GeC+)fEv<8f48=%%e$mn8M^F{JtvGnU>irxF zjjqb>nVGMg?R%)By(jJAi+NLk3nWEnqmI@|Dfu_p8MDb^rrU6Eh`qu}^FrXThPZ}w zH-|h@#7Y}@Q!eVr8L`Fs&MZc>4Rk7YVkp7)+}75=DU=>w_I`;W8K2S@sq+hw{8N)isa2hE%5-cRWKFeX68=Xg;? z2N#nB3oaAUhP~VSo`m1Uo(<+Ox-w0ZF+4jBk*AbUo|#c%hhAyMEP^}w*7dG=0?mdu zHbZ!sZ%xEdI70WXV&Alyd`tl5H@gAv*QA;vOj>CiVmv9WW+Y#UTsK-xtVF~7Yrt8+ z&x$=O9YuiSgG*)$mE`6Is@o*m-UrFjR#fMED(W)(UQnXZ6o^&E!q>`wXdl9-i!?Fj zkc9b$czCcJI$)2~`27=6XYiRo^kZV-f~yYq4^lW^bzT3I=f3joET76)9n`4K3YN1% z3|p6{pB8WNxfsUsM&Z4W)824hH|-WFl&qA z?*3j^Bzx0#ems1-_^9-?aN)KOKtu-bm-M|2gZ3gUsVXnPrwZ|R&Z`fm7Fdd-aQzNNnEsnLa@Vq# z%U>>vq3^IivF91rlaZhK$iG(!$<06oGE9{k_8lrHJyCVA&EAD)jx6Vje&1oo9DLh- z01yY)c)6|c%q-1+f=dXZ#uz=NVTiWfwW-4umKg#Qo%R78f+|I$l)TW39L&yWhgG&4 znsmYK2vmH;q0SfZ@xj8G_|fGYk?QUq&tN+$m>t4hxlKrC;LYSm%$A|mDE91cpyr`5 zL&b9-&bay`UXKiGN1S$$eV)HxYQeh@Nci`F;KWaB&uYV}Un(iVznL&^{uej*S!s@b zYR6+r)E%>RBm6YnzOHBCssU+_4rzVBYhu?l)#^w~MuaXvKN4IrGC6U3V{dM|=3$J0 ze9yECEb98{K|L+I>rBvTd{7;XukzAFn_ZutUj#K%V}ZryP>_;1aBnJ>@`2V?@P4H& zFMqq2CkV~E({E3hlqLds@#wo(UFxEgS;C7Oz5CM_YIw!n78Y3UKrM9Vk~y^F&8J+* z{(AT6W7M|CrWRitZ80kKx8y7H@Vv?=wui^6U2oLCCiUFcrhS7m9UwNPe7E>v_h>_| z7&e^DuPdIZJ`Y;d1GdHM&e$eA>44(+8mvK++gT;=KH=!d&C9cjcvI~||61`5sJPaM zZaFq?kXC0-rUY9gP1MH)YOdp!`^*{VDO;C+P0aXGcU(PUOa^9GlAXVBwJ#jH%8CrP zA<-N6^y+&(99mkqsvD7+jbMXI(?$%@ClljaLjc87y-Z{SqLNqZ1QrgRB|kx5RXzL| zSH0WBPI=URUe62{X4Wf3T><3DlIEB?ollf63h(vBsHI-|_jBjh%+NZ+c0DX?{5{ji zRor~TN1)tbwx1eS$=0S-Aq+!yj)etN!Rppyg2>KvHkNe~64;3*Q7Q0|3U$qMVQ`rI zLiKv*8toqR)jP;g8D9-$-GH_T-m0U61nDL(jUJj%diqJ`qX^4a5(4$b2|eu^$WCp8umXY%MH z%#~soRXkVQc0O|_dO8aEH=!9X>Gf=dCOlS!)#t#l`@q`~QDFw)pf>D}iRbevKUZM) zA*b6vPokE8hks23(3NEKFIAO-0B31bl-RRP;7DwCT~C8$^n_tN@4KtCUEf9{ABT?M z!J<9Z@qUjLe$@-x`qA<%Ns*N~Jc)=!Au@CN#vClVQ$oe= zca&G*(^ic$Pk~Rin@5I+Bxwsh=M2Bu;ic%_IPsQcWtEJqeyV$>4mozc&KM@6RfQ)8@6asaslfJj>?d zA3%8qbk0<>r9`)*$+|H>H4|w*9`&mqIg=2JTdG_mSf;#i)M!2#CM@FEYYn`9^=3u56#DEZBzZ0hgP{G28=~ZI7yvtwcS^aC1=d-Q(68D>< z+?|ms6lOv_;s&70|3VW{#8^M*9a8Yp(%aU*r8#rlUBh>WME(QIsX`lr|15G3@NrMc}m| z1C_{5CT<}hq%;@8meIMX9&B7z4Kb2-!?f5s!I5*Ju%WJvY-G)5*SfhMgA@CDsn^)3 zp7+*erTqLBw5G-YCv>WX#IN-t>RL}CVRlLwkvc~B*TP;~p=ohmSZ-Bi7q-oXeodPl zIjQ#}KlR~>F2QfQ);LPN16vE~ihPXrVcbex*2uC?!AH%QO>D_Xk07n#%GpCcH6yd< zUV-xknA8GX0Wcd3`lD+$4yFhzS}zMz>zF&wCJSxee4eB2@>k8lC}|%!rQ_b=HoEMS zSO)LmJ|Q@p&?zX+$-o>d59xZUWyy~RMN%I}5!Yt14;};yatt`3S!TgJN`Q98NxIO} z$5pL$)(v^;ohz~PzXw+3plnO)7tV`x+b4Bpe{`UF>#fLI=tZmi@7a^qTjgm_pK8l; zWQdykVRb*^{`pFDc@w1oucbhAUWEhiV$5VV!DgUO*~JaLttR`!+%3CaQX;%F8=PGS zA;RK;v;JqIh{0iYn308w1`*$=PWP~wja)R{{pM+mFIm}U-R&vNQ%{3IuNxU@|_^|hp}W5 z5i`N}Qe4+rQP#7KwyLAqhvE|FdK2W--uvM2#j1_i45wr46Sd&r^fzr3PPBY^Oc7H$s{=dxY=?GHEKwkQ@{ULy?n0>7gXjB$YSU= zd!YgE07Z?d!6M06cw(8!`!fA8IJ@hmQh%6SL=T+H;AbutshbnK_)5o|ee@zquik9k zFnGNx^Obgvzt+V`1){}aFAv+&#%oS|r#Rz_pfIrBfgLe%V^ejWc133U#P){u3CE%c z_a+=6u*xVOT2r$-lg#VNAIle!aFnh-`cnamjTX{3-L1K9q%| zM@^Rqr3&wW+h%}|b?@O#`$A)a?cS0=QY{q2&T1>Bw?TJN@ON#aQ2)J*IYoB6|J;yr z1V}7SSXWaS5@&0vN=5ppoB?e&7=3j4l2HG+;T!O@=T&*4dZtodd?dLtZ7@(bKp+ zJ&{TMBd6A~3r{N?NuFKkdiY`3G%`)=L}R>+uzV@%t31Vaq1HxSB&0Le3boF7 zk7?1-1&ht?#jG^rD!;Qvh!;a}i^SI4Iz=A`^-JC}O$K>CaotUQ&eOJfs z?dMGuvT&i4FoSSt5uIDcva@dq^$oWDzp9`9)_}fcj=kjQ{OZYFTq*`qP@0v#Jbucf z&M~a$5fJO z%Wsl?u>5kKu{|!W=0i;VbHh-!xR*9rV&zt(#LVd`lw;m;wD<|4 zndVC5eaae(!JoA4QvQo|M$Hk$LQF1}jO}R!6|o1yr>}v`&`{QS2gQ7+7t(TZBn8is zS07IWm&!F;@WQb9m>?@wmAXZq=ULx=G5I&lrZ?iqsPlX44h;Q2iq1SL$+Z9f)22_8 zX5~zlYfg=P`?i=5Dxw0F(^TIPnR)D2?n_Q$qN1WHtCgkMq&DMBsUWlsj^!Hef@Yd# z3TP;}Ah?jIs3<51i2m;9U(fM)JokNH*Y$ZXuS+8H?M~MCcp-*5j-yFUHcJd+ZUZLb zA<#Yrj3=+?I9M83=d0DcA{GxA%F;BT{F}^;>GanwvI?&?=$H3%lDpF*7a6IBj*e65 z$bBdazC1ngbS;AqF}~v$h_66~_C?k4@4@QPi6p_h+=~UaI?xNX?F1N)35{B`X-+7f zK82kRrsDXIafzo-tn|CJ6XgFK71j;bovyV&U)?$%eQH>syP0*{e%(4g$f|kk)$XN| zq2>i0qS;`MZRjpmzm409Jy>5PQYIljO)p-nN$9X|Af~IMd}RTG<1r97d!6b%?%^e3mWB zm4T4mfUl;Y6S8|CspS0U8QcEdIgWc+;_d4?xVFh`ea^(-c)mu9drnZ%ThvCG<{r5? z?*erg#0i<^Fy^|fxFGOZEx*WZwP|FkoexfWZI0y(6cCH?pTB={O_UJ!m><8{CQ!NA zT4a!sYdjPzXXH2BRgGo(_xY{Q-J9kVCK*DT{u_&{XxosTj;P|_f*l3k^W_g$0A!X!F@5x3AGwnaIs^A#%?bjM7e1=EB8QE zsA{?UZ^Y^b%?a=Z<{|JTDYGEnn{1kOkON^CgCn(%8Ka)E_iF;_&5P(I!?&E7#`oV4 zzjMPXfWZ7JAyfGV*5)ZFqkQ^)#)B9wV-FQy?m);QKJU~{;)X^A@&$zPOC9%-^vC2- z%txIA&?f-)i1f-b&GB1=%5s6-zKj>C>G&HN9ajJsTjp0BoB(^F24~TAmW^*vqi;a80L?JE)H;TJcvZ-w>LVTmTIcf8S?lb^r`AUVHWY}4$PsZ=G0=b1`# ziRp%43UbwM$HvDo;=?3qWN~JI!GtGFbP^U%kS88B@E2N4>Nf!EN#M20FJ;QjjE_uU z#WwK|oSfS(=B_0Qstm3@Et{RPjNSt6DG1Il?F={fntVk$EOR+$OcS&U`p$6s)eP4j zB;V@`h%uoT`a&^(Fi2i>4(I(! zfLF7IvZSG&8 z?@qq;h^%-vy$(M&&csRu2-RJ(gqH$Vzq;(u-EjDUHpJ3Dw6Uz@S)~G`L=k?rY+JP0 z(KFJ*Z--9`0vEu>JG);f)?e*lS2)&_-7EO^!wmhMEthZqsk^9M!Ds4ko4OEdUfcn6 zL|>ZiO1U>m^n7IgNE#CUhEopCdwIX?Vs)N9HG{P_>*34sy)F<5d#cbSwds=i9OzTe z*wVwG(H3HdtKd~hO5#gML(}5n`oq!*{(5i~{X}Qf!;a&ol*+k4pdi9M2r1!@z>=4S zOO5s7vaSgwJkYq-uX~IOYfq|mJb?%=x9DtuYqrS)BR>OWT@2_WgS11(Yr%0D3k;`!n{eAj}p#cmV`Q#3^r?B$?@X(*W3xH6vH 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�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