From dc638a130371206407f7e4e0db4a69f599bb6ec3 Mon Sep 17 00:00:00 2001 From: EliteMasterEric Date: Sat, 23 Mar 2024 15:34:37 -0400 Subject: [PATCH] Fix a bunch of merge bugs. --- source/funkin/Conductor.hx | 16 +-- source/funkin/InitState.hx | 12 +- source/funkin/data/DataParse.hx | 4 +- source/funkin/data/conversation/TODO.md | 0 source/funkin/data/dialogue/TODO.md | 0 .../data/dialogue/conversation/CHANGELOG.md | 9 ++ .../{ => conversation}/ConversationData.hx | 2 +- .../ConversationRegistry.hx | 4 +- .../data/dialogue/dialoguebox/CHANGELOG.md | 13 ++ .../{ => dialoguebox}/DialogueBoxData.hx | 2 +- .../{ => dialoguebox}/DialogueBoxRegistry.hx | 4 +- .../funkin/data/dialogue/speaker/CHANGELOG.md | 9 ++ .../dialogue/{ => speaker}/SpeakerData.hx | 2 +- .../dialogue/{ => speaker}/SpeakerRegistry.hx | 4 +- .../data/freeplay/{ => album}/AlbumData.hx | 2 +- .../freeplay/{ => album}/AlbumRegistry.hx | 4 +- .../funkin/data/freeplay/album/CHANGELOG.md | 9 ++ source/funkin/data/song/CHANGELOG.md | 36 +++++ source/funkin/data/speaker/TODO.md | 0 source/funkin/data/stage/CHANGELOG.md | 14 ++ source/funkin/data/stage/StageRegistry.hx | 2 +- source/funkin/data/story/level/CHANGELOG.md | 9 ++ .../data/{ => story}/level/LevelData.hx | 4 +- .../data/{ => story}/level/LevelRegistry.hx | 4 +- source/funkin/modding/PolymodHandler.hx | 10 +- source/funkin/play/PlayState.hx | 10 +- .../play/cutscene/dialogue/Conversation.hx | 14 +- .../play/cutscene/dialogue/DialogueBox.hx | 4 +- .../funkin/play/cutscene/dialogue/Speaker.hx | 4 +- source/funkin/play/notes/Strumline.hx | 133 +++--------------- source/funkin/ui/MusicBeatState.hx | 16 ++- source/funkin/ui/MusicBeatSubState.hx | 7 +- .../debug/dialogue/ConversationDebugState.hx | 14 +- source/funkin/ui/freeplay/Album.hx | 4 +- source/funkin/ui/freeplay/AlbumRoll.hx | 2 +- source/funkin/ui/freeplay/FreeplayState.hx | 2 +- source/funkin/ui/options/OptionsState.hx | 4 + source/funkin/ui/story/Level.hx | 4 +- source/funkin/ui/story/LevelProp.hx | 2 +- source/funkin/ui/story/StoryMenuState.hx | 2 +- 40 files changed, 216 insertions(+), 181 deletions(-) delete mode 100644 source/funkin/data/conversation/TODO.md delete mode 100644 source/funkin/data/dialogue/TODO.md create mode 100644 source/funkin/data/dialogue/conversation/CHANGELOG.md rename source/funkin/data/dialogue/{ => conversation}/ConversationData.hx (98%) rename source/funkin/data/dialogue/{ => conversation}/ConversationRegistry.hx (95%) create mode 100644 source/funkin/data/dialogue/dialoguebox/CHANGELOG.md rename source/funkin/data/dialogue/{ => dialoguebox}/DialogueBoxData.hx (98%) rename source/funkin/data/dialogue/{ => dialoguebox}/DialogueBoxRegistry.hx (95%) create mode 100644 source/funkin/data/dialogue/speaker/CHANGELOG.md rename source/funkin/data/dialogue/{ => speaker}/SpeakerData.hx (97%) rename source/funkin/data/dialogue/{ => speaker}/SpeakerRegistry.hx (96%) rename source/funkin/data/freeplay/{ => album}/AlbumData.hx (95%) rename source/funkin/data/freeplay/{ => album}/AlbumRegistry.hx (96%) create mode 100644 source/funkin/data/freeplay/album/CHANGELOG.md create mode 100644 source/funkin/data/song/CHANGELOG.md delete mode 100644 source/funkin/data/speaker/TODO.md create mode 100644 source/funkin/data/stage/CHANGELOG.md create mode 100644 source/funkin/data/story/level/CHANGELOG.md rename source/funkin/data/{ => story}/level/LevelData.hx (95%) rename source/funkin/data/{ => story}/level/LevelRegistry.hx (97%) diff --git a/source/funkin/Conductor.hx b/source/funkin/Conductor.hx index aba154814..5b207c045 100644 --- a/source/funkin/Conductor.hx +++ b/source/funkin/Conductor.hx @@ -233,26 +233,26 @@ class Conductor function get_inputOffset():Int { - return Save.get().options.inputOffset; + return Save.instance.options.inputOffset; } function set_inputOffset(value:Int):Int { - Save.get().options.inputOffset = value; - Save.get().flush(); - return Save.get().options.inputOffset; + Save.instance.options.inputOffset = value; + Save.instance.flush(); + return Save.instance.options.inputOffset; } function get_audioVisualOffset():Int { - return Save.get().options.audioVisualOffset; + return Save.instance.options.audioVisualOffset; } function set_audioVisualOffset(value:Int):Int { - Save.get().options.audioVisualOffset = value; - Save.get().flush(); - return Save.get().options.audioVisualOffset; + Save.instance.options.audioVisualOffset = value; + Save.instance.flush(); + return Save.instance.options.audioVisualOffset; } /** diff --git a/source/funkin/InitState.hx b/source/funkin/InitState.hx index 6ea77ec18..59c19d6ce 100644 --- a/source/funkin/InitState.hx +++ b/source/funkin/InitState.hx @@ -16,14 +16,14 @@ import funkin.util.macro.MacroUtil; import funkin.util.WindowUtil; import funkin.play.PlayStatePlaylist; import openfl.display.BitmapData; -import funkin.data.level.LevelRegistry; +import funkin.data.story.level.LevelRegistry; import funkin.data.notestyle.NoteStyleRegistry; import funkin.data.event.SongEventRegistry; import funkin.data.stage.StageRegistry; -import funkin.data.dialogue.ConversationRegistry; -import funkin.data.dialogue.DialogueBoxRegistry; -import funkin.data.dialogue.SpeakerRegistry; -import funkin.data.freeplay.AlbumRegistry; +import funkin.data.dialogue.conversation.ConversationRegistry; +import funkin.data.dialogue.dialoguebox.DialogueBoxRegistry; +import funkin.data.dialogue.speaker.SpeakerRegistry; +import funkin.data.freeplay.album.AlbumRegistry; import funkin.data.song.SongRegistry; import funkin.play.character.CharacterData.CharacterDataParser; import funkin.modding.module.ModuleHandler; @@ -275,7 +275,7 @@ class InitState extends FlxState */ function startLevel(levelId:String, difficultyId:String = 'normal'):Void { - var currentLevel:funkin.ui.story.Level = funkin.data.level.LevelRegistry.instance.fetchEntry(levelId); + var currentLevel:funkin.ui.story.Level = funkin.data.story.level.LevelRegistry.instance.fetchEntry(levelId); if (currentLevel == null) { diff --git a/source/funkin/data/DataParse.hx b/source/funkin/data/DataParse.hx index 244d41132..472ffd6e7 100644 --- a/source/funkin/data/DataParse.hx +++ b/source/funkin/data/DataParse.hx @@ -120,7 +120,7 @@ class DataParse } } - public static function backdropData(json:Json, name:String):funkin.data.dialogue.ConversationData.BackdropData + public static function backdropData(json:Json, name:String):funkin.data.dialogue.conversation.ConversationData.BackdropData { switch (json.value) { @@ -152,7 +152,7 @@ class DataParse } } - public static function outroData(json:Json, name:String):Null + public static function outroData(json:Json, name:String):Null { switch (json.value) { diff --git a/source/funkin/data/conversation/TODO.md b/source/funkin/data/conversation/TODO.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/source/funkin/data/dialogue/TODO.md b/source/funkin/data/dialogue/TODO.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/source/funkin/data/dialogue/conversation/CHANGELOG.md b/source/funkin/data/dialogue/conversation/CHANGELOG.md new file mode 100644 index 000000000..f9ab99fab --- /dev/null +++ b/source/funkin/data/dialogue/conversation/CHANGELOG.md @@ -0,0 +1,9 @@ +# Dialogue Conversation Data Schema Changelog + +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.0] +Initial release. diff --git a/source/funkin/data/dialogue/ConversationData.hx b/source/funkin/data/dialogue/conversation/ConversationData.hx similarity index 98% rename from source/funkin/data/dialogue/ConversationData.hx rename to source/funkin/data/dialogue/conversation/ConversationData.hx index 795ddae9a..30e3f451b 100644 --- a/source/funkin/data/dialogue/ConversationData.hx +++ b/source/funkin/data/dialogue/conversation/ConversationData.hx @@ -1,4 +1,4 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.conversation; import funkin.data.animation.AnimationData; diff --git a/source/funkin/data/dialogue/ConversationRegistry.hx b/source/funkin/data/dialogue/conversation/ConversationRegistry.hx similarity index 95% rename from source/funkin/data/dialogue/ConversationRegistry.hx rename to source/funkin/data/dialogue/conversation/ConversationRegistry.hx index 9186ef786..e64d62831 100644 --- a/source/funkin/data/dialogue/ConversationRegistry.hx +++ b/source/funkin/data/dialogue/conversation/ConversationRegistry.hx @@ -1,7 +1,7 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.conversation; import funkin.play.cutscene.dialogue.Conversation; -import funkin.data.dialogue.ConversationData; +import funkin.data.dialogue.conversation.ConversationData; import funkin.play.cutscene.dialogue.ScriptedConversation; class ConversationRegistry extends BaseRegistry diff --git a/source/funkin/data/dialogue/dialoguebox/CHANGELOG.md b/source/funkin/data/dialogue/dialoguebox/CHANGELOG.md new file mode 100644 index 000000000..06604734a --- /dev/null +++ b/source/funkin/data/dialogue/dialoguebox/CHANGELOG.md @@ -0,0 +1,13 @@ +# Dialogue Box Data Schema Changelog + +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.1.0] +### Added +- Added an option to specify the font used by the dialogue box. Defaults to `Arial` if unspecified. + +## [1.0.0] +Initial release. diff --git a/source/funkin/data/dialogue/DialogueBoxData.hx b/source/funkin/data/dialogue/dialoguebox/DialogueBoxData.hx similarity index 98% rename from source/funkin/data/dialogue/DialogueBoxData.hx rename to source/funkin/data/dialogue/dialoguebox/DialogueBoxData.hx index a75a5595a..228d391c8 100644 --- a/source/funkin/data/dialogue/DialogueBoxData.hx +++ b/source/funkin/data/dialogue/dialoguebox/DialogueBoxData.hx @@ -1,4 +1,4 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.dialoguebox; import funkin.data.animation.AnimationData; diff --git a/source/funkin/data/dialogue/DialogueBoxRegistry.hx b/source/funkin/data/dialogue/dialoguebox/DialogueBoxRegistry.hx similarity index 95% rename from source/funkin/data/dialogue/DialogueBoxRegistry.hx rename to source/funkin/data/dialogue/dialoguebox/DialogueBoxRegistry.hx index 87205d96c..ec0feeaae 100644 --- a/source/funkin/data/dialogue/DialogueBoxRegistry.hx +++ b/source/funkin/data/dialogue/dialoguebox/DialogueBoxRegistry.hx @@ -1,7 +1,7 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.dialoguebox; import funkin.play.cutscene.dialogue.DialogueBox; -import funkin.data.dialogue.DialogueBoxData; +import funkin.data.dialogue.dialoguebox.DialogueBoxData; import funkin.play.cutscene.dialogue.ScriptedDialogueBox; class DialogueBoxRegistry extends BaseRegistry diff --git a/source/funkin/data/dialogue/speaker/CHANGELOG.md b/source/funkin/data/dialogue/speaker/CHANGELOG.md new file mode 100644 index 000000000..284e690e1 --- /dev/null +++ b/source/funkin/data/dialogue/speaker/CHANGELOG.md @@ -0,0 +1,9 @@ +# Dialogue Speaker Data Schema Changelog + +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.0] +Initial release. diff --git a/source/funkin/data/dialogue/SpeakerData.hx b/source/funkin/data/dialogue/speaker/SpeakerData.hx similarity index 97% rename from source/funkin/data/dialogue/SpeakerData.hx rename to source/funkin/data/dialogue/speaker/SpeakerData.hx index e8a2eacf0..458f91cab 100644 --- a/source/funkin/data/dialogue/SpeakerData.hx +++ b/source/funkin/data/dialogue/speaker/SpeakerData.hx @@ -1,4 +1,4 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.speaker; import funkin.data.animation.AnimationData; diff --git a/source/funkin/data/dialogue/SpeakerRegistry.hx b/source/funkin/data/dialogue/speaker/SpeakerRegistry.hx similarity index 96% rename from source/funkin/data/dialogue/SpeakerRegistry.hx rename to source/funkin/data/dialogue/speaker/SpeakerRegistry.hx index 6bd301dd7..7db501d41 100644 --- a/source/funkin/data/dialogue/SpeakerRegistry.hx +++ b/source/funkin/data/dialogue/speaker/SpeakerRegistry.hx @@ -1,7 +1,7 @@ -package funkin.data.dialogue; +package funkin.data.dialogue.speaker; import funkin.play.cutscene.dialogue.Speaker; -import funkin.data.dialogue.SpeakerData; +import funkin.data.dialogue.speaker.SpeakerData; import funkin.play.cutscene.dialogue.ScriptedSpeaker; class SpeakerRegistry extends BaseRegistry diff --git a/source/funkin/data/freeplay/AlbumData.hx b/source/funkin/data/freeplay/album/AlbumData.hx similarity index 95% rename from source/funkin/data/freeplay/AlbumData.hx rename to source/funkin/data/freeplay/album/AlbumData.hx index 265a01fce..bb6ca4f00 100644 --- a/source/funkin/data/freeplay/AlbumData.hx +++ b/source/funkin/data/freeplay/album/AlbumData.hx @@ -1,4 +1,4 @@ -package funkin.data.freeplay; +package funkin.data.freeplay.album; /** * A type definition for the data for an album of songs. diff --git a/source/funkin/data/freeplay/AlbumRegistry.hx b/source/funkin/data/freeplay/album/AlbumRegistry.hx similarity index 96% rename from source/funkin/data/freeplay/AlbumRegistry.hx rename to source/funkin/data/freeplay/album/AlbumRegistry.hx index 78fba451b..c04464fd2 100644 --- a/source/funkin/data/freeplay/AlbumRegistry.hx +++ b/source/funkin/data/freeplay/album/AlbumRegistry.hx @@ -1,7 +1,7 @@ -package funkin.data.freeplay; +package funkin.data.freeplay.album; import funkin.ui.freeplay.Album; -import funkin.data.freeplay.AlbumData; +import funkin.data.freeplay.album.AlbumData; import funkin.ui.freeplay.ScriptedAlbum; class AlbumRegistry extends BaseRegistry diff --git a/source/funkin/data/freeplay/album/CHANGELOG.md b/source/funkin/data/freeplay/album/CHANGELOG.md new file mode 100644 index 000000000..ae307465e --- /dev/null +++ b/source/funkin/data/freeplay/album/CHANGELOG.md @@ -0,0 +1,9 @@ +# Freeplay Album Data Schema Changelog + +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.0] +Initial release. diff --git a/source/funkin/data/song/CHANGELOG.md b/source/funkin/data/song/CHANGELOG.md new file mode 100644 index 000000000..3cd3af070 --- /dev/null +++ b/source/funkin/data/song/CHANGELOG.md @@ -0,0 +1,36 @@ +# Song Chart Data Schema Changelog + +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.2.2] +### Added +- Added `playData.previewStart` and `playData.previewEnd` fields to specify when in the song should the song's audio should be played as a preview in Freeplay. + +## [2.2.1] +### Added +- Added `playData.offsets` field to specify instrumental and vocal offsets. + +## [2.2.0] +### Added +- Added `playData.album` to specify the album art to display in Freeplay. +- Added `playData.ratings` for difficulty ratings displayed in Freeplay. +### Changed +- Renamed `playData.noteSkin` to `playData.noteStyle`. + +## [2.1.0] +### Changed +- Rearranged the `playData` field. + - Refactored the `playableChars` +### Removed +- Removed the `variation` field. + +## [2.0.0] +Full refactor of the chart format for improved structure. +### Added +- Added a semantic version field for migration tracking. + +## [1.0.0] +Initial version from 2020. diff --git a/source/funkin/data/speaker/TODO.md b/source/funkin/data/speaker/TODO.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/source/funkin/data/stage/CHANGELOG.md b/source/funkin/data/stage/CHANGELOG.md new file mode 100644 index 000000000..879139db5 --- /dev/null +++ b/source/funkin/data/stage/CHANGELOG.md @@ -0,0 +1,14 @@ +# Story Mode Level Data Schema Changelog + +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.1] +### Added +- Added the ability to specify a hexadecimal color in the `assetPath` field instead of a texture key. + - In this case, the `scale` property will be used to determine the size of the rectangle in pixels. + +## [1.0.0] +Initial release. diff --git a/source/funkin/data/stage/StageRegistry.hx b/source/funkin/data/stage/StageRegistry.hx index b78292e5b..f18a643d2 100644 --- a/source/funkin/data/stage/StageRegistry.hx +++ b/source/funkin/data/stage/StageRegistry.hx @@ -11,7 +11,7 @@ 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.1"; + public static final STAGE_DATA_VERSION:thx.semver.Version = "1.0.0"; public static final STAGE_DATA_VERSION_RULE:thx.semver.VersionRule = "1.0.x"; diff --git a/source/funkin/data/story/level/CHANGELOG.md b/source/funkin/data/story/level/CHANGELOG.md new file mode 100644 index 000000000..75d1fe4c0 --- /dev/null +++ b/source/funkin/data/story/level/CHANGELOG.md @@ -0,0 +1,9 @@ +# Story Mode Level Data Schema Changelog + +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.0] +Initial release. diff --git a/source/funkin/data/level/LevelData.hx b/source/funkin/data/story/level/LevelData.hx similarity index 95% rename from source/funkin/data/level/LevelData.hx rename to source/funkin/data/story/level/LevelData.hx index f5e58ae16..957a9f66f 100644 --- a/source/funkin/data/level/LevelData.hx +++ b/source/funkin/data/story/level/LevelData.hx @@ -1,4 +1,4 @@ -package funkin.data.level; +package funkin.data.story.level; import funkin.data.animation.AnimationData; @@ -13,7 +13,7 @@ typedef LevelData = * When making changes to the level data format, this should be incremented, * and a migration function should be added to LevelDataParser to handle old versions. */ - @:default(funkin.data.level.LevelRegistry.LEVEL_DATA_VERSION) + @:default(funkin.data.story.level.LevelRegistry.LEVEL_DATA_VERSION) var version:String; /** diff --git a/source/funkin/data/level/LevelRegistry.hx b/source/funkin/data/story/level/LevelRegistry.hx similarity index 97% rename from source/funkin/data/level/LevelRegistry.hx rename to source/funkin/data/story/level/LevelRegistry.hx index 96712cba5..4f33207c8 100644 --- a/source/funkin/data/level/LevelRegistry.hx +++ b/source/funkin/data/story/level/LevelRegistry.hx @@ -1,7 +1,7 @@ -package funkin.data.level; +package funkin.data.story.level; import funkin.ui.story.Level; -import funkin.data.level.LevelData; +import funkin.data.story.level.LevelData; import funkin.ui.story.ScriptedLevel; class LevelRegistry extends BaseRegistry diff --git a/source/funkin/modding/PolymodHandler.hx b/source/funkin/modding/PolymodHandler.hx index a88476d4d..c53374454 100644 --- a/source/funkin/modding/PolymodHandler.hx +++ b/source/funkin/modding/PolymodHandler.hx @@ -1,14 +1,14 @@ package funkin.modding; -import funkin.data.dialogue.ConversationRegistry; -import funkin.data.dialogue.DialogueBoxRegistry; -import funkin.data.dialogue.SpeakerRegistry; +import funkin.data.dialogue.conversation.ConversationRegistry; +import funkin.data.dialogue.dialoguebox.DialogueBoxRegistry; +import funkin.data.dialogue.speaker.SpeakerRegistry; import funkin.data.event.SongEventRegistry; -import funkin.data.level.LevelRegistry; +import funkin.data.story.level.LevelRegistry; import funkin.data.notestyle.NoteStyleRegistry; import funkin.data.song.SongRegistry; import funkin.data.stage.StageRegistry; -import funkin.data.freeplay.AlbumRegistry; +import funkin.data.freeplay.album.AlbumRegistry; import funkin.modding.module.ModuleHandler; import funkin.play.character.CharacterData.CharacterDataParser; import funkin.save.Save; diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index 12b290afd..a4f665329 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -24,7 +24,7 @@ import flixel.util.FlxTimer; import funkin.api.newgrounds.NGio; import funkin.audio.VoicesGroup; import funkin.audio.VoicesGroup; -import funkin.data.dialogue.ConversationRegistry; +import funkin.data.dialogue.conversation.ConversationRegistry; import funkin.data.event.SongEventRegistry; import funkin.data.notestyle.NoteStyleData; import funkin.data.notestyle.NoteStyleRegistry; @@ -2011,10 +2011,10 @@ class PlayState extends MusicBeatSubState { if (note == null) continue; - // TODO: Does this properly account for offsets? - var hitWindowStart = note.strumTime - Constants.HIT_WINDOW_MS; - var hitWindowCenter = note.strumTime; - var hitWindowEnd = note.strumTime + Constants.HIT_WINDOW_MS; + // TODO: Are offsets being accounted for in the correct direction? + var hitWindowStart = note.strumTime + Conductor.instance.inputOffset - Constants.HIT_WINDOW_MS; + var hitWindowCenter = note.strumTime + Conductor.instance.inputOffset; + var hitWindowEnd = note.strumTime + Conductor.instance.inputOffset + Constants.HIT_WINDOW_MS; if (Conductor.instance.songPosition > hitWindowEnd) { diff --git a/source/funkin/play/cutscene/dialogue/Conversation.hx b/source/funkin/play/cutscene/dialogue/Conversation.hx index f865f3b7b..1b899acf5 100644 --- a/source/funkin/play/cutscene/dialogue/Conversation.hx +++ b/source/funkin/play/cutscene/dialogue/Conversation.hx @@ -16,13 +16,13 @@ import funkin.play.cutscene.dialogue.DialogueBox; import funkin.modding.IScriptedClass.IDialogueScriptedClass; import funkin.modding.events.ScriptEventDispatcher; import flixel.addons.display.FlxPieDial; -import funkin.data.dialogue.ConversationData; -import funkin.data.dialogue.ConversationData.DialogueEntryData; -import funkin.data.dialogue.ConversationRegistry; -import funkin.data.dialogue.SpeakerData; -import funkin.data.dialogue.SpeakerRegistry; -import funkin.data.dialogue.DialogueBoxData; -import funkin.data.dialogue.DialogueBoxRegistry; +import funkin.data.dialogue.conversation.ConversationData; +import funkin.data.dialogue.conversation.ConversationData.DialogueEntryData; +import funkin.data.dialogue.conversation.ConversationRegistry; +import funkin.data.dialogue.speaker.SpeakerData; +import funkin.data.dialogue.speaker.SpeakerRegistry; +import funkin.data.dialogue.dialoguebox.DialogueBoxData; +import funkin.data.dialogue.dialoguebox.DialogueBoxRegistry; /** * A high-level handler for dialogue. diff --git a/source/funkin/play/cutscene/dialogue/DialogueBox.hx b/source/funkin/play/cutscene/dialogue/DialogueBox.hx index fe4f13be0..6d3c0b8bc 100644 --- a/source/funkin/play/cutscene/dialogue/DialogueBox.hx +++ b/source/funkin/play/cutscene/dialogue/DialogueBox.hx @@ -11,8 +11,8 @@ import funkin.modding.events.ScriptEvent; import funkin.audio.FunkinSound; import funkin.modding.IScriptedClass.IDialogueScriptedClass; import flixel.util.FlxColor; -import funkin.data.dialogue.DialogueBoxData; -import funkin.data.dialogue.DialogueBoxRegistry; +import funkin.data.dialogue.dialoguebox.DialogueBoxData; +import funkin.data.dialogue.dialoguebox.DialogueBoxRegistry; class DialogueBox extends FlxSpriteGroup implements IDialogueScriptedClass implements IRegistryEntry { diff --git a/source/funkin/play/cutscene/dialogue/Speaker.hx b/source/funkin/play/cutscene/dialogue/Speaker.hx index 0d29481c4..7203ddb28 100644 --- a/source/funkin/play/cutscene/dialogue/Speaker.hx +++ b/source/funkin/play/cutscene/dialogue/Speaker.hx @@ -6,8 +6,8 @@ import funkin.modding.events.ScriptEvent; import flixel.graphics.frames.FlxFramesCollection; import funkin.util.assets.FlxAnimationUtil; import funkin.modding.IScriptedClass.IDialogueScriptedClass; -import funkin.data.dialogue.SpeakerData; -import funkin.data.dialogue.SpeakerRegistry; +import funkin.data.dialogue.speaker.SpeakerData; +import funkin.data.dialogue.speaker.SpeakerRegistry; /** * The character sprite which displays during dialogue. diff --git a/source/funkin/play/notes/Strumline.hx b/source/funkin/play/notes/Strumline.hx index aa87fa2e4..f2db41428 100644 --- a/source/funkin/play/notes/Strumline.hx +++ b/source/funkin/play/notes/Strumline.hx @@ -50,7 +50,20 @@ class Strumline extends FlxSpriteGroup * Usually you want to keep this as is, but if you are using a Strumline and * playing a sound that has it's own conductor, set this (LatencyState for example) */ - public var conductorInUse:Conductor = Conductor.instance; + public var conductorInUse(get, set):Conductor; + + var _conductorInUse:Null; + + function get_conductorInUse():Conductor + { + if (_conductorInUse == null) return Conductor.instance; + return _conductorInUse; + } + + function set_conductorInUse(value:Conductor):Conductor + { + return _conductorInUse = value; + } /** * The notes currently being rendered on the strumline. @@ -159,103 +172,9 @@ class Strumline extends FlxSpriteGroup } /** - * Process the notes in this strumline. - * @param onNoteMiss - * @param dispatchEvent TODO: better way to do this? Maybe passing in current dispatchEvent function from current state? + * Return notes that are within `Constants.HIT_WINDOW` ms of the strumline. + * @return An array of `NoteSprite` objects. */ - public function processNotes(?onNoteMiss:NoteSprite->Void, ?dispatchEvent:ScriptEvent->Void) - { - for (note in notes.members) - { - if (note == null || (isPlayer && note.hasBeenHit)) continue; - - var hitWindowStart = note.strumTime - Constants.HIT_WINDOW_MS; - var hitWindowCenter = note.strumTime; - var hitWindowEnd = note.strumTime + Constants.HIT_WINDOW_MS; - - if (conductorInUse.songPosition > hitWindowEnd) - { - if (!isPlayer && note.hasMissed) continue; - - note.tooEarly = false; - note.mayHit = false; - note.hasMissed = true; - - if (note.holdNoteSprite != null) note.holdNoteSprite.missedNote = true; - } - else if (conductorInUse.songPosition > hitWindowCenter) - { - // only run this on opponent strumlines! - if (!isPlayer) continue; - - // Call an event to allow canceling the note hit. - // NOTE: This is what handles the character animations! - var event:NoteScriptEvent = new NoteScriptEvent(NOTE_HIT, note, 0, true); - if (dispatchEvent != null) dispatchEvent(event); - - // Calling event.cancelEvent() skips all other logic! Neat! - if (event.eventCanceled) continue; - - // Command the opponent to hit the note on time. - // NOTE: This is what handles the strumline and cleaning up the note itself! - - hitNote(note); - - if (note.holdNoteSprite != null) - { - playNoteHoldCover(note.holdNoteSprite); - } - } - else if (conductorInUse.songPosition > hitWindowStart) - { - if (!isPlayer && (note.hasBeenHit || note.hasMissed)) continue; - - note.tooEarly = false; - note.mayHit = true; - note.hasMissed = false; - if (note.holdNoteSprite != null) note.holdNoteSprite.missedNote = false; - } - else - { - note.tooEarly = true; - note.mayHit = false; - note.hasMissed = false; - if (note.holdNoteSprite != null) note.holdNoteSprite.missedNote = false; - } - - if (note.hasMissed && !note.handledMiss) - { - var event:NoteScriptEvent = new NoteScriptEvent(NOTE_MISS, note, 0, true); - - if (dispatchEvent != null) dispatchEvent(event); - - if (event.eventCanceled) continue; - - if (onNoteMiss != null) onNoteMiss(note); - - note.handledMiss = true; - } - } - } - - var frameMax:Int; - var animFinishedEver:Bool; - - /** - * Get a list of notes within + or - the given strumtime. - * @param strumTime The current time. - * @param hitWindow The hit window to check. - */ - public function getNotesInRange(strumTime:Float, hitWindow:Float):Array - { - var hitWindowStart:Float = strumTime - hitWindow; - var hitWindowEnd:Float = strumTime + hitWindow; - - return notes.members.filter(function(note:NoteSprite) { - return note != null && note.alive && !note.hasBeenHit && note.strumTime >= hitWindowStart && note.strumTime <= hitWindowEnd; - }); - } - public function getNotesMayHit():Array { return notes.members.filter(function(note:NoteSprite) { @@ -263,6 +182,10 @@ class Strumline extends FlxSpriteGroup }); } + /** + * Return hold notes that are within `Constants.HIT_WINDOW` ms of the strumline. + * @return An array of `SustainTrail` objects. + */ public function getHoldNotesHitOrMissed():Array { return holdNotes.members.filter(function(holdNote:SustainTrail) { @@ -270,19 +193,6 @@ class Strumline extends FlxSpriteGroup }); } - public function getHoldNotesInRange(strumTime:Float, hitWindow:Float):Array - { - var hitWindowStart:Float = strumTime - hitWindow; - var hitWindowEnd:Float = strumTime + hitWindow; - - return holdNotes.members.filter(function(note:SustainTrail) { - return note != null - && note.alive - && note.strumTime >= hitWindowStart - && (note.strumTime + note.fullSustainLength) <= hitWindowEnd; - }); - } - public function getNoteSprite(noteData:SongNoteData):NoteSprite { if (noteData == null) return null; @@ -382,6 +292,9 @@ class Strumline extends FlxSpriteGroup { if (noteData.length == 0) return; + // Ensure note data gets reset if the song happens to loop. + if (conductorInUse.currentStep == 0) nextNoteIndex = 0; + var songStart:Float = PlayState.instance?.startTimestamp ?? 0.0; var hitWindowStart:Float = conductorInUse.songPosition - Constants.HIT_WINDOW_MS; var renderWindowStart:Float = conductorInUse.songPosition + RENDER_DISTANCE_MS; diff --git a/source/funkin/ui/MusicBeatState.hx b/source/funkin/ui/MusicBeatState.hx index d54fd5b8f..e76bf31a7 100644 --- a/source/funkin/ui/MusicBeatState.hx +++ b/source/funkin/ui/MusicBeatState.hx @@ -27,7 +27,21 @@ class MusicBeatState extends FlxTransitionableState implements IEventHandler public var leftWatermarkText:FlxText = null; public var rightWatermarkText:FlxText = null; - public var conductorInUse:Conductor = Conductor.instance; + + public var conductorInUse(get, set):Conductor; + + var _conductorInUse:Null; + + function get_conductorInUse():Conductor + { + if (_conductorInUse == null) return Conductor.instance; + return _conductorInUse; + } + + function set_conductorInUse(value:Conductor):Conductor + { + return _conductorInUse = value; + } public function new() { diff --git a/source/funkin/ui/MusicBeatSubState.hx b/source/funkin/ui/MusicBeatSubState.hx index ab62a082d..15c564db0 100644 --- a/source/funkin/ui/MusicBeatSubState.hx +++ b/source/funkin/ui/MusicBeatSubState.hx @@ -21,7 +21,7 @@ class MusicBeatSubState extends FlxSubState implements IEventHandler public var leftWatermarkText:FlxText = null; public var rightWatermarkText:FlxText = null; - public var conductorInUse(get, default):Conductor; + public var conductorInUse(get, set):Conductor; var _conductorInUse:Null; @@ -31,6 +31,11 @@ class MusicBeatSubState extends FlxSubState implements IEventHandler return _conductorInUse; } + function set_conductorInUse(value:Conductor):Conductor + { + return _conductorInUse = value; + } + public function new(bgColor:FlxColor = FlxColor.TRANSPARENT) { super(); diff --git a/source/funkin/ui/debug/dialogue/ConversationDebugState.hx b/source/funkin/ui/debug/dialogue/ConversationDebugState.hx index c2edcca5a..db7b35d3e 100644 --- a/source/funkin/ui/debug/dialogue/ConversationDebugState.hx +++ b/source/funkin/ui/debug/dialogue/ConversationDebugState.hx @@ -5,13 +5,13 @@ import funkin.modding.events.ScriptEventDispatcher; import funkin.modding.events.ScriptEvent; import flixel.util.FlxColor; import funkin.ui.MusicBeatState; -import funkin.data.dialogue.ConversationData; -import funkin.data.dialogue.ConversationRegistry; -import funkin.data.dialogue.DialogueBoxData; -import funkin.data.dialogue.DialogueBoxRegistry; -import funkin.data.dialogue.SpeakerData; -import funkin.data.dialogue.SpeakerRegistry; -import funkin.data.freeplay.AlbumRegistry; +import funkin.data.dialogue.conversation.ConversationData; +import funkin.data.dialogue.conversation.ConversationRegistry; +import funkin.data.dialogue.dialoguebox.DialogueBoxData; +import funkin.data.dialogue.dialoguebox.DialogueBoxRegistry; +import funkin.data.dialogue.speaker.SpeakerData; +import funkin.data.dialogue.speaker.SpeakerRegistry; +import funkin.data.freeplay.album.AlbumRegistry; import funkin.play.cutscene.dialogue.Conversation; import funkin.play.cutscene.dialogue.DialogueBox; import funkin.play.cutscene.dialogue.Speaker; diff --git a/source/funkin/ui/freeplay/Album.hx b/source/funkin/ui/freeplay/Album.hx index 7291c7357..a686bff51 100644 --- a/source/funkin/ui/freeplay/Album.hx +++ b/source/funkin/ui/freeplay/Album.hx @@ -1,7 +1,7 @@ package funkin.ui.freeplay; -import funkin.data.freeplay.AlbumData; -import funkin.data.freeplay.AlbumRegistry; +import funkin.data.freeplay.album.AlbumData; +import funkin.data.freeplay.album.AlbumRegistry; import funkin.data.IRegistryEntry; import flixel.graphics.FlxGraphic; diff --git a/source/funkin/ui/freeplay/AlbumRoll.hx b/source/funkin/ui/freeplay/AlbumRoll.hx index a1e63c9a1..6e8ef8fe2 100644 --- a/source/funkin/ui/freeplay/AlbumRoll.hx +++ b/source/funkin/ui/freeplay/AlbumRoll.hx @@ -6,7 +6,7 @@ import flixel.util.FlxSort; import flixel.tweens.FlxTween; import flixel.util.FlxTimer; import flixel.tweens.FlxEase; -import funkin.data.freeplay.AlbumRegistry; +import funkin.data.freeplay.album.AlbumRegistry; import funkin.graphics.FunkinSprite; import funkin.util.SortUtil; import openfl.utils.Assets; diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index fc11eec28..858ff922f 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -18,7 +18,7 @@ import flixel.util.FlxColor; import flixel.util.FlxSpriteUtil; import flixel.util.FlxTimer; import funkin.audio.FunkinSound; -import funkin.data.level.LevelRegistry; +import funkin.data.story.level.LevelRegistry; import funkin.data.song.SongRegistry; import funkin.graphics.FunkinCamera; import funkin.graphics.FunkinSprite; diff --git a/source/funkin/ui/options/OptionsState.hx b/source/funkin/ui/options/OptionsState.hx index 7b233f03d..152d9b817 100644 --- a/source/funkin/ui/options/OptionsState.hx +++ b/source/funkin/ui/options/OptionsState.hx @@ -1,5 +1,6 @@ package funkin.ui.options; +import funkin.ui.debug.latency.LatencyState; import flixel.FlxSprite; import flixel.FlxSubState; import flixel.addons.transition.FlxTransitionableState; @@ -182,6 +183,9 @@ class OptionsMenu extends Page add(items = new TextMenuList()); createItem("PREFERENCES", function() switchPage(Preferences)); createItem("CONTROLS", function() switchPage(Controls)); + createItem("INPUT OFFSETS", function() { + FlxG.state.openSubState(new LatencyState()); + }); #if newgrounds if (NGio.isLoggedIn) createItem("LOGOUT", selectLogout); diff --git a/source/funkin/ui/story/Level.hx b/source/funkin/ui/story/Level.hx index 626fb8e52..22f10f096 100644 --- a/source/funkin/ui/story/Level.hx +++ b/source/funkin/ui/story/Level.hx @@ -6,8 +6,8 @@ import flixel.util.FlxColor; import funkin.play.song.Song; import funkin.data.IRegistryEntry; import funkin.data.song.SongRegistry; -import funkin.data.level.LevelRegistry; -import funkin.data.level.LevelData; +import funkin.data.story.level.LevelRegistry; +import funkin.data.story.level.LevelData; /** * An object used to retrieve data about a story mode level (also known as "weeks"). diff --git a/source/funkin/ui/story/LevelProp.hx b/source/funkin/ui/story/LevelProp.hx index d8eae9c77..ffc756e1c 100644 --- a/source/funkin/ui/story/LevelProp.hx +++ b/source/funkin/ui/story/LevelProp.hx @@ -2,7 +2,7 @@ package funkin.ui.story; import funkin.play.stage.Bopper; import funkin.util.assets.FlxAnimationUtil; -import funkin.data.level.LevelData; +import funkin.data.story.level.LevelData; class LevelProp extends Bopper { diff --git a/source/funkin/ui/story/StoryMenuState.hx b/source/funkin/ui/story/StoryMenuState.hx index 9ce110c73..3719704c8 100644 --- a/source/funkin/ui/story/StoryMenuState.hx +++ b/source/funkin/ui/story/StoryMenuState.hx @@ -9,7 +9,7 @@ import flixel.tweens.FlxTween; import flixel.util.FlxColor; import flixel.util.FlxTimer; import funkin.audio.FunkinSound; -import funkin.data.level.LevelRegistry; +import funkin.data.story.level.LevelRegistry; import funkin.data.song.SongRegistry; import funkin.graphics.FunkinSprite; import funkin.modding.events.ScriptEvent;