From 1f8ac0d315cecceb25574d91c68cc6cc1eb771b9 Mon Sep 17 00:00:00 2001 From: regulad <52430642+regulad@users.noreply.github.com> Date: Wed, 3 Feb 2021 10:51:52 -0500 Subject: [PATCH 01/39] Update Issue Templates I had made some mistakes when I first submmited this PR as far as formatting and markdown goes. Similar to #327. --- .github/ISSUE_TEMPLATE/bug.md | 27 ++++++-------------- .github/ISSUE_TEMPLATE/enhancement.md | 4 +-- .github/ISSUE_TEMPLATE/question.md | 4 +-- .github/PULL_REQUEST_TEMPLATE/bug.md | 6 ++--- .github/PULL_REQUEST_TEMPLATE/enhancement.md | 4 +-- 5 files changed, 13 insertions(+), 32 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 9eb93945f..cc4d5b11a 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -4,29 +4,18 @@ about: Report a bug or critical performance issue title: 'Bug Report: ' labels: bug --- +#### Please check for duplicates or similar issues, as well performing simple troubleshooting steps (such as clearing cookies, clearing AppData, trying another browser) before submitting an issue. +### If you are playing the game in a browser, what site are you playing it from? +[Newgrounds](https://www.newgrounds.com/portal/view/770371) or [Itch.io](https://ninja-muffin24.itch.io/funkin)? Specify below. -# Please check for duplicates or similar issues, as well performing simple troubleshooting steps (such as clearing cookies, clearing AppData, trying another browser) before submitting an issue. +### If you are playing the game in a browser, what browser are you using? +Chrome (or a Chromium based browser, i.e. Edge, Opera, etc.), Firefox, or Safari? Specify blow. -## Where are you playing the game? - -### Web -- [ ] [Newgrounds](https://www.newgrounds.com/portal/view/770371) -- [ ] [Itch.io](https://ninja-muffin24.itch.io/funkin) - -#### If you are using a web build, what browser are you using? -- [ ] Chrome, or a Chromium based broswer (Edge, Opera, etc.) -- [ ] Firefox, or a Gecko based broswer -- [ ] Safari -- [ ] Other, please specify: - -### Local -- [ ] Windows x86 -- [ ] Windows x86_64 -- [ ] Linux -- [ ] macOS +### If you are playing a downloaded version of the game, what operating system are you using? +Windows (`x86`), Windows (`x86_64`), Linux, or macOS? Specify below. ## What version of the game are you using? Look in the bottom left corner of the main menu. ## Have you identified any steps to reproduce the bug? If so, please describe them below. Use images if possible. -## Please describe your issue. Provide extensive detail and images if possibe. +## Please describe your issue. Provide extensive detail and images if possible. diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md index c86b1a39a..e1cc3ae0d 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.md +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -4,7 +4,5 @@ about: Suggest a new feature title: 'Enhancement: ' labels: enhancement --- - -# Please check for duplicates or similar issues before creating this issue. - +#### Please check for duplicates or similar issues before creating this issue. ## What is your suggestion, and why should it be implemented? diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index 15f86824b..0adb3cc26 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -4,7 +4,5 @@ about: Ask a general question title: 'Question: ' labels: question --- - -# Please check for duplicates or similar issues before asking your question. - +#### Please check for duplicates or similar issues before asking your question. ## What is your question? diff --git a/.github/PULL_REQUEST_TEMPLATE/bug.md b/.github/PULL_REQUEST_TEMPLATE/bug.md index 70d795633..41914c5ed 100644 --- a/.github/PULL_REQUEST_TEMPLATE/bug.md +++ b/.github/PULL_REQUEST_TEMPLATE/bug.md @@ -4,9 +4,7 @@ about: Fix a bug or critical performance issue title: 'Bug Fix: ' labels: bug --- - -# Please check for duplicates or similar PRs before creating this issue. - +#### Please check for duplicates or similar PRs before creating this issue. ## Does this PR close any issue(s)? If so, link them below. -## Breifly describe the issue(s) fixed. +## Briefly describe the issue(s) fixed. diff --git a/.github/PULL_REQUEST_TEMPLATE/enhancement.md b/.github/PULL_REQUEST_TEMPLATE/enhancement.md index 6af15f1b6..e208deefe 100644 --- a/.github/PULL_REQUEST_TEMPLATE/enhancement.md +++ b/.github/PULL_REQUEST_TEMPLATE/enhancement.md @@ -4,9 +4,7 @@ about: Add a new feature title: 'Enhancement: ' labels: enhancement --- - -# Please check for duplicates or similar PRs before creating this issue. - +#### Please check for duplicates or similar PRs before creating this issue. ## Does this PR close any issue(s)? If so, link them below. ## What do your change(s) add, and why should they be implemented? From 4e3a29943a7027659b66d751e6791051fcf24309 Mon Sep 17 00:00:00 2001 From: Lotusotho <69006987+lotusotho@users.noreply.github.com> Date: Thu, 4 Feb 2021 22:36:01 +0100 Subject: [PATCH 02/39] Fixed bug at the start of the dialogue --- source/DialogueBox.hx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index f9c443952..ca3a5282f 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -33,6 +33,8 @@ class DialogueBox extends FlxSpriteGroup var handSelect:FlxSprite; var bgFade:FlxSprite; + + var firstDialogue:Bool = true; public function new(talkingRight:Bool = true, ?dialogueList:Array<String>) { @@ -171,13 +173,13 @@ class DialogueBox extends FlxSpriteGroup dialogueStarted = true; } - if (FlxG.keys.justPressed.ANY) + if (FlxG.keys.justPressed.ANY && dialogueStarted == true) { remove(dialogue); - + FlxG.sound.play('assets/sounds/clickText' + TitleState.soundExt, 0.8); - if (dialogueList[1] == null) + if (dialogueList[1] == null && dialogueList[0] != null) { if (!isEnding) { @@ -209,7 +211,7 @@ class DialogueBox extends FlxSpriteGroup startDialogue(); } } - + super.update(elapsed); } @@ -218,7 +220,6 @@ class DialogueBox extends FlxSpriteGroup function startDialogue():Void { cleanDialog(); - // var theDialog:Alphabet = new Alphabet(0, 70, dialogueList[0], false, true); // dialogue = theDialog; // add(theDialog); From 823acd7a603df19a31c6e3451a8176097b14c4dd Mon Sep 17 00:00:00 2001 From: Lotusotho <69006987+lotusotho@users.noreply.github.com> Date: Thu, 4 Feb 2021 22:40:02 +0100 Subject: [PATCH 03/39] Deleted bool I created before --- source/DialogueBox.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index ca3a5282f..184ad4dbd 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -33,8 +33,6 @@ class DialogueBox extends FlxSpriteGroup var handSelect:FlxSprite; var bgFade:FlxSprite; - - var firstDialogue:Bool = true; public function new(talkingRight:Bool = true, ?dialogueList:Array<String>) { From d38323ab5553d09ff060f8c65c15d7aad88f4446 Mon Sep 17 00:00:00 2001 From: Jan200101 <sentrycraft123@gmail.com> Date: Fri, 5 Feb 2021 13:14:28 +0100 Subject: [PATCH 04/39] check if newgroups api key actually exists before creating core --- source/NGio.hx | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/source/NGio.hx b/source/NGio.hx index 96ced6257..0c2631b86 100644 --- a/source/NGio.hx +++ b/source/NGio.hx @@ -35,19 +35,22 @@ class NGio trace('INIT NOLOGIN'); GAME_VER = "v" + Application.current.meta.get('version'); - NG.create(api); - - new FlxTimer().start(2, function(tmr:FlxTimer) + if (api.length != 0) { - var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response<GetCurrentVersionResult>) - { - GAME_VER = response.result.data.current_version; - trace('CURRENT NG VERSION: ' + GAME_VER); - gotOnlineVer = true; - }); + NG.create(api); - call.send(); - }); + new FlxTimer().start(2, function(tmr:FlxTimer) + { + var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response<GetCurrentVersionResult>) + { + GAME_VER = response.result.data.current_version; + trace('CURRENT NG VERSION: ' + GAME_VER); + gotOnlineVer = true; + }); + + call.send(); + }); + } } public function new(api:String, encKey:String, ?sessionId:String) From 8e251f5b4aef8a348160a4f4182125cdca572684 Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Mon, 8 Feb 2021 04:07:56 +0100 Subject: [PATCH 05/39] tweak changeBPM functionality --- source/PlayState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/PlayState.hx b/source/PlayState.hx index cc869e5de..93d98cab0 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -2273,8 +2273,8 @@ class PlayState extends MusicBeatState Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm); FlxG.log.add('CHANGED BPM!'); } - else - Conductor.changeBPM(SONG.bpm); + //else + //Conductor.changeBPM(SONG.bpm); // Dad doesnt interupt his own notes if (SONG.notes[Math.floor(curStep / 16)].mustHitSection) From 646694bb7986c90f8a53b11a16148b585d8341ab Mon Sep 17 00:00:00 2001 From: M&M <goldtextwitch@outlook.com> Date: Mon, 8 Feb 2021 09:47:15 -0800 Subject: [PATCH 06/39] Resync by music instead of vocals --- source/PlayState.hx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/PlayState.hx b/source/PlayState.hx index cc869e5de..72974df44 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -2237,12 +2237,9 @@ class PlayState extends MusicBeatState override function stepHit() { - if (SONG.needsVoices) + if (FlxG.sound.music.time > Conductor.songPosition + 20 || FlxG.sound.music.time < Conductor.songPosition - 20) { - if (vocals.time > Conductor.songPosition + 20 || vocals.time < Conductor.songPosition - 20) - { - resyncVocals(); - } + resyncVocals(); } if (dad.curCharacter == 'spooky' && totalSteps % 4 == 2) From 07abc35f66468b9a31a8b79a8b6ad26a941ff34f Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Mon, 8 Feb 2021 15:34:48 -0600 Subject: [PATCH 07/39] add Paths asset name helper --- source/Alphabet.hx | 4 +- source/BackgroundDancer.hx | 2 +- source/BackgroundGirls.hx | 2 +- source/Character.hx | 41 +++++++------ source/ChartingState.hx | 2 +- source/DialogueBox.hx | 43 +++++++------- source/FreeplayState.hx | 8 +-- source/GameOverSubstate.hx | 6 +- source/HealthIcon.hx | 2 +- source/LatencyState.hx | 2 +- source/MainMenuState.hx | 14 ++--- source/MenuCharacter.hx | 2 +- source/MenuItem.hx | 2 +- source/Note.hx | 10 ++-- source/OptionsMenu.hx | 4 +- source/Paths.hx | 52 +++++++++++++++++ source/PauseSubState.hx | 2 +- source/PlayState.hx | 114 ++++++++++++++++++------------------- source/StoryMenuState.hx | 10 ++-- source/TitleState.hx | 18 +++--- source/import.hx | 1 + 21 files changed, 199 insertions(+), 142 deletions(-) create mode 100644 source/Paths.hx create mode 100644 source/import.hx diff --git a/source/Alphabet.hx b/source/Alphabet.hx index f9bfe23d7..77ac5dc8e 100644 --- a/source/Alphabet.hx +++ b/source/Alphabet.hx @@ -204,7 +204,7 @@ class Alphabet extends FlxSpriteGroup if (FlxG.random.bool(40)) { var daSound:String = "GF_"; - FlxG.sound.play('assets/sounds/' + daSound + FlxG.random.int(1, 4) + TitleState.soundExt, 0.4); + FlxG.sound.play(Paths.soundRandom(daSound, 1, 4)); } add(letter); @@ -245,7 +245,7 @@ class AlphaCharacter extends FlxSprite public function new(x:Float, y:Float) { super(x, y); - var tex = FlxAtlasFrames.fromSparrow('assets/images/alphabet.png', 'assets/images/alphabet.xml'); + var tex = Paths.getSparrowAtlas('alphabet'); frames = tex; antialiasing = true; diff --git a/source/BackgroundDancer.hx b/source/BackgroundDancer.hx index e88c01905..a619dacc2 100644 --- a/source/BackgroundDancer.hx +++ b/source/BackgroundDancer.hx @@ -9,7 +9,7 @@ class BackgroundDancer extends FlxSprite { super(x, y); - frames = FlxAtlasFrames.fromSparrow("assets/images/limo/limoDancer.png", "assets/images/limo/limoDancer.xml"); + frames = Paths.getSparrowAtlas("limo/limoDancer"); animation.addByIndices('danceLeft', 'bg dancer sketch PINK', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); animation.addByIndices('danceRight', 'bg dancer sketch PINK', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); animation.play('danceLeft'); diff --git a/source/BackgroundGirls.hx b/source/BackgroundGirls.hx index 57739fbea..c37b16f91 100644 --- a/source/BackgroundGirls.hx +++ b/source/BackgroundGirls.hx @@ -10,7 +10,7 @@ class BackgroundGirls extends FlxSprite super(x, y); // BG fangirls dissuaded - frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/bgFreaks.png', 'assets/images/weeb/bgFreaks.xml'); + frames = Paths.getSparrowAtlas('weeb/bgFreaks'); animation.addByIndices('danceLeft', 'BG girls group', CoolUtil.numberArray(14), "", 24, false); animation.addByIndices('danceRight', 'BG girls group', CoolUtil.numberArray(30, 15), "", 24, false); diff --git a/source/Character.hx b/source/Character.hx index 821c92898..4177e2b52 100644 --- a/source/Character.hx +++ b/source/Character.hx @@ -31,7 +31,7 @@ class Character extends FlxSprite { case 'gf': // GIRLFRIEND CODE - tex = FlxAtlasFrames.fromSparrow('assets/images/GF_assets.png', 'assets/images/GF_assets.xml'); + tex = Paths.getSparrowAtlas('GF_assets'); frames = tex; animation.addByPrefix('cheer', 'GF Cheer', 24, false); animation.addByPrefix('singLEFT', 'GF left note', 24, false); @@ -62,7 +62,7 @@ class Character extends FlxSprite playAnim('danceRight'); case 'gf-christmas': - tex = FlxAtlasFrames.fromSparrow('assets/images/christmas/gfChristmas.png', 'assets/images/christmas/gfChristmas.xml'); + tex = Paths.getSparrowAtlas('christmas/gfChristmas'); frames = tex; animation.addByPrefix('cheer', 'GF Cheer', 24, false); animation.addByPrefix('singLEFT', 'GF left note', 24, false); @@ -93,7 +93,7 @@ class Character extends FlxSprite playAnim('danceRight'); case 'gf-car': - tex = FlxAtlasFrames.fromSparrow('assets/images/gfCar.png', 'assets/images/gfCar.xml'); + tex = Paths.getSparrowAtlas('gfCar'); frames = tex; animation.addByIndices('singUP', 'GF Dancing Beat Hair blowing CAR', [0], "", 24, false); animation.addByIndices('danceLeft', 'GF Dancing Beat Hair blowing CAR', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); @@ -106,7 +106,7 @@ class Character extends FlxSprite playAnim('danceRight'); case 'gf-pixel': - tex = FlxAtlasFrames.fromSparrow('assets/images/weeb/gfPixel.png', 'assets/images/weeb/gfPixel.xml'); + tex = Paths.getSparrowAtlas('weeb/gfPixel'); frames = tex; animation.addByIndices('singUP', 'GF IDLE', [2], "", 24, false); animation.addByIndices('danceLeft', 'GF IDLE', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); @@ -123,7 +123,7 @@ class Character extends FlxSprite case 'dad': // DAD ANIMATION LOADING CODE - tex = FlxAtlasFrames.fromSparrow('assets/images/DADDY_DEAREST.png', 'assets/images/DADDY_DEAREST.xml'); + tex = Paths.getSparrowAtlas('DADDY_DEAREST'); frames = tex; animation.addByPrefix('idle', 'Dad idle dance', 24); animation.addByPrefix('singUP', 'Dad Sing Note UP', 24); @@ -139,7 +139,7 @@ class Character extends FlxSprite playAnim('idle'); case 'spooky': - tex = FlxAtlasFrames.fromSparrow('assets/images/spooky_kids_assets.png', 'assets/images/spooky_kids_assets.xml'); + tex = Paths.getSparrowAtlas('spooky_kids_assets'); frames = tex; animation.addByPrefix('singUP', 'spooky UP NOTE', 24, false); animation.addByPrefix('singDOWN', 'spooky DOWN note', 24, false); @@ -158,7 +158,7 @@ class Character extends FlxSprite playAnim('danceRight'); case 'mom': - tex = FlxAtlasFrames.fromSparrow('assets/images/Mom_Assets.png', 'assets/images/Mom_Assets.xml'); + tex = Paths.getSparrowAtlas('Mom_Assets'); frames = tex; animation.addByPrefix('idle', "Mom Idle", 24, false); @@ -178,7 +178,7 @@ class Character extends FlxSprite playAnim('idle'); case 'mom-car': - tex = FlxAtlasFrames.fromSparrow('assets/images/momCar.png', 'assets/images/momCar.xml'); + tex = Paths.getSparrowAtlas('momCar'); frames = tex; animation.addByPrefix('idle', "Mom Idle", 24, false); @@ -197,7 +197,7 @@ class Character extends FlxSprite playAnim('idle'); case 'monster': - tex = FlxAtlasFrames.fromSparrow('assets/images/Monster_Assets.png', 'assets/images/Monster_Assets.xml'); + tex = Paths.getSparrowAtlas('Monster_Assets'); frames = tex; animation.addByPrefix('idle', 'monster idle', 24, false); animation.addByPrefix('singUP', 'monster up note', 24, false); @@ -212,7 +212,7 @@ class Character extends FlxSprite addOffset("singDOWN", -30, -40); playAnim('idle'); case 'monster-christmas': - tex = FlxAtlasFrames.fromSparrow('assets/images/christmas/monsterChristmas.png', 'assets/images/christmas/monsterChristmas.xml'); + tex = Paths.getSparrowAtlas('christmas/monsterChristmas'); frames = tex; animation.addByPrefix('idle', 'monster idle', 24, false); animation.addByPrefix('singUP', 'monster up note', 24, false); @@ -227,7 +227,7 @@ class Character extends FlxSprite addOffset("singDOWN", -40, -94); playAnim('idle'); case 'pico': - tex = FlxAtlasFrames.fromSparrow('assets/images/Pico_FNF_assetss.png', 'assets/images/Pico_FNF_assetss.xml'); + tex = Paths.getSparrowAtlas('Pico_FNF_assetss'); frames = tex; animation.addByPrefix('idle', "Pico Idle Dance", 24); animation.addByPrefix('singUP', 'pico Up note0', 24, false); @@ -266,7 +266,7 @@ class Character extends FlxSprite flipX = true; case 'bf': - var tex = FlxAtlasFrames.fromSparrow('assets/images/BOYFRIEND.png', 'assets/images/BOYFRIEND.xml'); + var tex = Paths.getSparrowAtlas('BOYFRIEND'); frames = tex; animation.addByPrefix('idle', 'BF idle dance', 24, false); animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false); @@ -305,7 +305,7 @@ class Character extends FlxSprite flipX = true; case 'bf-christmas': - var tex = FlxAtlasFrames.fromSparrow('assets/images/christmas/bfChristmas.png', 'assets/images/christmas/bfChristmas.xml'); + var tex = Paths.getSparrowAtlas('christmas/bfChristmas'); frames = tex; animation.addByPrefix('idle', 'BF idle dance', 24, false); animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false); @@ -333,7 +333,7 @@ class Character extends FlxSprite flipX = true; case 'bf-car': - var tex = FlxAtlasFrames.fromSparrow('assets/images/bfCar.png', 'assets/images/bfCar.xml'); + var tex = Paths.getSparrowAtlas('bfCar'); frames = tex; animation.addByPrefix('idle', 'BF idle dance', 24, false); animation.addByPrefix('singUP', 'BF NOTE UP0', 24, false); @@ -358,7 +358,7 @@ class Character extends FlxSprite flipX = true; case 'bf-pixel': - frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/bfPixel.png', 'assets/images/weeb/bfPixel.xml'); + frames = Paths.getSparrowAtlas('weeb/bfPixel'); animation.addByPrefix('idle', 'BF IDLE', 24, false); animation.addByPrefix('singUP', 'BF UP NOTE', 24, false); animation.addByPrefix('singLEFT', 'BF LEFT NOTE', 24, false); @@ -391,7 +391,7 @@ class Character extends FlxSprite flipX = true; case 'bf-pixel-dead': - frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/bfPixelsDEAD.png', 'assets/images/weeb/bfPixelsDEAD.xml'); + frames = Paths.getSparrowAtlas('weeb/bfPixelsDEAD'); animation.addByPrefix('singUP', "BF Dies pixel", 24, false); animation.addByPrefix('firstDeath', "BF Dies pixel", 24, false); animation.addByPrefix('deathLoop', "Retry Loop", 24, true); @@ -409,7 +409,7 @@ class Character extends FlxSprite flipX = true; case 'senpai': - frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpai.png', 'assets/images/weeb/senpai.xml'); + frames = Paths.getSparrowAtlas('weeb/senpai'); animation.addByPrefix('idle', 'Senpai Idle', 24, false); animation.addByPrefix('singUP', 'SENPAI UP NOTE', 24, false); animation.addByPrefix('singLEFT', 'SENPAI LEFT NOTE', 24, false); @@ -429,7 +429,7 @@ class Character extends FlxSprite antialiasing = false; case 'senpai-angry': - frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpai.png', 'assets/images/weeb/senpai.xml'); + frames = Paths.getSparrowAtlas('weeb/senpai'); animation.addByPrefix('idle', 'Angry Senpai Idle', 24, false); animation.addByPrefix('singUP', 'Angry Senpai UP NOTE', 24, false); animation.addByPrefix('singLEFT', 'Angry Senpai LEFT NOTE', 24, false); @@ -449,7 +449,7 @@ class Character extends FlxSprite antialiasing = false; case 'spirit': - frames = FlxAtlasFrames.fromSpriteSheetPacker('assets/images/weeb/spirit.png', 'assets/images/weeb/spirit.txt'); + frames = Paths.getPackerAtlas('weeb/spirit'); animation.addByPrefix('idle', "idle spirit_", 24, false); animation.addByPrefix('singUP', "up_", 24, false); animation.addByPrefix('singRIGHT', "right_", 24, false); @@ -470,8 +470,7 @@ class Character extends FlxSprite antialiasing = false; case 'parents-christmas': - frames = FlxAtlasFrames.fromSparrow('assets/images/christmas/mom_dad_christmas_assets.png', - 'assets/images/christmas/mom_dad_christmas_assets.xml'); + frames = Paths.getSparrowAtlas('christmas/mom_dad_christmas_assets'); animation.addByPrefix('idle', 'Parent Christmas Idle', 24, false); animation.addByPrefix('singUP', 'Parent Up Note Dad', 24, false); animation.addByPrefix('singDOWN', 'Parent Down Note Dad', 24, false); diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 4ed3dd909..0e7afa2a2 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -354,7 +354,7 @@ class ChartingState extends MusicBeatState FlxG.sound.playMusic('assets/music/' + daSong + "_Inst" + TitleState.soundExt, 0.6); // WONT WORK FOR TUTORIAL OR TEST SONG!!! REDO LATER - vocals = new FlxSound().loadEmbedded("assets/music/" + daSong + "_Voices" + TitleState.soundExt); + vocals = new FlxSound().loadEmbedded(Paths.music(daSong + "_Voices")); FlxG.sound.list.add(vocals); FlxG.sound.music.pause(); diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index f9c443952..868c780f2 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -41,10 +41,10 @@ class DialogueBox extends FlxSpriteGroup switch (PlayState.SONG.song.toLowerCase()) { case 'senpai': - FlxG.sound.playMusic('assets/music/Lunchbox' + TitleState.soundExt, 0); + FlxG.sound.playMusic(Paths.music('Lunchbox'), 0); FlxG.sound.music.fadeIn(1, 0, 0.8); case 'thorns': - FlxG.sound.playMusic('assets/music/LunchboxScary' + TitleState.soundExt, 0); + FlxG.sound.playMusic(Paths.music('LunchboxScary'), 0); FlxG.sound.music.fadeIn(1, 0, 0.8); } @@ -61,7 +61,7 @@ class DialogueBox extends FlxSpriteGroup }, 5); portraitLeft = new FlxSprite(-20, 40); - portraitLeft.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpaiPortrait.png', 'assets/images/weeb/senpaiPortrait.xml'); + portraitLeft.frames = Paths.getSparrowAtlas('weeb/senpaiPortrait'); portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false); portraitLeft.setGraphicSize(Std.int(portraitLeft.width * PlayState.daPixelZoom * 0.9)); portraitLeft.updateHitbox(); @@ -70,7 +70,7 @@ class DialogueBox extends FlxSpriteGroup portraitLeft.visible = false; portraitRight = new FlxSprite(0, 40); - portraitRight.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/bfPortrait.png', 'assets/images/weeb/bfPortrait.xml'); + portraitRight.frames = Paths.getSparrowAtlas('weeb/bfPortrait'); portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false); portraitRight.setGraphicSize(Std.int(portraitRight.width * PlayState.daPixelZoom * 0.9)); portraitRight.updateHitbox(); @@ -79,38 +79,43 @@ class DialogueBox extends FlxSpriteGroup portraitRight.visible = false; box = new FlxSprite(-20, 45); - + + var hasDialog = false; switch (PlayState.SONG.song.toLowerCase()) { case 'senpai': - box.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/pixelUI/dialogueBox-pixel.png', - 'assets/images/weeb/pixelUI/dialogueBox-pixel.xml'); + hasDialog = true; + box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-pixel'); box.animation.addByPrefix('normalOpen', 'Text Box Appear', 24, false); box.animation.addByIndices('normal', 'Text Box Appear', [4], "", 24); case 'roses': - FlxG.sound.play('assets/sounds/ANGRY_TEXT_BOX' + TitleState.soundExt); + hasDialog = true; + FlxG.sound.play(Paths.sound('ANGRY_TEXT_BOX')); - box.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/pixelUI/dialogueBox-senpaiMad.png', - 'assets/images/weeb/pixelUI/dialogueBox-senpaiMad.xml'); + box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-senpaiMad'); box.animation.addByPrefix('normalOpen', 'SENPAI ANGRY IMPACT SPEECH', 24, false); box.animation.addByIndices('normal', 'SENPAI ANGRY IMPACT SPEECH', [4], "", 24); case 'thorns': - box.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/pixelUI/dialogueBox-evil.png', 'assets/images/weeb/pixelUI/dialogueBox-evil.xml'); + hasDialog = true; + box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-evil'); box.animation.addByPrefix('normalOpen', 'Spirit Textbox spawn', 24, false); box.animation.addByIndices('normal', 'Spirit Textbox spawn', [11], "", 24); - var face:FlxSprite = new FlxSprite(320, 170).loadGraphic('assets/images/weeb/spiritFaceForward.png'); + var face:FlxSprite = new FlxSprite(320, 170).loadGraphic(Paths.image('weeb/spiritFaceForward')); face.setGraphicSize(Std.int(face.width * 6)); add(face); } - box.animation.play('normalOpen'); - box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9)); - box.updateHitbox(); - add(box); + if (hasDialog) + { + box.animation.play('normalOpen'); + box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9)); + box.updateHitbox(); + add(box); + } - handSelect = new FlxSprite(FlxG.width * 0.9, FlxG.height * 0.9).loadGraphic('assets/images/weeb/pixelUI/hand_textbox.png'); + handSelect = new FlxSprite(FlxG.width * 0.9, FlxG.height * 0.9).loadGraphic(Paths.image('weeb/pixelUI/hand_textbox')); add(handSelect); box.screenCenter(X); @@ -129,7 +134,7 @@ class DialogueBox extends FlxSpriteGroup swagDialogue = new FlxTypeText(240, 500, Std.int(FlxG.width * 0.6), "", 32); swagDialogue.font = 'Pixel Arial 11 Bold'; swagDialogue.color = 0xFF3F2021; - swagDialogue.sounds = [FlxG.sound.load('assets/sounds/pixelText' + TitleState.soundExt, 0.6)]; + swagDialogue.sounds = [FlxG.sound.load(Paths.sound('pixelText'), 0.6)]; add(swagDialogue); dialogue = new Alphabet(0, 80, "", false, true); @@ -175,7 +180,7 @@ class DialogueBox extends FlxSpriteGroup { remove(dialogue); - FlxG.sound.play('assets/sounds/clickText' + TitleState.soundExt, 0.8); + FlxG.sound.play(Paths.sound('clickText'), 0.8); if (dialogueList[1] == null) { diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index 32373c354..a51c0c65a 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -36,7 +36,7 @@ class FreeplayState extends MusicBeatState if (FlxG.sound.music != null) { if (!FlxG.sound.music.playing) - FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + FlxG.sound.playMusic(Paths.music('freakyMenu')); } */ @@ -85,7 +85,7 @@ class FreeplayState extends MusicBeatState // LOAD CHARACTERS - var bg:FlxSprite = new FlxSprite().loadGraphic('assets/images/menuBGBlue.png'); + var bg:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuBGBlue')); add(bg); grpSongs = new FlxTypedGroup<Alphabet>(); @@ -120,7 +120,7 @@ class FreeplayState extends MusicBeatState changeSelection(); changeDiff(); - // FlxG.sound.playMusic('assets/music/title' + TitleState.soundExt, 0); + // FlxG.sound.playMusic(Paths.music('title'), 0); // FlxG.sound.music.fadeIn(2, 0, 0.8); selector = new FlxText(); @@ -235,7 +235,7 @@ class FreeplayState extends MusicBeatState #end // NGio.logEvent('Fresh'); - FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt, 0.4); + FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); curSelected += change; diff --git a/source/GameOverSubstate.hx b/source/GameOverSubstate.hx index 58fecb58f..b403296eb 100644 --- a/source/GameOverSubstate.hx +++ b/source/GameOverSubstate.hx @@ -40,7 +40,7 @@ class GameOverSubstate extends MusicBeatSubstate camFollow = new FlxObject(bf.getGraphicMidpoint().x, bf.getGraphicMidpoint().y, 1, 1); add(camFollow); - FlxG.sound.play('assets/sounds/fnf_loss_sfx' + stageSuffix + TitleState.soundExt); + FlxG.sound.play(Paths.sound('fnf_loss_sfx' + stageSuffix)); Conductor.changeBPM(100); // FlxG.camera.followLerp = 1; @@ -77,7 +77,7 @@ class GameOverSubstate extends MusicBeatSubstate if (bf.animation.curAnim.name == 'firstDeath' && bf.animation.curAnim.finished) { - FlxG.sound.playMusic('assets/music/gameOver' + stageSuffix + TitleState.soundExt); + FlxG.sound.playMusic(Paths.music('gameOver' + stageSuffix)); } if (FlxG.sound.music.playing) @@ -102,7 +102,7 @@ class GameOverSubstate extends MusicBeatSubstate isEnding = true; bf.playAnim('deathConfirm', true); FlxG.sound.music.stop(); - FlxG.sound.play('assets/music/gameOverEnd' + stageSuffix + TitleState.soundExt); + FlxG.sound.play(Paths.music('gameOverEnd' + stageSuffix)); new FlxTimer().start(0.7, function(tmr:FlxTimer) { FlxG.camera.fade(FlxColor.BLACK, 2, false, function() diff --git a/source/HealthIcon.hx b/source/HealthIcon.hx index b9810e95c..a7c71578a 100644 --- a/source/HealthIcon.hx +++ b/source/HealthIcon.hx @@ -7,7 +7,7 @@ class HealthIcon extends FlxSprite public function new(char:String = 'bf', isPlayer:Bool = false) { super(); - loadGraphic('assets/images/iconGrid.png', true, 150, 150); + loadGraphic(Paths.image('iconGrid'), true, 150, 150); antialiasing = true; animation.add('bf', [0, 1], 0, false, isPlayer); diff --git a/source/LatencyState.hx b/source/LatencyState.hx index 8ff4fab95..1136330e5 100644 --- a/source/LatencyState.hx +++ b/source/LatencyState.hx @@ -14,7 +14,7 @@ class LatencyState extends FlxState override function create() { - FlxG.sound.playMusic('assets/sounds/soundTest' + TitleState.soundExt); + FlxG.sound.playMusic(Paths.sound('soundTest')); noteGrp = new FlxTypedGroup<Note>(); add(noteGrp); diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index e1a1db228..dbd4b2a86 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -34,12 +34,12 @@ class MainMenuState extends MusicBeatState { if (!FlxG.sound.music.playing) { - FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + FlxG.sound.playMusic(Paths.music('freakyMenu')); } persistentUpdate = persistentDraw = true; - var bg:FlxSprite = new FlxSprite(-80).loadGraphic('assets/images/menuBG.png'); + var bg:FlxSprite = new FlxSprite(-80).loadGraphic(Paths.image('menuBG')); bg.scrollFactor.x = 0; bg.scrollFactor.y = 0.18; bg.setGraphicSize(Std.int(bg.width * 1.1)); @@ -51,7 +51,7 @@ class MainMenuState extends MusicBeatState camFollow = new FlxObject(0, 0, 1, 1); add(camFollow); - magenta = new FlxSprite(-80).loadGraphic('assets/images/menuDesat.png'); + magenta = new FlxSprite(-80).loadGraphic(Paths.image('menuDesat')); magenta.scrollFactor.x = 0; magenta.scrollFactor.y = 0.18; magenta.setGraphicSize(Std.int(magenta.width * 1.1)); @@ -66,7 +66,7 @@ class MainMenuState extends MusicBeatState menuItems = new FlxTypedGroup<FlxSprite>(); add(menuItems); - var tex = FlxAtlasFrames.fromSparrow('assets/images/FNF_main_menu_assets.png', 'assets/images/FNF_main_menu_assets.xml'); + var tex = Paths.getSparrowAtlas('FNF_main_menu_assets'); for (i in 0...optionShit.length) { @@ -109,13 +109,13 @@ class MainMenuState extends MusicBeatState { if (controls.UP_P) { - FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('scrollMenu')); changeItem(-1); } if (controls.DOWN_P) { - FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('scrollMenu')); changeItem(1); } @@ -137,7 +137,7 @@ class MainMenuState extends MusicBeatState else { selectedSomethin = true; - FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('confirmMenu')); FlxFlicker.flicker(magenta, 1.1, 0.15, false); diff --git a/source/MenuCharacter.hx b/source/MenuCharacter.hx index c8d50134d..ca5f9b499 100644 --- a/source/MenuCharacter.hx +++ b/source/MenuCharacter.hx @@ -13,7 +13,7 @@ class MenuCharacter extends FlxSprite this.character = character; - var tex = FlxAtlasFrames.fromSparrow('assets/images/campaign_menu_UI_characters.png', 'assets/images/campaign_menu_UI_characters.xml'); + var tex = Paths.getSparrowAtlas('campaign_menu_UI_characters'); frames = tex; animation.addByPrefix('bf', "BF idle dance white", 24); diff --git a/source/MenuItem.hx b/source/MenuItem.hx index 431e8ac77..fe3c9f238 100644 --- a/source/MenuItem.hx +++ b/source/MenuItem.hx @@ -14,7 +14,7 @@ class MenuItem extends FlxSpriteGroup { super(x, y); - var tex = FlxAtlasFrames.fromSparrow('assets/images/campaign_menu_UI_assets.png', 'assets/images/campaign_menu_UI_assets.xml'); + var tex = Paths.getSparrowAtlas('campaign_menu_UI_assets'); week = new FlxSprite(); week.frames = tex; diff --git a/source/Note.hx b/source/Note.hx index 32e1b5c18..781206b3f 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -52,7 +52,7 @@ class Note extends FlxSprite switch (daStage) { case 'school': - loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); + loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels'), true, 17, 17); animation.add('greenScroll', [6]); animation.add('redScroll', [7]); @@ -61,7 +61,7 @@ class Note extends FlxSprite if (isSustainNote) { - loadGraphic('assets/images/weeb/pixelUI/arrowEnds.png', true, 7, 6); + loadGraphic(Paths.image('weeb/pixelUI/arrowEnds'), true, 7, 6); animation.add('purpleholdend', [4]); animation.add('greenholdend', [6]); @@ -78,7 +78,7 @@ class Note extends FlxSprite updateHitbox(); case 'schoolEvil': // COPY PASTED CUZ I AM LAZY - loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); + loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels'), true, 17, 17); animation.add('greenScroll', [6]); animation.add('redScroll', [7]); @@ -87,7 +87,7 @@ class Note extends FlxSprite if (isSustainNote) { - loadGraphic('assets/images/weeb/pixelUI/arrowEnds.png', true, 7, 6); + loadGraphic(Paths.image('weeb/pixelUI/arrowEnds'), true, 7, 6); animation.add('purpleholdend', [4]); animation.add('greenholdend', [6]); @@ -104,7 +104,7 @@ class Note extends FlxSprite updateHitbox(); default: - frames = FlxAtlasFrames.fromSparrow('assets/images/NOTE_assets.png', 'assets/images/NOTE_assets.xml'); + frames = Paths.getSparrowAtlas('NOTE_assets'); animation.addByPrefix('greenScroll', 'green0'); animation.addByPrefix('redScroll', 'red0'); diff --git a/source/OptionsMenu.hx b/source/OptionsMenu.hx index 299944af7..76a175890 100644 --- a/source/OptionsMenu.hx +++ b/source/OptionsMenu.hx @@ -23,7 +23,7 @@ class OptionsMenu extends MusicBeatState override function create() { - var menuBG:FlxSprite = new FlxSprite().loadGraphic('assets/images/menuDesat.png'); + var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat')); controlsStrings = CoolUtil.coolTextFile('assets/data/controls.txt'); menuBG.color = 0xFFea71fd; menuBG.setGraphicSize(Std.int(menuBG.width * 1.1)); @@ -97,7 +97,7 @@ class OptionsMenu extends MusicBeatState NGio.logEvent('Fresh'); #end - FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt, 0.4); + FlxG.sound.play(Paths.sound('scrollMenu'), 0.4); curSelected += change; diff --git a/source/Paths.hx b/source/Paths.hx new file mode 100644 index 000000000..90f3f914d --- /dev/null +++ b/source/Paths.hx @@ -0,0 +1,52 @@ +package; + +import openfl.utils.Assets as OpenFlAssets; + +import flixel.FlxG; +import flixel.graphics.frames.FlxAtlasFrames; + +class Paths +{ + inline public static var SOUND_EXT = #if web "mp3" #else "ogg" #end; + + static var currentLevel:String; + + static public function file(file:String) + { + var path = 'assets/$file'; + if (currentLevel != null && OpenFlAssets.exists('$currentLevel:$path')) + return '$currentLevel:$path'; + + return path; + } + + inline static public function sound(key:String) + { + return file('sounds/$key.$SOUND_EXT'); + } + + inline static public function soundRandom(key:String, min:Int, max:Int) + { + return file('sounds/$key${FlxG.random.int(min, max)}.$SOUND_EXT'); + } + + inline static public function music(key:String) + { + return file('music/$key.$SOUND_EXT'); + } + + inline static public function image(key:String) + { + return file('images/$key.png'); + } + + inline static public function getSparrowAtlas(key:String) + { + return FlxAtlasFrames.fromSparrow(image(key), file('images/$key.xml')); + } + + inline static public function getPackerAtlas(key:String) + { + return FlxAtlasFrames.fromSpriteSheetPacker(image(key), file('images/$key.txt')); + } +} \ No newline at end of file diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index ac747dbca..e7371ed1d 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -22,7 +22,7 @@ class PauseSubState extends MusicBeatSubstate { super(); - pauseMusic = new FlxSound().loadEmbedded('assets/music/breakfast' + TitleState.soundExt, true, true); + pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true); pauseMusic.volume = 0; pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2))); diff --git a/source/PlayState.hx b/source/PlayState.hx index cc869e5de..5536c9225 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -174,7 +174,7 @@ class PlayState extends MusicBeatState curStage = "spooky"; halloweenLevel = true; - var hallowTex = FlxAtlasFrames.fromSparrow('assets/images/halloween_bg.png', 'assets/images/halloween_bg.xml'); + var hallowTex = Paths.getSparrowAtlas('halloween_bg'); halloweenBG = new FlxSprite(-200, -100); halloweenBG.frames = hallowTex; @@ -190,11 +190,11 @@ class PlayState extends MusicBeatState { curStage = 'philly'; - var bg:FlxSprite = new FlxSprite(-100).loadGraphic('assets/images/philly/sky.png'); + var bg:FlxSprite = new FlxSprite(-100).loadGraphic(Paths.image('philly/sky')); bg.scrollFactor.set(0.1, 0.1); add(bg); - var city:FlxSprite = new FlxSprite(-10).loadGraphic('assets/images/philly/city.png'); + var city:FlxSprite = new FlxSprite(-10).loadGraphic(Paths.image('philly/city')); city.scrollFactor.set(0.3, 0.3); city.setGraphicSize(Std.int(city.width * 0.85)); city.updateHitbox(); @@ -205,7 +205,7 @@ class PlayState extends MusicBeatState for (i in 0...5) { - var light:FlxSprite = new FlxSprite(city.x).loadGraphic('assets/images/philly/win' + i + '.png'); + var light:FlxSprite = new FlxSprite(city.x).loadGraphic(Paths.image('philly/win' + i)); light.scrollFactor.set(0.3, 0.3); light.visible = false; light.setGraphicSize(Std.int(light.width * 0.85)); @@ -213,18 +213,18 @@ class PlayState extends MusicBeatState phillyCityLights.add(light); } - var streetBehind:FlxSprite = new FlxSprite(-40, 50).loadGraphic('assets/images/philly/behindTrain.png'); + var streetBehind:FlxSprite = new FlxSprite(-40, 50).loadGraphic(Paths.image('philly/behindTrain')); add(streetBehind); - phillyTrain = new FlxSprite(2000, 360).loadGraphic('assets/images/philly/train.png'); + phillyTrain = new FlxSprite(2000, 360).loadGraphic(Paths.image('philly/train')); add(phillyTrain); - trainSound = new FlxSound().loadEmbedded('assets/sounds/train_passes' + TitleState.soundExt); + trainSound = new FlxSound().loadEmbedded(Paths.sound('train_passes')); FlxG.sound.list.add(trainSound); // var cityLights:FlxSprite = new FlxSprite().loadGraphic(AssetPaths.win0.png); - var street:FlxSprite = new FlxSprite(-40, streetBehind.y).loadGraphic('assets/images/philly/street.png'); + var street:FlxSprite = new FlxSprite(-40, streetBehind.y).loadGraphic(Paths.image('philly/street')); add(street); } else if (SONG.song.toLowerCase() == 'milf' || SONG.song.toLowerCase() == 'satin-panties' || SONG.song.toLowerCase() == 'high') @@ -232,12 +232,12 @@ class PlayState extends MusicBeatState curStage = 'limo'; defaultCamZoom = 0.90; - var skyBG:FlxSprite = new FlxSprite(-120, -50).loadGraphic('assets/images/limo/limoSunset.png'); + var skyBG:FlxSprite = new FlxSprite(-120, -50).loadGraphic(Paths.image('limo/limoSunset')); skyBG.scrollFactor.set(0.1, 0.1); add(skyBG); var bgLimo:FlxSprite = new FlxSprite(-200, 480); - bgLimo.frames = FlxAtlasFrames.fromSparrow('assets/images/limo/bgLimo.png', 'assets/images/limo/bgLimo.xml'); + bgLimo.frames = Paths.getSparrowAtlas('limo/bgLimo'); bgLimo.animation.addByPrefix('drive', "background limo pink", 24); bgLimo.animation.play('drive'); bgLimo.scrollFactor.set(0.4, 0.4); @@ -253,7 +253,7 @@ class PlayState extends MusicBeatState grpLimoDancers.add(dancer); } - var overlayShit:FlxSprite = new FlxSprite(-500, -600).loadGraphic('assets/images/limo/limoOverlay.png'); + var overlayShit:FlxSprite = new FlxSprite(-500, -600).loadGraphic(Paths.image('limo/limoOverlay')); overlayShit.alpha = 0.5; // add(overlayShit); @@ -263,7 +263,7 @@ class PlayState extends MusicBeatState // overlayShit.shader = shaderBullshit; - var limoTex = FlxAtlasFrames.fromSparrow('assets/images/limo/limoDrive.png', 'assets/images/limo/limoDrive.xml'); + var limoTex = Paths.getSparrowAtlas('limo/limoDrive'); limo = new FlxSprite(-120, 550); limo.frames = limoTex; @@ -271,7 +271,7 @@ class PlayState extends MusicBeatState limo.animation.play('drive'); limo.antialiasing = true; - fastCar = new FlxSprite(-300, 160).loadGraphic('assets/images/limo/fastCarLol.png'); + fastCar = new FlxSprite(-300, 160).loadGraphic(Paths.image('limo/fastCarLol')); // add(limo); } else if (SONG.song.toLowerCase() == 'cocoa' || SONG.song.toLowerCase() == 'eggnog') @@ -280,7 +280,7 @@ class PlayState extends MusicBeatState defaultCamZoom = 0.80; - var bg:FlxSprite = new FlxSprite(-1000, -500).loadGraphic('assets/images/christmas/bgWalls.png'); + var bg:FlxSprite = new FlxSprite(-1000, -500).loadGraphic(Paths.image('christmas/bgWalls')); bg.antialiasing = true; bg.scrollFactor.set(0.2, 0.2); bg.active = false; @@ -289,7 +289,7 @@ class PlayState extends MusicBeatState add(bg); upperBoppers = new FlxSprite(-240, -90); - upperBoppers.frames = FlxAtlasFrames.fromSparrow('assets/images/christmas/upperBop.png', 'assets/images/christmas/upperBop.xml'); + upperBoppers.frames = Paths.getSparrowAtlas('christmas/upperBop'); upperBoppers.animation.addByPrefix('bop', "Upper Crowd Bob", 24, false); upperBoppers.antialiasing = true; upperBoppers.scrollFactor.set(0.33, 0.33); @@ -297,7 +297,7 @@ class PlayState extends MusicBeatState upperBoppers.updateHitbox(); add(upperBoppers); - var bgEscalator:FlxSprite = new FlxSprite(-1100, -600).loadGraphic('assets/images/christmas/bgEscalator.png'); + var bgEscalator:FlxSprite = new FlxSprite(-1100, -600).loadGraphic(Paths.image('christmas/bgEscalator')); bgEscalator.antialiasing = true; bgEscalator.scrollFactor.set(0.3, 0.3); bgEscalator.active = false; @@ -305,13 +305,13 @@ class PlayState extends MusicBeatState bgEscalator.updateHitbox(); add(bgEscalator); - var tree:FlxSprite = new FlxSprite(370, -250).loadGraphic('assets/images/christmas/christmasTree.png'); + var tree:FlxSprite = new FlxSprite(370, -250).loadGraphic(Paths.image('christmas/christmasTree')); tree.antialiasing = true; tree.scrollFactor.set(0.40, 0.40); add(tree); bottomBoppers = new FlxSprite(-300, 140); - bottomBoppers.frames = FlxAtlasFrames.fromSparrow('assets/images/christmas/bottomBop.png', 'assets/images/christmas/bottomBop.xml'); + bottomBoppers.frames = Paths.getSparrowAtlas('christmas/bottomBop'); bottomBoppers.animation.addByPrefix('bop', 'Bottom Level Boppers', 24, false); bottomBoppers.antialiasing = true; bottomBoppers.scrollFactor.set(0.9, 0.9); @@ -319,13 +319,13 @@ class PlayState extends MusicBeatState bottomBoppers.updateHitbox(); add(bottomBoppers); - var fgSnow:FlxSprite = new FlxSprite(-600, 700).loadGraphic('assets/images/christmas/fgSnow.png'); + var fgSnow:FlxSprite = new FlxSprite(-600, 700).loadGraphic(Paths.image('christmas/fgSnow')); fgSnow.active = false; fgSnow.antialiasing = true; add(fgSnow); santa = new FlxSprite(-840, 150); - santa.frames = FlxAtlasFrames.fromSparrow('assets/images/christmas/santa.png', 'assets/images/christmas/santa.xml'); + santa.frames = Paths.getSparrowAtlas('christmas/santa'); santa.animation.addByPrefix('idle', 'santa idle in fear', 24, false); santa.antialiasing = true; add(santa); @@ -333,7 +333,7 @@ class PlayState extends MusicBeatState else if (SONG.song.toLowerCase() == 'winter-horrorland') { curStage = 'mallEvil'; - var bg:FlxSprite = new FlxSprite(-400, -500).loadGraphic('assets/images/christmas/evilBG.png'); + var bg:FlxSprite = new FlxSprite(-400, -500).loadGraphic(Paths.image('christmas/evilBG')); bg.antialiasing = true; bg.scrollFactor.set(0.2, 0.2); bg.active = false; @@ -341,12 +341,12 @@ class PlayState extends MusicBeatState bg.updateHitbox(); add(bg); - var evilTree:FlxSprite = new FlxSprite(300, -300).loadGraphic('assets/images/christmas/evilTree.png'); + var evilTree:FlxSprite = new FlxSprite(300, -300).loadGraphic(Paths.image('christmas/evilTree')); evilTree.antialiasing = true; evilTree.scrollFactor.set(0.2, 0.2); add(evilTree); - var evilSnow:FlxSprite = new FlxSprite(-200, 700).loadGraphic("assets/images/christmas/evilSnow.png"); + var evilSnow:FlxSprite = new FlxSprite(-200, 700).loadGraphic(Paths.image("christmas/evilSnow")); evilSnow.antialiasing = true; add(evilSnow); } @@ -356,26 +356,26 @@ class PlayState extends MusicBeatState // defaultCamZoom = 0.9; - var bgSky = new FlxSprite().loadGraphic('assets/images/weeb/weebSky.png'); + var bgSky = new FlxSprite().loadGraphic(Paths.image('weeb/weebSky')); bgSky.scrollFactor.set(0.1, 0.1); add(bgSky); var repositionShit = -200; - var bgSchool:FlxSprite = new FlxSprite(repositionShit, 0).loadGraphic('assets/images/weeb/weebSchool.png'); + var bgSchool:FlxSprite = new FlxSprite(repositionShit, 0).loadGraphic(Paths.image('weeb/weebSchool')); bgSchool.scrollFactor.set(0.6, 0.90); add(bgSchool); - var bgStreet:FlxSprite = new FlxSprite(repositionShit).loadGraphic('assets/images/weeb/weebStreet.png'); + var bgStreet:FlxSprite = new FlxSprite(repositionShit).loadGraphic(Paths.image('weeb/weebStreet')); bgStreet.scrollFactor.set(0.95, 0.95); add(bgStreet); - var fgTrees:FlxSprite = new FlxSprite(repositionShit + 170, 130).loadGraphic('assets/images/weeb/weebTreesBack.png'); + var fgTrees:FlxSprite = new FlxSprite(repositionShit + 170, 130).loadGraphic(Paths.image('weeb/weebTreesBack')); fgTrees.scrollFactor.set(0.9, 0.9); add(fgTrees); var bgTrees:FlxSprite = new FlxSprite(repositionShit - 380, -800); - var treetex = FlxAtlasFrames.fromSpriteSheetPacker('assets/images/weeb/weebTrees.png', 'assets/images/weeb/weebTrees.txt'); + var treetex = Paths.getPackerAtlas('weeb/weebTrees'); bgTrees.frames = treetex; bgTrees.animation.add('treeLoop', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], 12); bgTrees.animation.play('treeLoop'); @@ -383,7 +383,7 @@ class PlayState extends MusicBeatState add(bgTrees); var treeLeaves:FlxSprite = new FlxSprite(repositionShit, -40); - treeLeaves.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/petals.png', 'assets/images/weeb/petals.xml'); + treeLeaves.frames = Paths.getSparrowAtlas('weeb/petals'); treeLeaves.animation.addByPrefix('leaves', 'PETALS ALL', 24, true); treeLeaves.animation.play('leaves'); treeLeaves.scrollFactor.set(0.85, 0.85); @@ -428,7 +428,7 @@ class PlayState extends MusicBeatState var posY = 200; var bg:FlxSprite = new FlxSprite(posX, posY); - bg.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/animatedEvilSchool.png', 'assets/images/weeb/animatedEvilSchool.xml'); + bg.frames = Paths.getSparrowAtlas('weeb/animatedEvilSchool'); bg.animation.addByPrefix('idle', 'background 2', 24); bg.animation.play('idle'); bg.scrollFactor.set(0.8, 0.9); @@ -436,13 +436,13 @@ class PlayState extends MusicBeatState add(bg); /* - var bg:FlxSprite = new FlxSprite(posX, posY).loadGraphic('assets/images/weeb/evilSchoolBG.png'); + var bg:FlxSprite = new FlxSprite(posX, posY).loadGraphic(Paths.image('weeb/evilSchoolBG')); bg.scale.set(6, 6); // bg.setGraphicSize(Std.int(bg.width * 6)); // bg.updateHitbox(); add(bg); - var fg:FlxSprite = new FlxSprite(posX, posY).loadGraphic('assets/images/weeb/evilSchoolFG.png'); + var fg:FlxSprite = new FlxSprite(posX, posY).loadGraphic(Paths.image('weeb/evilSchoolFG')); fg.scale.set(6, 6); // fg.setGraphicSize(Std.int(fg.width * 6)); // fg.updateHitbox(); @@ -483,7 +483,7 @@ class PlayState extends MusicBeatState { defaultCamZoom = 0.9; curStage = 'stage'; - var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic('assets/images/stageback.png'); + var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic(Paths.image('stageback')); // bg.setGraphicSize(Std.int(bg.width * 2.5)); // bg.updateHitbox(); bg.antialiasing = true; @@ -491,7 +491,7 @@ class PlayState extends MusicBeatState bg.active = false; add(bg); - var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic('assets/images/stagefront.png'); + var stageFront:FlxSprite = new FlxSprite(-650, 600).loadGraphic(Paths.image('stagefront')); stageFront.setGraphicSize(Std.int(stageFront.width * 1.1)); stageFront.updateHitbox(); stageFront.antialiasing = true; @@ -499,7 +499,7 @@ class PlayState extends MusicBeatState stageFront.active = false; add(stageFront); - var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic('assets/images/stagecurtains.png'); + var stageCurtains:FlxSprite = new FlxSprite(-500, -300).loadGraphic(Paths.image('stagecurtains')); stageCurtains.setGraphicSize(Std.int(stageCurtains.width * 0.9)); stageCurtains.updateHitbox(); stageCurtains.antialiasing = true; @@ -662,7 +662,7 @@ class PlayState extends MusicBeatState FlxG.fixedTimestep = false; - healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic('assets/images/healthBar.png'); + healthBarBG = new FlxSprite(0, FlxG.height * 0.9).loadGraphic(Paths.image('healthBar')); healthBarBG.screenCenter(X); healthBarBG.scrollFactor.set(); add(healthBarBG); @@ -716,7 +716,7 @@ class PlayState extends MusicBeatState new FlxTimer().start(0.1, function(tmr:FlxTimer) { remove(blackScreen); - FlxG.sound.play('assets/sounds/Lights_Turn_On' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('Lights_Turn_On')); camFollow.y = -2050; camFollow.x += 200; FlxG.camera.focusOn(camFollow.getPosition()); @@ -738,7 +738,7 @@ class PlayState extends MusicBeatState case 'senpai': schoolIntro(doof); case 'roses': - FlxG.sound.play('assets/sounds/ANGRY' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('ANGRY')); schoolIntro(doof); case 'thorns': schoolIntro(doof); @@ -768,7 +768,7 @@ class PlayState extends MusicBeatState red.scrollFactor.set(); var senpaiEvil:FlxSprite = new FlxSprite(); - senpaiEvil.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpaiCrazy.png', 'assets/images/weeb/senpaiCrazy.xml'); + senpaiEvil.frames = Paths.getSparrowAtlas('weeb/senpaiCrazy'); senpaiEvil.animation.addByPrefix('idle', 'Senpai Pre Explosion', 24, false); senpaiEvil.setGraphicSize(Std.int(senpaiEvil.width * 6)); senpaiEvil.updateHitbox(); @@ -812,7 +812,7 @@ class PlayState extends MusicBeatState else { senpaiEvil.animation.play('idle'); - FlxG.sound.play('assets/sounds/Senpai_Dies' + TitleState.soundExt, 1, false, null, true, function() + FlxG.sound.play(Paths.sound('Senpai_Dies'), 1, false, null, true, function() { remove(senpaiEvil); remove(red); @@ -893,7 +893,7 @@ class PlayState extends MusicBeatState { case 0: - FlxG.sound.play('assets/sounds/intro3' + altSuffix + TitleState.soundExt, 0.6); + FlxG.sound.play(Paths.sound('intro3'), 0.6); case 1: var ready:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[0]); ready.scrollFactor.set(); @@ -911,7 +911,7 @@ class PlayState extends MusicBeatState ready.destroy(); } }); - FlxG.sound.play('assets/sounds/intro2' + altSuffix + TitleState.soundExt, 0.6); + FlxG.sound.play(Paths.sound('intro2'), 0.6); case 2: var set:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[1]); set.scrollFactor.set(); @@ -928,7 +928,7 @@ class PlayState extends MusicBeatState set.destroy(); } }); - FlxG.sound.play('assets/sounds/intro1' + altSuffix + TitleState.soundExt, 0.6); + FlxG.sound.play(Paths.sound('intro1'), 0.6); case 3: var go:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[2]); go.scrollFactor.set(); @@ -947,7 +947,7 @@ class PlayState extends MusicBeatState go.destroy(); } }); - FlxG.sound.play('assets/sounds/introGo' + altSuffix + TitleState.soundExt, 0.6); + FlxG.sound.play(Paths.sound('introGo'), 0.6); case 4: } @@ -968,7 +968,7 @@ class PlayState extends MusicBeatState lastReportedPlayheadPosition = 0; if (!paused) - FlxG.sound.playMusic("assets/music/" + SONG.song + "_Inst" + TitleState.soundExt, 1, false); + FlxG.sound.playMusic(Paths.music(SONG.song + "_Inst"), 1, false); FlxG.sound.music.onComplete = endSong; vocals.play(); } @@ -985,7 +985,7 @@ class PlayState extends MusicBeatState curSong = songData.song; if (SONG.needsVoices) - vocals = new FlxSound().loadEmbedded("assets/music/" + curSong + "_Voices" + TitleState.soundExt); + vocals = new FlxSound().loadEmbedded(Paths.music(curSong + "_Voices")); else vocals = new FlxSound(); @@ -1085,7 +1085,7 @@ class PlayState extends MusicBeatState switch (curStage) { case 'school': - babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); + babyArrow.loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels'), true, 17, 17); babyArrow.animation.add('green', [6]); babyArrow.animation.add('red', [7]); babyArrow.animation.add('blue', [5]); @@ -1122,7 +1122,7 @@ class PlayState extends MusicBeatState case 'schoolEvil': // ALL THIS IS COPY PASTED CUZ IM LAZY - babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); + babyArrow.loadGraphic(Paths.image('weeb/pixelUI/arrows-pixels'), true, 17, 17); babyArrow.animation.add('green', [6]); babyArrow.animation.add('red', [7]); babyArrow.animation.add('blue', [5]); @@ -1157,7 +1157,7 @@ class PlayState extends MusicBeatState } default: - babyArrow.frames = FlxAtlasFrames.fromSparrow('assets/images/NOTE_assets.png', 'assets/images/NOTE_assets.xml'); + babyArrow.frames = Paths.getSparrowAtlas('NOTE_assets'); babyArrow.animation.addByPrefix('green', 'arrowUP'); babyArrow.animation.addByPrefix('blue', 'arrowDOWN'); babyArrow.animation.addByPrefix('purple', 'arrowLEFT'); @@ -1624,7 +1624,7 @@ class PlayState extends MusicBeatState if (storyPlaylist.length <= 0) { - FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + FlxG.sound.playMusic(Paths.music('freakyMenu')); FlxG.switchState(new StoryMenuState()); @@ -1661,7 +1661,7 @@ class PlayState extends MusicBeatState add(blackShit); camHUD.visible = false; - FlxG.sound.play('assets/sounds/Lights_Shut_off' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('Lights_Shut_off')); } if (SONG.song.toLowerCase() == 'senpai') @@ -1750,7 +1750,7 @@ class PlayState extends MusicBeatState rating.velocity.y -= FlxG.random.int(140, 175); rating.velocity.x -= FlxG.random.int(0, 10); - var comboSpr:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + pixelShitPart1 + 'combo' + pixelShitPart2 + '.png'); + var comboSpr:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'combo' + pixelShitPart2)); comboSpr.screenCenter(); comboSpr.x = coolText.x; comboSpr.acceleration.y = 600; @@ -1784,7 +1784,7 @@ class PlayState extends MusicBeatState var daLoop:Int = 0; for (i in seperatedScore) { - var numScore:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2 + '.png'); + var numScore:FlxSprite = new FlxSprite().loadGraphic(Paths.image(pixelShitPart1 + 'num' + Std.int(i) + pixelShitPart2)); numScore.screenCenter(); numScore.x = coolText.x + (43 * daLoop) - 90; numScore.y += 80; @@ -2048,8 +2048,8 @@ class PlayState extends MusicBeatState songScore -= 10; - FlxG.sound.play('assets/sounds/missnote' + FlxG.random.int(1, 3) + TitleState.soundExt, FlxG.random.float(0.1, 0.2)); - // FlxG.sound.play('assets/sounds/missnote1' + TitleState.soundExt, 1, false); + FlxG.sound.play(Paths.soundRandom('missnote', 1, 3), FlxG.random.float(0.1, 0.2)); + // FlxG.sound.play(Paths.sound('missnote1'), 1, false); // FlxG.log.add('played imss note'); boyfriend.stunned = true; @@ -2159,7 +2159,7 @@ class PlayState extends MusicBeatState function fastCarDrive() { - FlxG.sound.play('assets/sounds/carPass' + FlxG.random.int(0, 1) + TitleState.soundExt, 0.7); + FlxG.sound.play(Paths.soundRandom('carPass', 0, 1), 0.7); fastCar.velocity.x = (FlxG.random.int(170, 220) / FlxG.elapsed) * 3; fastCarCanDrive = false; @@ -2225,7 +2225,7 @@ class PlayState extends MusicBeatState function lightningStrikeShit():Void { - FlxG.sound.play('assets/sounds/thunder_' + FlxG.random.int(1, 2) + TitleState.soundExt); + FlxG.sound.play(Paths.soundRandom('thunder_', 1, 2)); halloweenBG.animation.play('lightning'); lightningStrikeBeat = curBeat; diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index d5787c526..73f2d2c87 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -72,7 +72,7 @@ class StoryMenuState extends MusicBeatState if (FlxG.sound.music != null) { if (!FlxG.sound.music.playing) - FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + FlxG.sound.playMusic(Paths.music('freakyMenu')); } persistentUpdate = persistentDraw = true; @@ -90,7 +90,7 @@ class StoryMenuState extends MusicBeatState rankText.size = scoreText.size; rankText.screenCenter(X); - var ui_tex = FlxAtlasFrames.fromSparrow('assets/images/campaign_menu_UI_assets.png', 'assets/images/campaign_menu_UI_assets.xml'); + var ui_tex = Paths.getSparrowAtlas('campaign_menu_UI_assets'); var yellowBG:FlxSprite = new FlxSprite(0, 56).makeGraphic(FlxG.width, 400, 0xFFF9CF51); grpWeekText = new FlxTypedGroup<MenuItem>(); @@ -267,7 +267,7 @@ class StoryMenuState extends MusicBeatState if (controls.BACK && !movedBack && !selectedWeek) { - FlxG.sound.play('assets/sounds/cancelMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('cancelMenu')); movedBack = true; FlxG.switchState(new MainMenuState()); } @@ -285,7 +285,7 @@ class StoryMenuState extends MusicBeatState { if (stopspamming == false) { - FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('confirmMenu')); grpWeekText.members[curWeek].week.animation.resume(); grpWeekCharacters.members[1].animation.play('bfConfirm'); @@ -381,7 +381,7 @@ class StoryMenuState extends MusicBeatState bullShit++; } - FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt); + FlxG.sound.play(Paths.sound('scrollMenu')); updateText(); } diff --git a/source/TitleState.hx b/source/TitleState.hx index 53452e45c..cfdaea54c 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -118,10 +118,10 @@ class TitleState extends MusicBeatState // https://github.com/HaxeFlixel/flixel-addons/pull/348 // var music:FlxSound = new FlxSound(); - // music.loadStream('assets/music/freakyMenu' + TitleState.soundExt); + // music.loadStream(Paths.music('freakyMenu')); // FlxG.sound.list.add(music); // music.play(); - FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt, 0); + FlxG.sound.playMusic(Paths.music('freakyMenu'), 0); FlxG.sound.music.fadeIn(4, 0, 0.7); } @@ -136,7 +136,7 @@ class TitleState extends MusicBeatState add(bg); logoBl = new FlxSprite(-150, -100); - logoBl.frames = FlxAtlasFrames.fromSparrow('assets/images/logoBumpin.png', 'assets/images/logoBumpin.xml'); + logoBl.frames = Paths.getSparrowAtlas('logoBumpin'); logoBl.antialiasing = true; logoBl.animation.addByPrefix('bump', 'logo bumpin', 24); logoBl.animation.play('bump'); @@ -145,7 +145,7 @@ class TitleState extends MusicBeatState // logoBl.color = FlxColor.BLACK; gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07); - gfDance.frames = FlxAtlasFrames.fromSparrow('assets/images/gfDanceTitle.png', 'assets/images/gfDanceTitle.xml'); + gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle'); gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); gfDance.antialiasing = true; @@ -153,7 +153,7 @@ class TitleState extends MusicBeatState add(logoBl); titleText = new FlxSprite(100, FlxG.height * 0.8); - titleText.frames = FlxAtlasFrames.fromSparrow('assets/images/titleEnter.png', 'assets/images/titleEnter.xml'); + titleText.frames = Paths.getSparrowAtlas('titleEnter'); titleText.animation.addByPrefix('idle', "Press Enter to Begin", 24); titleText.animation.addByPrefix('press', "ENTER PRESSED", 24); titleText.antialiasing = true; @@ -162,7 +162,7 @@ class TitleState extends MusicBeatState // titleText.screenCenter(X); add(titleText); - var logo:FlxSprite = new FlxSprite().loadGraphic('assets/images/logo.png'); + var logo:FlxSprite = new FlxSprite().loadGraphic(Paths.image('logo')); logo.screenCenter(); logo.antialiasing = true; // add(logo); @@ -184,7 +184,7 @@ class TitleState extends MusicBeatState credTextShit.visible = false; - ngSpr = new FlxSprite(0, FlxG.height * 0.52).loadGraphic('assets/images/newgrounds_logo.png'); + ngSpr = new FlxSprite(0, FlxG.height * 0.52).loadGraphic(Paths.image('newgrounds_logo')); add(ngSpr); ngSpr.visible = false; ngSpr.setGraphicSize(Std.int(ngSpr.width * 0.8)); @@ -259,7 +259,7 @@ class TitleState extends MusicBeatState titleText.animation.play('press'); FlxG.camera.flash(FlxColor.WHITE, 1); - FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt, 0.7); + FlxG.sound.play(Paths.sound('confirmMenu'), 0.7); transitioning = true; // FlxG.sound.music.stop(); @@ -280,7 +280,7 @@ class TitleState extends MusicBeatState FlxG.switchState(new MainMenuState()); } }); - // FlxG.sound.play('assets/music/titleShoot' + TitleState.soundExt, 0.7); + // FlxG.sound.play(Paths.music('titleShoot'), 0.7); } if (pressedEnter && !skippedIntro) diff --git a/source/import.hx b/source/import.hx new file mode 100644 index 000000000..e0a4198ec --- /dev/null +++ b/source/import.hx @@ -0,0 +1 @@ +import Paths; \ No newline at end of file From b3ebc4365f494e45c61a3fd8211661d59773a290 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Mon, 8 Feb 2021 20:43:17 -0600 Subject: [PATCH 08/39] move files to libraries --- Project.xml | 92 ++++++++++++++++++++++++++++++++++++++++----- source/Paths.hx | 41 +++++++++++++++----- source/PlayState.hx | 5 ++- 3 files changed, 118 insertions(+), 20 deletions(-) diff --git a/Project.xml b/Project.xml index 498368897..7e61c7e09 100644 --- a/Project.xml +++ b/Project.xml @@ -40,18 +40,92 @@ <classpath name="source" /> - <assets path="assets/images" /> - <assets path="assets/data" /> + <assets path="assets/preload" rename="assets" exclude="*.ogg" if="web"/> + <assets path="assets/preload" rename="assets" exclude="*.mp3" unless="web"/> + + <library name="shared" preload="true" /> + <assets path="assets/shared" library="shared" exclude="*.ogg" if="web"/> + <assets path="assets/shared" library="shared" exclude="*.mp3" unless="web"/> + + <library name="blammed" preload="true" /> + <assets path="assets/blammed" library="blammed" exclude="*.ogg" if="web"/> + <assets path="assets/blammed" library="blammed" exclude="*.mp3" unless="web"/> + + <library name="bopeebo" preload="true" /> + <assets path="assets/bopeebo" library="bopeebo" exclude="*.ogg" if="web"/> + <assets path="assets/bopeebo" library="bopeebo" exclude="*.mp3" unless="web"/> + + <library name="cocoa" preload="true" /> + <assets path="assets/cocoa" library="cocoa" exclude="*.ogg" if="web"/> + <assets path="assets/cocoa" library="cocoa" exclude="*.mp3" unless="web"/> + + <library name="dadbattle" preload="true" /> + <assets path="assets/dadbattle" library="dadbattle" exclude="*.ogg" if="web"/> + <assets path="assets/dadbattle" library="dadbattle" exclude="*.mp3" unless="web"/> + + <library name="eggnog" preload="true" /> + <assets path="assets/eggnog" library="eggnog" exclude="*.ogg" if="web"/> + <assets path="assets/eggnog" library="eggnog" exclude="*.mp3" unless="web"/> + + <library name="fresh" preload="true" /> + <assets path="assets/fresh" library="fresh" exclude="*.ogg" if="web"/> + <assets path="assets/fresh" library="fresh" exclude="*.mp3" unless="web"/> + + <library name="high" preload="true" /> + <assets path="assets/high" library="high" exclude="*.ogg" if="web"/> + <assets path="assets/high" library="high" exclude="*.mp3" unless="web"/> + + <library name="milf" preload="true" /> + <assets path="assets/milf" library="milf" exclude="*.ogg" if="web"/> + <assets path="assets/milf" library="milf" exclude="*.mp3" unless="web"/> + + <library name="monster" preload="true" /> + <assets path="assets/monster" library="monster" exclude="*.ogg" if="web"/> + <assets path="assets/monster" library="monster" exclude="*.mp3" unless="web"/> + + <library name="pico" preload="true" /> + <assets path="assets/pico" library="pico" exclude="*.ogg" if="web"/> + <assets path="assets/pico" library="pico" exclude="*.mp3" unless="web"/> + + <library name="roses" preload="true" /> + <assets path="assets/roses" library="roses" exclude="*.ogg" if="web"/> + <assets path="assets/roses" library="roses" exclude="*.mp3" unless="web"/> + + <library name="satin-panties" preload="true" /> + <assets path="assets/satin-panties" library="satin-panties" exclude="*.ogg" if="web"/> + <assets path="assets/satin-panties" library="satin-panties" exclude="*.mp3" unless="web"/> + + <library name="senpai" preload="true" /> + <assets path="assets/senpai" library="senpai" exclude="*.ogg" if="web"/> + <assets path="assets/senpai" library="senpai" exclude="*.mp3" unless="web"/> + + <library name="south" preload="true" /> + <assets path="assets/south" library="south" exclude="*.ogg" if="web"/> + <assets path="assets/south" library="south" exclude="*.mp3" unless="web"/> + + <library name="spookeez" preload="true" /> + <assets path="assets/spookeez" library="spookeez" exclude="*.ogg" if="web"/> + <assets path="assets/spookeez" library="spookeez" exclude="*.mp3" unless="web"/> + + <library name="test" preload="true" /> + <assets path="assets/test" library="test" exclude="*.ogg" if="web"/> + <assets path="assets/test" library="test" exclude="*.mp3" unless="web"/> + + <library name="thorns" preload="true" /> + <assets path="assets/thorns" library="thorns" exclude="*.ogg" if="web"/> + <assets path="assets/thorns" library="thorns" exclude="*.mp3" unless="web"/> + + <library name="tutorial" preload="true" /> + <assets path="assets/tutorial" library="tutorial" exclude="*.ogg" if="web"/> + <assets path="assets/tutorial" library="tutorial" exclude="*.mp3" unless="web"/> + + <library name="winter-horrorland" preload="true" /> + <assets path="assets/winter-horrorland" library="winter-horrorland" exclude="*.ogg" if="web"/> + <assets path="assets/winter-horrorland" library="winter-horrorland" exclude="*.mp3" unless="web"/> + <assets path='example_mods' rename='mods' embed='false'/> <!-- <template path='mods' /> --> - <!-- <library name="noPreload" preload='false'/> --> - <!-- <library name="noPreload"/> --> - <assets path="assets/music" include="*.mp3" if="web"/> - <assets path="assets/music" include="*.ogg" unless="web"/> - <assets path="assets/sounds" include="*.mp3" if="web" /> - <assets path="assets/sounds" include="*.ogg" unless="web" /> - <assets path="CHANGELOG.md"/> <!-- NOTE FOR FUTURE SELF SINCE FONTS ARE ALWAYS FUCKY diff --git a/source/Paths.hx b/source/Paths.hx index 90f3f914d..8ec0fc46e 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -1,6 +1,7 @@ package; import openfl.utils.Assets as OpenFlAssets; +import openfl.utils.AssetType; import flixel.FlxG; import flixel.graphics.frames.FlxAtlasFrames; @@ -11,33 +12,55 @@ class Paths static var currentLevel:String; - static public function file(file:String) + static public function setCurrentLevel(name:String) { - var path = 'assets/$file'; - if (currentLevel != null && OpenFlAssets.exists('$currentLevel:$path')) - return '$currentLevel:$path'; + currentLevel = name.toLowerCase(); + } + + static function getPath(file:String, type:AssetType) + { + if (currentLevel != null) + { + var levelPath = getLibraryPath(currentLevel, file); + if (OpenFlAssets.exists(levelPath, type)) + return levelPath; + + levelPath = getLibraryPath("shared", file); + if (OpenFlAssets.exists(levelPath, type)) + return levelPath; + } - return path; + return 'assets/$file'; + } + + inline static function getLibraryPath(library:String, file:String) + { + return '$library:assets/$library/$file'; + } + + inline static public function file(file:String, type:AssetType = TEXT) + { + return getPath(file, type); } inline static public function sound(key:String) { - return file('sounds/$key.$SOUND_EXT'); + return getPath('sounds/$key.$SOUND_EXT', SOUND); } inline static public function soundRandom(key:String, min:Int, max:Int) { - return file('sounds/$key${FlxG.random.int(min, max)}.$SOUND_EXT'); + return getPath('sounds/$key${FlxG.random.int(min, max)}.$SOUND_EXT', SOUND); } inline static public function music(key:String) { - return file('music/$key.$SOUND_EXT'); + return getPath('music/$key.$SOUND_EXT', MUSIC); } inline static public function image(key:String) { - return file('images/$key.png'); + return getPath('images/$key.png', IMAGE); } inline static public function getSparrowAtlas(key:String) diff --git a/source/PlayState.hx b/source/PlayState.hx index 5536c9225..733bc158c 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -139,6 +139,7 @@ class PlayState extends MusicBeatState if (SONG == null) SONG = Song.loadFromJson('tutorial'); + Paths.setCurrentLevel(SONG.song); Conductor.changeBPM(SONG.bpm); @@ -968,7 +969,7 @@ class PlayState extends MusicBeatState lastReportedPlayheadPosition = 0; if (!paused) - FlxG.sound.playMusic(Paths.music(SONG.song + "_Inst"), 1, false); + FlxG.sound.playMusic(Paths.music("Inst"), 1, false); FlxG.sound.music.onComplete = endSong; vocals.play(); } @@ -985,7 +986,7 @@ class PlayState extends MusicBeatState curSong = songData.song; if (SONG.needsVoices) - vocals = new FlxSound().loadEmbedded(Paths.music(curSong + "_Voices")); + vocals = new FlxSound().loadEmbedded(Paths.music("Voices")); else vocals = new FlxSound(); From baab5f97491513214e3e353ca76af57bd131d8df Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Tue, 9 Feb 2021 12:07:05 -0600 Subject: [PATCH 09/39] move songs to song folder and create libraries for each week --- Project.xml | 98 +++-------- source/FreeplayState.hx | 4 +- source/GameOverState.hx | 2 +- source/GameOverSubstate.hx | 2 +- source/LoadingState.hx | 341 +++++++++++++++++++++++++++++++++++++ source/NGio.hx | 2 +- source/Paths.hx | 10 ++ source/PlayState.hx | 6 +- source/StoryMenuState.hx | 4 +- 9 files changed, 385 insertions(+), 84 deletions(-) create mode 100644 source/LoadingState.hx diff --git a/Project.xml b/Project.xml index 7e61c7e09..80f5bc764 100644 --- a/Project.xml +++ b/Project.xml @@ -43,86 +43,40 @@ <assets path="assets/preload" rename="assets" exclude="*.ogg" if="web"/> <assets path="assets/preload" rename="assets" exclude="*.mp3" unless="web"/> - <library name="shared" preload="true" /> + <library name="songs" preload="false" /> + <assets path="assets/songs" exclude="*.ogg" if="web"/> + <assets path="assets/songs" exclude="*.mp3" unless="web"/> + + <library name="shared" preload="false" /> <assets path="assets/shared" library="shared" exclude="*.ogg" if="web"/> <assets path="assets/shared" library="shared" exclude="*.mp3" unless="web"/> - <library name="blammed" preload="true" /> - <assets path="assets/blammed" library="blammed" exclude="*.ogg" if="web"/> - <assets path="assets/blammed" library="blammed" exclude="*.mp3" unless="web"/> + <library name="week1" preload="false" /> + <assets path="assets/week1" library="week1" exclude="*.ogg" if="web"/> + <assets path="assets/week1" library="week1" exclude="*.mp3" unless="web"/> - <library name="bopeebo" preload="true" /> - <assets path="assets/bopeebo" library="bopeebo" exclude="*.ogg" if="web"/> - <assets path="assets/bopeebo" library="bopeebo" exclude="*.mp3" unless="web"/> + <!-- <library name="week2" preload="false" /> + <assets path="assets/week2" library="week2" exclude="*.ogg" if="web"/> + <assets path="assets/week2" library="week2" exclude="*.mp3" unless="web"/> --> - <library name="cocoa" preload="true" /> - <assets path="assets/cocoa" library="cocoa" exclude="*.ogg" if="web"/> - <assets path="assets/cocoa" library="cocoa" exclude="*.mp3" unless="web"/> + <!-- <library name="week3" preload="false" /> + <assets path="assets/week3" library="week3" exclude="*.ogg" if="web"/> + <assets path="assets/week3" library="week3" exclude="*.mp3" unless="web"/> --> - <library name="dadbattle" preload="true" /> - <assets path="assets/dadbattle" library="dadbattle" exclude="*.ogg" if="web"/> - <assets path="assets/dadbattle" library="dadbattle" exclude="*.mp3" unless="web"/> + <!-- <library name="week4" preload="false" /> + <assets path="assets/week4" library="week4" exclude="*.ogg" if="web"/> + <assets path="assets/week4" library="week4" exclude="*.mp3" unless="web"/> --> - <library name="eggnog" preload="true" /> - <assets path="assets/eggnog" library="eggnog" exclude="*.ogg" if="web"/> - <assets path="assets/eggnog" library="eggnog" exclude="*.mp3" unless="web"/> - - <library name="fresh" preload="true" /> - <assets path="assets/fresh" library="fresh" exclude="*.ogg" if="web"/> - <assets path="assets/fresh" library="fresh" exclude="*.mp3" unless="web"/> - - <library name="high" preload="true" /> - <assets path="assets/high" library="high" exclude="*.ogg" if="web"/> - <assets path="assets/high" library="high" exclude="*.mp3" unless="web"/> - - <library name="milf" preload="true" /> - <assets path="assets/milf" library="milf" exclude="*.ogg" if="web"/> - <assets path="assets/milf" library="milf" exclude="*.mp3" unless="web"/> - - <library name="monster" preload="true" /> - <assets path="assets/monster" library="monster" exclude="*.ogg" if="web"/> - <assets path="assets/monster" library="monster" exclude="*.mp3" unless="web"/> - - <library name="pico" preload="true" /> - <assets path="assets/pico" library="pico" exclude="*.ogg" if="web"/> - <assets path="assets/pico" library="pico" exclude="*.mp3" unless="web"/> - - <library name="roses" preload="true" /> - <assets path="assets/roses" library="roses" exclude="*.ogg" if="web"/> - <assets path="assets/roses" library="roses" exclude="*.mp3" unless="web"/> - - <library name="satin-panties" preload="true" /> - <assets path="assets/satin-panties" library="satin-panties" exclude="*.ogg" if="web"/> - <assets path="assets/satin-panties" library="satin-panties" exclude="*.mp3" unless="web"/> - - <library name="senpai" preload="true" /> - <assets path="assets/senpai" library="senpai" exclude="*.ogg" if="web"/> - <assets path="assets/senpai" library="senpai" exclude="*.mp3" unless="web"/> - - <library name="south" preload="true" /> - <assets path="assets/south" library="south" exclude="*.ogg" if="web"/> - <assets path="assets/south" library="south" exclude="*.mp3" unless="web"/> - - <library name="spookeez" preload="true" /> - <assets path="assets/spookeez" library="spookeez" exclude="*.ogg" if="web"/> - <assets path="assets/spookeez" library="spookeez" exclude="*.mp3" unless="web"/> - - <library name="test" preload="true" /> - <assets path="assets/test" library="test" exclude="*.ogg" if="web"/> - <assets path="assets/test" library="test" exclude="*.mp3" unless="web"/> - - <library name="thorns" preload="true" /> - <assets path="assets/thorns" library="thorns" exclude="*.ogg" if="web"/> - <assets path="assets/thorns" library="thorns" exclude="*.mp3" unless="web"/> - - <library name="tutorial" preload="true" /> - <assets path="assets/tutorial" library="tutorial" exclude="*.ogg" if="web"/> - <assets path="assets/tutorial" library="tutorial" exclude="*.mp3" unless="web"/> - - <library name="winter-horrorland" preload="true" /> - <assets path="assets/winter-horrorland" library="winter-horrorland" exclude="*.ogg" if="web"/> - <assets path="assets/winter-horrorland" library="winter-horrorland" exclude="*.mp3" unless="web"/> + <!-- <library name="week5" preload="false" /> + <assets path="assets/week5" library="week5" exclude="*.ogg" if="web"/> + <assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/> --> + <!-- <library name="week6" preload="false" /> + <assets path="assets/week6" library="week6" exclude="*.ogg" if="web"/> + <assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/> --> + + + <assets path='example_mods' rename='mods' embed='false'/> <!-- <template path='mods' /> --> diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index a51c0c65a..c1f02ce07 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -198,9 +198,7 @@ class FreeplayState extends MusicBeatState PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].toLowerCase()); PlayState.isStoryMode = false; PlayState.storyDifficulty = curDifficulty; - FlxG.switchState(new PlayState()); - if (FlxG.sound.music != null) - FlxG.sound.music.stop(); + LoadingState.loadAndSwitchState(new PlayState()); } } diff --git a/source/GameOverState.hx b/source/GameOverState.hx index ba7cb3472..57c60d1f9 100644 --- a/source/GameOverState.hx +++ b/source/GameOverState.hx @@ -74,7 +74,7 @@ class GameOverState extends FlxTransitionableState FlxG.sound.music.fadeOut(0.5, 0, function(twn:FlxTween) { FlxG.sound.music.stop(); - FlxG.switchState(new PlayState()); + LoadingState.loadAndSwitchState(new PlayState()); }); } super.update(elapsed); diff --git a/source/GameOverSubstate.hx b/source/GameOverSubstate.hx index b403296eb..1d672dbf4 100644 --- a/source/GameOverSubstate.hx +++ b/source/GameOverSubstate.hx @@ -107,7 +107,7 @@ class GameOverSubstate extends MusicBeatSubstate { FlxG.camera.fade(FlxColor.BLACK, 2, false, function() { - FlxG.switchState(new PlayState()); + LoadingState.loadAndSwitchState(new PlayState()); }); }); } diff --git a/source/LoadingState.hx b/source/LoadingState.hx new file mode 100644 index 000000000..64fb3c87f --- /dev/null +++ b/source/LoadingState.hx @@ -0,0 +1,341 @@ +package; + +import flixel.FlxG; +import flixel.FlxState; +import flixel.FlxSprite; +import flixel.graphics.frames.FlxAtlasFrames; +import flixel.util.FlxTimer; + +import openfl.utils.Assets; +import lime.utils.Assets as LimeAssets; +import lime.utils.AssetBundle; +import lime.utils.AssetLibrary; +import lime.utils.AssetManifest; +import lime.app.Future; +import lime.app.Promise; + +import haxe.io.Path; + +class LoadingState extends MusicBeatState +{ + inline static var MIN_TIME = 1.0; + + var target:FlxState; + var stopMusic = false; + var callbacks:MultiCallback; + + var logo:FlxSprite; + var gfDance:FlxSprite; + var danceLeft = false; + + function new(target:FlxState, stopMusic:Bool) + { + super(); + this.target = target; + this.stopMusic = stopMusic; + } + + override function create() + { + logo = new FlxSprite(-150, -100); + logo.frames = FlxAtlasFrames.fromSparrow('assets/images/logoBumpin.png', 'assets/images/logoBumpin.xml'); + logo.antialiasing = true; + logo.animation.addByPrefix('bump', 'logo bumpin', 24); + logo.animation.play('bump'); + logo.updateHitbox(); + // logoBl.screenCenter(); + // logoBl.color = FlxColor.BLACK; + + gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07); + gfDance.frames = FlxAtlasFrames.fromSparrow('assets/images/gfDanceTitle.png', 'assets/images/gfDanceTitle.xml'); + gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); + gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); + gfDance.antialiasing = true; + add(gfDance); + add(logo); + + // function onSongsManifestInit() + // { + callbacks = new MultiCallback(onLoad); + var introComplete = callbacks.add("introComplete"); + checkLoadSong(getSongPath()); + checkLoadSong(getVocalPath()); + checkLibrary("shared"); + if (PlayState.storyWeek > 0) + checkLibrary("week" + PlayState.storyWeek); + else + checkLibrary("tutorial"); + + var fadeTime = 0.5; + FlxG.camera.fade(FlxG.camera.bgColor, fadeTime, true); + new FlxTimer().start(fadeTime + MIN_TIME, function(_) introComplete()); + // } + + // initSongsManifest(onSongsManifestInit); + } + + function checkLoadSong(path:String) + { + if (!Assets.cache.hasSound(path)) + { + var library = Assets.getLibrary("songs"); + final symbolPath = path.split(":").pop(); + @:privateAccess + library.types.set(symbolPath, SOUND); + @:privateAccess + library.pathGroups.set(symbolPath, [library.__cacheBreak(symbolPath)]); + var callback = callbacks.add("song:" + path); + Assets.loadSound(path).onComplete(function (_) { callback(); }); + } + } + + function checkLibrary(library:String) + { + if (Assets.getLibrary(library) == null) + { + var callback = callbacks.add("library:" + library); + Assets.loadLibrary(library).onComplete(function (_) { callback(); }); + } + } + + override function beatHit() + { + super.beatHit(); + + logo.animation.play('bump'); + danceLeft = !danceLeft; + + if (danceLeft) + gfDance.animation.play('danceRight'); + else + gfDance.animation.play('danceLeft'); + } + + override function update(elapsed:Float) + { + super.update(elapsed); + } + + function onLoad() + { + if (stopMusic && FlxG.sound.music != null) + FlxG.sound.music.stop(); + + FlxG.switchState(target); + } + + static function getSongPath() + { + return Paths.inst(PlayState.SONG.song); + } + + static function getVocalPath() + { + return Paths.voices(PlayState.SONG.song); + } + + inline static public function loadAndSwitchState(target:FlxState, stopMusic = false) + { + FlxG.switchState(getNextState(target, stopMusic)); + } + + static function getNextState(target:FlxState, stopMusic = false):FlxState + { + #if js + var loaded = isSoundLoaded(getSongPath()) + && (!PlayState.SONG.needsVoices || isSoundLoaded(getVocalPath())) + && isLibraryLoaded("shared"); + + if (!loaded) + return new LoadingState(target, stopMusic); + #end + if (stopMusic && FlxG.sound.music != null) + FlxG.sound.music.stop(); + + return target; + } + + #if js + static function isSoundLoaded(path:String):Bool + { + return Assets.cache.hasSound(path); + } + + static function isLibraryLoaded(library:String):Bool + { + return Assets.getLibrary(library) != null; + } + #end + + override function destroy() + { + super.destroy(); + + callbacks = null; + } + + + /** + * creates the song manifest without loading all the songs so we can load them individually + * @param onComplete called on load + * @return Future<AssetLibrary> + */ + static function initSongsManifest(onComplete:Void->Void):Future<AssetLibrary> + { + final id = "songs"; + var promise = new Promise<AssetLibrary>(); + + // #if (tools && !display && !macro) + var library = LimeAssets.getLibrary(id); + + if (library != null) + { + onComplete(); + return Future.withValue(library); + } + + var path = id; + var rootPath = null; + + // @:privateAccess + // if (LimeAssets.bundlePaths.exists(id)) + // { + // AssetBundle.loadFromFile(bundlePaths.get(id)).onComplete(function(bundle) + // { + // if (bundle == null) + // { + // promise.error("Cannot load bundle for library \"" + id + "\""); + // return; + // } + + // var library = AssetLibrary.fromBundle(bundle); + + // if (library == null) + // { + // promise.error("Cannot open library \"" + id + "\""); + // } + // else + // { + // libraries.set(id, library); + // library.onChange.add(LimeAssets.onChange.dispatch); + // promise.completeWith(Future.withValue(library)); + // onComplete(); + // } + // }).onError(function(_) + // { + // promise.error("There is no asset library with an ID of \"" + id + "\""); + // }); + // } + // else + // { + @:privateAccess + final libraryPaths = LimeAssets.libraryPaths; + if (libraryPaths.exists(id)) + { + path = libraryPaths[id]; + rootPath = Path.directory(path); + } + else + { + if (StringTools.endsWith(path, ".bundle")) + { + rootPath = path; + path += "/library.json"; + } + else + { + rootPath = Path.directory(path); + } + @:privateAccess + path = LimeAssets.__cacheBreak(path); + } + + AssetManifest.loadFromFile(path, rootPath).onComplete(function(manifest) + { + if (manifest == null) + { + promise.error("Cannot parse asset manifest for library \"" + id + "\""); + return; + } + + var library = AssetLibrary.fromManifest(manifest); + + if (library == null) + { + promise.error("Cannot open library \"" + id + "\""); + } + else + { + @:privateAccess + LimeAssets.libraries.set(id, library); + library.onChange.add(LimeAssets.onChange.dispatch); + promise.completeWith(Future.withValue(library)); + onComplete(); + } + }).onError(function(_) + { + promise.error("There is no asset library with an ID of \"" + id + "\""); + }); + // } + // #end + + return promise.future; + } +} + +class MultiCallback +{ + public var callback:Void->Void; + public var logId:String = null; + public var length(default, null) = 0; + public var numRemaining(default, null) = 0; + + var unfired = new Map<String, Void->Void>(); + var fired = new Array<String>(); + + public function new (callback:Void->Void, logId:String = null) + { + this.callback = callback; + this.logId = logId; + } + + public function add(id = "untitled") + { + id = '$length:$id'; + length++; + numRemaining++; + var func:Void->Void = null; + func = function () + { + if (unfired.exists(id)) + { + unfired.remove(id); + fired.push(id); + numRemaining--; + + if (logId != null) + log('fired $id, $numRemaining remaining'); + + if (numRemaining == 0) + { + if (logId != null) + log('all callbacks fired'); + callback(); + } + } + else + log('already fired $id'); + } + unfired[id] = func; + return func; + } + + inline function log(msg):Void + { + if (logId != null) + trace('$logId: $msg'); + } + + public function getFired() return fired.copy(); + public function getUnfired() return [for (id in unfired) id]; +} \ No newline at end of file diff --git a/source/NGio.hx b/source/NGio.hx index 96ced6257..3cf18cd23 100644 --- a/source/NGio.hx +++ b/source/NGio.hx @@ -41,7 +41,7 @@ class NGio { var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response<GetCurrentVersionResult>) { - GAME_VER = response.result.data.current_version; + GAME_VER = response.result.data.currentVersion; trace('CURRENT NG VERSION: ' + GAME_VER); gotOnlineVer = true; }); diff --git a/source/Paths.hx b/source/Paths.hx index 8ec0fc46e..4e2094c42 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -58,6 +58,16 @@ class Paths return getPath('music/$key.$SOUND_EXT', MUSIC); } + inline static public function voices(song:String) + { + return "songs:" + getPath('songs/${song.toLowerCase()}/Voices.$SOUND_EXT', MUSIC); + } + + inline static public function inst(song:String) + { + return "songs:" + getPath('songs/${song.toLowerCase()}/Inst.$SOUND_EXT', MUSIC); + } + inline static public function image(key:String) { return getPath('images/$key.png', IMAGE); diff --git a/source/PlayState.hx b/source/PlayState.hx index 733bc158c..45149110e 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -969,7 +969,7 @@ class PlayState extends MusicBeatState lastReportedPlayheadPosition = 0; if (!paused) - FlxG.sound.playMusic(Paths.music("Inst"), 1, false); + FlxG.sound.playMusic(Paths.inst(PlayState.SONG.song), 1, false); FlxG.sound.music.onComplete = endSong; vocals.play(); } @@ -986,7 +986,7 @@ class PlayState extends MusicBeatState curSong = songData.song; if (SONG.needsVoices) - vocals = new FlxSound().loadEmbedded(Paths.music("Voices")); + vocals = new FlxSound().loadEmbedded(Paths.voices(PlayState.SONG.song)); else vocals = new FlxSound(); @@ -1675,7 +1675,7 @@ class PlayState extends MusicBeatState PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]); FlxG.sound.music.stop(); - FlxG.switchState(new PlayState()); + LoadingState.loadAndSwitchState(new PlayState()); transIn = FlxTransitionableState.defaultTransIn; transOut = FlxTransitionableState.defaultTransOut; diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index 73f2d2c87..bd5f13e51 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -313,9 +313,7 @@ class StoryMenuState extends MusicBeatState PlayState.campaignScore = 0; new FlxTimer().start(1, function(tmr:FlxTimer) { - if (FlxG.sound.music != null) - FlxG.sound.music.stop(); - FlxG.switchState(new PlayState()); + LoadingState.loadAndSwitchState(new PlayState(), true); }); } } From 225ee24fc349beb68a83bd0321686d0c25881602 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Wed, 10 Feb 2021 14:18:14 -0600 Subject: [PATCH 10/39] move files to weeks and load songs individually --- Project.xml | 56 +++++++----- source/ChartParser.hx | 2 +- source/ChartingState.hx | 4 +- source/DialogueBox.hx | 59 ++++++------ source/FreeplayState.hx | 8 +- source/LoadingState.hx | 193 ++++++++++++++++----------------------- source/Note.hx | 2 + source/OptionsMenu.hx | 2 +- source/Paths.hx | 30 +++++- source/PlayState.hx | 33 ++++--- source/Song.hx | 2 +- source/StoryMenuState.hx | 2 +- source/TitleState.hx | 9 +- 13 files changed, 205 insertions(+), 197 deletions(-) diff --git a/Project.xml b/Project.xml index 80f5bc764..9215a2185 100644 --- a/Project.xml +++ b/Project.xml @@ -40,42 +40,56 @@ <classpath name="source" /> - <assets path="assets/preload" rename="assets" exclude="*.ogg" if="web"/> - <assets path="assets/preload" rename="assets" exclude="*.mp3" unless="web"/> + <assets path="assets/preload" exclude="*.ogg" if="web"/> + <assets path="assets/preload" exclude="*.mp3" unless="web"/> + + <define name="PRELOAD_ALL" unless="web" /> + + <library name="songs" preload="false" unless="PRELOAD_ALL"/> + <library name="songs" preload="true" if="PRELOAD_ALL"/> + <assets path="assets/songs" library="songs" exclude="*.ogg" if="web"/> + <assets path="assets/songs" library="songs" exclude="*.mp3" unless="web"/> - <library name="songs" preload="false" /> - <assets path="assets/songs" exclude="*.ogg" if="web"/> - <assets path="assets/songs" exclude="*.mp3" unless="web"/> - - <library name="shared" preload="false" /> + <library name="shared" preload="true"/> + <!-- <library name="shared" preload="false" unless="PRELOAD_ALL"/> + <library name="shared" preload="true" if="PRELOAD_ALL"/> --> <assets path="assets/shared" library="shared" exclude="*.ogg" if="web"/> <assets path="assets/shared" library="shared" exclude="*.mp3" unless="web"/> - <library name="week1" preload="false" /> + <library name="tutorial" preload="false" unless="PRELOAD_ALL"/> + <library name="tutorial" preload="true" if="PRELOAD_ALL"/> + <assets path="assets/tutorial" library="tutorial" exclude="*.ogg" if="web"/> + <assets path="assets/tutorial" library="tutorial" exclude="*.mp3" unless="web"/> + + <library name="week1" preload="false" unless="PRELOAD_ALL"/> + <library name="week1" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week1" library="week1" exclude="*.ogg" if="web"/> <assets path="assets/week1" library="week1" exclude="*.mp3" unless="web"/> - <!-- <library name="week2" preload="false" /> + <library name="week2" preload="false" unless="PRELOAD_ALL"/> + <library name="week2" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week2" library="week2" exclude="*.ogg" if="web"/> - <assets path="assets/week2" library="week2" exclude="*.mp3" unless="web"/> --> + <assets path="assets/week2" library="week2" exclude="*.mp3" unless="web"/> - <!-- <library name="week3" preload="false" /> + <library name="week3" preload="false" unless="PRELOAD_ALL"/> + <library name="week3" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week3" library="week3" exclude="*.ogg" if="web"/> - <assets path="assets/week3" library="week3" exclude="*.mp3" unless="web"/> --> + <assets path="assets/week3" library="week3" exclude="*.mp3" unless="web"/> - <!-- <library name="week4" preload="false" /> + <library name="week4" preload="false" unless="PRELOAD_ALL"/> + <library name="week4" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week4" library="week4" exclude="*.ogg" if="web"/> - <assets path="assets/week4" library="week4" exclude="*.mp3" unless="web"/> --> + <assets path="assets/week4" library="week4" exclude="*.mp3" unless="web"/> - <!-- <library name="week5" preload="false" /> + <library name="week5" preload="false" unless="PRELOAD_ALL"/> + <library name="week5" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week5" library="week5" exclude="*.ogg" if="web"/> - <assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/> --> + <assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/> - <!-- <library name="week6" preload="false" /> + <library name="week6" preload="false" unless="PRELOAD_ALL"/> + <library name="week6" preload="true" if="PRELOAD_ALL"/> <assets path="assets/week6" library="week6" exclude="*.ogg" if="web"/> - <assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/> --> - - + <assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/> <assets path='example_mods' rename='mods' embed='false'/> <!-- <template path='mods' /> --> @@ -101,7 +115,7 @@ <haxelib name="flixel-ui" /> <haxelib name="newgrounds"/> <haxelib name="faxe" if='switch'/> - <haxelib name="polymod"/> + <haxelib name="polymod" unless="web"/> <!-- <haxelib name="markdown" /> --> <!-- <haxelib name="HtmlParser" /> --> diff --git a/source/ChartParser.hx b/source/ChartParser.hx index cba97ce80..3884c0e54 100644 --- a/source/ChartParser.hx +++ b/source/ChartParser.hx @@ -11,7 +11,7 @@ class ChartParser var IMG_WIDTH:Int = 8; var regex:EReg = new EReg("[ \t]*((\r\n)|\r|\n)[ \t]*", "g"); - var csvData = FlxStringUtil.imageToCSV('assets/data/' + songName + '/' + songName + '_section' + section + '.png'); + var csvData = FlxStringUtil.imageToCSV(Paths.file('data/' + songName + '/' + songName + '_section' + section + '.png')); var lines:Array<String> = regex.split(csvData); var rows:Array<String> = lines.filter(function(line) return line != ""); diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 0e7afa2a2..cc7d91846 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -225,7 +225,7 @@ class ChartingState extends MusicBeatState stepperBPM.value = Conductor.bpm; stepperBPM.name = 'song_bpm'; - var characters:Array<String> = CoolUtil.coolTextFile('assets/data/characterList.txt'); + var characters:Array<String> = CoolUtil.coolTextFile(Paths.txt('characterList')); var player1DropDown = new FlxUIDropDownMenu(10, 100, FlxUIDropDownMenu.makeStrIdLabelArray(characters, true), function(character:String) { @@ -351,7 +351,7 @@ class ChartingState extends MusicBeatState // vocals.stop(); } - FlxG.sound.playMusic('assets/music/' + daSong + "_Inst" + TitleState.soundExt, 0.6); + FlxG.sound.playMusic(Paths.inst(daSong), 0.6); // WONT WORK FOR TUTORIAL OR TEST SONG!!! REDO LATER vocals = new FlxSound().loadEmbedded(Paths.music(daSong + "_Voices")); diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx index 868c780f2..4b4252506 100644 --- a/source/DialogueBox.hx +++ b/source/DialogueBox.hx @@ -60,24 +60,6 @@ class DialogueBox extends FlxSpriteGroup bgFade.alpha = 0.7; }, 5); - portraitLeft = new FlxSprite(-20, 40); - portraitLeft.frames = Paths.getSparrowAtlas('weeb/senpaiPortrait'); - portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false); - portraitLeft.setGraphicSize(Std.int(portraitLeft.width * PlayState.daPixelZoom * 0.9)); - portraitLeft.updateHitbox(); - portraitLeft.scrollFactor.set(); - add(portraitLeft); - portraitLeft.visible = false; - - portraitRight = new FlxSprite(0, 40); - portraitRight.frames = Paths.getSparrowAtlas('weeb/bfPortrait'); - portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false); - portraitRight.setGraphicSize(Std.int(portraitRight.width * PlayState.daPixelZoom * 0.9)); - portraitRight.updateHitbox(); - portraitRight.scrollFactor.set(); - add(portraitRight); - portraitRight.visible = false; - box = new FlxSprite(-20, 45); var hasDialog = false; @@ -107,19 +89,40 @@ class DialogueBox extends FlxSpriteGroup add(face); } - if (hasDialog) - { - box.animation.play('normalOpen'); - box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9)); - box.updateHitbox(); - add(box); - } + this.dialogueList = dialogueList; + + if (!hasDialog) + return; + + portraitLeft = new FlxSprite(-20, 40); + portraitLeft.frames = Paths.getSparrowAtlas('weeb/senpaiPortrait'); + portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false); + portraitLeft.setGraphicSize(Std.int(portraitLeft.width * PlayState.daPixelZoom * 0.9)); + portraitLeft.updateHitbox(); + portraitLeft.scrollFactor.set(); + add(portraitLeft); + portraitLeft.visible = false; + + portraitRight = new FlxSprite(0, 40); + portraitRight.frames = Paths.getSparrowAtlas('weeb/bfPortrait'); + portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false); + portraitRight.setGraphicSize(Std.int(portraitRight.width * PlayState.daPixelZoom * 0.9)); + portraitRight.updateHitbox(); + portraitRight.scrollFactor.set(); + add(portraitRight); + portraitRight.visible = false; + + box.animation.play('normalOpen'); + box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9)); + box.updateHitbox(); + add(box); + + box.screenCenter(X); + portraitLeft.screenCenter(X); handSelect = new FlxSprite(FlxG.width * 0.9, FlxG.height * 0.9).loadGraphic(Paths.image('weeb/pixelUI/hand_textbox')); add(handSelect); - box.screenCenter(X); - portraitLeft.screenCenter(X); if (!talkingRight) { @@ -140,8 +143,6 @@ class DialogueBox extends FlxSpriteGroup dialogue = new Alphabet(0, 80, "", false, true); // dialogue.x = 90; // add(dialogue); - - this.dialogueList = dialogueList; } var dialogueOpened:Bool = false; diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index c1f02ce07..b39ebc973 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -30,7 +30,7 @@ class FreeplayState extends MusicBeatState override function create() { - songs = CoolUtil.coolTextFile('assets/data/freeplaySonglist.txt'); + songs = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); /* if (FlxG.sound.music != null) @@ -104,7 +104,7 @@ class FreeplayState extends MusicBeatState scoreText = new FlxText(FlxG.width * 0.7, 5, 0, "", 32); // scoreText.autoSize = false; - scoreText.setFormat("assets/fonts/vcr.ttf", 32, FlxColor.WHITE, RIGHT); + scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT); // scoreText.alignment = RIGHT; var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 66, 0xFF000000); @@ -249,7 +249,9 @@ class FreeplayState extends MusicBeatState // lerpScore = 0; #end - FlxG.sound.playMusic('assets/music/' + songs[curSelected] + "_Inst" + TitleState.soundExt, 0); + #if PRELOAD_ALL + FlxG.sound.playMusic(Paths.inst(songs[curSelected]), 0); + #end var bullShit:Int = 0; diff --git a/source/LoadingState.hx b/source/LoadingState.hx index 64fb3c87f..8e3676ec0 100644 --- a/source/LoadingState.hx +++ b/source/LoadingState.hx @@ -1,5 +1,7 @@ package; +import lime.app.Promise; +import lime.app.Future; import flixel.FlxG; import flixel.FlxState; import flixel.FlxSprite; @@ -8,11 +10,8 @@ import flixel.util.FlxTimer; import openfl.utils.Assets; import lime.utils.Assets as LimeAssets; -import lime.utils.AssetBundle; import lime.utils.AssetLibrary; import lime.utils.AssetManifest; -import lime.app.Future; -import lime.app.Promise; import haxe.io.Path; @@ -38,7 +37,7 @@ class LoadingState extends MusicBeatState override function create() { logo = new FlxSprite(-150, -100); - logo.frames = FlxAtlasFrames.fromSparrow('assets/images/logoBumpin.png', 'assets/images/logoBumpin.xml'); + logo.frames = Paths.getSparrowAtlas('logoBumpin'); logo.antialiasing = true; logo.animation.addByPrefix('bump', 'logo bumpin', 24); logo.animation.play('bump'); @@ -47,31 +46,33 @@ class LoadingState extends MusicBeatState // logoBl.color = FlxColor.BLACK; gfDance = new FlxSprite(FlxG.width * 0.4, FlxG.height * 0.07); - gfDance.frames = FlxAtlasFrames.fromSparrow('assets/images/gfDanceTitle.png', 'assets/images/gfDanceTitle.xml'); + gfDance.frames = Paths.getSparrowAtlas('gfDanceTitle'); gfDance.animation.addByIndices('danceLeft', 'gfDance', [30, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "", 24, false); gfDance.animation.addByIndices('danceRight', 'gfDance', [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "", 24, false); gfDance.antialiasing = true; add(gfDance); add(logo); - // function onSongsManifestInit() - // { - callbacks = new MultiCallback(onLoad); - var introComplete = callbacks.add("introComplete"); - checkLoadSong(getSongPath()); - checkLoadSong(getVocalPath()); - checkLibrary("shared"); - if (PlayState.storyWeek > 0) - checkLibrary("week" + PlayState.storyWeek); - else - checkLibrary("tutorial"); - - var fadeTime = 0.5; - FlxG.camera.fade(FlxG.camera.bgColor, fadeTime, true); - new FlxTimer().start(fadeTime + MIN_TIME, function(_) introComplete()); - // } - - // initSongsManifest(onSongsManifestInit); + initSongsManifest().onComplete + ( + function (lib) + { + callbacks = new MultiCallback(onLoad); + var introComplete = callbacks.add("introComplete"); + checkLoadSong(getSongPath()); + if (PlayState.SONG.needsVoices) + checkLoadSong(getVocalPath()); + checkLibrary("shared"); + if (PlayState.storyWeek > 0) + checkLibrary("week" + PlayState.storyWeek); + else + checkLibrary("tutorial"); + + var fadeTime = 0.5; + FlxG.camera.fade(FlxG.camera.bgColor, fadeTime, true); + new FlxTimer().start(fadeTime + MIN_TIME, function(_) introComplete()); + } + ); } function checkLoadSong(path:String) @@ -80,10 +81,10 @@ class LoadingState extends MusicBeatState { var library = Assets.getLibrary("songs"); final symbolPath = path.split(":").pop(); - @:privateAccess - library.types.set(symbolPath, SOUND); - @:privateAccess - library.pathGroups.set(symbolPath, [library.__cacheBreak(symbolPath)]); + // @:privateAccess + // library.types.set(symbolPath, SOUND); + // @:privateAccess + // library.pathGroups.set(symbolPath, [library.__cacheBreak(symbolPath)]); var callback = callbacks.add("song:" + path); Assets.loadSound(path).onComplete(function (_) { callback(); }); } @@ -91,8 +92,13 @@ class LoadingState extends MusicBeatState function checkLibrary(library:String) { + trace(Assets.hasLibrary(library)); if (Assets.getLibrary(library) == null) { + @:privateAccess + if (!LimeAssets.libraryPaths.exists(library)) + throw "Missing library: " + library; + var callback = callbacks.add("library:" + library); Assets.loadLibrary(library).onComplete(function (_) { callback(); }); } @@ -114,6 +120,10 @@ class LoadingState extends MusicBeatState override function update(elapsed:Float) { super.update(elapsed); + #if debug + if (FlxG.keys.justPressed.SPACE) + trace('fired: ' + callbacks.getFired() + " unfired:" + callbacks.getUnfired()); + #end } function onLoad() @@ -141,6 +151,7 @@ class LoadingState extends MusicBeatState static function getNextState(target:FlxState, stopMusic = false):FlxState { + Paths.setCurrentLevel("week" + PlayState.storyWeek); #if js var loaded = isSoundLoaded(getSongPath()) && (!PlayState.SONG.needsVoices || isSoundLoaded(getVocalPath())) @@ -174,110 +185,68 @@ class LoadingState extends MusicBeatState callbacks = null; } - - /** - * creates the song manifest without loading all the songs so we can load them individually - * @param onComplete called on load - * @return Future<AssetLibrary> - */ - static function initSongsManifest(onComplete:Void->Void):Future<AssetLibrary> + static function initSongsManifest() { - final id = "songs"; + var id = "songs"; var promise = new Promise<AssetLibrary>(); - // #if (tools && !display && !macro) var library = LimeAssets.getLibrary(id); if (library != null) { - onComplete(); return Future.withValue(library); } - + var path = id; var rootPath = null; - - // @:privateAccess - // if (LimeAssets.bundlePaths.exists(id)) - // { - // AssetBundle.loadFromFile(bundlePaths.get(id)).onComplete(function(bundle) - // { - // if (bundle == null) - // { - // promise.error("Cannot load bundle for library \"" + id + "\""); - // return; - // } - // var library = AssetLibrary.fromBundle(bundle); - - // if (library == null) - // { - // promise.error("Cannot open library \"" + id + "\""); - // } - // else - // { - // libraries.set(id, library); - // library.onChange.add(LimeAssets.onChange.dispatch); - // promise.completeWith(Future.withValue(library)); - // onComplete(); - // } - // }).onError(function(_) - // { - // promise.error("There is no asset library with an ID of \"" + id + "\""); - // }); - // } - // else - // { - @:privateAccess - final libraryPaths = LimeAssets.libraryPaths; - if (libraryPaths.exists(id)) + @:privateAccess + var libraryPaths = LimeAssets.libraryPaths; + if (libraryPaths.exists(id)) + { + path = libraryPaths[id]; + rootPath = Path.directory(path); + } + else + { + if (StringTools.endsWith(path, ".bundle")) { - path = libraryPaths[id]; - rootPath = Path.directory(path); + rootPath = path; + path += "/library.json"; } else { - if (StringTools.endsWith(path, ".bundle")) - { - rootPath = path; - path += "/library.json"; - } - else - { - rootPath = Path.directory(path); - } - @:privateAccess - path = LimeAssets.__cacheBreak(path); + rootPath = Path.directory(path); + } + @:privateAccess + path = LimeAssets.__cacheBreak(path); + } + + AssetManifest.loadFromFile(path, rootPath).onComplete(function(manifest) + { + if (manifest == null) + { + promise.error("Cannot parse asset manifest for library \"" + id + "\""); + return; } - AssetManifest.loadFromFile(path, rootPath).onComplete(function(manifest) - { - if (manifest == null) - { - promise.error("Cannot parse asset manifest for library \"" + id + "\""); - return; - } + var library = AssetLibrary.fromManifest(manifest); - var library = AssetLibrary.fromManifest(manifest); - - if (library == null) - { - promise.error("Cannot open library \"" + id + "\""); - } - else - { - @:privateAccess - LimeAssets.libraries.set(id, library); - library.onChange.add(LimeAssets.onChange.dispatch); - promise.completeWith(Future.withValue(library)); - onComplete(); - } - }).onError(function(_) + if (library == null) { - promise.error("There is no asset library with an ID of \"" + id + "\""); - }); - // } - // #end + promise.error("Cannot open library \"" + id + "\""); + } + else + { + @:privateAccess + LimeAssets.libraries.set(id, library); + library.onChange.add(LimeAssets.onChange.dispatch); + promise.completeWith(Future.withValue(library)); + } + }).onError(function(_) + { + promise.error("There is no asset library with an ID of \"" + id + "\""); + }); return promise.future; } @@ -337,5 +306,5 @@ class MultiCallback } public function getFired() return fired.copy(); - public function getUnfired() return [for (id in unfired) id]; + public function getUnfired() return [for (id in unfired.keys()) id]; } \ No newline at end of file diff --git a/source/Note.hx b/source/Note.hx index 781206b3f..d0560636c 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -4,7 +4,9 @@ import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; import flixel.math.FlxMath; import flixel.util.FlxColor; +#if polymod import polymod.format.ParseRules.TargetSignatureElement; +#end using StringTools; diff --git a/source/OptionsMenu.hx b/source/OptionsMenu.hx index 76a175890..bf36c83d5 100644 --- a/source/OptionsMenu.hx +++ b/source/OptionsMenu.hx @@ -24,7 +24,7 @@ class OptionsMenu extends MusicBeatState override function create() { var menuBG:FlxSprite = new FlxSprite().loadGraphic(Paths.image('menuDesat')); - controlsStrings = CoolUtil.coolTextFile('assets/data/controls.txt'); + controlsStrings = CoolUtil.coolTextFile(Paths.txt('controls')); menuBG.color = 0xFFea71fd; menuBG.setGraphicSize(Std.int(menuBG.width * 1.1)); menuBG.updateHitbox(); diff --git a/source/Paths.hx b/source/Paths.hx index 4e2094c42..73214c00c 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -30,7 +30,7 @@ class Paths return levelPath; } - return 'assets/$file'; + return 'assets/preload/$file'; } inline static function getLibraryPath(library:String, file:String) @@ -43,14 +43,29 @@ class Paths return getPath(file, type); } - inline static public function sound(key:String) + inline static public function txt(key:String) + { + return getPath('data/$key.txt', TEXT); + } + + inline static public function xml(key:String) + { + return getPath('data/$key.xml', TEXT); + } + + inline static public function json(key:String) + { + return getPath('data/$key.json', TEXT); + } + + static public function sound(key:String) { return getPath('sounds/$key.$SOUND_EXT', SOUND); } inline static public function soundRandom(key:String, min:Int, max:Int) { - return getPath('sounds/$key${FlxG.random.int(min, max)}.$SOUND_EXT', SOUND); + return sound(key + FlxG.random.int(min, max)); } inline static public function music(key:String) @@ -60,12 +75,12 @@ class Paths inline static public function voices(song:String) { - return "songs:" + getPath('songs/${song.toLowerCase()}/Voices.$SOUND_EXT', MUSIC); + return 'songs:assets/songs/${song.toLowerCase()}/Voices.$SOUND_EXT'; } inline static public function inst(song:String) { - return "songs:" + getPath('songs/${song.toLowerCase()}/Inst.$SOUND_EXT', MUSIC); + return 'songs:assets/songs/${song.toLowerCase()}/Inst.$SOUND_EXT'; } inline static public function image(key:String) @@ -73,6 +88,11 @@ class Paths return getPath('images/$key.png', IMAGE); } + inline static public function font(key:String) + { + return 'assets/fonts/$key'; + } + inline static public function getSparrowAtlas(key:String) { return FlxAtlasFrames.fromSparrow(image(key), file('images/$key.xml')); diff --git a/source/PlayState.hx b/source/PlayState.hx index 45149110e..225f3e44e 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -139,7 +139,6 @@ class PlayState extends MusicBeatState if (SONG == null) SONG = Song.loadFromJson('tutorial'); - Paths.setCurrentLevel(SONG.song); Conductor.changeBPM(SONG.bpm); @@ -163,11 +162,11 @@ class PlayState extends MusicBeatState "Only then I will even CONSIDER letting you\ndate my daughter!" ]; case 'senpai': - dialogue = CoolUtil.coolTextFile('assets/data/senpai/senpaiDialogue.txt'); + dialogue = CoolUtil.coolTextFile(Paths.txt('senpai/senpaiDialogue')); case 'roses': - dialogue = CoolUtil.coolTextFile('assets/data/roses/rosesDialogue.txt'); + dialogue = CoolUtil.coolTextFile(Paths.txt('roses/rosesDialogue')); case 'thorns': - dialogue = CoolUtil.coolTextFile('assets/data/thorns/thornsDialogue.txt'); + dialogue = CoolUtil.coolTextFile(Paths.txt('thorns/thornsDialogue')); } if (SONG.song.toLowerCase() == 'spookeez' || SONG.song.toLowerCase() == 'monster' || SONG.song.toLowerCase() == 'south') @@ -676,7 +675,7 @@ class PlayState extends MusicBeatState add(healthBar); scoreTxt = new FlxText(healthBarBG.x + healthBarBG.width - 190, healthBarBG.y + 30, 0, "", 20); - scoreTxt.setFormat("assets/fonts/vcr.ttf", 16, FlxColor.WHITE, RIGHT); + scoreTxt.setFormat(Paths.font("vcr.ttf"), 16, FlxColor.WHITE, RIGHT); scoreTxt.scrollFactor.set(); add(scoreTxt); @@ -866,16 +865,16 @@ class PlayState extends MusicBeatState boyfriend.playAnim('idle'); var introAssets:Map<String, Array<String>> = new Map<String, Array<String>>(); - introAssets.set('default', ['ready.png', "set.png", "go.png"]); + introAssets.set('default', ['ready', "set", "go"]); introAssets.set('school', [ - 'weeb/pixelUI/ready-pixel.png', - 'weeb/pixelUI/set-pixel.png', - 'weeb/pixelUI/date-pixel.png' + 'weeb/pixelUI/ready-pixel', + 'weeb/pixelUI/set-pixel', + 'weeb/pixelUI/date-pixel' ]); introAssets.set('schoolEvil', [ - 'weeb/pixelUI/ready-pixel.png', - 'weeb/pixelUI/set-pixel.png', - 'weeb/pixelUI/date-pixel.png' + 'weeb/pixelUI/ready-pixel', + 'weeb/pixelUI/set-pixel', + 'weeb/pixelUI/date-pixel' ]); var introAlts:Array<String> = introAssets.get('default'); @@ -896,7 +895,7 @@ class PlayState extends MusicBeatState case 0: FlxG.sound.play(Paths.sound('intro3'), 0.6); case 1: - var ready:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[0]); + var ready:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[0])); ready.scrollFactor.set(); ready.updateHitbox(); @@ -914,7 +913,7 @@ class PlayState extends MusicBeatState }); FlxG.sound.play(Paths.sound('intro2'), 0.6); case 2: - var set:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[1]); + var set:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[1])); set.scrollFactor.set(); if (curStage.startsWith('school')) @@ -931,7 +930,7 @@ class PlayState extends MusicBeatState }); FlxG.sound.play(Paths.sound('intro1'), 0.6); case 3: - var go:FlxSprite = new FlxSprite().loadGraphic('assets/images/' + introAlts[2]); + var go:FlxSprite = new FlxSprite().loadGraphic(Paths.image(introAlts[2])); go.scrollFactor.set(); if (curStage.startsWith('school')) @@ -1743,7 +1742,7 @@ class PlayState extends MusicBeatState pixelShitPart2 = '-pixel'; } - rating.loadGraphic('assets/images/' + pixelShitPart1 + daRating + pixelShitPart2 + ".png"); + rating.loadGraphic(Paths.image(pixelShitPart1 + daRating + pixelShitPart2)); rating.screenCenter(); rating.x = coolText.x - 40; rating.y -= 60; @@ -2041,7 +2040,7 @@ class PlayState extends MusicBeatState if (!boyfriend.stunned) { health -= 0.04; - if (combo > 5) + if (combo > 5 && gf.animOffsets.exists('sad')) { gf.playAnim('sad'); } diff --git a/source/Song.hx b/source/Song.hx index 55827e79b..51d0f3191 100644 --- a/source/Song.hx +++ b/source/Song.hx @@ -50,7 +50,7 @@ class Song public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong { - var rawJson = Assets.getText('assets/data/' + folder.toLowerCase() + '/' + jsonInput.toLowerCase() + '.json').trim(); + var rawJson = Assets.getText(Paths.json(folder.toLowerCase() + '/' + jsonInput.toLowerCase())).trim(); while (!rawJson.endsWith("}")) { diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index bd5f13e51..27c63e7b6 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -86,7 +86,7 @@ class StoryMenuState extends MusicBeatState var rankText:FlxText = new FlxText(0, 10); rankText.text = 'RANK: GREAT'; - rankText.setFormat("assets/fonts/vcr.ttf", 32); + rankText.setFormat(Paths.font("vcr.ttf"), 32); rankText.size = scoreText.size; rankText.screenCenter(X); diff --git a/source/TitleState.hx b/source/TitleState.hx index cfdaea54c..afd7bd5bb 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -23,7 +23,6 @@ import flixel.util.FlxTimer; import io.newgrounds.NG; import lime.app.Application; import openfl.Assets; -import polymod.Polymod; using StringTools; @@ -44,8 +43,10 @@ class TitleState extends MusicBeatState override public function create():Void { - Polymod.init({modRoot: "mods", dirs: ['introMod']}); - + #if polymod + polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']}); + #end + #if (!web) TitleState.soundExt = '.ogg'; #end @@ -206,7 +207,7 @@ class TitleState extends MusicBeatState function getIntroTextShit():Array<Array<String>> { - var fullText:String = Assets.getText('assets/data/introText.txt'); + var fullText:String = Assets.getText(Paths.txt('introText')); var firstArray:Array<String> = fullText.split('\n'); var swagGoodArray:Array<Array<String>> = []; From 0d16b0ad5cb7e6b5321bb51762b18cc811f622c5 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Wed, 10 Feb 2021 14:28:05 -0600 Subject: [PATCH 11/39] sections and stuff --- Project.xml | 83 ++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/Project.xml b/Project.xml index 9215a2185..f25ce5169 100644 --- a/Project.xml +++ b/Project.xml @@ -45,51 +45,48 @@ <define name="PRELOAD_ALL" unless="web" /> - <library name="songs" preload="false" unless="PRELOAD_ALL"/> - <library name="songs" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/songs" library="songs" exclude="*.ogg" if="web"/> - <assets path="assets/songs" library="songs" exclude="*.mp3" unless="web"/> - - <library name="shared" preload="true"/> - <!-- <library name="shared" preload="false" unless="PRELOAD_ALL"/> - <library name="shared" preload="true" if="PRELOAD_ALL"/> --> - <assets path="assets/shared" library="shared" exclude="*.ogg" if="web"/> - <assets path="assets/shared" library="shared" exclude="*.mp3" unless="web"/> - - <library name="tutorial" preload="false" unless="PRELOAD_ALL"/> - <library name="tutorial" preload="true" if="PRELOAD_ALL"/> + <section if="PREELOAD_ALL"> + <library name="songs" preload="true" /> + <library name="shared" preload="true" /> + <library name="tutorial" preload="true" /> + <library name="week1" preload="true" /> + <library name="week2" preload="true" /> + <library name="week3" preload="true" /> + <library name="week4" preload="true" /> + <library name="week5" preload="true" /> + <library name="week6" preload="true" /> + </section> + + <section unless="PREELOAD_ALL"> + <library name="songs" preload="false" /> + <library name="shared" preload="false" /> + <library name="tutorial" preload="false" /> + <library name="week1" preload="false" /> + <library name="week2" preload="false" /> + <library name="week3" preload="false" /> + <library name="week4" preload="false" /> + <library name="week5" preload="false" /> + <library name="week6" preload="false" /> + </section> + + <assets path="assets/songs" library="songs" exclude="*.ogg" if="web"/> + <assets path="assets/songs" library="songs" exclude="*.mp3" unless="web"/> + <assets path="assets/shared" library="shared" exclude="*.ogg" if="web"/> + <assets path="assets/shared" library="shared" exclude="*.mp3" unless="web"/> <assets path="assets/tutorial" library="tutorial" exclude="*.ogg" if="web"/> <assets path="assets/tutorial" library="tutorial" exclude="*.mp3" unless="web"/> - - <library name="week1" preload="false" unless="PRELOAD_ALL"/> - <library name="week1" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week1" library="week1" exclude="*.ogg" if="web"/> - <assets path="assets/week1" library="week1" exclude="*.mp3" unless="web"/> - - <library name="week2" preload="false" unless="PRELOAD_ALL"/> - <library name="week2" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week2" library="week2" exclude="*.ogg" if="web"/> - <assets path="assets/week2" library="week2" exclude="*.mp3" unless="web"/> - - <library name="week3" preload="false" unless="PRELOAD_ALL"/> - <library name="week3" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week3" library="week3" exclude="*.ogg" if="web"/> - <assets path="assets/week3" library="week3" exclude="*.mp3" unless="web"/> - - <library name="week4" preload="false" unless="PRELOAD_ALL"/> - <library name="week4" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week4" library="week4" exclude="*.ogg" if="web"/> - <assets path="assets/week4" library="week4" exclude="*.mp3" unless="web"/> - - <library name="week5" preload="false" unless="PRELOAD_ALL"/> - <library name="week5" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week5" library="week5" exclude="*.ogg" if="web"/> - <assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/> - - <library name="week6" preload="false" unless="PRELOAD_ALL"/> - <library name="week6" preload="true" if="PRELOAD_ALL"/> - <assets path="assets/week6" library="week6" exclude="*.ogg" if="web"/> - <assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/> + <assets path="assets/week1" library="week1" exclude="*.ogg" if="web"/> + <assets path="assets/week1" library="week1" exclude="*.mp3" unless="web"/> + <assets path="assets/week2" library="week2" exclude="*.ogg" if="web"/> + <assets path="assets/week2" library="week2" exclude="*.mp3" unless="web"/> + <assets path="assets/week3" library="week3" exclude="*.ogg" if="web"/> + <assets path="assets/week3" library="week3" exclude="*.mp3" unless="web"/> + <assets path="assets/week4" library="week4" exclude="*.ogg" if="web"/> + <assets path="assets/week4" library="week4" exclude="*.mp3" unless="web"/> + <assets path="assets/week5" library="week5" exclude="*.ogg" if="web"/> + <assets path="assets/week5" library="week5" exclude="*.mp3" unless="web"/> + <assets path="assets/week6" library="week6" exclude="*.ogg" if="web"/> + <assets path="assets/week6" library="week6" exclude="*.mp3" unless="web"/> <assets path='example_mods' rename='mods' embed='false'/> <!-- <template path='mods' /> --> From 246c87240eb9afbf362cc282c068ac745dfe5bd5 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Thu, 11 Feb 2021 13:14:02 -0600 Subject: [PATCH 12/39] fix preloaded versions --- Project.xml | 13 ++++---- source/LoadingState.hx | 4 +-- source/Paths.hx | 68 ++++++++++++++++++++++++++---------------- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/Project.xml b/Project.xml index f25ce5169..63b25bdea 100644 --- a/Project.xml +++ b/Project.xml @@ -40,12 +40,14 @@ <classpath name="source" /> - <assets path="assets/preload" exclude="*.ogg" if="web"/> - <assets path="assets/preload" exclude="*.mp3" unless="web"/> + <assets path="assets/preload" rename="assets" exclude="*.ogg" if="web"/> + <assets path="assets/preload" rename="assets" exclude="*.mp3" unless="web"/> + <!-- <define name="PRELOAD_ALL" /> --> <define name="PRELOAD_ALL" unless="web" /> + <define name="NO_PRELOAD_ALL" unless="PRELOAD_ALL"/> - <section if="PREELOAD_ALL"> + <section if="PRELOAD_ALL"> <library name="songs" preload="true" /> <library name="shared" preload="true" /> <library name="tutorial" preload="true" /> @@ -57,7 +59,7 @@ <library name="week6" preload="true" /> </section> - <section unless="PREELOAD_ALL"> + <section if="NO_PRELOAD_ALL"> <library name="songs" preload="false" /> <library name="shared" preload="false" /> <library name="tutorial" preload="false" /> @@ -112,7 +114,8 @@ <haxelib name="flixel-ui" /> <haxelib name="newgrounds"/> <haxelib name="faxe" if='switch'/> - <haxelib name="polymod" unless="web"/> + <haxelib name="polymod"/> + <!-- <haxelib name="hxcpp-debug-server" if="desktop"/> --> <!-- <haxelib name="markdown" /> --> <!-- <haxelib name="HtmlParser" /> --> diff --git a/source/LoadingState.hx b/source/LoadingState.hx index 8e3676ec0..23bce2e68 100644 --- a/source/LoadingState.hx +++ b/source/LoadingState.hx @@ -152,7 +152,7 @@ class LoadingState extends MusicBeatState static function getNextState(target:FlxState, stopMusic = false):FlxState { Paths.setCurrentLevel("week" + PlayState.storyWeek); - #if js + #if NO_PRELOAD_ALL var loaded = isSoundLoaded(getSongPath()) && (!PlayState.SONG.needsVoices || isSoundLoaded(getVocalPath())) && isLibraryLoaded("shared"); @@ -166,7 +166,7 @@ class LoadingState extends MusicBeatState return target; } - #if js + #if NO_PRELOAD_ALL static function isSoundLoaded(path:String):Bool { return Assets.cache.hasSound(path); diff --git a/source/Paths.hx b/source/Paths.hx index 73214c00c..4bee419c5 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -17,60 +17,78 @@ class Paths currentLevel = name.toLowerCase(); } - static function getPath(file:String, type:AssetType) + static function getPath(file:String, type:AssetType, library:Null<String>) { + if (library != null) + return getLibraryPath(file, library); + if (currentLevel != null) { - var levelPath = getLibraryPath(currentLevel, file); + var levelPath = getLibraryPathForce(file, currentLevel); if (OpenFlAssets.exists(levelPath, type)) return levelPath; - levelPath = getLibraryPath("shared", file); + levelPath = getLibraryPathForce(file, "shared"); if (OpenFlAssets.exists(levelPath, type)) return levelPath; } - return 'assets/preload/$file'; + return getPreloadPath(file); } - inline static function getLibraryPath(library:String, file:String) + static public function getLibraryPath(file:String, library = "preload") { + return if (library == "preload" || library == "default") + getPreloadPath(file); + else + getLibraryPathForce(file, library); + } + + inline static function getLibraryPathForce(file:String, library:String) + { + return '$library:assets/$library/$file'; } - inline static public function file(file:String, type:AssetType = TEXT) + inline static function getPreloadPath(file:String) { - return getPath(file, type); + + return 'assets/$file'; } - inline static public function txt(key:String) + inline static public function file(file:String, type:AssetType = TEXT, ?library:String) { - return getPath('data/$key.txt', TEXT); + return getPath(file, type, library); } - inline static public function xml(key:String) + inline static public function txt(key:String, ?library:String) { - return getPath('data/$key.xml', TEXT); + return getPath('data/$key.txt', TEXT, library); } - inline static public function json(key:String) + inline static public function xml(key:String, ?library:String) { - return getPath('data/$key.json', TEXT); + return getPath('data/$key.xml', TEXT, library); } - static public function sound(key:String) + inline static public function json(key:String, ?library:String) { - return getPath('sounds/$key.$SOUND_EXT', SOUND); + return getPath('data/$key.json', TEXT, library); } - inline static public function soundRandom(key:String, min:Int, max:Int) + static public function sound(key:String, ?library:String) { - return sound(key + FlxG.random.int(min, max)); + return getPath('sounds/$key.$SOUND_EXT', SOUND, library); } - inline static public function music(key:String) + inline static public function soundRandom(key:String, min:Int, max:Int, ?library:String) { - return getPath('music/$key.$SOUND_EXT', MUSIC); + return sound(key + FlxG.random.int(min, max), library); + } + + inline static public function music(key:String, ?library:String) + { + return getPath('music/$key.$SOUND_EXT', MUSIC, library); } inline static public function voices(song:String) @@ -83,9 +101,9 @@ class Paths return 'songs:assets/songs/${song.toLowerCase()}/Inst.$SOUND_EXT'; } - inline static public function image(key:String) + inline static public function image(key:String, ?library:String) { - return getPath('images/$key.png', IMAGE); + return getPath('images/$key.png', IMAGE, library); } inline static public function font(key:String) @@ -93,13 +111,13 @@ class Paths return 'assets/fonts/$key'; } - inline static public function getSparrowAtlas(key:String) + inline static public function getSparrowAtlas(key:String, ?library:String) { - return FlxAtlasFrames.fromSparrow(image(key), file('images/$key.xml')); + return FlxAtlasFrames.fromSparrow(image(key, library), file('images/$key.xml', library)); } - inline static public function getPackerAtlas(key:String) + inline static public function getPackerAtlas(key:String, ?library:String) { - return FlxAtlasFrames.fromSpriteSheetPacker(image(key), file('images/$key.txt')); + return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library)); } } \ No newline at end of file From 8dd68b63601db843bd630260667967b8aef10009 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Thu, 11 Feb 2021 13:14:16 -0600 Subject: [PATCH 13/39] remove TitleState.soundExt --- source/MusicBeatState.hx | 4 ---- source/MusicBeatSubstate.hx | 9 --------- source/TitleState.hx | 5 ----- 3 files changed, 18 deletions(-) diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index bda503128..55bd24e9f 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -26,10 +26,6 @@ class MusicBeatState extends FlxUIState if (transIn != null) trace('reg ' + transIn.region); - #if (!web) - TitleState.soundExt = '.ogg'; - #end - super.create(); } diff --git a/source/MusicBeatSubstate.hx b/source/MusicBeatSubstate.hx index 511f597a7..3db4f9e98 100644 --- a/source/MusicBeatSubstate.hx +++ b/source/MusicBeatSubstate.hx @@ -23,15 +23,6 @@ class MusicBeatSubstate extends FlxSubState inline function get_controls():Controls return PlayerSettings.player1.controls; - override function create() - { - #if (!web) - TitleState.soundExt = '.ogg'; - #end - - super.create(); - } - override function update(elapsed:Float) { everyStep(); diff --git a/source/TitleState.hx b/source/TitleState.hx index afd7bd5bb..0a1f1d47d 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -29,7 +29,6 @@ using StringTools; class TitleState extends MusicBeatState { static var initialized:Bool = false; - static public var soundExt:String = ".mp3"; var blackScreen:FlxSprite; var credGroup:FlxGroup; @@ -47,10 +46,6 @@ class TitleState extends MusicBeatState polymod.Polymod.init({modRoot: "mods", dirs: ['introMod']}); #end - #if (!web) - TitleState.soundExt = '.ogg'; - #end - PlayerSettings.init(); curWacky = FlxG.random.getObject(getIntroTextShit()); From 260a024e5c1139b3cad9e3badcc480f6fcb12ec3 Mon Sep 17 00:00:00 2001 From: Bulby <Benharless820@gmail.com> Date: Thu, 11 Feb 2021 14:54:16 -0500 Subject: [PATCH 14/39] Use haxe switch case 'or' --- source/PlayState.hx | 39 +-------------------------------------- 1 file changed, 1 insertion(+), 38 deletions(-) diff --git a/source/PlayState.hx b/source/PlayState.hx index cc869e5de..9c38016c0 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1084,44 +1084,7 @@ class PlayState extends MusicBeatState switch (curStage) { - case 'school': - babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); - babyArrow.animation.add('green', [6]); - babyArrow.animation.add('red', [7]); - babyArrow.animation.add('blue', [5]); - babyArrow.animation.add('purplel', [4]); - - babyArrow.setGraphicSize(Std.int(babyArrow.width * daPixelZoom)); - babyArrow.updateHitbox(); - babyArrow.antialiasing = false; - - switch (Math.abs(i)) - { - case 2: - babyArrow.x += Note.swagWidth * 2; - babyArrow.animation.add('static', [2]); - babyArrow.animation.add('pressed', [6, 10], 12, false); - babyArrow.animation.add('confirm', [14, 18], 12, false); - case 3: - babyArrow.x += Note.swagWidth * 3; - babyArrow.animation.add('static', [3]); - babyArrow.animation.add('pressed', [7, 11], 12, false); - babyArrow.animation.add('confirm', [15, 19], 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.add('static', [1]); - babyArrow.animation.add('pressed', [5, 9], 12, false); - babyArrow.animation.add('confirm', [13, 17], 24, false); - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.add('static', [0]); - babyArrow.animation.add('pressed', [4, 8], 12, false); - babyArrow.animation.add('confirm', [12, 16], 24, false); - } - - case 'schoolEvil': - // ALL THIS IS COPY PASTED CUZ IM LAZY - + case 'school' | 'schoolEvil': babyArrow.loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); babyArrow.animation.add('green', [6]); babyArrow.animation.add('red', [7]); From 41efd4f3db3b0e78aa46af410b1ff7bec9e8f261 Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Thu, 11 Feb 2021 23:06:26 +0100 Subject: [PATCH 15/39] BPM map, trim off useless song stuff, adjust MILF cam zoom --- source/Conductor.hx | 39 +++++++++++++++++++++++++++++++++++++ source/MusicBeatState.hx | 18 ++++++++++++++--- source/MusicBeatSubstate.hx | 16 +++++++++++++-- source/PlayState.hx | 5 ++++- source/Song.hx | 16 ++------------- 5 files changed, 74 insertions(+), 20 deletions(-) diff --git a/source/Conductor.hx b/source/Conductor.hx index 710b13584..a182070b0 100644 --- a/source/Conductor.hx +++ b/source/Conductor.hx @@ -1,9 +1,19 @@ package; +import Song.SwagSong; + /** * ... * @author */ + +typedef BPMChangeEvent = +{ + var stepTime:Int; + var songTime:Float; + var bpm:Int; +} + class Conductor { public static var bpm:Int = 100; @@ -16,10 +26,39 @@ class Conductor public static var safeFrames:Int = 10; public static var safeZoneOffset:Float = (safeFrames / 60) * 1000; // is calculated in create(), is safeFrames in milliseconds + public static var bpmChangeMap:Array<BPMChangeEvent> = []; + public function new() { } + public static function mapBPMChanges(song:SwagSong) + { + bpmChangeMap = []; + + var curBPM:Int = song.bpm; + var totalSteps:Int = 0; + var totalPos:Float = 0; + for (i in 0...song.notes.length) + { + if(song.notes[i].changeBPM && song.notes[i].bpm != curBPM) + { + curBPM = song.notes[i].bpm; + var event:BPMChangeEvent = { + stepTime: totalSteps, + songTime: totalPos, + bpm: curBPM + }; + bpmChangeMap.push(event); + } + + var deltaSteps:Int = song.notes[i].lengthInSteps; + totalSteps += deltaSteps; + totalPos += ((60 / curBPM) * 1000 / 4) * deltaSteps; + } + trace("new BPM map BUDDY " + bpmChangeMap); + } + public static function changeBPM(newBpm:Int) { bpm = newBpm; diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index bda503128..1be91a32f 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -1,5 +1,6 @@ package; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.addons.transition.FlxTransitionableState; import flixel.addons.ui.FlxUIState; @@ -38,7 +39,7 @@ class MusicBeatState extends FlxUIState everyStep(); updateCurStep(); - // Needs to be ROUNED, rather than ceil or floor + // Needs to be FLOOR idk why it was rounded but that dont make sense updateBeat(); super.update(elapsed); @@ -46,7 +47,7 @@ class MusicBeatState extends FlxUIState private function updateBeat():Void { - curBeat = Math.round(curStep / 4); + curBeat = Math.floor(curStep / 4); } /** @@ -66,7 +67,18 @@ class MusicBeatState extends FlxUIState private function updateCurStep():Void { - curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet); + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) + { + if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; + } + + curStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet); } public function stepHit():Void diff --git a/source/MusicBeatSubstate.hx b/source/MusicBeatSubstate.hx index 511f597a7..90c3824e5 100644 --- a/source/MusicBeatSubstate.hx +++ b/source/MusicBeatSubstate.hx @@ -1,5 +1,6 @@ package; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.FlxSubState; @@ -37,7 +38,7 @@ class MusicBeatSubstate extends FlxSubState everyStep(); updateCurStep(); - curBeat = Math.round(curStep / 4); + curBeat = Math.floor(curStep / 4); super.update(elapsed); } @@ -59,7 +60,18 @@ class MusicBeatSubstate extends FlxSubState private function updateCurStep():Void { - curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet); + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) + { + if (Conductor.songPosition > Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; + } + + curStep = lastChange.stepTime + Math.floor((Conductor.songPosition - lastChange.songTime) / Conductor.stepCrochet); } public function stepHit():Void diff --git a/source/PlayState.hx b/source/PlayState.hx index 93d98cab0..1bdfb7215 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -140,6 +140,7 @@ class PlayState extends MusicBeatState if (SONG == null) SONG = Song.loadFromJson('tutorial'); + Conductor.mapBPMChanges(SONG); Conductor.changeBPM(SONG.bpm); switch (SONG.song.toLowerCase()) @@ -1446,6 +1447,8 @@ class PlayState extends MusicBeatState } FlxG.watch.addQuick("beatShit", totalBeats); + FlxG.watch.addQuick("stepShit", totalSteps); + if (curSong == 'Fresh') { @@ -2283,7 +2286,7 @@ class PlayState extends MusicBeatState // FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM); // HARDCODING FOR MILF ZOOMS! - if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat <= 200 && camZooming && FlxG.camera.zoom < 1.35) + if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35) { FlxG.camera.zoom += 0.015; camHUD.zoom += 0.03; diff --git a/source/Song.hx b/source/Song.hx index 55827e79b..e9f3dc20f 100644 --- a/source/Song.hx +++ b/source/Song.hx @@ -12,8 +12,6 @@ typedef SwagSong = var song:String; var notes:Array<SwagSection>; var bpm:Int; - var sections:Int; - var sectionLengths:Array<Dynamic>; var needsVoices:Bool; var speed:Float; @@ -27,25 +25,17 @@ class Song public var song:String; public var notes:Array<SwagSection>; public var bpm:Int; - public var sections:Int; - public var sectionLengths:Array<Dynamic> = []; public var needsVoices:Bool = true; public var speed:Float = 1; public var player1:String = 'bf'; public var player2:String = 'dad'; - public function new(song, notes, bpm, sections) + public function new(song, notes, bpm) { this.song = song; this.notes = notes; this.bpm = bpm; - this.sections = sections; - - for (i in 0...notes.length) - { - this.sectionLengths.push(notes[i]); - } } public static function loadFromJson(jsonInput:String, ?folder:String):SwagSong @@ -72,9 +62,7 @@ class Song daNotes = songData.notes; daSong = songData.song; - daSections = songData.sections; - daBpm = songData.bpm; - daSectionLengths = songData.sectionLengths; */ + daBpm = songData.bpm; */ return parseJSONshit(rawJson); } From 674a08b3817a71162a396284c21de5382e18cf37 Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Thu, 11 Feb 2021 23:13:50 +0100 Subject: [PATCH 16/39] actually huge overhaul OOPS lol. trims off unnecessary data, supports bpm changes proper and according to my proposed system, also just happens to fix other issues with the chart editor --- source/ChartingState.hx | 100 ++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 44 deletions(-) diff --git a/source/ChartingState.hx b/source/ChartingState.hx index 4ed3dd909..e5f0425d1 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -2,6 +2,7 @@ package; import Section.SwagSection; import Song.SwagSong; +import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.FlxSprite; import flixel.addons.display.FlxGridOverlay; @@ -117,11 +118,9 @@ class ChartingState extends MusicBeatState song: 'Test', notes: [], bpm: 150, - sections: 0, needsVoices: true, player1: 'bf', player2: 'dad', - sectionLengths: [], speed: 1, validScore: false }; @@ -140,6 +139,7 @@ class ChartingState extends MusicBeatState loadSong(_song.song); Conductor.changeBPM(_song.bpm); + Conductor.mapBPMChanges(_song); bpmTxt = new FlxText(1000, 50, 0, "", 16); bpmTxt.scrollFactor.set(); @@ -366,6 +366,7 @@ class ChartingState extends MusicBeatState vocals.time = 0; FlxG.sound.music.pause(); FlxG.sound.music.time = 0; + changeSection(); }; } @@ -425,6 +426,7 @@ class ChartingState extends MusicBeatState else if (wname == 'song_bpm') { tempBpm = Std.int(nums.value); + Conductor.mapBPMChanges(_song); Conductor.changeBPM(Std.int(nums.value)); } else if (wname == 'note_susLength') @@ -444,12 +446,27 @@ class ChartingState extends MusicBeatState var updatedSection:Bool = false; + /* this function got owned LOL function lengthBpmBullshit():Float { if (_song.notes[curSection].changeBPM) return _song.notes[curSection].lengthInSteps * (_song.notes[curSection].bpm / _song.bpm); else return _song.notes[curSection].lengthInSteps; + }*/ + + function sectionStartTime():Float + { + var daBPM:Int = _song.bpm; + var daPos:Float = 0; + for (i in 0...curSection) + { + if (_song.notes[i].changeBPM) { + daBPM = _song.notes[i].bpm; + } + daPos += 4 * (1000 * 60 / daBPM); + } + return daPos; } override function update(elapsed:Float) @@ -459,23 +476,20 @@ class ChartingState extends MusicBeatState Conductor.songPosition = FlxG.sound.music.time; _song.song = typingShit.text; - strumLine.y = getYfromStrum(Conductor.songPosition % (Conductor.stepCrochet * lengthBpmBullshit())); + strumLine.y = getYfromStrum((Conductor.songPosition - sectionStartTime()) % (Conductor.stepCrochet * _song.notes[curSection].lengthInSteps)); - if (curBeat % 4 == 0) + if (curBeat % 4 == 0 && curStep >= 16 * (curSection + 1)) { - if (curStep > 16 * (curSection + 1)) + trace(curStep); + trace((_song.notes[curSection].lengthInSteps) * (curSection + 1)); + trace('DUMBSHIT'); + + if (_song.notes[curSection + 1] == null) { - trace(curStep); - trace((_song.notes[curSection].lengthInSteps) * (curSection + 1)); - trace('DUMBSHIT'); - - if (_song.notes[curSection + 1] == null) - { - addSection(); - } - - changeSection(curSection + 1, false); + addSection(); } + + changeSection(curSection + 1, false); } FlxG.watch.addQuick('daBeat', curBeat); @@ -674,21 +688,18 @@ class ChartingState extends MusicBeatState function recalculateSteps():Int { - var steps:Int = 0; - var timeShit:Float = 0; - - for (i in 0...curSection) + var lastChange:BPMChangeEvent = { + stepTime: 0, + songTime: 0, + bpm: 0 + } + for (i in 0...Conductor.bpmChangeMap.length) { - steps += 16; - - if (_song.notes[i].changeBPM) - timeShit += (((60 / _song.notes[i].bpm) * 1000) / 4) * 16; - else - timeShit += (((60 / _song.bpm) * 1000) / 4) * 16; + if (FlxG.sound.music.time > Conductor.bpmChangeMap[i].songTime) + lastChange = Conductor.bpmChangeMap[i]; } - steps += Math.floor((FlxG.sound.music.time - timeShit) / Conductor.stepCrochet); - curStep = steps; + curStep = lastChange.stepTime + Math.floor((FlxG.sound.music.time - lastChange.songTime) / Conductor.stepCrochet); updateBeat(); return curStep; @@ -702,7 +713,7 @@ class ChartingState extends MusicBeatState vocals.pause(); // Basically old shit from changeSection??? - FlxG.sound.music.time = lengthBpmBullshit() * Conductor.stepCrochet * curSection; + FlxG.sound.music.time = sectionStartTime(); if (songBeginning) { @@ -732,15 +743,15 @@ class ChartingState extends MusicBeatState FlxG.sound.music.pause(); vocals.pause(); - var daNum:Int = 0; + /*var daNum:Int = 0; var daLength:Float = 0; while (daNum <= sec) { daLength += lengthBpmBullshit(); daNum++; - } + }*/ - FlxG.sound.music.time = (daLength - lengthBpmBullshit()) * Conductor.stepCrochet; + FlxG.sound.music.time = sectionStartTime(); vocals.time = FlxG.sound.music.time; updateCurStep(); } @@ -815,10 +826,16 @@ class ChartingState extends MusicBeatState if (_song.notes[curSection].changeBPM && _song.notes[curSection].bpm > 0) { Conductor.changeBPM(_song.notes[curSection].bpm); + FlxG.log.add('CHANGED BPM!'); } else { - Conductor.changeBPM(tempBpm); + //get last bpm + var daBPM:Int = _song.bpm; + for (i in 0...curSection) + if (_song.notes[i].changeBPM) + daBPM = _song.notes[i].bpm; + Conductor.changeBPM(daBPM); } /* // PORT BULLSHIT, INCASE THERE'S NO SUSTAIN DATA FOR A NOTE @@ -846,7 +863,7 @@ class ChartingState extends MusicBeatState note.setGraphicSize(GRID_SIZE, GRID_SIZE); note.updateHitbox(); note.x = Math.floor(daNoteInfo * GRID_SIZE); - note.y = Math.floor(getYfromStrum(daStrumTime)) % gridBG.height; + note.y = Math.floor(getYfromStrum((daStrumTime - sectionStartTime()) % (Conductor.stepCrochet * _song.notes[curSection].lengthInSteps))); curRenderedNotes.add(note); @@ -925,7 +942,7 @@ class ChartingState extends MusicBeatState private function addNote():Void { - var noteStrum = getStrumTime(dummyArrow.y) + (curSection * (Conductor.stepCrochet * 16)); + var noteStrum = getStrumTime(dummyArrow.y) + sectionStartTime(); var noteData = Math.floor(FlxG.mouse.x / GRID_SIZE); var noteSus = 0; @@ -938,7 +955,7 @@ class ChartingState extends MusicBeatState _song.notes[curSection].sectionNotes.push([noteStrum, (noteData + 4) % 8, noteSus]); } - trace(getStrumTime(dummyArrow.y) + (curSection * (Conductor.stepCrochet * lengthBpmBullshit()))); + trace(noteStrum); trace(curSection); updateGrid(); @@ -957,6 +974,7 @@ class ChartingState extends MusicBeatState return FlxMath.remapToRange(strumTime, 0, 16 * Conductor.stepCrochet, gridBG.y, gridBG.y + gridBG.height); } + /* function calculateSectionLengths(?sec:SwagSection):Int { var daLength:Int = 0; @@ -978,7 +996,7 @@ class ChartingState extends MusicBeatState } return daLength; - } + }*/ private var daSpacing:Float = 0.3; @@ -1014,10 +1032,7 @@ class ChartingState extends MusicBeatState function autosaveSong():Void { FlxG.save.data.autosave = Json.stringify({ - "song": _song, - "bpm": Conductor.bpm, - "sections": _song.notes.length, - 'notes': _song.notes + "song": _song }); FlxG.save.flush(); } @@ -1025,10 +1040,7 @@ class ChartingState extends MusicBeatState private function saveLevel() { var json = { - "song": _song, - "bpm": Conductor.bpm, - "sections": _song.notes.length, - 'notes': _song.notes + "song": _song }; var data:String = Json.stringify(json); From f3462c2c99b492f74ec583b317c5ef46f418df3c Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Fri, 12 Feb 2021 01:58:11 +0100 Subject: [PATCH 17/39] totalSteps & totalBeats synced with bpm changes --- source/MusicBeatState.hx | 23 ++++++----------------- source/MusicBeatSubstate.hx | 22 ++++++---------------- source/PlayState.hx | 2 +- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index 1be91a32f..6e41a028d 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -36,10 +36,14 @@ class MusicBeatState extends FlxUIState override function update(elapsed:Float) { - everyStep(); + //everyStep(); + var oldStep:Int = curStep; updateCurStep(); - // Needs to be FLOOR idk why it was rounded but that dont make sense + + if (oldStep != curStep && curStep > 0) + stepHit(); + updateBeat(); super.update(elapsed); @@ -50,21 +54,6 @@ class MusicBeatState extends FlxUIState curBeat = Math.floor(curStep / 4); } - /** - * CHECKS EVERY FRAME - */ - private function everyStep():Void - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset - || Conductor.songPosition < lastStep + Conductor.safeZoneOffset) - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet) - { - stepHit(); - } - } - } - private function updateCurStep():Void { var lastChange:BPMChangeEvent = { diff --git a/source/MusicBeatSubstate.hx b/source/MusicBeatSubstate.hx index 90c3824e5..84c6a4b23 100644 --- a/source/MusicBeatSubstate.hx +++ b/source/MusicBeatSubstate.hx @@ -35,29 +35,19 @@ class MusicBeatSubstate extends FlxSubState override function update(elapsed:Float) { - everyStep(); + //everyStep(); + var oldStep:Int = curStep; updateCurStep(); + + if (oldStep != curStep && curStep > 0) + stepHit(); + curBeat = Math.floor(curStep / 4); super.update(elapsed); } - /** - * CHECKS EVERY FRAME - */ - private function everyStep():Void - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset - || Conductor.songPosition < lastStep + Conductor.safeZoneOffset) - { - if (Conductor.songPosition > lastStep + Conductor.stepCrochet) - { - stepHit(); - } - } - } - private function updateCurStep():Void { var lastChange:BPMChangeEvent = { diff --git a/source/PlayState.hx b/source/PlayState.hx index 1bdfb7215..094867a95 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -2261,7 +2261,6 @@ class PlayState extends MusicBeatState override function beatHit() { - wiggleShit.update(Conductor.crochet); super.beatHit(); if (generatedMusic) @@ -2284,6 +2283,7 @@ class PlayState extends MusicBeatState dad.dance(); } // FlxG.log.add('change bpm' + SONG.notes[Std.int(curStep / 16)].changeBPM); + wiggleShit.update(Conductor.crochet); // HARDCODING FOR MILF ZOOMS! if (curSong.toLowerCase() == 'milf' && curBeat >= 168 && curBeat < 200 && camZooming && FlxG.camera.zoom < 1.35) From a8a3c96e7b2e4f94a2b38a1663d07cc909ceddb4 Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Fri, 12 Feb 2021 03:19:27 +0100 Subject: [PATCH 18/39] entirely phase out totalBeats/totalSteps in favor of the more reliable curStep/curBeat --- source/MusicBeatState.hx | 21 +++------------------ source/MusicBeatSubstate.hx | 13 +++---------- source/PlayState.hx | 23 +++++++++++------------ 3 files changed, 17 insertions(+), 40 deletions(-) diff --git a/source/MusicBeatState.hx b/source/MusicBeatState.hx index 6e41a028d..cbb9cc6e4 100644 --- a/source/MusicBeatState.hx +++ b/source/MusicBeatState.hx @@ -12,9 +12,6 @@ class MusicBeatState extends FlxUIState private var lastBeat:Float = 0; private var lastStep:Float = 0; - private var totalBeats:Int = 0; - private var totalSteps:Int = 0; - private var curStep:Int = 0; private var curBeat:Int = 0; private var controls(get, never):Controls; @@ -40,12 +37,11 @@ class MusicBeatState extends FlxUIState var oldStep:Int = curStep; updateCurStep(); + updateBeat(); if (oldStep != curStep && curStep > 0) stepHit(); - updateBeat(); - super.update(elapsed); } @@ -72,23 +68,12 @@ class MusicBeatState extends FlxUIState public function stepHit():Void { - totalSteps += 1; - lastStep += Conductor.stepCrochet; - - // If the song is at least 3 steps behind - if (Conductor.songPosition > lastStep + (Conductor.stepCrochet * 3)) - { - lastStep = Conductor.songPosition; - totalSteps = Math.ceil(lastStep / Conductor.stepCrochet); - } - - if (totalSteps % 4 == 0) + if (curStep % 4 == 0) beatHit(); } public function beatHit():Void { - lastBeat += Conductor.crochet; - totalBeats += 1; + //do literally nothing dumbass } } diff --git a/source/MusicBeatSubstate.hx b/source/MusicBeatSubstate.hx index 84c6a4b23..2fa2a6942 100644 --- a/source/MusicBeatSubstate.hx +++ b/source/MusicBeatSubstate.hx @@ -14,9 +14,6 @@ class MusicBeatSubstate extends FlxSubState private var lastBeat:Float = 0; private var lastStep:Float = 0; - private var totalBeats:Int = 0; - private var totalSteps:Int = 0; - private var curStep:Int = 0; private var curBeat:Int = 0; private var controls(get, never):Controls; @@ -39,11 +36,11 @@ class MusicBeatSubstate extends FlxSubState var oldStep:Int = curStep; updateCurStep(); + curBeat = Math.floor(curStep / 4); if (oldStep != curStep && curStep > 0) stepHit(); - curBeat = Math.floor(curStep / 4); super.update(elapsed); } @@ -66,16 +63,12 @@ class MusicBeatSubstate extends FlxSubState public function stepHit():Void { - totalSteps += 1; - lastStep += Conductor.stepCrochet; - - if (totalSteps % 4 == 0) + if (curStep % 4 == 0) beatHit(); } public function beatHit():Void { - lastBeat += Conductor.crochet; - totalBeats += 1; + //do literally nothing dumbass } } diff --git a/source/PlayState.hx b/source/PlayState.hx index 094867a95..d988f8dc8 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1446,13 +1446,13 @@ class PlayState extends MusicBeatState camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, 0.95); } - FlxG.watch.addQuick("beatShit", totalBeats); - FlxG.watch.addQuick("stepShit", totalSteps); + FlxG.watch.addQuick("beatShit", curBeat); + FlxG.watch.addQuick("stepShit", curStep); if (curSong == 'Fresh') { - switch (totalBeats) + switch (curBeat) { case 16: camZooming = true; @@ -1471,7 +1471,7 @@ class PlayState extends MusicBeatState if (curSong == 'Bopeebo') { - switch (totalBeats) + switch (curBeat) { case 128, 129, 130: vocals.volume = 0; @@ -2240,6 +2240,7 @@ class PlayState extends MusicBeatState override function stepHit() { + super.stepHit(); if (SONG.needsVoices) { if (vocals.time > Conductor.songPosition + 20 || vocals.time < Conductor.songPosition - 20) @@ -2248,12 +2249,10 @@ class PlayState extends MusicBeatState } } - if (dad.curCharacter == 'spooky' && totalSteps % 4 == 2) + if (dad.curCharacter == 'spooky' && curStep % 4 == 2) { // dad.dance(); } - - super.stepHit(); } var lightningStrikeBeat:Int = 0; @@ -2292,7 +2291,7 @@ class PlayState extends MusicBeatState camHUD.zoom += 0.03; } - if (camZooming && FlxG.camera.zoom < 1.35 && totalBeats % 4 == 0) + if (camZooming && FlxG.camera.zoom < 1.35 && curBeat % 4 == 0) { FlxG.camera.zoom += 0.015; camHUD.zoom += 0.03; @@ -2304,7 +2303,7 @@ class PlayState extends MusicBeatState iconP1.updateHitbox(); iconP2.updateHitbox(); - if (totalBeats % gfSpeed == 0) + if (curBeat % gfSpeed == 0) { gf.dance(); } @@ -2314,7 +2313,7 @@ class PlayState extends MusicBeatState boyfriend.playAnim('idle'); } - if (totalBeats % 8 == 7 && curSong == 'Bopeebo') + if (curBeat % 8 == 7 && curSong == 'Bopeebo') { boyfriend.playAnim('hey', true); @@ -2346,7 +2345,7 @@ class PlayState extends MusicBeatState if (!trainMoving) trainCooldown += 1; - if (totalBeats % 4 == 0) + if (curBeat % 4 == 0) { phillyCityLights.forEach(function(light:FlxSprite) { @@ -2359,7 +2358,7 @@ class PlayState extends MusicBeatState // phillyCityLights.members[curLight].alpha = 1; } - if (totalBeats % 8 == 4 && FlxG.random.bool(30) && !trainMoving && trainCooldown > 8) + if (curBeat % 8 == 4 && FlxG.random.bool(30) && !trainMoving && trainCooldown > 8) { trainCooldown = FlxG.random.int(-4, 0); trainStart(); From 1b0a62575e8d37c4e3cc7229d0ebb80b3aed5618 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Thu, 11 Feb 2021 22:07:04 -0500 Subject: [PATCH 19/39] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c60647699..66c4e9db8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [unreleased] +### Fixed +- Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) + ## [0.2.7] - 2021-02-02 ### Added - PIXEL DAY UPDATE LOL 1 WEEK LATER From b3ec450352f8bec01163064195e41e29d7d7fa1a Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Fri, 12 Feb 2021 01:20:20 -0500 Subject: [PATCH 20/39] more seamless storymode transitions --- CHANGELOG.md | 3 +++ source/MainMenuState.hx | 4 ++++ source/PauseSubState.hx | 1 + source/PlayState.hx | 39 +++++++++++++++++---------------------- source/StoryMenuState.hx | 4 ++++ 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66c4e9db8..85f61e9a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +### Changed +- Made the transitions between the story mode levels more seamless. ### Fixed - Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) +- Antialiasing on the skyscraper lights ## [0.2.7] - 2021-02-02 ### Added diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index e1a1db228..f686c51ce 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -3,6 +3,7 @@ package; import flixel.FlxG; import flixel.FlxObject; import flixel.FlxSprite; +import flixel.addons.transition.FlxTransitionableState; import flixel.effects.FlxFlicker; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; @@ -32,6 +33,9 @@ class MainMenuState extends MusicBeatState override function create() { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + if (!FlxG.sound.music.playing) { FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index ac747dbca..928d32ac1 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -4,6 +4,7 @@ import Controls.Control; import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxSubState; +import flixel.addons.transition.FlxTransitionableState; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.input.keyboard.FlxKey; import flixel.system.FlxSound; diff --git a/source/PlayState.hx b/source/PlayState.hx index 3432630a7..cb4f4876b 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -211,6 +211,7 @@ class PlayState extends MusicBeatState light.visible = false; light.setGraphicSize(Std.int(light.width * 0.85)); light.updateHitbox(); + light.antialiasing = true; phillyCityLights.add(light); } @@ -485,8 +486,6 @@ class PlayState extends MusicBeatState defaultCamZoom = 0.9; curStage = 'stage'; var bg:FlxSprite = new FlxSprite(-600, -200).loadGraphic('assets/images/stageback.png'); - // bg.setGraphicSize(Std.int(bg.width * 2.5)); - // bg.updateHitbox(); bg.antialiasing = true; bg.scrollFactor.set(0.9, 0.9); bg.active = false; @@ -516,9 +515,7 @@ class PlayState extends MusicBeatState { case 'limo': gfVersion = 'gf-car'; - case 'mall': - gfVersion = 'gf-christmas'; - case 'mallEvil': + case 'mall' | 'mallEvil': gfVersion = 'gf-christmas'; case 'school': gfVersion = 'gf-pixel'; @@ -772,6 +769,7 @@ class PlayState extends MusicBeatState senpaiEvil.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpaiCrazy.png', 'assets/images/weeb/senpaiCrazy.xml'); senpaiEvil.animation.addByPrefix('idle', 'Senpai Pre Explosion', 24, false); senpaiEvil.setGraphicSize(Std.int(senpaiEvil.width * 6)); + senpaiEvil.scrollFactor.set(); senpaiEvil.updateHitbox(); senpaiEvil.screenCenter(); @@ -1158,9 +1156,12 @@ class PlayState extends MusicBeatState babyArrow.updateHitbox(); babyArrow.scrollFactor.set(); - babyArrow.y -= 10; - babyArrow.alpha = 0; - FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)}); + if (!isStoryMode) + { + babyArrow.y -= 10; + babyArrow.alpha = 0; + FlxTween.tween(babyArrow, {y: babyArrow.y + 10, alpha: 1}, 1, {ease: FlxEase.circOut, startDelay: 0.5 + (0.2 * i)}); + } babyArrow.ID = i; @@ -1412,7 +1413,6 @@ class PlayState extends MusicBeatState FlxG.watch.addQuick("beatShit", curBeat); FlxG.watch.addQuick("stepShit", curStep); - if (curSong == 'Fresh') { switch (curBeat) @@ -1514,8 +1514,6 @@ class PlayState extends MusicBeatState altAnim = '-alt'; } - trace("DA ALT THO?: " + SONG.notes[Math.floor(curStep / 16)].altAnim); - switch (Math.abs(daNote.noteData)) { case 2: @@ -1592,6 +1590,9 @@ class PlayState extends MusicBeatState { FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + FlxG.switchState(new StoryMenuState()); // if () @@ -1630,20 +1631,14 @@ class PlayState extends MusicBeatState FlxG.sound.play('assets/sounds/Lights_Shut_off' + TitleState.soundExt); } - if (SONG.song.toLowerCase() == 'senpai') - { - transIn = null; - transOut = null; - prevCamFollow = camFollow; - } + FlxTransitionableState.skipNextTransIn = true; + FlxTransitionableState.skipNextTransOut = true; + prevCamFollow = camFollow; PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + difficulty, PlayState.storyPlaylist[0]); FlxG.sound.music.stop(); FlxG.switchState(new PlayState()); - - transIn = FlxTransitionableState.defaultTransIn; - transOut = FlxTransitionableState.defaultTransOut; } } else @@ -2237,8 +2232,8 @@ class PlayState extends MusicBeatState Conductor.changeBPM(SONG.notes[Math.floor(curStep / 16)].bpm); FlxG.log.add('CHANGED BPM!'); } - //else - //Conductor.changeBPM(SONG.bpm); + // else + // Conductor.changeBPM(SONG.bpm); // Dad doesnt interupt his own notes if (SONG.notes[Math.floor(curStep / 16)].mustHitSection) diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index d5787c526..f0a4e888a 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -2,6 +2,7 @@ package; import flixel.FlxG; import flixel.FlxSprite; +import flixel.addons.transition.FlxTransitionableState; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.group.FlxGroup; @@ -69,6 +70,9 @@ class StoryMenuState extends MusicBeatState override function create() { + transIn = FlxTransitionableState.defaultTransIn; + transOut = FlxTransitionableState.defaultTransOut; + if (FlxG.sound.music != null) { if (!FlxG.sound.music.playing) From 7a701826974693c17946fc49ca7b14c1b576c91a Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Sat, 13 Feb 2021 23:39:31 +0100 Subject: [PATCH 21/39] better sustain notes & organizing --- source/Note.hx | 40 +++--------- source/PlayState.hx | 150 +++++++++++++++++++++++++------------------- 2 files changed, 94 insertions(+), 96 deletions(-) diff --git a/source/Note.hx b/source/Note.hx index 32e1b5c18..2b04b5985 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -51,33 +51,7 @@ class Note extends FlxSprite switch (daStage) { - case 'school': - loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); - - animation.add('greenScroll', [6]); - animation.add('redScroll', [7]); - animation.add('blueScroll', [5]); - animation.add('purpleScroll', [4]); - - if (isSustainNote) - { - loadGraphic('assets/images/weeb/pixelUI/arrowEnds.png', true, 7, 6); - - animation.add('purpleholdend', [4]); - animation.add('greenholdend', [6]); - animation.add('redholdend', [7]); - animation.add('blueholdend', [5]); - - animation.add('purplehold', [0]); - animation.add('greenhold', [2]); - animation.add('redhold', [3]); - animation.add('bluehold', [1]); - } - - setGraphicSize(Std.int(width * PlayState.daPixelZoom)); - updateHitbox(); - - case 'schoolEvil': // COPY PASTED CUZ I AM LAZY + case 'school' | 'schoolEvil': loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); animation.add('greenScroll', [6]); @@ -174,18 +148,18 @@ class Note extends FlxSprite { switch (prevNote.noteData) { + case 0: + prevNote.animation.play('purplehold'); + case 1: + prevNote.animation.play('bluehold'); case 2: prevNote.animation.play('greenhold'); case 3: prevNote.animation.play('redhold'); - case 1: - prevNote.animation.play('bluehold'); - case 0: - prevNote.animation.play('purplehold'); } - prevNote.offset.y = -19; - prevNote.scale.y *= (2.25 * FlxMath.roundDecimal(PlayState.SONG.speed, 1)); + prevNote.scale.y *= Conductor.stepCrochet / 100 * 1.5 * PlayState.SONG.speed; + prevNote.updateHitbox(); // prevNote.setGraphicSize(); } } diff --git a/source/PlayState.hx b/source/PlayState.hx index cb4f4876b..89efc8bd3 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1096,6 +1096,16 @@ class PlayState extends MusicBeatState switch (Math.abs(i)) { + case 0: + babyArrow.x += Note.swagWidth * 0; + babyArrow.animation.add('static', [0]); + babyArrow.animation.add('pressed', [4, 8], 12, false); + babyArrow.animation.add('confirm', [12, 16], 24, false); + case 1: + babyArrow.x += Note.swagWidth * 1; + babyArrow.animation.add('static', [1]); + babyArrow.animation.add('pressed', [5, 9], 12, false); + babyArrow.animation.add('confirm', [13, 17], 24, false); case 2: babyArrow.x += Note.swagWidth * 2; babyArrow.animation.add('static', [2]); @@ -1106,16 +1116,6 @@ class PlayState extends MusicBeatState babyArrow.animation.add('static', [3]); babyArrow.animation.add('pressed', [7, 11], 12, false); babyArrow.animation.add('confirm', [15, 19], 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.add('static', [1]); - babyArrow.animation.add('pressed', [5, 9], 12, false); - babyArrow.animation.add('confirm', [13, 17], 24, false); - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.add('static', [0]); - babyArrow.animation.add('pressed', [4, 8], 12, false); - babyArrow.animation.add('confirm', [12, 16], 24, false); } default: @@ -1130,6 +1130,16 @@ class PlayState extends MusicBeatState switch (Math.abs(i)) { + case 0: + babyArrow.x += Note.swagWidth * 0; + babyArrow.animation.addByPrefix('static', 'arrowLEFT'); + babyArrow.animation.addByPrefix('pressed', 'left press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false); + case 1: + babyArrow.x += Note.swagWidth * 1; + babyArrow.animation.addByPrefix('static', 'arrowDOWN'); + babyArrow.animation.addByPrefix('pressed', 'down press', 24, false); + babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false); case 2: babyArrow.x += Note.swagWidth * 2; babyArrow.animation.addByPrefix('static', 'arrowUP'); @@ -1140,16 +1150,6 @@ class PlayState extends MusicBeatState babyArrow.animation.addByPrefix('static', 'arrowRIGHT'); babyArrow.animation.addByPrefix('pressed', 'right press', 24, false); babyArrow.animation.addByPrefix('confirm', 'right confirm', 24, false); - case 1: - babyArrow.x += Note.swagWidth * 1; - babyArrow.animation.addByPrefix('static', 'arrowDOWN'); - babyArrow.animation.addByPrefix('pressed', 'down press', 24, false); - babyArrow.animation.addByPrefix('confirm', 'down confirm', 24, false); - case 0: - babyArrow.x += Note.swagWidth * 0; - babyArrow.animation.addByPrefix('static', 'arrowLEFT'); - babyArrow.animation.addByPrefix('pressed', 'left press', 24, false); - babyArrow.animation.addByPrefix('confirm', 'left confirm', 24, false); } } @@ -1501,6 +1501,20 @@ class PlayState extends MusicBeatState daNote.active = true; } + daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2))); + + // i am so fucking sorry for this if condition + if (daNote.isSustainNote && daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth/2 + && (!daNote.mustPress || (daNote.wasGoodHit || + (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) + { + var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth/2 - daNote.y, daNote.width * 2, daNote.height * 2); + swagRect.y /= daNote.scale.y; + swagRect.height -= swagRect.y; + + daNote.clipRect = swagRect; + } + if (!daNote.mustPress && daNote.wasGoodHit) { if (SONG.song != 'Tutorial') @@ -1516,14 +1530,14 @@ class PlayState extends MusicBeatState switch (Math.abs(daNote.noteData)) { + case 0: + dad.playAnim('singLEFT' + altAnim, true); + case 1: + dad.playAnim('singDOWN' + altAnim, true); case 2: dad.playAnim('singUP' + altAnim, true); case 3: dad.playAnim('singRIGHT' + altAnim, true); - case 1: - dad.playAnim('singDOWN' + altAnim, true); - case 0: - dad.playAnim('singLEFT' + altAnim, true); } dad.holdTimer = 0; @@ -1536,25 +1550,32 @@ class PlayState extends MusicBeatState daNote.destroy(); } - daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(PlayState.SONG.speed, 2))); - // WIP interpolation shit? Need to fix the pause issue // daNote.y = (strumLine.y - (songTime - daNote.strumTime) * (0.45 * PlayState.SONG.speed)); if (daNote.y < -daNote.height) { - if (daNote.tooLate || !daNote.wasGoodHit) + if (daNote.isSustainNote && daNote.wasGoodHit) { - health -= 0.0475; - vocals.volume = 0; + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); } + else + { + if (daNote.tooLate || !daNote.wasGoodHit) + { + health -= 0.0475; + vocals.volume = 0; + } - daNote.active = false; - daNote.visible = false; + daNote.active = false; + daNote.visible = false; - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); + } } }); } @@ -1934,18 +1955,18 @@ class PlayState extends MusicBeatState switch (daNote.noteData) { // NOTES YOU ARE HOLDING + case 0: + if (left) + goodNoteHit(daNote); + case 1: + if (down) + goodNoteHit(daNote); case 2: if (up) goodNoteHit(daNote); case 3: if (right) goodNoteHit(daNote); - case 1: - if (down) - goodNoteHit(daNote); - case 0: - if (left) - goodNoteHit(daNote); } } }); @@ -1963,6 +1984,16 @@ class PlayState extends MusicBeatState { switch (spr.ID) { + case 0: + if (leftP && spr.animation.curAnim.name != 'confirm') + spr.animation.play('pressed'); + if (leftR) + spr.animation.play('static'); + case 1: + if (downP && spr.animation.curAnim.name != 'confirm') + spr.animation.play('pressed'); + if (downR) + spr.animation.play('static'); case 2: if (upP && spr.animation.curAnim.name != 'confirm') spr.animation.play('pressed'); @@ -1973,16 +2004,6 @@ class PlayState extends MusicBeatState spr.animation.play('pressed'); if (rightR) spr.animation.play('static'); - case 1: - if (downP && spr.animation.curAnim.name != 'confirm') - spr.animation.play('pressed'); - if (downR) - spr.animation.play('static'); - case 0: - if (leftP && spr.animation.curAnim.name != 'confirm') - spr.animation.play('pressed'); - if (leftR) - spr.animation.play('static'); } if (spr.animation.curAnim.name == 'confirm' && !curStage.startsWith('school')) @@ -2023,14 +2044,14 @@ class PlayState extends MusicBeatState switch (direction) { + case 0: + boyfriend.playAnim('singLEFTmiss', true); + case 1: + boyfriend.playAnim('singDOWNmiss', true); case 2: boyfriend.playAnim('singUPmiss', true); case 3: boyfriend.playAnim('singRIGHTmiss', true); - case 1: - boyfriend.playAnim('singDOWNmiss', true); - case 0: - boyfriend.playAnim('singLEFTmiss', true); } } } @@ -2046,12 +2067,12 @@ class PlayState extends MusicBeatState if (leftP) noteMiss(0); + if (downP) + noteMiss(1); if (upP) noteMiss(2); if (rightP) noteMiss(3); - if (downP) - noteMiss(1); } function noteCheck(keyP:Bool, note:Note):Void @@ -2081,14 +2102,14 @@ class PlayState extends MusicBeatState switch (note.noteData) { + case 0: + boyfriend.playAnim('singLEFT', true); + case 1: + boyfriend.playAnim('singDOWN', true); case 2: boyfriend.playAnim('singUP', true); case 3: boyfriend.playAnim('singRIGHT', true); - case 1: - boyfriend.playAnim('singDOWN', true); - case 0: - boyfriend.playAnim('singLEFT', true); } playerStrums.forEach(function(spr:FlxSprite) @@ -2102,9 +2123,12 @@ class PlayState extends MusicBeatState note.wasGoodHit = true; vocals.volume = 1; - note.kill(); - notes.remove(note, true); - note.destroy(); + if (!note.isSustainNote) + { + note.kill(); + notes.remove(note, true); + note.destroy(); + } } } From 76a3bd9b0e232c2d2b88f8a072622579acea200c Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sat, 13 Feb 2021 18:10:52 -0500 Subject: [PATCH 22/39] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85f61e9a0..0cf2241d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Made the transitions between the story mode levels more seamless. ### Fixed - Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) +- Fixed sustain note trails ALSO THANKS TO MTH U A REAL ONE ([MTH VERY POWERFUL](https://github.com/ninjamuffin99/Funkin/pull/415)) - Antialiasing on the skyscraper lights ## [0.2.7] - 2021-02-02 From a41e14ecdfd3e0eb6a23fb6d7f62ef9ad50a18a5 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sun, 14 Feb 2021 03:32:24 -0500 Subject: [PATCH 23/39] icons and cleanin --- CHANGELOG.md | 4 +++- Project.xml | 5 ++++- source/Note.hx | 28 +--------------------------- source/PlayState.hx | 9 +++++---- 4 files changed, 13 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85f61e9a0..5a7f47e6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,12 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [unreleased] +## [unreleased] ### Changed +- New icons, old one was placeholder since October woops! - Made the transitions between the story mode levels more seamless. ### Fixed +- Layering on Week 4 songs with GF and the LIMO LOL HOW TF I MISS THIS - Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) - Antialiasing on the skyscraper lights diff --git a/Project.xml b/Project.xml index 498368897..9a04d2611 100644 --- a/Project.xml +++ b/Project.xml @@ -116,7 +116,10 @@ <!-- _________________________________ Custom _______________________________ --> <!--Place custom nodes like icons here (higher priority to override the HaxeFlixel icon)--> - <icon path="art/icon.png" /> + + <icon path="art/icon16.png" size='16'/> + <icon path="art/icon32.png" size='32'/> + <icon path="art/icon64.png" size='64'/> <!-- <haxedef name="SKIP_TO_PLAYSTATE" if="debug" /> --> diff --git a/source/Note.hx b/source/Note.hx index 32e1b5c18..954bbb64c 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -51,33 +51,7 @@ class Note extends FlxSprite switch (daStage) { - case 'school': - loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); - - animation.add('greenScroll', [6]); - animation.add('redScroll', [7]); - animation.add('blueScroll', [5]); - animation.add('purpleScroll', [4]); - - if (isSustainNote) - { - loadGraphic('assets/images/weeb/pixelUI/arrowEnds.png', true, 7, 6); - - animation.add('purpleholdend', [4]); - animation.add('greenholdend', [6]); - animation.add('redholdend', [7]); - animation.add('blueholdend', [5]); - - animation.add('purplehold', [0]); - animation.add('greenhold', [2]); - animation.add('redhold', [3]); - animation.add('bluehold', [1]); - } - - setGraphicSize(Std.int(width * PlayState.daPixelZoom)); - updateHitbox(); - - case 'schoolEvil': // COPY PASTED CUZ I AM LAZY + case 'school' | 'schoolEvil': loadGraphic('assets/images/weeb/pixelUI/arrows-pixels.png', true, 17, 17); animation.add('greenScroll', [6]); diff --git a/source/PlayState.hx b/source/PlayState.hx index cb4f4876b..69d37283c 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -529,10 +529,6 @@ class PlayState extends MusicBeatState gf = new Character(400, 130, gfVersion); gf.scrollFactor.set(0.95, 0.95); - // Shitty layering but whatev it works LOL - if (curStage == 'limo') - add(limo); - dad = new Character(100, 100, SONG.player2); var camPos:FlxPoint = new FlxPoint(dad.getGraphicMidpoint().x, dad.getGraphicMidpoint().y); @@ -614,6 +610,11 @@ class PlayState extends MusicBeatState } add(gf); + + // Shitty layering but whatev it works LOL + if (curStage == 'limo') + add(limo); + add(dad); add(boyfriend); From 3d8a3a8f98e7f27e6fe9816cb290dceb840f7c57 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sun, 14 Feb 2021 19:03:02 -0500 Subject: [PATCH 24/39] Gitaroo easter egg --- source/GitarooPause.hx | 88 ++++++++++++++++++++++++++++++++++++++++++ source/PlayState.hx | 17 +++++--- 2 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 source/GitarooPause.hx diff --git a/source/GitarooPause.hx b/source/GitarooPause.hx new file mode 100644 index 000000000..b444fbf18 --- /dev/null +++ b/source/GitarooPause.hx @@ -0,0 +1,88 @@ +package; + +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.graphics.frames.FlxAtlasFrames; + +class GitarooPause extends MusicBeatState +{ + var replayButton:FlxSprite; + var cancelButton:FlxSprite; + + var replaySelect:Bool = false; + + public function new():Void + { + super(); + } + + override function create() + { + if (FlxG.sound.music != null) + FlxG.sound.music.stop(); + + var bg:FlxSprite = new FlxSprite().loadGraphic('assets/images/pauseAlt/pauseBG.png'); + add(bg); + + var bf:FlxSprite = new FlxSprite(0, 30); + bf.frames = FlxAtlasFrames.fromSparrow('assets/images/pauseAlt/bfLol.png', 'assets/images/pauseAlt/bfLol.xml'); + bf.animation.addByPrefix('lol', "funnyThing", 13); + bf.animation.play('lol'); + add(bf); + bf.screenCenter(X); + + replayButton = new FlxSprite(FlxG.width * 0.28, FlxG.height * 0.7); + replayButton.frames = FlxAtlasFrames.fromSparrow('assets/images/pauseAlt/pauseUI.png', 'assets/images/pauseAlt/pauseUI.xml'); + replayButton.animation.addByPrefix('selected', 'bluereplay', 0, false); + replayButton.animation.appendByPrefix('selected', 'yellowreplay'); + replayButton.animation.play('selected'); + add(replayButton); + + cancelButton = new FlxSprite(FlxG.width * 0.58, replayButton.y); + cancelButton.frames = FlxAtlasFrames.fromSparrow('assets/images/pauseAlt/pauseUI.png', 'assets/images/pauseAlt/pauseUI.xml'); + cancelButton.animation.addByPrefix('selected', 'bluecancel', 0, false); + cancelButton.animation.appendByPrefix('selected', 'cancelyellow'); + cancelButton.animation.play('selected'); + add(cancelButton); + + changeThing(); + + super.create(); + } + + override function update(elapsed:Float) + { + if (controls.LEFT_P || controls.RIGHT_P) + changeThing(); + + if (controls.ACCEPT) + { + if (replaySelect) + { + FlxG.switchState(new PlayState()); + } + else + { + FlxG.switchState(new MainMenuState()); + } + } + + super.update(elapsed); + } + + function changeThing():Void + { + replaySelect = !replaySelect; + + if (replaySelect) + { + cancelButton.animation.curAnim.curFrame = 0; + replayButton.animation.curAnim.curFrame = 1; + } + else + { + cancelButton.animation.curAnim.curFrame = 1; + replayButton.animation.curAnim.curFrame = 0; + } + } +} diff --git a/source/PlayState.hx b/source/PlayState.hx index 64ce3b70a..0af1b0341 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1470,7 +1470,14 @@ class PlayState extends MusicBeatState vocals.stop(); FlxG.sound.music.stop(); - openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + // 1 / 1000 chance for Gitaroo Man easter egg + if (FlxG.random.bool(0.1)) + { + // gitaroo man easter egg + FlxG.switchState(new GitarooPause()); + } + else + openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); } @@ -1505,11 +1512,11 @@ class PlayState extends MusicBeatState daNote.y = (strumLine.y - (Conductor.songPosition - daNote.strumTime) * (0.45 * FlxMath.roundDecimal(SONG.speed, 2))); // i am so fucking sorry for this if condition - if (daNote.isSustainNote && daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth/2 - && (!daNote.mustPress || (daNote.wasGoodHit || - (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) + if (daNote.isSustainNote + && daNote.y + daNote.offset.y <= strumLine.y + Note.swagWidth / 2 + && (!daNote.mustPress || (daNote.wasGoodHit || (daNote.prevNote.wasGoodHit && !daNote.canBeHit)))) { - var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth/2 - daNote.y, daNote.width * 2, daNote.height * 2); + var swagRect = new FlxRect(0, strumLine.y + Note.swagWidth / 2 - daNote.y, daNote.width * 2, daNote.height * 2); swagRect.y /= daNote.scale.y; swagRect.height -= swagRect.y; From 86955d6670d4d5af035a3c11de32dd5aefc3f8e2 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sun, 14 Feb 2021 19:45:18 -0500 Subject: [PATCH 25/39] icons and changelog and newgrounds --- CHANGELOG.md | 4 ++++ Project.xml | 2 +- source/NGio.hx | 6 +++++- source/TitleState.hx | 10 +++++++--- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6ce02987..865d1a9f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [unreleased] +### Added +- Easter eggs ### Changed - New icons, old one was placeholder since October woops! - Made the transitions between the story mode levels more seamless. +- Offset of the Newgrounds logo on boot screen. ### Fixed +- Should show intro credits on desktop versions of the game more consistently - Layering on Week 4 songs with GF and the LIMO LOL HOW TF I MISS THIS - Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) - Fixed sustain note trails ALSO THANKS TO MTH U A REAL ONE ([MTH VERY POWERFUL](https://github.com/ninjamuffin99/Funkin/pull/415)) diff --git a/Project.xml b/Project.xml index 9a04d2611..4957653de 100644 --- a/Project.xml +++ b/Project.xml @@ -2,7 +2,7 @@ <project> <!-- _________________________ Application Settings _________________________ --> - <app title="Friday Night Funkin'" file="Funkin" packageName="com.ninjamuffin99.funkin" main="Main" version="0.2.7" company="ninjamuffin99" /> + <app title="Friday Night Funkin'" file="Funkin" packageName="com.ninjamuffin99.funkin" main="Main" version="0.2.7.1" company="ninjamuffin99" /> <!--Switch Export with Unique ApplicationID and Icon--> <set name="APP_ID" value="0x0100f6c013bbc000" /> diff --git a/source/NGio.hx b/source/NGio.hx index 0c2631b86..c799c4bd2 100644 --- a/source/NGio.hx +++ b/source/NGio.hx @@ -14,6 +14,8 @@ import io.newgrounds.objects.events.Result.GetVersionResult; import lime.app.Application; import openfl.display.Stage; +using StringTools; + /** * MADE BY GEOKURELI THE LEGENED GOD HERO MVP */ @@ -28,6 +30,7 @@ class NGio public static var ngScoresLoaded(default, null):FlxSignal = new FlxSignal(); public static var GAME_VER:String = ""; + public static var GAME_VER_NUMS:String = ''; public static var gotOnlineVer:Bool = false; public static function noLogin(api:String) @@ -43,7 +46,8 @@ class NGio { var call = NG.core.calls.app.getCurrentVersion(GAME_VER).addDataHandler(function(response:Response<GetCurrentVersionResult>) { - GAME_VER = response.result.data.current_version; + GAME_VER = response.result.data.currentVersion; + GAME_VER_NUMS = GAME_VER.split(" ")[0].trim(); trace('CURRENT NG VERSION: ' + GAME_VER); gotOnlineVer = true; }); diff --git a/source/TitleState.hx b/source/TitleState.hx index 53452e45c..6defd5b78 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -88,7 +88,10 @@ class TitleState extends MusicBeatState #elseif CHARTING FlxG.switchState(new ChartingState()); #else - startIntro(); + new FlxTimer().start(1, function(tmr:FlxTimer) + { + startIntro(); + }); #end } @@ -223,7 +226,8 @@ class TitleState extends MusicBeatState override function update(elapsed:Float) { - Conductor.songPosition = FlxG.sound.music.time; + if (FlxG.sound.music != null) + Conductor.songPosition = FlxG.sound.music.time; // FlxG.watch.addQuick('amp', FlxG.sound.music.amplitude); if (FlxG.keys.justPressed.F) @@ -270,7 +274,7 @@ class TitleState extends MusicBeatState var version:String = "v" + Application.current.meta.get('version'); - if (version.trim() != NGio.GAME_VER.trim() && !OutdatedSubState.leftState) + if (version.trim() != NGio.GAME_VER_NUMS && !OutdatedSubState.leftState) { trace('OLD VERSION!'); FlxG.switchState(new OutdatedSubState()); From a5e3e2be41e9a7a41b6b34d70fd8c421789cfc0b Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sun, 14 Feb 2021 20:15:22 -0500 Subject: [PATCH 26/39] readme stuff --- CHANGELOG.md | 2 ++ Project.xml | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 865d1a9f7..672084022 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [unreleased] ### Added - Easter eggs +- readme's in desktop versions of the game ### Changed - New icons, old one was placeholder since October woops! - Made the transitions between the story mode levels more seamless. - Offset of the Newgrounds logo on boot screen. ### Fixed +- Fixed crashes on Week 6 story mode dialogue if spam too fast ([Thanks to Lotusotho for the Pull Request!](https://github.com/ninjamuffin99/Funkin/pull/357)) - Should show intro credits on desktop versions of the game more consistently - Layering on Week 4 songs with GF and the LIMO LOL HOW TF I MISS THIS - Chart's and chart editor now support changeBPM, GOD BLESS MTH FOR THIS ONE I BEEN STRUGGLIN WIT THAT SINCE OCTOBER LMAO ([GOD BLESS MTH](https://github.com/ninjamuffin99/Funkin/pull/382)) diff --git a/Project.xml b/Project.xml index 4957653de..2c46a5380 100644 --- a/Project.xml +++ b/Project.xml @@ -43,6 +43,7 @@ <assets path="assets/images" /> <assets path="assets/data" /> <assets path='example_mods' rename='mods' embed='false'/> + <assets path='art/readme.txt' rename='do NOT readme.txt' /> <!-- <template path='mods' /> --> <!-- <library name="noPreload" preload='false'/> --> From 0804f1a709f3f2811d86e755da3ed8454ddf0369 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sun, 14 Feb 2021 20:21:34 -0500 Subject: [PATCH 27/39] changelog good to go --- CHANGELOG.md | 3 ++- Project.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 672084022..c650752ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [unreleased] +## [0.2.7.1] - 2021-02-14 ### Added - Easter eggs - readme's in desktop versions of the game @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New icons, old one was placeholder since October woops! - Made the transitions between the story mode levels more seamless. - Offset of the Newgrounds logo on boot screen. +- Made the changelog txt so it can be opened easier by normal people who don't have a markdown reader (most normal people); ### Fixed - Fixed crashes on Week 6 story mode dialogue if spam too fast ([Thanks to Lotusotho for the Pull Request!](https://github.com/ninjamuffin99/Funkin/pull/357)) - Should show intro credits on desktop versions of the game more consistently diff --git a/Project.xml b/Project.xml index 2c46a5380..a99a8b40d 100644 --- a/Project.xml +++ b/Project.xml @@ -53,7 +53,7 @@ <assets path="assets/sounds" include="*.mp3" if="web" /> <assets path="assets/sounds" include="*.ogg" unless="web" /> - <assets path="CHANGELOG.md"/> + <assets path="CHANGELOG.md" rename='changelog.txt'/> <!-- NOTE FOR FUTURE SELF SINCE FONTS ARE ALWAYS FUCKY TO FIX ONE OF THEM, I CONVERTED IT TO OTF. DUNNO IF YOU NEED TO From 7df55291a574c3d97009cf7ede4ef02899d98353 Mon Sep 17 00:00:00 2001 From: George FunBook <gkurelic@gmail.com> Date: Mon, 15 Feb 2021 15:49:13 -0600 Subject: [PATCH 28/39] oices path --- source/ChartingState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ChartingState.hx b/source/ChartingState.hx index a98774179..cc024ccff 100644 --- a/source/ChartingState.hx +++ b/source/ChartingState.hx @@ -354,7 +354,7 @@ class ChartingState extends MusicBeatState FlxG.sound.playMusic(Paths.inst(daSong), 0.6); // WONT WORK FOR TUTORIAL OR TEST SONG!!! REDO LATER - vocals = new FlxSound().loadEmbedded(Paths.music(daSong + "_Voices")); + vocals = new FlxSound().loadEmbedded(Paths.voices(daSong)); FlxG.sound.list.add(vocals); FlxG.sound.music.pause(); From a3ece662fe5cbb0c7f140cf44b003e87ff15a01b Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Tue, 16 Feb 2021 00:21:11 -0500 Subject: [PATCH 29/39] icon bullshit and somethin else gitaroo man --- Project.xml | 1 + source/NGio.hx | 1 + source/PlayState.hx | 18 +++++++++--------- source/TitleState.hx | 6 +++++- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Project.xml b/Project.xml index a99a8b40d..b525b57c5 100644 --- a/Project.xml +++ b/Project.xml @@ -121,6 +121,7 @@ <icon path="art/icon16.png" size='16'/> <icon path="art/icon32.png" size='32'/> <icon path="art/icon64.png" size='64'/> + <icon path="art/iconOG.png" size='256'/> <!-- <haxedef name="SKIP_TO_PLAYSTATE" if="debug" /> --> diff --git a/source/NGio.hx b/source/NGio.hx index c799c4bd2..f8d8948e5 100644 --- a/source/NGio.hx +++ b/source/NGio.hx @@ -49,6 +49,7 @@ class NGio GAME_VER = response.result.data.currentVersion; GAME_VER_NUMS = GAME_VER.split(" ")[0].trim(); trace('CURRENT NG VERSION: ' + GAME_VER); + trace('CURRENT NG VERSION: ' + GAME_VER_NUMS); gotOnlineVer = true; }); diff --git a/source/PlayState.hx b/source/PlayState.hx index 0af1b0341..7a2953e2d 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1272,7 +1272,14 @@ class PlayState extends MusicBeatState persistentDraw = true; paused = true; - openSubState(new PauseSubState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + // 1 / 1000 chance for Gitaroo Man easter egg + if (FlxG.random.bool(0.1)) + { + // gitaroo man easter egg + FlxG.switchState(new GitarooPause()); + } + else + openSubState(new PauseSubState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); } if (FlxG.keys.justPressed.SEVEN) @@ -1470,14 +1477,7 @@ class PlayState extends MusicBeatState vocals.stop(); FlxG.sound.music.stop(); - // 1 / 1000 chance for Gitaroo Man easter egg - if (FlxG.random.bool(0.1)) - { - // gitaroo man easter egg - FlxG.switchState(new GitarooPause()); - } - else - openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); + openSubState(new GameOverSubstate(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); // FlxG.switchState(new GameOverState(boyfriend.getScreenPosition().x, boyfriend.getScreenPosition().y)); } diff --git a/source/TitleState.hx b/source/TitleState.hx index 6defd5b78..a2ac4af62 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -274,9 +274,13 @@ class TitleState extends MusicBeatState var version:String = "v" + Application.current.meta.get('version'); - if (version.trim() != NGio.GAME_VER_NUMS && !OutdatedSubState.leftState) + if (version.trim() != NGio.GAME_VER_NUMS.trim() && !OutdatedSubState.leftState) { trace('OLD VERSION!'); + trace('old ver'); + trace(version.trim()); + trace('cur ver'); + trace(NGio.GAME_VER_NUMS.trim()); FlxG.switchState(new OutdatedSubState()); } else From 12f8c574844d8ba99408493f87aa0aed175ae259 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Tue, 16 Feb 2021 01:53:25 -0500 Subject: [PATCH 30/39] mobile bullshit cookin in progress??? --- Project.xml | 12 +++++----- source/Main.hx | 60 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/Project.xml b/Project.xml index b525b57c5..9ebcdccdb 100644 --- a/Project.xml +++ b/Project.xml @@ -2,7 +2,7 @@ <project> <!-- _________________________ Application Settings _________________________ --> - <app title="Friday Night Funkin'" file="Funkin" packageName="com.ninjamuffin99.funkin" main="Main" version="0.2.7.1" company="ninjamuffin99" /> + <app title="Friday Night Funkin'" file="Funkin" packageName="com.ninjamuffin99.funkin" package="com.ninjamuffin99.funkin" main="Main" version="0.2.7.1" company="ninjamuffin99" /> <!--Switch Export with Unique ApplicationID and Icon--> <set name="APP_ID" value="0x0100f6c013bbc000" /> @@ -27,7 +27,7 @@ <window if="desktop" orientation="landscape" fullscreen="false" resizable="true" vsync="false"/> <!--Mobile-specific--> - <window if="mobile" orientation="landscape" fullscreen="true" width="0" height="0" /> + <window if="mobile" orientation="landscape" fullscreen="true" width="0" height="0" resizable="false"/> <!--Switch-specific--> <window if="switch" orientation="landscape" fullscreen="true" width="0" height="0" resizable="true" /> @@ -94,9 +94,9 @@ <!--<haxedef name="FLX_NO_NATIVE_CURSOR" />--> <!--Optimise inputs, be careful you will get null errors if you don't use conditionals in your game--> - <haxedef name="FLX_NO_MOUSE" if="mobile" /> - <haxedef name="FLX_NO_KEYBOARD" if="mobile" /> - <haxedef name="FLX_NO_TOUCH" if="desktop" /> + <!-- <haxedef name="FLX_NO_MOUSE" if="mobile" /> --> + <!-- <haxedef name="FLX_NO_KEYBOARD" if="mobile" /> --> + <!-- <haxedef name="FLX_NO_TOUCH" if="desktop" /> --> <!--<haxedef name="FLX_NO_GAMEPAD" />--> <!--Disable the Flixel core sound tray--> @@ -121,7 +121,7 @@ <icon path="art/icon16.png" size='16'/> <icon path="art/icon32.png" size='32'/> <icon path="art/icon64.png" size='64'/> - <icon path="art/iconOG.png" size='256'/> + <icon path="art/iconOG.png" /> <!-- <haxedef name="SKIP_TO_PLAYSTATE" if="debug" /> --> diff --git a/source/Main.hx b/source/Main.hx index 13376db44..7f287f87e 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -1,15 +1,73 @@ package; import flixel.FlxGame; +import flixel.FlxState; +import openfl.Assets; +import openfl.Lib; import openfl.display.FPS; import openfl.display.Sprite; +import openfl.events.Event; class Main extends Sprite { + var gameWidth:Int = 1280; // Width of the game in pixels (might be less / more in actual pixels depending on your zoom). + var gameHeight:Int = 720; // Height of the game in pixels (might be less / more in actual pixels depending on your zoom). + var initialState:Class<FlxState> = TitleState; // The FlxState the game starts with. + var zoom:Float = -1; // If -1, zoom is automatically calculated to fit the window dimensions. + var framerate:Int = 60; // How many frames per second the game should run at. + var skipSplash:Bool = true; // Whether to skip the flixel splash screen that appears in release mode. + var startFullscreen:Bool = false; // Whether to start the game in fullscreen on desktop targets + + // You can pretty much ignore everything from here on - your code should go in your states. + + public static function main():Void + { + Lib.current.addChild(new Main()); + } + public function new() { super(); - addChild(new FlxGame(0, 0, TitleState)); + + if (stage != null) + { + init(); + } + else + { + addEventListener(Event.ADDED_TO_STAGE, init); + } + } + + private function init(?E:Event):Void + { + if (hasEventListener(Event.ADDED_TO_STAGE)) + { + removeEventListener(Event.ADDED_TO_STAGE, init); + } + + setupGame(); + } + + private function setupGame():Void + { + var stageWidth:Int = Lib.current.stage.stageWidth; + var stageHeight:Int = Lib.current.stage.stageHeight; + + if (zoom == -1) + { + var ratioX:Float = stageWidth / gameWidth; + var ratioY:Float = stageHeight / gameHeight; + zoom = Math.min(ratioX, ratioY); + gameWidth = Math.ceil(stageWidth / zoom); + gameHeight = Math.ceil(stageHeight / zoom); + } + + #if !debug + initialState = TitleState; + #end + + addChild(new FlxGame(gameWidth, gameHeight, initialState, zoom, framerate, framerate, skipSplash, startFullscreen)); #if !mobile addChild(new FPS(10, 3, 0xFFFFFF)); From 418c9a06c77c167e1c0e66274662616c2941466e Mon Sep 17 00:00:00 2001 From: Tenta <72235309+TentaRJ@users.noreply.github.com> Date: Wed, 17 Feb 2021 18:43:50 -0500 Subject: [PATCH 31/39] README.md update for Haxe 4.1.5 --- README.md | 183 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index 8b70997e2..80f0f946f 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,91 @@ -# Friday Night Funkin - -This is the repository for Friday Night Funkin, a game originally made for Ludum Dare 47 "Stuck In a Loop". - -Play the Ludum Dare prototype here: https://ninja-muffin24.itch.io/friday-night-funkin -Play the Newgrounds one here: https://www.newgrounds.com/portal/view/770371 -Support the project on the itch.io page: https://ninja-muffin24.itch.io/funkin - -## Credits / shoutouts - -- [ninjamuffin99 (me!)](https://twitter.com/ninja_muffin99) - Programmer -- [PhantomArcade3K](https://twitter.com/phantomarcade3k) and [Evilsk8r](https://twitter.com/evilsk8r) - Art -- [Kawaisprite](https://twitter.com/kawaisprite) - Musician - -This game was made with love to Newgrounds and it's community. Extra love to Tom Fulp. - -## Build instructions - -THESE INSTRUCTIONS ARE FOR COMPILING THE GAME'S SOURCE CODE!!! - -IF YOU WANT TO JUST DOWNLOAD AND INSTALL AND PLAY THE GAME NORMALLY, GO TO ITCH.IO TO DOWNLOAD THE GAME FOR PC, MAC, AND LINUX!! - -https://ninja-muffin24.itch.io/friday-night-funkin - -IF YOU WANT TO COMPILE THE GAME YOURSELF, CONTINUE READING!!! - -### Installing shit - -First you need to install Haxe and HaxeFlixel. I'm too lazy to write and keep updated with that setup (which is pretty simple). -The link to that is on the [HaxeFlixel website](https://haxeflixel.com/documentation/getting-started/) - -Other installations you'd need is the additional libraries, a fully updated list will be in `Project.xml` in the project root, but here are the one's I'm using as of writing. - -``` -hscript -flixel-ui -newgrounds -``` - -So for each of those type `haxelib install [library]` so shit like `haxelib install newgrounds` - -You'll also need to install polymod. Do this with - -``` -haxelib git polymod https://github.com/larsiusprime/polymod.git -``` - -### Ignored files - -I gitignore the API keys for the game, so that no one can nab them and post fake highscores on the leaderboards. But because of that the game -doesn't compile without it. - -Just make a file in `/source` and call it `APIStuff.hx`, and copy paste this into it - -```haxe -package; - -class APIStuff -{ - public static var API:String = ""; - public static var EncKey:String = ""; -} - -``` - -and you should be good to go there. - -### Compiling game - -Once you have all those installed, it's pretty easy to compile the game. You just need to run 'lime test html5 -debug' in the root of the project to build and run the HTML5 version. (command prompt navigation guide can be found here: [https://ninjamuffin99.newgrounds.com/news/post/1090480](https://ninjamuffin99.newgrounds.com/news/post/1090480)) - -To run it from your desktop (Windows, Mac, Linux) it can be a bit more involved. For Linux, you only need to open a terminal in the project directory and run 'lime test linux -debug' and then run the executible file in export/release/linux/bin. For Windows, you need to install Visual Studio Community 2019. While installing VSC, don't click on any of the options to install workloads. Instead, go to the individual components tab and choose the following: -* MSVC v142 - VS 2019 C++ x64/x86 build tools -* Windows SDK (10.0.17763.0) -* C++ Profiling tools -* C++ CMake tools for windows -* C++ ATL for v142 build tools (x86 & x64) -* C++ MFC for v142 build tools (x86 & x64) -* C++/CLI support for v142 build tools (14.21) -* C++ Modules for v142 build tools (x64/x86) -* Clang Compiler for Windows -* Windows 10 SDK (10.0.17134.0) -* Windows 10 SDK (10.0.16299.0) -* MSVC v141 - VS 2017 C++ x64/x86 build tools -* MSVC v140 - VS 2015 C++ build tools (v14.00) - -This will install about 22GB of crap, but once that is done you can open up a command line in the project's directory and run `lime test windows -debug`. Once that command finishes (it takes forever even on a higher end PC), you can run FNF from the .exe file under export\release\windows\bin -As for Mac, 'lime test mac -debug' should work, if not the internet surely has a guide on how to compile Haxe stuff for Mac. - -### Additional guides - -- [Command line basics](https://ninjamuffin99.newgrounds.com/news/post/1090480) +# Friday Night Funkin + +This is the repository for Friday Night Funkin, a game originally made for Ludum Dare 47 "Stuck In a Loop". + +Play the Ludum Dare prototype here: https://ninja-muffin24.itch.io/friday-night-funkin +Play the Newgrounds one here: https://www.newgrounds.com/portal/view/770371 +Support the project on the itch.io page: https://ninja-muffin24.itch.io/funkin + +## Credits / shoutouts + +- [ninjamuffin99 (me!)](https://twitter.com/ninja_muffin99) - Programmer +- [PhantomArcade3K](https://twitter.com/phantomarcade3k) and [Evilsk8r](https://twitter.com/evilsk8r) - Art +- [Kawaisprite](https://twitter.com/kawaisprite) - Musician + +This game was made with love to Newgrounds and it's community. Extra love to Tom Fulp. + +## Build instructions + +THESE INSTRUCTIONS ARE FOR COMPILING THE GAME'S SOURCE CODE!!! + +IF YOU WANT TO JUST DOWNLOAD AND INSTALL AND PLAY THE GAME NORMALLY, GO TO ITCH.IO TO DOWNLOAD THE GAME FOR PC, MAC, AND LINUX!! + +https://ninja-muffin24.itch.io/friday-night-funkin + +IF YOU WANT TO COMPILE THE GAME YOURSELF, CONTINUE READING!!! + +### Installing shit + +First you need to install Haxe and HaxeFlixel. I'm too lazy to write and keep updated with that setup (which is pretty simple). +1. [Install Haxe 4.1.5](https://haxe.org/download/version/4.1.5/) (Download 4.1.5 instead of 4.2.0 because 4.2.0 is broken and is not working with gits properly...) +2. [Install HaxeFlixel](https://haxeflixel.com/documentation/install-haxeflixel/) after downloading Haxe + +Other installations you'd need is the additional libraries, a fully updated list will be in `Project.xml` in the project root, but here are the one's I'm using as of writing. + +``` +hscript +flixel-ui +newgrounds +``` + +So for each of those type `haxelib install [library]` so shit like `haxelib install newgrounds` + +You'll also need to install polymod. To do this, you need to do two things first. +1. For Windows: [Download GitForWindows](https://gitforwindows.org/) to use gits. +2. Run `haxelib git polymod https://github.com/larsiusprime/polymod.git` after GitForWindows is installed + +### Ignored files + +I gitignore the API keys for the game, so that no one can nab them and post fake highscores on the leaderboards. But because of that the game +doesn't compile without it. + +Just make a file in `/source` and call it `APIStuff.hx`, and copy paste this into it + +```haxe +package; + +class APIStuff +{ + public static var API:String = ""; + public static var EncKey:String = ""; +} + +``` + +and you should be good to go there. + +### Compiling game + +Once you have all those installed, it's pretty easy to compile the game. You just need to run 'lime test html5 -debug' in the root of the project to build and run the HTML5 version. (command prompt navigation guide can be found here: [https://ninjamuffin99.newgrounds.com/news/post/1090480](https://ninjamuffin99.newgrounds.com/news/post/1090480)) + +To run it from your desktop (Windows, Mac, Linux) it can be a bit more involved. For Linux, you only need to open a terminal in the project directory and run 'lime test linux -debug' and then run the executible file in export/release/linux/bin. For Windows, you need to install Visual Studio Community 2019. While installing VSC, don't click on any of the options to install workloads. Instead, go to the individual components tab and choose the following: +* MSVC v142 - VS 2019 C++ x64/x86 build tools +* Windows SDK (10.0.17763.0) +* C++ Profiling tools +* C++ CMake tools for windows +* C++ ATL for v142 build tools (x86 & x64) +* C++ MFC for v142 build tools (x86 & x64) +* C++/CLI support for v142 build tools (14.21) +* C++ Modules for v142 build tools (x64/x86) +* Clang Compiler for Windows +* Windows 10 SDK (10.0.17134.0) +* Windows 10 SDK (10.0.16299.0) +* MSVC v141 - VS 2017 C++ x64/x86 build tools +* MSVC v140 - VS 2015 C++ build tools (v14.00) + +This will install about 22GB of crap, but once that is done you can open up a command line in the project's directory and run `lime test windows -debug`. Once that command finishes (it takes forever even on a higher end PC), you can run FNF from the .exe file under export\release\windows\bin +As for Mac, 'lime test mac -debug' should work, if not the internet surely has a guide on how to compile Haxe stuff for Mac. + +### Additional guides + +- [Command line basics](https://ninjamuffin99.newgrounds.com/news/post/1090480) \ No newline at end of file From ec13d22ae7c51ec1320d82f8f8189805208383bf Mon Sep 17 00:00:00 2001 From: Tenta <72235309+TentaRJ@users.noreply.github.com> Date: Wed, 17 Feb 2021 19:32:49 -0500 Subject: [PATCH 32/39] Update README.md --- README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 80f0f946f..2c40ffc1c 100644 --- a/README.md +++ b/README.md @@ -24,25 +24,28 @@ https://ninja-muffin24.itch.io/friday-night-funkin IF YOU WANT TO COMPILE THE GAME YOURSELF, CONTINUE READING!!! -### Installing shit +### Installing the Required Programs First you need to install Haxe and HaxeFlixel. I'm too lazy to write and keep updated with that setup (which is pretty simple). 1. [Install Haxe 4.1.5](https://haxe.org/download/version/4.1.5/) (Download 4.1.5 instead of 4.2.0 because 4.2.0 is broken and is not working with gits properly...) 2. [Install HaxeFlixel](https://haxeflixel.com/documentation/install-haxeflixel/) after downloading Haxe -Other installations you'd need is the additional libraries, a fully updated list will be in `Project.xml` in the project root, but here are the one's I'm using as of writing. - +Other installations you'd need is the additional libraries, a fully updated list will be in `Project.xml` in the project root. Currently, these are all of the things you need to install: ``` -hscript +flixel +flixel-addons flixel-ui +hscript newgrounds ``` - So for each of those type `haxelib install [library]` so shit like `haxelib install newgrounds` -You'll also need to install polymod. To do this, you need to do two things first. -1. For Windows: [Download GitForWindows](https://gitforwindows.org/) to use gits. -2. Run `haxelib git polymod https://github.com/larsiusprime/polymod.git` after GitForWindows is installed +You'll also need to install polymod. To do this, you need to do a few things first. +1. Download [git-scm](https://git-scm.com/downloads). Works for Windows, Mac, and Linux, just select your build. +2. Follow instructions to install the application properly. +3. Run `haxelib git polymod https://github.com/larsiusprime/polymod.git` in terminal/command-prompt after your git program is installed. + +You should have everything ready for compiling the game! Follow the guide below to continue! ### Ignored files @@ -88,4 +91,4 @@ As for Mac, 'lime test mac -debug' should work, if not the internet surely has a ### Additional guides -- [Command line basics](https://ninjamuffin99.newgrounds.com/news/post/1090480) \ No newline at end of file +- [Command line basics](https://ninjamuffin99.newgrounds.com/news/post/1090480) From b83bb877d0a1a52b910816d700a729c6083aea98 Mon Sep 17 00:00:00 2001 From: MtH <mth@mth.moe> Date: Sat, 20 Feb 2021 01:22:23 +0100 Subject: [PATCH 33/39] fix several issues caused by sustain notes no longer being removed after correctly hit --- source/Note.hx | 8 ++------ source/PlayState.hx | 31 ++++++++++++------------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/source/Note.hx b/source/Note.hx index 2b04b5985..ee1a8693d 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -171,16 +171,14 @@ class Note extends FlxSprite if (mustPress) { - // The * 0.5 us so that its easier to hit them too late, instead of too early + // The * 0.5 is so that it's easier to hit them too late, instead of too early if (strumTime > Conductor.songPosition - Conductor.safeZoneOffset && strumTime < Conductor.songPosition + (Conductor.safeZoneOffset * 0.5)) - { canBeHit = true; - } else canBeHit = false; - if (strumTime < Conductor.songPosition - Conductor.safeZoneOffset) + if (strumTime < Conductor.songPosition - Conductor.safeZoneOffset && !wasGoodHit) tooLate = true; } else @@ -188,9 +186,7 @@ class Note extends FlxSprite canBeHit = false; if (strumTime <= Conductor.songPosition) - { wasGoodHit = true; - } } if (tooLate) diff --git a/source/PlayState.hx b/source/PlayState.hx index 7a2953e2d..425f93e0a 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -1563,27 +1563,18 @@ class PlayState extends MusicBeatState if (daNote.y < -daNote.height) { - if (daNote.isSustainNote && daNote.wasGoodHit) + if (daNote.tooLate || !daNote.wasGoodHit) { - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); + health -= 0.0475; + vocals.volume = 0; } - else - { - if (daNote.tooLate || !daNote.wasGoodHit) - { - health -= 0.0475; - vocals.volume = 0; - } - daNote.active = false; - daNote.visible = false; + daNote.active = false; + daNote.visible = false; - daNote.kill(); - notes.remove(daNote, true); - daNote.destroy(); - } + daNote.kill(); + notes.remove(daNote, true); + daNote.destroy(); } }); } @@ -1864,7 +1855,7 @@ class PlayState extends MusicBeatState notes.forEachAlive(function(daNote:Note) { - if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate) + if (daNote.canBeHit && daNote.mustPress && !daNote.tooLate && !daNote.wasGoodHit) { // the sorting probably doesn't need to be in here? who cares lol possibleNotes.push(daNote); @@ -1940,13 +1931,15 @@ class PlayState extends MusicBeatState if (upP || rightP || downP || leftP) noteCheck(leftP, daNote); } - */ + + //this is already done in noteCheck / goodNoteHit if (daNote.wasGoodHit) { daNote.kill(); notes.remove(daNote, true); daNote.destroy(); } + */ } else { From d2062f41b6bf807f8c2c62717b3d6a46d4b7473c Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Tue, 23 Feb 2021 23:14:18 -0500 Subject: [PATCH 34/39] small shit characters dunno this shit weird lol --- source/Character.hx | 4 ++-- source/PlayState.hx | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/Character.hx b/source/Character.hx index 4177e2b52..e13abdee9 100644 --- a/source/Character.hx +++ b/source/Character.hx @@ -622,8 +622,8 @@ class Character extends FlxSprite { animation.play(AnimName, Force, Reversed, Frame); - var daOffset = animOffsets.get(animation.curAnim.name); - if (animOffsets.exists(animation.curAnim.name)) + var daOffset = animOffsets.get(AnimName); + if (animOffsets.exists(AnimName)) { offset.set(daOffset[0], daOffset[1]); } diff --git a/source/PlayState.hx b/source/PlayState.hx index 647357157..663127143 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -124,6 +124,10 @@ class PlayState extends MusicBeatState override public function create() { + + if (FlxG.sound.music != null) + FlxG.sound.music.stop(); + // var gameCam:FlxCamera = FlxG.camera; camGame = new FlxCamera(); camHUD = new FlxCamera(); From a6deae4796d2a57452b54635b0079975047ab295 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Tue, 23 Feb 2021 23:32:53 -0500 Subject: [PATCH 35/39] bullshit lol --- source/TitleState.hx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/TitleState.hx b/source/TitleState.hx index a2ac4af62..d1fa230a2 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -237,6 +237,16 @@ class TitleState extends MusicBeatState var pressedEnter:Bool = FlxG.keys.justPressed.ENTER; + #if mobile + for (touch in FlxG.touches.list) + { + if (touch.justPressed) + { + pressedEnter = true; + } + } + #end + var gamepad:FlxGamepad = FlxG.gamepads.lastActive; if (gamepad != null) From 10ecc85baff08ec1eea902225f6f4b21aee3b83c Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Wed, 24 Feb 2021 18:32:51 -0500 Subject: [PATCH 36/39] options menu in progress --- Project.xml | 2 +- source/ControlsSubState.hx | 4 +++ source/MainMenuState.hx | 4 ++- source/Options.hx | 6 ++++ source/OptionsMenu.hx | 58 ++++++++++++++++++++---------------- source/OptionsSubState.hx | 61 +++++++++++++++++++++++++++++++++++++- 6 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 source/Options.hx diff --git a/Project.xml b/Project.xml index e1a9f1252..7edddb77c 100644 --- a/Project.xml +++ b/Project.xml @@ -18,7 +18,7 @@ <!-- ____________________________ Window Settings ___________________________ --> <!--These window settings apply to all targets--> - <window width="1280" height="720" fps="60" background="#000000" hardware="true" vsync="false" /> + <window width="1280" height="720" fps="" background="#000000" hardware="true" vsync="false" /> <!--HTML5-specific--> <window if="html5" resizable="true" /> diff --git a/source/ControlsSubState.hx b/source/ControlsSubState.hx index d63e978e1..236d4a646 100644 --- a/source/ControlsSubState.hx +++ b/source/ControlsSubState.hx @@ -1,5 +1,6 @@ package; +import flixel.FlxSprite; import flixel.FlxSubState; class ControlsSubState extends FlxSubState @@ -7,5 +8,8 @@ class ControlsSubState extends FlxSubState public function new() { super(); + + var bullshit = new FlxSprite().makeGraphic(100, 100); + add(bullshit); } } diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index 4b6a0464d..4b3a8f110 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -23,7 +23,7 @@ class MainMenuState extends MusicBeatState var menuItems:FlxTypedGroup<FlxSprite>; #if !switch - var optionShit:Array<String> = ['story mode', 'freeplay', 'donate']; + var optionShit:Array<String> = ['story mode', 'freeplay', 'donate', 'options']; #else var optionShit:Array<String> = ['story mode', 'freeplay']; #end @@ -174,6 +174,8 @@ class MainMenuState extends MusicBeatState trace("Freeplay Menu Selected"); case 'options': + FlxTransitionableState.skipNextTransIn = true; + FlxTransitionableState.skipNextTransOut = true; FlxG.switchState(new OptionsMenu()); } }); diff --git a/source/Options.hx b/source/Options.hx new file mode 100644 index 000000000..f392a8b1e --- /dev/null +++ b/source/Options.hx @@ -0,0 +1,6 @@ +package; + +class Options +{ + public static var masterVolume:Float = 1; +} diff --git a/source/OptionsMenu.hx b/source/OptionsMenu.hx index bf36c83d5..0c5b284cc 100644 --- a/source/OptionsMenu.hx +++ b/source/OptionsMenu.hx @@ -32,44 +32,50 @@ class OptionsMenu extends MusicBeatState menuBG.antialiasing = true; add(menuBG); - grpControls = new FlxTypedGroup<Alphabet>(); - add(grpControls); + /* + grpControls = new FlxTypedGroup<Alphabet>(); + add(grpControls); - for (i in 0...controlsStrings.length) - { - if (controlsStrings[i].indexOf('set') != -1) + for (i in 0...controlsStrings.length) { - var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i].substring(3) + ': ' + controlsStrings[i + 1], true, false); - controlLabel.isMenuItem = true; - controlLabel.targetY = i; - grpControls.add(controlLabel); + if (controlsStrings[i].indexOf('set') != -1) + { + var controlLabel:Alphabet = new Alphabet(0, (70 * i) + 30, controlsStrings[i].substring(3) + ': ' + controlsStrings[i + 1], true, false); + controlLabel.isMenuItem = true; + controlLabel.targetY = i; + grpControls.add(controlLabel); + } + // DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !! } - // DONT PUT X IN THE FIRST PARAMETER OF new ALPHABET() !! - } + */ super.create(); + + openSubState(new OptionsSubState()); } override function update(elapsed:Float) { super.update(elapsed); - if (controls.ACCEPT) - { - changeBinding(); - } + /* + if (controls.ACCEPT) + { + changeBinding(); + } - if (isSettingControl) - waitingInput(); - else - { - if (controls.BACK) - FlxG.switchState(new MainMenuState()); - if (controls.UP_P) - changeSelection(-1); - if (controls.DOWN_P) - changeSelection(1); - } + if (isSettingControl) + waitingInput(); + else + { + if (controls.BACK) + FlxG.switchState(new MainMenuState()); + if (controls.UP_P) + changeSelection(-1); + if (controls.DOWN_P) + changeSelection(1); + } + */ } function waitingInput():Void diff --git a/source/OptionsSubState.hx b/source/OptionsSubState.hx index 1995b868a..2b63e0c2f 100644 --- a/source/OptionsSubState.hx +++ b/source/OptionsSubState.hx @@ -1,11 +1,70 @@ package; +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.group.FlxGroup.FlxTypedGroup; +import flixel.text.FlxText; +import flixel.util.FlxColor; + class OptionsSubState extends MusicBeatSubstate { - var textMenuItems:Array<String> = ['Master Volume', 'Sound Volume']; + var textMenuItems:Array<String> = ['Master Volume', 'Sound Volume', 'Controls']; + + var selector:FlxSprite; + var curSelected:Int = 0; + + var grpOptionsTexts:FlxTypedGroup<FlxText>; public function new() { super(); + + grpOptionsTexts = new FlxTypedGroup<FlxText>(); + add(grpOptionsTexts); + + selector = new FlxSprite().makeGraphic(5, 5, FlxColor.RED); + add(selector); + + for (i in 0...textMenuItems.length) + { + var optionText:FlxText = new FlxText(20, 20 + (i * 50), 0, textMenuItems[i], 32); + optionText.ID = i; + grpOptionsTexts.add(optionText); + } + } + + override function update(elapsed:Float) + { + super.update(elapsed); + + if (controls.UP_P) + curSelected -= 1; + + if (controls.DOWN_P) + curSelected += 1; + + if (curSelected < 0) + curSelected = textMenuItems.length - 1; + + if (curSelected >= textMenuItems.length) + curSelected = 0; + + grpOptionsTexts.forEach(function(txt:FlxText) + { + txt.color = FlxColor.WHITE; + + if (txt.ID == curSelected) + txt.color = FlxColor.YELLOW; + }); + + if (controls.ACCEPT) + { + switch (textMenuItems[curSelected]) + { + case "Controls": + FlxG.state.closeSubState(); + FlxG.state.openSubState(new ControlsSubState()); + } + } } } From 3e65da6d9d7c844f8a7314d28b790341815b3f94 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Wed, 24 Feb 2021 19:06:41 -0500 Subject: [PATCH 37/39] bopeebo note thing --- CHANGELOG.md | 7 +++++++ source/ControlsSubState.hx | 3 --- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c650752ab..cc5d7fa84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,18 @@ All notable changes will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] +### Changed +- ASSET LOADING OVERHAUL, WAY FASTER LOAD TIMES ON WEB!!! (THANKS TO GEOKURELI WOKE KING) +### Fixed +- That one random note on Bopeebo + ## [0.2.7.1] - 2021-02-14 ### Added - Easter eggs - readme's in desktop versions of the game ### Changed + - New icons, old one was placeholder since October woops! - Made the transitions between the story mode levels more seamless. - Offset of the Newgrounds logo on boot screen. diff --git a/source/ControlsSubState.hx b/source/ControlsSubState.hx index 236d4a646..f35d74cc8 100644 --- a/source/ControlsSubState.hx +++ b/source/ControlsSubState.hx @@ -8,8 +8,5 @@ class ControlsSubState extends FlxSubState public function new() { super(); - - var bullshit = new FlxSprite().makeGraphic(100, 100); - add(bullshit); } } From 3882de4ad8b30e39326d62ad25f9d5618e3d0458 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Wed, 24 Feb 2021 20:22:37 -0500 Subject: [PATCH 38/39] freeplay fixin shit --- source/Character.hx | 3 ++- source/FreeplayState.hx | 5 +++++ source/StoryMenuState.hx | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/source/Character.hx b/source/Character.hx index e13abdee9..810d21047 100644 --- a/source/Character.hx +++ b/source/Character.hx @@ -1,5 +1,6 @@ package; +import flixel.FlxG; import flixel.FlxSprite; import flixel.animation.FlxBaseAnimation; import flixel.graphics.frames.FlxAtlasFrames; @@ -18,9 +19,9 @@ class Character extends FlxSprite public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false) { - animOffsets = new Map<String, Array<Dynamic>>(); super(x, y); + animOffsets = new Map<String, Array<Dynamic>>(); curCharacter = character; this.isPlayer = isPlayer; diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index b39ebc973..32e02359d 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -50,6 +50,7 @@ class FreeplayState extends MusicBeatState { songs.push('Spookeez'); songs.push('South'); + songs.push('Monster'); } if (StoryMenuState.weekUnlocked[3] || isDebug) @@ -198,6 +199,10 @@ class FreeplayState extends MusicBeatState PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].toLowerCase()); PlayState.isStoryMode = false; PlayState.storyDifficulty = curDifficulty; + + // QUICK DUMB MATH + // gets story week from currently selected, will be fuckie if things are NOT in order! + PlayState.storyWeek = Math.ceil((curSelected + 1) / 3); LoadingState.loadAndSwitchState(new PlayState()); } } diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index adb9d6cb3..1156ccade 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -22,7 +22,7 @@ class StoryMenuState extends MusicBeatState var weekData:Array<Dynamic> = [ ['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], - ['Spookeez', 'South'], + ['Spookeez', 'South', "Monster"], ['Pico', 'Philly', "Blammed"], ['Satin-Panties', "High", "Milf"], ['Cocoa', 'Eggnog', 'Winter-Horrorland'], From b1b3df25b5dcceb8ae70bdc385c1584e9e6bd071 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Wed, 24 Feb 2021 20:52:59 -0500 Subject: [PATCH 39/39] week metadata bullshit for free[;ay --- source/FreeplayState.hx | 82 ++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index 32e02359d..f8bb333e9 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -14,7 +14,7 @@ using StringTools; class FreeplayState extends MusicBeatState { - var songs:Array<String> = []; + var songs:Array<SongMetadata> = []; var selector:FlxText; var curSelected:Int = 0; @@ -30,7 +30,12 @@ class FreeplayState extends MusicBeatState override function create() { - songs = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); + var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); + + for (i in 0...initSonglist.length) + { + songs.push(new SongMetadata(initSonglist[i], 1)); + } /* if (FlxG.sound.music != null) @@ -47,40 +52,19 @@ class FreeplayState extends MusicBeatState #end if (StoryMenuState.weekUnlocked[2] || isDebug) - { - songs.push('Spookeez'); - songs.push('South'); - songs.push('Monster'); - } + addWeek(['Spookeez', 'South', 'Monster'], 2); if (StoryMenuState.weekUnlocked[3] || isDebug) - { - songs.push('Pico'); - songs.push('Philly'); - songs.push('Blammed'); - } + addWeek(['Pico', 'Philly', 'Blammed'], 3); if (StoryMenuState.weekUnlocked[4] || isDebug) - { - songs.push('Satin-Panties'); - songs.push('High'); - songs.push('Milf'); - } + addWeek(['Satin-Panties', 'High', 'Milf'], 4); if (StoryMenuState.weekUnlocked[5] || isDebug) - { - songs.push('Cocoa'); - songs.push('Eggnog'); - songs.push('Winter-Horrorland'); - } + addWeek(['Cocoa', 'Eggnog', 'Winter-Horrorland'], 5); if (StoryMenuState.weekUnlocked[6] || isDebug) - { - songs.push('Senpai'); - songs.push('Roses'); - songs.push('Thorns'); - // songs.push('Winter-Horrorland'); - } + addWeek(['Senpai', 'Roses', 'Thorns'], 6); // LOAD MUSIC @@ -94,7 +78,7 @@ class FreeplayState extends MusicBeatState for (i in 0...songs.length) { - var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i], true, false); + var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i].songName, true, false); songText.isMenuItem = true; songText.targetY = i; grpSongs.add(songText); @@ -151,6 +135,19 @@ class FreeplayState extends MusicBeatState super.create(); } + public function addSong(songName:String, weekNum:Int) + { + songs.push(new SongMetadata(songName, weekNum)); + } + + public function addWeek(songs:Array<String>, weekNum:Int) + { + for (song in songs) + { + addSong(song, weekNum); + } + } + override function update(elapsed:Float) { super.update(elapsed); @@ -192,17 +189,16 @@ class FreeplayState extends MusicBeatState if (accepted) { - var poop:String = Highscore.formatSong(songs[curSelected].toLowerCase(), curDifficulty); + var poop:String = Highscore.formatSong(songs[curSelected].songName.toLowerCase(), curDifficulty); trace(poop); - PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].toLowerCase()); + PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName.toLowerCase()); PlayState.isStoryMode = false; PlayState.storyDifficulty = curDifficulty; - // QUICK DUMB MATH - // gets story week from currently selected, will be fuckie if things are NOT in order! - PlayState.storyWeek = Math.ceil((curSelected + 1) / 3); + PlayState.storyWeek = songs[curSelected].week; + trace('CUR WEEK' + PlayState.storyWeek); LoadingState.loadAndSwitchState(new PlayState()); } } @@ -217,7 +213,7 @@ class FreeplayState extends MusicBeatState curDifficulty = 0; #if !switch - intendedScore = Highscore.getScore(songs[curSelected], curDifficulty); + intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); #end switch (curDifficulty) @@ -250,12 +246,12 @@ class FreeplayState extends MusicBeatState // selector.y = (70 * curSelected) + 30; #if !switch - intendedScore = Highscore.getScore(songs[curSelected], curDifficulty); + intendedScore = Highscore.getScore(songs[curSelected].songName, curDifficulty); // lerpScore = 0; #end #if PRELOAD_ALL - FlxG.sound.playMusic(Paths.inst(songs[curSelected]), 0); + FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0); #end var bullShit:Int = 0; @@ -276,3 +272,15 @@ class FreeplayState extends MusicBeatState } } } + +class SongMetadata +{ + public var songName:String = ""; + public var week:Int = 0; + + public function new(song:String, week:Int) + { + this.songName = song; + this.week = week; + } +}