demo 0.1.2.5 优化

This commit is contained in:
cakipaul 2025-07-03 17:49:00 +08:00
parent af24c1f0d8
commit a7bb84bc89
119 changed files with 1707 additions and 1501 deletions

View File

@ -43,9 +43,8 @@ GroundLoader 加载/切换 Ground 时,分为上下两段转场:
- 下半段(新场景出现):先暂停,在完全出现后再运行
【特殊注意⚠️】
- AnimationPlayer 的 process_mode 并非 inderited而是 pausable。这意味着 AnimationPlayer 的 _on_ground_ready 在转场时仍旧可以直接运行。
- 同样独立设置的还有 Sfx/Sfx2D它们仍旧可以播放音频直到上半段转场结束
- CameraFocusMarker 也需要如此,以确保镜头快速拉到指定位置
- 盒子 canvas layer
- 盒子猫游戏中的 canvas layer
- 一些 npc、player 大运行脚本会被中断。如果想让它们仍旧运行,需设置为 pausable。
@ -148,14 +147,25 @@ current_scene 是通过 GroundLoader 加载的,在 ground loader 加载 ground
# 重大更新日志(功能)
- Sign 触发机制,图标位置管理
- GroundArchive场景内 namespace 隔离,内部需要保证节点名 unique
- Sign 触发机制
- 唯一触发器,关注各节点唯一占有 occupied 状态,与全局 hold/unhold (禁止操作)状态
- 管理图标贴图unrevealed / matched / ...)与位置
- GroundArchive场景内 namespace 隔离
- 内部需要保证节点名 unique
- 基础节点InspectableAmbushNoteInteractableCloseupNpc
- [#ban_skip] 与 IGNORE_INPUT : 前者 debug 可跳过,后者总不可跳过
- PropHud 切换与点击展示
- 左键点击展开 Hud
- 右键点击检阅道具
- SignSnapper 拉动机制
- 自动锁定玩家操作,调用 walk_to 指定位置
- 自动优化范围:忽略小范围移动以防抽动,最低活动距离
- ReenterLock 机制
- 可重入锁
- Editor 中运行可 Debug 输出调用位置(调用 lock 的代码文件&代码行)
- Vibe Sfx & Manager
- 转场 process 机制优化:暂停 & sfx 等保持运行
- 全局音效控制
- 影响 SignSnapper 的等待时长(如 Boss 战时加快节奏)
- 转场 process 机制优化:暂停 & AnimationPlayer 保持运行
- EventManager 控制事件,使用 Event2D 控制绑定关系
- Vibe Control 控制氛围情绪音乐

View File

@ -16,6 +16,14 @@ class_name ProAnimatedSprite2D extends AnimatedSprite2D
light_energy = val * modulate.a
@export var debug_mov_animation := ""
@export_tool_button("debug 刷新 mov 目标") var debug_mov_projection := _debug_mov_projection
@export var debug_playing := false:
set(val):
if debug_playing != val:
debug_playing = val
if not val:
position = debug_play_start_position
@export_tool_button("debug play") var debug_play := _debug_play
const ACTION_CONFIG = {
"animation_intro": "", "intro_loop": 1, "animation_wait_time": 0.0, "animation_next": ""
@ -58,13 +66,14 @@ func _ready() -> void:
frame_changed.connect(_on_frame_changed)
if Engine.is_editor_hint():
_debug_mov_projection()
return
else:
debug_mov_onion_sprite2d.queue_free()
_load_config()
debug_mov_onion_sprite2d.queue_free()
if autostart and animation:
# 制造一点错差
frame = randi() % sprite_frames.get_frame_count(animation)
play()
if not Engine.is_editor_hint() or debug_playing:
play()
animation_changed.connect(_on_animation_start)
animation_looped.connect(_on_animation_start)
animation_finished.connect(_on_animation_finished)
@ -76,7 +85,9 @@ func _debug_mov_projection():
if debug_mov_animation and animation_mov_dict.has(debug_mov_animation):
var mov_config = animation_mov_dict[debug_mov_animation]
# 展示 accumulated animation 的目标位置
debug_mov_onion_sprite2d.position.x = mov_config.movement_x * (-1 if flip_h else 1) / scale.x
debug_mov_onion_sprite2d.position.x = (
mov_config.movement_x * (-1 if flip_h else 1) / scale.x
)
debug_mov_onion_sprite2d.texture = sprite_frames.get_frame_texture(debug_mov_animation, 0)
debug_mov_onion_sprite2d.flip_h = flip_h
elif debug_mov_animation:
@ -128,7 +139,7 @@ func _on_animation_finished() -> void:
var next = auto_checkout_dict[intro].animation_next
if wait_time > 0:
pause()
Util.timer(wait_time, play.bind(next))
Util.timer(wait_time, play.bind(next))
else:
play(next)
@ -158,7 +169,7 @@ func _on_animation_start():
func _physics_process(delta: float) -> void:
if Engine.is_editor_hint() or not velocity or not is_playing():
if (not debug_playing and Engine.is_editor_hint()) or not velocity or not is_playing():
return
var diff_x = velocity.x * delta
if flip_h:
@ -212,3 +223,13 @@ func play_with_loop(anim: String, loop := -1, wait := 0.0, next := "") -> void:
}
# 设置完配置后播放
play(anim)
##### TOOL BUTTON
var debug_play_start_position: Vector2
func _debug_play():
debug_play_start_position = position
debug_playing = true
play()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

View File

@ -0,0 +1,59 @@
[gd_resource type="SpriteFrames" load_steps=12 format=3 uid="uid://cljrkkmy2pwdp"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/0.png" id="1_638l7"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/1.png" id="2_nl5dv"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/2.png" id="3_fneuh"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/3.png" id="4_fmw1k"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/4.png" id="5_2o31u"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/5.png" id="6_texvw"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/6.png" id="7_cr48g"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/7.png" id="8_v8byt"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/8.png" id="9_o63c7"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/9.png" id="10_jhtld"]
[ext_resource type="Texture2D" path="res://asset/art/gif/c03_三楼/三楼窗户动画/10.png" id="11_6lgaf"]
[resource]
animations = [{
"frames": [],
"loop": true,
"name": &"default",
"speed": 5.0
}, {
"frames": [{
"duration": 3.9,
"texture": ExtResource("1_638l7")
}, {
"duration": 15.9,
"texture": ExtResource("2_nl5dv")
}, {
"duration": 2.1,
"texture": ExtResource("3_fneuh")
}, {
"duration": 3.0,
"texture": ExtResource("4_fmw1k")
}, {
"duration": 17.1,
"texture": ExtResource("5_2o31u")
}, {
"duration": 3.0,
"texture": ExtResource("6_texvw")
}, {
"duration": 3.0,
"texture": ExtResource("7_cr48g")
}, {
"duration": 15.9,
"texture": ExtResource("8_v8byt")
}, {
"duration": 2.1,
"texture": ExtResource("9_o63c7")
}, {
"duration": 5.1,
"texture": ExtResource("10_jhtld")
}, {
"duration": 18.0,
"texture": ExtResource("11_6lgaf")
}],
"loop": true,
"name": &"三楼窗户动画",
"speed": 30.0
}]

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,14 @@
[remap]
importer="gif.animated.texture.plugin"
type="SpriteFrames"
uid="uid://cgdfidynpm3gp"
path="res://.godot/imported/三楼窗户动画.gif-4eb4230112d176a2b61268cba9a404ea.tres"
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画.gif"
dest_files=["res://.godot/imported/三楼窗户动画.gif-4eb4230112d176a2b61268cba9a404ea.tres"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dcnbfdgbsyeey"
path="res://.godot/imported/f_序章标题.png-a6d601409d9fd3b97cff6b0086d359be.ctex"
uid="uid://wmi5qfusoc6r"
path="res://.godot/imported/0.png-de2175bd6e3b9b6d3b0849e0425a8ab0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c01/s02_旧版序章/f_序章标题.png"
dest_files=["res://.godot/imported/f_序章标题.png-a6d601409d9fd3b97cff6b0086d359be.ctex"]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/0.png"
dest_files=["res://.godot/imported/0.png-de2175bd6e3b9b6d3b0849e0425a8ab0.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bj3mpwu8ocpma"
path="res://.godot/imported/1.png-ebea6dd14afaa8de40ca72684e50b62a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/1.png"
dest_files=["res://.godot/imported/1.png-ebea6dd14afaa8de40ca72684e50b62a.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkujjii8fgdl4"
path="res://.godot/imported/10.png-f57031390169fa8f66b8a841142bfa3f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/10.png"
dest_files=["res://.godot/imported/10.png-f57031390169fa8f66b8a841142bfa3f.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bf5ioldgjjl3o"
path="res://.godot/imported/2.png-a2ac750ddd1b069f276063e6cdf3d281.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/2.png"
dest_files=["res://.godot/imported/2.png-a2ac750ddd1b069f276063e6cdf3d281.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c38cl6nof6myf"
path="res://.godot/imported/3.png-946268593ce92b844452b4f03491cf4c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/3.png"
dest_files=["res://.godot/imported/3.png-946268593ce92b844452b4f03491cf4c.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://buevhcobtv5ya"
path="res://.godot/imported/4.png-e4263b6ad463d2418924c365ab8cb20e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/4.png"
dest_files=["res://.godot/imported/4.png-e4263b6ad463d2418924c365ab8cb20e.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkrbcsbnxdy2r"
path="res://.godot/imported/5.png-a7ea88d1220c1dc32f8891344a156f8f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/5.png"
dest_files=["res://.godot/imported/5.png-a7ea88d1220c1dc32f8891344a156f8f.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bdp7rd8sn23jh"
path="res://.godot/imported/6.png-88612ef73f91204c92988a291c49f1fe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/6.png"
dest_files=["res://.godot/imported/6.png-88612ef73f91204c92988a291c49f1fe.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dptgag6ns51lj"
path="res://.godot/imported/7.png-2cb7e36faac5a875904c5287a9e2d667.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/7.png"
dest_files=["res://.godot/imported/7.png-2cb7e36faac5a875904c5287a9e2d667.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnvk3wsupxluq"
path="res://.godot/imported/8.png-11a4e36f4ba4dcec9b95643c661c8d2d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/8.png"
dest_files=["res://.godot/imported/8.png-11a4e36f4ba4dcec9b95643c661c8d2d.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.9 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://6cur72juq0ag"
path="res://.godot/imported/9.png-403ed15f30c461f8ea915063667e622c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c03_三楼/三楼窗户动画/9.png"
dest_files=["res://.godot/imported/9.png-403ed15f30c461f8ea915063667e622c.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

@ -1,85 +0,0 @@
[gd_resource type="SpriteFrames" load_steps=16 format=3 uid="uid://by3207ou8ph7"]
[ext_resource type="Texture2D" uid="uid://ctk8sh3rhvmi5" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/0.png" id="1_ctqo0"]
[ext_resource type="Texture2D" uid="uid://bwykxtvdujimd" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/0.png" id="1_fcnvy"]
[ext_resource type="Texture2D" uid="uid://djwxl1tebi5x" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(往前走)/0.png" id="1_o1csg"]
[ext_resource type="Texture2D" uid="uid://1uk6oj7c1pc0" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(往前走)/1.png" id="2_brixb"]
[ext_resource type="Texture2D" uid="uid://ddf3kd4kukuga" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/1.png" id="2_ctqo0"]
[ext_resource type="Texture2D" uid="uid://c35poyn3mxvtt" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/1.png" id="2_w48pf"]
[ext_resource type="Texture2D" uid="uid://cahlj0u5mot6v" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/2.png" id="3_cfyr2"]
[ext_resource type="Texture2D" uid="uid://qn51u1b00n2v" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/2.png" id="3_w48pf"]
[ext_resource type="Texture2D" uid="uid://n30xu12f6pcw" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/3.png" id="4_cfyr2"]
[ext_resource type="Texture2D" uid="uid://d2ecwhkld8u2d" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/3.png" id="4_j51jw"]
[ext_resource type="Texture2D" uid="uid://bf6wfuhcejrv1" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/4.png" id="5_w7h7c"]
[ext_resource type="Texture2D" uid="uid://bsclq0o3gtr3i" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/0.png" id="10_l0u5u"]
[ext_resource type="Texture2D" uid="uid://c6rdik24wvgw5" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/1.png" id="11_dy5ih"]
[ext_resource type="Texture2D" uid="uid://c5a5lj527f0kp" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/2.png" id="12_33ryh"]
[ext_resource type="Texture2D" uid="uid://cwq8t3q80x0du" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/3.png" id="13_86osl"]
[resource]
animations = [{
"frames": [{
"duration": 6.0,
"texture": ExtResource("1_ctqo0")
}, {
"duration": 6.0,
"texture": ExtResource("2_w48pf")
}, {
"duration": 6.0,
"texture": ExtResource("3_cfyr2")
}, {
"duration": 6.0,
"texture": ExtResource("4_j51jw")
}, {
"duration": 6.0,
"texture": ExtResource("5_w7h7c")
}],
"loop": false,
"name": &"小小小蝶动画(上楼梯)",
"speed": 30.0
}, {
"frames": [{
"duration": 20.1,
"texture": ExtResource("1_fcnvy")
}, {
"duration": 20.1,
"texture": ExtResource("2_ctqo0")
}, {
"duration": 20.1,
"texture": ExtResource("3_w48pf")
}, {
"duration": 20.1,
"texture": ExtResource("4_cfyr2")
}],
"loop": true,
"name": &"小小小蝶动画(呼吸)",
"speed": 30.0
}, {
"frames": [{
"duration": 6.0,
"texture": ExtResource("1_o1csg")
}, {
"duration": 6.0,
"texture": ExtResource("2_brixb")
}],
"loop": true,
"name": &"小小小蝶动画(往前走)",
"speed": 30.0
}, {
"frames": [{
"duration": 9.9,
"texture": ExtResource("10_l0u5u")
}, {
"duration": 9.9,
"texture": ExtResource("11_dy5ih")
}, {
"duration": 9.9,
"texture": ExtResource("12_33ryh")
}, {
"duration": 9.9,
"texture": ExtResource("13_86osl")
}],
"loop": true,
"name": &"小小小蝶动画(跑)",
"speed": 30.0
}]

View File

@ -0,0 +1,85 @@
[gd_resource type="SpriteFrames" load_steps=16 format=3 uid="uid://c218xrr85jdc7"]
[ext_resource type="Texture2D" uid="uid://bjwb6rk72hmtu" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(往前走)/0.png" id="1_1yj0y"]
[ext_resource type="Texture2D" uid="uid://gaykdctnuduf" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/0.png" id="1_5cr6n"]
[ext_resource type="Texture2D" uid="uid://djr8lkcp2l4tu" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/0.png" id="1_s2oio"]
[ext_resource type="Texture2D" uid="uid://bdo4lmuvt54hg" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(往前走)/1.png" id="2_822rv"]
[ext_resource type="Texture2D" uid="uid://bhesoxpj573c4" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/1.png" id="2_ishlv"]
[ext_resource type="Texture2D" uid="uid://nj363mpsgxog" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/1.png" id="2_s2oio"]
[ext_resource type="Texture2D" uid="uid://dtabi2q5ditbc" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/2.png" id="3_8s01c"]
[ext_resource type="Texture2D" uid="uid://bop42kxymgyln" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/2.png" id="3_ishlv"]
[ext_resource type="Texture2D" uid="uid://cib8d20s4qufa" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(呼吸)/3.png" id="4_8s01c"]
[ext_resource type="Texture2D" uid="uid://b45bu6n0wd0ka" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/3.png" id="4_t57xm"]
[ext_resource type="Texture2D" uid="uid://bw4rstnjgk1iv" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(上楼梯)/4.png" id="5_jt3iw"]
[ext_resource type="Texture2D" uid="uid://caco171n5354h" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/0.png" id="12_id3wp"]
[ext_resource type="Texture2D" uid="uid://crdlq30w7mj63" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/1.png" id="13_hpyv1"]
[ext_resource type="Texture2D" uid="uid://dppqhi78a57es" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/2.png" id="14_re1a4"]
[ext_resource type="Texture2D" uid="uid://bu056wsa2jjv" path="res://asset/art/gif/c03_小小小蝶上楼道/小小小蝶动画(跑)/3.png" id="15_vpvlk"]
[resource]
animations = [{
"frames": [{
"duration": 6.0,
"texture": ExtResource("1_s2oio")
}, {
"duration": 6.0,
"texture": ExtResource("2_ishlv")
}, {
"duration": 6.0,
"texture": ExtResource("3_8s01c")
}, {
"duration": 6.0,
"texture": ExtResource("4_t57xm")
}, {
"duration": 6.0,
"texture": ExtResource("5_jt3iw")
}],
"loop": false,
"name": &"小小小蝶动画(上楼梯)",
"speed": 30.0
}, {
"frames": [{
"duration": 20.1,
"texture": ExtResource("1_5cr6n")
}, {
"duration": 20.1,
"texture": ExtResource("2_s2oio")
}, {
"duration": 20.1,
"texture": ExtResource("3_ishlv")
}, {
"duration": 20.1,
"texture": ExtResource("4_8s01c")
}],
"loop": true,
"name": &"小小小蝶动画(呼吸)",
"speed": 30.0
}, {
"frames": [{
"duration": 6.0,
"texture": ExtResource("1_1yj0y")
}, {
"duration": 6.0,
"texture": ExtResource("2_822rv")
}],
"loop": true,
"name": &"小小小蝶动画(往前走)",
"speed": 30.0
}, {
"frames": [{
"duration": 9.9,
"texture": ExtResource("12_id3wp")
}, {
"duration": 9.9,
"texture": ExtResource("13_hpyv1")
}, {
"duration": 9.9,
"texture": ExtResource("14_re1a4")
}, {
"duration": 9.9,
"texture": ExtResource("15_vpvlk")
}],
"loop": true,
"name": &"小小小蝶动画(跑)",
"speed": 30.0
}]

View File

@ -2,7 +2,7 @@
importer="gif.animated.texture.plugin"
type="SpriteFrames"
uid="uid://nqsdsjdsfdab"
uid="uid://5hep6a8gdkbo"
path="res://.godot/imported/小小小蝶动画(上楼梯).gif-7c54830d3c0e0c66b29238348f4df7a1.tres"
[deps]

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ctk8sh3rhvmi5"
uid="uid://djr8lkcp2l4tu"
path="res://.godot/imported/0.png-78a8d4d71fbf5571b704b881066a9461.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c35poyn3mxvtt"
uid="uid://bhesoxpj573c4"
path="res://.godot/imported/1.png-5dea8510fa6a5d57e027d80c256a265d.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cahlj0u5mot6v"
uid="uid://dtabi2q5ditbc"
path="res://.godot/imported/2.png-a6dbc1682dc09a621e7b6502e7ede6b7.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d2ecwhkld8u2d"
uid="uid://b45bu6n0wd0ka"
path="res://.godot/imported/3.png-ba593b00fc362c726db2074dc8480b8e.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bf6wfuhcejrv1"
uid="uid://bw4rstnjgk1iv"
path="res://.godot/imported/4.png-924871c7e42a548c3c255e57ec9793e3.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="gif.animated.texture.plugin"
type="SpriteFrames"
uid="uid://c8pjtla0qebwg"
uid="uid://d0qjnrslvybpx"
path="res://.godot/imported/小小小蝶动画(呼吸).gif-91af45452014e2c866580755b40c9d46.tres"
[deps]

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bwykxtvdujimd"
uid="uid://gaykdctnuduf"
path="res://.godot/imported/0.png-ce4f73e5fc3d7138c070a7fd3fdc58dd.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ddf3kd4kukuga"
uid="uid://nj363mpsgxog"
path="res://.godot/imported/1.png-922973505b3ee75b3c06a2737ab742b6.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://qn51u1b00n2v"
uid="uid://bop42kxymgyln"
path="res://.godot/imported/2.png-77da9ed3eee1ae3b92eafe91b404bdab.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://n30xu12f6pcw"
uid="uid://cib8d20s4qufa"
path="res://.godot/imported/3.png-78b50785190630462b5c83bcee1ebf43.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="gif.animated.texture.plugin"
type="SpriteFrames"
uid="uid://b3y8bhdt3flfb"
uid="uid://c67uyeedm4eie"
path="res://.godot/imported/小小小蝶动画(往前走).gif-52f373bd454008ca93aeabe897321504.tres"
[deps]

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://djwxl1tebi5x"
uid="uid://bjwb6rk72hmtu"
path="res://.godot/imported/0.png-724d8608d9000f7b9f0048d54eab217a.ctex"
metadata={
"vram_texture": false

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://1uk6oj7c1pc0"
uid="uid://bdo4lmuvt54hg"
path="res://.godot/imported/1.png-dfbf3a73dd48e58138834c0bd419a378.ctex"
metadata={
"vram_texture": false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -2,7 +2,7 @@
importer="gif.animated.texture.plugin"
type="SpriteFrames"
uid="uid://kqlt5uewnedw"
uid="uid://ba730fsv024su"
path="res://.godot/imported/小小小蝶动画(跑).gif-1dd387a332e9d39dc933f234758b5e53.tres"
[deps]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bsclq0o3gtr3i"
uid="uid://caco171n5354h"
path="res://.godot/imported/0.png-60280c8fd45952e7df9b96e291860ffe.ctex"
metadata={
"vram_texture": false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c6rdik24wvgw5"
uid="uid://crdlq30w7mj63"
path="res://.godot/imported/1.png-d01feb083416d9768ff23ec7d63ba562.ctex"
metadata={
"vram_texture": false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c5a5lj527f0kp"
uid="uid://dppqhi78a57es"
path="res://.godot/imported/2.png-b6372c9fb49112edff670bf4484c2373.ctex"
metadata={
"vram_texture": false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cwq8t3q80x0du"
uid="uid://bu056wsa2jjv"
path="res://.godot/imported/3.png-8ffb7363131c44fd5f1a8e2d740ec584.ctex"
metadata={
"vram_texture": false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

View File

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 665 B

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://o5uouajglukh"
path="res://.godot/imported/e_小蝉头套.png-501b12996fd43e963ac65bc84fe4c4e2.ctex"
path="res://.godot/imported/e_小蝉头套.png-ea99dce944a5765b69439bed52c2f9f4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c02_空房间/e_小蝉头套.png"
dest_files=["res://.godot/imported/e_小蝉头套.png-501b12996fd43e963ac65bc84fe4c4e2.ctex"]
source_file="res://asset/art/scene/c02/s10_空房间/e_小蝉头套.png"
dest_files=["res://.godot/imported/e_小蝉头套.png-ea99dce944a5765b69439bed52c2f9f4.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b0arnhnvdn0ew"
path="res://.godot/imported/ux_小蝉头套特写.png-0f19dde023c331772c53a4c886853ec4.ctex"
path="res://.godot/imported/ux_小蝉头套特写.png-8b449bdb257ff56259e1eb4834ace6bc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c02_空房间/ux_小蝉头套特写.png"
dest_files=["res://.godot/imported/ux_小蝉头套特写.png-0f19dde023c331772c53a4c886853ec4.ctex"]
source_file="res://asset/art/scene/c02/s10_空房间/ux_小蝉头套特写.png"
dest_files=["res://.godot/imported/ux_小蝉头套特写.png-8b449bdb257ff56259e1eb4834ace6bc.ctex"]
[params]

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://88l4i6ywvjqm"
path="res://.godot/imported/人偶.png-f4dfc90993e694feddc1ec221f95be0b.ctex"
path="res://.godot/imported/人偶.png-ff3d7fb8dc118510c3cbbe0b241eb5a4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c02_空房间/人偶.png"
dest_files=["res://.godot/imported/人偶.png-f4dfc90993e694feddc1ec221f95be0b.ctex"]
source_file="res://asset/art/scene/c02/s10_空房间/人偶.png"
dest_files=["res://.godot/imported/人偶.png-ff3d7fb8dc118510c3cbbe0b241eb5a4.ctex"]
[params]

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cpj7goyf6nqiw"
path="res://.godot/imported/全身.png-9be7e1586ed418f01e5c654d32e9d920.ctex"
path="res://.godot/imported/全身.png-da5955e334b019a4ae1e3b5978db6946.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/gif/c02_空房间/全身.png"
dest_files=["res://.godot/imported/全身.png-9be7e1586ed418f01e5c654d32e9d920.ctex"]
source_file="res://asset/art/scene/c02/s10_空房间/全身.png"
dest_files=["res://.godot/imported/全身.png-da5955e334b019a4ae1e3b5978db6946.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpjd3dqri51fq"
path="res://.godot/imported/bg_三楼走廊.png-d91aa66d3616ed8ddffcfd778f57922d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s01_三楼/bg_三楼走廊.png"
dest_files=["res://.godot/imported/bg_三楼走廊.png-d91aa66d3616ed8ddffcfd778f57922d.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: 673 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dagy852q0fduh"
path="res://.godot/imported/e_治病木牌.png-18fb72ff92acf1bc109e9293ec34e1f5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s01_三楼/e_治病木牌.png"
dest_files=["res://.godot/imported/e_治病木牌.png-18fb72ff92acf1bc109e9293ec34e1f5.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: 18 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://djoft6600kly6"
path="res://.godot/imported/fg_前景.png-b011f420a650cfc1843989c608d5b33c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s01_三楼/fg_前景.png"
dest_files=["res://.godot/imported/fg_前景.png-b011f420a650cfc1843989c608d5b33c.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: 18 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b45bpylquulrt"
path="res://.godot/imported/理发店前景.png-77d90d6f4031d5275b798cf1684586d8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/理发店前景.png"
dest_files=["res://.godot/imported/理发店前景.png-77d90d6f4031d5275b798cf1684586d8.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.7 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0p78wjtm30rm"
path="res://.godot/imported/理发店剪贴画报.png-f1c9f5ebcf15538ef9c9a5303e912cad.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/理发店剪贴画报.png"
dest_files=["res://.godot/imported/理发店剪贴画报.png-f1c9f5ebcf15538ef9c9a5303e912cad.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: 861 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv5vcrdqwtlm3"
path="res://.godot/imported/癞子纸人.png-17dc3e4adfce7f29a4ef01e3b4300862.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/癞子纸人.png"
dest_files=["res://.godot/imported/癞子纸人.png-17dc3e4adfce7f29a4ef01e3b4300862.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.3 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ckboywu6sjcpc"
path="res://.godot/imported/癞子纸人头套.png-c1bab6941acc0a7d734481c5540b5fdd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/癞子纸人头套.png"
dest_files=["res://.godot/imported/癞子纸人头套.png-c1bab6941acc0a7d734481c5540b5fdd.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: 168 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c5qlahkemlsnt"
path="res://.godot/imported/癞子纸人纸钱.png-9110c19d0795253447aa88cf755f1174.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/癞子纸人纸钱.png"
dest_files=["res://.godot/imported/癞子纸人纸钱.png-9110c19d0795253447aa88cf755f1174.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: 88 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cjgkit00lt3tr"
path="res://.godot/imported/瞎子理发店.png-dc9ffb92eb739d530a86cc41684351e3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/瞎子理发店.png"
dest_files=["res://.godot/imported/瞎子理发店.png-dc9ffb92eb739d530a86cc41684351e3.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: 2.2 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bwe6onvjp8lmo"
path="res://.godot/imported/纸人-蓝.png-ce43c595f35b7c5b00e2a5d326dec5a1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s03_瞎子理发店/纸人-蓝.png"
dest_files=["res://.godot/imported/纸人-蓝.png-ce43c595f35b7c5b00e2a5d326dec5a1.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: 188 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://0quk16rj31cm"
path="res://.godot/imported/demo感谢告示.png-06729018a222a69c8997cb68bd5e8173.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/demo额外/demo感谢告示.png"
dest_files=["res://.godot/imported/demo感谢告示.png-06729018a222a69c8997cb68bd5e8173.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: 513 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://brsrkwf0k0bpn"
path="res://.godot/imported/demo感谢告示场景.png-705d27d1d23e9d8a8240a47d66131987.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/demo额外/demo感谢告示场景.png"
dest_files=["res://.godot/imported/demo感谢告示场景.png-705d27d1d23e9d8a8240a47d66131987.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.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -193,3 +193,5 @@ c02_小蝉恨他们,我恨他们!,,,,,
c02_火灾等待准备,还没准备好点火呢,,,,,
c02_霸凌救小蝉开始,啊!我得想办法帮帮她...,,,,,
c02_点火前阻止右移,没时间浪费了!想想办法救出小蝉...,,,,,
c02_看到小蝉上楼,,,,,,
c02_看到杂物堆消失,楼梯口的杂物消失了...,,,,,

1 keys zh_CN _character _notes _tags zh_SH en
193 c02_火灾等待准备 还没准备好点火呢
194 c02_霸凌救小蝉开始 啊!我得想办法帮帮她...
195 c02_点火前阻止右移 没时间浪费了!想想办法救出小蝉...
196 c02_看到小蝉上楼 ?!
197 c02_看到杂物堆消失 楼梯口的杂物消失了...

View File

@ -257,6 +257,9 @@
还没准备好点火呢 [ID:c02_火灾等待准备]
啊!我得想办法帮帮她... [ID:c02_霸凌救小蝉开始]
没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移]
# 结尾
[ID:c02_看到小蝉上楼]
楼梯口的杂物消失了... [ID:c02_看到杂物堆消失]
=> END
~ Notes_c03

View File

@ -1,7 +1,7 @@
extends Control
@export var path = "res://asset/art/scene/"
@export var static_frames = preload("res://config/art/static_sprite_frames.tres")
@export var static_frames = preload("uid://ccrfw5wsbxvq4")
@onready var load_btn = %LoadButton as Button

File diff suppressed because it is too large Load Diff

View File

@ -91,7 +91,7 @@ func _find_group_by_name(group_name: StringName) -> VibeGroup:
## 核心方法:播放一个指定的 VibeGroup
func play_group(group_name: StringName):
func play_group(group_name: StringName, ease_in := 1.0):
var group = _find_group_by_name(group_name)
if not is_instance_valid(group):
printerr("VibeManager: VibeGroup is not valid. group_name:", group_name)
@ -101,17 +101,23 @@ func play_group(group_name: StringName):
return
var vibe_player = VibeGroupPlayer.new(group)
vibe_player.name = group_name
add_child(vibe_player)
vibe_player_dict[group_name] = vibe_player
var tween = create_tween()
vibe_player._base_db = -100
add_child(vibe_player)
tween.tween_method(vibe_player.set_volume_linear, 0.0, 1.0, ease_in)
vibe_player.play()
func stop_group(group_name: StringName):
if is_queued_for_deletion():
return
func stop_group(group_name: StringName, ease_out := 1.0):
if not vibe_player_dict.has(group_name):
return
var vibe_player = vibe_player_dict[group_name]
vibe_player_dict.erase(group_name)
remove_child(vibe_player)
vibe_player.stop_and_free()
var tween = create_tween()
tween.tween_method(vibe_player.set_volume_linear, 1.0, 0.0, ease_out)
tween.tween_callback(vibe_player.stop_and_free)

View File

@ -7,6 +7,10 @@ var vibe_group: VibeGroup
var _base_player: AudioStreamPlayer
var _embellishment_players = [] as Array[AudioStreamPlayer]
var _embellishment_timers = [] as Array[Timer]
var _base_db := 0.0:
set(val):
_base_db = val
_base_player.volume_db = val
func _init(group: VibeGroup):
@ -16,7 +20,7 @@ func _init(group: VibeGroup):
_base_player.name = "BasePlayer"
_base_player.bus = "game_sfx"
_base_player.stream = group.base_sound
_base_player.volume_db = group.group_db + group.base_sound_db
_refresh_base_player_db()
# 循环播放
if vibe_group.base_sound.get_length() > 0:
_base_player.finished.connect(_base_player.play)
@ -51,14 +55,28 @@ func _on_embellishment_timer_timeout(id: int):
# 增加随机性
timer.wait_time = randf_range(embellishment.min_interval, embellishment.max_interval)
timer.start()
player.volume_db = (vibe_group.group_db + embellishment.db) * randf_range(0.8, 1.2)
player.volume_db = _base_db + (vibe_group.group_db + embellishment.db) * randf_range(0.8, 1.2)
player.pitch_scale = randf_range(0.8, 1.2)
player.play()
func _ready():
if Engine.is_editor_hint():
func _refresh_base_player_db() -> void:
_base_player.volume_db = _base_db + vibe_group.group_db + vibe_group.base_sound_db
func _refresh_embellishment_player_db(id: int) -> void:
if _embellishment_players[id] == null:
return
_embellishment_players[id].volume_db = (
_base_db + vibe_group.group_db + vibe_group.embellishments[id].db
)
func set_volume_linear(volume: float):
_base_db = linear_to_db(volume)
for i in range(vibe_group.embellishments.size()):
_refresh_embellishment_player_db(i)
_refresh_base_player_db()
func play():
@ -72,7 +90,7 @@ func play():
# 如果 loop则 min_interval 与 max_interval 无效
if embellishment.loop:
var player = _embellishment_players[i]
player.volume_db = vibe_group.group_db + embellishment.db
_refresh_embellishment_player_db(i)
if player.stream:
player.play()
player.finished.connect(player.play)

View File

@ -19,6 +19,14 @@ func _ready():
return
if autoplay_group:
switch_to(autoplay_group)
# ground 退出时process mode 切换为 alwaysease out
SceneManager.ground_transition_pre_paused.connect(_on_ground_transition_pre_paused)
func _on_ground_transition_pre_paused():
if current_group:
print("[GroundTransition] VibeSfx %s ease killing group %s" % [name, current_group])
AudioManager.stop_group(current_group)
# var debug_audio_manager: AudioManager

View File

@ -21,17 +21,19 @@ func set_stage(event_name: StringName, stage := 1) -> void:
print("[EventManager] Stage updated: %s, stage: %s" % [event_name, stage])
stage_updated.emit(event_name, stage)
# 如果是 handnote_ 事件,玩家进行记笔记动作
if (
event_name.begins_with("handnote_")
and SceneManager.get_player().character.begins_with("吕萍")
):
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
if stage == 1:
SceneManager.lock_player(3.0, 16, true)
SceneManager.pop_notification("ui_notify_note_update")
# 第一次记笔记,提示查看笔记
if event_name == &"handnote_c02_road_address":
SceneManager.pop_center_notification("ui_check_note")
if SceneManager.get_player().character.begins_with("吕萍"):
if event_name == &"handnote_chapter_stage":
# 章节更新
pass
elif event_name.begins_with("handnote_"):
# 笔记条目更新
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
if stage == 1:
SceneManager.lock_player(3.0, 16, true)
SceneManager.pop_notification("ui_notify_note_update")
# 第一次记笔记,提示查看笔记
if event_name == &"handnote_c02_road_address":
SceneManager.pop_center_notification("ui_check_note")
# 仅在设置的 stage > 当前 stage 时更新,相等或小于时不更新

View File

@ -10,6 +10,7 @@ enum VIBE {
# 从 ground loader 控制该信号
signal ground_ready(ground: Ground2D)
signal ground_start
signal ground_transition_pre_paused
func _ready() -> void:
@ -236,6 +237,13 @@ func pop_os_with_str(translation_key: String) -> void:
printerr("Player node not found")
func get_inspector() -> PropInspector:
return get_node_or_null("/root/Main/PropInspector") as PropInspector
### Notification
func pop_notification(translation_key: String, number := 1) -> void:
var notification_node = get_node_or_null("/root/Main/UILayer/Notification")
if notification_node:
@ -260,30 +268,32 @@ func pop_center_texture(texture: Texture2D, duration := 3.5) -> void:
printerr("pop_center_texture: Notification node not found")
func pop_dialog(
character: String,
content: String,
character_color := "orange",
content_color := "white",
duration := 2.5
) -> void:
var dialog_node = get_node_or_null("/root/Main/UILayer/Dialog")
if dialog_node:
dialog_node.append_dialog(character, content, character_color, content_color, duration)
else:
printerr("Dialog node not found")
var chapter_sfx = preload("uid://qku3yk82g364")
func pop_chapter_notification(id: int) -> void:
AudioManager.play_sfx(chapter_sfx)
var texture
match id:
1:
texture = preload("uid://dq1tfv3vkghpa")
2:
texture = preload("uid://bvjt8iyliunfs")
3:
texture = preload("uid://b0koe7cw0ow5h")
4:
texture = preload("uid://c42jwf1xl5rf4")
5:
texture = preload("uid://two1l5i22l4i")
6:
texture = preload("uid://d084tnd1gp4en")
_:
printerr("Invalid chapter ID: " + str(id))
return
SceneManager.pop_center_texture(texture, 5.0)
await Util.wait(5.0)
# func pop_note(note: String, note_color := "white", duration := 2.5) -> void:
# var dialog_node = get_node_or_null("/root/Main/UILayer/Dialog")
# if dialog_node:
# dialog_node.append_note(note, note_color, duration)
# else:
# printerr("Dialog node not found")
func get_inspector() -> PropInspector:
return get_node_or_null("/root/Main/PropInspector") as PropInspector
### 切换场景
func checkout_index_page(transition := true) -> void:

View File

@ -24,6 +24,15 @@ func _ready() -> void:
if Engine.is_editor_hint():
return
finished.connect(_on_finished)
# ground 退出时process mode 切换为 alwaysease out
SceneManager.ground_transition_pre_paused.connect(_on_ground_transition_pre_paused)
func _on_ground_transition_pre_paused():
if not playing:
return
print("[GroundTransition] Sfx %s ease killing..." % name)
easing_kill(1.0)
func _on_finished() -> void:
@ -45,6 +54,7 @@ func global_play() -> void:
func easing_kill(duration: float = 2.0) -> Tween:
# stop with easing
var tween = create_tween()
tween.bind_node(self)
if playing:
tween.tween_property(self, "volume_linear", 0.0, duration)
tween.tween_callback(stop)

View File

@ -22,13 +22,25 @@ var timer: Timer
func _ready() -> void:
bus = &"game_sfx"
process_mode = Node.PROCESS_MODE_PAUSABLE
finished.connect(_on_finished)
if Engine.is_editor_hint():
return
timer = Timer.new()
timer.autostart = autoplay and loop and loop_round_time > 0.0 and not Engine.is_editor_hint()
timer.one_shot = false
timer.wait_time = max(0.1, loop_round_time)
timer.timeout.connect(_on_timer_timeout)
add_child(timer)
finished.connect(_on_finished)
# ground 退出时process mode 切换为 alwaysease out
SceneManager.ground_transition_pre_paused.connect(_on_ground_transition_pre_paused)
func _on_ground_transition_pre_paused():
if not playing:
return
print("[GroundTransition] Sfx2D %s ease killing..." % name)
easing_kill(1.0)
func _on_timer_timeout() -> void:
@ -60,5 +72,6 @@ func easing_kill(duration: float = 2.0) -> void:
# stop with easing
if playing:
var tween = create_tween()
tween.bind_node(self)
tween.tween_property(self, "volume_linear", 0.0, duration)
tween.tween_callback(stop)

View File

@ -47,7 +47,9 @@ static var GROUND_SCENE_PATH_DICT = {
"c02_s16": "uid://22hc3oe8t0id",
"c02_s17": "uid://cbr6gbgrl2wb1",
"c02_s18": "uid://d27gv3pbkn4b8",
"c03_s01": "uid://dlrbhfvnd3cs0", # 瞎子理发店
"c03_s01": "uid://dlrbhfvnd3cs0", # 三楼
"c03_s02": "uid://rkro7u5wd3t1", # 三楼内侧
"c03_s03": "uid://bsqt2c061fmin", # 瞎子理发店
}
@ -117,6 +119,8 @@ func _load_save():
func transition_to_scene(scene_name: String, portal: String, wait_time := 1.4) -> void:
if ground:
print("GroundLoader transition_to_scene: pause prev ground.")
# 先发送,再暂停,允许 sfx 等节点执行 ease out
SceneManager.ground_transition_pre_paused.emit()
ground.process_mode = Node.PROCESS_MODE_DISABLED
if GlobalConfig.DEBUG:
# print reenter lock status

Some files were not shown because too many files have changed in this diff Show More