diff --git a/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd b/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd index e63b9625..117d3092 100644 --- a/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd +++ b/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd @@ -13,7 +13,7 @@ class_name ProAnimatedSprite2D extends AnimatedSprite2D light2d.blend_mode = Light2D.BLEND_MODE_ADD else: light2d.blend_mode = Light2D.BLEND_MODE_SUB - light_energy = val + light_energy = val * modulate.a const ACTION_CONFIG = { "animation_intro": "", "intro_loop": 1, "animation_wait_time": 0.0, "animation_next": "" @@ -76,6 +76,7 @@ func _load_config(): if sprite_frames and sprite_frames.has_animation(move_config.animation): animation_velocity[move_config.animation] = move_config.velocity + func _on_frame_changed(): if light_energy == 0.0: return @@ -83,6 +84,8 @@ func _on_frame_changed(): if not texture: return light2d.texture = texture + light_energy = light_energy * modulate.a + func _reset_loop(intro: String): for c in action_configs: @@ -121,7 +124,16 @@ func _on_animation_start(): func _physics_process(delta: float) -> void: if Engine.is_editor_hint() or not velocity or not is_playing(): return - position += velocity * delta + if flip_h: + position.x -= velocity.x * delta + else: + position.x += velocity.x * delta + if not velocity.y: + return + if flip_v: + position.y -= velocity.y * delta + else: + position.y += velocity.y * delta # temporary set velocity diff --git a/asset/art/gif/c01_孤儿院围墙/frames.tres b/asset/art/gif/c01_孤儿院围墙/frames.tres index a59ddbbb..5a4097f4 100644 --- a/asset/art/gif/c01_孤儿院围墙/frames.tres +++ b/asset/art/gif/c01_孤儿院围墙/frames.tres @@ -1,4 +1,4 @@ -[gd_resource type="SpriteFrames" load_steps=164 format=3 uid="uid://c6okvaeemoodq"] +[gd_resource type="SpriteFrames" load_steps=166 format=3 uid="uid://c6okvaeemoodq"] [ext_resource type="Texture2D" uid="uid://ciai4wast4i2a" path="res://asset/art/gif/c01_孤儿院围墙/【画画小女孩】回头/0.png" id="1_0n0k8"] [ext_resource type="Texture2D" uid="uid://pabw11j5ifdw" path="res://asset/art/gif/c01_孤儿院围墙/【画画男孩-2】画画/0.png" id="1_3rkvk"] @@ -79,7 +79,9 @@ [ext_resource type="Texture2D" uid="uid://c8wwan5g0w8e7" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/2.png" id="9_w45v0"] [ext_resource type="Texture2D" uid="uid://b12t68n036k5" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/3.png" id="10_mqmhd"] [ext_resource type="Texture2D" uid="uid://5foo5obbirtv" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/4.png" id="11_5rd7h"] +[ext_resource type="Texture2D" uid="uid://dorexf3x6eqt8" path="res://asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png" id="12_ld6on"] [ext_resource type="Texture2D" uid="uid://drlk2k1hdfgi4" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/5.png" id="12_ohj4k"] +[ext_resource type="Texture2D" uid="uid://cesoun0hgdaws" path="res://asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png" id="13_hf3q4"] [ext_resource type="Texture2D" uid="uid://ctydwkglgba3x" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/6.png" id="13_mvm5i"] [ext_resource type="Texture2D" uid="uid://bnk72w6b3ammi" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/7.png" id="14_th4f0"] [ext_resource type="Texture2D" uid="uid://c26rwvwhwko3e" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/8.png" id="15_0nnpx"] @@ -167,42 +169,42 @@ [resource] animations = [{ "frames": [{ -"duration": 3.0, +"duration": 7.0, "texture": ExtResource("1_ppkaj") }, { -"duration": 3.0, +"duration": 7.0, "texture": ExtResource("2_lkyps") }, { -"duration": 3.0, +"duration": 7.0, "texture": ExtResource("3_phrcs") }, { -"duration": 3.0, +"duration": 7.0, "texture": ExtResource("4_8ckwd") }, { -"duration": 6.0, +"duration": 7.0, "texture": ExtResource("5_upnvy") }], -"loop": true, +"loop": false, "name": &"【单残疾小孩】抓住", "speed": 30.0 }, { "frames": [{ -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("1_uv4ft") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("2_i110w") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("3_j2srm") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("4_tr405") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("5_ooobw") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("6_drfic") }], "loop": true, @@ -210,40 +212,40 @@ animations = [{ "speed": 30.0 }, { "frames": [{ -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("7_1njnw") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("8_yoixk") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("9_w45v0") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("10_mqmhd") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("11_5rd7h") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("12_ohj4k") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("13_mvm5i") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("14_th4f0") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("15_0nnpx") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("16_gqvxl") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("17_r2ypr") }, { -"duration": 3.0, +"duration": 4.0, "texture": ExtResource("18_h1tve") }], "loop": false, @@ -251,22 +253,22 @@ animations = [{ "speed": 30.0 }, { "frames": [{ -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("24_gjuvo") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("25_jnic7") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("26_os8pk") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("27_5d871") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("28_emcgp") }, { -"duration": 3.0, +"duration": 5.0, "texture": ExtResource("29_0n0ds") }], "loop": true, @@ -767,6 +769,17 @@ animations = [{ "speed": 30.0 }, { "frames": [{ +"duration": 15.0, +"texture": ExtResource("12_ld6on") +}, { +"duration": 15.0, +"texture": ExtResource("13_hf3q4") +}], +"loop": true, +"name": &"【胖小孩背着残疾小孩】胖子独自呼吸", +"speed": 30.0 +}, { +"frames": [{ "duration": 3.0, "texture": ExtResource("115_l68hn") }], diff --git a/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif new file mode 100644 index 00000000..2374554a Binary files /dev/null and b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif differ diff --git a/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif.import b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif.import new file mode 100644 index 00000000..7554d086 --- /dev/null +++ b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif.import @@ -0,0 +1,14 @@ +[remap] + +importer="gif.animated.texture.plugin" +type="SpriteFrames" +uid="uid://bpgdt83fesdv5" +path="res://.godot/imported/【单胖子】呼吸帧.gif-31a2327dd37521a2acdeb645f6128210.tres" + +[deps] + +source_file="res://asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧.gif" +dest_files=["res://.godot/imported/【单胖子】呼吸帧.gif-31a2327dd37521a2acdeb645f6128210.tres"] + +[params] + diff --git a/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png new file mode 100644 index 00000000..f2e3ead2 Binary files /dev/null and b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png differ diff --git a/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png.import b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png.import new file mode 100644 index 00000000..d55e0c3b --- /dev/null +++ b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dorexf3x6eqt8" +path="res://.godot/imported/0.png-c948cd4a194d5e266ecc5a99df9c9ad7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/0.png" +dest_files=["res://.godot/imported/0.png-c948cd4a194d5e266ecc5a99df9c9ad7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png new file mode 100644 index 00000000..9a4b17e2 Binary files /dev/null and b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png differ diff --git a/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png.import b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png.import new file mode 100644 index 00000000..a8adf3db --- /dev/null +++ b/asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cesoun0hgdaws" +path="res://.godot/imported/1.png-1971a88c6753920cb4b594462c176ae9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c01_孤儿院围墙/【单胖子】呼吸帧/1.png" +dest_files=["res://.godot/imported/1.png-1971a88c6753920cb4b594462c176ae9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/tool/blury_point_light.webp b/asset/art/tool/blury_point_light.webp new file mode 100644 index 00000000..16dd5094 Binary files /dev/null and b/asset/art/tool/blury_point_light.webp differ diff --git a/asset/art/tool/blury_point_light.webp.import b/asset/art/tool/blury_point_light.webp.import new file mode 100644 index 00000000..80ad4148 --- /dev/null +++ b/asset/art/tool/blury_point_light.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ck8x2mdcpdsht" +path="res://.godot/imported/blury_point_light.webp-81f1823538997ed57c97ef69694c5db0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/tool/blury_point_light.webp" +dest_files=["res://.godot/imported/blury_point_light.webp-81f1823538997ed57c97ef69694c5db0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/tool/inverted_alpha_algo.gd b/asset/art/tool/inverted_alpha_algo.gd new file mode 100644 index 00000000..df5fb20d --- /dev/null +++ b/asset/art/tool/inverted_alpha_algo.gd @@ -0,0 +1,38 @@ +extends Sprite2D + +@export var export_dir = "res://asset/art/ui/inverted_point_light_masks/" +@export var frames = 24 +@export var frame_texture_size = Vector2(1000, 600) + + +func _ready() -> void: + if texture and export_dir: + var image = texture.get_image() + if image: + if DirAccess.dir_exists_absolute(export_dir): + DirAccess.remove_absolute(export_dir) + DirAccess.make_dir_recursive_absolute(export_dir) + for i in range(frames): + var frame_image = Image.create_empty( + frame_texture_size.x, frame_texture_size.y, false, Image.FORMAT_RGBA8 + ) + frame_image.fill(Color.WHITE) + # 最后一张图片不需要处理,保持全白 + if i < frames - 1: + var i_scale = cubic_interpolate(1.0, 0.0, 1.0, 0.0, float(i) / frames) + var i_len = int(frame_texture_size.y * i_scale) + image.resize(i_len, i_len, Image.INTERPOLATE_LANCZOS) + var i_offset = ( + Vector2(frame_texture_size.x - i_len, frame_texture_size.y - i_len) * 0.5 + ) + for y in range(i_len): + for x in range(i_len): + var color = image.get_pixel(x, y) + frame_image.set_pixel( + x + i_offset.x, y + i_offset.y, Color(1.0, 1.0, 1.0, 1.0 - color.r) + ) + var export_path = export_dir + str(i).pad_zeros(3) + ".png" + frame_image.save_png(export_path) + print("Exported to: " + export_path) + else: + print("No image found in texture") diff --git a/asset/art/tool/inverted_alpha_algo.tscn b/asset/art/tool/inverted_alpha_algo.tscn new file mode 100644 index 00000000..542d27ec --- /dev/null +++ b/asset/art/tool/inverted_alpha_algo.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=3 format=3 uid="uid://4wada1me2vj7"] + +[ext_resource type="Texture2D" uid="uid://bei1s1uucktso" path="res://asset/art/tool/neutral_point_light.webp" id="1_oxfr6"] +[ext_resource type="Script" path="res://asset/art/tool/inverted_alpha_algo.gd" id="2_kvma3"] + +[node name="AlphaConverter" type="Sprite2D"] +position = Vector2(-1, 3) +texture = ExtResource("1_oxfr6") +script = ExtResource("2_kvma3") diff --git a/asset/art/ui/inverted_point_light_masks/000.png b/asset/art/ui/inverted_point_light_masks/000.png new file mode 100644 index 00000000..422a4198 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/000.png differ diff --git a/asset/art/ui/inverted_point_light_masks/000.png.import b/asset/art/ui/inverted_point_light_masks/000.png.import new file mode 100644 index 00000000..753b33e5 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/000.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmlhwa80lywa3" +path="res://.godot/imported/000.png-c2347e8aafb889b5f4281a8c2c3cf3cb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/000.png" +dest_files=["res://.godot/imported/000.png-c2347e8aafb889b5f4281a8c2c3cf3cb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/001.png b/asset/art/ui/inverted_point_light_masks/001.png new file mode 100644 index 00000000..f198dc8a Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/001.png differ diff --git a/asset/art/ui/inverted_point_light_masks/001.png.import b/asset/art/ui/inverted_point_light_masks/001.png.import new file mode 100644 index 00000000..61b52d5c --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/001.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://42trxuhnubhw" +path="res://.godot/imported/001.png-b4395e80af7745faf899a889fcd348cc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/001.png" +dest_files=["res://.godot/imported/001.png-b4395e80af7745faf899a889fcd348cc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/002.png b/asset/art/ui/inverted_point_light_masks/002.png new file mode 100644 index 00000000..eafb0435 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/002.png differ diff --git a/asset/art/ui/inverted_point_light_masks/002.png.import b/asset/art/ui/inverted_point_light_masks/002.png.import new file mode 100644 index 00000000..3730c53a --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/002.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cadj4kbscfani" +path="res://.godot/imported/002.png-4bba219980b7006d5aa3a6bb1487bbb8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/002.png" +dest_files=["res://.godot/imported/002.png-4bba219980b7006d5aa3a6bb1487bbb8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/003.png b/asset/art/ui/inverted_point_light_masks/003.png new file mode 100644 index 00000000..33b43d0e Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/003.png differ diff --git a/asset/art/ui/inverted_point_light_masks/003.png.import b/asset/art/ui/inverted_point_light_masks/003.png.import new file mode 100644 index 00000000..f44bf638 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/003.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3sml8l5k0wpe" +path="res://.godot/imported/003.png-3a8e48a212f79a88b623bb504e9c496d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/003.png" +dest_files=["res://.godot/imported/003.png-3a8e48a212f79a88b623bb504e9c496d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/004.png b/asset/art/ui/inverted_point_light_masks/004.png new file mode 100644 index 00000000..caa57204 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/004.png differ diff --git a/asset/art/ui/inverted_point_light_masks/004.png.import b/asset/art/ui/inverted_point_light_masks/004.png.import new file mode 100644 index 00000000..a0d3214d --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/004.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxcdwhem7hp4m" +path="res://.godot/imported/004.png-e20e8e82ca0a267e37dfc2baf8c4ec05.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/004.png" +dest_files=["res://.godot/imported/004.png-e20e8e82ca0a267e37dfc2baf8c4ec05.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/005.png b/asset/art/ui/inverted_point_light_masks/005.png new file mode 100644 index 00000000..c3ba4b7a Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/005.png differ diff --git a/asset/art/ui/inverted_point_light_masks/005.png.import b/asset/art/ui/inverted_point_light_masks/005.png.import new file mode 100644 index 00000000..05df63b9 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/005.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qtgxbebqaj1e" +path="res://.godot/imported/005.png-49a87cd5e64ada63cc1f8ca0e9cfeba8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/005.png" +dest_files=["res://.godot/imported/005.png-49a87cd5e64ada63cc1f8ca0e9cfeba8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/006.png b/asset/art/ui/inverted_point_light_masks/006.png new file mode 100644 index 00000000..ba59bd6a Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/006.png differ diff --git a/asset/art/ui/inverted_point_light_masks/006.png.import b/asset/art/ui/inverted_point_light_masks/006.png.import new file mode 100644 index 00000000..a1fcc6ef --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/006.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cku06prhx2v36" +path="res://.godot/imported/006.png-fd9d3a60ef15b567959e227b63536575.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/006.png" +dest_files=["res://.godot/imported/006.png-fd9d3a60ef15b567959e227b63536575.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/007.png b/asset/art/ui/inverted_point_light_masks/007.png new file mode 100644 index 00000000..0b0c9ba9 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/007.png differ diff --git a/asset/art/ui/inverted_point_light_masks/007.png.import b/asset/art/ui/inverted_point_light_masks/007.png.import new file mode 100644 index 00000000..e24099d2 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/007.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy62xq8rhoj3f" +path="res://.godot/imported/007.png-551735a9720420c1c6d695b65eef4931.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/007.png" +dest_files=["res://.godot/imported/007.png-551735a9720420c1c6d695b65eef4931.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/008.png b/asset/art/ui/inverted_point_light_masks/008.png new file mode 100644 index 00000000..89ff9838 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/008.png differ diff --git a/asset/art/ui/inverted_point_light_masks/008.png.import b/asset/art/ui/inverted_point_light_masks/008.png.import new file mode 100644 index 00000000..4ff50ce3 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/008.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b87hfcnkn05h4" +path="res://.godot/imported/008.png-f7acbfa506fefb9c4b533f1fddc52a5d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/008.png" +dest_files=["res://.godot/imported/008.png-f7acbfa506fefb9c4b533f1fddc52a5d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/009.png b/asset/art/ui/inverted_point_light_masks/009.png new file mode 100644 index 00000000..2a5c7572 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/009.png differ diff --git a/asset/art/ui/inverted_point_light_masks/009.png.import b/asset/art/ui/inverted_point_light_masks/009.png.import new file mode 100644 index 00000000..11e6a4b1 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/009.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://r3dm28fc0e83" +path="res://.godot/imported/009.png-2bfd785a40655e18745331f434062287.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/009.png" +dest_files=["res://.godot/imported/009.png-2bfd785a40655e18745331f434062287.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/010.png b/asset/art/ui/inverted_point_light_masks/010.png new file mode 100644 index 00000000..640f4448 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/010.png differ diff --git a/asset/art/ui/inverted_point_light_masks/010.png.import b/asset/art/ui/inverted_point_light_masks/010.png.import new file mode 100644 index 00000000..71622834 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/010.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3supcynj63qx" +path="res://.godot/imported/010.png-08e291c94292e0823b72ea9b69da72cd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/010.png" +dest_files=["res://.godot/imported/010.png-08e291c94292e0823b72ea9b69da72cd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/011.png b/asset/art/ui/inverted_point_light_masks/011.png new file mode 100644 index 00000000..5583aaa6 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/011.png differ diff --git a/asset/art/ui/inverted_point_light_masks/011.png.import b/asset/art/ui/inverted_point_light_masks/011.png.import new file mode 100644 index 00000000..265e5258 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/011.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brfiay0goejgl" +path="res://.godot/imported/011.png-6b9afaf4cd9e83a5fbde5163e3764716.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/011.png" +dest_files=["res://.godot/imported/011.png-6b9afaf4cd9e83a5fbde5163e3764716.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/012.png b/asset/art/ui/inverted_point_light_masks/012.png new file mode 100644 index 00000000..3d58d2cc Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/012.png differ diff --git a/asset/art/ui/inverted_point_light_masks/012.png.import b/asset/art/ui/inverted_point_light_masks/012.png.import new file mode 100644 index 00000000..34a214fc --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/012.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bac4uqqp1ktki" +path="res://.godot/imported/012.png-c02f390a7ad315740052cc03183bed50.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/012.png" +dest_files=["res://.godot/imported/012.png-c02f390a7ad315740052cc03183bed50.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/013.png b/asset/art/ui/inverted_point_light_masks/013.png new file mode 100644 index 00000000..7517078a Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/013.png differ diff --git a/asset/art/ui/inverted_point_light_masks/013.png.import b/asset/art/ui/inverted_point_light_masks/013.png.import new file mode 100644 index 00000000..78ddbda4 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/013.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://h1mdv3ygc6dd" +path="res://.godot/imported/013.png-cf9aa71263690d4f68931b35cc8dc689.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/013.png" +dest_files=["res://.godot/imported/013.png-cf9aa71263690d4f68931b35cc8dc689.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/014.png b/asset/art/ui/inverted_point_light_masks/014.png new file mode 100644 index 00000000..cd19176b Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/014.png differ diff --git a/asset/art/ui/inverted_point_light_masks/014.png.import b/asset/art/ui/inverted_point_light_masks/014.png.import new file mode 100644 index 00000000..67bda5e5 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/014.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://br4ry5glivh5g" +path="res://.godot/imported/014.png-23622a8c93e8e4a2f4abe84070560c36.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/014.png" +dest_files=["res://.godot/imported/014.png-23622a8c93e8e4a2f4abe84070560c36.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/015.png b/asset/art/ui/inverted_point_light_masks/015.png new file mode 100644 index 00000000..70813e13 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/015.png differ diff --git a/asset/art/ui/inverted_point_light_masks/015.png.import b/asset/art/ui/inverted_point_light_masks/015.png.import new file mode 100644 index 00000000..a94a554b --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/015.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://x7nvm37rxo62" +path="res://.godot/imported/015.png-538aaa8bb4219615eda6206fd1e805f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/015.png" +dest_files=["res://.godot/imported/015.png-538aaa8bb4219615eda6206fd1e805f8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/016.png b/asset/art/ui/inverted_point_light_masks/016.png new file mode 100644 index 00000000..78ed38f6 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/016.png differ diff --git a/asset/art/ui/inverted_point_light_masks/016.png.import b/asset/art/ui/inverted_point_light_masks/016.png.import new file mode 100644 index 00000000..1780f20f --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/016.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmhqnt63xsw27" +path="res://.godot/imported/016.png-fad599461025b9731705d120296740d2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/016.png" +dest_files=["res://.godot/imported/016.png-fad599461025b9731705d120296740d2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/017.png b/asset/art/ui/inverted_point_light_masks/017.png new file mode 100644 index 00000000..ff24ae2b Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/017.png differ diff --git a/asset/art/ui/inverted_point_light_masks/017.png.import b/asset/art/ui/inverted_point_light_masks/017.png.import new file mode 100644 index 00000000..da2029b5 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/017.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpktur1e0dtb1" +path="res://.godot/imported/017.png-f2dd6e4e6bf72aa6fce1af9503370c81.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/017.png" +dest_files=["res://.godot/imported/017.png-f2dd6e4e6bf72aa6fce1af9503370c81.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/018.png b/asset/art/ui/inverted_point_light_masks/018.png new file mode 100644 index 00000000..a92513fa Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/018.png differ diff --git a/asset/art/ui/inverted_point_light_masks/018.png.import b/asset/art/ui/inverted_point_light_masks/018.png.import new file mode 100644 index 00000000..ea15b1fb --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/018.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b62a8q5e4foo" +path="res://.godot/imported/018.png-b718bbed3cd805d14b50f02ad0fc54b7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/018.png" +dest_files=["res://.godot/imported/018.png-b718bbed3cd805d14b50f02ad0fc54b7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/019.png b/asset/art/ui/inverted_point_light_masks/019.png new file mode 100644 index 00000000..c8285317 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/019.png differ diff --git a/asset/art/ui/inverted_point_light_masks/019.png.import b/asset/art/ui/inverted_point_light_masks/019.png.import new file mode 100644 index 00000000..6118c8b9 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/019.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdcgyjj1w3j8o" +path="res://.godot/imported/019.png-3ea65ff107fe5ba48d856c33e2a5d202.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/019.png" +dest_files=["res://.godot/imported/019.png-3ea65ff107fe5ba48d856c33e2a5d202.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/020.png b/asset/art/ui/inverted_point_light_masks/020.png new file mode 100644 index 00000000..1e5ef52c Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/020.png differ diff --git a/asset/art/ui/inverted_point_light_masks/020.png.import b/asset/art/ui/inverted_point_light_masks/020.png.import new file mode 100644 index 00000000..458c683d --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/020.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dqwvsbj2savhv" +path="res://.godot/imported/020.png-54dc79b92f5c0d5f32ecebad12b13d26.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/020.png" +dest_files=["res://.godot/imported/020.png-54dc79b92f5c0d5f32ecebad12b13d26.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/021.png b/asset/art/ui/inverted_point_light_masks/021.png new file mode 100644 index 00000000..af649dbe Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/021.png differ diff --git a/asset/art/ui/inverted_point_light_masks/021.png.import b/asset/art/ui/inverted_point_light_masks/021.png.import new file mode 100644 index 00000000..f44779c3 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/021.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy488fl2ijtb4" +path="res://.godot/imported/021.png-ccdb969051da06de301cee43087c071a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/021.png" +dest_files=["res://.godot/imported/021.png-ccdb969051da06de301cee43087c071a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/022.png b/asset/art/ui/inverted_point_light_masks/022.png new file mode 100644 index 00000000..b3a8f013 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/022.png differ diff --git a/asset/art/ui/inverted_point_light_masks/022.png.import b/asset/art/ui/inverted_point_light_masks/022.png.import new file mode 100644 index 00000000..fbaaa254 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/022.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bo2ee2uhsp6l2" +path="res://.godot/imported/022.png-30f3590c19a2af9ca4fd2be3aea441fb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/022.png" +dest_files=["res://.godot/imported/022.png-30f3590c19a2af9ca4fd2be3aea441fb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/art/ui/inverted_point_light_masks/023.png b/asset/art/ui/inverted_point_light_masks/023.png new file mode 100644 index 00000000..9ee915a7 Binary files /dev/null and b/asset/art/ui/inverted_point_light_masks/023.png differ diff --git a/asset/art/ui/inverted_point_light_masks/023.png.import b/asset/art/ui/inverted_point_light_masks/023.png.import new file mode 100644 index 00000000..9dc57415 --- /dev/null +++ b/asset/art/ui/inverted_point_light_masks/023.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gxl7kkkkq5vd" +path="res://.godot/imported/023.png-bac08ab4fcf040ae1388759a9cce92b3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/ui/inverted_point_light_masks/023.png" +dest_files=["res://.godot/imported/023.png-bac08ab4fcf040ae1388759a9cce92b3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/asset/dialogue/c01.dialogue b/asset/dialogue/c01.dialogue index e88f7380..e24c4d65 100644 --- a/asset/dialogue/c01.dialogue +++ b/asset/dialogue/c01.dialogue @@ -93,6 +93,6 @@ ~ c01_s06_猫鼠游戏 小胖孩: (台词设计)开始咯!5...4... [#wait=2] [ID:c01_s06_谈论鬼差7] -小蝶: (台词设计)啊! [#wait=1] [ID:c01_s06_谈论鬼差8] +小蝶: 啊! [#wait=0.5] [ID:c01_s06_谈论鬼差8] 小胖孩: (台词设计)3...2...1... [#wait=3] [ID:c01_s06_谈论鬼差9] => END diff --git a/asset/shader/cloud.gdshader b/asset/shader/cloud.gdshader new file mode 100644 index 00000000..f749f0ab --- /dev/null +++ b/asset/shader/cloud.gdshader @@ -0,0 +1,43 @@ +shader_type canvas_item; + +// source: https://godotshaders.com/shader/smooth-2d-cloud/ +// inspired by: https://www.youtube.com/watch?v=8OrvIQUFptA&t=2s +uniform sampler2D perlin_noise: repeat_enable; +uniform sampler2D cell_noise: repeat_enable; + +#define pow2(x) (x * x) +//#define iResolution 1.0/SCREEN_PIXEL_SIZE + +const int samples = 35; +const float sigma = float(samples) * 0.25; + +float gaussian(vec2 i) { + return 1.0 / (2.0 * PI * pow2(sigma)) * exp(-((pow2(i.x) + pow2(i.y)) / (2.0 * pow2(sigma)))); +} + +vec3 blur(sampler2D sp, vec2 uv, vec2 scale) { + vec3 col = vec3(0.0); + float accum = 0.0; + float weight; + vec2 offset; + for (int x = - samples >> 1 ; x < samples >> 1; ++x) { + for (int y = -samples >> 1; y < samples >> 1; ++y) { + offset = vec2(float(x), float(y)); + weight = gaussian(offset); + col += texture(sp, uv + scale * offset).rgb * weight; + accum += weight; + } + } + return col / accum; +} + +void fragment() { + vec2 uv1 = vec2(UV.x + TIME * .02, UV.y + TIME * .005); + vec2 uv2 = vec2(UV.x + TIME * .03, UV.y + TIME * .005); + float noise1 = blur(perlin_noise, uv1, SCREEN_PIXEL_SIZE).r; + float noise2 = blur(cell_noise, uv2, SCREEN_PIXEL_SIZE).r; + + float noise = smoothstep(noise1 * noise2 * 1.0, .0, .15); + + COLOR.a *= noise; +} diff --git a/asset/shader/cloud.tres b/asset/shader/cloud.tres new file mode 100644 index 00000000..e506fabe --- /dev/null +++ b/asset/shader/cloud.tres @@ -0,0 +1,6 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://7wllwmfkfvsb"] + +[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="1_0axjk"] + +[resource] +shader = ExtResource("1_0axjk") diff --git a/asset/shader/fog.gdshader b/asset/shader/fog.gdshader index a5f72c42..bec467a7 100644 --- a/asset/shader/fog.gdshader +++ b/asset/shader/fog.gdshader @@ -1,6 +1,7 @@ shader_type canvas_item; -uniform vec4 base_color : source_color; +uniform sampler2D noise: repeat_enable; +//uniform vec4 base_color : source_color; //uniform float location_fade; void fragment() { @@ -8,11 +9,12 @@ void fragment() { //vec3 fog_color_2 = texture(TEXTURE, vec2(UV.x * 0.5 + 0.5 + TIME * 0.010, UV.y * 0.25 + 0.5 - TIME / 160.0)).rgb; //vec3 fog_color_3 = texture(TEXTURE, vec2(UV.x * 0.5 + 0.25 + TIME * 0.024, UV.y * 0.25 - 0.25 - TIME / 160.0)).rgb; //vec3 fog_color = mix(fog_color_3, mix(fog_color_1, fog_color_2, 0.5), 0.7); - vec3 fog_color_1 = texture(TEXTURE, vec2(UV.x / 2.0 + TIME /100.0, UV.y / 4.0 - TIME / 100.0)).rgb; - vec3 fog_color_2 = texture(TEXTURE, vec2(UV.x / 2.0 + 0.5 + TIME /50.0, UV.y / 4.0 + 0.5 - TIME / 160.0)).rgb; - vec3 fog_color_3 = texture(TEXTURE, vec2(UV.x / 2.0 + 0.25 + TIME /25.0, UV.y / 4.0 - 0.25 - TIME / 160.0)).rgb; - vec3 fog_color = mix(fog_color_3, mix(fog_color_1, fog_color_2, 0.5), 0.7); - COLOR.a *= base_color.a * fog_color.r * 1.5; - COLOR.rgb = fog_color * base_color.rgb; + float fog_alpha_1 = texture(noise, vec2(UV.x / 2.0 + TIME /100.0, UV.y / 4.0 - TIME / 100.0)).r; + float fog_alpha_2 = texture(noise, vec2(UV.x / 2.0 + 0.5 + TIME /50.0, UV.y / 4.0 + 0.5 - TIME / 160.0)).r; + float fog_alpha_3 = texture(noise, vec2(UV.x / 2.0 + 0.25 + TIME /25.0, UV.y / 4.0 - 0.25 - TIME / 160.0)).r; + float fog_alpha = mix(fog_alpha_3, mix(fog_alpha_1, fog_alpha_2, 0.5), 0.7); + COLOR.a *= fog_alpha * 1.5; + //COLOR.rgb = base_color.rgb; + //COLOR.rgb = fog_color * base_color.rgb; //COLOR.rgb *= location_fade; } \ No newline at end of file diff --git a/manager/scene/scene_manager.gd b/manager/scene/scene_manager.gd index d49b7d7c..9879a28a 100644 --- a/manager/scene/scene_manager.gd +++ b/manager/scene/scene_manager.gd @@ -9,6 +9,9 @@ enum VIBE { @export var first_entered = true +# func _ready(): +# get_tree().node_added.connect("_on_node_added") + #### Ground and Loader #### @@ -125,6 +128,13 @@ func pop_debug_dialog_info(character: String, content: String): DialogueManager.show_dialogue_balloon_scene(balloon_node, res, title) +#### Shader #### + + +func get_shading_layer() -> ShadingLayer: + return get_node_or_null("/root/Main/ShadingLayer") as ShadingLayer + + #### Prop #### @@ -217,9 +227,3 @@ func show_bag(): func quit_game(): ArchiveManager.save_all() get_tree().quit() - -# func player_moved_delta_x(delta_x: float) -> void: -# # fog effect offset -# var fog = get_node_or_null("/root/Main/ShadingLayer/Fog") -# # if fog: -# # fog.texture.noise.offset.x += delta_x * 0.2 diff --git a/scene/ground/ground.gd b/scene/ground/ground.gd index 628bc10a..9bd2d0df 100644 --- a/scene/ground/ground.gd +++ b/scene/ground/ground.gd @@ -6,17 +6,21 @@ class_name Ground2D extends Node2D @export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9") var default_portal := "left" @export_group("Player", "player_") -@export var player_y_fixed := true +@export var player_y_fixed := true: + set(val): + player_y_fixed = val + if is_node_ready(): + _reset_player_y() @export var player_y := 70: set(val): player_y = val if is_node_ready(): - _reset_player_positon() -@export var reset_player_pos := false: + _reset_player_y() +@export var reset_player_y := false: set(val): - reset_player_pos = false + reset_player_y = false if is_node_ready(): - _reset_player_positon() + _reset_player_y() @export_group("Sound") @export_enum("none", "ghost", "walking", "running", "crawling", "concrete") var footstep_type: String = "concrete": @@ -86,10 +90,10 @@ func _enter_tree() -> void: camera_focus_marker.enabled = true -func _reset_player_positon(): - move_player_to_portal(default_portal) +func _reset_player_y(): # 从屏幕下边缘算起 - player.set_y_from_ground(158.0 - player_y) + if player_y_fixed: + player.set_y_from_ground(158.0 - player_y) func _set_camera_and_player_boundary(): diff --git a/scene/ground/scene/c01/s06_animation.gd b/scene/ground/scene/c01/s06_animation.gd index 317dfbad..441b791a 100644 --- a/scene/ground/scene/c01/s06_animation.gd +++ b/scene/ground/scene/c01/s06_animation.gd @@ -102,6 +102,7 @@ func _game_counting_down(_res = null): get_tree().create_timer(2.5).timeout.connect(_kids_start_run) cat.visible = true cat.play("【墙上黑猫】跑步") + SceneManager.get_shading_layer().show_default_fog(2.0) func _kids_start_run(): @@ -111,6 +112,7 @@ func _kids_start_run(): standing_kid3.play("【站立小孩-3】走路") # 小胖等待 2s 后开始奔跑 get_tree().create_timer(2).timeout.connect(game_kid.play.bind("【胖小孩背着残疾小孩】奔跑")) + # 猫鼠游戏开始,启用失败 ambush 检测 cat_rat_game_fail_ambush.enabled = true # 提示玩家按 shift 键奔跑 SceneManager.pop_center_notification(tr("ui_press_shift")) @@ -118,7 +120,7 @@ func _kids_start_run(): ArchiveManager.archive.player_running_locked = false SceneManager.get_player().running_locked = false # debug 提示 - SceneManager.pop_debug_dialog_info("美术", "(2s倒计时)【胖小孩背着残疾小孩】奔跑") + SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏追逐 BGM") # 中途推桌椅 @@ -146,10 +148,12 @@ func _on_cat_rat_game_obstacles_triggered(): game_kid.sprite_frames.set_animation_loop("【胖小孩背着残疾小孩】摔倒", false) game_kid.animation_finished.connect(_on_kid_fall_finished, CONNECT_ONE_SHOT) _on_mid_ambush_success() + SceneManager.pop_debug_dialog_info("音效", "桌椅翻倒") func _on_kid_fall_finished(): game_kid_limp.modulate.a = 1 + game_kid.play("【胖小孩背着残疾小孩】胖子独自呼吸") game_kid_limp.play("【单残疾小孩】爬行") cat_shadow.play("【墙上小孩猫影子】变身") @@ -166,15 +170,78 @@ func game_succeed(): else: game_kid_limp.pause() cat_shadow.pause() - print("game succeed") - SceneManager.pop_debug_dialog_info("美术", "猫鼠游戏成功") SceneManager.freeze_player(0) + transport_player_to_next_scene(true) # 失败 func game_failed(): + SceneManager.freeze_player(0) if not obstacles_success: game_kid.play_with_loop("【胖小孩背着残疾小孩】侧面呼吸") - print("game failed") - SceneManager.pop_debug_dialog_info("美术", "猫鼠游戏失败") - SceneManager.freeze_player(0) + game_kid.play("【胖小孩背着残疾小孩】摔倒") + game_kid.sprite_frames.set_animation_loop("【胖小孩背着残疾小孩】摔倒", false) + game_kid.animation_finished.connect(_crawling_kid_catch, CONNECT_ONE_SHOT) + else: + _crawling_kid_catch() + print("猫鼠游戏失败") + SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏失败,玩家被抓住") + + +# 【单残疾小孩】 与玩家 x 距离 29px 时,播放「【单残疾小孩】抓住」 +var crawling_distance = 29 + + +# 【单残疾小孩】爬到玩家身边 29px 处,预备抓住 +func _crawling_kid_catch(): + game_kid.play("【胖小孩背着残疾小孩】胖子独自呼吸") + var player = SceneManager.get_player() + # 确保玩家朝向正确 + player.set_facing_direction(Vector2.RIGHT) + var tween = create_tween() + tween.tween_property(cat_shadow, "modulate:a", 0.0, 0.5) + game_kid_limp.modulate.a = 1 + # 小孩爬到玩家脚边的速度 + var v_x = 30.0 + var target_x = player.global_position.x - crawling_distance + var distance_x = target_x - game_kid_limp.global_position.x + if distance_x < 0: + game_kid_limp.flip_h = true + distance_x = -distance_x + var duration = distance_x / v_x + game_kid_limp.play_with_velocity("【单残疾小孩】爬行", Vector2(v_x, 0)) + tween = create_tween() + tween.tween_property(game_kid_limp, "global_position:x", target_x, duration) + tween.tween_callback(_post_catch) + + +# 【单残疾小孩】已经到指定位置,播放抓住动画 +func _post_catch(): + game_kid_limp.global_position.x = ( + SceneManager.get_player().global_position.x - crawling_distance + ) + game_kid_limp.flip_h = false + game_kid_limp.play("【单残疾小孩】抓住") + game_kid_limp.animation_finished.connect( + transport_player_to_next_scene.bind(false), CONNECT_ONE_SHOT + ) + SceneManager.get_player().visible = false + + +func transport_player_to_next_scene(win: bool): + SceneManager.get_shading_layer().tween_fog( + ShadingLayer.FOG_FRAME_MAX, + ShadingLayer.FOG_COLOR_DARK_GRAY, + ShadingLayer.FOG_OFFSET_DEFAULT, + 1.0, + true + ) + get_tree().create_timer(0.7).timeout.connect(_show_next_scene) + if win: + SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏胜利,传送下一场景") + else: + SceneManager.pop_debug_dialog_info("音效", "猫鼠游戏失败,传送下一场景") + + +func _show_next_scene(): + SceneManager.get_ground_loader().transition_to_scene("c01_s07", "left", false) diff --git a/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn b/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn index 41933585..1568afce 100644 --- a/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn +++ b/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn @@ -73,11 +73,11 @@ resource_local_to_scene = true size = Vector2(30, 70) [node name="S06" type="Node2D"] -metadata/_edit_horizontal_guides_ = [158.0, 88.0] +metadata/_edit_horizontal_guides_ = [158.0, 91.0] [node name="Ground" parent="." instance=ExtResource("1_bitx7")] scene_name = "c01_s06" -player_y = 60 +player_y = 67 [node name="AnimationPlayer" parent="Ground" index="0"] libraries = { @@ -87,8 +87,9 @@ script = ExtResource("2_fkfhi") oneshot_animation = "" [node name="BGSprite2D" parent="Ground" index="2"] +position = Vector2(0, -3) texture = ExtResource("2_ow3ya") -offset = Vector2(0, -159) +offset = Vector2(0, -155) [node name="院长凳子" type="Sprite2D" parent="Ground/BGSprite2D" index="0"] position = Vector2(30, -6) @@ -220,7 +221,7 @@ collision_mask = 64 shape = SubResource("RectangleShape2D_ceat6") [node name="【站立小孩-1】" parent="Ground/DeployLayer" index="12" instance=ExtResource("8_ouldg")] -position = Vector2(1488, -4) +position = Vector2(1490, -6.5) sprite_frames = ExtResource("7_dsj2r") animation = &"【站立小孩-1】侧面呼吸" action_configs = Array[Dictionary]([{ @@ -237,7 +238,7 @@ move_configs = Array[Dictionary]([{ }]) [node name="【站立小孩-3】" parent="Ground/DeployLayer" index="13" instance=ExtResource("8_ouldg")] -position = Vector2(1544, -3) +position = Vector2(1546, -5.5) sprite_frames = ExtResource("7_dsj2r") animation = &"【站立小孩-3】呼吸" action_configs = Array[Dictionary]([{ @@ -277,9 +278,10 @@ move_configs = Array[Dictionary]([{ position = Vector2(123, 43) [node name="【墙上黑猫】" parent="Ground/DeployLayer" index="15" instance=ExtResource("8_ouldg")] -position = Vector2(1394, -4) +position = Vector2(1394, -1) sprite_frames = ExtResource("7_dsj2r") animation = &"【墙上黑猫】跑步" +frame_progress = 0.142437 autostart = false move_configs = Array[Dictionary]([{ "animation": &"【墙上黑猫】跑步", @@ -287,14 +289,14 @@ move_configs = Array[Dictionary]([{ }]) [node name="猫鼠游戏开始ambush" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_tudob")] -position = Vector2(1804, 56) +position = Vector2(1809, 56) freeze_time = 1.0 hook_dialogue_title = "c01_s06_谈论鬼差与猫鼠游戏" hook_method = "game_intro" [node name="【胖小孩背着残疾小孩】" parent="Ground/DeployLayer" index="17" instance=ExtResource("8_ouldg")] z_index = 1 -position = Vector2(1731, 4) +position = Vector2(1733, 5) sprite_frames = ExtResource("7_dsj2r") animation = &"【胖小孩背着残疾小孩】呼吸" action_configs = Array[Dictionary]([{ @@ -318,11 +320,11 @@ move_configs = Array[Dictionary]([{ }]) [node name="【单残疾小孩】" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】" instance=ExtResource("8_ouldg")] -z_index = 2 +z_index = 6 z_as_relative = false -position = Vector2(-23, -1) +position = Vector2(-23, 1) sprite_frames = ExtResource("7_dsj2r") -animation = &"【单残疾小孩】爬行" +animation = &"【单残疾小孩】抓住" autostart = false move_configs = Array[Dictionary]([{ "animation": &"【单残疾小孩】爬行", @@ -347,7 +349,7 @@ action_configs = Array[Dictionary]([{ light_energy = -0.7 [node name="中途Trigger" type="Area2D" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】"] -position = Vector2(30, 12) +position = Vector2(29, 12) collision_layer = 64 collision_mask = 64 monitoring = false @@ -358,7 +360,7 @@ shape = SubResource("RectangleShape2D_1ojoa") debug_color = Color(0.519778, 0.447036, 0.929413, 0.42) [node name="猫鼠游戏失败ambush" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】" instance=ExtResource("11_tudob")] -position = Vector2(26, 45) +position = Vector2(19, 49) enabled = false hook_method = "game_failed" @@ -380,7 +382,7 @@ texture = ExtResource("4_6ffae") offset = Vector2(601.5, -0.5) [node name="MainPlayer" parent="Ground" index="5"] -position = Vector2(144, 98) +position = Vector2(1775, 91) character = "小小蝶" [node name="柱子" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"] diff --git a/scene/ground/scene/c01/s07_书店长廊.tscn b/scene/ground/scene/c01/s07_书店长廊.tscn new file mode 100644 index 00000000..a82ad55a --- /dev/null +++ b/scene/ground/scene/c01/s07_书店长廊.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=3 format=3 uid="uid://ds2iyfndwamiy"] + +[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_kbldb"] + +[sub_resource type="LabelSettings" id="LabelSettings_7adaf"] +font_size = 20 + +[node name="S07" type="Node2D"] + +[node name="Ground" parent="." instance=ExtResource("1_kbldb")] +scene_name = "c01_s07" + +[node name="portal_right" parent="Ground/DeployLayer" index="1"] +immediately = false +target_scene = "c02_s08" + +[node name="Label" type="Label" parent="Ground/DeployLayer" index="2"] +offset_left = 132.0 +offset_top = -9.0 +offset_right = 212.0 +offset_bottom = 16.0 +text = "书店长廊" +label_settings = SubResource("LabelSettings_7adaf") + +[node name="MainPlayer" parent="Ground" index="5"] +character = "小小蝶" + +[editable path="Ground"] diff --git a/scene/shading/shading_layer.gd b/scene/shading/shading_layer.gd index 6f4a1446..76de76a2 100644 --- a/scene/shading/shading_layer.gd +++ b/scene/shading/shading_layer.gd @@ -1,104 +1,186 @@ @tool -extends CanvasLayer +class_name ShadingLayer extends CanvasLayer @export_enum("vignette", "fog", "glitch", "palette", "chromatic_abberation") var mode: Array[String] = ["vignette"] as Array[String]: set(new_val): mode = new_val - if not is_node_ready(): - return _setup_visibility() @export_group("Vignette", "vignette_") @export var vignette_rgb := Color8(0x3f, 0x26, 0x31): set(new_val): vignette_rgb = new_val - if not is_node_ready(): - return - get_node("Vignette").material.set("shader_parameter/vignette_rgb", new_val) + if is_node_ready(): + %Vignette.material.set("shader_parameter/vignette_rgb", new_val) @export_range(0, 5) var vignette_intensity := 0.3: set(new_val): vignette_intensity = new_val - if not is_node_ready(): - return - get_node("Vignette").material.set("shader_parameter/vignette_intensity", new_val) + if is_node_ready(): + %Vignette.material.set("shader_parameter/vignette_intensity", new_val) @export_group("Fog", "fog_") -@export var fog_offset := Vector2(0.0, 0.0): +const fog_frame_count = 24 # 0-23 +@export var fog_offset := FOG_OFFSET_DEFAULT: set(new_val): fog_offset = new_val - if not is_node_ready(): - return - get_node("Fog").texture.noise.set("offset", new_val) -@export var fog_base_color := Color8(0xff, 0xff, 0xff, 0x3d): + if is_node_ready(): + %Fog.offset = new_val +@export var fog_frame := FOG_FRAME_DEFAULT: set(new_val): - fog_base_color = new_val - if not is_node_ready(): - return - get_node("Fog").material.set("shader_parameter/base_color", new_val) + fog_frame = new_val + if is_node_ready(): + %Fog.frame = new_val +@export var fog_modulate := FOG_COLOR_DEFAULT: + set(new_val): + fog_modulate = new_val + if is_node_ready(): + %Fog.self_modulate = new_val +# @export var fog_offset := Vector2(0.0, 0.0): +# set(new_val): +# fog_offset = new_val +# if not is_node_ready(): +# return +# %Fog.texture.noise.set("offset", new_val) +# @export var fog_base_color := Color8(0xff, 0xff, 0xff, 0x3d): +# set(new_val): +# fog_base_color = new_val +# if not is_node_ready(): +# return +# %Fog.material.set("shader_parameter/base_color", new_val) @export_group("Glitch", "glitch_") @export var glitch_power := 0.001: set(new_val): glitch_power = new_val - if not is_node_ready(): - return - get_node("GlitchEffect").material.set("shader_parameter/shake_power", new_val) + if is_node_ready(): + %GlitchEffect.material.set("shader_parameter/shake_power", new_val) # rate @export var glitch_rate := 0.2: set(new_val): glitch_rate = new_val - if not is_node_ready(): - return - get_node("GlitchEffect").material.set("shader_parameter/shake_rate", new_val) + if is_node_ready(): + %GlitchEffect.material.set("shader_parameter/shake_rate", new_val) # speed @export var glitch_speed := 5.0: set(new_val): glitch_speed = new_val - if not is_node_ready(): - return - get_node("GlitchEffect").material.set("shader_parameter/shake_speed", new_val) + if is_node_ready(): + %GlitchEffect.material.set("shader_parameter/shake_speed", new_val) # block_size @export var glitch_block_size := 30.5: set(new_val): glitch_block_size = new_val if not is_node_ready(): return - get_node("GlitchEffect").material.set("shader_parameter/shake_block_size", new_val) + %GlitchEffect.material.set("shader_parameter/shake_block_size", new_val) # color rate @export var glitch_color_rate := 0.01: set(new_val): glitch_color_rate = new_val - if not is_node_ready(): - return - get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", new_val) + if is_node_ready(): + %GlitchEffect.material.set("shader_parameter/shake_color_rate", new_val) @export_group("Palette", "palette_") @export var palette_texture := preload("res://asset/shader/palette/bloodmoon21-1x.png"): set(new_val): palette_texture = new_val - if not is_node_ready(): - return - get_node("Palette").material.set("shader_parameter/palette", new_val) + if is_node_ready(): + %Palette.material.set("shader_parameter/palette", new_val) func _ready() -> void: - $Sprite2D.visible = false + %Sprite2D.visible = false layer = GlobalConfig.CANVAS_LAYER_SHADING # set up other properties - get_node("Vignette").material.set("shader_parameter/vignette_rgb", vignette_rgb) - get_node("Vignette").material.set("shader_parameter/vignette_intensity", vignette_intensity) - get_node("Fog").texture.noise.set("offset", fog_offset) - get_node("Fog").material.set("shader_parameter/base_color", fog_base_color) - get_node("GlitchEffect").material.set("shader_parameter/shake_power", glitch_power) - get_node("GlitchEffect").material.set("shader_parameter/shake_rate", glitch_rate) - get_node("GlitchEffect").material.set("shader_parameter/shake_speed", glitch_speed) - get_node("GlitchEffect").material.set("shader_parameter/shake_block_size", glitch_block_size) - get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", glitch_color_rate) - get_node("Palette").material.set("shader_parameter/palette", palette_texture) + %Vignette.material.set("shader_parameter/vignette_rgb", vignette_rgb) + %Vignette.material.set("shader_parameter/vignette_intensity", vignette_intensity) + %Fog.frame = fog_frame + %Fog.offset = fog_offset + %Fog.self_modulate = fog_modulate + # %Fog.texture.noise.set("offset", fog_offset) + # %Fog.material.set("shader_parameter/base_color", fog_base_color) + %GlitchEffect.material.set("shader_parameter/shake_power", glitch_power) + %GlitchEffect.material.set("shader_parameter/shake_rate", glitch_rate) + %GlitchEffect.material.set("shader_parameter/shake_speed", glitch_speed) + %GlitchEffect.material.set("shader_parameter/shake_block_size", glitch_block_size) + %GlitchEffect.material.set("shader_parameter/shake_color_rate", glitch_color_rate) + %Palette.material.set("shader_parameter/palette", palette_texture) # set up visibility _setup_visibility() func _setup_visibility(): - get_node("Vignette").visible = mode.has("vignette") - get_node("Fog").visible = mode.has("fog") - get_node("GlitchEffect").visible = mode.has("glitch") - get_node("Palette").visible = mode.has("palette") - get_node("ChromaticAbberation").visible = mode.has("chromatic_abberation") + if not is_node_ready(): + return + %Vignette.visible = mode.has("vignette") + %Fog.visible = mode.has("fog") + %GlitchEffect.visible = mode.has("glitch") + %Palette.visible = mode.has("palette") + %ChromaticAbberation.visible = mode.has("chromatic_abberation") + + +func erase_mode(mode_name: String) -> void: + if mode.has(mode_name): + mode.erase(mode_name) + _setup_visibility() + + +func add_mode(mode_name: String) -> void: + if not mode.has(mode_name): + mode.append(mode_name) + _setup_visibility() + + +#### Tween fog #### + +const FOG_COLOR_DEFAULT = Color(0.8, 0.8, 0.8, 0.8) +const FOG_COLOR_WHITE = Color(1, 1, 1, 1) +const FOG_COLOR_BLACK = Color(0, 0, 0, 1) +const FOG_COLOR_GRAY = Color(0.5, 0.5, 0.5, 1) +const FOG_COLOR_DARK_GRAY = Color(0.2, 0.2, 0.2, 1) + +const FOG_FRAME_MIN = 0 +const FOG_FRAME_DEFAULT = 15 +const FOG_FRAME_MAX = 23 + +const FOG_OFFSET_DEFAULT = Vector2(0, 50) + +var _fog_tween: Tween + + +func show_default_fog(duration := 0.8): + if not mode.has("fog"): + add_mode("fog") + fog_modulate = Color.TRANSPARENT + tween_fog(FOG_FRAME_DEFAULT, FOG_COLOR_DEFAULT, FOG_OFFSET_DEFAULT, duration) + + +func close_fog(duration := 0.8): + if mode.has("fog"): + tween_fog(fog_frame, Color.TRANSPARENT, fog_offset, duration, true) + + +func tween_fog( + end_frame := fog_frame, + end_modulate := fog_modulate, + end_offset := fog_offset, + duration := 0.8, + close_at_end := false +) -> void: + if not is_node_ready(): + return + if GlobalConfig.DEBUG: + print( + "Tween fog to frame: ", end_frame, " modulate: ", end_modulate, " offset: ", end_offset + ) + if not mode.has("fog"): + # 如果没有开启 fog,先开启,并且设置为透明 + add_mode("fog") + fog_modulate = Color.TRANSPARENT + if _fog_tween and _fog_tween.is_valid(): + _fog_tween.kill() + _fog_tween = create_tween() + _fog_tween.tween_property(%Fog, "frame", end_frame, duration) + if end_modulate != fog_modulate: + _fog_tween.parallel().tween_property(%Fog, "self_modulate", end_modulate, duration) + if end_offset != fog_offset: + _fog_tween.parallel().tween_property(%Fog, "offset", end_offset, duration) + if close_at_end: + _fog_tween.tween_callback(erase_mode.bind("fog")) diff --git a/scene/shading/shading_layer.tscn b/scene/shading/shading_layer.tscn index 7fb53dad..d8fe8a29 100644 --- a/scene/shading/shading_layer.tscn +++ b/scene/shading/shading_layer.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=3 uid="uid://3gk1gxwanw24"] +[gd_scene load_steps=43 format=3 uid="uid://3gk1gxwanw24"] [ext_resource type="Script" path="res://scene/shading/shading_layer.gd" id="1_6w7er"] [ext_resource type="Shader" path="res://asset/shader/vignette.gdshader" id="1_akp6k"] @@ -7,7 +7,32 @@ [ext_resource type="Shader" path="res://asset/shader/palette.gdshader" id="4_n5nu8"] [ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="4_sglhm"] [ext_resource type="Texture2D" uid="uid://36k1j0qw66tm" path="res://asset/shader/palette/bloodmoon21-1x.png" id="5_ios50"] +[ext_resource type="Material" uid="uid://7wllwmfkfvsb" path="res://asset/shader/cloud.tres" id="7_cmfij"] [ext_resource type="Shader" path="res://asset/shader/chromatic_abberation.gdshader" id="8_b0unx"] +[ext_resource type="Texture2D" uid="uid://bmlhwa80lywa3" path="res://asset/art/ui/inverted_point_light_masks/000.png" id="8_v5h2g"] +[ext_resource type="Texture2D" uid="uid://42trxuhnubhw" path="res://asset/art/ui/inverted_point_light_masks/001.png" id="9_l3wcl"] +[ext_resource type="Texture2D" uid="uid://cadj4kbscfani" path="res://asset/art/ui/inverted_point_light_masks/002.png" id="10_gxxjv"] +[ext_resource type="Texture2D" uid="uid://3sml8l5k0wpe" path="res://asset/art/ui/inverted_point_light_masks/003.png" id="11_yxk17"] +[ext_resource type="Texture2D" uid="uid://dxcdwhem7hp4m" path="res://asset/art/ui/inverted_point_light_masks/004.png" id="12_k6v1x"] +[ext_resource type="Texture2D" uid="uid://qtgxbebqaj1e" path="res://asset/art/ui/inverted_point_light_masks/005.png" id="13_kjyug"] +[ext_resource type="Texture2D" uid="uid://cku06prhx2v36" path="res://asset/art/ui/inverted_point_light_masks/006.png" id="14_yy2gj"] +[ext_resource type="Texture2D" uid="uid://cy62xq8rhoj3f" path="res://asset/art/ui/inverted_point_light_masks/007.png" id="15_dp8m6"] +[ext_resource type="Texture2D" uid="uid://b87hfcnkn05h4" path="res://asset/art/ui/inverted_point_light_masks/008.png" id="16_86yqr"] +[ext_resource type="Texture2D" uid="uid://r3dm28fc0e83" path="res://asset/art/ui/inverted_point_light_masks/009.png" id="17_5psqe"] +[ext_resource type="Texture2D" uid="uid://b3supcynj63qx" path="res://asset/art/ui/inverted_point_light_masks/010.png" id="18_kqi2m"] +[ext_resource type="Texture2D" uid="uid://brfiay0goejgl" path="res://asset/art/ui/inverted_point_light_masks/011.png" id="19_0iov5"] +[ext_resource type="Texture2D" uid="uid://bac4uqqp1ktki" path="res://asset/art/ui/inverted_point_light_masks/012.png" id="20_nuwxf"] +[ext_resource type="Texture2D" uid="uid://h1mdv3ygc6dd" path="res://asset/art/ui/inverted_point_light_masks/013.png" id="21_e2710"] +[ext_resource type="Texture2D" uid="uid://br4ry5glivh5g" path="res://asset/art/ui/inverted_point_light_masks/014.png" id="22_a2ogd"] +[ext_resource type="Texture2D" uid="uid://x7nvm37rxo62" path="res://asset/art/ui/inverted_point_light_masks/015.png" id="23_0fxxa"] +[ext_resource type="Texture2D" uid="uid://cmhqnt63xsw27" path="res://asset/art/ui/inverted_point_light_masks/016.png" id="24_wh31r"] +[ext_resource type="Texture2D" uid="uid://bpktur1e0dtb1" path="res://asset/art/ui/inverted_point_light_masks/017.png" id="25_ur5f1"] +[ext_resource type="Texture2D" uid="uid://b62a8q5e4foo" path="res://asset/art/ui/inverted_point_light_masks/018.png" id="26_scw75"] +[ext_resource type="Texture2D" uid="uid://cdcgyjj1w3j8o" path="res://asset/art/ui/inverted_point_light_masks/019.png" id="27_kg4a3"] +[ext_resource type="Texture2D" uid="uid://dqwvsbj2savhv" path="res://asset/art/ui/inverted_point_light_masks/020.png" id="28_1rgfo"] +[ext_resource type="Texture2D" uid="uid://dy488fl2ijtb4" path="res://asset/art/ui/inverted_point_light_masks/021.png" id="29_aklg4"] +[ext_resource type="Texture2D" uid="uid://bo2ee2uhsp6l2" path="res://asset/art/ui/inverted_point_light_masks/022.png" id="30_3pvg6"] +[ext_resource type="Texture2D" uid="uid://gxl7kkkkq5vd" path="res://asset/art/ui/inverted_point_light_masks/023.png" id="31_53o1k"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_y8ah7"] shader = ExtResource("8_b0unx") @@ -26,18 +51,180 @@ shader_parameter/shake_speed = 5.0 shader_parameter/shake_block_size = 30.5 shader_parameter/shake_color_rate = 0.01 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_pabt5"] -shader = ExtResource("4_sglhm") -shader_parameter/base_color = Color(0.187711, 0.154306, 0.137603, 0.65098) +[sub_resource type="FastNoiseLite" id="FastNoiseLite_jw18h"] +noise_type = 2 +fractal_type = 2 -[sub_resource type="FastNoiseLite" id="FastNoiseLite_els51"] -frequency = 0.015 - -[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_oe2uy"] -width = 600 +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_trttd"] +width = 800 +height = 800 seamless = true -normalize = false -noise = SubResource("FastNoiseLite_els51") +seamless_blend_skirt = 0.25 +noise = SubResource("FastNoiseLite_jw18h") + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fv2fx"] +shader = ExtResource("4_sglhm") +shader_parameter/noise = SubResource("NoiseTexture2D_trttd") + +[sub_resource type="SpriteFrames" id="SpriteFrames_xeqgs"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("8_v5h2g") +}, { +"duration": 1.0, +"texture": ExtResource("9_l3wcl") +}, { +"duration": 1.0, +"texture": ExtResource("10_gxxjv") +}, { +"duration": 1.0, +"texture": ExtResource("11_yxk17") +}, { +"duration": 1.0, +"texture": ExtResource("12_k6v1x") +}, { +"duration": 1.0, +"texture": ExtResource("13_kjyug") +}, { +"duration": 1.0, +"texture": ExtResource("14_yy2gj") +}, { +"duration": 1.0, +"texture": ExtResource("15_dp8m6") +}, { +"duration": 1.0, +"texture": ExtResource("16_86yqr") +}, { +"duration": 1.0, +"texture": ExtResource("17_5psqe") +}, { +"duration": 1.0, +"texture": ExtResource("18_kqi2m") +}, { +"duration": 1.0, +"texture": ExtResource("19_0iov5") +}, { +"duration": 1.0, +"texture": ExtResource("20_nuwxf") +}, { +"duration": 1.0, +"texture": ExtResource("21_e2710") +}, { +"duration": 1.0, +"texture": ExtResource("22_a2ogd") +}, { +"duration": 1.0, +"texture": ExtResource("23_0fxxa") +}, { +"duration": 1.0, +"texture": ExtResource("24_wh31r") +}, { +"duration": 1.0, +"texture": ExtResource("25_ur5f1") +}, { +"duration": 1.0, +"texture": ExtResource("26_scw75") +}, { +"duration": 1.0, +"texture": ExtResource("27_kg4a3") +}, { +"duration": 1.0, +"texture": ExtResource("28_1rgfo") +}, { +"duration": 1.0, +"texture": ExtResource("29_aklg4") +}, { +"duration": 1.0, +"texture": ExtResource("30_3pvg6") +}, { +"duration": 1.0, +"texture": ExtResource("31_53o1k") +}], +"loop": false, +"name": &"inverted_point_light_masks", +"speed": 12.0 +}] + +[sub_resource type="SpriteFrames" id="SpriteFrames_sypgq"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("8_v5h2g") +}, { +"duration": 1.0, +"texture": ExtResource("9_l3wcl") +}, { +"duration": 1.0, +"texture": ExtResource("10_gxxjv") +}, { +"duration": 1.0, +"texture": ExtResource("11_yxk17") +}, { +"duration": 1.0, +"texture": ExtResource("12_k6v1x") +}, { +"duration": 1.0, +"texture": ExtResource("13_kjyug") +}, { +"duration": 1.0, +"texture": ExtResource("14_yy2gj") +}, { +"duration": 1.0, +"texture": ExtResource("15_dp8m6") +}, { +"duration": 1.0, +"texture": ExtResource("16_86yqr") +}, { +"duration": 1.0, +"texture": ExtResource("17_5psqe") +}, { +"duration": 1.0, +"texture": ExtResource("18_kqi2m") +}, { +"duration": 1.0, +"texture": ExtResource("19_0iov5") +}, { +"duration": 1.0, +"texture": ExtResource("20_nuwxf") +}, { +"duration": 1.0, +"texture": ExtResource("21_e2710") +}, { +"duration": 1.0, +"texture": ExtResource("22_a2ogd") +}, { +"duration": 1.0, +"texture": ExtResource("23_0fxxa") +}, { +"duration": 1.0, +"texture": ExtResource("24_wh31r") +}, { +"duration": 1.0, +"texture": ExtResource("25_ur5f1") +}, { +"duration": 1.0, +"texture": ExtResource("26_scw75") +}, { +"duration": 1.0, +"texture": ExtResource("27_kg4a3") +}, { +"duration": 1.0, +"texture": ExtResource("28_1rgfo") +}, { +"duration": 1.0, +"texture": ExtResource("29_aklg4") +}, { +"duration": 1.0, +"texture": ExtResource("30_3pvg6") +}, { +"duration": 1.0, +"texture": ExtResource("31_53o1k") +}], +"loop": false, +"name": &"inverted_point_light_masks", +"speed": 12.0 +}] [sub_resource type="ShaderMaterial" id="ShaderMaterial_radis"] shader = ExtResource("1_akp6k") @@ -48,14 +235,15 @@ shader_parameter/vignette_rgb = Color(0.247059, 0.14902, 0.192157, 1) layer = 10 script = ExtResource("1_6w7er") mode = Array[String]([]) -fog_base_color = Color(0.187711, 0.154306, 0.137603, 0.65098) [node name="Sprite2D" type="Sprite2D" parent="."] +unique_name_in_owner = true visible = false position = Vector2(285, 142) texture = ExtResource("2_r3a31") [node name="ChromaticAbberation" type="ColorRect" parent="."] +unique_name_in_owner = true visible = false material = SubResource("ShaderMaterial_y8ah7") anchors_preset = 15 @@ -69,6 +257,7 @@ mouse_filter = 1 copy_mode = 2 [node name="Palette" type="Panel" parent="."] +unique_name_in_owner = true visible = false material = SubResource("ShaderMaterial_iqikf") anchors_preset = 15 @@ -82,6 +271,7 @@ mouse_filter = 1 copy_mode = 2 [node name="GlitchEffect" type="ColorRect" parent="."] +unique_name_in_owner = true visible = false material = SubResource("ShaderMaterial_fpg8r") anchors_preset = 15 @@ -94,27 +284,35 @@ mouse_filter = 1 [node name="BackBufferCopy" type="BackBufferCopy" parent="GlitchEffect"] copy_mode = 2 -[node name="Fog" type="TextureRect" parent="."] +[node name="Fog" type="AnimatedSprite2D" parent="."] +unique_name_in_owner = true visible = false -material = SubResource("ShaderMaterial_pabt5") -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -300.0 -offset_top = -256.0 -offset_right = 300.0 -offset_bottom = 256.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = SubResource("NoiseTexture2D_oe2uy") -stretch_mode = 1 +self_modulate = Color(0.8, 0.8, 0.8, 0.8) +material = SubResource("ShaderMaterial_fv2fx") +position = Vector2(286, 161) +sprite_frames = SubResource("SpriteFrames_xeqgs") +animation = &"inverted_point_light_masks" +frame = 15 +offset = Vector2(0, 50) [node name="BackBufferCopy" type="BackBufferCopy" parent="Fog"] copy_mode = 2 +[node name="Cloud" type="AnimatedSprite2D" parent="."] +unique_name_in_owner = true +visible = false +material = ExtResource("7_cmfij") +position = Vector2(267, 171) +scale = Vector2(0.7, 0.7) +sprite_frames = SubResource("SpriteFrames_sypgq") +animation = &"inverted_point_light_masks" +frame = 15 + +[node name="BackBufferCopy" type="BackBufferCopy" parent="Cloud"] +copy_mode = 2 + [node name="Vignette" type="ColorRect" parent="."] +unique_name_in_owner = true visible = false material = SubResource("ShaderMaterial_radis") anchors_preset = 15