From d31ef123639b3220a0fb29ca0ba444ab52c8aecf Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 4 Apr 2025 14:28:12 -0400 Subject: [PATCH 01/56] Use public submodule URLs (would be nice if this was automatic but oh well) --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index ad8099e60..f9d5fd497 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "assets"] path = assets - url = https://github.com/FunkinCrew/Funkin-assets-secret + url = https://github.com/FunkinCrew/Funkin.assets [submodule "art"] path = art - url = https://github.com/FunkinCrew/Funkin-art-secret + url = https://github.com/FunkinCrew/Funkin.art From da9f17cf8776c9293c51b55d0e78e8eafebfadf1 Mon Sep 17 00:00:00 2001 From: VioletSnowLeopard Date: Fri, 4 Apr 2025 14:41:33 -0400 Subject: [PATCH 02/56] swap restart and skip in dialogue pause menu --- source/funkin/play/PauseSubState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/play/PauseSubState.hx b/source/funkin/play/PauseSubState.hx index 3c9a67088..023513224 100644 --- a/source/funkin/play/PauseSubState.hx +++ b/source/funkin/play/PauseSubState.hx @@ -86,8 +86,8 @@ class PauseSubState extends MusicBeatSubState */ static final PAUSE_MENU_ENTRIES_CONVERSATION:Array = [ {text: 'Resume', callback: resume}, - {text: 'Restart Dialogue', callback: restartConversation}, {text: 'Skip Dialogue', callback: skipConversation}, + {text: 'Restart Dialogue', callback: restartConversation}, {text: 'Exit to Menu', callback: quitToMenu}, ]; From 158c015682ef9d4c89b78c6ca6c3a70308771f97 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 4 Apr 2025 15:16:26 -0400 Subject: [PATCH 03/56] Use public URLs for git submodules --- .gitmodules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index ad8099e60..f9d5fd497 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "assets"] path = assets - url = https://github.com/FunkinCrew/Funkin-assets-secret + url = https://github.com/FunkinCrew/Funkin.assets [submodule "art"] path = art - url = https://github.com/FunkinCrew/Funkin-art-secret + url = https://github.com/FunkinCrew/Funkin.art From 6543c5836393dfc1437f4d335a247f03a39ab19e Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sat, 5 Apr 2025 22:23:56 -0600 Subject: [PATCH 04/56] Restore Contributing Guide to latest version Merge conflicts yay Co-Authored-By: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> --- docs/CONTRIBUTING.md | 228 ++++++++++++++++++++++++++++++++----------- 1 file changed, 170 insertions(+), 58 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d9eea297b..0f1985fab 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -39,6 +39,8 @@ This guide will cover best practices for each type of contribution. * [funkin.assets PRs](https://github.com/FunkinCrew/Funkin/blob/main/docs/CONTRIBUTING.md#funkinassets-prs) + * [Charting PRs](https://github.com/FunkinCrew/Funkin/blob/main/docs/CONTRIBUTING.md#charting-prs) + [Closing](https://github.com/FunkinCrew/Funkin/blob/main/docs/CONTRIBUTING.md#closing) @@ -58,7 +60,7 @@ This section provides guidelines to follow when [opening an issue](https://githu ## Requirements Make sure you're playing: -- the latest version of the game (currently v0.5.3) +- the latest version of the game (currently v0.6.2) - without any mods - on [Newgrounds](https://www.newgrounds.com/portal/view/770371) or downloaded from [itch.io](https://ninja-muffin24.itch.io/funkin) @@ -122,6 +124,9 @@ Also only report one issue or enhancement at a time! If you have multiple bug re Once you're sure your issue is unique and specific, feel free to submit it. +> [!IMPORTANT] +> **DO NOT CLOSE YOUR ISSUE FOR ANY REASON!** Your issue will be taken care of by a moderator! + **Thank you for opening issues!** # Part 3: Pull Requests @@ -133,6 +138,7 @@ When creating a branch in your fork, base your branch on either the `main` or `d > [!CAUTION] > Avoid using your fork's default branch (`main` in this case) for your PR. This is considered an [anti-pattern](https://jmeridth.com/posts/do-not-issue-pull-requests-from-your-master-branch/) by GitHub themselves! +> Instead, make a separate branch for your additions (ex. `docs/fix-typo` or `minor-bugfix`). Choose the `main` branch if you modify: - Documentation (`.md` files) @@ -165,81 +171,169 @@ This process reapplies your changes on top of the updated branch and cleanly res > This guide does not cover compiling. If you have trouble compiling the game, refer to the [Compilation Guide](https://github.com/FunkinCrew/Funkin/blob/main/docs/COMPILING.md). Code-based PRs make changes such as **fixing bugs** or **implementing new features** in the game. + This involves modifying one or several of the repository’s `.hx` files, found within the `source/` folder. ### Codestyle -Before submitting your PR, check that your code follows the [Style Guide](https://github.com/FunkinCrew/Funkin/blob/main/docs/style-guide.md). +Before submitting your PR, check that your code follows the [Style Guide](https://github.com/FunkinCrew/Funkin/blob/main/docs/style-guide.md). This keeps your code consistent with the rest of the codebase! +### Code comments +Code comments help others understand your changes, so the way you write them is important! Here are some guidelines for writing comments in your code: -- Leave comments only when you believe a piece of code warrants explanation. +- Leave comments only when you believe a piece of code warrants explanation. If a piece of code is self-explanatory, it does not need a comment. - Ensure that your comments provide meaningful insight into the function or purpose of the code. - Write your comments in a clear and concise manner. - Only sign your comments with your name when your changes are complex and may require further explanation. -### Example Comments +### Example code comments #### DO NOT: +Below are examples of what you SHOULD NOT do when writing code comments. ```haxe - /** - * jumps around the song - * works with bpm changes but skipped notes still hurt - * @param sections how many sections to jump, negative = backwards - */ - function changeSection(sections:Int):Void +/** + * jumps around the song + * works with bpm changes but skipped notes still hurt + * @param sections how many sections to jump, negative = backwards + */ +function changeSection(sections:Int):Void +{ + // Pause the music, as you probably guessed + // FlxG.sound.music.pause(); + + // Set the target time in steps, I don’t really get how this works though lol - [GitHub username] + var targetTimeSteps:Float = Conductor.instance.currentStepTime + (Conductor.instance.stepsPerMeasure * sections); + var targetTimeMs:Float = Conductor.instance.getStepTimeInMs(targetTimeSteps); + + // Don't go back in time to before the song started, that would probably break a lot of things and cause a bunch of problems! + targetTimeMs = Math.max(0, targetTimeMs); + + if (FlxG.sound.music != null) // If the music is not null, set the time to the target time { - // Pause the music, as you probably guessed - // FlxG.sound.music.pause(); - - // Set the target time in steps, I don’t really get how this works though lol - [GitHub username] - var targetTimeSteps:Float = Conductor.instance.currentStepTime + (Conductor.instance.stepsPerMeasure * sections); - var targetTimeMs:Float = Conductor.instance.getStepTimeInMs(targetTimeSteps); - - // Don't go back in time to before the song started, that would probably break a lot of things and cause a whole bunch of problems! - targetTimeMs = Math.max(0, targetTimeMs); - - if (FlxG.sound.music != null) // If the music is not null, set the time to the target time - { - FlxG.sound.music.time = targetTimeMs; - } - - // Handle skipped notes and events and all that jazz - handleSkippedNotes(); - SongEventRegistry.handleSkippedEvents(songEvents, Conductor.instance.songPosition); - // regenNoteData(FlxG.sound.music.time); - - Conductor.instance.update(FlxG.sound?.music?.time ?? 0.0); - - // I hate this function - [GitHub username] - resyncVocals(); + FlxG.sound.music.time = targetTimeMs; } + + // Handle skipped notes and events and all that jazz + handleSkippedNotes(); + SongEventRegistry.handleSkippedEvents(songEvents, Conductor.instance.songPosition); + // regenNoteData(FlxG.sound.music.time); + + Conductor.instance.update(FlxG.sound?.music?.time ?? 0.0); + + // I hate this function - [GitHub username] + resyncVocals(); +} +``` + +```haxe +// End the song when the music is complete. +FlxG.sound.music.onComplete = function() { + endSong(skipEndingTransition); +}; +// A negative instrumental offset means the song skips the first few milliseconds of the track. +// This just gets added into the startTimestamp behavior so we don't need to do anything extra. +FlxG.sound.music.play(true, Math.max(0, startTimestamp - Conductor.instance.combinedOffset)); +FlxG.sound.music.pitch = playbackRate; + +// Prevent the volume from being wrong. +FlxG.sound.music.volume = 1.0; +// IF fadetween is not null we cancel it +if (FlxG.sound.music.fadeTween != null) FlxG.sound.music.fadeTween.cancel(); + +// Play the vocals +trace('Playing vocals...'); +// Add the vocals +add(vocals); +// Play the vocals for real this time lol +vocals.play(); +// Set the vocals volume +vocals.volume = 1.0; +// Set the vocals pitch +vocals.pitch = playbackRate; +// Set the vocals time to the music time +vocals.time = FlxG.sound.music.time; +// trace('${FlxG.sound.music.time}'); +// trace('${vocals.time}'); +// functionThatWasntHereBeforeThisPRorSomethingIdKLOL(); +/* testsprite = new FlxSprite(0, 0); +testsprite.loadGraphic(Paths.image('test')); +testsprite.screenCenter(); +add(testsprite); */ + +// Me too [GitHub username] I hate this function it gave me pain and suffering - Girlfriend +resyncVocals(); +``` + +```haxe +#if FEATURE_DEBUG_FUNCTIONS +// PAGEUP: who knows what this does +// SHIFT+PAGEUP: There will be dire consequences. +if (FlxG.keys.justPressed.PAGEUP) changeSection(FlxG.keys.pressed.SHIFT ? 20 : 2); +// PAGEUP: who knows what this does +// SHIFT+PAGEUP: There will be dire consequences. +if (FlxG.keys.justPressed.PAGEDOWN) changeSection(FlxG.keys.pressed.SHIFT ? -20 : -2); +#end ``` #### DO: +Below are examples on what you SHOULD do when writing code comments. ```haxe - /** - * Jumps forward or backward a number of sections in the song. - * Accounts for BPM changes, does not prevent death from skipped notes. - * @param sections The number of sections to jump, negative to go backwards. - */ - function changeSection(sections:Int):Void +/** + * Jumps forward or backward a number of sections in the song. + * Accounts for BPM changes, does not prevent death from skipped notes. + * @param sections The number of sections to jump, negative to go backwards. + */ +function changeSection(sections:Int):Void +{ + var targetTimeSteps:Float = Conductor.instance.currentStepTime + (Conductor.instance.stepsPerMeasure * sections); + var targetTimeMs:Float = Conductor.instance.getStepTimeInMs(targetTimeSteps); + + // Don't go back in time to before the song started. + targetTimeMs = Math.max(0, targetTimeMs); + + if (FlxG.sound.music != null) { - var targetTimeSteps:Float = Conductor.instance.currentStepTime + (Conductor.instance.stepsPerMeasure * sections); - var targetTimeMs:Float = Conductor.instance.getStepTimeInMs(targetTimeSteps); - - // Don't go back in time to before the song started. - targetTimeMs = Math.max(0, targetTimeMs); - - if (FlxG.sound.music != null) - { - FlxG.sound.music.time = targetTimeMs; - } - - handleSkippedNotes(); - SongEventRegistry.handleSkippedEvents(songEvents, Conductor.instance.songPosition); - - Conductor.instance.update(FlxG.sound?.music?.time ?? 0.0); - - resyncVocals(); + FlxG.sound.music.time = targetTimeMs; } + + handleSkippedNotes(); + SongEventRegistry.handleSkippedEvents(songEvents, Conductor.instance.songPosition); + + Conductor.instance.update(FlxG.sound?.music?.time ?? 0.0); + + resyncVocals(); +} +``` + +```haxe +FlxG.sound.music.onComplete = function() { + endSong(skipEndingTransition); +}; +// A negative instrumental offset means the song skips the first few milliseconds of the track. +// This just gets added into the startTimestamp behavior so we don't need to do anything extra. +FlxG.sound.music.play(true, Math.max(0, startTimestamp - Conductor.instance.combinedOffset)); +FlxG.sound.music.pitch = playbackRate; + +// Prevent the volume from being wrong. +FlxG.sound.music.volume = 1.0; +if (FlxG.sound.music.fadeTween != null) FlxG.sound.music.fadeTween.cancel(); + +trace('Playing vocals...'); +add(vocals); +vocals.play(); +vocals.volume = 1.0; +vocals.pitch = playbackRate; +vocals.time = FlxG.sound.music.time; +resyncVocals(); +``` + +```haxe +#if FEATURE_DEBUG_FUNCTIONS +// PAGEUP: Skip forward two sections. +// SHIFT+PAGEUP: Skip forward twenty sections. +if (FlxG.keys.justPressed.PAGEUP) changeSection(FlxG.keys.pressed.SHIFT ? 20 : 2); +// PAGEDOWN: Skip backward two section. Doesn't replace notes. +// SHIFT+PAGEDOWN: Skip backward twenty sections. +if (FlxG.keys.justPressed.PAGEDOWN) changeSection(FlxG.keys.pressed.SHIFT ? -20 : -2); +#end ``` ## Documentation PRs @@ -297,7 +391,25 @@ If you simultaneously modify files from both repositories, then open two separat Be sure to choose `main` as the base branch for `funkin.assets` PRs, as no `develop` branch exists for that repository. +### Charting PRs +Charting PRs make changes such as **adding/removing notes** or **adjusting the placement of song events**. + +This involves modifying one or several of the `funkin.assets` repository's `.json` chart files, found in the `preload/data/songs/` directory. + +These PRs should only be opened in the `funkin.assets` repository. + +> [!CAUTION] +> **No Major Recharts!** Any PR that makes major chart modifications will be rejected. +> Keep your PRs to small tweaks and fixes. + +Here are some guidelines for opening a Charting PR: +- **Explain the issue.** Which song, variation, difficulty, and section/timestamp is the problem in? Help us understand with screenshots and videos. +- **Show your changes.** How does the chart look with your changes? Provide screenshots and videos here as well. +- **Minimize the diff.** If your changes are very small (e.g. a few notes), do not re-export the chart using the Chart Editor. Instead, manually edit the `.json` chart files to help GitHub display your changes cleanly. + +If your PR is accepted, you will be credited as a GitHub contributor (but not as a charter in the Pause Menu). + # Closing Thank you for reading the Contributing Guide. -We look forward to seeing your contributions to the game! +We look forward to seeing your contributions to the game! \ No newline at end of file From d4eee38fd2c8f1ca59dbdd801957eb0b067e5542 Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:07:46 -0300 Subject: [PATCH 05/56] feat: Show current beat and step next to song position --- source/funkin/ui/debug/charting/ChartEditorState.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index 22845155f..61b893cdc 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -5117,6 +5117,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState var songPosMinutes:String = Std.string(Math.floor((Math.abs(songPos) / 1000) / 60)).lpad('0', 2); if (songPos < 0) songPosMinutes = '-' + songPosMinutes; var songPosString:String = '${songPosMinutes}:${songPosSeconds}.${songPosMilliseconds}'; + songPosString += ' | Beat: ${Conductor.instance.currentBeat} | Step: ${Conductor.instance.currentStep}'; if (playbarSongPos.value != songPosString) playbarSongPos.value = songPosString; From c32ade49b9ae0b608af50aa6bcb0750517bd136c Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:58:35 -0300 Subject: [PATCH 06/56] Implement suggestion: Fractional beat display --- source/funkin/ui/debug/charting/ChartEditorState.hx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index 61b893cdc..f8eae591d 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -5117,7 +5117,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState var songPosMinutes:String = Std.string(Math.floor((Math.abs(songPos) / 1000) / 60)).lpad('0', 2); if (songPos < 0) songPosMinutes = '-' + songPosMinutes; var songPosString:String = '${songPosMinutes}:${songPosSeconds}.${songPosMilliseconds}'; - songPosString += ' | Beat: ${Conductor.instance.currentBeat} | Step: ${Conductor.instance.currentStep}'; + + var roundedBeat = FlxMath.roundDecimal(Conductor.instance.currentBeatTime, 2); + var parts:Array = Std.string(roundedBeat).split('.'); + if (parts.length == 1) parts.push('00'); + songPosString += ' | Beat: ${parts.join('.')} | Step: ${Conductor.instance.currentStep}'; if (playbarSongPos.value != songPosString) playbarSongPos.value = songPosString; From 26f2578bf2fb50ccf4070e38c5177df53b61a7a7 Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:02:03 -0300 Subject: [PATCH 07/56] fix: Pad number with 1 decimal place with zero --- source/funkin/ui/debug/charting/ChartEditorState.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index f8eae591d..2fefe5fc0 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -5121,6 +5121,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState var roundedBeat = FlxMath.roundDecimal(Conductor.instance.currentBeatTime, 2); var parts:Array = Std.string(roundedBeat).split('.'); if (parts.length == 1) parts.push('00'); + else if (parts[1].length < 2) parts[1] += '0'; songPosString += ' | Beat: ${parts.join('.')} | Step: ${Conductor.instance.currentStep}'; if (playbarSongPos.value != songPosString) playbarSongPos.value = songPosString; From 3dd3338ab20db7df68e7bf1480c745024bf0fc01 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Fri, 4 Apr 2025 18:32:03 -0600 Subject: [PATCH 08/56] Remove 0.6.0 Changelog entries that weren't implemented + polish --- CHANGELOG.md | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f911d413..f30cef15c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,20 +4,34 @@ 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). + + ## [0.6.2] - 2025-03-31 + ### Added -- 0.6 credits list updated + +- Updated the 0.6 credits list + ### Fixed -- Additional shader fix for Stress Pico crashing at the end (was the same issue as Senpai Pico shader error, just in a different shaderfile) + +- Additional shader fix for Stress (Pico Mix) crashing at the end (was the same issue as Senpai Pico shader error, just in a different shaderfile) + + ## [0.6.1] - 2025-03-31 + ### Fixed + - Hopefully Senpai Pico/Erect mix shader isn't brokey - NG API encryption key was added proper, so medals + leaderboards posting should work + + ## [0.6.0] - 2025-03-31 The Pit Stop 2 update! + ### Added + - Added six (!) new playable songs! Check them out in the Freeplay menu for their respective characters. - Cocoa (Pico Mix) - Senpai (Pico Mix) @@ -38,7 +52,6 @@ The Pit Stop 2 update! - The new sticker system isn't fully available to mods yet, but we're working on it! - New option in the Preferences menu: Strumline Backgrounds! - Options in the Preferences menu now display an on-screen description when selected. -- Added a little easter egg to Pico's Good Results Screen animation. - The HOME and END keys now jump to the top and bottom of the Freeplay song list, respectively. ([bb974c2](https://github.com/FunkinCrew/Funkin/commit/bb974c264270d10ff503784063e5d77bb352b3f7)) - by @AbnormalPoof in [#4103](https://github.com/FunkinCrew/Funkin/pull/4103) - Added an option to launch the game in fullscreen. ([ee53ccd](https://github.com/FunkinCrew/Funkin/commit/ee53ccd32721e0790adfe82c60d4aca419db0a7f)) - by @AbnormalPoof in [#3738](https://github.com/FunkinCrew/Funkin/pull/3738) - Added descriptions for each item in the Preferences menu. ([a17b0e8](https://github.com/FunkinCrew/Funkin/commit/a17b0e8b3cc1d56fcdc0b51eaca9fd57cdb5bce0)) - by @anysad in [#3872](https://github.com/FunkinCrew/Funkin/pull/3872) @@ -52,42 +65,31 @@ The Pit Stop 2 update! - Added `DEBUG_BUILD` value to `Constants` to indicate whether a build has debug functions enabled. ([ad45b72](https://github.com/FunkinCrew/Funkin/commit/ad45b72b1ae8eb73a12dc51bcb59f66cc55e7bbd)) - by @AbnormalPoof in [#3853](https://github.com/FunkinCrew/Funkin/pull/3853) ### Changed + - Switched from hxCodec to hxvlc for video playback. This may break a mod or two. - Check the [Funkin Modding Docs](https://funkincrew.github.io/funkin-modding-docs/09-migration/09-02-0.5.0-to-0.6.0.html) for more info on how to update your mods. - Polymod should now ignore `.git` files when loading mods. -- Lots of improvements to issue and pull request organization. - by @Hundrec and @AbnormalPoof +- Lots of improvements to GitHub issue and pull request organization. - by @Hundrec and @AbnormalPoof - Overhauled the Changelog to improve readability and properly credit contributors. ([4383fcf](https://github.com/FunkinCrew/Funkin/commit/4383fcf32c280a1c0ee7b9c80d255611d497cabc)) - by @Hundrec in [#4296](https://github.com/FunkinCrew/Funkin/pull/4296) and [#4298](https://github.com/FunkinCrew/Funkin/pull/4298) - Made various improvements to the screenshot function. ([9ce7bbc](https://github.com/FunkinCrew/Funkin/commit/9ce7bbcfbb8f30ae120c876194f89bc4c787f585)) - by @Lasercar in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) - Accept keybinds (Z and Space by default) can now be used to exit the Results screen. ([edb270d](https://github.com/FunkinCrew/Funkin/commit/edb270d15e41784dccbf75639ac731840e80fe23)) - by @JVNpixels in [#3799](https://github.com/FunkinCrew/Funkin/pull/3799) - Reordered UI keybinds in the controls menu for consistency. ([a01bcc3](https://github.com/FunkinCrew/Funkin/commit/a01bcc3da836ec52851ca9de13ef459daf61269a)) - by @lemz1 in [#3027](https://github.com/FunkinCrew/Funkin/pull/3027) - New save files now have default Freeplay controls for gamepads. ([2b7f62e](https://github.com/FunkinCrew/Funkin/commit/2b7f62edd33de5527e259d9e5643f926d35da734)) - by @MrMadera in [#3934](https://github.com/FunkinCrew/Funkin/pull/3934) -- Renamed “Auto Pause” preference to “Pause on Unfocus” for clarity. ([49a21c1](https://github.com/FunkinCrew/Funkin/commit/49a21c198236fbecbe5902bb106f78939cc6442a)) - by @JackXson-Real in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) - Made scrolling smoother in the Chart Editor. ([20d9016](https://github.com/FunkinCrew/Funkin/commit/20d90169845f1e50f849e39f4c5f818359756c78)) - by @ninjamuffin99 in [#3768](https://github.com/FunkinCrew/Funkin/pull/3768) -- The Chart Editor now clears the undo/redo history after loading a new song. ([c7bdc1a](https://github.com/FunkinCrew/Funkin/commit/c7bdc1abe265678468920ca3cc3d7eface5d6925)) - by @Lasercar in [#4308](https://github.com/FunkinCrew/Funkin/pull/4308) - Mods with missing dependencies are now skipped instead of preventing all mods from loading. ([1c2fb43](https://github.com/FunkinCrew/Funkin/commit/1c2fb43ae16cf40be5ef94c40b047e8e772b1211)) - by @AbnormalPoof in [#3993](https://github.com/FunkinCrew/Funkin/pull/3993) - Slightly improved flexibility for modding note hit animations. ([3aad825](https://github.com/FunkinCrew/Funkin/commit/3aad825f865c4ed87016983d44121e2c1610d332)) - by @TechnikTil in [#3936](https://github.com/FunkinCrew/Funkin/pull/3936) - Introduced several QoL modding changes. ([785c4be](https://github.com/FunkinCrew/Funkin/commit/785c4be88b52dc1b5899013822fc004ba7d9894d)) - by @Kade-github in [#4009](https://github.com/FunkinCrew/Funkin/pull/4009) - Lots of smaller bug fixes. -## New Contributors for 0.6.0 +### Fixed -* @PatoFlamejanteTV made their first contribution in [#3843](https://github.com/FunkinCrew/Funkin/pull/3843) -* @sphis-Sinco made their first contribution in [#3881](https://github.com/FunkinCrew/Funkin/pull/3881) -* @MrMadera made their first contribution in [#3934](https://github.com/FunkinCrew/Funkin/pull/3934) -* @Lasercar made their first contribution in [#4100](https://github.com/FunkinCrew/Funkin/pull/4065) -* @MidyGamy made their first contribution in [#4068](https://github.com/FunkinCrew/Funkin/pull/4068) -* @MrScottyPieey made their first contribution in [#4085](https://github.com/FunkinCrew/Funkin/pull/4085) -* @JackXson-Real made their first contribution in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) - -# Fixed - Fixed a bug where the song would restart from the beginning instead of moving to the Results screen. ([3667c51](https://github.com/FunkinCrew/Funkin/commit/3667c51c1efe14cfe7c810e2f35991f08f50781a)) - by @KoloInDaCrib in [#4309](https://github.com/FunkinCrew/Funkin/pull/4309) and @Lasercar in [#4330](https://github.com/FunkinCrew/Funkin/pull/4330) - Reduced stuttering when resyncing instrumental and voices tracks. ([22d41d2](https://github.com/FunkinCrew/Funkin/commit/22d41d21b88acb7422a0afcda8414682710bd2ed)) - by @TechnikTil in [#3955](https://github.com/FunkinCrew/Funkin/pull/3955) - Songs with only instrumental tracks no longer stutter. ([dfe02ec](https://github.com/FunkinCrew/Funkin/commit/dfe02ec668b61d6308f459c978d12a7487f9dc28)) - by @KoloInDaCrib in [#3861](https://github.com/FunkinCrew/Funkin/pull/3861) -- The mouse cursor is no longer visible outside of debug editors. ([1c12b84](https://github.com/FunkinCrew/Funkin/commit/1c12b8467eca350eb28138473360d5358fa620e2)) - by @sphis-Sinco in [#3881](https://github.com/FunkinCrew/Funkin/pull/3881) +- The debug mouse cursor no longer flickers before the Title Screen loads. ([1c12b84](https://github.com/FunkinCrew/Funkin/commit/1c12b8467eca350eb28138473360d5358fa620e2)) - by @sphis-Sinco in [#3881](https://github.com/FunkinCrew/Funkin/pull/3881) - Unbound keys now display as [N/A] instead of crashing the game. ([94e5d3c](https://github.com/FunkinCrew/Funkin/commit/94e5d3ca258cbaa5d9ab6f0cb26feda83b3433a2)) - by @NotHyper-474 in [#4355](https://github.com/FunkinCrew/Funkin/pull/4355) - Songs can no longer be spam-selected after selecting an instrumental in Freeplay. ([0e0c4ae](https://github.com/FunkinCrew/Funkin/commit/0e0c4aeb7745cfb9479685ccbb635cf3743cddbb)) - by @AbnormalPoof in [#3866](https://github.com/FunkinCrew/Funkin/pull/3866) - The Random capsule can now switch to Erect/Nightmare difficulties in Freeplay. ([6f32747](https://github.com/FunkinCrew/Funkin/commit/6f327474f30374f50774f432ea3ccb6d02579445)) - by @KoloInDaCrib in [#3838](https://github.com/FunkinCrew/Funkin/pull/3838) -- The millions place digit of the Freeplay score now updates properly. ([3719ca6](https://github.com/FunkinCrew/Funkin/commit/3719ca6ce7a170c3c890cdb2aeea3e4534b91736)) - by @Lasercar in [#4065](https://github.com/FunkinCrew/Funkin/pull/4065) - Fixed a rare bug where a song would not register as beaten. ([a3e2373](https://github.com/FunkinCrew/Funkin/commit/a3e23733db104b1ef00cfcff17db3a5d032a4d67)) - by @AbnormalPoof in [#3820](https://github.com/FunkinCrew/Funkin/pull/3820) - The difficulty graphic on the Results screen no longer cuts off incorrectly. ([b13bf05](https://github.com/FunkinCrew/Funkin/commit/b13bf05d16ff2977309e0c7ba3f049c0134e8902)) - by @AbnormalPoof in [#4161](https://github.com/FunkinCrew/Funkin/pull/4161) - Four-digit long Total Notes values in the Results screen no longer overflow to the right. ([2be4c0c](https://github.com/FunkinCrew/Funkin/commit/2be4c0c7196e018a43f9697f015179f3efc3fcdb)) - by @Hundrec in [#4356](https://github.com/FunkinCrew/Funkin/pull/4356) @@ -99,6 +101,16 @@ The Pit Stop 2 update! - Removed an unused class from Polymod blacklist. ([06c12e3](https://github.com/FunkinCrew/Funkin/commit/06c12e36c6bd6df4e2be32a3bec540172e79e162)) - by @AbnormalPoof in [#3729](https://github.com/FunkinCrew/Funkin/pull/3729) - Many additional small bug fixes. +## New Contributors for 0.6.0 + +* @PatoFlamejanteTV made their first contribution in [#3843](https://github.com/FunkinCrew/Funkin/pull/3843) +* @sphis-Sinco made their first contribution in [#3881](https://github.com/FunkinCrew/Funkin/pull/3881) +* @MrMadera made their first contribution in [#3934](https://github.com/FunkinCrew/Funkin/pull/3934) +* @MidyGamy made their first contribution in [#4068](https://github.com/FunkinCrew/Funkin/pull/4068) +* @Lasercar made their first contribution in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) +* @MrScottyPieey made their first contribution in [#4085](https://github.com/FunkinCrew/Funkin/pull/4085) + + ## [0.5.3] - 2024-10-18 This patch resolves a critical issue that could cause user's save data to become corrupted. It is recommended that users switch to this version immediately and avoid using version 0.5.2. From af14d42939fe198c128c1d842a9a903e369909b9 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Fri, 4 Apr 2025 19:02:47 -0600 Subject: [PATCH 09/56] Oops, one more lil space --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f30cef15c..0a34ec499 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,7 +61,7 @@ The Pit Stop 2 update! - Added offsets support for album titles. ([69d8570](https://github.com/FunkinCrew/Funkin/commit/69d8570a9eb06011ed6dd95fcbef83d90f7f8684)) - by @AbnormalPoof in [#3618](https://github.com/FunkinCrew/Funkin/pull/3618) - Added three new properties to stage data: `angle`, `scroll`, and `alpha`. ([ff56b19](https://github.com/FunkinCrew/Funkin/commit/ff56b1948aef42bbb6bb4ede4f9b2012d49ab044)) - by @AbnormalPoof in [#3720](https://github.com/FunkinCrew/Funkin/pull/3720) - Added script events for losing/gaining focus. ([4b127b6](https://github.com/FunkinCrew/Funkin/commit/4b127b64130f6f753d0574ec66a1672322e4bd13)) - by @AbnormalPoof in [#3721](https://github.com/FunkinCrew/Funkin/pull/3721) -- Added 10 new functions to `ReflectUtil`.([6216655](https://github.com/FunkinCrew/Funkin/commit/62166554e7a176245d1a63bd15122033044c4e40)) - by @AbnormalPoof in [#3622](https://github.com/FunkinCrew/Funkin/pull/3622), [#3809](https://github.com/FunkinCrew/Funkin/pull/3809), and [#4019](https://github.com/FunkinCrew/Funkin/pull/4019) +- Added 10 new functions to `ReflectUtil`. ([6216655](https://github.com/FunkinCrew/Funkin/commit/62166554e7a176245d1a63bd15122033044c4e40)) - by @AbnormalPoof in [#3622](https://github.com/FunkinCrew/Funkin/pull/3622), [#3809](https://github.com/FunkinCrew/Funkin/pull/3809), and [#4019](https://github.com/FunkinCrew/Funkin/pull/4019) - Added `DEBUG_BUILD` value to `Constants` to indicate whether a build has debug functions enabled. ([ad45b72](https://github.com/FunkinCrew/Funkin/commit/ad45b72b1ae8eb73a12dc51bcb59f66cc55e7bbd)) - by @AbnormalPoof in [#3853](https://github.com/FunkinCrew/Funkin/pull/3853) ### Changed From 1823373d7ed5e2b05e253cb57daf10b391c11158 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sat, 5 Apr 2025 00:02:18 -0600 Subject: [PATCH 10/56] Add a few fixes and changes from 0.6.0 --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a34ec499..93ac9acea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,8 @@ The Pit Stop 2 update! - Switched from hxCodec to hxvlc for video playback. This may break a mod or two. - Check the [Funkin Modding Docs](https://funkincrew.github.io/funkin-modding-docs/09-migration/09-02-0.5.0-to-0.6.0.html) for more info on how to update your mods. - Polymod should now ignore `.git` files when loading mods. +- The pause menu can now be opened and closed rapidly. +- Adjusted difficulty ratings and scroll speeds for many songs. - Lots of improvements to GitHub issue and pull request organization. - by @Hundrec and @AbnormalPoof - Overhauled the Changelog to improve readability and properly credit contributors. ([4383fcf](https://github.com/FunkinCrew/Funkin/commit/4383fcf32c280a1c0ee7b9c80d255611d497cabc)) - by @Hundrec in [#4296](https://github.com/FunkinCrew/Funkin/pull/4296) and [#4298](https://github.com/FunkinCrew/Funkin/pull/4298) - Made various improvements to the screenshot function. ([9ce7bbc](https://github.com/FunkinCrew/Funkin/commit/9ce7bbcfbb8f30ae120c876194f89bc4c787f585)) - by @Lasercar in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) @@ -79,10 +81,15 @@ The Pit Stop 2 update! - Mods with missing dependencies are now skipped instead of preventing all mods from loading. ([1c2fb43](https://github.com/FunkinCrew/Funkin/commit/1c2fb43ae16cf40be5ef94c40b047e8e772b1211)) - by @AbnormalPoof in [#3993](https://github.com/FunkinCrew/Funkin/pull/3993) - Slightly improved flexibility for modding note hit animations. ([3aad825](https://github.com/FunkinCrew/Funkin/commit/3aad825f865c4ed87016983d44121e2c1610d332)) - by @TechnikTil in [#3936](https://github.com/FunkinCrew/Funkin/pull/3936) - Introduced several QoL modding changes. ([785c4be](https://github.com/FunkinCrew/Funkin/commit/785c4be88b52dc1b5899013822fc004ba7d9894d)) - by @Kade-github in [#4009](https://github.com/FunkinCrew/Funkin/pull/4009) -- Lots of smaller bug fixes. +- Lots of smaller changes. ### Fixed +- Shaders no longer create thin seams within atlas sprites. +- Completing a song in Practice Mode no longer plays a new rank animation in the Freeplay menu. +- Fixed lots of charting issues across many songs. +- The Chart Editor grid now properly adjusts to the new BPM after switching variations. +- Fixed a few crashes in the Stage Editor. - Fixed a bug where the song would restart from the beginning instead of moving to the Results screen. ([3667c51](https://github.com/FunkinCrew/Funkin/commit/3667c51c1efe14cfe7c810e2f35991f08f50781a)) - by @KoloInDaCrib in [#4309](https://github.com/FunkinCrew/Funkin/pull/4309) and @Lasercar in [#4330](https://github.com/FunkinCrew/Funkin/pull/4330) - Reduced stuttering when resyncing instrumental and voices tracks. ([22d41d2](https://github.com/FunkinCrew/Funkin/commit/22d41d21b88acb7422a0afcda8414682710bd2ed)) - by @TechnikTil in [#3955](https://github.com/FunkinCrew/Funkin/pull/3955) - Songs with only instrumental tracks no longer stutter. ([dfe02ec](https://github.com/FunkinCrew/Funkin/commit/dfe02ec668b61d6308f459c978d12a7487f9dc28)) - by @KoloInDaCrib in [#3861](https://github.com/FunkinCrew/Funkin/pull/3861) From 3218ceeecdd75c0266b7631f4da6ce3e63cda3d7 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Tue, 18 Mar 2025 04:00:18 -0600 Subject: [PATCH 11/56] Consistent hyphens in CODESTYLE.md --- CODESTYLE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CODESTYLE.md b/CODESTYLE.md index 2b6333258..32723531e 100644 --- a/CODESTYLE.md +++ b/CODESTYLE.md @@ -14,8 +14,8 @@ Code Quality is handled by the `vshaxe.haxe-checkstyle` extension, which include * `IndentationCharacter` checks what is used to indent, `Indentation` checks how deep the indentation is. * `CommentedOutCode` check is in place because old code should be retrieved via Git history. * TODO items: Enable these one-by-one and fix them to improve the overall code quality. - - Reconfigure `MethodLength` - - Reconfigure `CyclomaticComplexity` + - Re-configure `MethodLength` + - Re-configure `CyclomaticComplexity` - Re-enable `MagicNumber` - Re-configure `NestedControlFlow` - Re-configure `NestedIfDepth` @@ -28,5 +28,5 @@ Prettier automatically handles formatting of JSON files, and can be configured i ### Prettier Notes * Prettier will automatically attempt to place expressions on a single line if they fit, but will keep them multi-line if they are manually made multi-line. - * This means that long singleline objects are automatically expanded, and short multiline objects aren't automatically collapsed. + * This means that long single-line objects are automatically expanded, and short multi-line objects aren't automatically collapsed. * You may want to use regex replacement to manually remove the first newline in short multi-line objects to convince Prettier to collapse them. From fcb47ff4fca1624ac6e97e890841178770130578 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Tue, 18 Mar 2025 04:01:58 -0600 Subject: [PATCH 12/56] Grammatical fix in style-guide.md --- docs/style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/style-guide.md b/docs/style-guide.md index 4c4e01492..4df4a163d 100644 --- a/docs/style-guide.md +++ b/docs/style-guide.md @@ -4,7 +4,7 @@ This short document is designed to give a run-down on how code should be formatt ## Notes on IDEs and Extensions -The Visual Studio Code IDE is highly recommended, as this repo contains various configuration that works with VSCode extensions to automatically style certain things for you. +The Visual Studio Code IDE is highly recommended, as this repo contains various configurations that work with VSCode extensions to automatically style certain things for you. VSCode is also the only IDE that has any good tools for Haxe so yeah. From b35059ec999fb47831521bdfb8bda94b369481c0 Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Fri, 4 Apr 2025 22:43:25 -0300 Subject: [PATCH 13/56] docs: (COMPILING.md) Remove outdated info about Lime fork --- docs/COMPILING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/COMPILING.md b/docs/COMPILING.md index f193b7830..c18c5e5e7 100644 --- a/docs/COMPILING.md +++ b/docs/COMPILING.md @@ -21,8 +21,8 @@ - Windows 10/11 SDK - Mac: [`lime setup mac` Documentation](https://lime.openfl.org/docs/advanced-setup/macos/) - Linux: [`lime setup linux` Documentation](https://lime.openfl.org/docs/advanced-setup/linux/) - - Note: Funkin's fork currently doesn't come with the necessary binaries so you'll have to rebuild Lime. See [Troubleshooting](TROUBLESHOOTING.md#lime-related-issues). - - One of Funkin's dependencies uses libVLC, which requires you to install some packages to be able to compile: `sudo apt install libvlc-dev libvlccore-dev libvlccore9` + - One of Funkin's dependencies uses libVLC, which requires you to install some development packages to be able to compile. + Command for Ubuntu/Debian based systems: `sudo apt install libvlc-dev libvlccore-dev libvlccore9` - HTML5: Compiles without any extra setup 9. If you are targeting for native, you may need to run `lime rebuild ` and `lime rebuild -debug` 10. `lime test ` to build and launch the game for your platform (for example, `lime test windows`) From 8e8dcaa7f9bfe280395194ca264071ac513c04ff Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Mon, 7 Apr 2025 00:11:30 -0300 Subject: [PATCH 14/56] docs: (TROUBLESHOOTING.md) Correct outdated information about Lime troubleshooting The commit of Lime that Funkin uses now includes Linux NDLLs. These are built on a system with GLibC 2.38 though which breaks compatibility with lots of stable distributions troubleshooting was added for those systems too. --- docs/TROUBLESHOOTING.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index b17ee72b1..f488f28de 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -36,7 +36,8 @@ (NOTE: Make sure you do this via `hmm` (e.g `hmm reinstall -f lime`) to guarantee you get Funkin's version of Lime.) - `Uncaught exception - Could not find lime.ndll.` ... `Advanced users may run "lime rebuild cpp" instead.` - - Usually specific to Linux. Running the commands below should fix it. + - If on Linux: + - The binaries GLibC version might more recent than the one your system supports. Running the commands below should fix it. ``` cd .haxelib/lime/git git submodule init @@ -47,4 +48,6 @@ sudo apt install libgl1-mesa-dev libglu1-mesa-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev lime rebuild cpp -64 -release -clean ``` - For Windows or MacOS you can download pre-built binaries from [Funkin's Lime](https://github.com/FunkinCrew/lime/tree/dev-funkin/ndll). + + - The binaries are missing for some reason. You can download pre-built binaries from [Funkin's Lime](https://github.com/FunkinCrew/lime/tree/dev-funkin/ndll). + You should copy them to `.haxelib/lime/git/ndll/64/`, where `` is the current platform you're on, which can be either Windows, Linux or MacOS. From 08fb5b8459374f489d57097b32590947ec8b62f6 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Thu, 10 Apr 2025 22:49:12 -0600 Subject: [PATCH 15/56] Two more Chart Editor entries in Changelog --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93ac9acea..13cc8626a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,10 +51,11 @@ The Pit Stop 2 update! - Added new stickers which appear when exiting Pico songs! - The new sticker system isn't fully available to mods yet, but we're working on it! - New option in the Preferences menu: Strumline Backgrounds! -- Options in the Preferences menu now display an on-screen description when selected. +- New song event type in the Chart Editor: Set Health Icon! + - This event is now used in Stress (Pico Mix). - The HOME and END keys now jump to the top and bottom of the Freeplay song list, respectively. ([bb974c2](https://github.com/FunkinCrew/Funkin/commit/bb974c264270d10ff503784063e5d77bb352b3f7)) - by @AbnormalPoof in [#4103](https://github.com/FunkinCrew/Funkin/pull/4103) - Added an option to launch the game in fullscreen. ([ee53ccd](https://github.com/FunkinCrew/Funkin/commit/ee53ccd32721e0790adfe82c60d4aca419db0a7f)) - by @AbnormalPoof in [#3738](https://github.com/FunkinCrew/Funkin/pull/3738) -- Added descriptions for each item in the Preferences menu. ([a17b0e8](https://github.com/FunkinCrew/Funkin/commit/a17b0e8b3cc1d56fcdc0b51eaca9fd57cdb5bce0)) - by @anysad in [#3872](https://github.com/FunkinCrew/Funkin/pull/3872) +- Added on-screen descriptions for each item in the Preferences menu. ([a17b0e8](https://github.com/FunkinCrew/Funkin/commit/a17b0e8b3cc1d56fcdc0b51eaca9fd57cdb5bce0)) - by @anysad in [#3872](https://github.com/FunkinCrew/Funkin/pull/3872) - Added precise scrolling in the Chart Editor using Ctrl-Mouse Wheel. ([0d8e4a5](https://github.com/FunkinCrew/Funkin/commit/0d8e4a53305d6d069454812766300122f3581e31)) - by @ninjamuffin99 in [#3806](https://github.com/FunkinCrew/Funkin/pull/3806) - Added a “None” option to the character selector in the Chart Editor. ([d9637d3](https://github.com/FunkinCrew/Funkin/commit/d9637d3a19466b9fc68a102676c46a74ef504909)) - by @Lasercar in [#4279](https://github.com/FunkinCrew/Funkin/pull/4279) - Added the ability to flip the character in the Animation Editor. ([de02137](https://github.com/FunkinCrew/Funkin/commit/de02137d7c7d1779e85aeda34743f506a5b9cc27)) - by @AbnormalPoof in [#3028](https://github.com/FunkinCrew/Funkin/pull/3028) @@ -71,6 +72,8 @@ The Pit Stop 2 update! - Polymod should now ignore `.git` files when loading mods. - The pause menu can now be opened and closed rapidly. - Adjusted difficulty ratings and scroll speeds for many songs. +- Chart Editor event fields now allow for values to be as specific as desired. + - For example, the Zoom Camera event can now be set to 0.9857. - Lots of improvements to GitHub issue and pull request organization. - by @Hundrec and @AbnormalPoof - Overhauled the Changelog to improve readability and properly credit contributors. ([4383fcf](https://github.com/FunkinCrew/Funkin/commit/4383fcf32c280a1c0ee7b9c80d255611d497cabc)) - by @Hundrec in [#4296](https://github.com/FunkinCrew/Funkin/pull/4296) and [#4298](https://github.com/FunkinCrew/Funkin/pull/4298) - Made various improvements to the screenshot function. ([9ce7bbc](https://github.com/FunkinCrew/Funkin/commit/9ce7bbcfbb8f30ae120c876194f89bc4c787f585)) - by @Lasercar in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) From 1434820d10d4843e7384b3d980b1426c3455520d Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Sun, 6 Apr 2025 13:21:22 +1000 Subject: [PATCH 16/56] remove removed debug keys --- docs/Funkin' Debug Hotkeys.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/Funkin' Debug Hotkeys.md b/docs/Funkin' Debug Hotkeys.md index 9c10f060c..dc567eda0 100644 --- a/docs/Funkin' Debug Hotkeys.md +++ b/docs/Funkin' Debug Hotkeys.md @@ -12,9 +12,6 @@ Most of this functionality is only available on debug builds of the game! - `CTRL-SHIFT-L`: ***FORCE CRASH***: Immediately crash the game with a detailed crash log and a stack trace. -## Loading State -- `SPACE`: Trace callbacks. - ## **Play State** - `H`: ***HIDE UI***: Makes the user interface invisible. Works in Pause Menu, great for screenshots. - `1`: ***END SONG***: Immediately ends the song and moves to Results Screen on Freeplay, or next song on Story Mode. @@ -31,8 +28,6 @@ Most of this functionality is only available on debug builds of the game! - `T`: ***TEST RANK ANIMATION***: Play the Gold Perfect rank animation on the currently selected song. - `SHIFT-ACCEPT`: ***BOTPLAY MODE***: Start a song with Botplay mode enabled. - `CTRL-Switch Song`: Play the first unlocked alternate instrumental as the song preview. -- `CTRL-LEFT`/`RIGHT`/`UP`/`DOWN`: ***OFFSET BF DJ IN CARTOON STATE***: While BF DJ's TV animation is playing, offset the DJ by 1 pixel in the opposite direction. `SHIFT` to move 10 pixels, `ALT` to move 0.1 pixels. -- `CTRL-C`: ***TRIGGER DJ CARTOON***: Play the Freeplay DJ's cartoon animation. Press again to return to its regular animation. ## **Title State** - `ESCAPE`: ***QUIT***: Quit the game. From d86fe68d80f1b7991cca071fc8f31cf03684ecfd Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Sat, 29 Mar 2025 02:08:28 -0500 Subject: [PATCH 17/56] docs: Add missing documentation to the remaining functions in `Module` --- source/funkin/modding/module/Module.hx | 86 ++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/source/funkin/modding/module/Module.hx b/source/funkin/modding/module/Module.hx index 57f0cc2da..012b9869f 100644 --- a/source/funkin/modding/module/Module.hx +++ b/source/funkin/modding/module/Module.hx @@ -57,6 +57,9 @@ class Module implements IPlayStateScriptedClass implements IStateChangingScripte // TODO: Half of these aren't actually being called!!!!!!! + /** + * Called when ANY script event is dispatched. + */ public function onScriptEvent(event:ScriptEvent) {} /** @@ -71,55 +74,138 @@ class Module implements IPlayStateScriptedClass implements IStateChangingScripte */ public function onDestroy(event:ScriptEvent) {} + /** + * Called every frame. + */ public function onUpdate(event:UpdateScriptEvent) {} + /** + * Called when the game is paused. + */ public function onPause(event:PauseScriptEvent) {} + /** + * Called when the game is resumed. + */ public function onResume(event:ScriptEvent) {} + /** + * Called when the song begins. + */ public function onSongStart(event:ScriptEvent) {} + /** + * Called when the song ends. + */ public function onSongEnd(event:ScriptEvent) {} + /** + * Called when the player dies. + */ public function onGameOver(event:ScriptEvent) {} + /** + * Called when a note on the strumline has been rendered and is now onscreen. + * This gets dispatched for both the player and opponent strumlines. + */ public function onNoteIncoming(event:NoteScriptEvent) {} + /** + * Called when a note has been hit. + * This gets dispatched for both the player and opponent strumlines. + */ public function onNoteHit(event:HitNoteScriptEvent) {} + /** + * Called when a note has been missed. + * This gets dispatched for both the player and opponent strumlines. + */ public function onNoteMiss(event:NoteScriptEvent) {} + /** + * Called when the player presses a key without any notes present. + */ public function onNoteGhostMiss(event:GhostMissNoteScriptEvent) {} + /** + * Called when a step is hit in the song. + */ public function onStepHit(event:SongTimeScriptEvent) {} + /** + * Called when a beat is hit in the song. + */ public function onBeatHit(event:SongTimeScriptEvent) {} + /** + * Called when a song event is triggered. + */ public function onSongEvent(event:SongEventScriptEvent) {} + /** + * Called when the countdown begins. + */ public function onCountdownStart(event:CountdownScriptEvent) {} + /** + * Called for every step in the countdown. + */ public function onCountdownStep(event:CountdownScriptEvent) {} + /** + * Called when the countdown ends, but BEFORE the song starts. + */ public function onCountdownEnd(event:CountdownScriptEvent) {} + /** + * Called when the song's chart has been parsed and loaded. + */ public function onSongLoaded(event:SongLoadScriptEvent) {} + /** + * Called when the game is about to switch to a new state. + */ public function onStateChangeBegin(event:StateChangeScriptEvent) {} + /** + * Called after the game has switched to a new state. + */ public function onStateChangeEnd(event:StateChangeScriptEvent) {} + /** + * Called when the game regains focus. + * This does not get called if "Auto Pause" is disabled. + */ public function onFocusGained(event:FocusScriptEvent) {} + /** + * Called when the game loses focus. + * This does not get called if "Auto Pause" is disabled. + */ public function onFocusLost(event:FocusScriptEvent) {} + /** + * Called when the game is about to open a substate. + */ public function onSubStateOpenBegin(event:SubStateScriptEvent) {} + /** + * Called when a substate has been opened. + */ public function onSubStateOpenEnd(event:SubStateScriptEvent) {} + /** + * Called when the game is about to close a substate. + */ public function onSubStateCloseBegin(event:SubStateScriptEvent) {} + /** + * Called when a substate has been closed. + */ public function onSubStateCloseEnd(event:SubStateScriptEvent) {} + /** + * Called when the song has been restarted. + */ public function onSongRetry(event:SongRetryEvent) {} } From 34bb58015d035acb137fa1e1a8fe3aab2e5ab0b3 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sat, 12 Apr 2025 22:33:34 -0600 Subject: [PATCH 18/56] Add Combo Milestones to Rejected Features list --- docs/CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 0f1985fab..805a90853 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -74,6 +74,7 @@ Here's a list of commonly suggested features and the reasons why they won't be a | Toggleable Ghost Tapping | https://github.com/FunkinCrew/Funkin/pull/2564#issuecomment-2119701802 | | Perfectly Centered Strumlines | _same as above^_ | | MultiKey, 9k, More than 4 keys, etc. | https://github.com/FunkinCrew/Funkin/issues/4243#issuecomment-2692371969 | +| Flashy Combo Milestones | https://github.com/FunkinCrew/Funkin/pull/4700#issuecomment-2798916579 | | Losing Icons for DD and Parents | https://github.com/FunkinCrew/Funkin/issues/3048#issuecomment-2243491536 | | Playable GF / Speaker BF / Speaker Pico | https://github.com/FunkinCrew/Funkin/issues/2953#issuecomment-2216985230 | | Fresh (Chill Mix) as Title Screen Music | https://github.com/FunkinCrew/Funkin/pull/4282#issuecomment-2709334718 | @@ -412,4 +413,4 @@ If your PR is accepted, you will be credited as a GitHub contributor (but not as # Closing Thank you for reading the Contributing Guide. -We look forward to seeing your contributions to the game! \ No newline at end of file +We look forward to seeing your contributions to the game! From 926d8c0517d8c370ea39dd5d55f4b821b9ef2903 Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:01:28 -0500 Subject: [PATCH 19/56] Contributor's Guide Maintenance Policy Co-authored-by: Hundrec Co-authored-by: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> --- docs/CONTRIBUTING.md | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 805a90853..bccc5894a 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -74,7 +74,7 @@ Here's a list of commonly suggested features and the reasons why they won't be a | Toggleable Ghost Tapping | https://github.com/FunkinCrew/Funkin/pull/2564#issuecomment-2119701802 | | Perfectly Centered Strumlines | _same as above^_ | | MultiKey, 9k, More than 4 keys, etc. | https://github.com/FunkinCrew/Funkin/issues/4243#issuecomment-2692371969 | -| Flashy Combo Milestones | https://github.com/FunkinCrew/Funkin/pull/4700#issuecomment-2798916579 | +| Flashy Combo Milestones | https://github.com/FunkinCrew/Funkin/pull/4700#issuecomment-2798916579 | | Losing Icons for DD and Parents | https://github.com/FunkinCrew/Funkin/issues/3048#issuecomment-2243491536 | | Playable GF / Speaker BF / Speaker Pico | https://github.com/FunkinCrew/Funkin/issues/2953#issuecomment-2216985230 | | Fresh (Chill Mix) as Title Screen Music | https://github.com/FunkinCrew/Funkin/pull/4282#issuecomment-2709334718 | @@ -155,11 +155,23 @@ Choose the `develop` branch if you modify: Choosing the right base branch helps keep your commit history clean and avoid merge conflicts. Once you’re satisfied with the changes you’ve made, open a PR and base it on the same branch you previously chose. -## Merge conflicts and rebasing +## Maintaining your pull request +Keeping your pull request clean and easy to review increases the chance that it will be accepted! + +Our maintenance policy is as follows: +- If we require changes to your PR, we will label your PR `status: needs revision`. +- We may also leave a comment under your PR specifying what changes you should make. +- If you receive a comment, you have 90 days to implement the requested changes. +- After this period, your PR will be closed due to inactivity and labeled `status: stale`. +- Even after your PR is closed, you may request for us to reopen it. Just be sure to address the issues! + +This policy ensures that PRs awaiting review are up to date and ready to merge. + +### Merge conflicts and rebasing Some game updates introduce significant breaking changes that may create merge conflicts in your PR. To resolve them, you will need to update or rebase your PR. Most merge conflicts are small and will only require you to modify a few files to resolve them. -However, some changes are so big that your commit history will look like a mess! +However, some changes are so big that your commit history will be a total mess! In this case, you will have to perform a [**rebase**](https://docs.github.com/en/get-started/using-git/about-git-rebase). This process reapplies your changes on top of the updated branch and cleanly resolves the merge conflicts. From c5e5ab16dff95e88bced8ee42cf8de852cdd781f Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 25 Apr 2025 17:49:26 -0400 Subject: [PATCH 20/56] Recommend Funkin's fork of hmm (fewer issues with Lime) --- docs/COMPILING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/COMPILING.md b/docs/COMPILING.md index c18c5e5e7..cbf1db51b 100644 --- a/docs/COMPILING.md +++ b/docs/COMPILING.md @@ -11,7 +11,7 @@ 3. Run `cd funkin` to enter the cloned repository's directory. 4. Run `git submodule update --init --recursive` to download the game's assets. - NOTE: By performing this operation, you are downloading Content which is proprietary and protected by national and international copyright and trademark laws. See [the LICENSE.md file for the Funkin.assets](https://github.com/FunkinCrew/funkin.assets/blob/main/LICENSE.md) repo for more information. -5. Run `haxelib --global install hmm` and then `haxelib --global run hmm setup` to install hmm.json +5. Run `haxelib --global git hmm https://github.com/FunkinCrew/hmm.git` and then `haxelib --global run hmm setup` to install hmm.json 6. Run `hmm install` to install all haxelibs of the current branch 7. Run `haxelib run lime setup` to set up Lime 8. Perform additional platform setup From 0c674ac23bde6400fe7deef9515d99129e3d7dd3 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Mon, 21 Apr 2025 20:55:57 -0600 Subject: [PATCH 21/56] Specify "flip horizontally" shortcut in Changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13cc8626a..68e751f16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,7 +58,7 @@ The Pit Stop 2 update! - Added on-screen descriptions for each item in the Preferences menu. ([a17b0e8](https://github.com/FunkinCrew/Funkin/commit/a17b0e8b3cc1d56fcdc0b51eaca9fd57cdb5bce0)) - by @anysad in [#3872](https://github.com/FunkinCrew/Funkin/pull/3872) - Added precise scrolling in the Chart Editor using Ctrl-Mouse Wheel. ([0d8e4a5](https://github.com/FunkinCrew/Funkin/commit/0d8e4a53305d6d069454812766300122f3581e31)) - by @ninjamuffin99 in [#3806](https://github.com/FunkinCrew/Funkin/pull/3806) - Added a “None” option to the character selector in the Chart Editor. ([d9637d3](https://github.com/FunkinCrew/Funkin/commit/d9637d3a19466b9fc68a102676c46a74ef504909)) - by @Lasercar in [#4279](https://github.com/FunkinCrew/Funkin/pull/4279) -- Added the ability to flip the character in the Animation Editor. ([de02137](https://github.com/FunkinCrew/Funkin/commit/de02137d7c7d1779e85aeda34743f506a5b9cc27)) - by @AbnormalPoof in [#3028](https://github.com/FunkinCrew/Funkin/pull/3028) +- Added the ability to flip the character horizontally in the Animation Editor by pressing G. ([de02137](https://github.com/FunkinCrew/Funkin/commit/de02137d7c7d1779e85aeda34743f506a5b9cc27)) - by @AbnormalPoof in [#3028](https://github.com/FunkinCrew/Funkin/pull/3028) - Added offsets support for album titles. ([69d8570](https://github.com/FunkinCrew/Funkin/commit/69d8570a9eb06011ed6dd95fcbef83d90f7f8684)) - by @AbnormalPoof in [#3618](https://github.com/FunkinCrew/Funkin/pull/3618) - Added three new properties to stage data: `angle`, `scroll`, and `alpha`. ([ff56b19](https://github.com/FunkinCrew/Funkin/commit/ff56b1948aef42bbb6bb4ede4f9b2012d49ab044)) - by @AbnormalPoof in [#3720](https://github.com/FunkinCrew/Funkin/pull/3720) - Added script events for losing/gaining focus. ([4b127b6](https://github.com/FunkinCrew/Funkin/commit/4b127b64130f6f753d0574ec66a1672322e4bd13)) - by @AbnormalPoof in [#3721](https://github.com/FunkinCrew/Funkin/pull/3721) From 4555b6736e6fbfabfde396b9c91cbfcec26b7365 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 25 Apr 2025 21:40:52 -0400 Subject: [PATCH 22/56] Rewrote recommendation to use Funkin haxelib and hmm --- docs/COMPILING.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/COMPILING.md b/docs/COMPILING.md index cbf1db51b..249327842 100644 --- a/docs/COMPILING.md +++ b/docs/COMPILING.md @@ -11,10 +11,11 @@ 3. Run `cd funkin` to enter the cloned repository's directory. 4. Run `git submodule update --init --recursive` to download the game's assets. - NOTE: By performing this operation, you are downloading Content which is proprietary and protected by national and international copyright and trademark laws. See [the LICENSE.md file for the Funkin.assets](https://github.com/FunkinCrew/funkin.assets/blob/main/LICENSE.md) repo for more information. -5. Run `haxelib --global git hmm https://github.com/FunkinCrew/hmm.git` and then `haxelib --global run hmm setup` to install hmm.json +5. Run `haxelib --global install hmm` and then `haxelib --global run hmm setup` to install hmm.json 6. Run `hmm install` to install all haxelibs of the current branch -7. Run `haxelib run lime setup` to set up Lime -8. Perform additional platform setup + - If you have issues installing Lime, try utilizing Funkin's patched libraries for hmm and haxelib: `haxelib --global git haxelib https://github.com/FunkinCrew/haxelib.git` and `haxelib --global git hmm https://github.com/FunkinCrew/hmm.git` +8. Run `haxelib run lime setup` to set up Lime +9. Perform additional platform setup - For Windows, download the [Visual Studio Build Tools](https://aka.ms/vs/17/release/vs_BuildTools.exe) - When prompted, select "Individual Components" and make sure to download the following: - MSVC v143 VS 2022 C++ x64/x86 build tools @@ -24,8 +25,8 @@ - One of Funkin's dependencies uses libVLC, which requires you to install some development packages to be able to compile. Command for Ubuntu/Debian based systems: `sudo apt install libvlc-dev libvlccore-dev libvlccore9` - HTML5: Compiles without any extra setup -9. If you are targeting for native, you may need to run `lime rebuild ` and `lime rebuild -debug` -10. `lime test ` to build and launch the game for your platform (for example, `lime test windows`) +10. If you are targeting for native, you may need to run `lime rebuild ` and `lime rebuild -debug` +11. `lime test ` to build and launch the game for your platform (for example, `lime test windows`) ## Build Flags From 6c2ebff680fa5a2404b171f09c71325f953b2546 Mon Sep 17 00:00:00 2001 From: Til <89487150+TechnikTil@users.noreply.github.com> Date: Fri, 25 Apr 2025 22:48:37 -0600 Subject: [PATCH 23/56] bump to 0.6.3 (#4448) Co-authored-by: Eric --- .github/ISSUE_TEMPLATE/bug.yml | 2 +- .github/ISSUE_TEMPLATE/charting.yml | 2 +- .github/ISSUE_TEMPLATE/compiling.yml | 2 +- .github/ISSUE_TEMPLATE/crash.yml | 2 +- docs/CONTRIBUTING.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index ddc6261b5..387d8b128 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -45,7 +45,7 @@ body: attributes: label: Version description: Which version are you playing on? The game version is in the bottom left corner of the main menu. - placeholder: ex. 0.6.2 + placeholder: ex. 0.6.3 validations: required: true diff --git a/.github/ISSUE_TEMPLATE/charting.yml b/.github/ISSUE_TEMPLATE/charting.yml index 810a3778d..61bfd25c4 100644 --- a/.github/ISSUE_TEMPLATE/charting.yml +++ b/.github/ISSUE_TEMPLATE/charting.yml @@ -46,7 +46,7 @@ body: attributes: label: Version description: Which version are you playing on? The game version is in the bottom left corner of the main menu. - placeholder: ex. 0.6.2 + placeholder: ex. 0.6.3 validations: required: true diff --git a/.github/ISSUE_TEMPLATE/compiling.yml b/.github/ISSUE_TEMPLATE/compiling.yml index a3370e3c5..8215ddd7b 100644 --- a/.github/ISSUE_TEMPLATE/compiling.yml +++ b/.github/ISSUE_TEMPLATE/compiling.yml @@ -34,7 +34,7 @@ body: attributes: label: Version description: Which version are you compiling? The game version is in the bottom left corner of the main menu or in the project.hxp file. - placeholder: ex. 0.6.2 + placeholder: ex. 0.6.3 validations: required: true diff --git a/.github/ISSUE_TEMPLATE/crash.yml b/.github/ISSUE_TEMPLATE/crash.yml index 04fea1d13..459ed92a3 100644 --- a/.github/ISSUE_TEMPLATE/crash.yml +++ b/.github/ISSUE_TEMPLATE/crash.yml @@ -46,7 +46,7 @@ body: attributes: label: Version description: Which version are you playing on? The game version is in the bottom left corner of the main menu. - placeholder: ex. 0.6.2 + placeholder: ex. 0.6.3 validations: required: true diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index bccc5894a..234d44cf5 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -60,7 +60,7 @@ This section provides guidelines to follow when [opening an issue](https://githu ## Requirements Make sure you're playing: -- the latest version of the game (currently v0.6.2) +- the latest version of the game (currently v0.6.3) - without any mods - on [Newgrounds](https://www.newgrounds.com/portal/view/770371) or downloaded from [itch.io](https://ninja-muffin24.itch.io/funkin) From db3e012cb0dae07a3cecf18b0c06ac68460369d0 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sat, 26 Apr 2025 03:18:01 -0600 Subject: [PATCH 24/56] [DOCS] Changelog for 0.6.3 (#4816) * Changelog for 0.6.3 * Clarify mod API version entry * 0.6.3 Changelog tweaks --- CHANGELOG.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fa4977ae..c86ea0cce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,75 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +## [0.6.3] - 2025-04-25 + +### Added + +- New option in the Preferences menu: VSync! + - Set it to Off, On, or Adaptive + - Adaptive turns VSync off during FPS drops, which is better if supported by your graphics card. + - Doesn't work on Mac, sorry! +- Otis now has muzzle flashes when shooting. +- Added a little easter egg to one of Pico's Results Screen animations. +- Overhauled the sticker system to allow modders to easily add custom sticker sets. ([f44e9db](https://github.com/FunkinCrew/Funkin/commit/f44e9db9c5153c1d5cb5d228c41555208988a00f)) - by @AbnormalPoof in [#4003](https://github.com/FunkinCrew/Funkin/pull/4003) +- Implemented a macro to optimize registries and entries. ([b862467](https://github.com/FunkinCrew/Funkin/commit/b862467756b03902ab22036a41f8803ffcf519fb)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) +- The macro is now used to retrieve base game assets. ([160559a](https://github.com/FunkinCrew/Funkin/commit/160559a0bac75c4da3be75492757c321b9d02432)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) +- The Chart Editor now displays the current beat and step of the playhead. ([d4eee38](https://github.com/FunkinCrew/Funkin/commit/d4eee38fd2c8f1ca59dbdd801957eb0b067e5542)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) + +### Changed + +- The mod API version is now 0.6.3. + - Be sure to update the version in your mods' metadata, then ensure they are still working! +- Eric's scoring rebalance update! + - Misses (not ghost misses) are now worth -100 points, up from -10. + - Misses now reduce your final clear percentage, which impacts your rank. + - Hold note trails now grant 20% less health. + - Dropping a hold note early now plays the miss animation and deducts health and score. +- Made a LOT of charting changes! + - Many missing, extra, and mistimed notes have been corrected. + - Stacked notes that were preventing full combos have been removed. + - Camera events have been adjusted to stay within the boundaries of the stage. + - Some songs have been recharted. +- The Freeplay menu can now always switch between variations. + - The nearest song with an Erect variation will be selected when switching. +- Switching difficulties now always plays the capsule jump-in animation. +- The "Random" capsule now plays animations consistent with other capsules. +- Swapped the positions of “skip” and “restart” items in the dialogue pause menu for consistency. ([da9f17c](https://github.com/FunkinCrew/Funkin/commit/da9f17cf8776c9293c51b55d0e78e8eafebfadf1)) - by @VioletSnowLeopard in [#4553](https://github.com/FunkinCrew/Funkin/pull/4553) +- The Controls menu now prevents unbinding essential UI controls to safeguard against softlocking save files. ([0c538bf](https://github.com/FunkinCrew/Funkin/commit/0c538bfffba174cf532d439ea9f27a2278adb387)) - by @VioletSnowLeopard in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) +- Renamed “Auto Pause” preference to “Pause on Unfocus” for clarity. ([49a21c1](https://github.com/FunkinCrew/Funkin/commit/49a21c198236fbecbe5902bb106f78939cc6442a)) - by @JackXson-Real in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) +- Overhauled `FileUtil`, introducing various fixes, new functions, and sandboxing. ([95ade2a](https://github.com/FunkinCrew/Funkin/commit/95ade2a08b7709e8208ec1b3e123bf5b4308ba10)) - by @cyn0x8 in [#3032](https://github.com/FunkinCrew/Funkin/pull/3032) + +### Fixed + +- Story mode medals are now awarded even without scoring a new personal best. +- Highscores are now submitted to Newgrounds even without scoring a new personal best. +- Fixed Freeplay DJ animations for Boyfriend and Pico when idling (properly this time). +- Alternate instrumentals for Cocoa, Senpai, Roses, and Stress are now locked until their Pico Mix is beaten. +- Restarting Stress or Stress (Pico Mix) no longer spawns too many Tankmen in the background. +- Pico's game over animation now displays properly on Ugh (Pico Mix) and Guns (Pico Mix). +- Tankman's death lines now play for Boyfriend in Ugh, Guns, and Ugh Erect. +- A-Bot's visualizer is now blank before the song starts. +- Adding custom parameters to note kinds no longer crashes the Chart Editor. +- Debug editor tooltips no longer display behind windows. +- Improved performance in the Freeplay menu before entering a song. ([1bac60b](https://github.com/FunkinCrew/Funkin/commit/1bac60b877cebec40d1d7e234f11528a2285bb65)) - by @superpowers04 in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) +- Prevented a crash by capping Freeplay and Results screen score displays at their largest possible values (actual scores are not capped). ([b954d1c](https://github.com/FunkinCrew/Funkin/commit/b954d1c03474a77ddaae3ef070c83ac69c5dacec)) - by @KoloInDaCrib in [#3634](https://github.com/FunkinCrew/Funkin/pull/3634) +- The Animation Editor no longer crashes when opened. ([6500b80](https://github.com/FunkinCrew/Funkin/commit/6500b80a7a78935c44da57a6b55b4829f6adaa26)) - by @sector-a in [#4582](https://github.com/FunkinCrew/Funkin/pull/4582) +- Disabled navigation in the Options menu while the Clear Save Data prompt is open. ([6c123b9](https://github.com/FunkinCrew/Funkin/commit/6c123b959e94190ba6a0e61d953a9e6a54762351)) - by @KoloInDaCrib in [#4703](https://github.com/FunkinCrew/Funkin/pull/4703) +- Save data is no longer wiped after failing to load the current save. ([48310d7](https://github.com/FunkinCrew/Funkin/commit/48310d72ca583110a8aa67ea3492b8216a9d760c)) - by @KoloInDaCrib in [#4574](https://github.com/FunkinCrew/Funkin/pull/4574) +- Selecting a different type of event in the Chart Editor no longer crashes or resets the event to its default values. ([71ed154](https://github.com/FunkinCrew/Funkin/commit/71ed154b81abbd002d78c09c2dada8a2ad3fa73e)) - by @KoloInDaCrib in [#3913](https://github.com/FunkinCrew/Funkin/pull/3913) +- Deleting a stacked event in the Chart Editor now properly removes the deleted event’s sprite. ([51605a7](https://github.com/FunkinCrew/Funkin/commit/51605a7bfc6cf75379e9ceeb673045afc8646773)) - by @NotHyper-474 in [#4724](https://github.com/FunkinCrew/Funkin/pull/4724) +- Patched a security vulnerability. ([291e2f3](https://github.com/FunkinCrew/Funkin/commit/291e2f31bf8c7fab14fa5471666bc3c3be3976af)) - by @nebulazorua in [#4740](https://github.com/FunkinCrew/Funkin/pull/4740) +- Added null safety to a bunch of classes. +- Even more tiny bug fixes. + +## New Contributors for 0.6.3 + +* @JackXson-Real made their first contribution in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) +* @VioletSnowLeopard made their first contribution in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) +* @superpowers04 made their first contribution in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) + + + ## [0.6.2] - 2025-03-31 ### Added @@ -397,7 +466,7 @@ The Playable Pico Update! - Botplay mode now handles the player's animations properly during hold notes. ([thanks Hundrec!](https://github.com/FunkinCrew/Funkin/pull/2683)) - Camera movement now pauses when the game is paused. ([thanks Matriculaso!](https://github.com/FunkinCrew/Funkin/pull/2684)) - Pico's gameplay sprite no longer appears on the gameover screen when dying from an explosion in 2hot. -- Freeplay previews now properly fade in volume during the BF idle animation. +- Freeplay previews now properly fade in volume during the DJ's idle animation. - DadBattle no longer incorrectly appears as DadBattle Erect when returning to Freeplay on Hard. - 2hot now appears under the "#" category in Freeplay menu. - The Chart Editor no longer crashes when selecting an event with the Event toolbox open. From 0839c165350fc66580cb6eab321d012198183d6c Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sun, 27 Apr 2025 06:04:15 -0600 Subject: [PATCH 25/56] More 0.6.3 entries + updated commit links --- CHANGELOG.md | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c86ea0cce..cf901f109 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,18 +16,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Doesn't work on Mac, sorry! - Otis now has muzzle flashes when shooting. - Added a little easter egg to one of Pico's Results Screen animations. -- Overhauled the sticker system to allow modders to easily add custom sticker sets. ([f44e9db](https://github.com/FunkinCrew/Funkin/commit/f44e9db9c5153c1d5cb5d228c41555208988a00f)) - by @AbnormalPoof in [#4003](https://github.com/FunkinCrew/Funkin/pull/4003) -- Implemented a macro to optimize registries and entries. ([b862467](https://github.com/FunkinCrew/Funkin/commit/b862467756b03902ab22036a41f8803ffcf519fb)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) -- The macro is now used to retrieve base game assets. ([160559a](https://github.com/FunkinCrew/Funkin/commit/160559a0bac75c4da3be75492757c321b9d02432)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) -- The Chart Editor now displays the current beat and step of the playhead. ([d4eee38](https://github.com/FunkinCrew/Funkin/commit/d4eee38fd2c8f1ca59dbdd801957eb0b067e5542)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) +- Overhauled the sticker system to allow modders to easily add custom sticker sets. ([cdc468b](https://github.com/FunkinCrew/Funkin/commit/cdc468ba15683b3c0f54015e337673c77ddd7962)) - by @AbnormalPoof in [#4003](https://github.com/FunkinCrew/Funkin/pull/4003) +- Implemented a macro to optimize registries and entries. ([1497521](https://github.com/FunkinCrew/Funkin/commit/14975212a918adb1a5d96a349ec9e8e63c9fc64b)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) +- The macro is now used to retrieve base game assets. ([963e2ec](https://github.com/FunkinCrew/Funkin/commit/963e2ecd630fae24dae4206d315618cf4c4be6db)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) +- The Chart Editor now displays the current beat and step of the playhead. ([83bb3bb](https://github.com/FunkinCrew/Funkin/commit/83bb3bb5074ecb5f50ee21979711efcda9d8017d)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) ### Changed -- The mod API version is now 0.6.3. +- The mod API version is now 0.6.3. - Be sure to update the version in your mods' metadata, then ensure they are still working! - Eric's scoring rebalance update! - Misses (not ghost misses) are now worth -100 points, up from -10. - - Misses now reduce your final clear percentage, which impacts your rank. - Hold note trails now grant 20% less health. - Dropping a hold note early now plays the miss animation and deducts health and score. - Made a LOT of charting changes! @@ -39,31 +38,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The nearest song with an Erect variation will be selected when switching. - Switching difficulties now always plays the capsule jump-in animation. - The "Random" capsule now plays animations consistent with other capsules. -- Swapped the positions of “skip” and “restart” items in the dialogue pause menu for consistency. ([da9f17c](https://github.com/FunkinCrew/Funkin/commit/da9f17cf8776c9293c51b55d0e78e8eafebfadf1)) - by @VioletSnowLeopard in [#4553](https://github.com/FunkinCrew/Funkin/pull/4553) -- The Controls menu now prevents unbinding essential UI controls to safeguard against softlocking save files. ([0c538bf](https://github.com/FunkinCrew/Funkin/commit/0c538bfffba174cf532d439ea9f27a2278adb387)) - by @VioletSnowLeopard in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) -- Renamed “Auto Pause” preference to “Pause on Unfocus” for clarity. ([49a21c1](https://github.com/FunkinCrew/Funkin/commit/49a21c198236fbecbe5902bb106f78939cc6442a)) - by @JackXson-Real in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) +- Swapped the positions of “skip” and “restart” items in the dialogue pause menu for consistency. ([1f88a3b](https://github.com/FunkinCrew/Funkin/commit/1f88a3b6e13e9283ad680805deab5e27ba141d96)) - by @VioletSnowLeopard in [#4553](https://github.com/FunkinCrew/Funkin/pull/4553) +- The Controls menu now prevents unbinding essential UI controls to safeguard against softlocking save files. ([7eebce4](https://github.com/FunkinCrew/Funkin/commit/7eebce432d7627a1cf0bbd43f22a6f9bcb63ff65)) - by @VioletSnowLeopard in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) +- Renamed “Auto Pause” preference to “Pause on Unfocus” for clarity. ([52be941](https://github.com/FunkinCrew/Funkin/commit/52be941b4503da0ac76918e2482ab1804866f2cf)) - by @JackXson-Real in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) - Overhauled `FileUtil`, introducing various fixes, new functions, and sandboxing. ([95ade2a](https://github.com/FunkinCrew/Funkin/commit/95ade2a08b7709e8208ec1b3e123bf5b4308ba10)) - by @cyn0x8 in [#3032](https://github.com/FunkinCrew/Funkin/pull/3032) ### Fixed - Story mode medals are now awarded even without scoring a new personal best. - Highscores are now submitted to Newgrounds even without scoring a new personal best. +- The game no longer crashes when reaching the main menu before authenticating with Newgrounds. +- The Freeplay menu no longer displays songs without Erect variations when returning from an Erect variation song. - Fixed Freeplay DJ animations for Boyfriend and Pico when idling (properly this time). - Alternate instrumentals for Cocoa, Senpai, Roses, and Stress are now locked until their Pico Mix is beaten. +- The Roses Pico alternate instrumental is now offset to align with the original song's voices. +- Entering Stress or Stress (Pico Mix) a second time no longer crashes the game. - Restarting Stress or Stress (Pico Mix) no longer spawns too many Tankmen in the background. - Pico's game over animation now displays properly on Ugh (Pico Mix) and Guns (Pico Mix). -- Tankman's death lines now play for Boyfriend in Ugh, Guns, and Ugh Erect. +- Tankman's death lines now play for Boyfriend in Ugh, Guns, and Ugh Erect. +- Week 6 dialogue no longer plays for all non-default variations when entered through Freeplay. +- Nene (Pixel) now plays her knife raising animation when the player has low health. - A-Bot's visualizer is now blank before the song starts. - Adding custom parameters to note kinds no longer crashes the Chart Editor. - Debug editor tooltips no longer display behind windows. -- Improved performance in the Freeplay menu before entering a song. ([1bac60b](https://github.com/FunkinCrew/Funkin/commit/1bac60b877cebec40d1d7e234f11528a2285bb65)) - by @superpowers04 in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) -- Prevented a crash by capping Freeplay and Results screen score displays at their largest possible values (actual scores are not capped). ([b954d1c](https://github.com/FunkinCrew/Funkin/commit/b954d1c03474a77ddaae3ef070c83ac69c5dacec)) - by @KoloInDaCrib in [#3634](https://github.com/FunkinCrew/Funkin/pull/3634) -- The Animation Editor no longer crashes when opened. ([6500b80](https://github.com/FunkinCrew/Funkin/commit/6500b80a7a78935c44da57a6b55b4829f6adaa26)) - by @sector-a in [#4582](https://github.com/FunkinCrew/Funkin/pull/4582) -- Disabled navigation in the Options menu while the Clear Save Data prompt is open. ([6c123b9](https://github.com/FunkinCrew/Funkin/commit/6c123b959e94190ba6a0e61d953a9e6a54762351)) - by @KoloInDaCrib in [#4703](https://github.com/FunkinCrew/Funkin/pull/4703) -- Save data is no longer wiped after failing to load the current save. ([48310d7](https://github.com/FunkinCrew/Funkin/commit/48310d72ca583110a8aa67ea3492b8216a9d760c)) - by @KoloInDaCrib in [#4574](https://github.com/FunkinCrew/Funkin/pull/4574) +- Clearing save data no longer crashes the game. +- Improved performance in the Freeplay menu before entering a song. ([2b7254f](https://github.com/FunkinCrew/Funkin/commit/2b7254fbd2356e9da91e216f178a88f17874a6eb)) - by @superpowers04 in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) +- Prevented a crash by capping Freeplay and Results screen score displays at their largest possible values (actual scores are not capped). ([51324e9](https://github.com/FunkinCrew/Funkin/commit/51324e9c283c43ca861d3369ba9b3e1db9c89765)) - by @KoloInDaCrib in [#3634](https://github.com/FunkinCrew/Funkin/pull/3634) +- The Animation Editor no longer crashes when opened. ([b40b4b0](https://github.com/FunkinCrew/Funkin/commit/b40b4b03692910afceff361cf6ca3298fd787e3c)) - by @sector-a in [#4582](https://github.com/FunkinCrew/Funkin/pull/4582) +- Disabled navigation in the Options menu while the Clear Save Data prompt is open. ([855deb5](https://github.com/FunkinCrew/Funkin/commit/855deb58280e850c0ad1581807c70f05d6b6a2cb)) - by @KoloInDaCrib in [#4703](https://github.com/FunkinCrew/Funkin/pull/4703) +- Save data is no longer wiped after failing to load the current save. ([068c9fb](https://github.com/FunkinCrew/Funkin/commit/068c9fb43d49ff6ea13e5a73f77a42207954be2c)) - by @KoloInDaCrib in [#4574](https://github.com/FunkinCrew/Funkin/pull/4574) - Selecting a different type of event in the Chart Editor no longer crashes or resets the event to its default values. ([71ed154](https://github.com/FunkinCrew/Funkin/commit/71ed154b81abbd002d78c09c2dada8a2ad3fa73e)) - by @KoloInDaCrib in [#3913](https://github.com/FunkinCrew/Funkin/pull/3913) -- Deleting a stacked event in the Chart Editor now properly removes the deleted event’s sprite. ([51605a7](https://github.com/FunkinCrew/Funkin/commit/51605a7bfc6cf75379e9ceeb673045afc8646773)) - by @NotHyper-474 in [#4724](https://github.com/FunkinCrew/Funkin/pull/4724) -- Patched a security vulnerability. ([291e2f3](https://github.com/FunkinCrew/Funkin/commit/291e2f31bf8c7fab14fa5471666bc3c3be3976af)) - by @nebulazorua in [#4740](https://github.com/FunkinCrew/Funkin/pull/4740) +- Deleting a stacked event in the Chart Editor now properly removes the deleted event’s sprite. ([3ad14ba](https://github.com/FunkinCrew/Funkin/commit/3ad14bac32096e45259997ab9957bec5fecf296f)) - by @NotHyper-474 in [#4724](https://github.com/FunkinCrew/Funkin/pull/4724) +- Patched a security vulnerability. ([53dec05](https://github.com/FunkinCrew/Funkin/commit/53dec057bee0a913d60e0c70d45dbb59a58620b0)) - by @nebulazorua in [#4740](https://github.com/FunkinCrew/Funkin/pull/4740) - Added null safety to a bunch of classes. - Even more tiny bug fixes. @@ -127,7 +133,7 @@ The Pit Stop 2 update! - Added an option to launch the game in fullscreen. ([ee53ccd](https://github.com/FunkinCrew/Funkin/commit/ee53ccd32721e0790adfe82c60d4aca419db0a7f)) - by @AbnormalPoof in [#3738](https://github.com/FunkinCrew/Funkin/pull/3738) - Added on-screen descriptions for each item in the Preferences menu. ([a17b0e8](https://github.com/FunkinCrew/Funkin/commit/a17b0e8b3cc1d56fcdc0b51eaca9fd57cdb5bce0)) - by @anysad in [#3872](https://github.com/FunkinCrew/Funkin/pull/3872) - Added precise scrolling in the Chart Editor using Ctrl-Mouse Wheel. ([0d8e4a5](https://github.com/FunkinCrew/Funkin/commit/0d8e4a53305d6d069454812766300122f3581e31)) - by @ninjamuffin99 in [#3806](https://github.com/FunkinCrew/Funkin/pull/3806) -- Added a “None” option to the character selector in the Chart Editor. ([d9637d3](https://github.com/FunkinCrew/Funkin/commit/d9637d3a19466b9fc68a102676c46a74ef504909)) - by @Lasercar in [#4279](https://github.com/FunkinCrew/Funkin/pull/4279) +- Added a “None” option to the character selector in the Chart Editor. ([9c2ef02](https://github.com/FunkinCrew/Funkin/commit/9c2ef0236818883ad1275571dac49eab70ca0ea0)) - by @Lasercar in [#4279](https://github.com/FunkinCrew/Funkin/pull/4279) - Added the ability to flip the character in the Animation Editor. ([de02137](https://github.com/FunkinCrew/Funkin/commit/de02137d7c7d1779e85aeda34743f506a5b9cc27)) - by @AbnormalPoof in [#3028](https://github.com/FunkinCrew/Funkin/pull/3028) - Added offsets support for album titles. ([69d8570](https://github.com/FunkinCrew/Funkin/commit/69d8570a9eb06011ed6dd95fcbef83d90f7f8684)) - by @AbnormalPoof in [#3618](https://github.com/FunkinCrew/Funkin/pull/3618) - Added three new properties to stage data: `angle`, `scroll`, and `alpha`. ([ff56b19](https://github.com/FunkinCrew/Funkin/commit/ff56b1948aef42bbb6bb4ede4f9b2012d49ab044)) - by @AbnormalPoof in [#3720](https://github.com/FunkinCrew/Funkin/pull/3720) @@ -146,7 +152,7 @@ The Pit Stop 2 update! - For example, the Zoom Camera event can now be set to 0.9857. - Lots of improvements to GitHub issue and pull request organization. - by @Hundrec and @AbnormalPoof - Overhauled the Changelog to improve readability and properly credit contributors. ([4383fcf](https://github.com/FunkinCrew/Funkin/commit/4383fcf32c280a1c0ee7b9c80d255611d497cabc)) - by @Hundrec in [#4296](https://github.com/FunkinCrew/Funkin/pull/4296) and [#4298](https://github.com/FunkinCrew/Funkin/pull/4298) -- Made various improvements to the screenshot function. ([9ce7bbc](https://github.com/FunkinCrew/Funkin/commit/9ce7bbcfbb8f30ae120c876194f89bc4c787f585)) - by @Lasercar in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) +- Made various improvements to the screenshot plugin. ([868932c](https://github.com/FunkinCrew/Funkin/commit/868932cd138fad4be5b541cbea3110e30479057b)) - by @Lasercar in [#4082](https://github.com/FunkinCrew/Funkin/pull/4082) - Accept keybinds (Z and Space by default) can now be used to exit the Results screen. ([edb270d](https://github.com/FunkinCrew/Funkin/commit/edb270d15e41784dccbf75639ac731840e80fe23)) - by @JVNpixels in [#3799](https://github.com/FunkinCrew/Funkin/pull/3799) - Reordered UI keybinds in the controls menu for consistency. ([a01bcc3](https://github.com/FunkinCrew/Funkin/commit/a01bcc3da836ec52851ca9de13ef459daf61269a)) - by @lemz1 in [#3027](https://github.com/FunkinCrew/Funkin/pull/3027) - New save files now have default Freeplay controls for gamepads. ([2b7f62e](https://github.com/FunkinCrew/Funkin/commit/2b7f62edd33de5527e259d9e5643f926d35da734)) - by @MrMadera in [#3934](https://github.com/FunkinCrew/Funkin/pull/3934) @@ -167,16 +173,16 @@ The Pit Stop 2 update! - Reduced stuttering when resyncing instrumental and voices tracks. ([22d41d2](https://github.com/FunkinCrew/Funkin/commit/22d41d21b88acb7422a0afcda8414682710bd2ed)) - by @TechnikTil in [#3955](https://github.com/FunkinCrew/Funkin/pull/3955) - Songs with only instrumental tracks no longer stutter. ([dfe02ec](https://github.com/FunkinCrew/Funkin/commit/dfe02ec668b61d6308f459c978d12a7487f9dc28)) - by @KoloInDaCrib in [#3861](https://github.com/FunkinCrew/Funkin/pull/3861) - The debug mouse cursor no longer flickers before the Title Screen loads. ([1c12b84](https://github.com/FunkinCrew/Funkin/commit/1c12b8467eca350eb28138473360d5358fa620e2)) - by @sphis-Sinco in [#3881](https://github.com/FunkinCrew/Funkin/pull/3881) -- Unbound keys now display as [N/A] instead of crashing the game. ([94e5d3c](https://github.com/FunkinCrew/Funkin/commit/94e5d3ca258cbaa5d9ab6f0cb26feda83b3433a2)) - by @NotHyper-474 in [#4355](https://github.com/FunkinCrew/Funkin/pull/4355) +- Unbound keys now display as [N/A] instead of crashing the game. ([099c309](https://github.com/FunkinCrew/Funkin/commit/099c309f9babdc1ea99b7dbed3fdccf1e952fc8e)) - by @NotHyper-474 in [#4355](https://github.com/FunkinCrew/Funkin/pull/4355) - Songs can no longer be spam-selected after selecting an instrumental in Freeplay. ([0e0c4ae](https://github.com/FunkinCrew/Funkin/commit/0e0c4aeb7745cfb9479685ccbb635cf3743cddbb)) - by @AbnormalPoof in [#3866](https://github.com/FunkinCrew/Funkin/pull/3866) -- The Random capsule can now switch to Erect/Nightmare difficulties in Freeplay. ([6f32747](https://github.com/FunkinCrew/Funkin/commit/6f327474f30374f50774f432ea3ccb6d02579445)) - by @KoloInDaCrib in [#3838](https://github.com/FunkinCrew/Funkin/pull/3838) +- The Random capsule can now switch to Erect/Nightmare difficulties in Freeplay. ([a90b911](https://github.com/FunkinCrew/Funkin/commit/a90b911653a1beaba57d64b1f05b840109fec42b)) - by @KoloInDaCrib in [#3838](https://github.com/FunkinCrew/Funkin/pull/3838) - Fixed a rare bug where a song would not register as beaten. ([a3e2373](https://github.com/FunkinCrew/Funkin/commit/a3e23733db104b1ef00cfcff17db3a5d032a4d67)) - by @AbnormalPoof in [#3820](https://github.com/FunkinCrew/Funkin/pull/3820) - The difficulty graphic on the Results screen no longer cuts off incorrectly. ([b13bf05](https://github.com/FunkinCrew/Funkin/commit/b13bf05d16ff2977309e0c7ba3f049c0134e8902)) - by @AbnormalPoof in [#4161](https://github.com/FunkinCrew/Funkin/pull/4161) -- Four-digit long Total Notes values in the Results screen no longer overflow to the right. ([2be4c0c](https://github.com/FunkinCrew/Funkin/commit/2be4c0c7196e018a43f9697f015179f3efc3fcdb)) - by @Hundrec in [#4356](https://github.com/FunkinCrew/Funkin/pull/4356) +- Four-digit long Total Notes values in the Results screen no longer overflow to the right. ([91a594c](https://github.com/FunkinCrew/Funkin/commit/91a594cc858ed086cd2146a1ac5d2379c6fdd27a)) - by @Hundrec in [#4356](https://github.com/FunkinCrew/Funkin/pull/4356) - The Character Select screen no longer plays the unlock animation for some locked characters. ([7058126](https://github.com/FunkinCrew/Funkin/commit/7058126e99adb55e43f5f487b007d3efa9f324d5)) - by @AbnormalPoof in [#3748](https://github.com/FunkinCrew/Funkin/pull/3748) - All time signatures in the Chart Editor now display the correct number of beat/step tick lines. ([e570dfb](https://github.com/FunkinCrew/Funkin/commit/e570dfb8e754f9cb29ac2d8fff6e8513bc68b630)) - by @Keoiki in [#2860](https://github.com/FunkinCrew/Funkin/pull/2860) - The Debug menu now opens with the correct camera position. ([090ddd1](https://github.com/FunkinCrew/Funkin/commit/090ddd1f1c2aa48fdb83127b2235041643c99af5)) - by @ninjamuffin99 in [#3769](https://github.com/FunkinCrew/Funkin/pull/3769) -- Removed some Freeplay variables left over from legacy versions. ([6f6529f](https://github.com/FunkinCrew/Funkin/commit/6f6529f3c460721755dfdd0a7a26578c0de429d2)) - by @AbnormalPoof in [#4370](https://github.com/FunkinCrew/Funkin/pull/4370) +- Removed an unused Freeplay class left over from legacy versions. ([abe4ac8](https://github.com/FunkinCrew/Funkin/commit/abe4ac8485539cbebe527a9a75698950232b68d2)) - by @AbnormalPoof in [#4370](https://github.com/FunkinCrew/Funkin/pull/4370) - Blacklisted an additional class for security. ([3492d41](https://github.com/FunkinCrew/Funkin/commit/3492d412c65c7f3fd61e6fc6c9410d8467122ab0)) - by @AbnormalPoof in [#4074](https://github.com/FunkinCrew/Funkin/pull/4074) - Removed an unused class from Polymod blacklist. ([06c12e3](https://github.com/FunkinCrew/Funkin/commit/06c12e36c6bd6df4e2be32a3bec540172e79e162)) - by @AbnormalPoof in [#3729](https://github.com/FunkinCrew/Funkin/pull/3729) - Many additional small bug fixes. From 924b1cf386d55773b30ede9b730dbfd9cafdfedf Mon Sep 17 00:00:00 2001 From: Hundrec Date: Sun, 27 Apr 2025 20:43:09 -0600 Subject: [PATCH 26/56] Remove Newgrounds authentication entry because it wasn't actually fixed --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf901f109..635d5c516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Story mode medals are now awarded even without scoring a new personal best. - Highscores are now submitted to Newgrounds even without scoring a new personal best. -- The game no longer crashes when reaching the main menu before authenticating with Newgrounds. - The Freeplay menu no longer displays songs without Erect variations when returning from an Erect variation song. - Fixed Freeplay DJ animations for Boyfriend and Pico when idling (properly this time). - Alternate instrumentals for Cocoa, Senpai, Roses, and Stress are now locked until their Pico Mix is beaten. @@ -56,7 +55,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Restarting Stress or Stress (Pico Mix) no longer spawns too many Tankmen in the background. - Pico's game over animation now displays properly on Ugh (Pico Mix) and Guns (Pico Mix). - Tankman's death lines now play for Boyfriend in Ugh, Guns, and Ugh Erect. -- Week 6 dialogue no longer plays for all non-default variations when entered through Freeplay. +- Week 6 dialogue no longer plays for all non-default variations when entered through Freeplay. - Nene (Pixel) now plays her knife raising animation when the player has low health. - A-Bot's visualizer is now blank before the song starts. - Adding custom parameters to note kinds no longer crashes the Chart Editor. From a7da71c8a87baa440a0bc6e23d7e9b36c7574e14 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Mon, 28 Apr 2025 14:38:52 -0600 Subject: [PATCH 27/56] Remove Changelog from game files since it keeps getting revised after each release Co-Authored-By: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> --- project.hxp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/project.hxp b/project.hxp index 43666b3b5..8e0efb57c 100644 --- a/project.hxp +++ b/project.hxp @@ -773,13 +773,12 @@ class Project extends HXProject { addAssetLibrary("weekend1", shouldEmbed, shouldPreload); addAssetPath("assets/weekend1", "assets/weekend1", "weekend1", ["*"], exclude, shouldEmbed); - // Art asset library (where README and CHANGELOG pull from) + // Art asset library (where README pulls from) var shouldEmbedArt = false; var shouldPreloadArt = false; addAssetLibrary("art", shouldEmbedArt, shouldPreloadArt); addAsset("art/readme.txt", "do NOT readme.txt", "art", shouldEmbedArt); addAsset("LICENSE.md", "LICENSE.md", "art", shouldEmbedArt); - addAsset("CHANGELOG.md", "CHANGELOG.md", "art", shouldEmbedArt); } /** From 66197b34f65853fa77c85071df13c857cf723e99 Mon Sep 17 00:00:00 2001 From: ShadzXD <136199318+ShadzXD@users.noreply.github.com> Date: Mon, 28 Apr 2025 22:40:26 +0200 Subject: [PATCH 28/56] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 635d5c516..dc6fcc68b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implemented a macro to optimize registries and entries. ([1497521](https://github.com/FunkinCrew/Funkin/commit/14975212a918adb1a5d96a349ec9e8e63c9fc64b)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) - The macro is now used to retrieve base game assets. ([963e2ec](https://github.com/FunkinCrew/Funkin/commit/963e2ecd630fae24dae4206d315618cf4c4be6db)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) - The Chart Editor now displays the current beat and step of the playhead. ([83bb3bb](https://github.com/FunkinCrew/Funkin/commit/83bb3bb5074ecb5f50ee21979711efcda9d8017d)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) +- The Erect Eggnog cutscene can now be Skipped. ([0303a03](https://github.com/FunkinCrew/funkin.assets/commit/1202651db8ea938fe11b6b734fbf7884d101e6ad)) - by @ShadzXD in [#62](https://github.com/FunkinCrew/funkin.assets/pull/62) ### Changed @@ -77,7 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * @JackXson-Real made their first contribution in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) * @VioletSnowLeopard made their first contribution in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) * @superpowers04 made their first contribution in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) - +* @ShadzXD made their first contribution in [#62](https://github.com/FunkinCrew/Funkin/pull/4729) ## [0.6.2] - 2025-03-31 From db0ac4819276e074ff97d43b7924a74cf7e69f70 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Mon, 28 Apr 2025 14:47:42 -0600 Subject: [PATCH 29/56] Tiny polish for Eggnog cutscene Changelog entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc6fcc68b..d37e3cae2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implemented a macro to optimize registries and entries. ([1497521](https://github.com/FunkinCrew/Funkin/commit/14975212a918adb1a5d96a349ec9e8e63c9fc64b)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) - The macro is now used to retrieve base game assets. ([963e2ec](https://github.com/FunkinCrew/Funkin/commit/963e2ecd630fae24dae4206d315618cf4c4be6db)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) - The Chart Editor now displays the current beat and step of the playhead. ([83bb3bb](https://github.com/FunkinCrew/Funkin/commit/83bb3bb5074ecb5f50ee21979711efcda9d8017d)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) -- The Erect Eggnog cutscene can now be Skipped. ([0303a03](https://github.com/FunkinCrew/funkin.assets/commit/1202651db8ea938fe11b6b734fbf7884d101e6ad)) - by @ShadzXD in [#62](https://github.com/FunkinCrew/funkin.assets/pull/62) +- The Eggnog Erect cutscene can now be skipped. ([0303a03](https://github.com/FunkinCrew/funkin.assets/commit/1202651db8ea938fe11b6b734fbf7884d101e6ad)) - by @ShadzXD in [#62](https://github.com/FunkinCrew/funkin.assets/pull/62) ### Changed @@ -81,6 +81,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * @ShadzXD made their first contribution in [#62](https://github.com/FunkinCrew/Funkin/pull/4729) + ## [0.6.2] - 2025-03-31 ### Added From 7f5b4974c32c8f8203bee62360994b500520f4cf Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:30:39 -0300 Subject: [PATCH 30/56] Update CHANGELOG.md Remove left-over from merge conflict. --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14c3d7f5b..b9dc44aa4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,10 +83,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -||||||| 68e9daff -- Additional shader fix for Stress Pico crashing at the end (was the same issue as Senpai Pico shader error, just in a different shaderfile) -======= ->>>>>>> public/develop - Additional shader fix for Stress (Pico Mix) crashing at the end (was the same issue as Senpai Pico shader error, just in a different shaderfile) From ef6b2148721df4720705070a2454e021be19939e Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Sat, 26 Apr 2025 23:19:36 +1000 Subject: [PATCH 31/56] Save vsync mode as string but get as vsync mode --- source/funkin/Preferences.hx | 30 ++++++++++++++++++++++++++++-- source/funkin/save/Save.hx | 6 +++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/source/funkin/Preferences.hx b/source/funkin/Preferences.hx index 6c079315f..ce5aba6d2 100644 --- a/source/funkin/Preferences.hx +++ b/source/funkin/Preferences.hx @@ -185,15 +185,41 @@ class Preferences static function get_vsyncMode():lime.ui.WindowVSyncMode { - return Save?.instance?.options?.vsyncMode ?? lime.ui.WindowVSyncMode.OFF; + var value = Save?.instance?.options?.vsyncMode ?? "Off"; + + return switch (value) + { + case "Off": + lime.ui.WindowVSyncMode.OFF; + case "On": + lime.ui.WindowVSyncMode.ON; + case "Adaptive": + lime.ui.WindowVSyncMode.ADAPTIVE; + default: + lime.ui.WindowVSyncMode.OFF; + }; } static function set_vsyncMode(value:lime.ui.WindowVSyncMode):lime.ui.WindowVSyncMode { + var string; + + switch (value) + { + case lime.ui.WindowVSyncMode.OFF: + string = "Off"; + case lime.ui.WindowVSyncMode.ON: + string = "On"; + case lime.ui.WindowVSyncMode.ADAPTIVE: + string = "Adaptive"; + default: + string = "Off"; + }; + WindowUtil.setVSyncMode(value); var save:Save = Save.instance; - save.options.vsyncMode = value; + save.options.vsyncMode = string; save.flush(); return value; } diff --git a/source/funkin/save/Save.hx b/source/funkin/save/Save.hx index 16572bb85..1ef2810df 100644 --- a/source/funkin/save/Save.hx +++ b/source/funkin/save/Save.hx @@ -115,7 +115,7 @@ class Save zoomCamera: true, debugDisplay: false, autoPause: true, - vsyncMode: lime.ui.WindowVSyncMode.OFF, + vsyncMode: 'Off', strumlineBackgroundOpacity: 0, autoFullscreen: false, inputOffset: 0, @@ -1401,9 +1401,9 @@ typedef SaveDataOptions = /** * If enabled, the game will utilize VSync (or adaptive VSync) on startup. - * @default `OFF` + * @default `Off` */ - var vsyncMode:lime.ui.WindowVSyncMode; + var vsyncMode:String; /** * If >0, the game will display a semi-opaque background under the notes. From 3a1b573ea324cad6358ffe89e2ec4c05f3eb2828 Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Sat, 26 Apr 2025 23:59:53 +1000 Subject: [PATCH 32/56] Fix save being loaded twice for no reason --- source/Main.hx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 8ffbe724f..e11413942 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -62,14 +62,6 @@ class Main extends Sprite function init(?event:Event):Void { - #if web - // set this variable (which is a function) from the lime version at lime/_internal/backend/html5/HTML5Application.hx - // The framerate cap will more thoroughly initialize via Preferences in InitState.hx - funkin.Preferences.lockedFramerateFunction = untyped js.Syntax.code("window.requestAnimationFrame"); - #end - - WindowUtil.setVSyncMode(funkin.Preferences.vsyncMode); - if (hasEventListener(Event.ADDED_TO_STAGE)) { removeEventListener(Event.ADDED_TO_STAGE, init); @@ -107,6 +99,17 @@ class Main extends Sprite // George recommends binding the save before FlxGame is created. Save.load(); + + // Don't call anything from the preferences until the save is loaded! + #if web + // set this variable (which is a function) from the lime version at lime/_internal/backend/html5/HTML5Application.hx + // The framerate cap will more thoroughly initialize via Preferences in InitState.hx + funkin.Preferences.lockedFramerateFunction = untyped js.Syntax.code("window.requestAnimationFrame"); + #end + + WindowUtil.setVSyncMode(funkin.Preferences.vsyncMode); + + var game:FlxGame = new FlxGame(gameWidth, gameHeight, initialState, Preferences.framerate, Preferences.framerate, skipSplash, startFullscreen); // FlxG.game._customSoundTray wants just the class, it calls new from From 51605e50f852b27aededeae511e3d966b6e20b43 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Tue, 29 Apr 2025 01:31:19 -0600 Subject: [PATCH 33/56] Credit Lasercar for a crash fix from assets PR --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d37e3cae2..6827ee77e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implemented a macro to optimize registries and entries. ([1497521](https://github.com/FunkinCrew/Funkin/commit/14975212a918adb1a5d96a349ec9e8e63c9fc64b)) - by @lemz1 in [#3694](https://github.com/FunkinCrew/Funkin/pull/3694) - The macro is now used to retrieve base game assets. ([963e2ec](https://github.com/FunkinCrew/Funkin/commit/963e2ecd630fae24dae4206d315618cf4c4be6db)) - by @lemz1 in [#4707](https://github.com/FunkinCrew/Funkin/pull/4707) - The Chart Editor now displays the current beat and step of the playhead. ([83bb3bb](https://github.com/FunkinCrew/Funkin/commit/83bb3bb5074ecb5f50ee21979711efcda9d8017d)) - by @NotHyper-474 in [#4649](https://github.com/FunkinCrew/Funkin/pull/4649) -- The Eggnog Erect cutscene can now be skipped. ([0303a03](https://github.com/FunkinCrew/funkin.assets/commit/1202651db8ea938fe11b6b734fbf7884d101e6ad)) - by @ShadzXD in [#62](https://github.com/FunkinCrew/funkin.assets/pull/62) ### Changed @@ -39,6 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The nearest song with an Erect variation will be selected when switching. - Switching difficulties now always plays the capsule jump-in animation. - The "Random" capsule now plays animations consistent with other capsules. +- The Eggnog Erect cutscene can now be skipped. ([0303a03](https://github.com/FunkinCrew/funkin.assets/commit/1202651db8ea938fe11b6b734fbf7884d101e6ad)) - by @ShadzXD in [#62](https://github.com/FunkinCrew/funkin.assets/pull/62) - Swapped the positions of “skip” and “restart” items in the dialogue pause menu for consistency. ([1f88a3b](https://github.com/FunkinCrew/Funkin/commit/1f88a3b6e13e9283ad680805deab5e27ba141d96)) - by @VioletSnowLeopard in [#4553](https://github.com/FunkinCrew/Funkin/pull/4553) - The Controls menu now prevents unbinding essential UI controls to safeguard against softlocking save files. ([7eebce4](https://github.com/FunkinCrew/Funkin/commit/7eebce432d7627a1cf0bbd43f22a6f9bcb63ff65)) - by @VioletSnowLeopard in [#4382](https://github.com/FunkinCrew/Funkin/pull/4382) - Renamed “Auto Pause” preference to “Pause on Unfocus” for clarity. ([52be941](https://github.com/FunkinCrew/Funkin/commit/52be941b4503da0ac76918e2482ab1804866f2cf)) - by @JackXson-Real in [#4346](https://github.com/FunkinCrew/Funkin/pull/4346) @@ -59,9 +59,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Week 6 dialogue no longer plays for all non-default variations when entered through Freeplay. - Nene (Pixel) now plays her knife raising animation when the player has low health. - A-Bot's visualizer is now blank before the song starts. -- Adding custom parameters to note kinds no longer crashes the Chart Editor. - Debug editor tooltips no longer display behind windows. - Clearing save data no longer crashes the game. +- Adding custom parameters to note kinds no longer crashes the Chart Editor. ([0a7bd31](https://github.com/FunkinCrew/Funkin/commit/0a7bd3111f59efbecfe097f8bbcfdefa5ace299d)) - by @Lasercar in [#136](https://github.com/FunkinCrew/funkin.assets/pull/136) - Improved performance in the Freeplay menu before entering a song. ([2b7254f](https://github.com/FunkinCrew/Funkin/commit/2b7254fbd2356e9da91e216f178a88f17874a6eb)) - by @superpowers04 in [#4729](https://github.com/FunkinCrew/Funkin/pull/4729) - Prevented a crash by capping Freeplay and Results screen score displays at their largest possible values (actual scores are not capped). ([51324e9](https://github.com/FunkinCrew/Funkin/commit/51324e9c283c43ca861d3369ba9b3e1db9c89765)) - by @KoloInDaCrib in [#3634](https://github.com/FunkinCrew/Funkin/pull/3634) - The Animation Editor no longer crashes when opened. ([b40b4b0](https://github.com/FunkinCrew/Funkin/commit/b40b4b03692910afceff361cf6ca3298fd787e3c)) - by @sector-a in [#4582](https://github.com/FunkinCrew/Funkin/pull/4582) From a15bd369431ab52d8f3dd8e763940a09b87a86c1 Mon Sep 17 00:00:00 2001 From: Lasercar Date: Sun, 23 Feb 2025 19:18:24 +1000 Subject: [PATCH 34/56] Freeplay UI fixes Input is disabled as soon as possible when a capsule is open Input re-enables after capsule errors instrument selector uses the capsule's target position as it's position, rather than the capsule's position --- source/funkin/ui/freeplay/FreeplayState.hx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 5c5c9e0c3..2564c61c1 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -1873,11 +1873,15 @@ class FreeplayState extends MusicBeatSubState */ function capsuleOnOpenDefault(cap:SongMenuItem):Void { + busy = true; + letterSort.inputEnabled = false; var targetSongId:String = cap?.freeplayData?.data.id ?? 'unknown'; var targetSongNullable:Null = SongRegistry.instance.fetchEntry(targetSongId); if (targetSongNullable == null) { FlxG.log.warn('WARN: could not find song with id (${targetSongId})'); + busy = false; + letterSort.inputEnabled = true; return; } var targetSong:Song = targetSongNullable; @@ -1891,6 +1895,8 @@ class FreeplayState extends MusicBeatSubState if (targetDifficulty == null) { FlxG.log.warn('WARN: could not find difficulty with id (${targetDifficultyId})'); + busy = false; + letterSort.inputEnabled = true; return; } @@ -1920,9 +1926,7 @@ class FreeplayState extends MusicBeatSubState function openInstrumentalList(cap:SongMenuItem, instrumentalIds:Array):Void { - busy = true; - - capsuleOptionsMenu = new CapsuleOptionsMenu(this, cap.x + 175, cap.y + 115, instrumentalIds); + capsuleOptionsMenu = new CapsuleOptionsMenu(this, cap.targetPos.x + 175, cap.targetPos.y + 115, instrumentalIds); capsuleOptionsMenu.cameras = [funnyCam]; capsuleOptionsMenu.zIndex = 10000; add(capsuleOptionsMenu); @@ -1937,6 +1941,7 @@ class FreeplayState extends MusicBeatSubState public function cleanupCapsuleOptionsMenu():Void { this.busy = false; + letterSort.inputEnabled = true; if (capsuleOptionsMenu != null) { @@ -1950,9 +1955,6 @@ class FreeplayState extends MusicBeatSubState */ function capsuleOnConfirmDefault(cap:SongMenuItem, ?targetInstId:String):Void { - busy = true; - letterSort.inputEnabled = false; - PlayStatePlaylist.isStoryMode = false; var targetSongId:String = cap?.freeplayData?.data.id ?? 'unknown'; @@ -1960,6 +1962,8 @@ class FreeplayState extends MusicBeatSubState if (targetSongNullable == null) { FlxG.log.warn('WARN: could not find song with id (${targetSongId})'); + busy = false; + letterSort.inputEnabled = true; return; } var targetSong:Song = targetSongNullable; @@ -1971,6 +1975,8 @@ class FreeplayState extends MusicBeatSubState if (targetDifficulty == null) { FlxG.log.warn('WARN: could not find difficulty with id (${currentDifficulty})'); + busy = false; + letterSort.inputEnabled = true; return; } From e1ca3c69f0d3682154f6f1e1c395130a4a1e745b Mon Sep 17 00:00:00 2001 From: Lasercar Date: Mon, 24 Feb 2025 22:25:10 +1000 Subject: [PATCH 35/56] Fixed letter sort animation --- source/funkin/ui/freeplay/LetterSort.hx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/funkin/ui/freeplay/LetterSort.hx b/source/funkin/ui/freeplay/LetterSort.hx index 0530feb7f..54d65cb9f 100644 --- a/source/funkin/ui/freeplay/LetterSort.hx +++ b/source/funkin/ui/freeplay/LetterSort.hx @@ -204,6 +204,9 @@ class FreeplayLetter extends FlxAtlasSprite this.anim.play(animLetters[letterInd] + " move"); this.anim.pause(); curLetter = letterInd; + this.anim.onComplete.add(function() { + this.anim.play(animLetters[curLetter] + " move"); + }); } } @@ -231,7 +234,7 @@ class FreeplayLetter extends FlxAtlasSprite animName = "T move"; } - this.anim.play(animName); + this.anim.play(animName, true); if (curSelection != curLetter) { this.anim.pause(); From fc09350be7b7aed867cbdfbf42806e03f8ec001b Mon Sep 17 00:00:00 2001 From: Lasercar Date: Mon, 24 Feb 2025 23:25:30 +1000 Subject: [PATCH 36/56] This should fix the squashed capsule text, right? --- source/funkin/ui/freeplay/CapsuleText.hx | 2 ++ source/funkin/ui/freeplay/FreeplayState.hx | 14 +++++++----- source/funkin/ui/freeplay/SongMenuItem.hx | 26 ++++++++++++++++++---- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/source/funkin/ui/freeplay/CapsuleText.hx b/source/funkin/ui/freeplay/CapsuleText.hx index aae72544e..1c96dbc1e 100644 --- a/source/funkin/ui/freeplay/CapsuleText.hx +++ b/source/funkin/ui/freeplay/CapsuleText.hx @@ -168,6 +168,8 @@ class CapsuleText extends FlxSpriteGroup public function resetText():Void { + scale.x = 1; + scale.y = 1; if (moveTween != null) moveTween.cancel(); if (moveTimer != null) moveTimer.cancel(); whiteText.offset.x = 0; diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 2564c61c1..25001d841 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -734,7 +734,7 @@ class FreeplayState extends MusicBeatSubState // Initialize the random capsule, with empty/blank info (which we display once bf/pico does his hand) var randomCapsule:SongMenuItem = grpCapsules.recycle(SongMenuItem); randomCapsule.initPosition(FlxG.width, 0); - randomCapsule.initData(null, styleData); + randomCapsule.initData(null, styleData, 0); randomCapsule.y = randomCapsule.intendedY(0) + 10; randomCapsule.targetPos.x = randomCapsule.x; randomCapsule.alpha = 0; @@ -765,7 +765,7 @@ class FreeplayState extends MusicBeatSubState var funnyMenu:SongMenuItem = grpCapsules.recycle(SongMenuItem); funnyMenu.initPosition(FlxG.width, 0); - funnyMenu.initData(tempSong, styleData); + funnyMenu.initData(tempSong, styleData, i + 1); funnyMenu.onConfirm = function() { capsuleOnOpenDefault(funnyMenu); }; @@ -777,9 +777,11 @@ class FreeplayState extends MusicBeatSubState funnyMenu.newText.animation.curAnim.curFrame = 45 - ((i * 4) % 45); // This stops the bounce-in animation. - funnyMenu.forcePosition(); - - // funnyMenu.initJumpIn(0, force); + // I would like to use to use the jump in now that it looks better, + // but I still can't because switching from harder to normal difficulties causes the x positions to mess up + /*if (fromCharSelect)*/ funnyMenu.forcePosition(); + /*else + funnyMenu.initJumpIn(0, force); */ grpCapsules.add(funnyMenu); } @@ -2087,7 +2089,7 @@ class FreeplayState extends MusicBeatSubState capsule.selected = index == curSelected + 1; capsule.targetPos.y = capsule.intendedY(index - curSelected); - capsule.targetPos.x = 270 + (60 * (Math.sin(index - curSelected))); + capsule.targetPos.x = capsule.intendedX(index - curSelected); if (index < curSelected) capsule.targetPos.y -= 100; // another 100 for good measure } diff --git a/source/funkin/ui/freeplay/SongMenuItem.hx b/source/funkin/ui/freeplay/SongMenuItem.hx index 627ca69d8..152b4005c 100644 --- a/source/funkin/ui/freeplay/SongMenuItem.hx +++ b/source/funkin/ui/freeplay/SongMenuItem.hx @@ -74,6 +74,8 @@ class SongMenuItem extends FlxSpriteGroup var sparkleTimer:FlxTimer; + var index:Int; + public function new(x:Float, y:Float) { super(x, y); @@ -489,7 +491,7 @@ class SongMenuItem extends FlxSpriteGroup spr.visible = value; } - if (value) textAppear(); + textAppear(); updateSelected(); } @@ -500,10 +502,12 @@ class SongMenuItem extends FlxSpriteGroup this.y = y; } - public function initData(freeplayData:Null, ?styleData:FreeplayStyle = null):Void + public function initData(freeplayData:Null, ?styleData:FreeplayStyle = null, index:Int = null):Void { this.freeplayData = freeplayData; + if (index != null) this.index = index; + // im so mad i have to do this but im pretty sure with the capsules recycling i cant call the new function properly :/ // if thats possible someone Please change the new function to be something like // capsule.frames = Paths.getSparrowAtlas(styleData == null ? 'freeplay/freeplayCapsule/capsule/freeplayCapsule' : styleData.getCapsuleAssetKey()); thank u luv u @@ -605,13 +609,18 @@ class SongMenuItem extends FlxSpriteGroup capsule.scale.x = xFrames[frameInTypeBeat]; capsule.scale.y = 1 / xFrames[frameInTypeBeat]; - x = FlxG.width * xPosLerpLol[Std.int(Math.min(frameInTypeBeat, xPosLerpLol.length - 1))]; + targetPos.x = FlxG.width * xPosLerpLol[Std.int(Math.min(frameInTypeBeat, xPosLerpLol.length - 1))]; capsule.scale.x *= realScaled; capsule.scale.y *= realScaled; frameInTypeBeat += 1; } + else if (frameInTypeBeat == xFrames.length) + { + doJumpIn = false; + targetPos.x = intendedX(index); + } } if (doJumpOut) @@ -624,13 +633,17 @@ class SongMenuItem extends FlxSpriteGroup capsule.scale.x = xFrames[frameOutTypeBeat]; capsule.scale.y = 1 / xFrames[frameOutTypeBeat]; - x = FlxG.width * xPosOutLerpLol[Std.int(Math.min(frameOutTypeBeat, xPosOutLerpLol.length - 1))]; + this.x = FlxG.width * xPosOutLerpLol[Std.int(Math.min(frameOutTypeBeat, xPosOutLerpLol.length - 1))]; capsule.scale.x *= realScaled; capsule.scale.y *= realScaled; frameOutTypeBeat += 1; } + else if (frameOutTypeBeat == xFrames.length) + { + doJumpOut = false; + } } if (doLerp) @@ -654,6 +667,11 @@ class SongMenuItem extends FlxSpriteGroup } } + public function intendedX(index:Int):Float + { + return 270 + (60 * (Math.sin(index))); + } + public function intendedY(index:Int):Float { return (index * ((height * realScaled) + 10)) + 120; From 29b541af38317711f4847ad64d56e7fc33016eba Mon Sep 17 00:00:00 2001 From: Lasercar Date: Wed, 26 Feb 2025 00:39:03 +1000 Subject: [PATCH 37/56] First rank overrides itself fix --- source/funkin/ui/freeplay/FreeplayState.hx | 4 ++-- source/funkin/ui/freeplay/SongMenuItem.hx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 25001d841..fa62a3e08 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -1769,7 +1769,7 @@ class FreeplayState extends MusicBeatSubState intendedScore = songScore?.score ?? 0; intendedCompletion = songScore == null ? 0.0 : ((songScore.tallies.sick + songScore.tallies.good) / songScore.tallies.totalNotes); rememberedDifficulty = currentDifficulty; - grpCapsules.members[curSelected].refreshDisplay(); + grpCapsules.members[curSelected].refreshDisplay((prepForNewRank == true) ? false : true); } else { @@ -2072,7 +2072,7 @@ class FreeplayState extends MusicBeatSubState intendedCompletion = songScore == null ? 0.0 : ((songScore.tallies.sick + songScore.tallies.good) / songScore.tallies.totalNotes); rememberedSongId = daSongCapsule.freeplayData.data.id; changeDiff(); - daSongCapsule.refreshDisplay(); + daSongCapsule.refreshDisplay((prepForNewRank == true) ? false : true); } else { diff --git a/source/funkin/ui/freeplay/SongMenuItem.hx b/source/funkin/ui/freeplay/SongMenuItem.hx index 152b4005c..13089fe66 100644 --- a/source/funkin/ui/freeplay/SongMenuItem.hx +++ b/source/funkin/ui/freeplay/SongMenuItem.hx @@ -392,7 +392,7 @@ class SongMenuItem extends FlxSpriteGroup return evilTrail.color; } - public function refreshDisplay():Void + public function refreshDisplay(updateRank:Bool = true):Void { if (freeplayData == null) { @@ -410,7 +410,7 @@ class SongMenuItem extends FlxSpriteGroup pixelIcon.visible = true; updateBPM(Std.int(freeplayData.songStartingBpm) ?? 0); updateDifficultyRating(freeplayData.difficultyRating ?? 0); - updateScoringRank(freeplayData.scoringRank); + if (updateRank) updateScoringRank(freeplayData.scoringRank); newText.visible = freeplayData.isNew; favIcon.visible = freeplayData.isFav; favIconBlurred.visible = freeplayData.isFav; From 4978c89ac3d6bdd1bdb3db362648d8644c0794dd Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:02:57 +1000 Subject: [PATCH 38/56] capsule options menu null reference fix --- source/funkin/ui/freeplay/CapsuleOptionsMenu.hx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/funkin/ui/freeplay/CapsuleOptionsMenu.hx b/source/funkin/ui/freeplay/CapsuleOptionsMenu.hx index 8d6b3605c..0987c4651 100644 --- a/source/funkin/ui/freeplay/CapsuleOptionsMenu.hx +++ b/source/funkin/ui/freeplay/CapsuleOptionsMenu.hx @@ -24,6 +24,10 @@ class CapsuleOptionsMenu extends FlxSpriteGroup var busy:Bool = false; + var leftArrow:InstrumentalSelector; + + var rightArrow:InstrumentalSelector; + public function new(parent:FreeplayState, x:Float = 0, y:Float = 0, instIds:Array):Void { super(x, y); @@ -41,8 +45,8 @@ class CapsuleOptionsMenu extends FlxSpriteGroup currentInstrumental.setFormat('VCR OSD Mono', 40, FlxTextAlign.CENTER, true); final PAD = 4; - var leftArrow = new InstrumentalSelector(parent, PAD, 30, false, parent.getControls()); - var rightArrow = new InstrumentalSelector(parent, capsuleMenuBG.width - leftArrow.width - PAD, 30, true, parent.getControls()); + leftArrow = new InstrumentalSelector(parent, PAD, 30, false, parent.getControls()); + rightArrow = new InstrumentalSelector(parent, capsuleMenuBG.width - leftArrow.width - PAD, 30, true, parent.getControls()); var label:FlxText = new FlxText(0, 5, capsuleMenuBG.width, 'INSTRUMENTAL'); label.setFormat('VCR OSD Mono', 24, FlxTextAlign.CENTER, true); @@ -109,6 +113,8 @@ class CapsuleOptionsMenu extends FlxSpriteGroup { // Play in reverse. capsuleMenuBG.animation.play('open', true, true); + if (leftArrow.moveShitDownTimer != null) leftArrow.moveShitDownTimer.cancel(); + if (rightArrow.moveShitDownTimer != null) rightArrow.moveShitDownTimer.cancel(); capsuleMenuBG.animation.finishCallback = function(_) { parent.cleanupCapsuleOptionsMenu(); queueDestroy = true; @@ -136,6 +142,8 @@ class InstrumentalSelector extends FunkinSprite var baseScale:Float = 0.6; + public var moveShitDownTimer:FlxTimer; + public function new(parent:FreeplayState, x:Float, y:Float, flipped:Bool, controls:Controls) { super(x, y); @@ -174,7 +182,7 @@ class InstrumentalSelector extends FunkinSprite scale.x = scale.y = 0.5 * baseScale; - new FlxTimer().start(2 / 24, function(tmr) { + moveShitDownTimer = new FlxTimer().start(2 / 24, function(tmr) { scale.x = scale.y = 1 * baseScale; whiteShader.colorSet = false; updateHitbox(); From dafbb43532aa1406fa92aface55c70ead93f21c0 Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:25:08 +1000 Subject: [PATCH 39/56] capsule jump in --- source/funkin/ui/freeplay/FreeplayState.hx | 12 ++++++------ source/funkin/ui/freeplay/SongMenuItem.hx | 5 ++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index fa62a3e08..e4a007382 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -776,12 +776,10 @@ class FreeplayState extends MusicBeatSubState funnyMenu.hsvShader = hsvShader; funnyMenu.newText.animation.curAnim.curFrame = 45 - ((i * 4) % 45); - // This stops the bounce-in animation. - // I would like to use to use the jump in now that it looks better, - // but I still can't because switching from harder to normal difficulties causes the x positions to mess up - /*if (fromCharSelect)*/ funnyMenu.forcePosition(); - /*else - funnyMenu.initJumpIn(0, force); */ + // Stops the bounce-in animation when returning to freeplay from the character selection screen. + if (fromCharSelect) funnyMenu.forcePosition(); + else + funnyMenu.initJumpIn(0, force); grpCapsules.add(funnyMenu); } @@ -2088,6 +2086,8 @@ class FreeplayState extends MusicBeatSubState capsule.selected = index == curSelected + 1; + if (index > 1) capsule.curSelected = curSelected; + capsule.targetPos.y = capsule.intendedY(index - curSelected); capsule.targetPos.x = capsule.intendedX(index - curSelected); diff --git a/source/funkin/ui/freeplay/SongMenuItem.hx b/source/funkin/ui/freeplay/SongMenuItem.hx index 13089fe66..fa56d9c33 100644 --- a/source/funkin/ui/freeplay/SongMenuItem.hx +++ b/source/funkin/ui/freeplay/SongMenuItem.hx @@ -75,6 +75,7 @@ class SongMenuItem extends FlxSpriteGroup var sparkleTimer:FlxTimer; var index:Int; + public var curSelected:Int; public function new(x:Float, y:Float) { @@ -615,11 +616,13 @@ class SongMenuItem extends FlxSpriteGroup capsule.scale.y *= realScaled; frameInTypeBeat += 1; + // Move the targetPos set to the if statement below if you want them to shift to their target positions after jumping in instead + // I have no idea why this if instead of frameInTypeBeat == xFrames.length works even though they're the same thing + if (targetPos.x <= 320) targetPos.x = intendedX(index - curSelected); } else if (frameInTypeBeat == xFrames.length) { doJumpIn = false; - targetPos.x = intendedX(index); } } From 2bc1a31427586e1fc2fe2161956c7284cea42a59 Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Mon, 24 Mar 2025 19:24:45 +1000 Subject: [PATCH 40/56] fix capsule jumpin and random capsule starting x position --- source/funkin/ui/freeplay/FreeplayState.hx | 14 +++++++------- source/funkin/ui/freeplay/SongMenuItem.hx | 5 +---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index e4a007382..374c76994 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -638,7 +638,8 @@ class FreeplayState extends MusicBeatSubState allDifficulties = SongRegistry.instance.listAllDifficulties(currentCharacterId); // Generates song list with the starter params (who our current character is, last remembered difficulty, etc.) - generateSongList(null, false); + // Set this to false if you prefer the 50% transparency on the capsules when they first appear. + generateSongList(null, true); // dedicated camera for the state so we don't need to fuk around with camera scrolls from the mainmenu / elsewhere funnyCam.bgColor = FlxColor.TRANSPARENT; @@ -734,10 +735,10 @@ class FreeplayState extends MusicBeatSubState // Initialize the random capsule, with empty/blank info (which we display once bf/pico does his hand) var randomCapsule:SongMenuItem = grpCapsules.recycle(SongMenuItem); randomCapsule.initPosition(FlxG.width, 0); - randomCapsule.initData(null, styleData, 0); + randomCapsule.initData(null, styleData, 1); randomCapsule.y = randomCapsule.intendedY(0) + 10; randomCapsule.targetPos.x = randomCapsule.x; - randomCapsule.alpha = 0; + randomCapsule.alpha = 0.5; randomCapsule.songText.visible = false; randomCapsule.favIcon.visible = false; randomCapsule.favIconBlurred.visible = false; @@ -749,8 +750,7 @@ class FreeplayState extends MusicBeatSubState if (fromCharSelect) randomCapsule.forcePosition(); else { - // randomCapsule.initJumpIn(0, force); - randomCapsule.forcePosition(); + randomCapsule.initJumpIn(0, force); } var hsvShader:HSVShader = new HSVShader(); @@ -776,7 +776,7 @@ class FreeplayState extends MusicBeatSubState funnyMenu.hsvShader = hsvShader; funnyMenu.newText.animation.curAnim.curFrame = 45 - ((i * 4) % 45); - // Stops the bounce-in animation when returning to freeplay from the character selection screen. + // Stop the bounce-in animation when returning to freeplay from the character selection screen. if (fromCharSelect) funnyMenu.forcePosition(); else funnyMenu.initJumpIn(0, force); @@ -2086,7 +2086,7 @@ class FreeplayState extends MusicBeatSubState capsule.selected = index == curSelected + 1; - if (index > 1) capsule.curSelected = curSelected; + capsule.curSelected = curSelected; capsule.targetPos.y = capsule.intendedY(index - curSelected); capsule.targetPos.x = capsule.intendedX(index - curSelected); diff --git a/source/funkin/ui/freeplay/SongMenuItem.hx b/source/funkin/ui/freeplay/SongMenuItem.hx index fa56d9c33..1a73996ef 100644 --- a/source/funkin/ui/freeplay/SongMenuItem.hx +++ b/source/funkin/ui/freeplay/SongMenuItem.hx @@ -536,7 +536,7 @@ class SongMenuItem extends FlxSpriteGroup var frameOutTypeBeat:Int = 0; var xFrames:Array = [1.7, 1.8, 0.85, 0.85, 0.97, 0.97, 1]; - var xPosLerpLol:Array = [0.9, 0.4, 0.16, 0.16, 0.22, 0.22, 0.245]; // NUMBERS ARE JANK CUZ THE SCALING OR WHATEVER + var xPosLerpLol:Array = [0, 0, 0.16, 0.16, 0.22, 0.22, 0.245]; // NUMBERS ARE JANK CUZ THE SCALING OR WHATEVER var xPosOutLerpLol:Array = [0.245, 0.75, 0.98, 0.98, 1.2]; // NUMBERS ARE JANK CUZ THE SCALING OR WHATEVER public var realScaled:Float = 0.8; @@ -547,9 +547,6 @@ class SongMenuItem extends FlxSpriteGroup new FlxTimer().start((1 / 24) * maxTimer, function(doShit) { doJumpIn = true; - }); - - new FlxTimer().start((0.09 * maxTimer) + 0.85, function(lerpTmr) { doLerp = true; }); From 5fdbd23a17b8eaf21582283400be2c6444e8b198 Mon Sep 17 00:00:00 2001 From: Lasercar <64717068+Lasercar@users.noreply.github.com> Date: Sun, 27 Apr 2025 02:29:55 +1000 Subject: [PATCH 41/56] Misses now actually make you miss your grade Sustain notes no longer add to the miss tally --- source/funkin/play/PlayState.hx | 4 +++- source/funkin/play/ResultState.hx | 3 ++- source/funkin/play/components/ClearPercentCounter.hx | 2 +- source/funkin/play/scoring/Scoring.hx | 2 +- source/funkin/ui/freeplay/FreeplayState.hx | 3 ++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index e4b7d7ad3..f7ed112c4 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -2425,7 +2425,7 @@ class PlayState extends MusicBeatSubState dispatchEvent(event); trace('Penalizing score by ${event.score} and health by ${event.healthChange} for dropping hold note (is combo break: ${event.isComboBreak})!'); - applyScore(event.score, 'miss', event.healthChange, event.isComboBreak); + applyScore(event.score, '', event.healthChange, event.isComboBreak); // Play the miss sound. vocals.playerVolume = 0; @@ -2765,6 +2765,8 @@ class PlayState extends MusicBeatSubState Highscore.tallies.shit += 1; case 'miss': Highscore.tallies.missed += 1; + default: + // Nothing! } health += healthChange; if (isComboBreak) diff --git a/source/funkin/play/ResultState.hx b/source/funkin/play/ResultState.hx index e29bbddee..7e5655300 100644 --- a/source/funkin/play/ResultState.hx +++ b/source/funkin/play/ResultState.hx @@ -488,7 +488,8 @@ class ResultState extends MusicBeatSubState FlxTween.tween(bgFlash, {alpha: 0}, 5 / 24); // NOTE: Only divide if totalNotes > 0 to prevent divide-by-zero errors. var clearPercentFloat = params.scoreData.tallies.totalNotes == 0 ? 0.0 : (params.scoreData.tallies.sick + - params.scoreData.tallies.good) / params.scoreData.tallies.totalNotes * 100; + params.scoreData.tallies.good + - params.scoreData.tallies.missed) / params.scoreData.tallies.totalNotes * 100; clearPercentTarget = Math.floor(clearPercentFloat); // Prevent off-by-one errors. diff --git a/source/funkin/play/components/ClearPercentCounter.hx b/source/funkin/play/components/ClearPercentCounter.hx index 67c633a99..2e3a01a0b 100644 --- a/source/funkin/play/components/ClearPercentCounter.hx +++ b/source/funkin/play/components/ClearPercentCounter.hx @@ -65,7 +65,7 @@ class ClearPercentCounter extends FlxTypedSpriteGroup var seperatedScore:Array = []; var tempCombo:Int = Math.round(curNumber); - while (tempCombo != 0) + while (tempCombo > 0 && tempCombo != 0) { seperatedScore.push(tempCombo % 10); tempCombo = Math.floor(tempCombo / 10); diff --git a/source/funkin/play/scoring/Scoring.hx b/source/funkin/play/scoring/Scoring.hx index cbb947ab6..f0c4ebd4a 100644 --- a/source/funkin/play/scoring/Scoring.hx +++ b/source/funkin/play/scoring/Scoring.hx @@ -384,7 +384,7 @@ class Scoring // Final Grade = (Sick + Good - Miss) / (Total Notes) - var grade = (scoreData.tallies.sick + scoreData.tallies.good) / scoreData.tallies.totalNotes; + var grade = (scoreData.tallies.sick + scoreData.tallies.good - scoreData.tallies.missed) / scoreData.tallies.totalNotes; if (grade == Constants.RANK_PERFECT_THRESHOLD) { diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 5c5c9e0c3..274e6ef6c 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -2061,7 +2061,8 @@ class FreeplayState extends MusicBeatSubState { var songScore:Null = Save.instance.getSongScore(daSongCapsule.freeplayData.data.id, currentDifficulty, currentVariation); intendedScore = songScore?.score ?? 0; - intendedCompletion = songScore == null ? 0.0 : ((songScore.tallies.sick + songScore.tallies.good) / songScore.tallies.totalNotes); + intendedCompletion = songScore == null ? 0.0 : ((songScore.tallies.sick + + songScore.tallies.good - songScore.tallies.missed) / songScore.tallies.totalNotes); rememberedSongId = daSongCapsule.freeplayData.data.id; changeDiff(); daSongCapsule.refreshDisplay(); From 31d3718e5c33371cacd495219f9cc3908244bf71 Mon Sep 17 00:00:00 2001 From: Kolo <67389779+JustKolosaki@users.noreply.github.com> Date: Wed, 19 Mar 2025 21:36:24 +0100 Subject: [PATCH 42/56] music file priority thing (updated a misleading comment, lols!) --- source/funkin/audio/FunkinSound.hx | 62 ++++++++++++++++++++++++++++-- source/funkin/play/Countdown.hx | 2 +- source/funkin/play/song/Song.hx | 11 ++++-- 3 files changed, 67 insertions(+), 8 deletions(-) diff --git a/source/funkin/audio/FunkinSound.hx b/source/funkin/audio/FunkinSound.hx index 5628f1547..fb1f8aa11 100644 --- a/source/funkin/audio/FunkinSound.hx +++ b/source/funkin/audio/FunkinSound.hx @@ -14,6 +14,10 @@ import funkin.util.tools.ICloneable; import funkin.util.flixel.sound.FlxPartialSound; import funkin.Paths.PathsFunction; import lime.app.Promise; +import lime.media.AudioSource; +import openfl.events.Event; +import openfl.media.Sound; +import openfl.media.SoundChannel; import openfl.media.SoundMixer; #if (openfl >= "8.0.0") @@ -108,6 +112,11 @@ class FunkinSound extends FlxSound implements ICloneable return _waveformData; } + /** + * If true, the game will forcefully add this sound's channel to the list of playing sounds. + */ + public var important:Bool = false; + /** * Are we in a state where the song should play but time is negative? */ @@ -145,6 +154,14 @@ class FunkinSound extends FlxSound implements ICloneable else { super.update(elapsedSec); + + @:privateAccess + { + if (important && _channel != null && !SoundMixer.__soundChannels.contains(_channel)) + { + SoundMixer.__soundChannels.push(_channel); + } + } } } @@ -431,13 +448,14 @@ class FunkinSound extends FlxSound implements ICloneable * @param persist Whether to keep this `FunkinSound` between states, or destroy it. * @param onComplete Called when the sound finished playing. * @param onLoad Called when the sound finished loading. Called immediately for succesfully loaded embedded sounds. + * @param important If `true`, the sound channel will forcefully be added onto the channel array, even if full. Use sparingly! * @return A `FunkinSound` object, or `null` if the sound could not be loaded. */ public static function load(embeddedSound:FlxSoundAsset, volume:Float = 1.0, looped:Bool = false, autoDestroy:Bool = false, autoPlay:Bool = false, - persist:Bool = false, ?onComplete:Void->Void, ?onLoad:Void->Void):Null + persist:Bool = false, ?onComplete:Void->Void, ?onLoad:Void->Void, important:Bool = false):Null { @:privateAccess - if (SoundMixer.__soundChannels.length >= SoundMixer.MAX_ACTIVE_CHANNELS) + if (SoundMixer.__soundChannels.length >= SoundMixer.MAX_ACTIVE_CHANNELS && !important) { FlxG.log.error('FunkinSound could not play sound, channels exhausted! Found ${SoundMixer.__soundChannels.length} active sound channels.'); return null; @@ -462,6 +480,7 @@ class FunkinSound extends FlxSound implements ICloneable sound.volume = volume; sound.group = FlxG.sound.defaultSoundGroup; sound.persist = persist; + sound.important = important; // Make sure to add the sound to the list. // If it's already in, it won't get re-added. @@ -534,15 +553,50 @@ class FunkinSound extends FlxSound implements ICloneable this._label = 'unknown'; } + @:access(openfl.media.Sound) + @:access(openfl.media.SoundChannel) + @:access(openfl.media.SoundMixer) + override function startSound(startTime:Float) + { + if (!important) + { + super.startSound(startTime); + return; + } + + _time = startTime; + _paused = false; + + if (_sound == null) return; + + // Create a channel manually if the sound is considered important. + var pan:Float = FlxMath.bound(SoundMixer.__soundTransform.pan + _transform.pan, -1, 1); + var volume:Float = FlxMath.bound(SoundMixer.__soundTransform.volume * _transform.volume, 0, MAX_VOLUME); + + var audioSource:AudioSource = new AudioSource(_sound.__buffer); + audioSource.offset = Std.int(startTime); + audioSource.gain = volume; + + var position:lime.math.Vector4 = audioSource.position; + position.x = pan; + position.z = -1 * Math.sqrt(1 - Math.pow(pan, 2)); + audioSource.position = position; + + _channel = new SoundChannel(_sound, audioSource, _transform); + _channel.addEventListener(Event.SOUND_COMPLETE, stopped); + pitch = _pitch; + active = true; + } + /** * Play a sound effect once, then destroy it. * @param key * @param volume * @return A `FunkinSound` object, or `null` if the sound could not be loaded. */ - public static function playOnce(key:String, volume:Float = 1.0, ?onComplete:Void->Void, ?onLoad:Void->Void):Null + public static function playOnce(key:String, volume:Float = 1.0, ?onComplete:Void->Void, ?onLoad:Void->Void, important:Bool = false):Null { - var result:Null = FunkinSound.load(key, volume, false, true, true, false, onComplete, onLoad); + var result:Null = FunkinSound.load(key, volume, false, true, true, false, onComplete, onLoad, important); return result; } diff --git a/source/funkin/play/Countdown.hx b/source/funkin/play/Countdown.hx index 9a9a14f10..c034ba763 100644 --- a/source/funkin/play/Countdown.hx +++ b/source/funkin/play/Countdown.hx @@ -255,7 +255,7 @@ class Countdown var path = noteStyle.getCountdownSoundPath(step); if (path == null) return null; - return FunkinSound.playOnce(path, Constants.COUNTDOWN_VOLUME); + return FunkinSound.playOnce(path, Constants.COUNTDOWN_VOLUME, null, null, true); } public static function decrement(step:CountdownStep):CountdownStep diff --git a/source/funkin/play/song/Song.hx b/source/funkin/play/song/Song.hx index 4d6b21ccb..f0d792279 100644 --- a/source/funkin/play/song/Song.hx +++ b/source/funkin/play/song/Song.hx @@ -801,7 +801,7 @@ class SongDifficulty { var suffix:String = (instId != '') ? '-$instId' : ''; - FlxG.sound.music = FunkinSound.load(Paths.inst(this.song.id, suffix), volume, looped, false, true); + FlxG.sound.music = FunkinSound.load(Paths.inst(this.song.id, suffix), volume, looped, false, true, false, null, null, true); // Workaround for a bug where FlxG.sound.music.update() was being called twice. FlxG.sound.list.remove(FlxG.sound.music); @@ -948,16 +948,21 @@ class SongDifficulty for (playerVoice in playerVoiceList) { if (!Assets.exists(playerVoice)) continue; - result.addPlayerVoice(FunkinSound.load(playerVoice)); + result.addPlayerVoice(FunkinSound.load(playerVoice, 1.0, false, false, false, false, null, null, true)); } // Add opponent vocals. for (opponentVoice in opponentVoiceList) { if (!Assets.exists(opponentVoice)) continue; - result.addOpponentVoice(FunkinSound.load(opponentVoice)); + result.addOpponentVoice(FunkinSound.load(opponentVoice, 1.0, false, false, false, false, null, null, true)); } + // Sometimes the sounds don't set their important value to true, so we have to do this manually. + result.forEach(function(snd:FunkinSound) { + snd.important = true; + }); + result.playerVoicesOffset = offsets.getVocalOffset(characters.player, instId); result.opponentVoicesOffset = offsets.getVocalOffset(characters.opponent, instId); From 8074d571860aba2c2f6f1c642d8d0e671ff5355e Mon Sep 17 00:00:00 2001 From: Lasercar Date: Sun, 23 Feb 2025 21:51:49 +1000 Subject: [PATCH 43/56] Don't add the default difficulty to song metadata It'll now only add the current difficulty to the metadata if it doesn't exist in it when saved. --- source/funkin/ui/debug/charting/ChartEditorState.hx | 5 ----- .../charting/handlers/ChartEditorImportExportHandler.hx | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index d05171f91..8e7a14420 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -1334,7 +1334,6 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState result = []; trace('Initializing blank chart for difficulty ' + selectedDifficulty); currentSongChartData.notes.set(selectedDifficulty, result); - currentSongMetadata.playData.difficulties.pushUnique(selectedDifficulty); return result; } return result; @@ -1343,7 +1342,6 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState function set_currentSongChartNoteData(value:Array):Array { currentSongChartData.notes.set(selectedDifficulty, value); - currentSongMetadata.playData.difficulties.pushUnique(selectedDifficulty); return value; } @@ -1636,9 +1634,6 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState noteTooltipsDirty = true; notePreviewViewportBoundsDirty = true; - // Make sure the difficulty we selected is in the list of difficulties. - currentSongMetadata.playData.difficulties.pushUnique(selectedDifficulty); - return selectedDifficulty; } diff --git a/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx b/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx index 327754a8c..dae5e9db2 100644 --- a/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx +++ b/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx @@ -117,6 +117,7 @@ class ChartEditorImportExportHandler { state.songMetadata = newSongMetadata; state.songChartData = newSongChartData; + state.selectedDifficulty = state.availableDifficulties[0]; Conductor.instance.forceBPM(null); // Disable the forced BPM. Conductor.instance.instrumentalOffset = state.currentInstrumentalOffset; // Loads from the metadata. @@ -343,6 +344,12 @@ class ChartEditorImportExportHandler var variations = state.availableVariations; + if (state.currentSongMetadata.playData.difficulties.pushUnique(state.selectedDifficulty)) + { + // Just in case the user deleted all or didn't add a difficulty + state.difficultySelectDirty = true; + } + for (variation in variations) { var variationId:String = variation; From b15e809c63664e039781592dcbdee4383e73800e Mon Sep 17 00:00:00 2001 From: TechnikTil Date: Tue, 8 Apr 2025 17:34:40 -0600 Subject: [PATCH 44/56] fix freeplay dj softlock --- source/funkin/ui/freeplay/FreeplayDJ.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/ui/freeplay/FreeplayDJ.hx b/source/funkin/ui/freeplay/FreeplayDJ.hx index 792d0c8d9..be7e332cf 100644 --- a/source/funkin/ui/freeplay/FreeplayDJ.hx +++ b/source/funkin/ui/freeplay/FreeplayDJ.hx @@ -87,7 +87,7 @@ class FreeplayDJ extends FlxAtlasSprite case Intro: // Play the intro animation then leave this state immediately. var animPrefix = playableCharData.getAnimationPrefix('intro'); - if (getCurrentAnimation() != animPrefix) playFlashAnimation(animPrefix, true); + if (getCurrentAnimation() != animPrefix || !this.anim.isPlaying) playFlashAnimation(animPrefix, true); timeIdling = 0; case Idle: // We are in this state the majority of the time. From 832bc5bd83d49a646b9c8cb2b767602c848be908 Mon Sep 17 00:00:00 2001 From: VioletSnowLeopard Date: Tue, 29 Apr 2025 00:38:50 -0400 Subject: [PATCH 45/56] fix two issues with random capsule --- source/funkin/ui/freeplay/FreeplayState.hx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 274e6ef6c..1da2e6b0a 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -1717,14 +1717,14 @@ class FreeplayState extends MusicBeatSubState { touchTimer = 0; var previousVariation:String = currentVariation; + var daSong:Null = grpCapsules.members[curSelected].freeplayData; // Available variations for current character. We get this since bf is usually `default` variation, and `pico` is `pico` // but sometimes pico can be the default variation (weekend 1 songs), and bf can be `bf` variation (darnell) - var characterVariations:Array = grpCapsules.members[curSelected].freeplayData?.data.getVariationsByCharacter(currentCharacter) ?? Constants.DEFAULT_VARIATION_LIST; + var characterVariations:Array = daSong?.data.getVariationsByCharacter(currentCharacter) ?? Constants.DEFAULT_VARIATION_LIST; var difficultiesAvailable:Array = allDifficulties; // Gets all available difficulties for our character, via our available variations - var songDifficulties:Array = grpCapsules.members[curSelected].freeplayData?.data.listDifficulties(null, - characterVariations) ?? Constants.DEFAULT_DIFFICULTY_LIST; + var songDifficulties:Array = daSong?.data.listDifficulties(null, characterVariations) ?? Constants.DEFAULT_DIFFICULTY_LIST; var currentDifficultyIndex:Int = difficultiesAvailable.indexOf(currentDifficulty); @@ -1737,15 +1737,16 @@ class FreeplayState extends MusicBeatSubState // Update the current difficulty currentDifficulty = difficultiesAvailable[currentDifficultyIndex]; // For when we change the difficulty, but the song doesn't have that difficulty! - if (!songDifficulties.contains(difficultiesAvailable[currentDifficultyIndex])) + if (daSong != null && !songDifficulties.contains(difficultiesAvailable[currentDifficultyIndex])) { curSelected = findClosestDiff(characterVariations, difficultiesAvailable[currentDifficultyIndex]); - rememberedSongId = grpCapsules.members[curSelected].freeplayData?.data.id; + daSong = grpCapsules.members[curSelected].freeplayData; + rememberedSongId = daSong?.data.id; } for (variation in characterVariations) { - if (grpCapsules.members[curSelected].freeplayData?.data.hasDifficulty(currentDifficulty, variation) ?? false) + if (daSong?.data.hasDifficulty(currentDifficulty, variation) ?? false) { currentVariation = variation; rememberedVariation = variation; @@ -1753,7 +1754,6 @@ class FreeplayState extends MusicBeatSubState } } - var daSong:Null = grpCapsules.members[curSelected].freeplayData; if (daSong != null) { var targetSong:Null = SongRegistry.instance.fetchEntry(daSong.data.id); @@ -2073,6 +2073,8 @@ class FreeplayState extends MusicBeatSubState intendedCompletion = 0.0; rememberedSongId = null; albumRoll.albumId = null; + changeDiff(); + daSongCapsule.refreshDisplay(); } for (index => capsule in grpCapsules.members) From 808698ace7457bc76a8a52d415d63fa4ee5b9400 Mon Sep 17 00:00:00 2001 From: Kolo <67389779+JustKolosaki@users.noreply.github.com> Date: Sat, 26 Apr 2025 09:10:55 +0200 Subject: [PATCH 46/56] medal fix thing --- source/funkin/api/newgrounds/Medals.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/api/newgrounds/Medals.hx b/source/funkin/api/newgrounds/Medals.hx index 5674ae15d..984362473 100644 --- a/source/funkin/api/newgrounds/Medals.hx +++ b/source/funkin/api/newgrounds/Medals.hx @@ -67,7 +67,7 @@ class Medals NewgroundsMedalPlugin.play(medalData.value, medalData.name, medalGraphic); }); #else - if (medalJSON == null) loadMedalJSON(); + if ((medalJSON?.length ?? 0) == 0) loadMedalJSON(); // We have to use a medal image from the game files. We use a Base64 encoded image that NG spits out. // TODO: Wait, don't they give us the medal icon? From 73114e2da623af71ad3c4ac8f201fdc5c402d20b Mon Sep 17 00:00:00 2001 From: thesuperpig56 <97651743+thesuperpig56@users.noreply.github.com> Date: Mon, 21 Apr 2025 20:25:54 -0700 Subject: [PATCH 47/56] Avoid crash when restarting song without characters. --- source/funkin/play/PlayState.hx | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index f7ed112c4..af536b706 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -878,7 +878,6 @@ class PlayState extends MusicBeatSubState // so the song doesn't start too early :D Conductor.instance.update(-5000, false); - // Reset camera zooming cameraBopIntensity = Constants.DEFAULT_BOP_INTENSITY; hudCameraZoomIntensity = (cameraBopIntensity - 1.0) * 2.0; @@ -898,16 +897,9 @@ class PlayState extends MusicBeatSubState Countdown.performCountdown(); }); - // Reset the health icons. - if (currentStage.getBoyfriend() != null) - { - currentStage.getBoyfriend().initHealthIcon(false); - } - if (currentStage.getDad() != null) - { - currentStage.getDad().initHealthIcon(true); - } + if (currentStage != null && currentStage.getBoyfriend() != null) currentStage.getBoyfriend().initHealthIcon(false); + if (currentStage != null && currentStage.getBoyfriend() != null) currentStage.getDad().initHealthIcon(true); needsReset = false; } From 617d5ffa0608f3ac4f94cf9443f2de3b4148ea76 Mon Sep 17 00:00:00 2001 From: thesuperpig56 <97651743+thesuperpig56@users.noreply.github.com> Date: Mon, 21 Apr 2025 20:43:15 -0700 Subject: [PATCH 48/56] Called the wrong character here, whoops! --- source/funkin/play/PlayState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index af536b706..aba33c27c 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -899,7 +899,7 @@ class PlayState extends MusicBeatSubState // Reset the health icons. if (currentStage != null && currentStage.getBoyfriend() != null) currentStage.getBoyfriend().initHealthIcon(false); - if (currentStage != null && currentStage.getBoyfriend() != null) currentStage.getDad().initHealthIcon(true); + if (currentStage != null && currentStage.getDad() != null) currentStage.getDad().initHealthIcon(true); needsReset = false; } From bbc0546c7450b929dc78ad9271171ea899478e9d Mon Sep 17 00:00:00 2001 From: thesuperpig56 <97651743+thesuperpig56@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:58:00 -0700 Subject: [PATCH 49/56] Shortened statement based on suggestion. Co-authored-by: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> --- source/funkin/play/PlayState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index aba33c27c..f18881b82 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -898,8 +898,8 @@ class PlayState extends MusicBeatSubState }); // Reset the health icons. - if (currentStage != null && currentStage.getBoyfriend() != null) currentStage.getBoyfriend().initHealthIcon(false); - if (currentStage != null && currentStage.getDad() != null) currentStage.getDad().initHealthIcon(true); + currentStage?.getBoyfriend()?.initHealthIcon(false); + currentStage?.getDad()?.initHealthIcon(true); needsReset = false; } From 3e0dbe2758d68ccf4ded1d08bec247ab05d70829 Mon Sep 17 00:00:00 2001 From: Kolo <67389779+JustKolosaki@users.noreply.github.com> Date: Mon, 21 Apr 2025 08:44:23 +0200 Subject: [PATCH 50/56] performCleanup on reload --- source/funkin/play/PlayState.hx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index f18881b82..50adf81c5 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -1421,9 +1421,10 @@ class PlayState extends MusicBeatSubState */ override function reloadAssets():Void { + performCleanup(); + funkin.modding.PolymodHandler.forceReloadAssets(); lastParams.targetSong = SongRegistry.instance.fetchEntry(currentSong.id); - this.remove(currentStage); LoadingState.loadPlayState(lastParams); } From c5f2a744940dbc685b25373fa2dabb548f0b26fa Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Wed, 26 Mar 2025 20:34:30 -0300 Subject: [PATCH 51/56] fix: Prevent loading invalid variation --- .../charting/handlers/ChartEditorImportExportHandler.hx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx b/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx index dae5e9db2..1db4a2481 100644 --- a/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx +++ b/source/funkin/ui/debug/charting/handlers/ChartEditorImportExportHandler.hx @@ -119,6 +119,11 @@ class ChartEditorImportExportHandler state.songChartData = newSongChartData; state.selectedDifficulty = state.availableDifficulties[0]; + if (!newSongMetadata.exists(state.selectedVariation)) + { + state.selectedVariation = Constants.DEFAULT_VARIATION; + } + Conductor.instance.forceBPM(null); // Disable the forced BPM. Conductor.instance.instrumentalOffset = state.currentInstrumentalOffset; // Loads from the metadata. Conductor.instance.mapTimeChanges(state.currentSongMetadata.timeChanges); From b811ca91a660aa0c0635090539d4803f7fc49738 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Wed, 30 Apr 2025 02:01:01 -0400 Subject: [PATCH 52/56] Update link to art submodule to include latest assets --- art | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/art b/art index 78dc31021..8402339e2 160000 --- a/art +++ b/art @@ -1 +1 @@ -Subproject commit 78dc310219370144719b4eeef9b3b511c5a44532 +Subproject commit 8402339e2e63ae99c441941a46d54bf3f0c0d5fa From 4c5335d7a312828fa8db9d08e1313503cc87cd66 Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Wed, 30 Apr 2025 02:37:13 -0500 Subject: [PATCH 53/56] art submod --- art | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/art b/art index 78dc31021..8402339e2 160000 --- a/art +++ b/art @@ -1 +1 @@ -Subproject commit 78dc310219370144719b4eeef9b3b511c5a44532 +Subproject commit 8402339e2e63ae99c441941a46d54bf3f0c0d5fa From d423eb3ddd67f988f28bf7f020b0c6496417bbe0 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Wed, 30 Apr 2025 23:34:26 -0600 Subject: [PATCH 54/56] Update Charting PR policy in CONTRIBUTING.md We no longer accept chart modifications. --- docs/CONTRIBUTING.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 234d44cf5..762c837d8 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -405,22 +405,15 @@ If you simultaneously modify files from both repositories, then open two separat Be sure to choose `main` as the base branch for `funkin.assets` PRs, as no `develop` branch exists for that repository. ### Charting PRs -Charting PRs make changes such as **adding/removing notes** or **adjusting the placement of song events**. +Charting PRs make changes such as **adjusting chart metadata**. -This involves modifying one or several of the `funkin.assets` repository's `.json` chart files, found in the `preload/data/songs/` directory. - -These PRs should only be opened in the `funkin.assets` repository. +This involves modifying one or several of the `funkin.assets` repository's `*-metadata.json` files, found in the `preload/data/songs/` directory. > [!CAUTION] -> **No Major Recharts!** Any PR that makes major chart modifications will be rejected. -> Keep your PRs to small tweaks and fixes. +> We **do not** accept changes to the chart `.json` file itself. +> If you find an error in the game's charts, please open an issue in the `Funkin` repo! -Here are some guidelines for opening a Charting PR: -- **Explain the issue.** Which song, variation, difficulty, and section/timestamp is the problem in? Help us understand with screenshots and videos. -- **Show your changes.** How does the chart look with your changes? Provide screenshots and videos here as well. -- **Minimize the diff.** If your changes are very small (e.g. a few notes), do not re-export the chart using the Chart Editor. Instead, manually edit the `.json` chart files to help GitHub display your changes cleanly. - -If your PR is accepted, you will be credited as a GitHub contributor (but not as a charter in the Pause Menu). +These PRs should only be opened in the `funkin.assets` repository. # Closing Thank you for reading the Contributing Guide. From 65699ee865b3ac80219e34d7b6c67be069aacbba Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 1 May 2025 01:38:23 -0400 Subject: [PATCH 55/56] Update CONTRIBUTING.md --- docs/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 762c837d8..9240dd2ed 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -411,7 +411,7 @@ This involves modifying one or several of the `funkin.assets` repository's `*-me > [!CAUTION] > We **do not** accept changes to the chart `.json` file itself. -> If you find an error in the game's charts, please open an issue in the `Funkin` repo! +> If you find an error in the game's charts, please open an issue in the `Funkin` repo, and the Funkin' Crew will review it and make tweaks themselves as necessary. These PRs should only be opened in the `funkin.assets` repository. From edf6889af9e7f68caead9b8139178a36b4b5b2d6 Mon Sep 17 00:00:00 2001 From: VioletSnowLeopard Date: Thu, 1 May 2025 20:57:39 -0400 Subject: [PATCH 56/56] fix switching filters to do its intended behavior --- source/funkin/ui/freeplay/FreeplayState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 1da2e6b0a..3529d1559 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -510,10 +510,10 @@ class FreeplayState extends MusicBeatSubState generateSongList({filterType: REGEXP, filterData: str}, true); } - // If the current song is still in the list (aka not null?), we'll land on it + // If the current song is still in the list, or if it was random, we'll land on it // Otherwise we want to land on the first song of the group, rather than random song when changing letter sorts // that is, only if there's more than one song in the group! - if (curSong != null && currentFilteredSongs.length > 1) + if (curSong == null || currentFilteredSongs.contains(curSong)) { changeSelection(); }