diff --git a/GameObjects/Latern/Latern.tscn b/GameObjects/Latern/Latern.tscn
index 0d9df6e..69e2c03 100644
--- a/GameObjects/Latern/Latern.tscn
+++ b/GameObjects/Latern/Latern.tscn
@@ -22,7 +22,7 @@ rings = 2
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6mbug"]
shading_mode = 0
-albedo_color = Color(1.6287986, 1.3438833, 0.4077328, 1)
+albedo_color = Color(2.454227, 2.0297987, 0.6342527, 1)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_g5ygy"]
radius = 0.334
diff --git a/Main/Main.tscn b/Main/Main.tscn
index 00c5376..e10644b 100644
--- a/Main/Main.tscn
+++ b/Main/Main.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=679 format=4 uid="uid://b5l8s4mmexi0m"]
+[gd_scene load_steps=677 format=4 uid="uid://b5l8s4mmexi0m"]
[ext_resource type="Script" uid="uid://dedtmhyfax8p0" path="res://addons/rokojori_action_library/Runtime/App/Main.cs" id="1_rii6w"]
[ext_resource type="Script" uid="uid://dyf6ee3ov3ran" path="res://addons/rokojori_action_library/Runtime/Actions/OnReady.cs" id="2_bdfmq"]
@@ -141,40 +141,47 @@
[ext_resource type="Texture2D" uid="uid://d3a6jx4b5te68" path="res://assets/rokojori-houses/beet.png" id="56_mql5u"]
[ext_resource type="Script" uid="uid://bwq7e6cx2oy8n" path="res://addons/rokojori_action_library/Runtime/Interactions/CharacterController/Conditions/CharacterIsMoving.cs" id="56_p5agv"]
[ext_resource type="Material" uid="uid://b5fpd1257bng8" path="res://UI/Map/Map Buildings Secondary Circle.tres" id="56_yk3hl"]
+[ext_resource type="Script" uid="uid://chqp2otobal7a" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectLayerSlot.cs" id="63_u533a"]
[ext_resource type="Resource" uid="uid://dgxeibp77r1wy" path="res://addons/rokojori_action_library/Runtime/Cameras/EditorCamera/Inputs/MouseEditorCamera Default Inputs.tres" id="64_u7p5w"]
[ext_resource type="PackedScene" uid="uid://bxkp71wpnfu0x" path="res://UI/Collectables/Collectable Label.tscn" id="65_nlcvw"]
[ext_resource type="Script" uid="uid://cjfxcl3cdhnku" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/LightnessBasedAdjustment/LightnessBasedAdjustmentEffect.cs" id="65_s46u1"]
-[ext_resource type="Script" uid="uid://wl1p78fs5sos" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/UnsharpMasking/UnsharpMaskingEffect.cs" id="66_4l6me"]
-[ext_resource type="Script" uid="uid://b2oxy6ln560ys" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/ColorQuantizer/ColorQuantizerEffect.cs" id="66_qiqbh"]
-[ext_resource type="Script" uid="uid://cidk0x7sb1pxl" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/Distortion/NoiseDistortion/NoiseDistortionEffect.cs" id="67_hwk2e"]
-[ext_resource type="Script" uid="uid://bjxayoleund83" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/TemporalSmearSimple/TemporalSmearSimpleEffect.cs" id="68_4l6me"]
+[ext_resource type="Resource" uid="uid://bwhnq7w0tpgv" path="res://VFX/Action FX Compositor Effect Layer.tres" id="68_762km"]
[ext_resource type="PackedScene" uid="uid://bvffeq7sqvrwk" path="res://assets/KayKit_DungeonRemastered_1.1_FREE/Assets/gltf/table_long.gltf" id="68_pld03"]
-[ext_resource type="Script" uid="uid://dq0uf1bqoefv" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/RadialBlur2/RadialBlur2.cs" id="69_swf5v"]
-[ext_resource type="Script" uid="uid://cghyn18utdfl" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/ChromaticAberation/ChromaticAberation.cs" id="70_hwk2e"]
[ext_resource type="Script" uid="uid://dj6f8ie4bmaim" path="res://addons/rokojori_action_library/Runtime/Actions/Conditional/ConditionalAction.cs" id="70_q0f75"]
+[ext_resource type="Script" uid="uid://bgw3wuqxbwrb0" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/AntiAliasing/FXAA/FXAAEffect.cs" id="70_wi6eu"]
[ext_resource type="Script" uid="uid://cwjgw33krmh11" path="res://addons/rokojori_action_library/Runtime/Time/Duration/BeatsDuration.cs" id="71_4wsps"]
-[ext_resource type="Script" uid="uid://cqkrgyuerq50a" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/Distortion/EllispeDistortion/EllipseDistortionEffect.cs" id="72_5c7e3"]
[ext_resource type="AudioStream" uid="uid://dltk1xw3s35qw" path="res://Audio/Sounds/Foot Steps/WinterTales - FootSteps.ogg" id="72_dis6l"]
[ext_resource type="Resource" uid="uid://daivy2l77st5v" path="res://GameObjects/Collectable-Collisions.tres" id="72_jguvn"]
-[ext_resource type="Script" uid="uid://dxnmlb5wobxtw" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/Distortion/ScanLines/ScanLinesEffect.cs" id="73_m1wsu"]
+[ext_resource type="Script" uid="uid://pevgspwywsxi" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/HSLAdjustment/HSLAdjustmentEffect.cs" id="74_c5ng7"]
[ext_resource type="Script" uid="uid://kodskdb1mcd4" path="res://addons/rokojori_action_library/Runtime/Interactions/CharacterController/CharacterMovements/TurnMovementType.cs" id="76_12vd0"]
[ext_resource type="Resource" uid="uid://dfqc5ainuim21" path="res://Character/Player-Collector.tres" id="77_7drkg"]
[ext_resource type="Resource" uid="uid://bkfi5scnncqqe" path="res://UI/Dialog/Dialog Hidden Styel.tres" id="77_dq7d0"]
+[ext_resource type="Resource" uid="uid://c11wt1wu6ciyc" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Digital Compression.tres" id="77_jlp8b"]
[ext_resource type="Script" uid="uid://rqs2m0u6yvvf" path="res://addons/rokojori_action_library/Runtime/UI/Nodes/UIText.cs" id="77_ubijs"]
[ext_resource type="Script" uid="uid://c01nqtwmfostx" path="res://addons/rokojori_action_library/Runtime/GameObjects/Variables/Int/IntVariable.cs" id="77_xoywq"]
[ext_resource type="Resource" uid="uid://d0k8ig2sum1fk" path="res://GameObjects/Present/Present-Collectable.tres" id="78_7drkg"]
[ext_resource type="Script" uid="uid://bvj322mokkq63" path="res://addons/rokojori_action_library/Runtime/Localization/LocaleText.cs" id="78_dq7d0"]
[ext_resource type="Script" uid="uid://cd0ikdsdhutn0" path="res://addons/rokojori_action_library/Runtime/Actions/RJLogMessage.cs" id="79_dj82f"]
-[ext_resource type="Script" uid="uid://bvmdtshoesn5v" path="res://addons/rokojori_action_library/Runtime/Animation/Driver/FloatDriver.cs" id="79_why7y"]
+[ext_resource type="Resource" uid="uid://c51155ys7wme8" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Analog Tube TV .tres" id="79_ka6hw"]
[ext_resource type="Script" uid="uid://xnupkyu3042b" path="res://addons/rokojori_action_library/Runtime/Interactions/Collider.cs" id="80_3rj3l"]
-[ext_resource type="Script" uid="uid://cqgobpug8btt3" path="res://addons/rokojori_action_library/Runtime/Animation/Driver/FloatDriverNodeTarget.cs" id="80_m1wsu"]
+[ext_resource type="Resource" uid="uid://c5qouanne0mar" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Physical/Frozen Ice.tres" id="80_fqrsx"]
[ext_resource type="Script" uid="uid://dxkqvnjuy7ntq" path="res://UI/DialogRegion.cs" id="80_s8vnk"]
[ext_resource type="Resource" uid="uid://be5fa1myu3tqs" path="res://Character/Variables/Present-Class.tres" id="80_xkggh"]
+[ext_resource type="Resource" uid="uid://dx1yhdxjvueve" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Physical/Impact Wave.tres" id="81_1er25"]
[ext_resource type="Resource" uid="uid://bccw1e1ohmsrq" path="res://UI/Dialog/Dialog Open Style.tres" id="81_jgo2j"]
[ext_resource type="Script" uid="uid://ctgt20fqo2wqg" path="res://Character/Variables/CollectItem.cs" id="82_nlcvw"]
+[ext_resource type="Resource" uid="uid://dke01q2ndmvxe" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Blue Cinematic Bloom.tres" id="82_u533a"]
[ext_resource type="Script" uid="uid://ccfk70dpt7r7r" path="res://addons/rokojori_action_library/Runtime/Interactions/Collecting/Collector.cs" id="83_3o18d"]
+[ext_resource type="Resource" uid="uid://c63le61ap244y" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Red Cinematic Bloom.tres" id="83_762km"]
+[ext_resource type="Resource" uid="uid://cxxb8xq3xpa6d" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Rainbow Star Glow.tres" id="84_c05wc"]
+[ext_resource type="Resource" uid="uid://ciirupc5c1rvf" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Character/Drunken.tres" id="85_i46l2"]
+[ext_resource type="Resource" uid="uid://cr7dvu2sqcidy" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Blur/Overlayed Bokeh Blur .tres" id="86_4545n"]
+[ext_resource type="Resource" uid="uid://bupv437tvb5yf" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Old Film.tres" id="86_t5au6"]
+[ext_resource type="Script" uid="uid://b2ik21q1iwjvo" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectLayer.cs" id="87_btbfg"]
+[ext_resource type="Script" uid="uid://cx5qcow1mmd11" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectOwner.cs" id="87_m7r8b"]
[ext_resource type="Texture2D" uid="uid://crn8xn3skwu1i" path="res://GameObjects/Present/present-thumbnail.png" id="87_ugo18"]
[ext_resource type="Script" uid="uid://dxra6jao22it4" path="res://addons/rokojori_action_library/Runtime/Actions/ActionReference.cs" id="88_hq3bi"]
+[ext_resource type="Script" uid="uid://dn7xg8cqdnolq" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectLayout.cs" id="88_ixqtu"]
[ext_resource type="Script" uid="uid://88u2lx0pssal" path="res://addons/rokojori_action_library/Runtime/Sensors/OnSensor.cs" id="88_nh6ww"]
[ext_resource type="Shader" uid="uid://b1h1fpt7uuv1h" path="res://Character/Hoody Hood/FresnelGlow.gdshader" id="88_p8ds5"]
[ext_resource type="Script" uid="uid://2gudnu1r4pjg" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/SpatialShaderGenerator.cs" id="89_5o8m6"]
@@ -183,7 +190,9 @@
[ext_resource type="Script" uid="uid://b4yjsis2fh64c" path="res://addons/rokojori_action_library/Runtime/Actions/ActionList.cs" id="90_5p3uc"]
[ext_resource type="Script" uid="uid://nfn3x4l7pcob" path="res://addons/rokojori_action_library/Runtime/Interactions/Collecting/OnCollected.cs" id="90_aiyui"]
[ext_resource type="Script" uid="uid://cxev8s3qvg8sq" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Albedo/AlbedoModule.cs" id="90_f6yaf"]
+[ext_resource type="Resource" uid="uid://qr06s6jt1t6m" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Green Cinematic Flares.tres" id="90_i46l2"]
[ext_resource type="Script" uid="uid://8a10in76h56n" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Alpha/AlphaModule.cs" id="91_2jvpv"]
+[ext_resource type="Resource" uid="uid://hs33m81dlips" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Yellow Cinematic Bloom.tres" id="91_4545n"]
[ext_resource type="Script" uid="uid://b3ipr2fudbgyu" path="res://addons/rokojori_action_library/Runtime/Interactions/Collecting/CollectableTypeGroup.cs" id="91_dj82f"]
[ext_resource type="Script" uid="uid://ceaglilesxsi4" path="res://addons/rokojori_action_library/Runtime/Actions/ActionSequence.cs" id="91_vgxo8"]
[ext_resource type="Script" uid="uid://dpkfvftsk23we" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Fading/Fresnel/FresnelFading.cs" id="92_f4eun"]
@@ -193,6 +202,8 @@
[ext_resource type="Script" uid="uid://bqk5po80nylsk" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Fading/FadingModule.cs" id="93_qrr03"]
[ext_resource type="Script" uid="uid://drc5hdnwme7be" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Geometry/GeometryModule.cs" id="94_xwk5p"]
[ext_resource type="Script" uid="uid://yoc4tx8ahe6b" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Masks/SpatialMasksModule.cs" id="95_hkpmc"]
+[ext_resource type="Resource" uid="uid://d1uubsqnvu1qe" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorVFXPresets/Physical/Super Speed.tres" id="96_btbfg"]
+[ext_resource type="Script" uid="uid://cebnf3dtch0oh" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorVFX.cs" id="96_m7r8b"]
[ext_resource type="Script" uid="uid://n0gi67ntpq0y" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Metallic/MetallicModule.cs" id="96_rdt7x"]
[ext_resource type="Script" uid="uid://tl4qfoxysj06" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/NormalMap/NormalMapModule.cs" id="97_1dfxe"]
[ext_resource type="Script" uid="uid://dnikyu81333q8" path="res://addons/rokojori_action_library/Runtime/Shading/Generators/Spatial/Occlusion/OcclusionModule.cs" id="98_aa6j0"]
@@ -371,7 +382,7 @@ globalShaderProperties = [SubResource("Resource_23vqh"), SubResource("Resource_4
[sub_resource type="Resource" id="Resource_vwon7"]
script = ExtResource("40_uqrk0")
-seconds = 10.0
+seconds = 1.0
timeLine = ExtResource("11_sl01w")
metadata/_custom_type_script = "uid://ddhwhwos5kkrm"
@@ -462,6 +473,150 @@ metadata/_custom_type_script = "uid://10mh4s2cbrwu"
script = ExtResource("18_dk6jw")
key = 4194336
+[sub_resource type="Resource" id="Resource_762km"]
+script = ExtResource("87_btbfg")
+layerName = "Depth Effects"
+metadata/_custom_type_script = "uid://b2ik21q1iwjvo"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_c05wc"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = false
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("63_u533a")
+layer = SubResource("Resource_762km")
+metadata/_custom_type_script = "uid://chqp2otobal7a"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_u533a"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = false
+effect_callback_type = 1
+access_resolved_color = false
+access_resolved_depth = false
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("23_rpmi0")
+effectStrength = 3.0
+rimOffsetX = 0.0
+rimOffsetY = -3.0
+minDepth = 0.3806
+depthScale = 194.1054
+depthOffset = 0.6
+contrast = 1000.0
+metadata/_custom_type_script = "uid://bkcgo0ho1x6ju"
+
+[sub_resource type="Resource" id="Resource_i46l2"]
+script = ExtResource("87_btbfg")
+layerName = "Color Correction"
+metadata/_custom_type_script = "uid://b2ik21q1iwjvo"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_4545n"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = false
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("63_u533a")
+layer = SubResource("Resource_i46l2")
+metadata/_custom_type_script = "uid://chqp2otobal7a"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_i46l2"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = true
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("70_wi6eu")
+amount = 0.6935
+metadata/_custom_type_script = "uid://bgw3wuqxbwrb0"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_d1ujc"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = true
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("74_c5ng7")
+saturationOffset = 32.7869
+lightnessOffset = 2.0
+lightnessGamma = 5.0
+metadata/_custom_type_script = "uid://pevgspwywsxi"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_mdsx3"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = true
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("65_s46u1")
+amount = 1.0
+saturationShift = Vector3(0.2, 0, 0)
+lightnessShift = Vector3(0.057, -0.0055, 0)
+lightnessAmount = 0.5
+metadata/_custom_type_script = "uid://cjfxcl3cdhnku"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_p64cs"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = false
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("63_u533a")
+layer = ExtResource("68_762km")
+metadata/_custom_type_script = "uid://chqp2otobal7a"
+
+[sub_resource type="Resource" id="Resource_mdsx3"]
+script = ExtResource("87_btbfg")
+layerName = "Latest"
+metadata/_custom_type_script = "uid://b2ik21q1iwjvo"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_7axlu"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = false
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("63_u533a")
+layer = SubResource("Resource_mdsx3")
+metadata/_custom_type_script = "uid://chqp2otobal7a"
+
+[sub_resource type="CompositorEffect" id="CompositorEffect_wpvj8"]
+resource_local_to_scene = false
+resource_name = ""
+enabled = true
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("20_jkd0a")
+fadePosition = 0.472
+fadeInOffset = -0.0752
+fadeOutOffset = 0.137
+fadePower = 0.0
+ellipseToCircle = 1.0
+colorTop = Color(0.087186046, 0.33509386, 0.6018299, 1)
+colorBottom = Color(0.17348541, 0.18686064, 0.41853607, 1)
+replace = 0.415
+multiply = 1.0
+info = "constants: size:19 internalSize:19 bytes:80 floats:19 ints:0"
+metadata/_custom_type_script = "uid://bgiluy6xgcvb0"
+
+[sub_resource type="Compositor" id="Compositor_6esk7"]
+compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_c05wc"), SubResource("CompositorEffect_u533a"), SubResource("CompositorEffect_4545n"), SubResource("CompositorEffect_i46l2"), SubResource("CompositorEffect_d1ujc"), SubResource("CompositorEffect_mdsx3"), SubResource("CompositorEffect_p64cs"), SubResource("CompositorEffect_7axlu"), SubResource("CompositorEffect_wpvj8")])
+
+[sub_resource type="Resource" id="Resource_4k7mp"]
+script = ExtResource("88_ixqtu")
+compositor = SubResource("Compositor_6esk7")
+metadata/_custom_type_script = "uid://dn7xg8cqdnolq"
+
[sub_resource type="FastNoiseLite" id="FastNoiseLite_12vd0"]
frequency = 0.0056
fractal_lacunarity = 3.4105
@@ -521,7 +676,6 @@ volumetric_fog_length = 37.17
volumetric_fog_detail_spread = 1.6076609
volumetric_fog_ambient_inject = 9.16
volumetric_fog_sky_affect = 0.782
-adjustment_enabled = true
adjustment_contrast = 0.9
adjustment_saturation = 1.5
@@ -531,224 +685,6 @@ dof_blur_far_transition = 50.0
dof_blur_near_enabled = true
dof_blur_near_transition = 2.0
-[sub_resource type="CompositorEffect" id="CompositorEffect_m1wsu"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("20_jkd0a")
-fadePosition = 0.3135
-fadeInOffset = -0.2576
-fadeOutOffset = 0.407
-fadePower = 0.0
-ellipseToCircle = 0.5314
-colorTop = Color(0.35294122, 0.75686276, 0.8, 1)
-colorBottom = Color(0.12156863, 0.02352941, 0.52156866, 1)
-replace = 0.0
-multiply = 0.5
-colorize = 0.5
-info = "constants: size:19 internalSize:19 bytes:80 floats:19 ints:0"
-metadata/_custom_type_script = "uid://bgiluy6xgcvb0"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_c5ng7"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 1
-access_resolved_color = false
-access_resolved_depth = false
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("23_rpmi0")
-effectStrength = 3.0
-rimOffsetX = 0.0
-rimOffsetY = -3.0
-minDepth = 0.3806
-depthScale = 194.1054
-depthOffset = 0.6
-contrast = 1000.0
-metadata/_custom_type_script = "uid://bkcgo0ho1x6ju"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_8ghch"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("65_s46u1")
-amount = 1.0
-hueShift = Vector3(-0.01, 0, 0.05)
-saturationShift = Vector3(0.2225, -0.0175, -0.1)
-saturationAmount = 0.7273
-lightnessShift = Vector3(0.05, -0.05, 0.0085)
-metadata/_custom_type_script = "uid://cjfxcl3cdhnku"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_7wuxk"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("66_qiqbh")
-amount = 1.0
-redAmount = 0.0
-greenAmount = 0.0
-blueAmount = 0.0
-rgbAmount = 0.0
-hueAmount = 0.0
-saturationAmount = 0.0
-luminanceAmount = 0.2981
-luminanceSteps = 50.9327
-luminanceGamma = -0.4423
-luminanceOffset = 0.8461
-metadata/_custom_type_script = "uid://b2oxy6ln560ys"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_5jolg"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("67_hwk2e")
-amount = 0.016218945
-scale = 3.8225
-smearingSteps = 4
-smearing = 1.1337
-xU = Vector3(0.078, 0.145, 1)
-xV = Vector3(0.149, 0.0455, 6)
-yU = Vector3(0.4285, 0.096, 3)
-yV = Vector3(0.0425, 0.042, 6)
-metadata/_custom_type_script = "uid://cidk0x7sb1pxl"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_nvbi5"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("68_4l6me")
-amount = 0.19259998
-smearingFrames = 16.0
-metadata/_custom_type_script = "uid://bjxayoleund83"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_jlp8b"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("69_swf5v")
-radius = 0.011
-intensity = 0.138672
-metadata/_custom_type_script = "uid://dq0uf1bqoefv"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_ka6hw"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("70_hwk2e")
-rShift = Vector2(-0.1, 0)
-bShift = Vector2(0.1, 0)
-intensity = 0.19259998
-shiftAll = 0.102
-metadata/_custom_type_script = "uid://cghyn18utdfl"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_fqrsx"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("66_4l6me")
-amount = 0.052001998
-kernelOffset = 10
-metadata/_custom_type_script = "uid://wl1p78fs5sos"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_1er25"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("72_5c7e3")
-distortionAmount = 0.0
-ellipseSize = Vector2(1, 1)
-ellipseScale = 1.5990403
-minDistance = 0.0435
-rings = 3.0
-ringsIntensity = 1.0
-ringsType = 0.3803
-ringsDistribution = 0.2951
-smearingSteps = 10
-smearing = 1.0772
-redShift = 0.0372
-blueShift = -0.2691
-metadata/_custom_type_script = "uid://cqkrgyuerq50a"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_u533a"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("67_hwk2e")
-amount = 0.0010015198
-scale = 50.359
-smearingSteps = 2
-xU = Vector3(0, 0.1, 100)
-yU = Vector3(0.0315, 0.037, 0.1485)
-yV = Vector3(0, 0.0375, 0.139)
-metadata/_custom_type_script = "uid://cidk0x7sb1pxl"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_762km"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = true
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("73_m1wsu")
-amount = 0.5693
-topColor = Color(1.8247963, 1.8247963, 1.8247963, 1)
-bottomColor = Color(0.6018299, 0.6018299, 0.6018299, 1)
-scanLineHeight = 1
-rgbTintAmount = 0.3722
-rgbSize = 4
-useRGBOffset = true
-jitterStrength = 2.0
-jitterFPS = 28.0
-metadata/_custom_type_script = "uid://dxnmlb5wobxtw"
-
-[sub_resource type="CompositorEffect" id="CompositorEffect_c05wc"]
-resource_local_to_scene = false
-resource_name = ""
-enabled = false
-effect_callback_type = 4
-needs_motion_vectors = false
-needs_normal_roughness = false
-script = ExtResource("70_hwk2e")
-rShift = Vector2(-0.1, 0)
-bShift = Vector2(0.1, 0)
-intensity = 1.0
-shiftAll = 0.041
-metadata/_custom_type_script = "uid://cghyn18utdfl"
-
-[sub_resource type="Compositor" id="Compositor_6esk7"]
-compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_m1wsu"), SubResource("CompositorEffect_c5ng7"), SubResource("CompositorEffect_8ghch"), SubResource("CompositorEffect_7wuxk"), SubResource("CompositorEffect_5jolg"), SubResource("CompositorEffect_nvbi5"), SubResource("CompositorEffect_jlp8b"), SubResource("CompositorEffect_ka6hw"), SubResource("CompositorEffect_fqrsx"), SubResource("CompositorEffect_1er25"), SubResource("CompositorEffect_u533a"), SubResource("CompositorEffect_762km"), SubResource("CompositorEffect_c05wc")])
-
[sub_resource type="Resource" id="Resource_sax52"]
script = ExtResource("52_uu48o")
value = 0.0051
@@ -785,125 +721,41 @@ metadata/_custom_type_script = "uid://cmhbynml7hyhj"
script = ExtResource("35_yr58t")
metadata/_custom_type_script = "uid://lhuuedx87rem"
-[sub_resource type="Curve" id="Curve_u533a"]
-_limits = [0.0, 0.084210515, 0.0, 1.0]
-_data = [Vector2(0, 0), 0.0, 0.084210515, 0, 1, Vector2(1, 0.084210515), 0.084210515, 0.0, 1, 0]
-point_count = 2
+[sub_resource type="Resource" id="Resource_oqkh4"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Resource" id="Resource_762km"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/4/amount"
-mappingCurve = SubResource("Curve_u533a")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
+[sub_resource type="Resource" id="Resource_4n83u"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Curve" id="Curve_c05wc"]
-_data = [Vector2(0, 0), 0.0, 1.0, 0, 1, Vector2(1, 1), 1.0, 0.0, 1, 0]
-point_count = 2
+[sub_resource type="Resource" id="Resource_gyycf"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Resource" id="Resource_i46l2"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/5/amount"
-mappingCurve = SubResource("Curve_c05wc")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
+[sub_resource type="Resource" id="Resource_fy8er"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Curve" id="Curve_4545n"]
-_limits = [0.0, 0.72, 0.0, 1.0]
-_data = [Vector2(0, 0), 0.0, 0.72, 0, 1, Vector2(1, 0.72), 0.72, 0.0, 1, 0]
-point_count = 2
+[sub_resource type="Resource" id="Resource_0c48d"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Resource" id="Resource_mdsx3"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/6/intensity"
-mappingCurve = SubResource("Curve_4545n")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
-
-[sub_resource type="Curve" id="Curve_wpvj8"]
-_data = [Vector2(0, 0), 0.0, 1.0, 0, 1, Vector2(1, 1), 1.0, 0.0, 1, 0]
-point_count = 2
-
-[sub_resource type="Resource" id="Resource_p64cs"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/7/intensity"
-mappingCurve = SubResource("Curve_wpvj8")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
-
-[sub_resource type="Curve" id="Curve_7axlu"]
-_limits = [0.0, 0.27, 0.0, 1.0]
-_data = [Vector2(0, 0), 0.0, 0.27, 0, 1, Vector2(1, 0.27), 0.27, 0.0, 1, 0]
-point_count = 2
+[sub_resource type="Resource" id="Resource_5rqpk"]
+script = ExtResource("87_m7r8b")
[sub_resource type="Resource" id="Resource_i5utj"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/8/amount"
-mappingCurve = SubResource("Curve_7axlu")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
-
-[sub_resource type="Curve" id="Curve_22k1k"]
-_limits = [0.0, 0.01, 0.0, 1.0]
-_data = [Vector2(0, 0), 0.0, 0.0052, 0, 1, Vector2(1, 0.0052), 0.0052, 0.0, 1, 0]
-point_count = 2
-
-[sub_resource type="Resource" id="Resource_hpfyh"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/10/amount"
-mappingCurve = SubResource("Curve_22k1k")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
-
-[sub_resource type="Curve" id="Curve_762km"]
-_limits = [0.0, 0.5, 0.0, 1.0]
-_data = [Vector2(0, 0), 0.0, 1.0689882, 0, 0, Vector2(0.029459905, 0.11480683), 1.3490828, 1.3490828, 0, 0, Vector2(0.34740883, 0.38808858), 0.019687198, 0.019687198, 0, 0, Vector2(1, 0), -0.9409129, -0.9409129, 0, 0]
-point_count = 4
-
-[sub_resource type="Resource" id="Resource_c05wc"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/9/distortionAmount"
-mappingCurve = SubResource("Curve_762km")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
-
-[sub_resource type="Curve" id="Curve_i46l2"]
-_limits = [0.0, 2.0, 0.0, 1.0]
-_data = [Vector2(0, 0.16479623), 2.7060935, 2.7060935, 0, 0, Vector2(0.4990403, 1.5990403), 0.19149712, 0.0, 0, 0]
-point_count = 2
+script = ExtResource("87_m7r8b")
[sub_resource type="Resource" id="Resource_d1ujc"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/9/ellipseScale"
-mappingCurve = SubResource("Curve_i46l2")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
+script = ExtResource("87_m7r8b")
-[sub_resource type="Curve" id="Curve_mdsx3"]
-_data = [Vector2(0, 0), 0.0, 37.7499, 0, 0, Vector2(0.06710311, 1), 0.0, 0.0, 0, 0, Vector2(0.49520153, 1), 0.07217911, 0.07217911, 0, 0, Vector2(1, 1), 0.0, 0.0, 1, 0]
-point_count = 4
+[sub_resource type="Resource" id="Resource_1ntwo"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Resource" id="Resource_a3id7"]
-script = ExtResource("80_m1wsu")
-nodePath = NodePath("../WorldEnvironment")
-targetMemberPath = "Compositor/CompositorEffects/9/blendAmount"
-mappingCurve = SubResource("Curve_mdsx3")
-metadata/_custom_type_script = "uid://cqgobpug8btt3"
+[sub_resource type="Resource" id="Resource_008mr"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Resource" id="Resource_ie6m2"]
-script = ExtResource("40_uqrk0")
-seconds = 1.0
-metadata/_custom_type_script = "uid://ddhwhwos5kkrm"
+[sub_resource type="Resource" id="Resource_6xf1f"]
+script = ExtResource("87_m7r8b")
-[sub_resource type="Environment" id="Environment_ydkll"]
-background_mode = 1
-background_color = Color(0.23524225, 0.23524225, 0.23524225, 1)
-glow_blend_mode = 1
-glow_hdr_scale = 1.36
-glow_hdr_luminance_cap = 256.0
-glow_map_strength = 0.0
-
-[sub_resource type="Compositor" id="Compositor_4l6me"]
+[sub_resource type="Resource" id="Resource_diigt"]
+script = ExtResource("87_m7r8b")
[sub_resource type="Resource" id="Resource_dq7d0"]
script = ExtResource("40_uqrk0")
@@ -929,16 +781,6 @@ compositor = SubResource("Compositor_6esk7")
wipeEffect = SubResource("Resource_ioimv")
metadata/_custom_type_script = "uid://cn05bqaq15tty"
-[sub_resource type="Resource" id="Resource_q8n2a"]
-script = ExtResource("40_uqrk0")
-seconds = 0.5
-timeLine = ExtResource("11_sl01w")
-metadata/_custom_type_script = "uid://ddhwhwos5kkrm"
-
-[sub_resource type="Curve" id="Curve_vh1c2"]
-_data = [Vector2(0, 0), 0.0, 3.237083, 0, 0, Vector2(1, 1), 0.114375144, 0.0, 0, 0]
-point_count = 2
-
[sub_resource type="Resource" id="Resource_tdk3c"]
script = ExtResource("40_uqrk0")
seconds = 1.0
@@ -975,9 +817,15 @@ compositor = SubResource("Compositor_6esk7")
wipeEffect = SubResource("Resource_mk81p")
metadata/_custom_type_script = "uid://cn05bqaq15tty"
-[sub_resource type="Curve" id="Curve_drk6d"]
-_data = [Vector2(0, 0), 0.0, -0.13647318, 0, 0, Vector2(1, 1), 2.4119198, 0.0, 0, 0]
-point_count = 2
+[sub_resource type="Environment" id="Environment_ydkll"]
+background_mode = 1
+background_color = Color(0.23524225, 0.23524225, 0.23524225, 1)
+glow_blend_mode = 1
+glow_hdr_scale = 1.36
+glow_hdr_luminance_cap = 256.0
+glow_map_strength = 0.0
+
+[sub_resource type="Compositor" id="Compositor_4l6me"]
[sub_resource type="Resource" id="Resource_p2tm2"]
script = ExtResource("25_rd5ln")
@@ -1064,7 +912,7 @@ value = 2.0
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_i46l2"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_ysmsc"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.4, 38.4)
shader_parameter/sharpness = 5.0
@@ -1116,7 +964,7 @@ script = ExtResource("40_ytrvj")
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_4545n"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_t5au6"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.4, 38.4)
shader_parameter/sharpness = 5.0
@@ -1145,7 +993,7 @@ script = ExtResource("46_er746")
fillColor = SubResource("Resource_bsxpb")
metadata/_custom_type_script = "uid://dwuimn03cvh3"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_d1ujc"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_btbfg"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.399998, 38.4)
shader_parameter/sharpness = 5.0
@@ -1165,7 +1013,7 @@ shader_parameter/fillStateAngle = 0.0
shader_parameter/fillStateOffset = 0.0
script = ExtResource("41_4el3b")
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_mdsx3"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_ixqtu"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.399998, 38.4)
shader_parameter/sharpness = 5.0
@@ -1185,7 +1033,7 @@ shader_parameter/fillStateAngle = 0.0
shader_parameter/fillStateOffset = 0.0
script = ExtResource("41_4el3b")
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_wpvj8"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_m7r8b"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.399994, 38.4)
shader_parameter/sharpness = 5.0
@@ -1205,7 +1053,7 @@ shader_parameter/fillStateAngle = 0.0
shader_parameter/fillStateOffset = 0.0
script = ExtResource("41_4el3b")
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_ysmsc"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_sw5v3"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.399994, 38.4)
shader_parameter/sharpness = 5.0
@@ -1235,7 +1083,7 @@ metadata/_custom_type_script = "uid://cnkyynboxg1qg"
script = ExtResource("40_ytrvj")
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_t5au6"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_wi6eu"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(116.40002, 76.79997)
shader_parameter/sharpness = 5.0
@@ -1303,7 +1151,7 @@ value = 0.5
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_btbfg"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_7720d"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(38.4, 38.399998)
shader_parameter/sharpness = 5.0
@@ -1332,11 +1180,11 @@ script = ExtResource("46_er746")
fillColor = SubResource("Resource_73e3n")
metadata/_custom_type_script = "uid://dwuimn03cvh3"
-[sub_resource type="LabelSettings" id="LabelSettings_ixqtu"]
+[sub_resource type="LabelSettings" id="LabelSettings_a3id7"]
font_size = 19
shadow_size = 0
-[sub_resource type="Resource" id="Resource_7axlu"]
+[sub_resource type="Resource" id="Resource_a3id7"]
script = ExtResource("78_dq7d0")
en = "0/0"
@@ -1362,7 +1210,7 @@ script = ExtResource("40_ytrvj")
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_i5utj"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_ie6m2"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(230.40005, 230.40005)
shader_parameter/sharpness = 5.0
@@ -1465,7 +1313,7 @@ value = 5.0
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_22k1k"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_p64cs"]
shader = ExtResource("42_npu10")
shader_parameter/size = Vector2(426, 232.00002)
shader_parameter/sharpness = 5.0
@@ -1539,7 +1387,7 @@ script = ExtResource("40_ytrvj")
unit = "em"
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
-[sub_resource type="LabelSettings" id="LabelSettings_hpfyh"]
+[sub_resource type="LabelSettings" id="LabelSettings_7axlu"]
font_size = 29
shadow_size = 0
@@ -1615,7 +1463,7 @@ metadata/_custom_type_script = "uid://36a2avbsduro"
script = ExtResource("116_uslls")
metadata/_custom_type_script = "uid://vc5quho4a6ib"
-[sub_resource type="LabelSettings" id="LabelSettings_frwbc"]
+[sub_resource type="LabelSettings" id="LabelSettings_i5utj"]
font_size = 19
shadow_size = 0
@@ -1655,7 +1503,7 @@ metadata/_custom_type_script = "uid://36a2avbsduro"
script = ExtResource("116_uslls")
metadata/_custom_type_script = "uid://vc5quho4a6ib"
-[sub_resource type="LabelSettings" id="LabelSettings_w6tyf"]
+[sub_resource type="LabelSettings" id="LabelSettings_22k1k"]
font_size = 19
shadow_size = 0
@@ -1669,7 +1517,7 @@ script = ExtResource("113_4l6me")
sensor = SubResource("Resource_rn0rj")
metadata/_custom_type_script = "uid://36a2avbsduro"
-[sub_resource type="LabelSettings" id="LabelSettings_63qv8"]
+[sub_resource type="LabelSettings" id="LabelSettings_hpfyh"]
font_size = 19
shadow_size = 0
@@ -1698,7 +1546,7 @@ script = ExtResource("113_4l6me")
sensor = SubResource("Resource_58uie")
metadata/_custom_type_script = "uid://36a2avbsduro"
-[sub_resource type="LabelSettings" id="LabelSettings_gxlxg"]
+[sub_resource type="LabelSettings" id="LabelSettings_frwbc"]
font_size = 19
shadow_size = 0
@@ -2193,32 +2041,22 @@ metadata/_custom_type_script = "uid://lhuuedx87rem"
[sub_resource type="QuadMesh" id="QuadMesh_nlcvw"]
-[sub_resource type="Gradient" id="Gradient_2750v"]
-offsets = PackedFloat32Array(0.94285715, 1)
-colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
-
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_txdr1"]
-gradient = SubResource("Gradient_2750v")
-fill = 2
-fill_from = Vector2(0.5, 0.5)
-fill_to = Vector2(0, 0.5)
-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_yttar"]
render_priority = -2
shader = ExtResource("123_2750v")
-shader_parameter/color = Color(0.7327622, 0.45490193, 1, 1)
-shader_parameter/alphaScale = 0.34
+shader_parameter/color = Color(0.5019608, 0.64639395, 1, 1)
+shader_parameter/alphaScale = 0.6155
shader_parameter/circleAmount = 1.0
-shader_parameter/circleDistortion = 1.471
-shader_parameter/ellipseAmount = 0.2915
-shader_parameter/ellipseDistortion = 1.9675
+shader_parameter/circleDistortion = 1.0
+shader_parameter/ellipseAmount = 0.127
+shader_parameter/ellipseDistortion = 1.0
shader_parameter/ellipseScale = Vector2(1, 0.5)
shader_parameter/add_vs_max = 0.5
shader_parameter/centerHSL = Vector4(0.08, 0, 0.18, 1)
shader_parameter/outsideHSL = Vector4(-0.05, 1.65, 0.02, 0)
shader_parameter/sizeX = 10.0
shader_parameter/sizeY = 1.0
-shader_parameter/scaleAll = 0.667
+shader_parameter/scaleAll = 0.3945
shader_parameter/worldSize_vs_screenSize = 1.0
shader_parameter/usSpectralsNoise = false
shader_parameter/spectralsAmount = Vector3(0.1, 0.05, 0.02)
@@ -2227,37 +2065,30 @@ shader_parameter/spectralsSize = Vector3(1, 0.8, 0.5)
shader_parameter/spectralsSharpness = Vector3(0, 0, 0)
shader_parameter/spectralsFrequency = Vector3(50, 200, 500)
shader_parameter/spectralsSpeed = Vector3(5, -3, -2)
-shader_parameter/fading = SubResource("GradientTexture2D_txdr1")
-shader_parameter/useQuickOcclusionTest = true
+shader_parameter/useQuickOcclusionTest = false
shader_parameter/occlusionZOffset = 0.0
shader_parameter/occlusionTestMaxSteps = 10
shader_parameter/occlusionTestStepStride = 1.0
shader_parameter/occlusionTest_ViewDependingScaleAmount = 0.5
shader_parameter/occlusionTest_ViewDependingDistance = 100.0
-[sub_resource type="GradientTexture2D" id="GradientTexture2D_bsxpb"]
-gradient = SubResource("Gradient_2750v")
-fill = 2
-fill_from = Vector2(0.5, 0.5)
-fill_to = Vector2(0, 0.5)
-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_celbq"]
render_priority = -1
next_pass = SubResource("ShaderMaterial_yttar")
shader = ExtResource("124_txdr1")
-shader_parameter/color = Color(0.5843137, 0.67306423, 0.8, 1)
-shader_parameter/alphaScale = 1.0
-shader_parameter/circleAmount = 1.3065
-shader_parameter/circleDistortion = 1.1125
-shader_parameter/ellipseAmount = 0.1
-shader_parameter/ellipseDistortion = 2.537
-shader_parameter/ellipseScale = Vector2(1, 0.904)
+shader_parameter/color = Color(0, 0.3147986, 3.4860003, 1)
+shader_parameter/alphaScale = 2.0635
+shader_parameter/circleAmount = 1.0
+shader_parameter/circleDistortion = 1.0
+shader_parameter/ellipseAmount = 0.0255
+shader_parameter/ellipseDistortion = 5.0
+shader_parameter/ellipseScale = Vector2(1, 0.5)
shader_parameter/add_vs_max = 0.0
shader_parameter/centerHSL = Vector4(0.08, 0, 0.18, 1)
shader_parameter/outsideHSL = Vector4(-0.05, 1.65, 0.02, 0)
-shader_parameter/sizeX = 100.0
+shader_parameter/sizeX = 41.146001906935
shader_parameter/sizeY = 1.0
-shader_parameter/scaleAll = 0.071
+shader_parameter/scaleAll = 0.0835
shader_parameter/worldSize_vs_screenSize = 1.0
shader_parameter/usSpectralsNoise = false
shader_parameter/spectralsAmount = Vector3(0.1, 0.05, 0.02)
@@ -2266,8 +2097,7 @@ shader_parameter/spectralsSize = Vector3(1, 0.8, 0.5)
shader_parameter/spectralsSharpness = Vector3(0, 0, 0)
shader_parameter/spectralsFrequency = Vector3(50, 200, 500)
shader_parameter/spectralsSpeed = Vector3(5, -3, -2)
-shader_parameter/fading = SubResource("GradientTexture2D_bsxpb")
-shader_parameter/useQuickOcclusionTest = true
+shader_parameter/useQuickOcclusionTest = false
shader_parameter/occlusionZOffset = 0.0
shader_parameter/occlusionTestMaxSteps = 10
shader_parameter/occlusionTestStepStride = 1.0
@@ -3092,7 +2922,6 @@ render_priority = 100
outline_render_priority = 99
modulate = Color(0.53504485, 0.90053093, 0.35550776, 1)
outline_modulate = Color(0.13993634, 0.42532474, 0.23995323, 1)
-text = "P"
font_size = 100
outline_size = 50
script = ExtResource("35_5kble")
@@ -3136,7 +2965,6 @@ render_priority = 100
outline_render_priority = 99
modulate = Color(0.9141083, 0.34904757, 0.30075133, 1)
outline_modulate = Color(0.38459277, 0.088595904, 0.14523984, 1)
-text = "S"
font_size = 100
outline_size = 50
script = ExtResource("35_5kble")
@@ -3163,7 +2991,6 @@ render_priority = 100
outline_render_priority = 99
modulate = Color(0.30196086, 0.65454865, 0.9137255, 1)
outline_modulate = Color(0.117091015, 0.10999007, 0.64256185, 1)
-text = "L"
font_size = 100
outline_size = 50
script = ExtResource("35_5kble")
@@ -3217,6 +3044,7 @@ camera = NodePath("../Main Camera")
worldEnvironment = NodePath("../WorldEnvironment")
debugCamera = NodePath("../Debug Editor Camera")
debugCameraToggle = SubResource("Resource_v4k1o")
+compositorLayout = SubResource("Resource_4k7mp")
postProcessVolumes = [NodePath("../WorldEnvironment/Winter"), NodePath("../WorldEnvironment/Spring")]
CameraPrioritySmoothingCoefficient = 0.01
@@ -3252,35 +3080,121 @@ script = ExtResource("23_yr58t")
zoomSmoothing = SubResource("Resource_bf3rb")
keyboardMouseInputs = ExtResource("64_u7p5w")
-[node name="All FX" type="Node" parent="App/Camera Setup"]
-script = ExtResource("79_why7y")
-value = 0.1926
-targets = [SubResource("Resource_762km"), SubResource("Resource_i46l2"), SubResource("Resource_mdsx3"), SubResource("Resource_p64cs"), SubResource("Resource_i5utj"), SubResource("Resource_hpfyh")]
-metadata/_custom_type_script = "uid://bvmdtshoesn5v"
+[node name="VFX" type="Node" parent="App/Camera Setup"]
-[node name="FloatDriver" type="Node" parent="App/Camera Setup"]
-script = ExtResource("79_why7y")
-value = 1.0
-targets = [SubResource("Resource_c05wc"), SubResource("Resource_d1ujc"), SubResource("Resource_a3id7")]
-metadata/_custom_type_script = "uid://bvmdtshoesn5v"
+[node name="Digital Compression VFX" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("77_jlp8b")
+ownerReference = SubResource("Resource_oqkh4")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
-[node name="Impact" type="Node" parent="App/Camera Setup" node_paths=PackedStringArray("targetNode")]
-script = ExtResource("48_pp0bs")
-targetNode = NodePath("../FloatDriver")
-targetMemberPath = "value"
-endValue = 1.0
-duration = SubResource("Resource_ie6m2")
-curve = ExtResource("31_t2h31")
-forceStartValue = true
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
+[node name="Tube TV" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("79_ka6hw")
+ownerReference = SubResource("Resource_4n83u")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
-[node name="Drive to 0" type="Node" parent="App/Camera Setup" node_paths=PackedStringArray("targetNode")]
-script = ExtResource("48_pp0bs")
-targetNode = NodePath("../FloatDriver")
-targetMemberPath = "value"
-duration = SubResource("Resource_ie6m2")
-curve = ExtResource("31_t2h31")
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
+[node name="Old Film" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("86_t5au6")
+ownerReference = SubResource("Resource_gyycf")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Impact Wave" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("81_1er25")
+ownerReference = SubResource("Resource_fy8er")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Blue Cinematic Bloom" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("82_u533a")
+ownerReference = SubResource("Resource_0c48d")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Red Cinematic Bloom" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("83_762km")
+ownerReference = SubResource("Resource_5rqpk")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Green Cinematic Bloom" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("90_i46l2")
+ownerReference = SubResource("Resource_i5utj")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Yellow Cinematic Bloom" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("91_4545n")
+ownerReference = SubResource("Resource_d1ujc")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Star Glow" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("84_c05wc")
+ownerReference = SubResource("Resource_1ntwo")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Drunken" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("85_i46l2")
+ownerReference = SubResource("Resource_fy8er")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Blur" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("86_4545n")
+ownerReference = SubResource("Resource_008mr")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Frozen Ice" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("80_fqrsx")
+ownerReference = SubResource("Resource_6xf1f")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Super Speed" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("96_m7r8b")
+preset = ExtResource("96_btbfg")
+ownerReference = SubResource("Resource_diigt")
+metadata/_custom_type_script = "uid://cebnf3dtch0oh"
+
+[node name="Wipes" type="Node" parent="App/Camera Setup/VFX"]
+script = ExtResource("91_vgxo8")
+metadata/_custom_type_script = "uid://ceaglilesxsi4"
+
+[node name="Wipe In" type="Node" parent="App/Camera Setup/VFX/Wipes"]
+script = ExtResource("45_loqre")
+duration = SubResource("Resource_dq7d0")
+wipeSettings = SubResource("Resource_p7jqt")
+metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
+
+[node name="Wipe 2 In" type="Node" parent="App/Camera Setup/VFX/Wipes"]
+script = ExtResource("45_loqre")
+duration = SubResource("Resource_tdk3c")
+wipeSettings = SubResource("Resource_drk6d")
+metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
+
+[node name="Delay" type="Node" parent="App/Camera Setup/VFX/Wipes"]
+script = ExtResource("92_tr1d7")
+duration = 0.5
+timeLine = ExtResource("11_sl01w")
+metadata/_custom_type_script = "uid://b2g7rycr0ouu4"
+
+[node name="Wipe 2 Out" type="Node" parent="App/Camera Setup/VFX/Wipes"]
+script = ExtResource("45_loqre")
+direction = 1
+duration = SubResource("Resource_tdk3c")
+wipeSettings = SubResource("Resource_drk6d")
+metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
+
+[node name="Wipe Out" type="Node" parent="App/Camera Setup/VFX/Wipes"]
+script = ExtResource("45_loqre")
+direction = 1
+duration = SubResource("Resource_dq7d0")
+wipeSettings = SubResource("Resource_p7jqt")
+metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
[node name="SubViewport" type="SubViewport" parent="App/Camera Setup"]
handle_input_locally = false
@@ -3316,77 +3230,6 @@ source = NodePath("../../../Main Camera")
target = NodePath("../../../../../CharacterController/Graphics/Map Geometry Camera Rotation")
metadata/_custom_type_script = "uid://bekhujf301q48"
-[node name="ActionSequence" type="Node" parent="App/Camera Setup"]
-script = ExtResource("91_vgxo8")
-metadata/_custom_type_script = "uid://ceaglilesxsi4"
-
-[node name="Wipe In" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("45_loqre")
-duration = SubResource("Resource_dq7d0")
-wipeSettings = SubResource("Resource_p7jqt")
-metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
-
-[node name="Pixelate" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("48_pp0bs")
-target = SubResource("Compositor_6esk7")
-targetMemberPath = "CompositorEffects/2/pixelSize"
-endValue = 10.0
-duration = SubResource("Resource_q8n2a")
-curve = SubResource("Curve_vh1c2")
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
-
-[node name="Blur" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("48_pp0bs")
-target = SubResource("Compositor_6esk7")
-targetMemberPath = "CompositorEffects/3/intensity"
-endValue = 1.0
-duration = SubResource("Resource_q8n2a")
-curve = ExtResource("31_t2h31")
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
-
-[node name="Wipe 2 In" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("45_loqre")
-duration = SubResource("Resource_tdk3c")
-wipeSettings = SubResource("Resource_drk6d")
-metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
-
-[node name="Delay" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("92_tr1d7")
-duration = 0.5
-timeLine = ExtResource("11_sl01w")
-metadata/_custom_type_script = "uid://b2g7rycr0ouu4"
-
-[node name="Wipe 2 Out" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("45_loqre")
-direction = 1
-duration = SubResource("Resource_tdk3c")
-wipeSettings = SubResource("Resource_drk6d")
-metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
-
-[node name="Un-Blur" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("48_pp0bs")
-target = SubResource("Compositor_6esk7")
-targetMemberPath = "CompositorEffects/3/intensity"
-duration = SubResource("Resource_q8n2a")
-curve = ExtResource("31_t2h31")
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
-
-[node name="Unpixelate" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("48_pp0bs")
-target = SubResource("Compositor_6esk7")
-targetMemberPath = "CompositorEffects/2/pixelSize"
-endValue = 1.0
-duration = SubResource("Resource_q8n2a")
-curve = SubResource("Curve_drk6d")
-metadata/_custom_type_script = "uid://dm4i0s67kio5v"
-
-[node name="Wipe Out" type="Node" parent="App/Camera Setup/ActionSequence"]
-script = ExtResource("45_loqre")
-direction = 1
-duration = SubResource("Resource_dq7d0")
-wipeSettings = SubResource("Resource_p7jqt")
-metadata/_custom_type_script = "uid://c4s7kbtpirx6b"
-
[node name="Third Person Camera" type="Node3D" parent="App" node_paths=PackedStringArray("target")]
script = ExtResource("24_ntqly")
target = NodePath("../../CharacterController/Graphics")
@@ -3432,7 +3275,7 @@ height = SubResource("Resource_y6wps")
metadata/_custom_type_script = "uid://c2hicupu28nbi"
[node name="Fill" type="TextureRect" parent="App/UI/Hearts/Heart"]
-material = SubResource("ShaderMaterial_i46l2")
+material = SubResource("ShaderMaterial_ysmsc")
layout_mode = 0
offset_right = 38.4
offset_bottom = 38.4
@@ -3449,7 +3292,7 @@ top = SubResource("Resource_2750v")
metadata/_custom_type_script = "uid://bx0bk663u3hj5"
[node name="Outline" type="TextureRect" parent="App/UI/Hearts/Heart"]
-material = SubResource("ShaderMaterial_4545n")
+material = SubResource("ShaderMaterial_t5au6")
layout_mode = 0
offset_right = 38.4
offset_bottom = 38.4
@@ -3478,7 +3321,7 @@ height = SubResource("Resource_y6wps")
metadata/_custom_type_script = "uid://c2hicupu28nbi"
[node name="Fill" type="TextureRect" parent="App/UI/Hearts/Heart2"]
-material = SubResource("ShaderMaterial_d1ujc")
+material = SubResource("ShaderMaterial_btbfg")
layout_mode = 0
offset_right = 38.399998
offset_bottom = 38.4
@@ -3495,7 +3338,7 @@ top = SubResource("Resource_2750v")
metadata/_custom_type_script = "uid://bx0bk663u3hj5"
[node name="Outline" type="TextureRect" parent="App/UI/Hearts/Heart2"]
-material = SubResource("ShaderMaterial_mdsx3")
+material = SubResource("ShaderMaterial_ixqtu")
layout_mode = 0
offset_right = 38.399998
offset_bottom = 38.4
@@ -3524,7 +3367,7 @@ height = SubResource("Resource_y6wps")
metadata/_custom_type_script = "uid://c2hicupu28nbi"
[node name="Fill" type="TextureRect" parent="App/UI/Hearts/Heart3"]
-material = SubResource("ShaderMaterial_wpvj8")
+material = SubResource("ShaderMaterial_m7r8b")
layout_mode = 0
offset_right = 38.399994
offset_bottom = 38.4
@@ -3541,7 +3384,7 @@ top = SubResource("Resource_2750v")
metadata/_custom_type_script = "uid://bx0bk663u3hj5"
[node name="Outline" type="TextureRect" parent="App/UI/Hearts/Heart3"]
-material = SubResource("ShaderMaterial_ysmsc")
+material = SubResource("ShaderMaterial_sw5v3")
layout_mode = 0
offset_right = 38.399994
offset_bottom = 38.4
@@ -3571,7 +3414,7 @@ metadata/_custom_type_script = "uid://c2hicupu28nbi"
metadata/_edit_use_anchors_ = true
[node name="UIImage" type="TextureRect" parent="App/UI/Collected Presents"]
-material = SubResource("ShaderMaterial_t5au6")
+material = SubResource("ShaderMaterial_wi6eu")
layout_mode = 0
offset_left = 38.4
offset_top = 38.4
@@ -3603,7 +3446,7 @@ marginRight = SubResource("Resource_b5y7t")
metadata/_custom_type_script = "uid://c2hicupu28nbi"
[node name="Fill" type="TextureRect" parent="App/UI/Collected Presents/Present"]
-material = SubResource("ShaderMaterial_btbfg")
+material = SubResource("ShaderMaterial_7720d")
layout_mode = 0
offset_right = 38.4
offset_bottom = 38.399998
@@ -3627,9 +3470,9 @@ offset_right = 135.6
offset_bottom = 90.3
pivot_offset = Vector2(15, 13.5)
text = "0/0"
-label_settings = SubResource("LabelSettings_ixqtu")
+label_settings = SubResource("LabelSettings_a3id7")
script = ExtResource("77_ubijs")
-locale = SubResource("Resource_7axlu")
+locale = SubResource("Resource_a3id7")
metadata/_custom_type_script = "uid://rqs2m0u6yvvf"
[node name="Map" type="Control" parent="App/UI"]
@@ -3649,7 +3492,7 @@ metadata/_custom_type_script = "uid://c2hicupu28nbi"
metadata/_edit_use_anchors_ = true
[node name="UIImage" type="TextureRect" parent="App/UI/Map"]
-material = SubResource("ShaderMaterial_i5utj")
+material = SubResource("ShaderMaterial_ie6m2")
layout_mode = 0
offset_right = 230.40005
offset_bottom = 230.40005
@@ -3697,10 +3540,10 @@ metadata/_edit_use_anchors_ = true
[node name="Text Block" type="Control" parent="App/UI/Dialogs"]
anchors_preset = 0
-offset_left = 747.00006
+offset_left = 747.0001
offset_right = 1173.0
offset_bottom = 232.0
-pivot_offset = Vector2(213, 116)
+pivot_offset = Vector2(212.99997, 116)
script = ExtResource("39_ji1pb")
horizontalAlignment = SubResource("Resource_7e4fb")
margin = SubResource("Resource_o8r6f")
@@ -3708,7 +3551,7 @@ metadata/_custom_type_script = "uid://c2hicupu28nbi"
metadata/_edit_use_anchors_ = true
[node name="UIImage" type="TextureRect" parent="App/UI/Dialogs/Text Block"]
-material = SubResource("ShaderMaterial_22k1k")
+material = SubResource("ShaderMaterial_p64cs")
layout_mode = 0
offset_right = 426.0
offset_bottom = 232.00002
@@ -3733,7 +3576,7 @@ offset_right = 330.0
offset_bottom = 136.0
pivot_offset = Vector2(117, 20)
text = "Winter's coming!"
-label_settings = SubResource("LabelSettings_hpfyh")
+label_settings = SubResource("LabelSettings_7axlu")
script = ExtResource("77_ubijs")
locale = SubResource("Resource_8imgn")
fontSize = SubResource("Resource_p54pa")
@@ -3773,7 +3616,7 @@ offset_right = 40.0
offset_bottom = 27.0
pivot_offset = Vector2(20, 13.5)
text = "Quit"
-label_settings = SubResource("LabelSettings_frwbc")
+label_settings = SubResource("LabelSettings_i5utj")
script = ExtResource("77_ubijs")
locale = SubResource("Resource_btbfg")
metadata/_custom_type_script = "uid://rqs2m0u6yvvf"
@@ -3814,7 +3657,7 @@ offset_right = 159.0
offset_bottom = 27.0
pivot_offset = Vector2(79.5, 13.5)
text = "Sword Animation"
-label_settings = SubResource("LabelSettings_w6tyf")
+label_settings = SubResource("LabelSettings_22k1k")
script = ExtResource("77_ubijs")
locale = SubResource("Resource_qiqbh")
metadata/_custom_type_script = "uid://rqs2m0u6yvvf"
@@ -3855,7 +3698,7 @@ offset_right = 48.0
offset_bottom = 27.0
pivot_offset = Vector2(24, 13.5)
text = "Jump"
-label_settings = SubResource("LabelSettings_63qv8")
+label_settings = SubResource("LabelSettings_hpfyh")
script = ExtResource("77_ubijs")
locale = SubResource("Resource_y44jo")
metadata/_custom_type_script = "uid://rqs2m0u6yvvf"
@@ -3896,7 +3739,7 @@ offset_right = 73.0
offset_bottom = 27.0
pivot_offset = Vector2(36.5, 13.5)
text = "Interact"
-label_settings = SubResource("LabelSettings_gxlxg")
+label_settings = SubResource("LabelSettings_frwbc")
script = ExtResource("77_ubijs")
locale = SubResource("Resource_t5au6")
metadata/_custom_type_script = "uid://rqs2m0u6yvvf"
@@ -4176,50 +4019,50 @@ transform = Transform3D(-0.9986062, 0, -0.0527471, 0, 1, 0, 0.0527471, 0, -0.998
transform = Transform3D(-0.7727, 0, -1.1667446e-07, 0, 0.7727, 0, 1.1667446e-07, 0, -0.7727, 0, 0.1585, 0)
[node name="GeneralSkeleton" parent="CharacterController/Graphics/Hoody Hood/Rig_Medium" index="0"]
-bones/1/position = Vector3(0, 0.3844856, 0)
-bones/1/rotation = Quaternion(0.0042527714, 0.04315747, 0.00018371429, 0.99905926)
+bones/1/position = Vector3(0, 0.3901653, 0)
+bones/1/rotation = Quaternion(0.0011011867, 0.043157846, 4.757177e-05, 0.99906766)
bones/1/scale = Vector3(0.99999994, 1, 0.99999994)
-bones/2/rotation = Quaternion(-0.0703604, 0.094814956, 0.99125934, -0.058860127)
+bones/2/rotation = Quaternion(-0.069685765, 0.07367776, 0.9930822, -0.05918906)
bones/2/scale = Vector3(0.9999999, 0.9999998, 0.9999996)
-bones/3/rotation = Quaternion(-1.642021e-07, 0.97400683, -0.22651902, -2.3494344e-08)
+bones/3/rotation = Quaternion(-1.2760377e-07, 0.9841306, -0.17744571, -1.5287588e-08)
bones/3/scale = Vector3(1.0000004, 0.9999996, 0.9999999)
-bones/4/rotation = Quaternion(0.010511483, 0.60119766, -0.78970546, 0.12172243)
+bones/4/rotation = Quaternion(0.015312845, 0.6261743, -0.7700994, 0.12090643)
bones/4/scale = Vector3(1.0000004, 0.9999994, 1.000001)
-bones/5/rotation = Quaternion(8.749161e-07, 1, 0.00030764937, 6.0895593e-07)
+bones/5/rotation = Quaternion(-4.729886e-06, 1, 0.0002805024, -3.4116802e-06)
bones/5/scale = Vector3(1.0000001, 1.0000013, 0.9999986)
-bones/6/rotation = Quaternion(-0.03154476, 0.070038654, 0.99657875, 0.03050204)
+bones/6/rotation = Quaternion(-0.031900227, 0.049408603, 0.99783844, 0.029322442)
bones/6/scale = Vector3(0.9999999, 0.9999999, 0.9999996)
-bones/7/rotation = Quaternion(1.9636886e-07, 0.9714193, -0.23737024, 3.0116507e-08)
+bones/7/rotation = Quaternion(1.544996e-07, 0.98205423, -0.18859926, 2.0415198e-08)
bones/7/scale = Vector3(0.99999994, 0.9999994, 0.9999997)
-bones/8/rotation = Quaternion(-0.041099228, 0.5739437, -0.81080157, -0.107240416)
+bones/8/rotation = Quaternion(-0.04497423, 0.59989446, -0.79179466, -0.10566644)
bones/8/scale = Vector3(0.99999976, 0.9999993, 1.000001)
bones/9/rotation = Quaternion(7.434201e-05, 1, 0.00034067035, 5.3566793e-05)
bones/9/scale = Vector3(1.0000002, 1.0000015, 0.9999982)
-bones/10/rotation = Quaternion(0.012118974, 1.8316222e-09, 0.0010489913, 0.9999261)
+bones/10/rotation = Quaternion(0.0030550272, 1.8111497e-09, 0.00026443633, 0.9999953)
bones/10/scale = Vector3(1.0000001, 1, 1.0000001)
-bones/11/rotation = Quaternion(-0.005717461, 4.46736e-09, -0.00049489044, 0.9999836)
-bones/12/rotation = Quaternion(-0.015675489, -0.031337887, -0.0008629567, 0.99938565)
+bones/11/rotation = Quaternion(0.0022551394, 2.8531157e-09, 0.00019519978, 0.9999975)
+bones/12/rotation = Quaternion(-0.0052811713, -0.031341314, -0.00029073664, 0.9994948)
bones/12/scale = Vector3(0.99999994, 1, 1)
-bones/13/rotation = Quaternion(0.77276397, 0.3184724, -0.5361067, 0.11832531)
+bones/13/rotation = Quaternion(0.77876115, 0.30721626, -0.53162175, 0.12855928)
bones/13/scale = Vector3(0.99999994, 0.99999964, 1.0000001)
-bones/14/rotation = Quaternion(0.2306522, -0.6684306, 0.23065202, 0.66843086)
+bones/14/rotation = Quaternion(0.22030735, -0.6719112, 0.22030735, 0.6719113)
bones/14/scale = Vector3(1, 0.99999994, 1.0000001)
bones/15/rotation = Quaternion(6.030765e-08, 0.70710677, -2.3986061e-08, 0.70710677)
bones/15/scale = Vector3(1.0000001, 1, 1)
-bones/16/rotation = Quaternion(0.17852141, 0.8953555, 0.22034976, 0.34338695)
+bones/16/rotation = Quaternion(0.18317544, 0.8933918, 0.22163484, 0.34521875)
bones/16/scale = Vector3(0.9999994, 0.9999993, 0.9999999)
bones/17/position = Vector3(5.1376087e-10, 0.09612512, -0.0575)
-bones/17/rotation = Quaternion(0.0023949714, 0.0023949798, -0.6982575, 0.71583873)
-bones/18/rotation = Quaternion(0.7387045, -0.36493853, 0.5645399, 0.049297687)
+bones/17/rotation = Quaternion(0.0006150109, 0.00061499974, -0.7048456, 0.7093602)
+bones/18/rotation = Quaternion(0.7451951, -0.35638484, 0.56048125, 0.059455283)
bones/18/scale = Vector3(0.99999994, 0.99999946, 1.0000001)
-bones/19/rotation = Quaternion(0.23986395, 0.66518056, -0.23986377, 0.6651808)
+bones/19/rotation = Quaternion(0.23220101, 0.6678942, -0.23220083, 0.6678943)
bones/19/scale = Vector3(1.0000001, 0.9999999, 1.0000001)
bones/20/rotation = Quaternion(1.6763806e-08, -0.70710677, -1.6763806e-08, 0.70710677)
bones/20/scale = Vector3(0.99999994, 0.99999994, 1)
-bones/21/rotation = Quaternion(-0.13172698, 0.8910991, 0.2107397, -0.3797095)
+bones/21/rotation = Quaternion(-0.13815045, 0.8884321, 0.2119508, -0.38298815)
bones/21/scale = Vector3(0.99999905, 0.99999905, 1)
bones/22/position = Vector3(-1.5415006e-08, 0.096125185, -0.0575)
-bones/22/rotation = Quaternion(0.0023949714, -0.0023949798, 0.6982575, 0.71583873)
+bones/22/rotation = Quaternion(0.0006150109, -0.00061499974, 0.7048456, 0.7093602)
bones/22/scale = Vector3(1, 1.0000001, 1)
[node name="RogueHooded_ArmLeft" parent="CharacterController/Graphics/Hoody Hood/Rig_Medium/GeneralSkeleton" index="0"]
@@ -4250,7 +4093,7 @@ layers = 2
surface_material_override/0 = ExtResource("106_oi8o8")
[node name="BoneAttachment3D" parent="CharacterController/Graphics/Hoody Hood/Rig_Medium/GeneralSkeleton" index="8"]
-transform = Transform3D(0.52844673, -0.3696764, 0.7642535, 0.07483588, -0.8764272, -0.47568262, 0.8456616, 0.3085668, -0.4354803, -0.4524379, 0.6908758, 0.042215638)
+transform = Transform3D(0.5374286, -0.36845592, 0.7585582, 0.08326266, -0.87192243, -0.48251188, 0.83918875, 0.32247555, -0.43791792, -0.45242795, 0.6947015, 0.042391516)
[node name="sword_2handed_color" parent="CharacterController/Graphics/Hoody Hood/Rig_Medium/GeneralSkeleton/BoneAttachment3D/sword_2handed_color2" index="0"]
layers = 2
@@ -8641,82 +8484,82 @@ metadata/_custom_type_script = "uid://dma6i63t4myyu"
[node name="Pole" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24745186, -1.2769699e-07, 0.9689002, 7.1054274e-15, 1, 1.3179582e-07, -0.9689002, -3.2613112e-08, 0.24745186, 2.6126552, 0, 1.3397675)
-[node name="@StaticBody3D@56924" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362241" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746443, -1.2769499e-07, 0.968897, -2.131628e-14, 1, 1.3179418e-07, -0.968897, -3.2614395e-08, 0.24746443, 1.6434426, -1.3183649e-07, 1.092226)
-[node name="@StaticBody3D@56925" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362242" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746166, -1.2769418e-07, 0.9688977, 4.2632564e-14, 1, 1.3179324e-07, -0.9688977, -3.2613734e-08, 0.24746166, 0.676497, -2.6336443e-07, 0.84526443)
-[node name="@StaticBody3D@56926" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362243" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24745981, -1.2769517e-07, 0.9688982, -1.2789769e-13, 1, 1.3179424e-07, -0.9688982, -3.26139e-08, 0.24745981, -0.29044628, -3.948926e-07, 0.59830284)
-[node name="@StaticBody3D@56927" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362244" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24745889, -1.2769425e-07, 0.9688984, 9.2370556e-14, 1, 1.317932e-07, -0.9688984, -3.261331e-08, 0.24745889, -1.2573905, -5.2642076e-07, 0.35134315)
-[node name="@StaticBody3D@56928" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362245" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746443, -1.2769344e-07, 0.968897, 2.8421706e-14, 1, 1.3179259e-07, -0.968897, -3.261395e-08, 0.24746443, -2.225751, -6.581413e-07, 0.10402107)
-[node name="@StaticBody3D@56929" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362246" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746443, -1.2769432e-07, 0.968897, 2.131628e-14, 1, 1.317935e-07, -0.968897, -3.261418e-08, 0.24746443, -3.1941638, -7.898693e-07, -0.14331627)
-[node name="@StaticBody3D@56930" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362247" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746443, -1.2769432e-07, 0.968897, 2.131628e-14, 1, 1.317935e-07, -0.968897, -3.261418e-08, 0.24746443, -4.162578, -9.2159735e-07, -0.3906517)
-[node name="@StaticBody3D@56931" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362248" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.2474582, -1.2769503e-07, 0.9688986, 4.9737995e-14, 1, 1.31794e-07, -0.9688986, -3.2613457e-08, 0.2474582, -5.1309924, -1.0533254e-06, -0.63798714)
-[node name="@StaticBody3D@56932" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362249" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.24746086, -1.2769425e-07, 0.9688979, -4.2632568e-14, 1, 1.3179331e-07, -0.9688979, -3.261373e-08, 0.24746086, -6.100232, -1.1851655e-06, -0.8855362)
-[node name="@StaticBody3D@56933" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362250" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.2474582, -1.2769455e-07, 0.9688986, -4.2632568e-14, 1, 1.3179353e-07, -0.9688986, -3.2613432e-08, 0.2474582, -7.0703135, -1.3171202e-06, -1.133297)
-[node name="@StaticBody3D@56934" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362251" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.9935537, -1.3427036e-08, -0.11336251, -4.2632564e-14, 1, -1.1844373e-07, 0.11336251, 1.17680216e-07, 0.9935537, -7.913049, -1.4176521e-06, -1.4884872)
-[node name="@StaticBody3D@56935" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362252" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.97000825, -3.331323e-08, -0.24307209, -2.1316282e-14, 1, -1.3705092e-07, 0.24307209, 1.3294053e-07, 0.97000825, -7.6884084, -1.2831135e-06, -2.4631443)
-[node name="@StaticBody3D@56936" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362253" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.9423538, -4.9882896e-08, -0.3346182, 5.6843426e-14, 1, -1.490739e-07, 0.3346182, 1.4048034e-07, 0.9423538, -7.399719, -1.1379084e-06, -3.4408388)
[node name="Segment" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9692128, -1.2769453e-07, 0.2474621, -1.3183652e-07, 1, 0, -0.2475426, -3.261393e-08, -0.9688976, 2.1280484, 0.56389993, 1.2159958)
-[node name="@StaticBody3D@56937" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362254" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.966945, -1.2769459e-07, 0.24746025, -1.3152795e-07, 1, 3.5527137e-15, -0.24696143, -3.261368e-08, -0.96889806, 1.1599689, 0.5638998, 0.9687443)
-[node name="@StaticBody3D@56938" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362255" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9669439, -1.2769499e-07, 0.24745955, -1.3152817e-07, 1, -5.516598e-15, -0.2469604, -3.261369e-08, -0.96889824, 0.19302511, 0.56389964, 0.7217846)
-[node name="@StaticBody3D@56939" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362256" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9669439, -1.2769499e-07, 0.24745955, -1.3152817e-07, 1, -5.516598e-15, -0.2469604, -3.261369e-08, -0.96889824, -0.77391815, 0.5638995, 0.474823)
-[node name="@StaticBody3D@56940" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362257" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9683606, -1.2769462e-07, 0.24745978, -1.3172051e-07, 1, 0, -0.24732248, -3.2613627e-08, -0.9688982, -1.741571, 0.5638994, 0.22768211)
-[node name="@StaticBody3D@56941" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362258" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.96841353, -1.2769495e-07, 0.24745978, -1.3172806e-07, 1, -3.552714e-15, -0.247336, -3.2613713e-08, -0.9688982, -2.709958, 0.5638993, -0.019647598)
-[node name="@StaticBody3D@56942" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362259" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9684139, -1.276949e-07, 0.24745978, -1.3172806e-07, 1, 3.552714e-15, -0.24733609, -3.2613695e-08, -0.9688982, -3.678372, 0.56389916, -0.26698303)
-[node name="@StaticBody3D@56943" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362260" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.96841407, -1.2769493e-07, 0.24745908, -1.3172806e-07, 1, -3.5527137e-15, -0.24733539, -3.261361e-08, -0.96889836, -4.6467853, 0.563899, -0.5143204)
-[node name="@StaticBody3D@56944" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362261" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.9692401, -1.276945e-07, 0.24746093, -1.3184012e-07, 1, 3.552714e-15, -0.24754834, -3.2613755e-08, -0.9688979, -5.615612, 0.56389886, -0.7617626)
-[node name="@StaticBody3D@56945" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362262" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.97008145, -1.2769478e-07, 0.24745955, -1.3195474e-07, 1, 1.5888332e-15, -0.24776174, -3.2613634e-08, -0.96889824, -6.585273, 0.56389874, -1.0094166)
-[node name="@StaticBody3D@56946" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362263" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(-0.842736, -1.0129791e-07, 0.38838512, -1.0053193e-07, 1, 0, -0.3551895, -4.2694214e-08, -0.92149717, -7.491682, 0.5638986, -1.3108921)
-[node name="@StaticBody3D@56947" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362264" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.22463985, -3.0210007e-08, 0.97445273, 1.3453861e-07, 1, -5.3290705e-15, -0.9746579, 1.3107392e-07, 0.22459257, -7.8007293, 0.5638986, -1.9758167)
-[node name="@StaticBody3D@56948" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362265" type="StaticBody3D" parent="Level/City/Fence/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.28869, -4.033704e-08, 0.959064, 1.4520519e-07, 1, -7.797712e-15, -0.97769296, 1.366076e-07, 0.2831893, -7.544064, 0.5638988, -2.951992)
[node name="Fence2" type="Node3D" parent="Level/City"]
@@ -8794,82 +8637,82 @@ metadata/_custom_type_script = "uid://dma6i63t4myyu"
[node name="Pole" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.9716608, -1.2938479e-07, -0.23637955, 2.557954e-13, 1, -5.473593e-07, 0.23637955, 5.3184755e-07, 0.9716608, -6.746191, -1.6073213e-06, -6.1097593)
-[node name="@StaticBody3D@56949" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362266" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.97166055, -1.2938537e-07, -0.23638058, -2.2737368e-13, 1, -5.4736137e-07, 0.23638058, 5.318495e-07, 0.97166055, -6.5062113, -1.0516269e-06, -7.0962143)
-[node name="@StaticBody3D@56950" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362267" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(0.7057637, -3.8093032e-07, -0.70844734, -9.947598e-14, 1, -5.3769753e-07, 0.70844734, 3.7948746e-07, 0.7057637, -6.269187, -5.027714e-07, -8.070531)
-[node name="@StaticBody3D@56951" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362268" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.2779772, -1.07419545e-07, -0.9605877, -2.4868997e-14, 1, -1.1182689e-07, 0.9605877, -3.1085303e-08, -0.2779772, -5.321661, -3.698044e-07, -7.841668)
-[node name="@StaticBody3D@56952" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362269" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.2780144, -1.0739825e-07, -0.9605769, 2.4868997e-14, 1, -1.11805996e-07, 0.9605769, -3.10837e-08, -0.2780144, -4.361126, -2.5798363e-07, -7.5637054)
-[node name="@StaticBody3D@56953" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362270" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.28213567, -1.0498671e-07, -0.95937455, 1.4210856e-14, 1, -1.0943246e-07, 0.95937455, -3.0874816e-08, -0.28213567, -3.4034705, -1.4845864e-07, -7.282652)
-[node name="@StaticBody3D@56954" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362271" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.28213567, -1.04986064e-07, -0.95937455, 1.0658142e-14, 1, -1.0943178e-07, 0.95937455, -3.087462e-08, -0.28213567, -2.446238, -3.9270162e-08, -7.001148)
-[node name="@StaticBody3D@56955" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362272" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.2821367, -1.0498687e-07, -0.9593742, -2.4868997e-14, 1, -1.0943265e-07, 0.9593742, -3.0874943e-08, -0.2821367, -1.4890046, 6.991854e-08, -6.7196436)
-[node name="@StaticBody3D@56956" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362273" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.28213543, -1.04986704e-07, -0.9593746, -3.552714e-15, 1, -1.0943244e-07, 0.9593746, -3.0874766e-08, -0.28213543, -0.5317712, 1.7910702e-07, -6.438136)
-[node name="@StaticBody3D@56957" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362274" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.28432858, -1.0370141e-07, -0.9587269, 0, 1, -1.0816575e-07, 0.9587269, -3.0754613e-08, -0.28432858, 0.4246149, 2.8763316e-07, -6.1557493)
-[node name="@StaticBody3D@56958" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362275" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.2843311, -1.03701844e-07, -0.95872617, -2.842171e-14, 1, -1.08166276e-07, 0.95872617, -3.075501e-08, -0.2843311, 1.3800678, 3.9542988e-07, -5.872389)
-[node name="@StaticBody3D@56959" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362276" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.28432858, -1.0370186e-07, -0.9587269, -3.5527137e-15, 1, -1.0816621e-07, 0.9587269, -3.075474e-08, -0.28432858, 2.3355222, 5.0322683e-07, -5.5890284)
-[node name="@StaticBody3D@56960" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362277" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.2861358, -1.0264401e-07, -0.9581891, 1.7763568e-14, 1, -1.0712292e-07, 0.9581891, -3.065172e-08, -0.2861358, 3.2909818, 6.109675e-07, -5.3055525)
-[node name="@StaticBody3D@56961" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
+[node name="@StaticBody3D@362278" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("129_y6wps")]
transform = Transform3D(-0.29183987, -9.930432e-08, -0.9564672, 7.1054274e-15, 1, -1.0382407e-07, 0.9564672, -3.030001e-08, -0.29183987, 4.248389, 7.1712225e-07, -5.017887)
[node name="Segment" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.23997897, -1.2938501e-07, 0.97166073, 5.5569444e-07, 1, 0, -0.986455, 5.318487e-07, 0.2363799, -6.6262016, 0.5638987, -6.6029873)
-[node name="@StaticBody3D@56962" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362279" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.23702416, -1.2938405e-07, 0.9716611, 5.4885555e-07, 1, 4.2632568e-14, -0.97431606, 5.3184834e-07, 0.23637828, -6.3876996, 0.5638992, -7.583372)
-[node name="@StaticBody3D@56963" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362280" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.94752634, -1.3259518e-07, -0.23478378, 1.3296702e-07, 1, -3.552714e-15, 0.22886103, -3.2026406e-08, 0.9720476, -5.7954245, 0.5638996, -7.9561005)
-[node name="@StaticBody3D@56964" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362281" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.96053535, -1.0741943e-07, -0.27797857, 1.1182079e-07, 1, 0, 0.27796355, -3.1085463e-08, 0.96058726, -4.8413935, 0.5638997, -7.702688)
-[node name="@StaticBody3D@56965" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362282" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.95765525, -1.0529848e-07, -0.28160286, 1.0952499e-07, 1, 1.2119149e-15, 0.28105235, -3.0902964e-08, 0.95953107, -3.8822982, 0.5638998, -7.4231787)
-[node name="@StaticBody3D@56966" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362283" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.9572329, -1.0498706e-07, -0.28213513, 1.091885e-07, 1, -5.037709e-15, 0.28150526, -3.0874833e-08, 0.95937467, -2.9248548, 0.5638999, -7.141901)
-[node name="@StaticBody3D@56967" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362284" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.9572333, -1.0498726e-07, -0.2821349, 1.0918874e-07, 1, 1.7763568e-15, 0.28150514, -3.087487e-08, 0.9593747, -1.9676208, 0.5639, -6.8603954)
-[node name="@StaticBody3D@56968" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362285" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.9572333, -1.0498704e-07, -0.2821349, 1.0918851e-07, 1, 1.7763568e-15, 0.28150514, -3.0874805e-08, 0.9593747, -1.0103884, 0.5639001, -6.578889)
-[node name="@StaticBody3D@56969" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362286" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.95638615, -1.0437552e-07, -0.28318027, 1.0852614e-07, 1, 3.5527137e-15, 0.2823888, -3.0818597e-08, 0.9590667, -0.053578377, 0.56390023, -6.2969437)
-[node name="@StaticBody3D@56970" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362287" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.955453, -1.0370163e-07, -0.28433084, 1.0779675e-07, 1, 3.5527137e-15, 0.2833601, -3.0754947e-08, 0.9587262, 0.90234137, 0.56390035, -6.0140676)
-[node name="@StaticBody3D@56971" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362288" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.95545405, -1.037017e-07, -0.2843308, 1.0779695e-07, 1, 1.776357e-15, 0.28336036, -3.075496e-08, 0.9587262, 1.8577943, 0.5639005, -5.730709)
-[node name="@StaticBody3D@56972" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362289" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.9554604, -1.03640176e-07, -0.2844354, 1.0774068e-07, 1, -3.552714e-15, 0.28347567, -3.074901e-08, 0.95869523, 2.813252, 0.56390053, -5.4472904)
-[node name="@StaticBody3D@56973" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
+[node name="@StaticBody3D@362290" type="StaticBody3D" parent="Level/City/Fence2/Output" instance=ExtResource("128_gla4y")]
transform = Transform3D(0.957406, -1.0169653e-07, -0.28775427, 1.06154744e-07, 1, -1.7763568e-15, 0.28766462, -3.0556e-08, 0.9577043, 3.7696853, 0.56390065, -5.1617203)
[node name="Presents" type="Node" parent="Level"]
diff --git a/Utilities/PostProcessingHack.cs b/Utilities/PostProcessingHack.cs
index 0be2382..a5dd3ab 100644
--- a/Utilities/PostProcessingHack.cs
+++ b/Utilities/PostProcessingHack.cs
@@ -9,6 +9,9 @@ public partial class PostProcessingHack : Action
[Export]
public WorldEnvironment environment;
+ [Export]
+ public CompositorEffectOwner owner;
+
protected override void _OnTrigger()
{
ApplyHack();
@@ -25,8 +28,32 @@ public partial class PostProcessingHack : Action
{
godotArray.Add( null );
continue;
+ }
+
+ var effect = compositorEffects[ i ];
+
+ if ( effect.Enabled && effect is RokojoriCompositorEffect re )
+ {
+ if ( re.compositorEffectID == null )
+ {
+ godotArray.Add( (CompositorEffect) effect.Duplicate() );
+ }
+ else if ( re.compositorEffectID.owner == owner )
+ {
+ godotArray.Add( (CompositorEffect) effect.Duplicate() );
+ }
+ else
+ {
+ godotArray.Add( compositorEffects[ i ] );
+ }
+
+
}
- godotArray.Add( (CompositorEffect) compositorEffects[ i ].Duplicate() );
+ else
+ {
+ godotArray.Add( compositorEffects[ i ] );
+ }
+
}
environment.Compositor.CompositorEffects = godotArray;
@@ -36,6 +63,7 @@ public partial class PostProcessingHack : Action
int retriggerFramesCount = 60 * 5;
int framesCounter = 0;
+
public override void _Process( double delta )
{
if ( ! Engine.IsEditorHint() )
diff --git a/VFX/Action FX Compositor Effect Layer.tres b/VFX/Action FX Compositor Effect Layer.tres
new file mode 100644
index 0000000..2b334f5
--- /dev/null
+++ b/VFX/Action FX Compositor Effect Layer.tres
@@ -0,0 +1,8 @@
+[gd_resource type="Resource" script_class="CompositorEffectLayer" load_steps=2 format=3 uid="uid://bwhnq7w0tpgv"]
+
+[ext_resource type="Script" uid="uid://b2ik21q1iwjvo" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectLayer.cs" id="1_mgeu5"]
+
+[resource]
+script = ExtResource("1_mgeu5")
+layerName = "Action FX"
+metadata/_custom_type_script = "uid://b2ik21q1iwjvo"
diff --git a/VFX/Compositor Effects/Digital Compression/Digital Compression - Color Quantization.tres b/VFX/Compositor Effects/Digital Compression/Digital Compression - Color Quantization.tres
new file mode 100644
index 0000000..6c1d2aa
--- /dev/null
+++ b/VFX/Compositor Effects/Digital Compression/Digital Compression - Color Quantization.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://f7pv1uxpj076"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_ohnjb"]
+
+[resource]
+script = ExtResource("1_ohnjb")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Digital Compression/Digital Compression - Hue Pixelation.tres b/VFX/Compositor Effects/Digital Compression/Digital Compression - Hue Pixelation.tres
new file mode 100644
index 0000000..10b9d0b
--- /dev/null
+++ b/VFX/Compositor Effects/Digital Compression/Digital Compression - Hue Pixelation.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://teubhk5euwtd"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_b4wvu"]
+
+[resource]
+script = ExtResource("1_b4wvu")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Digital Compression/Digital Compression - RGB Pixelation.tres b/VFX/Compositor Effects/Digital Compression/Digital Compression - RGB Pixelation.tres
new file mode 100644
index 0000000..9209670
--- /dev/null
+++ b/VFX/Compositor Effects/Digital Compression/Digital Compression - RGB Pixelation.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://c13whvtucws14"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_203gg"]
+
+[resource]
+script = ExtResource("1_203gg")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Impact Wave/Impact Wave - Ellipse.tres b/VFX/Compositor Effects/Impact Wave/Impact Wave - Ellipse.tres
new file mode 100644
index 0000000..a94df35
--- /dev/null
+++ b/VFX/Compositor Effects/Impact Wave/Impact Wave - Ellipse.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://b5bj0v0c15tbf"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_ghli6"]
+
+[resource]
+script = ExtResource("1_ghli6")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Star Glow/good-graphics.png b/VFX/Compositor Effects/Star Glow/good-graphics.png
new file mode 100644
index 0000000..91c06a1
Binary files /dev/null and b/VFX/Compositor Effects/Star Glow/good-graphics.png differ
diff --git a/VFX/Compositor Effects/Star Glow/good-graphics.png.import b/VFX/Compositor Effects/Star Glow/good-graphics.png.import
new file mode 100644
index 0000000..ee80bd9
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/good-graphics.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://v7vleatgy0k2"
+path.s3tc="res://.godot/imported/good-graphics.png-212b2dc3fb2081f0e302a7c441a1e47f.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://VFX/Compositor Effects/Star Glow/good-graphics.png"
+dest_files=["res://.godot/imported/good-graphics.png-212b2dc3fb2081f0e302a7c441a1e47f.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+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=true
+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=0
diff --git a/VFX/Compositor Effects/Star Glow/good-graphics.svg b/VFX/Compositor Effects/Star Glow/good-graphics.svg
new file mode 100644
index 0000000..f3f52e4
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/good-graphics.svg
@@ -0,0 +1,356 @@
+
+
+
+
diff --git a/VFX/Compositor Effects/Star Glow/good-graphics.svg.import b/VFX/Compositor Effects/Star Glow/good-graphics.svg.import
new file mode 100644
index 0000000..e939e98
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/good-graphics.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c3f5lu0mtsuyi"
+path="res://.godot/imported/good-graphics.svg-1661aa170016732c7e98aee6aa90bbe2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://VFX/Compositor Effects/Star Glow/good-graphics.svg"
+dest_files=["res://.godot/imported/good-graphics.svg-1661aa170016732c7e98aee6aa90bbe2.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/VFX/Compositor Effects/Star Glow/star-glow-blur.png b/VFX/Compositor Effects/Star Glow/star-glow-blur.png
new file mode 100644
index 0000000..4730607
Binary files /dev/null and b/VFX/Compositor Effects/Star Glow/star-glow-blur.png differ
diff --git a/VFX/Compositor Effects/Star Glow/star-glow-blur.png.import b/VFX/Compositor Effects/Star Glow/star-glow-blur.png.import
new file mode 100644
index 0000000..d4c30f6
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/star-glow-blur.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqaqvhmyuo56d"
+path="res://.godot/imported/star-glow-blur.png-15ff384d308fdce5022977501d7756dc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://VFX/Compositor Effects/Star Glow/star-glow-blur.png"
+dest_files=["res://.godot/imported/star-glow-blur.png-15ff384d308fdce5022977501d7756dc.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
diff --git a/VFX/Compositor Effects/Star Glow/star-glow.png b/VFX/Compositor Effects/Star Glow/star-glow.png
new file mode 100644
index 0000000..8aa4fb4
Binary files /dev/null and b/VFX/Compositor Effects/Star Glow/star-glow.png differ
diff --git a/VFX/Compositor Effects/Star Glow/star-glow.png.import b/VFX/Compositor Effects/Star Glow/star-glow.png.import
new file mode 100644
index 0000000..e0f278c
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/star-glow.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fjpvfd54a04g"
+path="res://.godot/imported/star-glow.png-61f0458024aeba1668f3516b3db84782.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://VFX/Compositor Effects/Star Glow/star-glow.png"
+dest_files=["res://.godot/imported/star-glow.png-61f0458024aeba1668f3516b3db84782.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
diff --git a/VFX/Compositor Effects/Star Glow/star-glow.svg b/VFX/Compositor Effects/Star Glow/star-glow.svg
new file mode 100644
index 0000000..2bfb3be
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/star-glow.svg
@@ -0,0 +1,6437 @@
+
+
+
+
diff --git a/VFX/Compositor Effects/Star Glow/star-glow.svg.import b/VFX/Compositor Effects/Star Glow/star-glow.svg.import
new file mode 100644
index 0000000..db10f2e
--- /dev/null
+++ b/VFX/Compositor Effects/Star Glow/star-glow.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://du2h6vmq7085e"
+path="res://.godot/imported/star-glow.svg-fbf75c73d9067d86a237136327eba029.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://VFX/Compositor Effects/Star Glow/star-glow.svg"
+dest_files=["res://.godot/imported/star-glow.svg-fbf75c73d9067d86a237136327eba029.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - Color Correction.tres b/VFX/Compositor Effects/Tube TV/Tube TV - Color Correction.tres
new file mode 100644
index 0000000..0f4e37b
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - Color Correction.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://cgdjoy7ae4trj"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_3bivo"]
+
+[resource]
+script = ExtResource("1_3bivo")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 1.tres b/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 1.tres
new file mode 100644
index 0000000..b156eea
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 1.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://behopr24y6b2t"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_b8agv"]
+
+[resource]
+script = ExtResource("1_b8agv")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 2.tres.tres b/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 2.tres.tres
new file mode 100644
index 0000000..0e51771
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - Distortion Line 2.tres.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://f7bmetg7tfqu"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_vm63j"]
+
+[resource]
+script = ExtResource("1_vm63j")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - Edge Distortion.tres b/VFX/Compositor Effects/Tube TV/Tube TV - Edge Distortion.tres
new file mode 100644
index 0000000..4dab30d
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - Edge Distortion.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://d1c5ly8nkefkh"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_lcyg7"]
+
+[resource]
+script = ExtResource("1_lcyg7")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - Edge Tint.tres b/VFX/Compositor Effects/Tube TV/Tube TV - Edge Tint.tres
new file mode 100644
index 0000000..ebda4c2
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - Edge Tint.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://cisg3vmtgp8ve"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_q6s35"]
+
+[resource]
+script = ExtResource("1_q6s35")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/VFX/Compositor Effects/Tube TV/Tube TV - ScanLine.tres b/VFX/Compositor Effects/Tube TV/Tube TV - ScanLine.tres
new file mode 100644
index 0000000..f6834e9
--- /dev/null
+++ b/VFX/Compositor Effects/Tube TV/Tube TV - ScanLine.tres
@@ -0,0 +1,7 @@
+[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://o8lj2vksrgo4"]
+
+[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_m6mna"]
+
+[resource]
+script = ExtResource("1_m6mna")
+metadata/_custom_type_script = "uid://comuvej4dr22k"
diff --git a/addons/compositor-lens-flare/downsample.glsl b/addons/compositor-lens-flare/downsample.glsl
new file mode 100644
index 0000000..9eac7b6
--- /dev/null
+++ b/addons/compositor-lens-flare/downsample.glsl
@@ -0,0 +1,41 @@
+#[compute]
+#version 450
+
+// Adapted from https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
+
+// Invocations in the (x, y, z) dimension
+layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
+layout(rgba16f, set = 1, binding = 0) uniform image2D output_image;
+
+// Our push constant
+layout(push_constant, std430) uniform Params {
+ vec2 raster_size;
+ float scale;
+ float bias;
+ float desaturation;
+} params;
+
+// The code we want to execute in each invocation
+void main() {
+ ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
+ ivec2 size = ivec2(params.raster_size);
+
+ if (uv.x >= size.x || uv.y >= size.y) {
+ return;
+ }
+
+ vec4 color = imageLoad(color_image, uv);
+
+ vec3 scale = vec3(1.0) * params.scale;
+ vec3 bias = vec3(-1.0) * params.bias;
+
+ color.rgb = max(vec3(0.0, 0.0, 0.0), color.rgb + bias) * scale;
+
+ // Move each channel a bit towards the highest channel to desaturate while keeping darks
+ float highest_color = max(color.r, max(color.g, color.b));
+ color.rgb = mix(color.rgb, vec3(highest_color), vec3(params.desaturation));
+
+ imageStore(output_image, uv, color);
+}
diff --git a/addons/compositor-lens-flare/downsample.glsl.import b/addons/compositor-lens-flare/downsample.glsl.import
new file mode 100644
index 0000000..6a2279a
--- /dev/null
+++ b/addons/compositor-lens-flare/downsample.glsl.import
@@ -0,0 +1,14 @@
+[remap]
+
+importer="glsl"
+type="RDShaderFile"
+uid="uid://dl8tsatdw7ylg"
+path="res://.godot/imported/downsample.glsl-440ef8d666bfe0ff38a98dba9c03351a.res"
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/downsample.glsl"
+dest_files=["res://.godot/imported/downsample.glsl-440ef8d666bfe0ff38a98dba9c03351a.res"]
+
+[params]
+
diff --git a/addons/compositor-lens-flare/gaussian_blur.glsl b/addons/compositor-lens-flare/gaussian_blur.glsl
new file mode 100644
index 0000000..0f12282
--- /dev/null
+++ b/addons/compositor-lens-flare/gaussian_blur.glsl
@@ -0,0 +1,77 @@
+#[compute]
+#version 450
+
+// From https://github.com/BastiaanOlij/RERadialSunRays
+
+// Invocations in the (x, y, z) dimension
+layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(rgba16f, set = 0, binding = 0) uniform restrict readonly image2D input_image;
+layout(rgba16f, set = 1, binding = 0) uniform restrict writeonly image2D output_image;
+
+// Our push PushConstant
+layout(push_constant, std430) uniform Params {
+ vec2 image_size;
+ vec2 blur_size;
+} params;
+
+// Gaussian coefficients
+const int M = 16;
+const int N = 2 * M + 1;
+
+// sigma = 10
+const float coeffs[N] = float[N](
+ 0.012318109844189502,
+ 0.014381474814203989,
+ 0.016623532195728208,
+ 0.019024086115486723,
+ 0.02155484948872149,
+ 0.02417948052890078,
+ 0.02685404941667096,
+ 0.0295279624870386,
+ 0.03214534135442581,
+ 0.03464682117793548,
+ 0.0369716985390341,
+ 0.039060328279673276,
+ 0.040856643282313365,
+ 0.04231065439216247,
+ 0.043380781642569775,
+ 0.044035873841196206,
+ 0.04425662519949865,
+ 0.044035873841196206,
+ 0.043380781642569775,
+ 0.04231065439216247,
+ 0.040856643282313365,
+ 0.039060328279673276,
+ 0.0369716985390341,
+ 0.03464682117793548,
+ 0.03214534135442581,
+ 0.0295279624870386,
+ 0.02685404941667096,
+ 0.02417948052890078,
+ 0.02155484948872149,
+ 0.019024086115486723,
+ 0.016623532195728208,
+ 0.014381474814203989,
+ 0.012318109844189502
+);
+
+// The code we want to execute in each invocation
+void main() {
+ vec2 uv = vec2(gl_GlobalInvocationID.xy);
+
+ // Just in case the effect_size size is not divisable by 8
+ if ((uv.x >= params.image_size.x) || (uv.y >= params.image_size.y)) {
+ return;
+ }
+
+ vec4 blurred = vec4(0.0);
+ float half_size = float(M);
+
+ for (int i = 0; i < N; i ++) {
+ ivec2 uv_adj = ivec2(uv + (params.blur_size * (float(i) - half_size) / half_size));
+ blurred += coeffs[i] * imageLoad(input_image, uv_adj).rgba;
+ }
+
+ imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), blurred);
+}
diff --git a/addons/compositor-lens-flare/gaussian_blur.glsl.import b/addons/compositor-lens-flare/gaussian_blur.glsl.import
new file mode 100644
index 0000000..3f01fc4
--- /dev/null
+++ b/addons/compositor-lens-flare/gaussian_blur.glsl.import
@@ -0,0 +1,14 @@
+[remap]
+
+importer="glsl"
+type="RDShaderFile"
+uid="uid://u7ma88av4j7d"
+path="res://.godot/imported/gaussian_blur.glsl-ae231c750f05d9216af6ba321c536d92.res"
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/gaussian_blur.glsl"
+dest_files=["res://.godot/imported/gaussian_blur.glsl-ae231c750f05d9216af6ba321c536d92.res"]
+
+[params]
+
diff --git a/addons/compositor-lens-flare/lens-dirt.png b/addons/compositor-lens-flare/lens-dirt.png
new file mode 100644
index 0000000..a65b14e
Binary files /dev/null and b/addons/compositor-lens-flare/lens-dirt.png differ
diff --git a/addons/compositor-lens-flare/lens-dirt.png.import b/addons/compositor-lens-flare/lens-dirt.png.import
new file mode 100644
index 0000000..e3ad9bb
--- /dev/null
+++ b/addons/compositor-lens-flare/lens-dirt.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://detsilp12nioo"
+path.s3tc="res://.godot/imported/lens-dirt.png-58b4cc5b654fba956851bc4f0ff8b21a.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/lens-dirt.png"
+dest_files=["res://.godot/imported/lens-dirt.png-58b4cc5b654fba956851bc4f0ff8b21a.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+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=true
+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=0
diff --git a/addons/compositor-lens-flare/lens.glsl b/addons/compositor-lens-flare/lens.glsl
new file mode 100644
index 0000000..355ccd4
--- /dev/null
+++ b/addons/compositor-lens-flare/lens.glsl
@@ -0,0 +1,79 @@
+#[compute]
+#version 450
+
+// Adapted from https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
+
+// Invocations in the (x, y, z) dimension
+layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(rgba16f, set = 0, binding = 0) uniform image2D downsampled_image;
+layout(rgba16f, set = 1, binding = 0) uniform image2D color_image;
+layout(set = 2, binding = 0) uniform sampler2D lens_color_ramp;
+
+// Our push constant
+layout(push_constant, std430) uniform Params {
+ vec2 raster_size;
+ int ghost_count;
+ float ghost_dispersal;
+ float ca_scale;
+ float halo_width;
+ float halo_weight_power;
+} params;
+
+vec3 imageDistorted(
+ in ivec2 texcoord,
+ in vec2 direction, // direction of distortion
+ in vec3 distortion // per-channel distortion factor
+) {
+ return vec3(
+ imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.r)).r,
+ imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.g)).g,
+ imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.b)).b
+ );
+}
+
+// The code we want to execute in each invocation
+void main() {
+ ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
+ ivec2 size = ivec2(params.raster_size);
+
+ if (uv.x >= size.x || uv.y >= size.y) {
+ return;
+ }
+
+ vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
+
+ vec2 resolution = params.raster_size;
+
+ vec2 texelSize = 1.0 / vec2(resolution);
+
+ vec2 uv_norm = uv / resolution;
+ vec2 texcoord = vec2(1.0) - uv_norm;
+
+ vec2 ghost_vec = (vec2(0.5) - texcoord) * params.ghost_dispersal;
+
+ vec3 distortion = vec3(-1.0, 0.0, 1.0) * params.ca_scale;
+ vec2 direction = normalize(ghost_vec);
+
+ vec3 result = vec3(0.0);
+ for (int i = 0; i < params.ghost_count; ++i) {
+ vec2 offset = fract(texcoord + ghost_vec * float(i));
+
+ float weight = length(vec2(0.5) - offset) / length(vec2(0.5));
+ weight = pow(1.0 - weight, 2.0);
+
+ result += imageDistorted(ivec2(offset * resolution), direction, distortion).rgb * (1.0 / weight);
+ }
+
+ // sample halo:
+ vec2 haloVec = normalize(ghost_vec) * params.halo_width;
+ float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));
+ weight = pow(1.0 - weight, params.halo_weight_power);
+ result += imageDistorted(ivec2((texcoord + haloVec) * resolution), direction, distortion).rgb * weight;
+
+ result *= texture(lens_color_ramp, vec2((length(vec2(0.5) - texcoord) / length(vec2(0.5))), 0.0)).rgb;
+
+ color.rgb = result.rgb;
+
+ imageStore(color_image, uv, color);
+}
diff --git a/addons/compositor-lens-flare/lens.glsl.import b/addons/compositor-lens-flare/lens.glsl.import
new file mode 100644
index 0000000..fb355a6
--- /dev/null
+++ b/addons/compositor-lens-flare/lens.glsl.import
@@ -0,0 +1,14 @@
+[remap]
+
+importer="glsl"
+type="RDShaderFile"
+uid="uid://bsxtc5veahkcx"
+path="res://.godot/imported/lens.glsl-a4f9cddc8c0de1b4404d44442bcc4fdd.res"
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/lens.glsl"
+dest_files=["res://.godot/imported/lens.glsl-a4f9cddc8c0de1b4404d44442bcc4fdd.res"]
+
+[params]
+
diff --git a/addons/compositor-lens-flare/lens_color_ramp.tres b/addons/compositor-lens-flare/lens_color_ramp.tres
new file mode 100644
index 0000000..c598b0d
--- /dev/null
+++ b/addons/compositor-lens-flare/lens_color_ramp.tres
@@ -0,0 +1,8 @@
+[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://dawnxeg62rkll"]
+
+[sub_resource type="Gradient" id="Gradient_d7nfd"]
+offsets = PackedFloat32Array(0, 0.08665106, 0.14051522, 0.20608899, 0.28103045, 0.33021078, 0.60421544, 0.6557377, 0.6955503, 0.86885244, 0.9086651, 0.9437939)
+colors = PackedColorArray(1, 1, 1, 1, 0.98866665, 0.83, 1, 1, 0.8, 1, 0.9833333, 1, 1, 1, 1, 1, 0.8208334, 0.57, 1, 1, 0.8833334, 0.72, 1, 1, 0.7958334, 0.51, 1, 1, 1, 0.35000002, 0.6641668, 1, 1, 0.7725, 0.35000002, 1, 1, 0.94, 0.55, 1, 1, 0.39999998, 0.8800001, 1, 1, 0.984, 0.52, 1)
+
+[resource]
+gradient = SubResource("Gradient_d7nfd")
diff --git a/addons/compositor-lens-flare/lens_flare_compositor_effect.tres b/addons/compositor-lens-flare/lens_flare_compositor_effect.tres
new file mode 100644
index 0000000..4aa1a97
--- /dev/null
+++ b/addons/compositor-lens-flare/lens_flare_compositor_effect.tres
@@ -0,0 +1,29 @@
+[gd_resource type="CompositorEffect" script_class="PostProcessShader" load_steps=6 format=3 uid="uid://cpnwkm1swg8u0"]
+
+[ext_resource type="Texture2D" uid="uid://dawnxeg62rkll" path="res://addons/compositor-lens-flare/lens_color_ramp.tres" id="1_1jo43"]
+[ext_resource type="Texture2D" uid="uid://detsilp12nioo" path="res://addons/compositor-lens-flare/lens-dirt.png" id="1_v4on2"]
+[ext_resource type="Script" uid="uid://0dlqdm6ci0xm" path="res://addons/compositor-lens-flare/post_process_shader.gd" id="2_v4on2"]
+
+[sub_resource type="Gradient" id="Gradient_v4on2"]
+offsets = PackedFloat32Array(0)
+colors = PackedColorArray(1, 1, 1, 1)
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_wwdrl"]
+gradient = SubResource("Gradient_v4on2")
+width = 1
+
+[resource]
+resource_local_to_scene = false
+resource_name = ""
+enabled = true
+effect_callback_type = 4
+needs_motion_vectors = false
+needs_normal_roughness = false
+script = ExtResource("2_v4on2")
+glare_streak_count = 4
+glare_attenuation = 0.9839
+glare_samples = 2
+flare_color_ramp = ExtResource("1_1jo43")
+overlay_dirt_texture = ExtResource("1_v4on2")
+overlay_white_texture = SubResource("GradientTexture1D_wwdrl")
+metadata/_custom_type_script = "uid://0dlqdm6ci0xm"
diff --git a/addons/compositor-lens-flare/overlay.glsl b/addons/compositor-lens-flare/overlay.glsl
new file mode 100644
index 0000000..d02e1df
--- /dev/null
+++ b/addons/compositor-lens-flare/overlay.glsl
@@ -0,0 +1,37 @@
+#[compute]
+#version 450
+
+// Invocations in the (x, y, z) dimension
+layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(rgba16f, set = 0, binding = 0) uniform image2D overlay_image;
+layout(rgba16f, set = 1, binding = 0) uniform image2D color_image;
+layout(set = 2, binding = 0) uniform sampler2D dirt_texture;
+
+// Our push PushConstant
+layout(push_constant, std430) uniform Params {
+ vec2 render_size;
+ float res;
+ float dirt_power;
+} params;
+
+// The code we want to execute in each invocation
+void main() {
+ ivec2 render_size = ivec2(params.render_size.xy);
+
+ ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
+
+ // Just in case the render_size size is not divisable by 8
+ if ((uv.x >= render_size.x) || (uv.y >= render_size.y)) {
+ return;
+ }
+
+ float dirt = texture(dirt_texture, vec2(uv) / vec2(render_size)).r;
+
+ vec4 color = imageLoad(color_image, uv);
+ vec4 overlay = imageLoad(overlay_image, uv) * mix(1.0, dirt, params.dirt_power);
+
+ color += overlay;
+
+ imageStore(color_image, uv, color);
+}
diff --git a/addons/compositor-lens-flare/overlay.glsl.import b/addons/compositor-lens-flare/overlay.glsl.import
new file mode 100644
index 0000000..b32054e
--- /dev/null
+++ b/addons/compositor-lens-flare/overlay.glsl.import
@@ -0,0 +1,14 @@
+[remap]
+
+importer="glsl"
+type="RDShaderFile"
+uid="uid://c1rq8g3b4ci41"
+path="res://.godot/imported/overlay.glsl-39d5630b163e8c81fa676fad2b9ace7e.res"
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/overlay.glsl"
+dest_files=["res://.godot/imported/overlay.glsl-39d5630b163e8c81fa676fad2b9ace7e.res"]
+
+[params]
+
diff --git a/addons/compositor-lens-flare/post_process_shader.gd b/addons/compositor-lens-flare/post_process_shader.gd
new file mode 100644
index 0000000..ebae276
--- /dev/null
+++ b/addons/compositor-lens-flare/post_process_shader.gd
@@ -0,0 +1,543 @@
+@tool
+extends CompositorEffect
+class_name PostProcessShader
+
+# Lens flare effect based on https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
+# References used for CompositorEffect structure:
+# - https://github.com/pink-arcana/godot-distance-field-outlines
+# - https://github.com/BastiaanOlij/RERadialSunRays
+
+var context := "LENS_FLARE"
+
+var downsample_shader_file = load("res://addons/compositor-lens-flare/downsample.glsl")
+var lens_shader_file = load("res://addons/compositor-lens-flare/lens.glsl")
+var blur_shader_file = load("res://addons/compositor-lens-flare/gaussian_blur.glsl")
+var overlay_shader_file = load("res://addons/compositor-lens-flare/overlay.glsl")
+var streak_shader_file = load("res://addons/compositor-lens-flare/streak.glsl")
+
+@export_tool_button("Reload", "Callable") var reload_action = reload
+
+@export_group("Downsample", "downsample_")
+@export_range(0.0, 5.0) var downsample_scale := 0.2
+@export_range(0.0, 5.0) var downsample_bias := 0.6
+@export_range(0.0, 1.0) var downsample_desaturation := 0.5
+
+@export_group("Glare", "glare_")
+@export_range(0, 12) var glare_streak_count := 6
+@export_range(0.8, 1.0) var glare_attenuation: float = 0.975
+@export_range(1, 12) var glare_samples: int = 4
+
+@export_group("Lens Flare", "flare_")
+@export var flare_color_ramp: Texture2D
+@export_range(1, 16) var flare_ghost_count := 8
+@export_range(0.0, 2.0) var flare_ghost_dispersal := 0.25
+@export_range(0.0, 10.0) var flare_chromatic_abberation_scale := 7.0
+@export_range(0.0, 1.0) var flare_halo_width := 0.4
+@export_range(1.0, 10.0) var flare_halo_weight_power := 5.0
+
+@export_group("Guassian Blur", "gaussian_blur_")
+@export_range(5.0, 50.0) var gaussian_blur_size: float = 16.0
+
+@export_group("Overlay", "overlay_")
+@export var overlay_dirt_texture: Texture2D
+@export var overlay_white_texture: Texture2D
+@export_range(0.0, 1.0) var overlay_dirt_texture_power := 0.6
+
+var downsample_shader: RID
+var downsample_pipeline: RID
+
+var lens_shader: RID
+var lens_pipeline: RID
+
+var blur_shader: RID
+var blur_pipeline: RID
+
+var overlay_shader: RID
+var overlay_pipeline: RID
+
+var streak_shader: RID
+var streak_pipeline: RID
+
+var rd: RenderingDevice
+
+var mutex: Mutex = Mutex.new()
+var shader_is_dirty: bool = true
+
+var clamp_linear_texture_sampler: RID
+
+# Called when this resource is constructed.
+func _init():
+ effect_callback_type = EFFECT_CALLBACK_TYPE_POST_TRANSPARENT
+ RenderingServer.call_on_render_thread(_initialize_compute)
+
+
+# System notifications, we want to react on the notification that
+# alerts us we are about to be destroyed.
+func _notification(what):
+ if what == NOTIFICATION_PREDELETE:
+ cleanup()
+
+
+func cleanup():
+ if lens_shader.is_valid():
+ rd.free_rid(lens_shader)
+ if downsample_shader.is_valid():
+ rd.free_rid(downsample_shader)
+ if blur_shader.is_valid():
+ rd.free_rid(blur_shader)
+ if overlay_shader.is_valid():
+ rd.free_rid(overlay_shader)
+ if streak_shader.is_valid():
+ rd.free_rid(streak_shader)
+
+
+func reload():
+ cleanup()
+
+ RenderingServer.call_on_render_thread(_initialize_compute)
+
+
+func _initialize_compute():
+ rd = RenderingServer.get_rendering_device()
+
+ # Create samplers
+ clamp_linear_texture_sampler = create_texture_sampler()
+
+ # Compile all shaders and create pipelines
+
+ var lens_shader_spirv: RDShaderSPIRV = lens_shader_file.get_spirv()
+
+ if lens_shader_spirv.compile_error_compute != "":
+ push_error(lens_shader_spirv.compile_error_compute)
+ return false
+
+ lens_shader = rd.shader_create_from_spirv(lens_shader_spirv)
+ if not lens_shader.is_valid():
+ return false
+
+ lens_pipeline = rd.compute_pipeline_create(lens_shader)
+
+ var downsample_shader_spirv: RDShaderSPIRV = downsample_shader_file.get_spirv()
+
+ if downsample_shader_spirv.compile_error_compute != "":
+ push_error(downsample_shader_spirv.compile_error_compute)
+ return false
+
+ downsample_shader = rd.shader_create_from_spirv(downsample_shader_spirv)
+ if not downsample_shader.is_valid():
+ return false
+
+ downsample_pipeline = rd.compute_pipeline_create(downsample_shader)
+
+ var blur_shader_spirv: RDShaderSPIRV = blur_shader_file.get_spirv()
+
+ if blur_shader_spirv.compile_error_compute != "":
+ push_error(blur_shader_spirv.compile_error_compute)
+ return false
+
+ blur_shader = rd.shader_create_from_spirv(blur_shader_spirv)
+ if not blur_shader.is_valid():
+ return false
+
+ blur_pipeline = rd.compute_pipeline_create(blur_shader)
+
+ var overlay_shader_spirv: RDShaderSPIRV = overlay_shader_file.get_spirv()
+
+ if overlay_shader_spirv.compile_error_compute != "":
+ push_error(overlay_shader_spirv.compile_error_compute)
+ return false
+
+ overlay_shader = rd.shader_create_from_spirv(overlay_shader_spirv)
+ if not overlay_shader.is_valid():
+ return false
+
+ overlay_pipeline = rd.compute_pipeline_create(overlay_shader)
+
+ var streak_shader_spirv: RDShaderSPIRV = streak_shader_file.get_spirv()
+
+ if streak_shader_spirv.compile_error_compute != "":
+ push_error(streak_shader_spirv.compile_error_compute)
+ return false
+
+ streak_shader = rd.shader_create_from_spirv(streak_shader_spirv)
+ if not streak_shader.is_valid():
+ return false
+
+ streak_pipeline = rd.compute_pipeline_create(streak_shader)
+
+
+func compile_shader(shader_file, shader, pipeline):
+ var shader_spirv: RDShaderSPIRV = shader_file.get_spirv()
+
+ if shader_spirv.compile_error_compute != "":
+ push_error(shader_spirv.compile_error_compute)
+ return false
+
+ shader = rd.shader_create_from_spirv(shader_spirv)
+ if not shader.is_valid():
+ return false
+
+ pipeline = rd.compute_pipeline_create(shader)
+ return pipeline.is_valid()
+
+
+func validate_pipelines():
+ return lens_pipeline.is_valid() and downsample_pipeline.is_valid() \
+ and blur_pipeline.is_valid() and streak_pipeline.is_valid() \
+ and overlay_pipeline.is_valid()
+
+
+func get_image_uniform(image : RID, binding : int = 0) -> RDUniform:
+ var uniform : RDUniform = RDUniform.new()
+ uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
+ uniform.binding = binding
+ uniform.add_id(image)
+
+ return uniform
+
+
+func create_texture_sampler():
+ var sampler_state = RDSamplerState.new()
+ sampler_state.repeat_u = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
+ sampler_state.repeat_v = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
+ sampler_state.repeat_w = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
+ sampler_state.mag_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
+ sampler_state.min_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
+ sampler_state.mip_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
+
+ return rd.sampler_create(sampler_state)
+
+
+func get_texture_uniform(texture: Texture, binding : int = 0) -> RDUniform:
+ var uniform : RDUniform = RDUniform.new()
+ uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_SAMPLER_WITH_TEXTURE
+ uniform.binding = binding
+ uniform.add_id(clamp_linear_texture_sampler)
+ uniform.add_id(RenderingServer.texture_get_rd_texture(texture.get_rid(), true))
+
+ return uniform
+
+
+# Called by the rendering thread every frame.
+func _render_callback(p_effect_callback_type, p_render_data):
+ if rd and p_effect_callback_type == EFFECT_CALLBACK_TYPE_POST_TRANSPARENT \
+ and validate_pipelines():
+ # Get our render scene buffers object, this gives us access to our render buffers.
+ # Note that implementation differs per renderer hence the need for the cast.
+ var render_scene_buffers: RenderSceneBuffersRD = p_render_data.get_render_scene_buffers()
+ if render_scene_buffers:
+ # Get our render size, this is the 3D render resolution!
+ var size = render_scene_buffers.get_internal_size()
+ if size.x == 0 and size.y == 0:
+ return
+
+ # Compute shader groups
+ var x_groups = (size.x - 1) / 8 + 1
+ var y_groups = (size.y - 1) / 8 + 1
+ var z_groups = 1
+
+ # Loop through views just in case we're doing stereo rendering.
+ # No extra cost if this is mono.
+ var view_count = render_scene_buffers.get_view_count()
+ for view in range(view_count):
+ # Get the RID for our color image, we will be reading from and writing to it.
+ var input_image = render_scene_buffers.get_color_layer(view)
+
+ var usage_bits := RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT \
+ | RenderingDevice.TEXTURE_USAGE_STORAGE_BIT
+
+ # Create textures (or get from cache if already created)
+ render_scene_buffers.create_texture(
+ context,
+ "Downsampled",
+ RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
+ usage_bits,
+ RenderingDevice.TEXTURE_SAMPLES_1,
+ size, 1, 1, true, false)
+ render_scene_buffers.create_texture(
+ context,
+ "BlurLeft",
+ RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
+ usage_bits,
+ RenderingDevice.TEXTURE_SAMPLES_1,
+ size, 1, 1, true, false)
+ render_scene_buffers.create_texture(
+ context,
+ "BlurRight",
+ RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
+ usage_bits,
+ RenderingDevice.TEXTURE_SAMPLES_1,
+ size, 1, 1, true, false)
+ render_scene_buffers.create_texture(
+ context,
+ "Ping",
+ RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
+ usage_bits,
+ RenderingDevice.TEXTURE_SAMPLES_1,
+ size, 1, 1, true, false)
+ render_scene_buffers.create_texture(
+ context,
+ "Pong",
+ RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
+ usage_bits,
+ RenderingDevice.TEXTURE_SAMPLES_1,
+ size, 1, 1, true, false)
+
+ var color_uniform: RDUniform = RDUniform.new()
+ color_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
+ color_uniform.binding = 0
+ color_uniform.add_id(input_image)
+
+ var downsampled_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Downsampled"))
+ var ping_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Ping"))
+ var pong_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Pong"))
+ var blur_left_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "BlurLeft"))
+ var blur_right_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "BlurRight"))
+
+ # Setup done
+
+ # Step 1: Downsample
+ # Extracts only bright bits from texture, making the rest black
+
+ var downsample_uniform_set_1 := UniformSetCacheRD.get_cache(lens_shader, 0, [ color_uniform ])
+ var downsample_uniform_set_2 := UniformSetCacheRD.get_cache(lens_shader, 1, [ downsampled_uniform ])
+
+ var downsample_push_constant := PackedByteArray()
+ downsample_push_constant.resize(32)
+ downsample_push_constant.encode_float(0, size.x)
+ downsample_push_constant.encode_float(4, size.y)
+ downsample_push_constant.encode_float(8, downsample_scale)
+ downsample_push_constant.encode_float(12, downsample_bias)
+ downsample_push_constant.encode_float(16, downsample_desaturation)
+
+ var compute_list := rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, downsample_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, downsample_uniform_set_1, 0)
+ rd.compute_list_bind_uniform_set(compute_list, downsample_uniform_set_2, 1)
+ rd.compute_list_set_push_constant(compute_list, downsample_push_constant, downsample_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Step 2: Light streak
+ # Blurs the texture into any number of directions and overlays the result onto the
+ # color buffer
+
+ for angle_i in range(glare_streak_count): # hexagonal streaks
+ var angle_here = ((PI * 2.0) / glare_streak_count) * angle_i
+ var direction = Vector2(1.0, 0.0).rotated(angle_here)
+
+ # We have a lot of code duplication here instead of looping because we need to
+ # ping-pong the "from" and "to" textures:
+ # downsampled -> ping -> pong -> ping -> pong -> color
+ # TODO: could probably be cleaned up with a lambda
+
+ var streak_uniform_set
+ var streak_uniform_set2
+
+ # Iteration 1
+ var streak_push_constant: PackedByteArray = PackedByteArray()
+ streak_push_constant.resize(32)
+ streak_push_constant.encode_float(0, size.x)
+ streak_push_constant.encode_float(4, size.y)
+ streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
+ streak_push_constant.encode_float(12, direction.y * 1.0)
+ streak_push_constant.encode_s32(16, glare_samples) # Samples
+ streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
+ streak_push_constant.encode_s32(24, 0) # Iteration
+
+ streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [downsampled_uniform])
+ streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [ping_uniform])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
+ rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Iteration 2
+ streak_push_constant = PackedByteArray()
+ streak_push_constant.resize(32)
+ streak_push_constant.encode_float(0, size.x)
+ streak_push_constant.encode_float(4, size.y)
+ streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
+ streak_push_constant.encode_float(12, direction.y * 1.0)
+ streak_push_constant.encode_s32(16, glare_samples) # Samples
+ streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
+ streak_push_constant.encode_s32(24, 1) # Iteration
+
+ streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [ping_uniform])
+ streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [pong_uniform])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
+ rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Iteration 3
+ streak_push_constant = PackedByteArray()
+ streak_push_constant.resize(32)
+ streak_push_constant.encode_float(0, size.x)
+ streak_push_constant.encode_float(4, size.y)
+ streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
+ streak_push_constant.encode_float(12, direction.y * 1.0)
+ streak_push_constant.encode_s32(16, glare_samples) # Samples
+ streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
+ streak_push_constant.encode_s32(24, 2) # Iteration
+
+ streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [pong_uniform])
+ streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [ping_uniform])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
+ rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Iteration 4
+ streak_push_constant = PackedByteArray()
+ streak_push_constant.resize(32)
+ streak_push_constant.encode_float(0, size.x)
+ streak_push_constant.encode_float(4, size.y)
+ streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
+ streak_push_constant.encode_float(12, direction.y * 1.0)
+ streak_push_constant.encode_s32(16, glare_samples) # Samples
+ streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
+ streak_push_constant.encode_s32(24, 3) # Iteration
+
+ streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [ping_uniform])
+ streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [pong_uniform])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
+ rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Blur onto color
+ var overlay_uniform = get_texture_uniform(overlay_white_texture)
+
+ var overlay_uniform_set_1 = UniformSetCacheRD.get_cache(overlay_shader, 0, [ pong_uniform ])
+ var overlay_uniform_set_2 = UniformSetCacheRD.get_cache(overlay_shader, 1, [ color_uniform ])
+ var overlay_uniform_set_3 = UniformSetCacheRD.get_cache(overlay_shader, 2, [ overlay_uniform ])
+
+ var overlay_push_constant: PackedFloat32Array = PackedFloat32Array()
+ overlay_push_constant.push_back(size.x)
+ overlay_push_constant.push_back(size.y)
+ overlay_push_constant.push_back(0.0) # Padding
+ overlay_push_constant.push_back(0.0)
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, overlay_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_1, 0)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_2, 1)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_3, 2)
+ rd.compute_list_set_push_constant(compute_list, overlay_push_constant.to_byte_array(), overlay_push_constant.size() * 4)
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
+ rd.compute_list_end()
+
+ # Step 3: Lens Flare
+ # Create ghosts and halos from the downsampled image
+ # (Note: the light streak result is not used in the lens flare processing)
+
+ var color_ramp_uniform = get_texture_uniform(flare_color_ramp)
+
+ var lens_flare_uniform_set_1 = UniformSetCacheRD.get_cache(lens_shader, 0, [ downsampled_uniform ])
+ var lens_flare_uniform_set_2 = UniformSetCacheRD.get_cache(lens_shader, 1, [pong_uniform])
+ var lens_flare_uniform_set_3 = UniformSetCacheRD.get_cache(lens_shader, 2, [color_ramp_uniform])
+
+ var lens_flare_push_constant := PackedByteArray()
+ lens_flare_push_constant.resize(32)
+ lens_flare_push_constant.encode_float(0, size.x)
+ lens_flare_push_constant.encode_float(4, size.y)
+ lens_flare_push_constant.encode_s32(8, flare_ghost_count)
+ lens_flare_push_constant.encode_float(12, flare_ghost_dispersal)
+ lens_flare_push_constant.encode_float(16, flare_chromatic_abberation_scale)
+ lens_flare_push_constant.encode_float(20, flare_halo_width)
+ lens_flare_push_constant.encode_float(24, flare_halo_weight_power)
+
+ # Run lens flare
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, lens_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_1, 0)
+ rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_2, 1)
+ rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_3, 2)
+ rd.compute_list_set_push_constant(compute_list, lens_flare_push_constant, lens_flare_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
+ rd.compute_list_end()
+
+ # Step 4: Blur
+ # Horizontal, then vertical blur of the lens flare result to make the ghosts less
+ # sharp
+
+ # Horizontal pass
+ var blur_push_constant: PackedFloat32Array = PackedFloat32Array()
+ blur_push_constant.push_back(size.x)
+ blur_push_constant.push_back(size.y)
+ blur_push_constant.push_back(gaussian_blur_size)
+ blur_push_constant.push_back(0.0)
+
+ var blur_color_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 0, [ pong_uniform ])
+ var blur_texture_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 1, [ ping_uniform ])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, blur_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, blur_color_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, blur_texture_uniform_set, 1)
+ rd.compute_list_set_push_constant(compute_list, blur_push_constant.to_byte_array(), blur_push_constant.size() * 4)
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
+ rd.compute_list_end()
+
+ rd.draw_command_end_label()
+
+ # Vertical pass (using the horizontal result)
+ blur_push_constant = PackedFloat32Array()
+ blur_push_constant.push_back(size.x)
+ blur_push_constant.push_back(size.y)
+ blur_push_constant.push_back(0.0)
+ blur_push_constant.push_back(gaussian_blur_size)
+
+ blur_color_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 0, [ ping_uniform ])
+ blur_texture_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 1, [ pong_uniform ])
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, blur_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, blur_color_uniform_set, 0)
+ rd.compute_list_bind_uniform_set(compute_list, blur_texture_uniform_set, 1)
+ rd.compute_list_set_push_constant(compute_list, blur_push_constant.to_byte_array(), blur_push_constant.size() * 4)
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
+ rd.compute_list_end()
+
+ # Step 5: Overlay
+ # Blend the blurred lens flares onto the color buffer (which already includes the
+ # light streaks created in step 2)
+
+ var overlay_uniform_set_1 = UniformSetCacheRD.get_cache(overlay_shader, 0, [ pong_uniform ])
+ var overlay_uniform_set_2 = UniformSetCacheRD.get_cache(overlay_shader, 1, [ color_uniform ])
+
+ var dirt_uniform = get_texture_uniform(overlay_dirt_texture)
+ var overlay_uniform_set_3 = UniformSetCacheRD.get_cache(overlay_shader, 2, [ dirt_uniform ])
+
+ var overlay_push_constant = PackedByteArray()
+ overlay_push_constant.resize(16)
+ overlay_push_constant.encode_float(0, size.x)
+ overlay_push_constant.encode_float(4, size.y)
+ overlay_push_constant.encode_float(8, 0.0) # Padding
+ overlay_push_constant.encode_float(12, overlay_dirt_texture_power)
+
+ compute_list = rd.compute_list_begin()
+ rd.compute_list_bind_compute_pipeline(compute_list, overlay_pipeline)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_1, 0)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_2, 1)
+ rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_3, 2)
+ rd.compute_list_set_push_constant(compute_list, overlay_push_constant, overlay_push_constant.size())
+ rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
+ rd.compute_list_end()
diff --git a/addons/compositor-lens-flare/post_process_shader.gd.uid b/addons/compositor-lens-flare/post_process_shader.gd.uid
new file mode 100644
index 0000000..a148319
--- /dev/null
+++ b/addons/compositor-lens-flare/post_process_shader.gd.uid
@@ -0,0 +1 @@
+uid://0dlqdm6ci0xm
diff --git a/addons/compositor-lens-flare/streak.glsl b/addons/compositor-lens-flare/streak.glsl
new file mode 100644
index 0000000..356a4d5
--- /dev/null
+++ b/addons/compositor-lens-flare/streak.glsl
@@ -0,0 +1,43 @@
+#[compute]
+#version 450
+
+// Adapted from https://chrisoat.com/papers/Oat-ScenePostprocessing.pdf
+
+// Invocations in the (x, y, z) dimension
+layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+layout(rgba16f, set = 0, binding = 0) uniform image2D light_image;
+layout(rgba16f, set = 1, binding = 0) uniform image2D out_image;
+
+// Our push constant
+layout(push_constant, std430) uniform Params {
+ vec2 raster_size;
+ vec2 streak_direction;
+ int streak_samples;
+ float attenuation;
+ int iteration;
+} params;
+
+// The code we want to execute in each invocation
+void main() {
+ ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
+ ivec2 size = ivec2(params.raster_size);
+
+ if (uv.x >= size.x || uv.y >= size.y) {
+ return;
+ }
+
+ vec4 new_color = vec4(0.0, 0.0, 0.0, 1.0); //imageLoad(light_image, uv);
+
+ float b = pow(params.streak_samples, params.iteration);
+
+ for (int sample_num = 0; sample_num < params.streak_samples; sample_num++) {
+ float weight = pow(params.attenuation, b * sample_num);
+
+ ivec2 texture_coordinates_here = uv + ivec2(params.streak_direction * b * sample_num);
+
+ new_color.rgb += clamp(weight, 0.0, 1.0) * imageLoad(light_image, texture_coordinates_here).rgb;
+ }
+
+ imageStore(out_image, uv, new_color);
+}
diff --git a/addons/compositor-lens-flare/streak.glsl.import b/addons/compositor-lens-flare/streak.glsl.import
new file mode 100644
index 0000000..f3c2d8c
--- /dev/null
+++ b/addons/compositor-lens-flare/streak.glsl.import
@@ -0,0 +1,14 @@
+[remap]
+
+importer="glsl"
+type="RDShaderFile"
+uid="uid://c3wo2okvinjbs"
+path="res://.godot/imported/streak.glsl-e84466ab4d8ec552c71d8362b0bf731b.res"
+
+[deps]
+
+source_file="res://addons/compositor-lens-flare/streak.glsl"
+dest_files=["res://.godot/imported/streak.glsl-e84466ab4d8ec552c71d8362b0bf731b.res"]
+
+[params]
+
diff --git a/addons/rokojori_action_library b/addons/rokojori_action_library
index fad61c7..eff4b5e 160000
--- a/addons/rokojori_action_library
+++ b/addons/rokojori_action_library
@@ -1 +1 @@
-Subproject commit fad61c7e9b38e69e0b27457ccb6dd5c8fd242b47
+Subproject commit eff4b5e146ebc6aceb90004a52cffd3121167661
diff --git a/assets/Fonts/Jost-Black.ttf b/assets/Fonts/Jost-Black.ttf
new file mode 100644
index 0000000..bc5f272
Binary files /dev/null and b/assets/Fonts/Jost-Black.ttf differ
diff --git a/assets/Fonts/Jost-Black.ttf.import b/assets/Fonts/Jost-Black.ttf.import
new file mode 100644
index 0000000..8cd8a72
--- /dev/null
+++ b/assets/Fonts/Jost-Black.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://b6ntdryo31qk6"
+path="res://.godot/imported/Jost-Black.ttf-85d061fda6325d4206a92df6d9c9cc4b.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Black.ttf"
+dest_files=["res://.godot/imported/Jost-Black.ttf-85d061fda6325d4206a92df6d9c9cc4b.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-BlackItalic.ttf b/assets/Fonts/Jost-BlackItalic.ttf
new file mode 100644
index 0000000..6f9cc01
Binary files /dev/null and b/assets/Fonts/Jost-BlackItalic.ttf differ
diff --git a/assets/Fonts/Jost-BlackItalic.ttf.import b/assets/Fonts/Jost-BlackItalic.ttf.import
new file mode 100644
index 0000000..f80113b
--- /dev/null
+++ b/assets/Fonts/Jost-BlackItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://dlntbctqln32q"
+path="res://.godot/imported/Jost-BlackItalic.ttf-7ec340e4b2db11d19c5641feefb4c30e.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-BlackItalic.ttf"
+dest_files=["res://.godot/imported/Jost-BlackItalic.ttf-7ec340e4b2db11d19c5641feefb4c30e.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Bold.ttf b/assets/Fonts/Jost-Bold.ttf
new file mode 100644
index 0000000..7c6bb49
Binary files /dev/null and b/assets/Fonts/Jost-Bold.ttf differ
diff --git a/assets/Fonts/Jost-Bold.ttf.import b/assets/Fonts/Jost-Bold.ttf.import
new file mode 100644
index 0000000..16b38f0
--- /dev/null
+++ b/assets/Fonts/Jost-Bold.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://co0dn0sxf3uw1"
+path="res://.godot/imported/Jost-Bold.ttf-2e448402e1def28385efdbad4776272d.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Bold.ttf"
+dest_files=["res://.godot/imported/Jost-Bold.ttf-2e448402e1def28385efdbad4776272d.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-BoldItalic.ttf b/assets/Fonts/Jost-BoldItalic.ttf
new file mode 100644
index 0000000..3799726
Binary files /dev/null and b/assets/Fonts/Jost-BoldItalic.ttf differ
diff --git a/assets/Fonts/Jost-BoldItalic.ttf.import b/assets/Fonts/Jost-BoldItalic.ttf.import
new file mode 100644
index 0000000..675b80d
--- /dev/null
+++ b/assets/Fonts/Jost-BoldItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cpbmrrpkm0s26"
+path="res://.godot/imported/Jost-BoldItalic.ttf-6ebf904ee28b921dce9ebc2c7a106412.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-BoldItalic.ttf"
+dest_files=["res://.godot/imported/Jost-BoldItalic.ttf-6ebf904ee28b921dce9ebc2c7a106412.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-ExtraBold.ttf b/assets/Fonts/Jost-ExtraBold.ttf
new file mode 100644
index 0000000..8279783
Binary files /dev/null and b/assets/Fonts/Jost-ExtraBold.ttf differ
diff --git a/assets/Fonts/Jost-ExtraBold.ttf.import b/assets/Fonts/Jost-ExtraBold.ttf.import
new file mode 100644
index 0000000..cfd8139
--- /dev/null
+++ b/assets/Fonts/Jost-ExtraBold.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://v48xitewij5b"
+path="res://.godot/imported/Jost-ExtraBold.ttf-f4cf7083119f2789880e6b362048e7b5.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-ExtraBold.ttf"
+dest_files=["res://.godot/imported/Jost-ExtraBold.ttf-f4cf7083119f2789880e6b362048e7b5.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-ExtraBoldItalic.ttf b/assets/Fonts/Jost-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..c4fa010
Binary files /dev/null and b/assets/Fonts/Jost-ExtraBoldItalic.ttf differ
diff --git a/assets/Fonts/Jost-ExtraBoldItalic.ttf.import b/assets/Fonts/Jost-ExtraBoldItalic.ttf.import
new file mode 100644
index 0000000..d54ca3a
--- /dev/null
+++ b/assets/Fonts/Jost-ExtraBoldItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://bf8vamruspl5e"
+path="res://.godot/imported/Jost-ExtraBoldItalic.ttf-8e6c26069b0af25383b312a68b662909.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-ExtraBoldItalic.ttf"
+dest_files=["res://.godot/imported/Jost-ExtraBoldItalic.ttf-8e6c26069b0af25383b312a68b662909.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-ExtraLight.ttf b/assets/Fonts/Jost-ExtraLight.ttf
new file mode 100644
index 0000000..cfccd2b
Binary files /dev/null and b/assets/Fonts/Jost-ExtraLight.ttf differ
diff --git a/assets/Fonts/Jost-ExtraLight.ttf.import b/assets/Fonts/Jost-ExtraLight.ttf.import
new file mode 100644
index 0000000..4601738
--- /dev/null
+++ b/assets/Fonts/Jost-ExtraLight.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://c03s2vo18r30l"
+path="res://.godot/imported/Jost-ExtraLight.ttf-399ca308c2872b00339a7fe1a97eec70.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-ExtraLight.ttf"
+dest_files=["res://.godot/imported/Jost-ExtraLight.ttf-399ca308c2872b00339a7fe1a97eec70.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-ExtraLightItalic.ttf b/assets/Fonts/Jost-ExtraLightItalic.ttf
new file mode 100644
index 0000000..e5ad0a8
Binary files /dev/null and b/assets/Fonts/Jost-ExtraLightItalic.ttf differ
diff --git a/assets/Fonts/Jost-ExtraLightItalic.ttf.import b/assets/Fonts/Jost-ExtraLightItalic.ttf.import
new file mode 100644
index 0000000..4ce120b
--- /dev/null
+++ b/assets/Fonts/Jost-ExtraLightItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://3xcegb7jxi4g"
+path="res://.godot/imported/Jost-ExtraLightItalic.ttf-b0d20f2fbe849d13296d10a1d12bf086.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-ExtraLightItalic.ttf"
+dest_files=["res://.godot/imported/Jost-ExtraLightItalic.ttf-b0d20f2fbe849d13296d10a1d12bf086.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Italic.ttf b/assets/Fonts/Jost-Italic.ttf
new file mode 100644
index 0000000..5b38c72
Binary files /dev/null and b/assets/Fonts/Jost-Italic.ttf differ
diff --git a/assets/Fonts/Jost-Italic.ttf.import b/assets/Fonts/Jost-Italic.ttf.import
new file mode 100644
index 0000000..9a9b8f7
--- /dev/null
+++ b/assets/Fonts/Jost-Italic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://fceaei4nqm6m"
+path="res://.godot/imported/Jost-Italic.ttf-1832299fcb5f0091b0d9f2b48296d48c.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Italic.ttf"
+dest_files=["res://.godot/imported/Jost-Italic.ttf-1832299fcb5f0091b0d9f2b48296d48c.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Light.ttf b/assets/Fonts/Jost-Light.ttf
new file mode 100644
index 0000000..13e0e20
Binary files /dev/null and b/assets/Fonts/Jost-Light.ttf differ
diff --git a/assets/Fonts/Jost-Light.ttf.import b/assets/Fonts/Jost-Light.ttf.import
new file mode 100644
index 0000000..3efc781
--- /dev/null
+++ b/assets/Fonts/Jost-Light.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://d25mwxvy1ff1c"
+path="res://.godot/imported/Jost-Light.ttf-b309835fca0848d3bb23101df414ec2b.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Light.ttf"
+dest_files=["res://.godot/imported/Jost-Light.ttf-b309835fca0848d3bb23101df414ec2b.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-LightItalic.ttf b/assets/Fonts/Jost-LightItalic.ttf
new file mode 100644
index 0000000..c0cf7c4
Binary files /dev/null and b/assets/Fonts/Jost-LightItalic.ttf differ
diff --git a/assets/Fonts/Jost-LightItalic.ttf.import b/assets/Fonts/Jost-LightItalic.ttf.import
new file mode 100644
index 0000000..c7db21a
--- /dev/null
+++ b/assets/Fonts/Jost-LightItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://77lgh7dokcf4"
+path="res://.godot/imported/Jost-LightItalic.ttf-79ba290e0e86c578341ef0a19b1bc3a4.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-LightItalic.ttf"
+dest_files=["res://.godot/imported/Jost-LightItalic.ttf-79ba290e0e86c578341ef0a19b1bc3a4.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Medium.ttf b/assets/Fonts/Jost-Medium.ttf
new file mode 100644
index 0000000..e6e8113
Binary files /dev/null and b/assets/Fonts/Jost-Medium.ttf differ
diff --git a/assets/Fonts/Jost-Medium.ttf.import b/assets/Fonts/Jost-Medium.ttf.import
new file mode 100644
index 0000000..9a9c582
--- /dev/null
+++ b/assets/Fonts/Jost-Medium.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cbn0kkecpldco"
+path="res://.godot/imported/Jost-Medium.ttf-a6bc156d3c3fbd39c51e447a4969ea30.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Medium.ttf"
+dest_files=["res://.godot/imported/Jost-Medium.ttf-a6bc156d3c3fbd39c51e447a4969ea30.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-MediumItalic.ttf b/assets/Fonts/Jost-MediumItalic.ttf
new file mode 100644
index 0000000..12bd350
Binary files /dev/null and b/assets/Fonts/Jost-MediumItalic.ttf differ
diff --git a/assets/Fonts/Jost-MediumItalic.ttf.import b/assets/Fonts/Jost-MediumItalic.ttf.import
new file mode 100644
index 0000000..b0852ad
--- /dev/null
+++ b/assets/Fonts/Jost-MediumItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cvmav67frhacb"
+path="res://.godot/imported/Jost-MediumItalic.ttf-69f7674f9cb6914f07d34bb9d02862b1.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-MediumItalic.ttf"
+dest_files=["res://.godot/imported/Jost-MediumItalic.ttf-69f7674f9cb6914f07d34bb9d02862b1.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Regular.ttf b/assets/Fonts/Jost-Regular.ttf
new file mode 100644
index 0000000..94f0470
Binary files /dev/null and b/assets/Fonts/Jost-Regular.ttf differ
diff --git a/assets/Fonts/Jost-Regular.ttf.import b/assets/Fonts/Jost-Regular.ttf.import
new file mode 100644
index 0000000..4a967d8
--- /dev/null
+++ b/assets/Fonts/Jost-Regular.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://0e4pwnojjcry"
+path="res://.godot/imported/Jost-Regular.ttf-1ba1e8355be7e7075598b0d59ff64b79.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Regular.ttf"
+dest_files=["res://.godot/imported/Jost-Regular.ttf-1ba1e8355be7e7075598b0d59ff64b79.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-SemiBold.ttf b/assets/Fonts/Jost-SemiBold.ttf
new file mode 100644
index 0000000..466a709
Binary files /dev/null and b/assets/Fonts/Jost-SemiBold.ttf differ
diff --git a/assets/Fonts/Jost-SemiBold.ttf.import b/assets/Fonts/Jost-SemiBold.ttf.import
new file mode 100644
index 0000000..b36da8f
--- /dev/null
+++ b/assets/Fonts/Jost-SemiBold.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://bjyawglkdumep"
+path="res://.godot/imported/Jost-SemiBold.ttf-d5ceb9d6040d44169d788b6db772873b.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-SemiBold.ttf"
+dest_files=["res://.godot/imported/Jost-SemiBold.ttf-d5ceb9d6040d44169d788b6db772873b.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-SemiBoldItalic.ttf b/assets/Fonts/Jost-SemiBoldItalic.ttf
new file mode 100644
index 0000000..6919c40
Binary files /dev/null and b/assets/Fonts/Jost-SemiBoldItalic.ttf differ
diff --git a/assets/Fonts/Jost-SemiBoldItalic.ttf.import b/assets/Fonts/Jost-SemiBoldItalic.ttf.import
new file mode 100644
index 0000000..b0781f4
--- /dev/null
+++ b/assets/Fonts/Jost-SemiBoldItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://c6qdoaa86ss2l"
+path="res://.godot/imported/Jost-SemiBoldItalic.ttf-f740d8a66375a9fe4ef0fa8e60a32622.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-SemiBoldItalic.ttf"
+dest_files=["res://.godot/imported/Jost-SemiBoldItalic.ttf-f740d8a66375a9fe4ef0fa8e60a32622.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-Thin.ttf b/assets/Fonts/Jost-Thin.ttf
new file mode 100644
index 0000000..c655ae7
Binary files /dev/null and b/assets/Fonts/Jost-Thin.ttf differ
diff --git a/assets/Fonts/Jost-Thin.ttf.import b/assets/Fonts/Jost-Thin.ttf.import
new file mode 100644
index 0000000..521547b
--- /dev/null
+++ b/assets/Fonts/Jost-Thin.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cyux1ymh474dd"
+path="res://.godot/imported/Jost-Thin.ttf-1609f22ce95e7054ed65fa5eccfa96ca.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-Thin.ttf"
+dest_files=["res://.godot/imported/Jost-Thin.ttf-1609f22ce95e7054ed65fa5eccfa96ca.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/Fonts/Jost-ThinItalic.ttf b/assets/Fonts/Jost-ThinItalic.ttf
new file mode 100644
index 0000000..7fd6c86
Binary files /dev/null and b/assets/Fonts/Jost-ThinItalic.ttf differ
diff --git a/assets/Fonts/Jost-ThinItalic.ttf.import b/assets/Fonts/Jost-ThinItalic.ttf.import
new file mode 100644
index 0000000..bfb2a1b
--- /dev/null
+++ b/assets/Fonts/Jost-ThinItalic.ttf.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cqq00pr53i2at"
+path="res://.godot/imported/Jost-ThinItalic.ttf-b0e7d6efe12ec4f6370bdc406dc171b8.fontdata"
+
+[deps]
+
+source_file="res://assets/Fonts/Jost-ThinItalic.ttf"
+dest_files=["res://.godot/imported/Jost-ThinItalic.ttf-b0e7d6efe12ec4f6370bdc406dc171b8.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/project.godot b/project.godot
index 8952854..27ddd44 100644
--- a/project.godot
+++ b/project.godot
@@ -57,7 +57,6 @@ textures/decals/filter=5
textures/light_projectors/filter=5
environment/subsurface_scattering/subsurface_scattering_quality=3
environment/subsurface_scattering/subsurface_scattering_scale=0.02
-anti_aliasing/quality/use_debanding=true
[shader_globals]