diff --git a/source/funkin/NoteSplash.hx b/source/funkin/NoteSplash.hx index 64169c48b..3e4d3a3b5 100644 --- a/source/funkin/NoteSplash.hx +++ b/source/funkin/NoteSplash.hx @@ -22,6 +22,8 @@ class NoteSplash extends FlxSprite setupNoteSplash(x, y, noteData); + antialiasing = true; + // alpha = 0.75; } diff --git a/source/funkin/VoicesGroup.hx b/source/funkin/VoicesGroup.hx index bb9dd419f..ae34bb0c6 100644 --- a/source/funkin/VoicesGroup.hx +++ b/source/funkin/VoicesGroup.hx @@ -38,6 +38,31 @@ class VoicesGroup extends FlxTypedGroup } } + /** + * Finds the largest deviation from the desired time inside this VoicesGroup. + * + * @param targetTime The time to check against. + * If none is provided, it checks the time of all members against the first member of this VoicesGroup. + * @return The largest deviation from the target time found. + */ + public function checkSyncError(?targetTime:Float):Float + { + var error:Float = 0; + + forEachAlive(function(snd) + { + if (targetTime == null) + targetTime = snd.time; + else + { + var diff:Float = snd.time - targetTime; + if (Math.abs(diff) > Math.abs(error)) + error = diff; + } + }); + return error; + } + // prob a better / cleaner way to do all these forEach stuff? public function pause() { diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index d06bcb716..fa7a482be 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -2511,8 +2511,9 @@ class PlayState extends MusicBeatState override function stepHit() { super.stepHit(); + if (Math.abs(FlxG.sound.music.time - (Conductor.songPosition - Conductor.offset)) > 20 - || (SONG.needsVoices && Math.abs(vocals.time - (Conductor.songPosition - Conductor.offset)) > 20)) + || Math.abs(vocals.checkSyncError(Conductor.songPosition - Conductor.offset)) > 20) { resyncVocals(); }