diff --git a/scripts/Rhythia.cs b/scripts/Rhythia.cs index 15e26357..3cd8db15 100644 --- a/scripts/Rhythia.cs +++ b/scripts/Rhythia.cs @@ -198,6 +198,7 @@ public static void RegisterModifiers() new AutoplayModifier(), new GhostModifier(), new StrobeModifier(), + new FlickerModifier(), new ChaosModifier(), new VortexModifier(), new EarthquakeModifier(), diff --git a/scripts/game/modifiers/FlickerModifier.cs b/scripts/game/modifiers/FlickerModifier.cs new file mode 100644 index 00000000..d426b7c6 --- /dev/null +++ b/scripts/game/modifiers/FlickerModifier.cs @@ -0,0 +1,32 @@ +using Godot; + +public class FlickerModifier : Modifier, IObjectRenderModifier +{ + public override string Name => "Flicker"; + + public override Color Color => new(0xc5ff54ff); + + public override bool Rankable => true; + + public override double ScoreMultiplier => 1.035; + + public void ModifyRenderObject(Note note, Attempt attempt) + { + double at = attempt.Settings.ApproachTime; + + if (attempt.Progress / 600 / attempt.Speed % at >= at / 2) + { + if (note.Index % 2 == 0) + { + note.Opacity = 0; + } + } + else + { + if (note.Index % 2 != 0) + { + note.Opacity = 0; + } + } + } +} diff --git a/scripts/game/modifiers/FlickerModifier.cs.uid b/scripts/game/modifiers/FlickerModifier.cs.uid new file mode 100644 index 00000000..f2d043e8 --- /dev/null +++ b/scripts/game/modifiers/FlickerModifier.cs.uid @@ -0,0 +1 @@ +uid://ciktlcnrkha2t diff --git a/scripts/map/Replay.cs b/scripts/map/Replay.cs index e0504d8c..e25a2581 100644 --- a/scripts/map/Replay.cs +++ b/scripts/map/Replay.cs @@ -141,6 +141,9 @@ public Replay(string path) case "Chaos": Modifiers.Add(new ChaosModifier()); break; + case "Flicker": + Modifiers.Add(new FlickerModifier()); + break; case "Earthquake": Modifiers.Add(new EarthquakeModifier()); break; diff --git a/scripts/skinning/SkinManager.cs b/scripts/skinning/SkinManager.cs index 7a538962..7f4e7975 100644 --- a/scripts/skinning/SkinManager.cs +++ b/scripts/skinning/SkinManager.cs @@ -123,6 +123,7 @@ public static void Load() skin.ModAutoplayImage = loadTexture("modifiers/autoplay.png"); skin.ModGhostImage = loadTexture("modifiers/ghost.png"); skin.ModStrobeImage = loadTexture("modifiers/strobe.png"); + skin.ModFlickerImage = loadTexture("modifiers/flicker.png"); skin.ModChaosImage = loadTexture("modifiers/chaos.png"); skin.ModVortexImage = loadTexture("modifiers/vortex.png"); skin.ModEarthquakeImage = loadTexture("modifiers/earthquake.png"); diff --git a/scripts/skinning/SkinProfile.cs b/scripts/skinning/SkinProfile.cs index 751f9cfb..6b36a618 100644 --- a/scripts/skinning/SkinProfile.cs +++ b/scripts/skinning/SkinProfile.cs @@ -119,6 +119,8 @@ public partial class SkinProfile : RefCounted public ImageTexture ModStrobeImage { get; set; } = new(); + public ImageTexture ModFlickerImage { get; set; } = new(); + public ImageTexture ModChaosImage { get; set; } = new(); public ImageTexture ModVortexImage { get; set; } = new(); diff --git a/scripts/util/Misc.cs b/scripts/util/Misc.cs index 3e4a550c..3c36f7a8 100644 --- a/scripts/util/Misc.cs +++ b/scripts/util/Misc.cs @@ -30,6 +30,9 @@ public static Texture2D GetModIcon(string mod) case "Strobe": tex = skin.ModStrobeImage; break; + case "Flicker": + tex = skin.ModFlickerImage; + break; case "Chaos": tex = skin.ModChaosImage; break; @@ -135,16 +138,16 @@ public static Image LoadImageFromBuffer(byte[] buffer) Logger.Log( $""" - Couldn't load image from buffer - Type: {( - isPng ? "PNG" - : isJpeg ? "JPG" - : isBmp ? "BMP" - : isWebp ? "WEBP" - : "Unknown" - )}; - Size: {buffer.Length} - """ + Couldn't load image from buffer + Type: {( + isPng ? "PNG" + : isJpeg ? "JPG" + : isBmp ? "BMP" + : isWebp ? "WEBP" + : "Unknown" + )}; + Size: {buffer.Length} + """ ); return null; diff --git a/user/skins/default/modifiers/flicker.png b/user/skins/default/modifiers/flicker.png new file mode 100644 index 00000000..2b904d3f Binary files /dev/null and b/user/skins/default/modifiers/flicker.png differ diff --git a/user/skins/default/modifiers/flicker.png.import b/user/skins/default/modifiers/flicker.png.import new file mode 100644 index 00000000..1c29e2ef --- /dev/null +++ b/user/skins/default/modifiers/flicker.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2m10xon10iom" +path="res://.godot/imported/flicker.png-3ba39ce84c8a00d35a038c87c6c47ae2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://user/skins/default/modifiers/flicker.png" +dest_files=["res://.godot/imported/flicker.png-3ba39ce84c8a00d35a038c87c6c47ae2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1