From 55c2dabe84e6c8eb2b02e5b38209abe3c48e548c Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 11 Oct 2024 23:43:57 -0400 Subject: [PATCH 01/31] Bump the Stage data version to indicate that new values were added. --- source/funkin/data/stage/CHANGELOG.md | 6 ++++++ source/funkin/data/stage/StageRegistry.hx | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/source/funkin/data/stage/CHANGELOG.md b/source/funkin/data/stage/CHANGELOG.md index bf9d750cc7d..f83ce608d4c 100644 --- a/source/funkin/data/stage/CHANGELOG.md +++ b/source/funkin/data/stage/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project 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). +## [1.0.3] +### Added +- Added the `color` attribute on stage props to tint them. +- Added the `blend` attribute on stage props to apply blend modes. +- Added the `angle` attribute on stage props to apply a rotation to them. + ## [1.0.2] ### Added - Added the ability to specify `flipX` and `flipY` on stage props to horizontally or vertically flip, respectively. diff --git a/source/funkin/data/stage/StageRegistry.hx b/source/funkin/data/stage/StageRegistry.hx index e11166bddda..0c546d0ab97 100644 --- a/source/funkin/data/stage/StageRegistry.hx +++ b/source/funkin/data/stage/StageRegistry.hx @@ -11,9 +11,9 @@ class StageRegistry extends BaseRegistry * Handle breaking changes by incrementing this value * and adding migration to the `migrateStageData()` function. */ - public static final STAGE_DATA_VERSION:thx.semver.Version = "1.0.2"; + public static final STAGE_DATA_VERSION:thx.semver.Version = "1.0.3"; - public static final STAGE_DATA_VERSION_RULE:thx.semver.VersionRule = ">=1.0.0 <=1.0.2"; + public static final STAGE_DATA_VERSION_RULE:thx.semver.VersionRule = ">=1.0.0 <=1.0.3"; public static var instance(get, never):StageRegistry; static var _instance:Null = null; From 4effd709ebadbe3898db504838a124ee77f47038 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 11 Oct 2024 23:48:19 -0400 Subject: [PATCH 02/31] Updated Save data version to indicate new values. --- source/funkin/save/Save.hx | 2 +- source/funkin/save/changelog.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/funkin/save/Save.hx b/source/funkin/save/Save.hx index 8403a1a7751..0a788a90fcf 100644 --- a/source/funkin/save/Save.hx +++ b/source/funkin/save/Save.hx @@ -18,7 +18,7 @@ import thx.semver.Version; @:nullSafety class Save { - public static final SAVE_DATA_VERSION:thx.semver.Version = "2.0.4"; + public static final SAVE_DATA_VERSION:thx.semver.Version = "2.0.6"; public static final SAVE_DATA_VERSION_RULE:thx.semver.VersionRule = "2.0.x"; // We load this version's saves from a new save path, to maintain SOME level of backwards compatibility. diff --git a/source/funkin/save/changelog.md b/source/funkin/save/changelog.md index 41d6e68aee8..72fb7fc034a 100644 --- a/source/funkin/save/changelog.md +++ b/source/funkin/save/changelog.md @@ -5,11 +5,9 @@ All notable changes to this project 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). -## [2.0.4] - 2024-09-12 -Note to self: Only update to 2.1.0 when migration is needed. +## [2.0.6] - 2024-10-11 ### Added -- `unlocks.charactersSeen:Array` to `Save` -- `unlocks.oldChar:Bool` to `Save` +- `optionsStageEditor` to `Save` for storing user preferences for the stage editor. ## [2.0.5] - 2024-05-21 ### Fixed @@ -17,6 +15,8 @@ Note to self: Only update to 2.1.0 when migration is needed. ## [2.0.4] - 2024-05-21 ### Added +- `unlocks.charactersSeen:Array` to `Save` +- `unlocks.oldChar:Bool` to `Save` - `favoriteSongs:Array` to `Save` ## [2.0.3] - 2024-01-09 From ce85ee20a7d309b4898cc1b97b0b194f1cb0e80e Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 11 Oct 2024 23:52:07 -0400 Subject: [PATCH 03/31] Only display the Stage Editor in builds that enable it, and enable it by default (this re-enables the Stage Editor keybind). --- project.hxp | 2 +- source/funkin/ui/debug/DebugMenuSubState.hx | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/project.hxp b/project.hxp index adecc20328e..38c5c493363 100644 --- a/project.hxp +++ b/project.hxp @@ -460,7 +460,6 @@ class Project extends HXProject { // Should be false unless explicitly requested. GITHUB_BUILD.apply(this, false); - FEATURE_STAGE_EDITOR.apply(this, false); FEATURE_NEWGROUNDS.apply(this, false); FEATURE_GHOST_TAPPING.apply(this, false); @@ -471,6 +470,7 @@ class Project extends HXProject { FEATURE_FUNKVIS.apply(this, true); FEATURE_PARTIAL_SOUNDS.apply(this, true); FEATURE_VIDEO_PLAYBACK.apply(this, true); + FEATURE_STAGE_EDITOR.apply(this, true); // Should be true on debug builds or if GITHUB_BUILD is enabled. FEATURE_DEBUG_FUNCTIONS.apply(this, isDebug() || GITHUB_BUILD.isEnabled(this)); diff --git a/source/funkin/ui/debug/DebugMenuSubState.hx b/source/funkin/ui/debug/DebugMenuSubState.hx index cc6a2426e71..45652095b0a 100644 --- a/source/funkin/ui/debug/DebugMenuSubState.hx +++ b/source/funkin/ui/debug/DebugMenuSubState.hx @@ -55,12 +55,14 @@ class DebugMenuSubState extends MusicBeatSubState // Create each menu item. // Call onMenuChange when the first item is created to move the camera . #if FEATURE_CHART_EDITOR - onMenuChange(createItem("CHART EDITOR", openChartEditor)); + createItem("CHART EDITOR", openChartEditor); #end - // createItem("Input Offset Testing", openInputOffsetTesting); - createItem("CHARACTER SELECT", openCharSelect, true); createItem("ANIMATION EDITOR", openAnimationEditor); + #if FEATURE_STAGE_EDITOR createItem("STAGE EDITOR", openStageEditor); + #end + // createItem("Input Offset Testing", openInputOffsetTesting); + // createItem("CHARACTER SELECT", openCharSelect, true); // createItem("TEST STICKERS", testStickers); #if sys createItem("OPEN CRASH LOG FOLDER", openLogFolder); From 4dbb0baa173c5ad804d653d4626e24ea26d1a025 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 18 Oct 2024 16:00:06 -0400 Subject: [PATCH 04/31] Enable log messages on all builds by default after we got too many complaints. --- project.hxp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/project.hxp b/project.hxp index 38c5c493363..4e8dae4b80d 100644 --- a/project.hxp +++ b/project.hxp @@ -474,7 +474,10 @@ class Project extends HXProject { // Should be true on debug builds or if GITHUB_BUILD is enabled. FEATURE_DEBUG_FUNCTIONS.apply(this, isDebug() || GITHUB_BUILD.isEnabled(this)); - FEATURE_LOG_TRACE.apply(this, isDebug()); + + // Got a lot of complains about this being turned off by default on some builds. + // TODO: Look into ways to optimize logging (maybe by using a thread pool?) + FEATURE_LOG_TRACE.apply(this, true); // Should default to true on workspace builds and false on release builds. REDIRECT_ASSETS_FOLDER.apply(this, isDebug() && isDesktop()); From 24ad7f4a39abda85d4215afd2c2304cee4ceece6 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 18 Oct 2024 16:33:22 -0400 Subject: [PATCH 05/31] Remove unused custom type resolver. --- source/funkin/save/Save.hx | 5 +-- source/funkin/util/SerializerUtil.hx | 48 ---------------------------- 2 files changed, 1 insertion(+), 52 deletions(-) diff --git a/source/funkin/save/Save.hx b/source/funkin/save/Save.hx index 0a788a90fcf..1d723d08668 100644 --- a/source/funkin/save/Save.hx +++ b/source/funkin/save/Save.hx @@ -961,10 +961,7 @@ class Save */ static function loadFromSlot(slot:Int):Save { - trace("[SAVE] Loading save from slot " + slot + "..."); - - // Prevent crashes if the save data is corrupted. - SerializerUtil.initSerializer(); + trace('[SAVE] Loading save from slot $slot...'); FlxG.save.bind('$SAVE_NAME${slot}', SAVE_PATH); diff --git a/source/funkin/util/SerializerUtil.hx b/source/funkin/util/SerializerUtil.hx index fa602cc733e..c87d3f6c00a 100644 --- a/source/funkin/util/SerializerUtil.hx +++ b/source/funkin/util/SerializerUtil.hx @@ -63,31 +63,6 @@ class SerializerUtil } } - public static function initSerializer():Void - { - haxe.Unserializer.DEFAULT_RESOLVER = new FunkinTypeResolver(); - } - - /** - * Serialize a Haxe object using the built-in Serializer. - * @param input The object to serialize - * @return The serialized object as a string - */ - public static function fromHaxeObject(input:Dynamic):String - { - return haxe.Serializer.run(input); - } - - /** - * Convert a serialized Haxe object back into a Haxe object. - * @param input The serialized object as a string - * @return The deserialized object - */ - public static function toHaxeObject(input:String):Dynamic - { - return haxe.Unserializer.run(input); - } - /** * Customize how certain types are serialized when converting to JSON. */ @@ -115,26 +90,3 @@ class SerializerUtil return result; } } - -class FunkinTypeResolver -{ - public function new() - { - // Blank constructor. - } - - public function resolveClass(name:String):Class - { - if (name == 'Dynamic') - { - FlxG.log.warn('Found invalid class type in save data, indicates partial save corruption.'); - return null; - } - return Type.resolveClass(name); - }; - - public function resolveEnum(name:String):Enum - { - return Type.resolveEnum(name); - }; -} From dff4135fc941b2d991f2ffd66cf1db2fc78938ec Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 18 Oct 2024 17:11:09 -0400 Subject: [PATCH 06/31] Update save data format and error handling. --- hmm.json | 2 +- source/funkin/save/Save.hx | 83 +++++++++++++------ source/funkin/save/changelog.md | 8 ++ .../funkin/save/migrator/SaveDataMigrator.hx | 18 ++++ .../funkin/save/migrator/SaveData_v2_0_0.hx | 26 ++++++ .../ui/debug/charting/ChartEditorState.hx | 17 ++-- .../ui/debug/stageeditor/StageEditorState.hx | 6 +- 7 files changed, 122 insertions(+), 38 deletions(-) create mode 100644 source/funkin/save/migrator/SaveData_v2_0_0.hx diff --git a/hmm.json b/hmm.json index 8ff572b30b9..50879416b6e 100644 --- a/hmm.json +++ b/hmm.json @@ -11,7 +11,7 @@ "name": "flixel", "type": "git", "dir": null, - "ref": "f2b090d6c608471e730b051c8ee22b8b378964b1", + "ref": "ffa691cb2d2d81de35b900a4411e4062ac84ab58", "url": "https://github.com/FunkinCrew/flixel" }, { diff --git a/source/funkin/save/Save.hx b/source/funkin/save/Save.hx index 1d723d08668..52cf18b7fff 100644 --- a/source/funkin/save/Save.hx +++ b/source/funkin/save/Save.hx @@ -1,25 +1,23 @@ package funkin.save; import flixel.util.FlxSave; -import funkin.util.FileUtil; import funkin.input.Controls.Device; import funkin.play.scoring.Scoring; import funkin.play.scoring.Scoring.ScoringRank; import funkin.save.migrator.RawSaveData_v1_0_0; import funkin.save.migrator.SaveDataMigrator; -import funkin.save.migrator.SaveDataMigrator; import funkin.ui.debug.charting.ChartEditorState.ChartEditorLiveInputStyle; import funkin.ui.debug.charting.ChartEditorState.ChartEditorTheme; import funkin.ui.debug.stageeditor.StageEditorState.StageEditorTheme; +import funkin.util.FileUtil; import funkin.util.SerializerUtil; import thx.semver.Version; -import thx.semver.Version; @:nullSafety class Save { - public static final SAVE_DATA_VERSION:thx.semver.Version = "2.0.6"; - public static final SAVE_DATA_VERSION_RULE:thx.semver.VersionRule = "2.0.x"; + public static final SAVE_DATA_VERSION:thx.semver.Version = "2.1.0"; + public static final SAVE_DATA_VERSION_RULE:thx.semver.VersionRule = ">=2.1.0 <2.2.0"; // We load this version's saves from a new save path, to maintain SOME level of backwards compatibility. static final SAVE_PATH:String = 'FunkinCrew'; @@ -965,32 +963,57 @@ class Save FlxG.save.bind('$SAVE_NAME${slot}', SAVE_PATH); - if (FlxG.save.isEmpty()) + switch (FlxG.save.status) { - trace('[SAVE] Save data is empty, checking for legacy save data...'); - var legacySaveData = fetchLegacySaveData(); - if (legacySaveData != null) - { - trace('[SAVE] Found legacy save data, converting...'); - var gameSave = SaveDataMigrator.migrateFromLegacy(legacySaveData); - FlxG.save.mergeData(gameSave.data, true); - return gameSave; - } - else - { - trace('[SAVE] No legacy save data found.'); - var gameSave = new Save(); + case EMPTY: + trace('[SAVE] Save data in slot ${slot} is empty, checking for legacy save data...'); + var legacySaveData = fetchLegacySaveData(); + if (legacySaveData != null) + { + trace('[SAVE] Found legacy save data, converting...'); + var gameSave = SaveDataMigrator.migrateFromLegacy(legacySaveData); + FlxG.save.mergeData(gameSave.data, true); + return gameSave; + } + else + { + trace('[SAVE] No legacy save data found.'); + var gameSave = new Save(); + FlxG.save.mergeData(gameSave.data, true); + return gameSave; + } + case ERROR(_): + return handleSaveDataError(slot); + case BOUND(_, _): + trace('[SAVE] Loaded existing save data in slot ${slot}.'); + var gameSave = SaveDataMigrator.migrate(FlxG.save.data); FlxG.save.mergeData(gameSave.data, true); + return gameSave; - } + } + } + + /** + * Call this when there is an error loading the save data in slot X. + */ + static function handleSaveDataError(slot:Int):Save + { + var msg = 'There was an error loading your save data in slot ${slot}.'; + msg += '\nPlease report this issue to the developers.'; + lime.app.Application.current.window.alert(msg, "Save Data Failure"); + + // Don't touch that slot anymore. + // Instead, load the next available slot. + + var nextSlot = slot + 1; + + if (nextSlot < 1000) + { + return loadFromSlot(nextSlot); } else { - trace('[SAVE] Found existing save data.'); - var gameSave = SaveDataMigrator.migrate(FlxG.save.data); - FlxG.save.mergeData(gameSave.data, true); - - return gameSave; + throw "End of save data slots. Can't load any more."; } } @@ -1055,7 +1078,15 @@ class Save { var targetSaveData = new FlxSave(); targetSaveData.bind('$SAVE_NAME${slot}', SAVE_PATH); - return !targetSaveData.isEmpty(); + switch (targetSaveData.status) + { + case EMPTY: + return false; + case ERROR(_): + return false; + case BOUND(_, _): + return true; + } } /** diff --git a/source/funkin/save/changelog.md b/source/funkin/save/changelog.md index 72fb7fc034a..aa98d309616 100644 --- a/source/funkin/save/changelog.md +++ b/source/funkin/save/changelog.md @@ -5,6 +5,14 @@ All notable changes to this project 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). +## [2.1.0] - 2024-10-18 +This version introduces changes to save data loading in order to improve compatibility with older versions. +### Changed +- `optionsStageEditor.theme` converted from an Enum to a String to fix save data compatibility issues. + - In the future, Enum values should not be used in order to prevent incompatibilities caused by introducing new types to the save data that older versions cannot parse. +- `optionsChartEditor.theme` converted from an Enum to a String to fix save data compatibility issues. +- `optionsChartEditor.chartEditorLiveInputStyle` converted from an Enum to a String to fix save data compatibility issues. + ## [2.0.6] - 2024-10-11 ### Added - `optionsStageEditor` to `Save` for storing user preferences for the stage editor. diff --git a/source/funkin/save/migrator/SaveDataMigrator.hx b/source/funkin/save/migrator/SaveDataMigrator.hx index 7a929322a0b..228669f66be 100644 --- a/source/funkin/save/migrator/SaveDataMigrator.hx +++ b/source/funkin/save/migrator/SaveDataMigrator.hx @@ -32,6 +32,10 @@ class SaveDataMigrator var save:Save = new Save(saveDataWithDefaults); return save; } + else if (VersionUtil.validateVersion(version, "2.0.x")) + { + return migrate_v2_0_0(inputData); + } else { var message:String = 'Error migrating save data, expected ${Save.SAVE_DATA_VERSION}.'; @@ -43,6 +47,20 @@ class SaveDataMigrator } } + static function migrate_v2_0_0(inputData:Dynamic):Save + { + // Import the structured data. + var saveDataWithDefaults:RawSaveData = cast thx.Objects.deepCombine(Save.getDefault(), inputData); + + // Reset these values to valid ones. + saveDataWithDefaults.optionsChartEditor.chartEditorLiveInputStyle = funkin.ui.debug.charting.ChartEditorLiveInputStyle.None; + saveDataWithDefaults.optionsChartEditor.theme = funkin.ui.debug.charting.ChartEditorTheme.Light; + saveDataWithDefaults.optionsStageEditor.theme = funkin.ui.debug.stageeditor.StageEditorTheme.Light; + + var save:Save = new Save(saveDataWithDefaults); + return save; + } + /** * Migrate from 1.x to the latest version. */ diff --git a/source/funkin/save/migrator/SaveData_v2_0_0.hx b/source/funkin/save/migrator/SaveData_v2_0_0.hx new file mode 100644 index 00000000000..5369d87371b --- /dev/null +++ b/source/funkin/save/migrator/SaveData_v2_0_0.hx @@ -0,0 +1,26 @@ +package funkin.save.migrator; + +// Internal enums used to ensure old save data can be parsed by the default Haxe unserializer. +// In the future, only primitive types and abstract enums should be used in save data! + +@:native("funkin.ui.debug.stageeditor.StageEditorTheme") +enum StageEditorTheme +{ + Light; + Dark; +} + +@:native("funkin.ui.debug.charting.ChartEditorTheme") +enum ChartEditorTheme +{ + Light; + Dark; +} + +@:native("funkin.ui.debug.charting.ChartEditorLiveInputStyle") +enum ChartEditorLiveInputStyle +{ + None; + NumberKeys; + WASDKeys; +} diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index 3fb63a4f1eb..c11f133429e 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -5654,7 +5654,8 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState function handleHelpKeybinds():Void { // F1 = Open Help - if (FlxG.keys.justPressed.F1 && !isHaxeUIDialogOpen) { + if (FlxG.keys.justPressed.F1 && !isHaxeUIDialogOpen) + { this.openUserGuideDialog(); } } @@ -6543,22 +6544,22 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState /** * Available input modes for the chart editor state. Numbers/arrows/WASD available for other keybinds. */ -enum ChartEditorLiveInputStyle +enum abstract ChartEditorLiveInputStyle(String) { /** * No hotkeys to place notes at the playbar. */ - None; + var None; /** * 1/2/3/4 to place notes on opponent's side, 5/6/7/8 to place notes on player's side. */ - NumberKeys; + var NumberKeys; /** * WASD to place notes on opponent's side, Arrow keys to place notes on player's side. */ - WASDKeys; + var WASDKeys; } typedef ChartEditorParams = @@ -6577,15 +6578,15 @@ typedef ChartEditorParams = /** * Available themes for the chart editor state. */ -enum ChartEditorTheme +enum abstract ChartEditorTheme(String) { /** * The default theme for the chart editor. */ - Light; + var Light; /** * A theme which introduces darker colors. */ - Dark; + var Dark; } diff --git a/source/funkin/ui/debug/stageeditor/StageEditorState.hx b/source/funkin/ui/debug/stageeditor/StageEditorState.hx index 98190498fac..a536a09ee5a 100644 --- a/source/funkin/ui/debug/stageeditor/StageEditorState.hx +++ b/source/funkin/ui/debug/stageeditor/StageEditorState.hx @@ -1458,17 +1458,17 @@ class StageEditorState extends UIState /** * Available themes for the stage editor state. */ -enum StageEditorTheme +enum abstract StageEditorTheme(String) { /** * The default theme for the stage editor. */ - Light; + var Light; /** * A theme which introduces stage colors. */ - Dark; + var Dark; } enum StageEditorDialogType From 5819a43522c640d7e271b1d61ff2902b54176fbc Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Fri, 18 Oct 2024 17:22:36 -0400 Subject: [PATCH 07/31] Fix a typo. --- source/funkin/save/migrator/SaveDataMigrator.hx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/funkin/save/migrator/SaveDataMigrator.hx b/source/funkin/save/migrator/SaveDataMigrator.hx index 228669f66be..3dc012fce44 100644 --- a/source/funkin/save/migrator/SaveDataMigrator.hx +++ b/source/funkin/save/migrator/SaveDataMigrator.hx @@ -53,9 +53,9 @@ class SaveDataMigrator var saveDataWithDefaults:RawSaveData = cast thx.Objects.deepCombine(Save.getDefault(), inputData); // Reset these values to valid ones. - saveDataWithDefaults.optionsChartEditor.chartEditorLiveInputStyle = funkin.ui.debug.charting.ChartEditorLiveInputStyle.None; - saveDataWithDefaults.optionsChartEditor.theme = funkin.ui.debug.charting.ChartEditorTheme.Light; - saveDataWithDefaults.optionsStageEditor.theme = funkin.ui.debug.stageeditor.StageEditorTheme.Light; + saveDataWithDefaults.optionsChartEditor.chartEditorLiveInputStyle = funkin.ui.debug.charting.ChartEditorState.ChartEditorLiveInputStyle.None; + saveDataWithDefaults.optionsChartEditor.theme = funkin.ui.debug.charting.ChartEditorState.ChartEditorTheme.Light; + saveDataWithDefaults.optionsStageEditor.theme = funkin.ui.debug.stageeditor.StageEditorState.StageEditorTheme.Light; var save:Save = new Save(saveDataWithDefaults); return save; From f46f57e23d83053010fc165a55349367f60d2155 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Fri, 18 Oct 2024 19:51:06 -0400 Subject: [PATCH 08/31] proj hxp version bump --- project.hxp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.hxp b/project.hxp index 4e8dae4b80d..2ec8ba44583 100644 --- a/project.hxp +++ b/project.hxp @@ -25,7 +25,7 @@ class Project extends HXProject { * REMEMBER TO CHANGE THIS WHEN THE GAME UPDATES! * You only have to change it here, the rest of the game will query this value. */ - static final VERSION:String = "0.5.2"; + static final VERSION:String = "0.5.3"; /** * The game's name. Used as the default window title. From a0cefba9fda9195e279eee451935e68190f0af45 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Tue, 22 Oct 2024 12:14:14 -0400 Subject: [PATCH 09/31] changelog yoink --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44aa4a48656..c550557c97f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ 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.5.3] - 2024-10-18 + +### Changed +- `optionsStageEditor.theme` converted from an Enum to a String to fix save data compatibility issues. +- In the future, Enum values should not be used in order to prevent incompatibilities caused by introducing new types to the save data that older versions cannot parse. +- `optionsChartEditor.theme` converted from an Enum to a String to fix save data compatibility issues. +- `optionsChartEditor.chartEditorLiveInputStyle` converted from an Enum to a String to fix save data compatibility issues. + ## [0.5.2] - 2024-10-11 ### Changed From 8cf346c3b0f5eb2813cf00b4913e17590c90090b Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 22 Oct 2024 20:36:10 -0400 Subject: [PATCH 10/31] Update CHANGELOG.md --- CHANGELOG.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c550557c97f..42c30c00e48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,15 @@ 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.5.3] - 2024-10-18 - -### Changed -- `optionsStageEditor.theme` converted from an Enum to a String to fix save data compatibility issues. -- In the future, Enum values should not be used in order to prevent incompatibilities caused by introducing new types to the save data that older versions cannot parse. -- `optionsChartEditor.theme` converted from an Enum to a String to fix save data compatibility issues. -- `optionsChartEditor.chartEditorLiveInputStyle` converted from an Enum to a String to fix save data compatibility issues. +This patch resolves a critical issue which 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. +### Fixed +- Fixed a critical issue in which the Stage Editor theme value could not be parsed by older versions of the game, resulting in all save data being destroyed. + - Added a check which prevents save data from being loaded if it is corrupted rather than overriding it. +- `optionsStageEditor.theme` in the save data converted from an Enum to a String to fix save data compatibility issues. + - In the future, Enum values should not be used in order to prevent incompatibilities caused by introducing new types to the save data that older versions cannot parse. +- `optionsChartEditor.theme` in the save data converted from an Enum to a String to fix save data compatibility issues. +- `optionsChartEditor.chartEditorLiveInputStyle` in the save data converted from an Enum to a String to fix save data compatibility issues. +- Fixed an issue where some publicly distributed release builds of the game were not ## [0.5.2] - 2024-10-11 From 62de2a0345d929cf8932a8ea8a0e9e0385c009ec Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 23 Oct 2024 13:40:35 -0400 Subject: [PATCH 11/31] ...sandwiches. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42c30c00e48..2fb4f02d481 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ This patch resolves a critical issue which could cause user's save data to becom - In the future, Enum values should not be used in order to prevent incompatibilities caused by introducing new types to the save data that older versions cannot parse. - `optionsChartEditor.theme` in the save data converted from an Enum to a String to fix save data compatibility issues. - `optionsChartEditor.chartEditorLiveInputStyle` in the save data converted from an Enum to a String to fix save data compatibility issues. -- Fixed an issue where some publicly distributed release builds of the game were not +- Fixed an issue where some publicly distributed builds of the game were debug builds instead of release builds. ## [0.5.2] - 2024-10-11 From 7159cad2c17e61193c0cd6e79364e91583870248 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Sat, 26 Oct 2024 15:51:38 -0400 Subject: [PATCH 12/31] style: remove a buncho unused imports from PlayState.hx --- source/funkin/play/PlayState.hx | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index dbacf3fa967..9f32e724543 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -1,17 +1,13 @@ package funkin.play; -import flixel.addons.display.FlxPieDial; import flixel.addons.transition.FlxTransitionableState; import flixel.addons.transition.Transition; import flixel.FlxCamera; import flixel.FlxObject; -import flixel.FlxState; import flixel.FlxSubState; import flixel.math.FlxMath; import flixel.math.FlxPoint; -import flixel.math.FlxRect; import flixel.text.FlxText; -import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.ui.FlxBar; import flixel.util.FlxColor; @@ -22,7 +18,6 @@ import funkin.audio.FunkinSound; import funkin.audio.VoicesGroup; import funkin.data.dialogue.conversation.ConversationRegistry; import funkin.data.event.SongEventRegistry; -import funkin.data.notestyle.NoteStyleData; import funkin.data.notestyle.NoteStyleRegistry; import funkin.data.song.SongData.SongCharacterData; import funkin.data.song.SongData.SongEventData; @@ -45,7 +40,6 @@ import funkin.play.cutscene.VanillaCutscenes; import funkin.play.cutscene.VideoCutscene; import funkin.play.notes.NoteDirection; import funkin.play.notes.notekind.NoteKindManager; -import funkin.play.notes.NoteSplash; import funkin.play.notes.NoteSprite; import funkin.play.notes.notestyle.NoteStyle; import funkin.play.notes.Strumline; @@ -58,15 +52,9 @@ import funkin.ui.debug.charting.ChartEditorState; import funkin.ui.debug.stage.StageOffsetSubState; import funkin.ui.mainmenu.MainMenuState; import funkin.ui.MusicBeatSubState; -import funkin.ui.options.PreferencesMenu; -import funkin.ui.story.StoryMenuState; import funkin.ui.transition.LoadingState; import funkin.util.SerializerUtil; import haxe.Int64; -import lime.ui.Haptic; -import openfl.display.BitmapData; -import openfl.geom.Rectangle; -import openfl.Lib; #if FEATURE_DISCORD_RPC import funkin.api.discord.DiscordClient; #end From 144ba003773cd15f07680898fc380c70293ac1ef Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Sat, 26 Oct 2024 15:53:22 -0400 Subject: [PATCH 13/31] refactor: remove commented out code from draw() in PlayState.hx --- source/funkin/play/PlayState.hx | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index 9f32e724543..c662f99186b 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -748,24 +748,6 @@ class PlayState extends MusicBeatSubState refresh(); } - public override function draw():Void - { - // if (FlxG.renderBlit) - // { - // camGame.fill(BACKGROUND_COLOR); - // } - // else if (FlxG.renderTile) - // { - // FlxG.log.warn("PlayState background not displayed properly on tile renderer!"); - // } - // else - // { - // FlxG.log.warn("PlayState background not displayed properly, unknown renderer!"); - // } - - super.draw(); - } - function assertChartExists():Bool { // Returns null if the song failed to load or doesn't have the selected difficulty. From 20d90169845f1e50f849e39f4c5f818359756c78 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Wed, 23 Oct 2024 19:19:06 -0400 Subject: [PATCH 14/31] feat: Added smoother scrolling when using the Chart Editor smoother drag / movement in chart editor playbarHead movement fixie --- .../ui/debug/charting/ChartEditorState.hx | 109 +++++------------- 1 file changed, 31 insertions(+), 78 deletions(-) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index c11f133429e..0358846934f 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -94,6 +94,7 @@ import funkin.ui.mainmenu.MainMenuState; import funkin.ui.transition.LoadingState; import funkin.util.Constants; import funkin.util.FileUtil; +import funkin.util.MathUtil; import funkin.util.logging.CrashHandler; import funkin.util.SortUtil; import funkin.util.WindowUtil; @@ -244,7 +245,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState /** * Duration, in seconds, for the scroll easing animation. */ - public static final SCROLL_EASE_DURATION:Float = 0.2; + public static final SCROLL_EASE_DURATION:Float = 0.4; // Other @@ -773,9 +774,8 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState /** * The current process that is lerping the scroll position. - * Used to cancel the previous lerp if the user scrolls again. */ - var currentScrollEase:Null; + var currentScrollEase:Null; /** * The position where the user middle clicked to place a scroll anchor. @@ -2707,6 +2707,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState playbarHeadLayout.playbarHead.width = FlxG.width; playbarHeadLayout.playbarHead.height = 10; playbarHeadLayout.playbarHead.styleString = 'padding-left: 0px; padding-right: 0px; border-left: 0px; border-right: 0px;'; + playbarHeadLayout.playbarHead.min = 0; playbarHeadLayout.playbarHead.onDragStart = function(_:DragEvent) { playbarHeadDragging = true; @@ -2723,13 +2724,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState } } - playbarHeadLayout.playbarHead.onDrag = function(_:DragEvent) { + playbarHeadLayout.playbarHead.onDrag = function(d:DragEvent) { if (playbarHeadDragging) { - // Set the song position to where the playhead was moved to. - scrollPositionInPixels = (songLengthInPixels) * playbarHeadLayout.playbarHead.value / 100; // Update the conductor and audio tracks to match. - moveSongToScrollPosition(); + currentScrollEase = d.value; } } @@ -2740,6 +2739,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState if (playbarHeadDraggingWasPlaying) { playbarHeadDraggingWasPlaying = false; + // Disabled code to resume song playback on drag. // startAudioPlayback(); } @@ -3417,10 +3417,14 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState audioInstTrack.time = -Conductor.instance.instrumentalOffset; } } + + if (!audioInstTrack.isPlaying && currentScrollEase != scrollPositionInPixels) easeSongToScrollPosition(currentScrollEase); } if (audioInstTrack != null && audioInstTrack.isPlaying) { + currentScrollEase = scrollPositionInPixels; + if (FlxG.keys.pressed.ALT) { // If middle mouse panning during song playback, we move ONLY the playhead, without scrolling. Neat! @@ -4057,27 +4061,13 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState shouldPause = true; } - if (Math.abs(scrollAmount) > GRID_SIZE * 8) - { - shouldEase = true; - } + shouldEase = true; + if (shouldPause) stopAudioPlayback(); // Resync the conductor and audio tracks. - if (scrollAmount != 0 || playheadAmount != 0) - { - this.playheadPositionInPixels += playheadAmount; - if (shouldEase) - { - easeSongToScrollPosition(this.scrollPositionInPixels + scrollAmount); - } - else - { - // Apply the scroll amount. - this.scrollPositionInPixels += scrollAmount; - moveSongToScrollPosition(); - } - } - if (shouldPause) stopAudioPlayback(); + if (playheadAmount != 0) this.playheadPositionInPixels += playheadAmount; + + if (scrollAmount != 0) currentScrollEase += scrollAmount; } /** @@ -4333,15 +4323,13 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState { // Scroll up. var diff:Float = MENU_BAR_HEIGHT - FlxG.mouse.viewY; - scrollPositionInPixels -= diff * 0.5; // Too fast! - moveSongToScrollPosition(); + currentScrollEase -= diff * 0.5; // Too fast! } else if (FlxG.mouse.viewY > (playbarHeadLayout?.y ?? 0.0)) { // Scroll down. var diff:Float = FlxG.mouse.viewY - (playbarHeadLayout?.y ?? 0.0); - scrollPositionInPixels += diff * 0.5; // Too fast! - moveSongToScrollPosition(); + currentScrollEase += (diff * 0.5); // Too fast! } // Render the selection box. @@ -4480,8 +4468,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState var clickedPosInPixels:Float = FlxMath.remapToRange(FlxG.mouse.viewY, (notePreview?.y ?? 0.0), (notePreview?.y ?? 0.0) + (notePreview?.height ?? 0.0), 0, songLengthInPixels); - scrollPositionInPixels = clickedPosInPixels; - moveSongToScrollPosition(); + currentScrollEase = clickedPosInPixels; } else if (scrollAnchorScreenPos != null) { @@ -4540,15 +4527,13 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState { // Scroll up. var diff:Float = MENU_BAR_HEIGHT - FlxG.mouse.viewY; - scrollPositionInPixels -= diff * 0.5; // Too fast! - moveSongToScrollPosition(); + currentScrollEase -= (diff * 0.5); } else if (FlxG.mouse.viewY > (playbarHeadLayout?.y ?? 0.0)) { // Scroll down. var diff:Float = FlxG.mouse.viewY - (playbarHeadLayout?.y ?? 0.0); - scrollPositionInPixels += diff * 0.5; // Too fast! - moveSongToScrollPosition(); + currentScrollEase += (diff * 0.5); } // Calculate distance between the position dragged to and the original position. @@ -5142,18 +5127,15 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState { if (playbarHeadLayout == null) throw "ERROR: Tried to handle playbar, but playbarHeadLayout is null!"; + // Move the playhead to match the song position, if we aren't dragging it. + playbarHeadLayout.playbarHead.pos = currentScrollEase; + + playbarHeadLayout.playbarHead.max = songLengthInPixels; + // Make sure the playbar is never nudged out of the correct spot. playbarHeadLayout.x = 4; playbarHeadLayout.y = FlxG.height - 48 - 8; - // Move the playhead to match the song position, if we aren't dragging it. - if (!playbarHeadDragging) - { - var songPosPercent = scrollPositionInPixels / (songLengthInPixels) * 100; - - if (playbarHeadLayout.playbarHead.value != songPosPercent) playbarHeadLayout.playbarHead.value = songPosPercent; - } - var songPos:Float = Conductor.instance.songPosition + Conductor.instance.instrumentalOffset; var songPosMilliseconds:String = Std.string(Math.floor(Math.abs(songPos) % 1000)).lpad('0', 2).substr(0, 2); var songPosSeconds:String = Std.string(Math.floor((Math.abs(songPos) / 1000) % 60)).lpad('0', 2); @@ -6134,43 +6116,12 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState */ function easeSongToScrollPosition(targetScrollPosition:Float):Void { - if (currentScrollEase != null) cancelScrollEase(currentScrollEase); - - currentScrollEase = FlxTween.tween(this, {scrollPositionInPixels: targetScrollPosition}, SCROLL_EASE_DURATION, - { - ease: FlxEase.quintInOut, - onUpdate: this.onScrollEaseUpdate, - onComplete: this.cancelScrollEase, - type: ONESHOT - }); - } - - /** - * Callback function executed every frame that the scroll position is being eased. - * @param _ - */ - function onScrollEaseUpdate(_:FlxTween):Void - { + currentScrollEase = Math.max(0, targetScrollPosition); + currentScrollEase = Math.min(currentScrollEase, songLengthInPixels); + scrollPositionInPixels = MathUtil.smoothLerp(scrollPositionInPixels, currentScrollEase, FlxG.elapsed, SCROLL_EASE_DURATION, 1 / 1000); moveSongToScrollPosition(); } - /** - * Callback function executed when cancelling an existing scroll position ease. - * Ensures that the ease is immediately cancelled and the scroll position is set to the target value. - */ - function cancelScrollEase(_:FlxTween):Void - { - if (currentScrollEase != null) - { - @:privateAccess - var targetScrollPosition:Float = currentScrollEase._properties.scrollPositionInPixels; - - currentScrollEase.cancel(); - currentScrollEase = null; - this.scrollPositionInPixels = targetScrollPosition; - } - } - /** * Fix the current scroll position after exiting the PlayState used when testing. */ @@ -6351,6 +6302,8 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState { if (audioInstTrack == null) return; + currentScrollEase = this.scrollPositionInPixels; + if (audioInstTrack.isPlaying) { // Pause From 76c8c8b520c137cfc658ea629cd269026a118552 Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:58:12 +0000 Subject: [PATCH 15/31] docs: Fix a 'ludem' -> 'ludum' typo in `CHANGELOG.md` --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fb4f02d481..faf1e7560f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -382,7 +382,7 @@ which would remove their rank if they had a lower one. - Improvements to video cutscenes and dialogue, allowing them to be easily skipped or restarted. - Updated Polymod by several major versions, allowing for fully dynamic asset replacement and support for scripted classes. - Completely refactored almost every part of the game's code for performance, stability, and extensibility. - - This is not the Ludem Dare game held together with sticks and glue you played three years ago. + - This is not the Ludum Dare game held together with sticks and glue you played three years ago. - Characters, stages, songs, story levels, and dialogue are now built from JSON data registries rather than being hardcoded. - All of these also support attaching scripts for custom behavior, more documentation on this soon. - You can forcibly reload the game's JSON data and scripts by pressing F5. From 090ddd1f1c2aa48fdb83127b2235041643c99af5 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Fri, 25 Oct 2024 13:54:27 -0400 Subject: [PATCH 16/31] fix: fixes the initial camera position on the debug menu --- source/funkin/ui/debug/DebugMenuSubState.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/source/funkin/ui/debug/DebugMenuSubState.hx b/source/funkin/ui/debug/DebugMenuSubState.hx index 45652095b0a..73c24912e6a 100644 --- a/source/funkin/ui/debug/DebugMenuSubState.hx +++ b/source/funkin/ui/debug/DebugMenuSubState.hx @@ -67,6 +67,7 @@ class DebugMenuSubState extends MusicBeatSubState #if sys createItem("OPEN CRASH LOG FOLDER", openLogFolder); #end + onMenuChange(items.members[0]); FlxG.camera.focusOn(new FlxPoint(camFocusPoint.x, camFocusPoint.y + 500)); } From e6b6b41766deb2e8655a8c2ddac3265f10dd82ab Mon Sep 17 00:00:00 2001 From: Hyper_ <40342021+NotHyper-474@users.noreply.github.com> Date: Sat, 26 Oct 2024 17:03:42 -0300 Subject: [PATCH 17/31] revert: "[BUGFIX?] Reset CWD before Preloader" (#3538) --- source/funkin/ui/transition/preload/FunkinPreloader.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/funkin/ui/transition/preload/FunkinPreloader.hx b/source/funkin/ui/transition/preload/FunkinPreloader.hx index 1b39a348271..e81bfbc4b7b 100644 --- a/source/funkin/ui/transition/preload/FunkinPreloader.hx +++ b/source/funkin/ui/transition/preload/FunkinPreloader.hx @@ -136,8 +136,6 @@ class FunkinPreloader extends FlxBasePreloader // We can't even call trace() yet, until Flixel loads. trace('Initializing custom preloader...'); - funkin.util.CLIUtil.resetWorkingDir(); - this.siteLockTitleText = Constants.SITE_LOCK_TITLE; this.siteLockBodyText = Constants.SITE_LOCK_DESC; } From e570dfb8e754f9cb29ac2d8fff6e8513bc68b630 Mon Sep 17 00:00:00 2001 From: Keoiki <55053690+Keoiki@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:11:49 +0300 Subject: [PATCH 18/31] fix: Fix beat/step ticks sometimes not appearing on non-4/4 time signatures in chart editor (#2860) Beat and step ticks now appear fully on 5/4, 6/4 and 9/8 time signatures. --- .../handlers/ChartEditorThemeHandler.hx | 80 +++++++------------ 1 file changed, 27 insertions(+), 53 deletions(-) diff --git a/source/funkin/ui/debug/charting/handlers/ChartEditorThemeHandler.hx b/source/funkin/ui/debug/charting/handlers/ChartEditorThemeHandler.hx index e42102a529c..ac8985dc15d 100644 --- a/source/funkin/ui/debug/charting/handlers/ChartEditorThemeHandler.hx +++ b/source/funkin/ui/debug/charting/handlers/ChartEditorThemeHandler.hx @@ -253,42 +253,23 @@ class ChartEditorThemeHandler var bottomTickY:Float = state.measureTickBitmap.height - (measureTickWidth / 2); state.measureTickBitmap.fillRect(new Rectangle(0, bottomTickY, state.measureTickBitmap.width, measureTickWidth / 2), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - // Draw the beat ticks. - var beatTick2Y:Float = state.measureTickBitmap.height * 1 / Conductor.instance.beatsPerMeasure - (beatTickWidth / 2); - var beatTick3Y:Float = state.measureTickBitmap.height * 2 / Conductor.instance.beatsPerMeasure - (beatTickWidth / 2); - var beatTick4Y:Float = state.measureTickBitmap.height * 3 / Conductor.instance.beatsPerMeasure - (beatTickWidth / 2); - var beatTickLength:Float = state.measureTickBitmap.width * 2 / 3; - state.measureTickBitmap.fillRect(new Rectangle(0, beatTick2Y, beatTickLength, beatTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, beatTick3Y, beatTickLength, beatTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, beatTick4Y, beatTickLength, beatTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - - // Draw the step ticks. - // TODO: Make this a loop or something. - var stepTick2Y:Float = state.measureTickBitmap.height * 1 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick3Y:Float = state.measureTickBitmap.height * 2 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick4Y:Float = state.measureTickBitmap.height * 3 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick6Y:Float = state.measureTickBitmap.height * 5 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick7Y:Float = state.measureTickBitmap.height * 6 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick8Y:Float = state.measureTickBitmap.height * 7 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick10Y:Float = state.measureTickBitmap.height * 9 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick11Y:Float = state.measureTickBitmap.height * 10 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick12Y:Float = state.measureTickBitmap.height * 11 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick14Y:Float = state.measureTickBitmap.height * 13 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick15Y:Float = state.measureTickBitmap.height * 14 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTick16Y:Float = state.measureTickBitmap.height * 15 / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); - var stepTickLength:Float = state.measureTickBitmap.width * 1 / 3; - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick2Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick3Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick4Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick6Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick7Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick8Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick10Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick11Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick12Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick14Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick15Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.measureTickBitmap.fillRect(new Rectangle(0, stepTick16Y, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); + // Draw the beat and step ticks. No need for two seperate loops thankfully. + // This'll be fun to update when beat tuplets become functional. + for (i in 1...(Conductor.instance.stepsPerMeasure)) + { + if ((i % Constants.STEPS_PER_BEAT) == 0) // If we're on a beat, draw a beat tick. + { + var beatTickY:Float = state.measureTickBitmap.height * i / Conductor.instance.stepsPerMeasure - (beatTickWidth / 2); + var beatTickLength:Float = state.measureTickBitmap.width * 2 / 3; + state.measureTickBitmap.fillRect(new Rectangle(0, beatTickY, beatTickLength, beatTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); + } + else // Else, draw a step tick. + { + var stepTickY:Float = state.measureTickBitmap.height * i / Conductor.instance.stepsPerMeasure - (stepTickWidth / 2); + var stepTickLength:Float = state.measureTickBitmap.width * 1 / 3; + state.measureTickBitmap.fillRect(new Rectangle(0, stepTickY, stepTickLength, stepTickWidth), GRID_MEASURE_DIVIDER_COLOR_LIGHT); + } + } } /** @@ -314,23 +295,16 @@ class ChartEditorThemeHandler state.offsetTickBitmap.fillRect(new Rectangle(rightTickX, 0, majorTickWidth / 2, majorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); // Draw the minor ticks. - var minorTick2X:Float = state.offsetTickBitmap.width * 1 / 10 - (minorTickWidth / 2); - var minorTick3X:Float = state.offsetTickBitmap.width * 2 / 10 - (minorTickWidth / 2); - var minorTick4X:Float = state.offsetTickBitmap.width * 3 / 10 - (minorTickWidth / 2); - var minorTick5X:Float = state.offsetTickBitmap.width * 4 / 10 - (minorTickWidth / 2); - var minorTick7X:Float = state.offsetTickBitmap.width * 6 / 10 - (minorTickWidth / 2); - var minorTick8X:Float = state.offsetTickBitmap.width * 7 / 10 - (minorTickWidth / 2); - var minorTick9X:Float = state.offsetTickBitmap.width * 8 / 10 - (minorTickWidth / 2); - var minorTick10X:Float = state.offsetTickBitmap.width * 9 / 10 - (minorTickWidth / 2); - var minorTickLength:Float = state.offsetTickBitmap.height * 1 / 3; - state.offsetTickBitmap.fillRect(new Rectangle(minorTick2X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick3X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick4X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick5X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick7X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick8X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick9X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); - state.offsetTickBitmap.fillRect(new Rectangle(minorTick10X, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); + for (i in 1...11) + { + if (i % 5 == 0) + { + continue; + } + var minorTickX:Float = state.offsetTickBitmap.width * i / 10 - (minorTickWidth / 2); + var minorTickLength:Float = state.offsetTickBitmap.height * 1 / 3; + state.offsetTickBitmap.fillRect(new Rectangle(minorTickX, 0, minorTickWidth, minorTickLength), GRID_MEASURE_DIVIDER_COLOR_LIGHT); + } // Draw the offset ticks. // var ticksWidth:Int = Std.int(ChartEditorState.GRID_SIZE * TOTAL_COLUMN_COUNT); // 1 grid squares wide. From 101b9f59b3df4bee7eb61624c1f7baef8785bf89 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Mon, 28 Oct 2024 14:24:30 -0400 Subject: [PATCH 19/31] assets submod --- art | 2 +- assets | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/art b/art index fbd3e3df777..66572f85d82 160000 --- a/art +++ b/art @@ -1 +1 @@ -Subproject commit fbd3e3df77734606d88516770b71b56e6fa04bce +Subproject commit 66572f85d826ce2ec1d45468c12733b161237ffa diff --git a/assets b/assets index 4abd6cc06e5..021644d710a 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 4abd6cc06e56c6d56440fa858262932db118250c +Subproject commit 021644d710ad5aceb185f0fd72bb78618d02df19 From 6321983eba40cb517a3b6ba422a21b3e6bfb9b13 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Mon, 28 Oct 2024 14:27:00 -0400 Subject: [PATCH 20/31] assets submod --- assets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets b/assets index 021644d710a..c1899ffbefb 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 021644d710ad5aceb185f0fd72bb78618d02df19 +Subproject commit c1899ffbefb9a7c98b030c75a33623431d7ea6ba From 0d8e4a53305d6d069454812766300122f3581e31 Mon Sep 17 00:00:00 2001 From: Cameron Taylor Date: Wed, 30 Oct 2024 12:41:28 -0400 Subject: [PATCH 21/31] fix: re-enable precise chart editor scrolling, and also fix smooth scroll playhead/playbar playback (#3806) --- source/funkin/ui/debug/charting/ChartEditorState.hx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index 0358846934f..44c14be06e4 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -2729,6 +2729,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState { // Update the conductor and audio tracks to match. currentScrollEase = d.value; + easeSongToScrollPosition(currentScrollEase); } } @@ -2741,7 +2742,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState playbarHeadDraggingWasPlaying = false; // Disabled code to resume song playback on drag. - // startAudioPlayback(); + startAudioPlayback(); } } @@ -3873,7 +3874,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState } // Mouse Wheel = Scroll - if (FlxG.mouse.wheel != 0 && !FlxG.keys.pressed.CONTROL) + if (FlxG.mouse.wheel != 0) { scrollAmount = -50 * FlxG.mouse.wheel; shouldPause = true; @@ -4469,6 +4470,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState 0, songLengthInPixels); currentScrollEase = clickedPosInPixels; + easeSongToScrollPosition(currentScrollEase); } else if (scrollAnchorScreenPos != null) { From 1c2fb43ae16cf40be5ef94c40b047e8e772b1211 Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Fri, 17 Jan 2025 00:40:22 +0000 Subject: [PATCH 22/31] Update PolymodHandler.hx (#3993) --- source/funkin/modding/PolymodHandler.hx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/funkin/modding/PolymodHandler.hx b/source/funkin/modding/PolymodHandler.hx index eb0e77fc552..e5bcae0f558 100644 --- a/source/funkin/modding/PolymodHandler.hx +++ b/source/funkin/modding/PolymodHandler.hx @@ -156,6 +156,8 @@ class PolymodHandler // Parsing rules for various data formats. parseRules: buildParseRules(), + skipDependencyErrors: true, + // Parse hxc files and register the scripted classes in them. useScriptedClasses: true, loadScriptsAsync: #if html5 true #else false #end, From 3aad825f865c4ed87016983d44121e2c1610d332 Mon Sep 17 00:00:00 2001 From: Til <89487150+TechnikTil@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:41:04 -0700 Subject: [PATCH 23/31] use event.isComboBreak instead of isComboBreak (#3936) --- 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 c662f99186b..b62a6331ee2 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -2546,7 +2546,7 @@ class PlayState extends MusicBeatSubState Highscore.tallies.totalNotesHit++; // Display the hit on the strums - playerStrumline.hitNote(note, !isComboBreak); + playerStrumline.hitNote(note, !event.isComboBreak); if (event.doesNotesplash) playerStrumline.playNoteSplash(note.noteData.getDirection()); if (note.isHoldNote && note.holdNoteSprite != null) playerStrumline.playNoteHoldCover(note.holdNoteSprite); vocals.playerVolume = 1; From bc521b7e7f573854b5cd76c052ba6fe88931e9bf Mon Sep 17 00:00:00 2001 From: UltimateQuack Date: Thu, 16 Jan 2025 21:51:15 -0300 Subject: [PATCH 24/31] "Fixed" the Apache 2.0 LICENSE file part (#3843) very simple --- LICENSE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index f7c1c42e98a..68a0cba218b 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -8,7 +8,7 @@ All Rights Reserved. "Friday Night Funkin'" and the "Friday Night Funkin'" logo You can view the `funkin-assets` license here: (https://github.com/FunkinCrew/funkin.assets/blob/main/LICENSE.md) ## Apache 2.0 License - +``` Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -210,3 +210,4 @@ You can view the `funkin-assets` license here: (https://github.com/FunkinCrew/fu WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +``` From c3a188b3571733f55068d9009761b2db0ef2a2f2 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Thu, 16 Jan 2025 18:02:59 -0700 Subject: [PATCH 25/31] [GITHUB] Create a dedicated charting issue template (and bump version to 0.5.3) (#3834) * Create Charting Issue template * Include images and videos in charting issue template * Update version in bug report template * Update version in crash report template --- .github/ISSUE_TEMPLATE/bug.yml | 2 +- .github/ISSUE_TEMPLATE/charting.yml | 70 +++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/crash.yml | 2 +- 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/charting.yml diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 96aa06c3f25..71089ba04a6 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -41,7 +41,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.5.0 + placeholder: ex. 0.5.3 validations: required: true diff --git a/.github/ISSUE_TEMPLATE/charting.yml b/.github/ISSUE_TEMPLATE/charting.yml new file mode 100644 index 00000000000..a56afc543e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/charting.yml @@ -0,0 +1,70 @@ +name: Charting Issue +description: Report an issue with the placement of notes in the game. +labels: ["type: charting issue", "status: pending triage"] +title: "Charting Issue: " +body: + - type: checkboxes + attributes: + label: Issue Checklist + description: Be sure to complete these steps to increase the chances of your issue being addressed! + options: + - label: I have properly named my issue + - label: I have checked the Issues/Discussions pages to see if my issue has already been reported + + - type: dropdown + attributes: + label: Platform + description: Which platform are you playing on? + options: + - Newgrounds (Web/HTML5) + - Itch.io (Web/HTML5) + - Itch.io (Downloadable Build) - Windows + - Itch.io (Downloadable Build) - MacOS + - Itch.io (Downloadable Build) - Linux + - Compiled from GitHub Source Code + validations: + required: true + + - type: dropdown + attributes: + label: Browser + description: (Web/HTML5 users only) Which browser are you playing on? + options: + - Google Chrome + - Microsoft Edge + - Firefox + - Opera + - Safari + - Other (Specify in Description field) + + - type: input + 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.5.3 + validations: + required: true + + - type: markdown + attributes: + value: "## Describe the charting issue(s)." + + - type: markdown + attributes: + value: "### Please do not report issues from other engines. These must be reported in their respective repositories." + + - type: textarea + attributes: + label: Location + description: Where did you find the issue(s)? Include the name of the song, the variation, the difficulty, the time/section of the song, and any images or videos. + placeholder: ex. Cocoa Erect on Erect/Nightmare difficulties at Section 30 + validations: + required: true + + - type: textarea + attributes: + label: Description + description: Why do you believe this is an issue? Is a note at the wrong time, a hold note too short/long, or something else? + placeholder: Describe the charting issue(s) here... + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/crash.yml b/.github/ISSUE_TEMPLATE/crash.yml index 3e8fb08dd3f..a91f670d0ae 100644 --- a/.github/ISSUE_TEMPLATE/crash.yml +++ b/.github/ISSUE_TEMPLATE/crash.yml @@ -41,7 +41,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.5.0 + placeholder: ex. 0.5.3 validations: required: true From 5d5d12dbfdc2fc0ab005081de648ff6ecd65d1f8 Mon Sep 17 00:00:00 2001 From: JVN-Pixels <146671762+JVNpixels@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:05:37 -0800 Subject: [PATCH 26/31] [ENHANCEMENT]: Compiling Error Issue Template (#3835) * Create compiling.yml * Update compiling.yml * Update compiling.yml * Update compiling.yml * Update compiling.yml * Update compiling.yml * charting (Hundrec) thanks hundrec i like this * Delete .github/ISSUE_TEMPLATE/charting.yml --- .github/ISSUE_TEMPLATE/compiling.yml | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/compiling.yml diff --git a/.github/ISSUE_TEMPLATE/compiling.yml b/.github/ISSUE_TEMPLATE/compiling.yml new file mode 100644 index 00000000000..cab9b34cd0f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/compiling.yml @@ -0,0 +1,47 @@ +name: Compiling Report +description: Report an issue with compiling the game. +labels: ["type: compilation help", "status: pending triage"] +title: "Compiling Report: " +body: + - type: checkboxes + attributes: + label: Issue Checklist + description: Be sure to complete these steps to increase the chances of your issue being addressed! + options: + - label: I have properly named my issue + - label: I have checked the Issues/Discussions pages to see if my issue has already been reported + + - type: dropdown + attributes: + label: Platform + description: Which platform are you compiling to/for? + options: + - Web/HTML5 + - Desktop + - Other + validations: + required: true + + - type: input + 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.5.3 + validations: + required: true + + - type: markdown + attributes: + value: "## Describe your compiling error." + + - type: markdown + attributes: + value: "### Please do not report issues from other engines. These must be reported in their respective repositories." + + - type: textarea + attributes: + label: Description (include any images, videos, errors of terminal or console, error logs) + description: Provide as much detail as you can. The better others understand your issue, the more they can help you! + placeholder: Describe your issue here... + validations: + required: true From 48a72ce32cac8acd9314e7e608756ff04e149cfc Mon Sep 17 00:00:00 2001 From: Hundrec Date: Wed, 22 Jan 2025 19:27:36 -0700 Subject: [PATCH 27/31] Add status: stale to auto-close (#4017) --- .github/label-actions.yml | 53 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index a99d17660ff..4d5429cf13d 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -7,9 +7,9 @@ comment: > This issue is a duplicate. Please direct all discussion to the original issue. # Close the issue - close: true + close: false # Set a close reason - close-reason: 'not planned' + # close-reason: 'not planned' # Remove other status labels unlabel: - 'status: accepted' @@ -22,6 +22,7 @@ - 'status: planned' - 'status: rejected' - 'status: resolved' + - 'status: resolved internally' - 'status: reviewing internally' - 'status: stale' prs: @@ -29,6 +30,28 @@ comment: > This pull request is a duplicate. Please direct all discussion to the original pull request. # Close the pull request + close: false + # Set a close reason + # close-reason: 'not planned' + # Remove other status labels + unlabel: + - 'status: accepted' + - 'status: bug reproduced' + - 'status: cannot reproduce' + - 'status: needs clarification' + - 'status: needs revision' + - 'status: pending pull request' + - 'status: pending triage' + - 'status: planned' + - 'status: rejected' + - 'status: resolved' + - 'status: resolved internally' + - 'status: reviewing internally' + - 'status: stale' + +'status: stale': + issues: + # Close the issue close: true # Set a close reason close-reason: 'not planned' @@ -37,6 +60,7 @@ - 'status: accepted' - 'status: bug reproduced' - 'status: cannot reproduce' + - 'status: duplicate' - 'status: needs clarification' - 'status: needs revision' - 'status: pending pull request' @@ -44,8 +68,28 @@ - 'status: planned' - 'status: rejected' - 'status: resolved' + - 'status: resolved internally' + - 'status: reviewing internally' + prs: + # Close the pull request + close: true + # Set a close reason + close-reason: 'not planned' + # Remove other status labels + unlabel: + - 'status: accepted' + - 'status: bug reproduced' + - 'status: cannot reproduce' + - 'status: duplicate' + - 'status: needs clarification' + - 'status: needs revision' + - 'status: pending pull request' + - 'status: pending triage' + - 'status: planned' + - 'status: rejected' + - 'status: resolved' + - 'status: resolved internally' - 'status: reviewing internally' - - 'status: stale' 'status: rejected': issues: @@ -65,6 +109,7 @@ - 'status: pending triage' - 'status: planned' - 'status: resolved' + - 'status: resolved internally' - 'status: reviewing internally' - 'status: stale' prs: @@ -84,6 +129,7 @@ - 'status: pending triage' - 'status: planned' - 'status: resolved' + - 'status: resolved internally' - 'status: reviewing internally' - 'status: stale' @@ -105,5 +151,6 @@ - 'status: pending triage' - 'status: planned' - 'status: rejected' + - 'status: resolved internally' - 'status: reviewing internally' - 'status: stale' From 981aad214fbe5d270ef86b40ade707fce781c25a Mon Sep 17 00:00:00 2001 From: Hundrec Date: Wed, 22 Jan 2025 21:31:59 -0700 Subject: [PATCH 28/31] Change size label names in PR labeler (#3918) --- .github/changed-lines-count-labeler.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/changed-lines-count-labeler.yml b/.github/changed-lines-count-labeler.yml index 1de00e62f8f..9b2f338ce2c 100644 --- a/.github/changed-lines-count-labeler.yml +++ b/.github/changed-lines-count-labeler.yml @@ -1,12 +1,12 @@ -# Add 'small' to any changes below 10 lines -small: +# Add 'size: small' to any changes below 10 lines +'size: small': max: 9 -# Add 'medium' to any changes between 10 and 100 lines -medium: +# Add 'size: medium' to any changes between 10 and 100 lines +'size: medium': min: 10 max: 99 -# Add 'large' to any changes of at least 100 lines -large: +# Add 'size: large' to any changes of at least 100 lines +'size: large': min: 100 From 2adae38805dc2550ee936a117d10b2cac0830316 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Thu, 23 Jan 2025 14:18:37 -0700 Subject: [PATCH 29/31] Update Contributing section in README (#4026) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29077d7f157..9239d266c1d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ To learn how to install the necessary dependencies and compile the game from sou # Contributing -Please check out our [Contributor's guide](./CONTRIBUTORS.md) on how you can actively participate in the development of Friday Night Funkin'. +You can actively participate in the development of Friday Night Funkin' by opening a [bug report](https://github.com/FunkinCrew/Funkin/issues) or submitting a [code contribution](https://github.com/FunkinCrew/Funkin/pulls)! # Modding From 7e0f4d9c8497f0c5c687b4f44d1dc7ffa73426c1 Mon Sep 17 00:00:00 2001 From: Abnormal <86753001+AbnormalPoof@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:19:58 +0000 Subject: [PATCH 30/31] Update labeler workflow (#4023) --- .github/labeler.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 9cf784f4ca6..414df5a31e3 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,11 +1,18 @@ # Add Documentation tag to PR's changing markdown files, or anything in the docs folder -Documentation: +'pr: documentation': - changed-files: - any-glob-to-any-file: - docs/* - '**/*.md' # Add Haxe tag to PR's changing haxe code files -Haxe: +'pr: haxe': - changed-files: - any-glob-to-any-file: '**/*.hx' + +# Add GitHub tag to PR's changing yml files, or anything in the .github folder +'pr: github': +- changed-files: + - any-glob-to-any-file: + - github/* + - '**/*.yml' From 0c06ba942e74c6c40ab3c3b7e23bc1828ec3aa98 Mon Sep 17 00:00:00 2001 From: Hundrec Date: Fri, 24 Jan 2025 16:21:34 -0700 Subject: [PATCH 31/31] Add needs r&d label to unlabel list (#4034) --- .github/label-actions.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/label-actions.yml b/.github/label-actions.yml index 4d5429cf13d..ef7448ab26b 100644 --- a/.github/label-actions.yml +++ b/.github/label-actions.yml @@ -16,6 +16,7 @@ - 'status: bug reproduced' - 'status: cannot reproduce' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -31,14 +32,13 @@ This pull request is a duplicate. Please direct all discussion to the original pull request. # Close the pull request close: false - # Set a close reason - # close-reason: 'not planned' # Remove other status labels unlabel: - 'status: accepted' - 'status: bug reproduced' - 'status: cannot reproduce' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -62,6 +62,7 @@ - 'status: cannot reproduce' - 'status: duplicate' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -73,8 +74,6 @@ prs: # Close the pull request close: true - # Set a close reason - close-reason: 'not planned' # Remove other status labels unlabel: - 'status: accepted' @@ -82,6 +81,7 @@ - 'status: cannot reproduce' - 'status: duplicate' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -104,6 +104,7 @@ - 'status: cannot reproduce' - 'status: duplicate' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -115,8 +116,6 @@ prs: # Close the pull request close: true - # Set a close reason - close-reason: 'not planned' # Remove other status labels unlabel: - 'status: accepted' @@ -124,6 +123,7 @@ - 'status: cannot reproduce' - 'status: duplicate' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage' @@ -146,6 +146,7 @@ - 'status: cannot reproduce' - 'status: duplicate' - 'status: needs clarification' + - 'status: needs r&d' - 'status: needs revision' - 'status: pending pull request' - 'status: pending triage'