c01s06猫鼠游戏浓雾效果;结束后传送下一场景

This commit is contained in:
cakipaul 2025-01-26 21:11:38 +08:00
parent 8b32c6eb24
commit 79a7c0ff84
71 changed files with 1592 additions and 152 deletions

View File

@ -13,7 +13,7 @@ class_name ProAnimatedSprite2D extends AnimatedSprite2D
light2d.blend_mode = Light2D.BLEND_MODE_ADD light2d.blend_mode = Light2D.BLEND_MODE_ADD
else: else:
light2d.blend_mode = Light2D.BLEND_MODE_SUB light2d.blend_mode = Light2D.BLEND_MODE_SUB
light_energy = val light_energy = val * modulate.a
const ACTION_CONFIG = { const ACTION_CONFIG = {
"animation_intro": "", "intro_loop": 1, "animation_wait_time": 0.0, "animation_next": "" "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): if sprite_frames and sprite_frames.has_animation(move_config.animation):
animation_velocity[move_config.animation] = move_config.velocity animation_velocity[move_config.animation] = move_config.velocity
func _on_frame_changed(): func _on_frame_changed():
if light_energy == 0.0: if light_energy == 0.0:
return return
@ -83,6 +84,8 @@ func _on_frame_changed():
if not texture: if not texture:
return return
light2d.texture = texture light2d.texture = texture
light_energy = light_energy * modulate.a
func _reset_loop(intro: String): func _reset_loop(intro: String):
for c in action_configs: for c in action_configs:
@ -121,7 +124,16 @@ func _on_animation_start():
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
if Engine.is_editor_hint() or not velocity or not is_playing(): if Engine.is_editor_hint() or not velocity or not is_playing():
return 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 # temporary set velocity

View File

@ -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://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"] [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://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://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://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://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://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://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"] [ext_resource type="Texture2D" uid="uid://c26rwvwhwko3e" path="res://asset/art/gif/c01_孤儿院围墙/【墙上小孩猫影子】变身/8.png" id="15_0nnpx"]
@ -167,42 +169,42 @@
[resource] [resource]
animations = [{ animations = [{
"frames": [{ "frames": [{
"duration": 3.0, "duration": 7.0,
"texture": ExtResource("1_ppkaj") "texture": ExtResource("1_ppkaj")
}, { }, {
"duration": 3.0, "duration": 7.0,
"texture": ExtResource("2_lkyps") "texture": ExtResource("2_lkyps")
}, { }, {
"duration": 3.0, "duration": 7.0,
"texture": ExtResource("3_phrcs") "texture": ExtResource("3_phrcs")
}, { }, {
"duration": 3.0, "duration": 7.0,
"texture": ExtResource("4_8ckwd") "texture": ExtResource("4_8ckwd")
}, { }, {
"duration": 6.0, "duration": 7.0,
"texture": ExtResource("5_upnvy") "texture": ExtResource("5_upnvy")
}], }],
"loop": true, "loop": false,
"name": &"【单残疾小孩】抓住", "name": &"【单残疾小孩】抓住",
"speed": 30.0 "speed": 30.0
}, { }, {
"frames": [{ "frames": [{
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("1_uv4ft") "texture": ExtResource("1_uv4ft")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("2_i110w") "texture": ExtResource("2_i110w")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("3_j2srm") "texture": ExtResource("3_j2srm")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("4_tr405") "texture": ExtResource("4_tr405")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("5_ooobw") "texture": ExtResource("5_ooobw")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("6_drfic") "texture": ExtResource("6_drfic")
}], }],
"loop": true, "loop": true,
@ -210,40 +212,40 @@ animations = [{
"speed": 30.0 "speed": 30.0
}, { }, {
"frames": [{ "frames": [{
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("7_1njnw") "texture": ExtResource("7_1njnw")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("8_yoixk") "texture": ExtResource("8_yoixk")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("9_w45v0") "texture": ExtResource("9_w45v0")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("10_mqmhd") "texture": ExtResource("10_mqmhd")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("11_5rd7h") "texture": ExtResource("11_5rd7h")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("12_ohj4k") "texture": ExtResource("12_ohj4k")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("13_mvm5i") "texture": ExtResource("13_mvm5i")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("14_th4f0") "texture": ExtResource("14_th4f0")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("15_0nnpx") "texture": ExtResource("15_0nnpx")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("16_gqvxl") "texture": ExtResource("16_gqvxl")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("17_r2ypr") "texture": ExtResource("17_r2ypr")
}, { }, {
"duration": 3.0, "duration": 4.0,
"texture": ExtResource("18_h1tve") "texture": ExtResource("18_h1tve")
}], }],
"loop": false, "loop": false,
@ -251,22 +253,22 @@ animations = [{
"speed": 30.0 "speed": 30.0
}, { }, {
"frames": [{ "frames": [{
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("24_gjuvo") "texture": ExtResource("24_gjuvo")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("25_jnic7") "texture": ExtResource("25_jnic7")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("26_os8pk") "texture": ExtResource("26_os8pk")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("27_5d871") "texture": ExtResource("27_5d871")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("28_emcgp") "texture": ExtResource("28_emcgp")
}, { }, {
"duration": 3.0, "duration": 5.0,
"texture": ExtResource("29_0n0ds") "texture": ExtResource("29_0n0ds")
}], }],
"loop": true, "loop": true,
@ -767,6 +769,17 @@ animations = [{
"speed": 30.0 "speed": 30.0
}, { }, {
"frames": [{ "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, "duration": 3.0,
"texture": ExtResource("115_l68hn") "texture": ExtResource("115_l68hn")
}], }],

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -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]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -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

View File

@ -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")

View File

@ -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")

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -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

View File

@ -93,6 +93,6 @@
~ c01_s06_猫鼠游戏 ~ c01_s06_猫鼠游戏
小胖孩: (台词设计)开始咯5...4... [#wait=2] [ID:c01_s06_谈论鬼差7] 小胖孩: (台词设计)开始咯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] 小胖孩: (台词设计)3...2...1... [#wait=3] [ID:c01_s06_谈论鬼差9]
=> END => END

View File

@ -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;
}

6
asset/shader/cloud.tres Normal file
View File

@ -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")

View File

@ -1,6 +1,7 @@
shader_type canvas_item; 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; //uniform float location_fade;
void fragment() { 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_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_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 = 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; float fog_alpha_1 = texture(noise, vec2(UV.x / 2.0 + TIME /100.0, UV.y / 4.0 - TIME / 100.0)).r;
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; 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;
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; 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;
vec3 fog_color = mix(fog_color_3, mix(fog_color_1, fog_color_2, 0.5), 0.7); float fog_alpha = mix(fog_alpha_3, mix(fog_alpha_1, fog_alpha_2, 0.5), 0.7);
COLOR.a *= base_color.a * fog_color.r * 1.5; COLOR.a *= fog_alpha * 1.5;
COLOR.rgb = fog_color * base_color.rgb; //COLOR.rgb = base_color.rgb;
//COLOR.rgb = fog_color * base_color.rgb;
//COLOR.rgb *= location_fade; //COLOR.rgb *= location_fade;
} }

View File

@ -9,6 +9,9 @@ enum VIBE {
@export var first_entered = true @export var first_entered = true
# func _ready():
# get_tree().node_added.connect("_on_node_added")
#### Ground and Loader #### #### 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) 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 #### #### Prop ####
@ -217,9 +227,3 @@ func show_bag():
func quit_game(): func quit_game():
ArchiveManager.save_all() ArchiveManager.save_all()
get_tree().quit() 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

View File

@ -6,17 +6,21 @@ class_name Ground2D extends Node2D
@export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9") @export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9")
var default_portal := "left" var default_portal := "left"
@export_group("Player", "player_") @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: @export var player_y := 70:
set(val): set(val):
player_y = val player_y = val
if is_node_ready(): if is_node_ready():
_reset_player_positon() _reset_player_y()
@export var reset_player_pos := false: @export var reset_player_y := false:
set(val): set(val):
reset_player_pos = false reset_player_y = false
if is_node_ready(): if is_node_ready():
_reset_player_positon() _reset_player_y()
@export_group("Sound") @export_group("Sound")
@export_enum("none", "ghost", "walking", "running", "crawling", "concrete") @export_enum("none", "ghost", "walking", "running", "crawling", "concrete")
var footstep_type: String = "concrete": var footstep_type: String = "concrete":
@ -86,10 +90,10 @@ func _enter_tree() -> void:
camera_focus_marker.enabled = true camera_focus_marker.enabled = true
func _reset_player_positon(): func _reset_player_y():
move_player_to_portal(default_portal)
# 从屏幕下边缘算起 # 从屏幕下边缘算起
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(): func _set_camera_and_player_boundary():

View File

@ -102,6 +102,7 @@ func _game_counting_down(_res = null):
get_tree().create_timer(2.5).timeout.connect(_kids_start_run) get_tree().create_timer(2.5).timeout.connect(_kids_start_run)
cat.visible = true cat.visible = true
cat.play("【墙上黑猫】跑步") cat.play("【墙上黑猫】跑步")
SceneManager.get_shading_layer().show_default_fog(2.0)
func _kids_start_run(): func _kids_start_run():
@ -111,6 +112,7 @@ func _kids_start_run():
standing_kid3.play("【站立小孩-3】走路") standing_kid3.play("【站立小孩-3】走路")
# 小胖等待 2s 后开始奔跑 # 小胖等待 2s 后开始奔跑
get_tree().create_timer(2).timeout.connect(game_kid.play.bind("【胖小孩背着残疾小孩】奔跑")) get_tree().create_timer(2).timeout.connect(game_kid.play.bind("【胖小孩背着残疾小孩】奔跑"))
# 猫鼠游戏开始,启用失败 ambush 检测
cat_rat_game_fail_ambush.enabled = true cat_rat_game_fail_ambush.enabled = true
# 提示玩家按 shift 键奔跑 # 提示玩家按 shift 键奔跑
SceneManager.pop_center_notification(tr("ui_press_shift")) SceneManager.pop_center_notification(tr("ui_press_shift"))
@ -118,7 +120,7 @@ func _kids_start_run():
ArchiveManager.archive.player_running_locked = false ArchiveManager.archive.player_running_locked = false
SceneManager.get_player().running_locked = false SceneManager.get_player().running_locked = false
# debug 提示 # 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.sprite_frames.set_animation_loop("【胖小孩背着残疾小孩】摔倒", false)
game_kid.animation_finished.connect(_on_kid_fall_finished, CONNECT_ONE_SHOT) game_kid.animation_finished.connect(_on_kid_fall_finished, CONNECT_ONE_SHOT)
_on_mid_ambush_success() _on_mid_ambush_success()
SceneManager.pop_debug_dialog_info("音效", "桌椅翻倒")
func _on_kid_fall_finished(): func _on_kid_fall_finished():
game_kid_limp.modulate.a = 1 game_kid_limp.modulate.a = 1
game_kid.play("【胖小孩背着残疾小孩】胖子独自呼吸")
game_kid_limp.play("【单残疾小孩】爬行") game_kid_limp.play("【单残疾小孩】爬行")
cat_shadow.play("【墙上小孩猫影子】变身") cat_shadow.play("【墙上小孩猫影子】变身")
@ -166,15 +170,78 @@ func game_succeed():
else: else:
game_kid_limp.pause() game_kid_limp.pause()
cat_shadow.pause() cat_shadow.pause()
print("game succeed")
SceneManager.pop_debug_dialog_info("美术", "猫鼠游戏成功")
SceneManager.freeze_player(0) SceneManager.freeze_player(0)
transport_player_to_next_scene(true)
# 失败 # 失败
func game_failed(): func game_failed():
SceneManager.freeze_player(0)
if not obstacles_success: if not obstacles_success:
game_kid.play_with_loop("【胖小孩背着残疾小孩】侧面呼吸") game_kid.play_with_loop("【胖小孩背着残疾小孩】侧面呼吸")
print("game failed") game_kid.play("【胖小孩背着残疾小孩】摔倒")
SceneManager.pop_debug_dialog_info("美术", "猫鼠游戏失败") game_kid.sprite_frames.set_animation_loop("【胖小孩背着残疾小孩】摔倒", false)
SceneManager.freeze_player(0) 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)

View File

@ -73,11 +73,11 @@ resource_local_to_scene = true
size = Vector2(30, 70) size = Vector2(30, 70)
[node name="S06" type="Node2D"] [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")] [node name="Ground" parent="." instance=ExtResource("1_bitx7")]
scene_name = "c01_s06" scene_name = "c01_s06"
player_y = 60 player_y = 67
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
libraries = { libraries = {
@ -87,8 +87,9 @@ script = ExtResource("2_fkfhi")
oneshot_animation = "" oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"] [node name="BGSprite2D" parent="Ground" index="2"]
position = Vector2(0, -3)
texture = ExtResource("2_ow3ya") texture = ExtResource("2_ow3ya")
offset = Vector2(0, -159) offset = Vector2(0, -155)
[node name="院长凳子" type="Sprite2D" parent="Ground/BGSprite2D" index="0"] [node name="院长凳子" type="Sprite2D" parent="Ground/BGSprite2D" index="0"]
position = Vector2(30, -6) position = Vector2(30, -6)
@ -220,7 +221,7 @@ collision_mask = 64
shape = SubResource("RectangleShape2D_ceat6") shape = SubResource("RectangleShape2D_ceat6")
[node name="【站立小孩-1】" parent="Ground/DeployLayer" index="12" instance=ExtResource("8_ouldg")] [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") sprite_frames = ExtResource("7_dsj2r")
animation = &"【站立小孩-1】侧面呼吸" animation = &"【站立小孩-1】侧面呼吸"
action_configs = Array[Dictionary]([{ action_configs = Array[Dictionary]([{
@ -237,7 +238,7 @@ move_configs = Array[Dictionary]([{
}]) }])
[node name="【站立小孩-3】" parent="Ground/DeployLayer" index="13" instance=ExtResource("8_ouldg")] [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") sprite_frames = ExtResource("7_dsj2r")
animation = &"【站立小孩-3】呼吸" animation = &"【站立小孩-3】呼吸"
action_configs = Array[Dictionary]([{ action_configs = Array[Dictionary]([{
@ -277,9 +278,10 @@ move_configs = Array[Dictionary]([{
position = Vector2(123, 43) position = Vector2(123, 43)
[node name="【墙上黑猫】" parent="Ground/DeployLayer" index="15" instance=ExtResource("8_ouldg")] [node name="【墙上黑猫】" parent="Ground/DeployLayer" index="15" instance=ExtResource("8_ouldg")]
position = Vector2(1394, -4) position = Vector2(1394, -1)
sprite_frames = ExtResource("7_dsj2r") sprite_frames = ExtResource("7_dsj2r")
animation = &"【墙上黑猫】跑步" animation = &"【墙上黑猫】跑步"
frame_progress = 0.142437
autostart = false autostart = false
move_configs = Array[Dictionary]([{ move_configs = Array[Dictionary]([{
"animation": &"【墙上黑猫】跑步", "animation": &"【墙上黑猫】跑步",
@ -287,14 +289,14 @@ move_configs = Array[Dictionary]([{
}]) }])
[node name="猫鼠游戏开始ambush" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_tudob")] [node name="猫鼠游戏开始ambush" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_tudob")]
position = Vector2(1804, 56) position = Vector2(1809, 56)
freeze_time = 1.0 freeze_time = 1.0
hook_dialogue_title = "c01_s06_谈论鬼差与猫鼠游戏" hook_dialogue_title = "c01_s06_谈论鬼差与猫鼠游戏"
hook_method = "game_intro" hook_method = "game_intro"
[node name="【胖小孩背着残疾小孩】" parent="Ground/DeployLayer" index="17" instance=ExtResource("8_ouldg")] [node name="【胖小孩背着残疾小孩】" parent="Ground/DeployLayer" index="17" instance=ExtResource("8_ouldg")]
z_index = 1 z_index = 1
position = Vector2(1731, 4) position = Vector2(1733, 5)
sprite_frames = ExtResource("7_dsj2r") sprite_frames = ExtResource("7_dsj2r")
animation = &"【胖小孩背着残疾小孩】呼吸" animation = &"【胖小孩背着残疾小孩】呼吸"
action_configs = Array[Dictionary]([{ action_configs = Array[Dictionary]([{
@ -318,11 +320,11 @@ move_configs = Array[Dictionary]([{
}]) }])
[node name="【单残疾小孩】" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】" instance=ExtResource("8_ouldg")] [node name="【单残疾小孩】" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】" instance=ExtResource("8_ouldg")]
z_index = 2 z_index = 6
z_as_relative = false z_as_relative = false
position = Vector2(-23, -1) position = Vector2(-23, 1)
sprite_frames = ExtResource("7_dsj2r") sprite_frames = ExtResource("7_dsj2r")
animation = &"【单残疾小孩】爬行" animation = &"【单残疾小孩】抓住"
autostart = false autostart = false
move_configs = Array[Dictionary]([{ move_configs = Array[Dictionary]([{
"animation": &"【单残疾小孩】爬行", "animation": &"【单残疾小孩】爬行",
@ -347,7 +349,7 @@ action_configs = Array[Dictionary]([{
light_energy = -0.7 light_energy = -0.7
[node name="中途Trigger" type="Area2D" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】"] [node name="中途Trigger" type="Area2D" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】"]
position = Vector2(30, 12) position = Vector2(29, 12)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
monitoring = false monitoring = false
@ -358,7 +360,7 @@ shape = SubResource("RectangleShape2D_1ojoa")
debug_color = Color(0.519778, 0.447036, 0.929413, 0.42) debug_color = Color(0.519778, 0.447036, 0.929413, 0.42)
[node name="猫鼠游戏失败ambush" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】" instance=ExtResource("11_tudob")] [node name="猫鼠游戏失败ambush" parent="Ground/DeployLayer/【胖小孩背着残疾小孩】/【单残疾小孩】" instance=ExtResource("11_tudob")]
position = Vector2(26, 45) position = Vector2(19, 49)
enabled = false enabled = false
hook_method = "game_failed" hook_method = "game_failed"
@ -380,7 +382,7 @@ texture = ExtResource("4_6ffae")
offset = Vector2(601.5, -0.5) offset = Vector2(601.5, -0.5)
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(144, 98) position = Vector2(1775, 91)
character = "小小蝶" character = "小小蝶"
[node name="柱子" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"] [node name="柱子" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]

View File

@ -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"]

View File

@ -1,104 +1,186 @@
@tool @tool
extends CanvasLayer class_name ShadingLayer extends CanvasLayer
@export_enum("vignette", "fog", "glitch", "palette", "chromatic_abberation") @export_enum("vignette", "fog", "glitch", "palette", "chromatic_abberation")
var mode: Array[String] = ["vignette"] as Array[String]: var mode: Array[String] = ["vignette"] as Array[String]:
set(new_val): set(new_val):
mode = new_val mode = new_val
if not is_node_ready():
return
_setup_visibility() _setup_visibility()
@export_group("Vignette", "vignette_") @export_group("Vignette", "vignette_")
@export var vignette_rgb := Color8(0x3f, 0x26, 0x31): @export var vignette_rgb := Color8(0x3f, 0x26, 0x31):
set(new_val): set(new_val):
vignette_rgb = new_val vignette_rgb = new_val
if not is_node_ready(): if is_node_ready():
return %Vignette.material.set("shader_parameter/vignette_rgb", new_val)
get_node("Vignette").material.set("shader_parameter/vignette_rgb", new_val)
@export_range(0, 5) var vignette_intensity := 0.3: @export_range(0, 5) var vignette_intensity := 0.3:
set(new_val): set(new_val):
vignette_intensity = new_val vignette_intensity = new_val
if not is_node_ready(): if is_node_ready():
return %Vignette.material.set("shader_parameter/vignette_intensity", new_val)
get_node("Vignette").material.set("shader_parameter/vignette_intensity", new_val)
@export_group("Fog", "fog_") @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): set(new_val):
fog_offset = new_val fog_offset = new_val
if not is_node_ready(): if is_node_ready():
return %Fog.offset = new_val
get_node("Fog").texture.noise.set("offset", new_val) @export var fog_frame := FOG_FRAME_DEFAULT:
@export var fog_base_color := Color8(0xff, 0xff, 0xff, 0x3d):
set(new_val): set(new_val):
fog_base_color = new_val fog_frame = new_val
if not is_node_ready(): if is_node_ready():
return %Fog.frame = new_val
get_node("Fog").material.set("shader_parameter/base_color", 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_group("Glitch", "glitch_")
@export var glitch_power := 0.001: @export var glitch_power := 0.001:
set(new_val): set(new_val):
glitch_power = new_val glitch_power = new_val
if not is_node_ready(): if is_node_ready():
return %GlitchEffect.material.set("shader_parameter/shake_power", new_val)
get_node("GlitchEffect").material.set("shader_parameter/shake_power", new_val)
# rate # rate
@export var glitch_rate := 0.2: @export var glitch_rate := 0.2:
set(new_val): set(new_val):
glitch_rate = new_val glitch_rate = new_val
if not is_node_ready(): if is_node_ready():
return %GlitchEffect.material.set("shader_parameter/shake_rate", new_val)
get_node("GlitchEffect").material.set("shader_parameter/shake_rate", new_val)
# speed # speed
@export var glitch_speed := 5.0: @export var glitch_speed := 5.0:
set(new_val): set(new_val):
glitch_speed = new_val glitch_speed = new_val
if not is_node_ready(): if is_node_ready():
return %GlitchEffect.material.set("shader_parameter/shake_speed", new_val)
get_node("GlitchEffect").material.set("shader_parameter/shake_speed", new_val)
# block_size # block_size
@export var glitch_block_size := 30.5: @export var glitch_block_size := 30.5:
set(new_val): set(new_val):
glitch_block_size = new_val glitch_block_size = new_val
if not is_node_ready(): if not is_node_ready():
return 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 # color rate
@export var glitch_color_rate := 0.01: @export var glitch_color_rate := 0.01:
set(new_val): set(new_val):
glitch_color_rate = new_val glitch_color_rate = new_val
if not is_node_ready(): if is_node_ready():
return %GlitchEffect.material.set("shader_parameter/shake_color_rate", new_val)
get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", new_val)
@export_group("Palette", "palette_") @export_group("Palette", "palette_")
@export var palette_texture := preload("res://asset/shader/palette/bloodmoon21-1x.png"): @export var palette_texture := preload("res://asset/shader/palette/bloodmoon21-1x.png"):
set(new_val): set(new_val):
palette_texture = new_val palette_texture = new_val
if not is_node_ready(): if is_node_ready():
return %Palette.material.set("shader_parameter/palette", new_val)
get_node("Palette").material.set("shader_parameter/palette", new_val)
func _ready() -> void: func _ready() -> void:
$Sprite2D.visible = false %Sprite2D.visible = false
layer = GlobalConfig.CANVAS_LAYER_SHADING layer = GlobalConfig.CANVAS_LAYER_SHADING
# set up other properties # set up other properties
get_node("Vignette").material.set("shader_parameter/vignette_rgb", vignette_rgb) %Vignette.material.set("shader_parameter/vignette_rgb", vignette_rgb)
get_node("Vignette").material.set("shader_parameter/vignette_intensity", vignette_intensity) %Vignette.material.set("shader_parameter/vignette_intensity", vignette_intensity)
get_node("Fog").texture.noise.set("offset", fog_offset) %Fog.frame = fog_frame
get_node("Fog").material.set("shader_parameter/base_color", fog_base_color) %Fog.offset = fog_offset
get_node("GlitchEffect").material.set("shader_parameter/shake_power", glitch_power) %Fog.self_modulate = fog_modulate
get_node("GlitchEffect").material.set("shader_parameter/shake_rate", glitch_rate) # %Fog.texture.noise.set("offset", fog_offset)
get_node("GlitchEffect").material.set("shader_parameter/shake_speed", glitch_speed) # %Fog.material.set("shader_parameter/base_color", fog_base_color)
get_node("GlitchEffect").material.set("shader_parameter/shake_block_size", glitch_block_size) %GlitchEffect.material.set("shader_parameter/shake_power", glitch_power)
get_node("GlitchEffect").material.set("shader_parameter/shake_color_rate", glitch_color_rate) %GlitchEffect.material.set("shader_parameter/shake_rate", glitch_rate)
get_node("Palette").material.set("shader_parameter/palette", palette_texture) %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 # set up visibility
_setup_visibility() _setup_visibility()
func _setup_visibility(): func _setup_visibility():
get_node("Vignette").visible = mode.has("vignette") if not is_node_ready():
get_node("Fog").visible = mode.has("fog") return
get_node("GlitchEffect").visible = mode.has("glitch") %Vignette.visible = mode.has("vignette")
get_node("Palette").visible = mode.has("palette") %Fog.visible = mode.has("fog")
get_node("ChromaticAbberation").visible = mode.has("chromatic_abberation") %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"))

View File

@ -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="Script" path="res://scene/shading/shading_layer.gd" id="1_6w7er"]
[ext_resource type="Shader" path="res://asset/shader/vignette.gdshader" id="1_akp6k"] [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/palette.gdshader" id="4_n5nu8"]
[ext_resource type="Shader" path="res://asset/shader/fog.gdshader" id="4_sglhm"] [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="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="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"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_y8ah7"]
shader = ExtResource("8_b0unx") shader = ExtResource("8_b0unx")
@ -26,18 +51,180 @@ shader_parameter/shake_speed = 5.0
shader_parameter/shake_block_size = 30.5 shader_parameter/shake_block_size = 30.5
shader_parameter/shake_color_rate = 0.01 shader_parameter/shake_color_rate = 0.01
[sub_resource type="ShaderMaterial" id="ShaderMaterial_pabt5"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_jw18h"]
shader = ExtResource("4_sglhm") noise_type = 2
shader_parameter/base_color = Color(0.187711, 0.154306, 0.137603, 0.65098) fractal_type = 2
[sub_resource type="FastNoiseLite" id="FastNoiseLite_els51"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_trttd"]
frequency = 0.015 width = 800
height = 800
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_oe2uy"]
width = 600
seamless = true seamless = true
normalize = false seamless_blend_skirt = 0.25
noise = SubResource("FastNoiseLite_els51") 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"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_radis"]
shader = ExtResource("1_akp6k") shader = ExtResource("1_akp6k")
@ -48,14 +235,15 @@ shader_parameter/vignette_rgb = Color(0.247059, 0.14902, 0.192157, 1)
layer = 10 layer = 10
script = ExtResource("1_6w7er") script = ExtResource("1_6w7er")
mode = Array[String]([]) mode = Array[String]([])
fog_base_color = Color(0.187711, 0.154306, 0.137603, 0.65098)
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
unique_name_in_owner = true
visible = false visible = false
position = Vector2(285, 142) position = Vector2(285, 142)
texture = ExtResource("2_r3a31") texture = ExtResource("2_r3a31")
[node name="ChromaticAbberation" type="ColorRect" parent="."] [node name="ChromaticAbberation" type="ColorRect" parent="."]
unique_name_in_owner = true
visible = false visible = false
material = SubResource("ShaderMaterial_y8ah7") material = SubResource("ShaderMaterial_y8ah7")
anchors_preset = 15 anchors_preset = 15
@ -69,6 +257,7 @@ mouse_filter = 1
copy_mode = 2 copy_mode = 2
[node name="Palette" type="Panel" parent="."] [node name="Palette" type="Panel" parent="."]
unique_name_in_owner = true
visible = false visible = false
material = SubResource("ShaderMaterial_iqikf") material = SubResource("ShaderMaterial_iqikf")
anchors_preset = 15 anchors_preset = 15
@ -82,6 +271,7 @@ mouse_filter = 1
copy_mode = 2 copy_mode = 2
[node name="GlitchEffect" type="ColorRect" parent="."] [node name="GlitchEffect" type="ColorRect" parent="."]
unique_name_in_owner = true
visible = false visible = false
material = SubResource("ShaderMaterial_fpg8r") material = SubResource("ShaderMaterial_fpg8r")
anchors_preset = 15 anchors_preset = 15
@ -94,27 +284,35 @@ mouse_filter = 1
[node name="BackBufferCopy" type="BackBufferCopy" parent="GlitchEffect"] [node name="BackBufferCopy" type="BackBufferCopy" parent="GlitchEffect"]
copy_mode = 2 copy_mode = 2
[node name="Fog" type="TextureRect" parent="."] [node name="Fog" type="AnimatedSprite2D" parent="."]
unique_name_in_owner = true
visible = false visible = false
material = SubResource("ShaderMaterial_pabt5") self_modulate = Color(0.8, 0.8, 0.8, 0.8)
anchors_preset = 8 material = SubResource("ShaderMaterial_fv2fx")
anchor_left = 0.5 position = Vector2(286, 161)
anchor_top = 0.5 sprite_frames = SubResource("SpriteFrames_xeqgs")
anchor_right = 0.5 animation = &"inverted_point_light_masks"
anchor_bottom = 0.5 frame = 15
offset_left = -300.0 offset = Vector2(0, 50)
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
[node name="BackBufferCopy" type="BackBufferCopy" parent="Fog"] [node name="BackBufferCopy" type="BackBufferCopy" parent="Fog"]
copy_mode = 2 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="."] [node name="Vignette" type="ColorRect" parent="."]
unique_name_in_owner = true
visible = false visible = false
material = SubResource("ShaderMaterial_radis") material = SubResource("ShaderMaterial_radis")
anchors_preset = 15 anchors_preset = 15