make actual death animation for fami

This commit is contained in:
Haze Weathers 2024-02-29 00:06:30 -05:00
parent 06a4541f27
commit ded320d2dc
6 changed files with 324 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/famira_dissolve.png-fc21beac8113424467a72a3beb454de9.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://graphics/enemy/boss/famira_dissolve.png"
dest_files=[ "res://.import/famira_dissolve.png-fc21beac8113424467a72a3beb454de9.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=34 format=2]
[gd_scene load_steps=38 format=2]
[ext_resource path="res://objects/enemy/boss/famira.gd" type="Script" id=1]
[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=2]
@ -17,10 +17,18 @@
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=15]
[ext_resource path="res://graphics/enemy/antlion_body_border.png" type="Texture" id=16]
[ext_resource path="res://objects/enemy/boss/fami_transform.material" type="Material" id=17]
[ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=18]
[ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=19]
[ext_resource path="res://graphics/enemy/boss/famira_dissolve.png" type="Texture" id=20]
[sub_resource type="RectangleShape2D" id=11]
extents = Vector2( 28, 64 )
[sub_resource type="ShaderMaterial" id=18]
shader = ExtResource( 18 )
shader_param/border_color = Color( 0, 0, 0, 1 )
shader_param/border_corners = false
[sub_resource type="Animation" id=2]
length = 0.001
tracks/0/type = "value"
@ -275,6 +283,42 @@ tracks/20/keys = {
"update": 0,
"values": [ Vector2( 1, 1 ) ]
}
tracks/21/type = "value"
tracks/21/path = NodePath("../DissolveMask:position")
tracks/21/interp = 1
tracks/21/loop_wrap = true
tracks/21/imported = false
tracks/21/enabled = true
tracks/21/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector2( -63, -322 ) ]
}
tracks/22/type = "value"
tracks/22/path = NodePath("../ShardParticles:position")
tracks/22/interp = 1
tracks/22/loop_wrap = true
tracks/22/imported = false
tracks/22/enabled = true
tracks/22/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector2( 4, -165 ) ]
}
tracks/23/type = "value"
tracks/23/path = NodePath("../ShardParticles:emitting")
tracks/23/interp = 1
tracks/23/loop_wrap = true
tracks/23/imported = false
tracks/23/enabled = true
tracks/23/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ false ]
}
[sub_resource type="Animation" id=4]
resource_name = "chasing"
@ -439,8 +483,7 @@ tracks/12/keys = {
[sub_resource type="Animation" id=12]
resource_name = "die"
length = 0.2
loop = true
length = 8.0
tracks/0/type = "value"
tracks/0/path = NodePath("Hip/Body:rotation_degrees")
tracks/0/interp = 1
@ -580,10 +623,10 @@ tracks/11/loop_wrap = true
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/keys = {
"times": PoolRealArray( 0, 0.1 ),
"transitions": PoolRealArray( 1, 1 ),
"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 4, 39 ), Vector2( 12, 39 ) ]
"values": [ Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ), Vector2( 4, 39 ), Vector2( 12, 39 ) ]
}
tracks/12/type = "value"
tracks/12/path = NodePath("Hip/Body/Neck/BreathParticles:emitting")
@ -597,6 +640,66 @@ tracks/12/keys = {
"update": 1,
"values": [ false ]
}
tracks/13/type = "value"
tracks/13/path = NodePath("../DissolveMask:position")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/keys = {
"times": PoolRealArray( 0, 8 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( -28, -300 ), Vector2( 58, -84 ) ]
}
tracks/14/type = "value"
tracks/14/path = NodePath(".:material:shader_param/arc_color")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/keys = {
"times": PoolRealArray( 0, 2, 8 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 0.345098, 0.74902, 0.878431, 0 ), Color( 0.345098, 0.74902, 0.878431, 1 ), Color( 0.345098, 0.74902, 0.878431, 1 ) ]
}
tracks/15/type = "value"
tracks/15/path = NodePath(".:material:shader_param/background_color")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/keys = {
"times": PoolRealArray( 0, 2, 8 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 0.396078, 1, 1, 0 ), Color( 0.396078, 1, 1, 1 ), Color( 0.396078, 1, 1, 1 ) ]
}
tracks/16/type = "value"
tracks/16/path = NodePath("../ShardParticles:position")
tracks/16/interp = 1
tracks/16/loop_wrap = true
tracks/16/imported = false
tracks/16/enabled = true
tracks/16/keys = {
"times": PoolRealArray( 0, 8 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 4, -197 ), Vector2( 4, 19 ) ]
}
tracks/17/type = "value"
tracks/17/path = NodePath("../ShardParticles:emitting")
tracks/17/interp = 1
tracks/17/loop_wrap = true
tracks/17/imported = false
tracks/17/enabled = true
tracks/17/keys = {
"times": PoolRealArray( 0.2, 7 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 1,
"values": [ true, false ]
}
[sub_resource type="Animation" id=17]
resource_name = "grow"
@ -1610,7 +1713,31 @@ collision_mask = 128
position = Vector2( 12, -64 )
shape = SubResource( 11 )
[node name="ShardParticles" type="CPUParticles2D" parent="."]
material = SubResource( 18 )
position = Vector2( 4, -165 )
emitting = false
amount = 48
lifetime = 4.0
local_coords = false
texture = ExtResource( 19 )
emission_shape = 2
emission_rect_extents = Vector2( 16, 0 )
direction = Vector2( 0, -2 )
spread = 60.0
gravity = Vector2( 0, 24 )
initial_velocity = 250.0
initial_velocity_random = 0.35
linear_accel = -30.19
[node name="DissolveMask" type="Light2D" parent="."]
position = Vector2( -63, -322 )
texture = ExtResource( 20 )
mode = 3
range_item_cull_mask = 32
[node name="ChickenMan" type="Node2D" parent="."]
light_mask = 33
material = ExtResource( 17 )
position = Vector2( 0, -96 )
@ -1626,10 +1753,12 @@ anims/roar = SubResource( 3 )
anims/shooting = SubResource( 7 )
[node name="Hip" type="Node2D" parent="ChickenMan"]
light_mask = 33
use_parent_material = true
position = Vector2( 8, 39 )
[node name="LegBack" type="Sprite" parent="ChickenMan/Hip"]
light_mask = 33
use_parent_material = true
position = Vector2( -9.49483, 5.9499 )
rotation = -0.0114762
@ -1638,6 +1767,7 @@ texture = ExtResource( 11 )
offset = Vector2( -7.02542, -13.2616 )
[node name="Body" type="Sprite" parent="ChickenMan/Hip"]
light_mask = 33
use_parent_material = true
position = Vector2( -1, 1 )
rotation = 1.55932
@ -1647,12 +1777,14 @@ offset = Vector2( -14.8861, -10.6454 )
flip_v = true
[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body"]
light_mask = 33
position = Vector2( -10.255, -0.546865 )
rotation = -1.57079
remote_path = NodePath("../../../../Hitbox/Body")
update_scale = false
[node name="BackArm" type="Node2D" parent="ChickenMan/Hip/Body"]
light_mask = 33
use_parent_material = true
position = Vector2( -15.0905, 7.09585 )
rotation = -1.55929
@ -1664,6 +1796,7 @@ segments = 4
target = NodePath("HandBack")
[node name="HandBack" type="Sprite" parent="ChickenMan/Hip/Body/BackArm"]
light_mask = 33
material = SubResource( 1 )
use_parent_material = true
position = Vector2( -34, 6 )
@ -1675,6 +1808,7 @@ region_rect = Rect2( 0, 0, 16, 12 )
[node name="BackArmBorder" type="Node2D" parent="ChickenMan/Hip/Body/BackArm"]
show_behind_parent = true
light_mask = 33
use_parent_material = true
script = ExtResource( 12 )
texture = ExtResource( 16 )
@ -1682,6 +1816,7 @@ segments = 4
target = NodePath("../HandBack")
[node name="FrontArm" type="Node2D" parent="ChickenMan/Hip/Body"]
light_mask = 33
use_parent_material = true
position = Vector2( -15.3626, -6.5891 )
rotation = -1.55929
@ -1693,6 +1828,7 @@ segments = 4
target = NodePath("HandFront")
[node name="HandFront" type="Sprite" parent="ChickenMan/Hip/Body/FrontArm"]
light_mask = 33
material = SubResource( 1 )
use_parent_material = true
position = Vector2( -31.9996, 22.0018 )
@ -1704,6 +1840,7 @@ region_rect = Rect2( 0, 0, 16, 12 )
[node name="FrontArmBorder" type="Node2D" parent="ChickenMan/Hip/Body/FrontArm"]
show_behind_parent = true
light_mask = 33
use_parent_material = true
script = ExtResource( 12 )
texture = ExtResource( 16 )
@ -1712,6 +1849,7 @@ target = NodePath("../HandFront")
[node name="Neck" type="Sprite" parent="ChickenMan/Hip/Body"]
show_behind_parent = true
light_mask = 33
use_parent_material = true
position = Vector2( -25.8929, -8.09683 )
rotation = -2.40547
@ -1721,12 +1859,14 @@ texture = ExtResource( 10 )
offset = Vector2( -12.5338, -3.19571 )
[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck"]
light_mask = 33
position = Vector2( 7.47667, -8.4856 )
rotation = -2.96856
remote_path = NodePath("../../../../../Hitbox/Brain")
update_scale = false
[node name="BreathParticles" type="CPUParticles2D" parent="ChickenMan/Hip/Body/Neck"]
light_mask = 33
position = Vector2( 2.97876, -8.17331 )
rotation = 0.437951
scale = Vector2( 0.724233, 0.497597 )
@ -1758,6 +1898,7 @@ scale_amount_curve = SubResource( 8 )
color_ramp = SubResource( 9 )
[node name="Headlower" type="Sprite" parent="ChickenMan/Hip/Body/Neck"]
light_mask = 33
use_parent_material = true
position = Vector2( 6.09458, -5.24508 )
rotation = 0.964506
@ -1767,12 +1908,14 @@ texture = ExtResource( 8 )
offset = Vector2( -23.6288, 1.97347 )
[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck/Headlower"]
light_mask = 33
position = Vector2( -15.6932, 6.83872 )
rotation = -4.70641
remote_path = NodePath("../../../../../../Hitbox/LowerJaw")
update_scale = false
[node name="Headupper" type="Sprite" parent="ChickenMan/Hip/Body/Neck"]
light_mask = 33
use_parent_material = true
position = Vector2( 6.70938, -6.04151 )
rotation = 0.801398
@ -1782,18 +1925,21 @@ texture = ExtResource( 9 )
offset = Vector2( -21.4816, 1.20875 )
[node name="HitboxTransform" type="RemoteTransform2D" parent="ChickenMan/Hip/Body/Neck/Headupper"]
light_mask = 33
position = Vector2( -15.711, -8.80663 )
rotation = -1.57994
remote_path = NodePath("../../../../../../Hitbox/UpperJaw")
update_scale = false
[node name="Eye" type="Sprite" parent="ChickenMan/Hip/Body/Neck/Headupper"]
light_mask = 33
use_parent_material = true
position = Vector2( -22.5774, -9.61752 )
texture = ExtResource( 7 )
offset = Vector2( 20.9715, 12.1291 )
[node name="LegFront" type="Sprite" parent="ChickenMan/Hip"]
light_mask = 33
use_parent_material = true
position = Vector2( 12.9916, 6.2433 )
rotation = -0.0114762

View file

@ -1384,6 +1384,7 @@ update_scale = false
[node name="Head" type="Sprite" parent="Axle"]
unique_name_in_owner = true
position = Vector2( 0, -4 )
z_index = 5
texture = ExtResource( 6 )
offset = Vector2( -13, -25 )
__meta__ = {
@ -1490,6 +1491,7 @@ region_rect = Rect2( 0, 0, 256, 16 )
[node name="BeamShape" type="CollisionShape2D" parent="Axle/Head/Beam/Hitbox"]
position = Vector2( -128, 0 )
z_index = 10
shape = SubResource( 6 )
disabled = true
@ -1551,6 +1553,7 @@ rotation = 3.40339
[node name="JointFront" type="Sprite" parent="Axle"]
position = Vector2( 11, -4 )
z_index = 5
texture = ExtResource( 7 )
__meta__ = {
"_edit_bone_": true,
@ -1619,6 +1622,7 @@ rotation_lock = 0.0
[node name="KneeFront" type="Sprite" parent="Axle"]
position = Vector2( 27.2509, 28.1233 )
z_index = 5
texture = ExtResource( 8 )
hframes = 8
script = ExtResource( 10 )

View file

@ -0,0 +1,133 @@
[gd_resource type="Shader" format=2]
[resource]
code = "shader_type canvas_item;
const float TAU = 6.28319;
uniform float arc_speed = 4.0;
uniform float arc_fps = 10.0;
uniform float arc_scale = 8.0;
uniform float arc_threshold = 0.15;
uniform vec4 arc_color : hint_color = vec4(1.0, 0.93, 0.0, 1.0);
uniform float gamma = 2.0;
uniform float flash_rate = 3.0;
uniform float flash_intensity = 0.2;
uniform vec4 background_color : hint_color = vec4(0.0, 0.0, 0.0, 0.0);
// Description : Array and textureless GLSL 2D/3D/4D simplex
// noise functions.
// Author : Ian McEwan, Ashima Arts.
// Maintainer : stegu
// Lastmod : 20110822 (ijm)
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
// Distributed under the MIT License. See LICENSE file.
// https://github.com/ashima/webgl-noise
// https://github.com/stegu/webgl-noise
//
vec3 mod289_3(vec3 x) {
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 mod289_4(vec4 x) {
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 permute(vec4 x) {
return mod289_4(((x * 34.0) + 1.0) * x);
}
vec4 taylorInvSqrt(vec4 r) {
return 2.79284291400159 - 0.85373472095314 * r;
}
float snoise(vec3 v) {
vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
// First corner
vec3 i = floor(v + dot(v, vec3(C.y)) );
vec3 x0 = v - i + dot(i, vec3(C.x)) ;
// Other corners
vec3 g = step(x0.yzx, x0.xyz);
vec3 l = 1.0 - g;
vec3 i1 = min( g.xyz, l.zxy );
vec3 i2 = max( g.xyz, l.zxy );
// x0 = x0 - 0.0 + 0.0 * C.xxx;
// x1 = x0 - i1 + 1.0 * C.xxx;
// x2 = x0 - i2 + 2.0 * C.xxx;
// x3 = x0 - 1.0 + 3.0 * C.xxx;
vec3 x1 = x0 - i1 + vec3(C.x);
vec3 x2 = x0 - i2 + vec3(C.y); // 2.0*C.x = 1/3 = C.y
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
// Permutations
i = mod289_3(i);
vec4 p = permute( permute( permute(
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
// Gradients: 7x7 points over a square, mapped onto an octahedron.
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
float n_ = 0.142857142857; // 1.0/7.0
vec3 ns = n_ * D.wyz - D.xzx;
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
vec4 x_ = floor(j * ns.z);
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
vec4 x = x_ *ns.x + vec4(ns.y);
vec4 y = y_ *ns.x + vec4(ns.y);
vec4 h = 1.0 - abs(x) - abs(y);
vec4 b0 = vec4( x.xy, y.xy );
vec4 b1 = vec4( x.zw, y.zw );
//vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
//vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
vec4 s0 = floor(b0)*2.0 + 1.0;
vec4 s1 = floor(b1)*2.0 + 1.0;
vec4 sh = -step(h, vec4(0.0));
vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
vec3 p0 = vec3(a0.xy,h.x);
vec3 p1 = vec3(a0.zw,h.y);
vec3 p2 = vec3(a1.xy,h.z);
vec3 p3 = vec3(a1.zw,h.w);
//Normalise gradients
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
p0 *= norm.x;
p1 *= norm.y;
p2 *= norm.z;
p3 *= norm.w;
// Mix final noise value
vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), vec4(0.0));
m = m * m;
return 22.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3) ) );
}
void fragment() {
vec4 tex_color = texture(TEXTURE, UV);
tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / (gamma + sin(fract(TIME * floor(flash_rate)) * TAU) * flash_intensity)));
tex_color.rgb = mix(tex_color.rgb, background_color.rgb, background_color.a);
// tex_color.rgb = pow(tex_color.rgb, vec3(0.5 + sin(TIME * 20.0) * 0.1));
// tex_color.rgb = pow(tex_color.rgb, vec3(1.0 / 2.0));
// tex_color.rgb += (round(sin(TIME * 20.0) * 4.0)) * 0.25 * 0.05;
float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, (floor(TIME) + (floor(fract(TIME) * arc_fps)) / arc_fps) * arc_speed));
// float n = snoise(vec3(SCREEN_UV / SCREEN_PIXEL_SIZE / arc_scale, floor(fract(TIME) * arc_fps) * arc_speed / arc_fps));
n = step(abs(n), arc_threshold);
COLOR = vec4(mix(tex_color.rgb, arc_color.rgb, n * arc_color.a), tex_color.a);
// float worley = worley(SCREEN_UV, 128.0, 96.0);
// vec4 tex_color = texture(TEXTURE, UV);
// COLOR = vec4(mix(vec3(1.0, 1.0, 0.2), tex_color.rgb, step(worley, 0.5)), tex_color.a);
}"