diff --git a/addons/dialogue_manager/test_scene.gd b/addons/dialogue_manager/test_scene.gd index e6216672..0ac05953 100644 --- a/addons/dialogue_manager/test_scene.gd +++ b/addons/dialogue_manager/test_scene.gd @@ -18,20 +18,9 @@ func _ready(): # Normally you can just call DialogueManager directly but doing so before the plugin has been # enabled in settings will throw a compiler error here so I'm using `get_singleton` instead. - var dialogue_manager = Engine.get_singleton("DialogueManager") - dialogue_manager.dialogue_ended.connect(_on_dialogue_ended) - dialogue_manager.show_dialogue_balloon(resource, title if not title.is_empty() else resource.first_title) + DialogueManager.show_dialogue_balloon(resource, title if not title.is_empty() else resource.first_title) func _enter_tree() -> void: DialogueSettings.set_user_value("is_running_test_scene", false) - -#region Signals - - -func _on_dialogue_ended(_resource: DialogueResource): - get_tree().quit() - - -#endregion diff --git a/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd b/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd index cd633332..b7f5299e 100644 --- a/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd +++ b/addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd @@ -48,7 +48,7 @@ static func new_action_config() -> Dictionary: return ACTION_CONFIG.duplicate() -@onready var debug_mov_onion_sprite2d = $DebugMovOnionSkinSprite2D as Sprite2D +var debug_mov_onion_sprite2d: Sprite2D # 从 intro 到 next 的配置信息 var auto_checkout_dict = { @@ -75,12 +75,16 @@ func _ready() -> void: animation_finished.connect(_on_animation_finished) animation_looped.connect(_on_animation_finished) # 处理 debug_mov_onion_sprite2d + debug_mov_onion_sprite2d = get_node_or_null("DebugMovOnionSkinSprite2D") if Engine.is_editor_hint(): - # stop() - # frame = 0 + if not debug_mov_onion_sprite2d: + debug_mov_onion_sprite2d = Sprite2D.new() + add_child(debug_mov_onion_sprite2d) + debug_mov_onion_sprite2d.name = "DebugMovOnionSkinSprite2D" + debug_mov_onion_sprite2d.modulate.a = 0.5 debug_playing = false _debug_mov_projection() - else: + elif debug_mov_onion_sprite2d: debug_mov_onion_sprite2d.queue_free() # autoplay 会自己 play, 只有自定义的 autostart 手动调用 play if not Engine.is_editor_hint() and autostart: @@ -93,8 +97,8 @@ func _debug_mov_projection(): 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 - ) * sign(mov_config.velocity.x) + (mov_config.movement_x * (-1 if flip_h else 1) / scale.x) * sign(mov_config.velocity.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: diff --git a/asset/art/gif/c03_特写与游戏动画/c03_特写与游戏动画_frames.tres b/asset/art/gif/c03_特写与游戏动画/c03_特写与游戏动画_frames.tres index 1c290dfc..0f6317fc 100644 --- a/asset/art/gif/c03_特写与游戏动画/c03_特写与游戏动画_frames.tres +++ b/asset/art/gif/c03_特写与游戏动画/c03_特写与游戏动画_frames.tres @@ -1,17 +1,80 @@ -[gd_resource type="SpriteFrames" load_steps=9 format=3 uid="uid://cmvr3lbwe3h7p"] +[gd_resource type="SpriteFrames" load_steps=21 format=3 uid="uid://cmvr3lbwe3h7p"] +[ext_resource type="Texture2D" uid="uid://dcwbe6hb3gdcp" path="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png" id="1_fctjd"] [ext_resource type="Texture2D" uid="uid://cdyq7y562gsxp" path="res://asset/art/gif/c03_特写与游戏动画/绞肉机特写动画/0.png" id="1_uknvx"] +[ext_resource type="Texture2D" uid="uid://bhrahd7u0yoba" path="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png" id="2_g03au"] [ext_resource type="Texture2D" uid="uid://botg6n14al2eu" path="res://asset/art/gif/c03_特写与游戏动画/绞肉机特写动画/1.png" id="2_up5wq"] +[ext_resource type="Texture2D" uid="uid://dweny6ivmkanl" path="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png" id="3_5wyv8"] [ext_resource type="Texture2D" uid="uid://cvhquuvipetio" path="res://asset/art/gif/c03_特写与游戏动画/绞肉机特写动画/2.png" id="3_oilu3"] +[ext_resource type="Texture2D" uid="uid://nvddvjnphsqx" path="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png" id="4_ag85t"] [ext_resource type="Texture2D" uid="uid://bn3x37ya65ixm" path="res://asset/art/gif/c03_特写与游戏动画/绞肉机特写动画/3.png" id="4_uidoe"] +[ext_resource type="Texture2D" uid="uid://bhhjsj1dqep40" path="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png" id="5_5m4aa"] [ext_resource type="Texture2D" uid="uid://c5sc5ctss08qc" path="res://asset/art/gif/c03_特写与游戏动画/鬼母子神/0.png" id="5_uidoe"] +[ext_resource type="Texture2D" uid="uid://lop0mxjb5y71" path="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png" id="6_0df74"] [ext_resource type="Texture2D" uid="uid://dx2v7bicpg7b4" path="res://asset/art/gif/c03_特写与游戏动画/鬼母子神/1.png" id="6_yp83y"] [ext_resource type="Texture2D" uid="uid://bkh3cc2fg486c" path="res://asset/art/gif/c03_特写与游戏动画/鬼母子神/2.png" id="7_axfhb"] +[ext_resource type="Texture2D" uid="uid://c08v3b4prnqyt" path="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png" id="7_xhhcn"] +[ext_resource type="Texture2D" uid="uid://4m0ix5nhdmdf" path="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png" id="8_dspyd"] [ext_resource type="Texture2D" uid="uid://d0ad1s3sfsejp" path="res://asset/art/gif/c03_特写与游戏动画/鬼母子神/3.png" id="8_yp83y"] +[ext_resource type="Texture2D" uid="uid://c6gpicmu30026" path="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png" id="9_naxgo"] +[ext_resource type="Texture2D" uid="uid://b7ufyuiusqmh7" path="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png" id="10_qcrrr"] +[ext_resource type="Texture2D" uid="uid://c21g54sgebjti" path="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png" id="11_buon4"] +[ext_resource type="Texture2D" uid="uid://c7vjtmjhv7v7f" path="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png" id="12_cx8xa"] [resource] animations = [{ "frames": [{ +"duration": 20.0, +"texture": ExtResource("1_fctjd") +}, { +"duration": 8.0, +"texture": ExtResource("2_g03au") +}, { +"duration": 30.0, +"texture": ExtResource("3_5wyv8") +}, { +"duration": 15.0, +"texture": ExtResource("4_ag85t") +}], +"loop": true, +"name": &"父亲抱小孩", +"speed": 30.0 +}, { +"frames": [{ +"duration": 20.0, +"texture": ExtResource("5_5m4aa") +}, { +"duration": 20.0, +"texture": ExtResource("6_0df74") +}, { +"duration": 20.0, +"texture": ExtResource("7_xhhcn") +}, { +"duration": 20.0, +"texture": ExtResource("8_dspyd") +}], +"loop": true, +"name": &"癞子背坐呼吸", +"speed": 30.0 +}, { +"frames": [{ +"duration": 20.0, +"texture": ExtResource("9_naxgo") +}, { +"duration": 20.0, +"texture": ExtResource("10_qcrrr") +}, { +"duration": 20.0, +"texture": ExtResource("11_buon4") +}, { +"duration": 20.0, +"texture": ExtResource("12_cx8xa") +}], +"loop": true, +"name": &"癞子背对侧头呼吸", +"speed": 30.0 +}, { +"frames": [{ "duration": 6.0, "texture": ExtResource("1_uknvx") }, { diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png new file mode 100644 index 00000000..214fbc54 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png.import b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png.import new file mode 100644 index 00000000..8bd6ba20 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dcwbe6hb3gdcp" +path="res://.godot/imported/0.png-a3269686a9806970c0dfd8799afcb5ce.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/0.png" +dest_files=["res://.godot/imported/0.png-a3269686a9806970c0dfd8799afcb5ce.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png new file mode 100644 index 00000000..82af7ace Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png.import b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png.import new file mode 100644 index 00000000..97013e9a --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhrahd7u0yoba" +path="res://.godot/imported/1.png-2461ac2fae16cf03e4832dc2fe3f2555.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/1.png" +dest_files=["res://.godot/imported/1.png-2461ac2fae16cf03e4832dc2fe3f2555.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png new file mode 100644 index 00000000..0556f748 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png.import b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png.import new file mode 100644 index 00000000..b8c77ca3 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dweny6ivmkanl" +path="res://.godot/imported/2.png-afafb5161ae4bca2cba94e19f92d32ed.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/2.png" +dest_files=["res://.godot/imported/2.png-afafb5161ae4bca2cba94e19f92d32ed.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png new file mode 100644 index 00000000..82af7ace Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png.import b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png.import new file mode 100644 index 00000000..0bf8195f --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nvddvjnphsqx" +path="res://.godot/imported/3.png-f1b878a4ae5a1352052eb9c3414b1c64.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/父亲抱小孩/3.png" +dest_files=["res://.godot/imported/3.png-f1b878a4ae5a1352052eb9c3414b1c64.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png new file mode 100644 index 00000000..3c2dd40a Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png.import new file mode 100644 index 00000000..d47ee7fb --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhhjsj1dqep40" +path="res://.godot/imported/0.png-29a92c9e2d863c26da560ecf9d7f55e9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/0.png" +dest_files=["res://.godot/imported/0.png-29a92c9e2d863c26da560ecf9d7f55e9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png new file mode 100644 index 00000000..ca8fdf93 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png.import new file mode 100644 index 00000000..5382030f --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lop0mxjb5y71" +path="res://.godot/imported/1.png-9504242d789560b7aa7bd583e9c9ee9b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/1.png" +dest_files=["res://.godot/imported/1.png-9504242d789560b7aa7bd583e9c9ee9b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png new file mode 100644 index 00000000..17b0a5f2 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png.import new file mode 100644 index 00000000..02139756 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c08v3b4prnqyt" +path="res://.godot/imported/2.png-771674e6060afe77d45d1ae84d22c7c2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/2.png" +dest_files=["res://.godot/imported/2.png-771674e6060afe77d45d1ae84d22c7c2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png new file mode 100644 index 00000000..a9982fdc Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png.import new file mode 100644 index 00000000..8fb96ce7 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4m0ix5nhdmdf" +path="res://.godot/imported/3.png-4b276625cb8a4697e2e33c8df223b9b9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背坐呼吸/3.png" +dest_files=["res://.godot/imported/3.png-4b276625cb8a4697e2e33c8df223b9b9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png new file mode 100644 index 00000000..a25ba7d5 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png.import new file mode 100644 index 00000000..eab6a08e --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6gpicmu30026" +path="res://.godot/imported/0.png-218e6fe7dc6cd000a213f3a006d18933.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/0.png" +dest_files=["res://.godot/imported/0.png-218e6fe7dc6cd000a213f3a006d18933.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png new file mode 100644 index 00000000..5297f5e2 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png.import new file mode 100644 index 00000000..5f0f3f0b --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7ufyuiusqmh7" +path="res://.godot/imported/1.png-d46a9f066213228516ec78730973b1b1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/1.png" +dest_files=["res://.godot/imported/1.png-d46a9f066213228516ec78730973b1b1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png new file mode 100644 index 00000000..27746639 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png.import new file mode 100644 index 00000000..bfb04d12 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c21g54sgebjti" +path="res://.godot/imported/2.png-65316c99b267f6b126a0514cf04f68d3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/2.png" +dest_files=["res://.godot/imported/2.png-65316c99b267f6b126a0514cf04f68d3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png new file mode 100644 index 00000000..5297f5e2 Binary files /dev/null and b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png differ diff --git a/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png.import b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png.import new file mode 100644 index 00000000..2877bee8 --- /dev/null +++ b/asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7vjtmjhv7v7f" +path="res://.godot/imported/3.png-77114853f7248e4f7711c27bfb05bb12.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/gif/c03_特写与游戏动画/癞子背对侧头呼吸/3.png" +dest_files=["res://.godot/imported/3.png-77114853f7248e4f7711c27bfb05bb12.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口.png b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口.png index 2804b9f2..817f9ba8 100644 Binary files a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口.png and b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口.png differ diff --git a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png new file mode 100644 index 00000000..29900663 Binary files /dev/null and b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png differ diff --git a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png.import b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png.import new file mode 100644 index 00000000..3d47e495 --- /dev/null +++ b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dr51e8ell86" +path="res://.godot/imported/伤口血迹.png-09a80deddc6822152bc5759dfa5b43c4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png" +dest_files=["res://.godot/imported/伤口血迹.png-09a80deddc6822152bc5759dfa5b43c4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png new file mode 100644 index 00000000..fa6ced5b Binary files /dev/null and b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png differ diff --git a/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png.import b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png.import new file mode 100644 index 00000000..b6ecab42 --- /dev/null +++ b/asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://k4eplss3bx5g" +path="res://.godot/imported/刀劈特效.png-303e36c2e802d04a4dbed5e046db47cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png" +dest_files=["res://.godot/imported/刀劈特效.png-303e36c2e802d04a4dbed5e046db47cf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/audio/audio_test.gd b/asset/audio/audio_test.gd index 7cdc709f..b1be93c0 100644 --- a/asset/audio/audio_test.gd +++ b/asset/audio/audio_test.gd @@ -4,7 +4,7 @@ extends CanvasLayer var root_dir = "res://config/audio/" -func _ready(): +func _ready() -> void: var dir_access = DirAccess.open(root_dir) as DirAccess for dir in dir_access.get_directories(): container.add_child(HSeparator.new()) diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg b/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg new file mode 100644 index 00000000..e8341dc2 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg.import b/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg.import new file mode 100644 index 00000000..6f259d75 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://ba2wk1ox76efe" +path="res://.godot/imported/c03_理发店_小小蝶_5.ogg-66a9a4612eefec52289193483440da3f.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_小小蝶_5.ogg" +dest_files=["res://.godot/imported/c03_理发店_小小蝶_5.ogg-66a9a4612eefec52289193483440da3f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg b/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg new file mode 100644 index 00000000..59ee3f64 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg.import b/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg.import new file mode 100644 index 00000000..d28cb9a3 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cun811u2e7345" +path="res://.godot/imported/c03_理发店_小小蝶_6.ogg-38c66f064187bd8dba9d0e151e32d032.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_小小蝶_6.ogg" +dest_files=["res://.godot/imported/c03_理发店_小小蝶_6.ogg-38c66f064187bd8dba9d0e151e32d032.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg b/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg new file mode 100644 index 00000000..80d996e5 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg.import b/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg.import new file mode 100644 index 00000000..c0a13412 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://b0jpnl74h0r5j" +path="res://.godot/imported/c03_理发店_小小蝶_7.ogg-7278d678564f0d8cfb1baab6ce4a8912.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_小小蝶_7.ogg" +dest_files=["res://.godot/imported/c03_理发店_小小蝶_7.ogg-7278d678564f0d8cfb1baab6ce4a8912.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg new file mode 100644 index 00000000..ead1cac2 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg.import new file mode 100644 index 00000000..dc1ae184 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dpmc3ku12hvgg" +path="res://.godot/imported/c03_理发店_癞子_10.ogg-8654894b5ed36318642f4dd8c25d8a89.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_10.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_10.ogg-8654894b5ed36318642f4dd8c25d8a89.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg new file mode 100644 index 00000000..44b4834b Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg.import new file mode 100644 index 00000000..0cdeae8a --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://duj1rj5pqaypw" +path="res://.godot/imported/c03_理发店_癞子_11.ogg-3cb72d9b6ab549acd5cc78b162889624.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_11.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_11.ogg-3cb72d9b6ab549acd5cc78b162889624.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg new file mode 100644 index 00000000..cd7b5911 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg.import new file mode 100644 index 00000000..d2008e43 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://b0sauuigs8y0p" +path="res://.godot/imported/c03_理发店_癞子_12.ogg-c35d34415f87cc409e4eba30b914bb4a.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_12.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_12.ogg-c35d34415f87cc409e4eba30b914bb4a.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg new file mode 100644 index 00000000..aba054da Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg.import new file mode 100644 index 00000000..889a252c --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://8wtlftvqn5gp" +path="res://.godot/imported/c03_理发店_癞子_13.ogg-ad4f488cd4278b06727a566379a9cca8.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_13.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_13.ogg-ad4f488cd4278b06727a566379a9cca8.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg new file mode 100644 index 00000000..78a42b02 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg.import new file mode 100644 index 00000000..d869accd --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bplaj6uidsias" +path="res://.godot/imported/c03_理发店_癞子_14.ogg-0ae7c592462185954fbc2fc44ff8161b.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_14.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_14.ogg-0ae7c592462185954fbc2fc44ff8161b.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg new file mode 100644 index 00000000..354abcb6 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg.import new file mode 100644 index 00000000..7f08d68c --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dqyythgj4b2a7" +path="res://.godot/imported/c03_理发店_癞子_15.ogg-13ac10d8375509b479ea2e94d96f3cfa.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_15.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_15.ogg-13ac10d8375509b479ea2e94d96f3cfa.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg new file mode 100644 index 00000000..f5fe6780 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg.import new file mode 100644 index 00000000..78b4c215 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bylaoxlh2bii" +path="res://.godot/imported/c03_理发店_癞子_8.ogg-5cd1c86dea61b02ba8a86260dc6c73d9.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_8.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_8.ogg-5cd1c86dea61b02ba8a86260dc6c73d9.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg b/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg new file mode 100644 index 00000000..89eb231a Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg.import b/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg.import new file mode 100644 index 00000000..ebb7d809 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://d4mihdw45ed6x" +path="res://.godot/imported/c03_理发店_癞子_9.ogg-502658df3b170c4f123c76ea08ed87ec.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_癞子_9.ogg" +dest_files=["res://.godot/imported/c03_理发店_癞子_9.ogg-502658df3b170c4f123c76ea08ed87ec.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg new file mode 100644 index 00000000..c5b55bd6 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg.import new file mode 100644 index 00000000..d5f787a2 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://tmsyvdoklrid" +path="res://.godot/imported/c03_理发店_瞎子_15.ogg-993c9e658b98f80d58aa324105579201.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_15.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_15.ogg-993c9e658b98f80d58aa324105579201.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg new file mode 100644 index 00000000..0fecd16c Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg.import new file mode 100644 index 00000000..56b3ce14 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cyfi6r567yo1u" +path="res://.godot/imported/c03_理发店_瞎子_16.ogg-cf3255fb045aae07a6e320b54f000c3f.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_16.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_16.ogg-cf3255fb045aae07a6e320b54f000c3f.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg new file mode 100644 index 00000000..1157d9b2 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg.import new file mode 100644 index 00000000..217718fb --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://d0tfvpokjdcp1" +path="res://.godot/imported/c03_理发店_瞎子_17.ogg-77d1e04338e47990fbcecedf8301c49d.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_17.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_17.ogg-77d1e04338e47990fbcecedf8301c49d.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg new file mode 100644 index 00000000..f73329fc Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg.import new file mode 100644 index 00000000..5f6ff4f7 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dtbb5vi4ry85b" +path="res://.godot/imported/c03_理发店_瞎子_18.ogg-4e672df3b198ee52c88f0ce7cfef4c3a.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_18.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_18.ogg-4e672df3b198ee52c88f0ce7cfef4c3a.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg new file mode 100644 index 00000000..0e927990 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg.import new file mode 100644 index 00000000..15a4d309 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://ckl6eyb6fn6ui" +path="res://.godot/imported/c03_理发店_瞎子_19.ogg-f6fd7591a238ead0b34e2d58608527ea.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_19.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_19.ogg-f6fd7591a238ead0b34e2d58608527ea.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg new file mode 100644 index 00000000..c80545c0 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg.import new file mode 100644 index 00000000..56d0e37d --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bvrkiuimnlh5w" +path="res://.godot/imported/c03_理发店_瞎子_20.ogg-02426bd5c2b1e5597e2b937a0c0940eb.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_20.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_20.ogg-02426bd5c2b1e5597e2b937a0c0940eb.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg new file mode 100644 index 00000000..9cdb36fc Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg.import new file mode 100644 index 00000000..a03600e9 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dnctmpsv0xrad" +path="res://.godot/imported/c03_理发店_瞎子_21.ogg-620878f56dfc42101cca76bc6de2b9ec.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_21.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_21.ogg-620878f56dfc42101cca76bc6de2b9ec.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg new file mode 100644 index 00000000..a9808f2f Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg.import new file mode 100644 index 00000000..13ed7854 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://uf14ji1pkqaf" +path="res://.godot/imported/c03_理发店_瞎子_22.ogg-50207038a1cfd50caa472f5ab22a8778.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_22.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_22.ogg-50207038a1cfd50caa472f5ab22a8778.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg b/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg new file mode 100644 index 00000000..7f2d8e65 Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg.import b/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg.import new file mode 100644 index 00000000..2fcc8d52 --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dsymgeq6i02mj" +path="res://.godot/imported/c03_理发店_瞎子_23.ogg-9721e730eb715d8a9090aee47d6b7171.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_瞎子_23.ogg" +dest_files=["res://.godot/imported/c03_理发店_瞎子_23.ogg-9721e730eb715d8a9090aee47d6b7171.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg b/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg new file mode 100644 index 00000000..52b3a23d Binary files /dev/null and b/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg differ diff --git a/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg.import b/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg.import new file mode 100644 index 00000000..65e4bc3f --- /dev/null +++ b/asset/audio/peiyin/c03/c03_理发店_陆仁.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bqhqxmf5hsed0" +path="res://.godot/imported/c03_理发店_陆仁.ogg-5b28d2fa4f1ffe8f2ecd2c7ee6f218e2.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/peiyin/c03/c03_理发店_陆仁.ogg" +dest_files=["res://.godot/imported/c03_理发店_陆仁.ogg-5b28d2fa4f1ffe8f2ecd2c7ee6f218e2.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/dialogue/c03.csv b/asset/dialogue/c03.csv index d85c17f3..35fca80f 100644 --- a/asset/dialogue/c03.csv +++ b/asset/dialogue/c03.csv @@ -8,3 +8,84 @@ Second one,Second one,(response),, Start again,Start again,(response),, End the conversation,End the conversation,(response),, For more information see the online documentation.,For more information see the online documentation.,Nathan,, +(看病费用涨价,为了攒钱让小蝶上学,),(看病费用涨价,为了攒钱让小蝶上学,),陆仁,, +(小蝶想请小蝉来家里吃饭,写了请柬),(小蝶想请小蝉来家里吃饭,写了请柬),小蝶,, +(父母让小蝶去送请柬,顺便带肉回家做饭),(父母让小蝶去送请柬,顺便带肉回家做饭),陆仁,, +那个...方叔叔,小蝉在吗? [ID:],那个...方叔叔,小蝉在吗? [ID:],小小蝶,, +咳咳,她,咳咳,不在。 [ID:],咳咳,她,咳咳,不在。 [ID:],瞎子,, +她是生病了吗,好几天没见她了。 [ID:],她是生病了吗,好几天没见她了。 [ID:],小小蝶,, +她... [ID:],她... [ID:],瞎子,, +我挨家挨户地问啊,都说没看见她。 [ID:],我挨家挨户地问啊,都说没看见她。 [ID:],瞎子,, +一个活生生的小孩子,就这么找不见了... [ID:],一个活生生的小孩子,就这么找不见了... [ID:],瞎子,, +c03_理发店_癞子_8,我家那个昨天想拿推子给我剃头,差点给我开了瓢!,癞子,, +c03_理发店_癞子_9,你瞅瞅,这么长一道血印子!唉呀...,癞子,, +c03_理发店_瞎子_15,可不能这么说。,瞎子,, +c03_理发店_瞎子_16,弟妹这一手,没准是变相消了你的血光灾呢。,瞎子,, +c03_理发店_瞎子_17,逢凶化吉,灾消晦退,好日子还在后头。,瞎子,, +c03_理发店_癞子_10,哼,听你这么一说,好像确实有那么几分道理。,癞子,, +c03_理发店_癞子_11,不过这辫子留了这么多年,乍一找人剪了,心里还有点怪不是滋味儿。,癞子,, +c03_理发店_瞎子_18,怎么舍得剪了?,瞎子,, +c03_理发店_癞子_12,妇人家家的,不知道从哪打听到用男人的辫子入药能治病,一直念叨个不停。,癞子,, +c03_理发店_癞子_13,...你听过这说法没有?,癞子,, +c03_理发店_瞎子_19,我不懂医,不好乱说。,瞎子,, +c03_理发店_癞子_14,最近街上也是彻底乱了套,那些人看见你留了“阴阳头”,就跟那闻着味儿的狗一样凑过来...,癞子,, +c03_理发店_癞子_15,哦,瞧我这记性,忘了你眼神不好,不爱出门。,癞子,, +c03_理发店_小小蝶_5,方叔叔,我来找小蝉玩儿,她在屋里吗?,小小蝶,, +c03_理发店_瞎子_20,她摔了一跤,还睡着呢,我喊她起来?,瞎子,, +c03_理发店_小小蝶_6,不用不用,我在这等一会儿就行。,小小蝶,, +c03_理发店_陆仁,方老弟,你正好给我家这小皮猴儿修修毛,成天跟个假小子似的,没个小姑娘样子。,陆仁,, +c03_理发店_瞎子_21,小孩子嘛,高高兴兴就好。,瞎子,, +c03_理发店_瞎子_22,你们也别在这干等,我去给你们拿些“洋点心”。,瞎子,, +c03_理发店_瞎子_23,说是什么舶来品,高级货,你们拿出尝尝,甜个嘴。,瞎子,, +c03_理发店_小小蝶_7,谢谢方叔叔。,小小蝶,, +记得当年这箱麻将还是我弟弟背回来的。,记得当年这箱麻将还是我弟弟背回来的。,李氏,, +那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡...,那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡...,李氏,, +(轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。,(轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。,癞子,, +(苦笑)他呀,就是个死心眼,犟种!,(苦笑)他呀,就是个死心眼,犟种!,李氏,, +得了病就一直忍着,等到实在瞒不住了才告诉咱们!,得了病就一直忍着,等到实在瞒不住了才告诉咱们!,李氏,, +他认了命等死,咱们不能认,只要今晚赢了钱...,他认了命等死,咱们不能认,只要今晚赢了钱...,癞子,, +哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场!,哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场!,胖子,, +我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才...,我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才...,瞎子,, +(哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近...,(哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近...,胖子,, +最近怎么了?,最近怎么了?,李氏,, +碰。,碰。,瞎子,, +自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了?,自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了?,胖子,, +还真不好说。运气这玩意玄乎得很。,还真不好说。运气这玩意玄乎得很。,癞子,, +我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。,我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。,癞子,, +说是能“借”人家的命来延长自己的寿命...,说是能“借”人家的命来延长自己的寿命...,癞子,, +听着怪瘆人的。,听着怪瘆人的。,胖子,, +人外有人,天外有天。,人外有人,天外有天。,瞎子,, +天外还有什么...咱们这些闲杂人等也说了不算。,天外还有什么...咱们这些闲杂人等也说了不算。,瞎子,, +六万。,六万。,李氏,, +话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。,话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。,李氏,, +那叫香槟,洋人就喜欢整那些面子货,不适口。,那叫香槟,洋人就喜欢整那些面子货,不适口。,癞子,, +(啧)见多识广还得看王兄啊。,(啧)见多识广还得看王兄啊。,胖子,, +瞧这架势,以前没准多风光...,瞧这架势,以前没准多风光...,胖子,, +英雄不问出处。,英雄不问出处。,瞎子,, +都过去了,都过去了。,都过去了,都过去了。,癞子,, +为了跑出来,我们还睡过桥洞呢!,为了跑出来,我们还睡过桥洞呢!,李氏,, +(此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的...,(此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的...,李氏,, +你说的是外摆渡桥?,你说的是外摆渡桥?,胖子,, +应该是吧,我们再没回去过,也不知道后来成了什么样...,应该是吧,我们再没回去过,也不知道后来成了什么样...,癞子,, +(脏话)怎么一张牌都不来!,(脏话)怎么一张牌都不来!,胖子,, +八条,八条,瞎子,, +对了,小蝉那孩子有消息了吗?,对了,小蝉那孩子有消息了吗?,癞子,, +要是有消息,我也不会跟你们在这打牌,虚度光阴。,要是有消息,我也不会跟你们在这打牌,虚度光阴。,瞎子,, +方大哥,你这话说得不妥。,方大哥,你这话说得不妥。,李氏,, +咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。,咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。,李氏,, +找点乐子,何必想那么多。,找点乐子,何必想那么多。,胖子,, +我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。,我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。,李氏,, +要我说,还是得从身边的人下手。,要我说,还是得从身边的人下手。,李氏,, +指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。,指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。,癞子,, +...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。,...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。,胖子,, +他们一家人最近都不怎么出门,我看就是心里有鬼。,他们一家人最近都不怎么出门,我看就是心里有鬼。,胖子,, +把小孩骗走了换钱换药,搞邪术,什么都干得出来。,把小孩骗走了换钱换药,搞邪术,什么都干得出来。,胖子,, +这么一说,好像确实有点道理。,这么一说,好像确实有点道理。,癞子,, +我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。,我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。,李氏,, +我活了这么大岁数,也是第一次见。,我活了这么大岁数,也是第一次见。,李氏,, +道听途说而已。,道听途说而已。,瞎子,, +自摸!(笑),自摸!(笑),癞子,, +(脏话)不玩了不玩了,今天一把都没胡过!,(脏话)不玩了不玩了,今天一把都没胡过!,胖子,, +我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。,我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。,瞎子,, +天黑了,你们回去都小心着点。,天黑了,你们回去都小心着点。,李氏,, +嘶...,嘶...,癞子,, diff --git a/asset/dialogue/c03.dialogue b/asset/dialogue/c03.dialogue index 9bccd973..aaa73cbf 100644 --- a/asset/dialogue/c03.dialogue +++ b/asset/dialogue/c03.dialogue @@ -5,17 +5,46 @@ => END ~ c03_s02_邀请小蝉与瞎子对话1 -小小蝶: 那个...方叔叔,小蝉在吗? -瞎子: 咳咳,她,咳咳,不在。 -小小蝶: 她是生病了吗,好几天没见她了。 +小小蝶: 那个...方叔叔,小蝉在吗? [ID:] +瞎子: 咳咳,她,咳咳,不在。 [ID:] +小小蝶: 她是生病了吗,好几天没见她了。 [ID:] => END ~ c03_s02_邀请小蝉与瞎子对话2 -瞎子: 她... -瞎子: 我挨家挨户地问啊,都说没看见她。 -瞎子: 一个活生生的小孩子,就这么找不见了... +瞎子: 她... [ID:] +瞎子: 我挨家挨户地问啊,都说没看见她。 [ID:] +瞎子: 一个活生生的小孩子,就这么找不见了... [ID:] => END +~ c03_s03_理发店演出1 +癞子: 我家那个昨天想拿推子给我剃头,差点给我开了瓢! [ID:c03_理发店_癞子_8] +癞子: 你瞅瞅,这么长一道血印子!唉呀... [ID:c03_理发店_癞子_9] +瞎子: 可不能这么说。 [ID:c03_理发店_瞎子_15] +瞎子: 弟妹这一手,没准是变相消了你的血光灾呢。 [ID:c03_理发店_瞎子_16] +瞎子: 逢凶化吉,灾消晦退,好日子还在后头。 [ID:c03_理发店_瞎子_17] +癞子: 哼,听你这么一说,好像确实有那么几分道理。 [ID:c03_理发店_癞子_10] +癞子: 不过这辫子留了这么多年,乍一找人剪了,心里还有点怪不是滋味儿。 [ID:c03_理发店_癞子_11] +瞎子: 怎么舍得剪了? [ID:c03_理发店_瞎子_18] +癞子: 妇人家家的,不知道从哪打听到用男人的辫子入药能治病,一直念叨个不停。 [ID:c03_理发店_癞子_12] +癞子: ...你听过这说法没有? [ID:c03_理发店_癞子_13] +瞎子: 我不懂医,不好乱说。 [ID:c03_理发店_瞎子_19] +癞子: 最近街上也是彻底乱了套,那些人看见你留了“阴阳头”,就跟那闻着味儿的狗一样凑过来... [ID:c03_理发店_癞子_14] +癞子: 哦,瞧我这记性,忘了你眼神不好,不爱出门。 [#wait=1.5] [ID:c03_理发店_癞子_15] +小小蝶: 方叔叔,我来找小蝉玩儿,她在屋里吗? [ID:c03_理发店_小小蝶_5] +=> END + +~ c03_s03_理发店演出2 +瞎子: 她摔了一跤,还睡着呢,我喊她起来? [ID:c03_理发店_瞎子_20] +小小蝶: 不用不用,我在这等一会儿就行。 [ID:c03_理发店_小小蝶_6] +陆仁: 方老弟,你正好给我家这小皮猴儿修修毛,成天跟个假小子似的,没个小姑娘样子。 [ID:c03_理发店_陆仁] +瞎子: 小孩子嘛,高高兴兴就好。 [ID:c03_理发店_瞎子_21] +瞎子: 你们也别在这干等,我去给你们拿些“洋点心”。 [ID:c03_理发店_瞎子_22] +=> END + +~ c03_s03_理发店演出3 +瞎子: 说是什么舶来品,高级货,你们拿出尝尝,甜个嘴。 [ID:c03_理发店_瞎子_23] +小小蝶: 谢谢方叔叔。 [ID:c03_理发店_小小蝶_7] +=> END ~ c03_s04_整理麻将游戏0 # 打牌准备,整理麻将盒游戏成功(演出至麻将搬到桌上): diff --git a/asset/dialogue/event_stage.csv b/asset/dialogue/event_stage.csv index 5d336ce3..7b129b70 100644 --- a/asset/dialogue/event_stage.csv +++ b/asset/dialogue/event_stage.csv @@ -1,15 +1 @@ keys,zh_CN,_character,_notes,_tags -c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 ~ c03_f2_madman_runaway=2,c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 ~ c03_f2_madman_runaway=2,,, -c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 -> c03_f2_madman_runaway=2,c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 -> c03_f2_madman_runaway=2,,, -0:demo 1:release,0:demo 1:release,release_stage,, -1:序章 2:第一章 3:第二章 4:第三章 5:第四章 6:尾声,1:序章 2:第一章 3:第二章 4:第三章 5:第四章 6:尾声,current_chapter_stage,, -0:初始化_关闭 1:打开 2:放入小蝉人偶 3:全部放置正确_可摇手柄 4:已播放完成,0:初始化_关闭 1:打开 2:放入小蝉人偶 3:全部放置正确_可摇手柄 4:已播放完成,c02_musicbox_stage,, -0:初始化 1:已交互疯子 2:小鞋已掉落,0:初始化 1:已交互疯子 2:小鞋已掉落,c02_madman_interacted_stage,, -0:初始化 1:寻找弹珠_老虎钳可以换弹珠 2:给出弹珠 3:游戏结束_小猫纸片 4:游戏结束_小猫离开,0:初始化 1:寻找弹珠_老虎钳可以换弹珠 2:给出弹珠 3:游戏结束_小猫纸片 4:游戏结束_小猫离开,c02_ball_game_stage,, -0:初始化 1:已放肉,0:初始化 1:已放肉,c03_s01_meat_put,, -0:初始化 1:已偷听_需邀请 2:完成邀请,0:初始化 1:已偷听_需邀请 2:完成邀请,c03_invite_xchan_supper,, -0:初始化 1:已使用剪刀 2:已剪下,0:初始化 1:已使用剪刀 2:已剪下,c03_s03_laizi_braid,, -0:初始化 1:跑开_纸人挡路 2:消除纸人,0:初始化 1:跑开_纸人挡路 2:消除纸人,c03_f2_madman_runaway,, -c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 & c03_mahjong_game=1 -> c03_f2_madman_runaway=2,c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 & c03_mahjong_game=1 -> c03_f2_madman_runaway=2,,, -0:初始化 1:粘舌头和刀把 2:给药 4:准备好进入游戏,0:初始化 1:粘舌头和刀把 2:给药 4:准备好进入游戏,c03_before_mahjong_game,, -0:麻将理牌 1:麻将出千 2:麻将结束 3:演出结束,0:麻将理牌 1:麻将出千 2:麻将结束 3:演出结束,c03_mahjong_game,, diff --git a/asset/dialogue/event_stage.dialogue b/asset/dialogue/event_stage.dialogue index fde83c65..74114a86 100644 --- a/asset/dialogue/event_stage.dialogue +++ b/asset/dialogue/event_stage.dialogue @@ -12,7 +12,7 @@ c02_ball_game_stage: 0:初始化 1:寻找弹珠_老虎钳可以换弹珠 2:给 ~ EventStage_c03 c03_s01_meat_put: 0:初始化 1:已放肉 c03_invite_xchan_supper: 0:初始化 1:已偷听_需邀请 2:完成邀请 -c03_s03_laizi_braid: 0:初始化 1:已用剪刀_准备剪辫 2:已剪下辫子 +c03_s03_laizi_braid: 0:初始化 1:已剪下辫子 2:演出结束 c03_f2_madman_runaway: 0:初始化 1:跑开_纸人挡路 2:消除纸人 c03_invite_xchan_supper=2 & c03_s03_laizi_braid=2 -> c03_f2_madman_runaway=2 c03_before_mahjong_game: 0:初始化 1:粘舌头和刀把 2:给药 4:准备好进入游戏 diff --git a/config/animation/animation_loader.gd b/config/animation/animation_loader.gd index 433242d8..1ba737cc 100644 --- a/config/animation/animation_loader.gd +++ b/config/animation/animation_loader.gd @@ -54,7 +54,7 @@ func _ready() -> void: next_btn.pressed.connect(_on_next_btn_pressed) -func _validate_json(): +func _validate_json() -> void: # first_frame_mapping if !original_config.data.has("first_frame_mapping"): original_config.data["first_frame_mapping"] = {} @@ -69,7 +69,7 @@ func _validate_json(): original_config.data["frames_per_second"] = {} -func _scan(): +func _scan() -> void: var dir = DirAccess.open(scan_path) if !dir: printerr("Failed to open directory:", scan_path) @@ -109,7 +109,7 @@ func _scan_subdir_frames(path: String) -> Dictionary: return frames -func load_and_display_pages(search_text): +func load_and_display_pages(search_text) -> void: all_keys = original_config.data.dirs.keys() all_keys.sort_custom(func(a, b): return a < b) if search_edit.text: @@ -126,7 +126,7 @@ func load_and_display_pages(search_text): _load_current_page() -func _on_prev_btn_pressed(): +func _on_prev_btn_pressed() -> void: if current_page <= 1: current_page = all_pages else: @@ -134,7 +134,7 @@ func _on_prev_btn_pressed(): _load_current_page() -func _on_next_btn_pressed(): +func _on_next_btn_pressed() -> void: if current_page >= all_pages: current_page = 1 else: @@ -142,7 +142,7 @@ func _on_next_btn_pressed(): _load_current_page() -func _load_current_page(): +func _load_current_page() -> void: page_label.text = str(current_page) + "/" + str(all_pages) var start = (current_page - 1) * PAGE_SIZE var end = min(start + PAGE_SIZE, matched_keys.size()) @@ -155,7 +155,7 @@ func _load_current_page(): config_edit.text = text -func _display_cards(current_keys: Array): +func _display_cards(current_keys: Array) -> void: # clear frames_display_grid for child in frames_display_grid.get_children(): child.queue_free() diff --git a/config/animation/frames_display_card.gd b/config/animation/frames_display_card.gd index 6b98640d..c4b4f76b 100644 --- a/config/animation/frames_display_card.gd +++ b/config/animation/frames_display_card.gd @@ -34,7 +34,7 @@ func _ready() -> void: var reload_lock := Mutex.new() -func display_frames(): +func display_frames() -> void: if mapping_name and animated_sprite.sprite_frames.has_animation(mapping_name): animated_sprite.play(mapping_name) # scale down if the frame is too big @@ -47,7 +47,7 @@ func display_frames(): reload_frames() -func reload_frames(): +func reload_frames() -> void: # 暂不启用,使用手动调整 # return var sprite_frames = animated_sprite.sprite_frames as SpriteFrames @@ -85,7 +85,7 @@ func reload_frames(): display_frames() -func _on_mapping_submitted(new_text: String): +func _on_mapping_submitted(new_text: String) -> void: # clear the old mapping var sprite_frames = animated_sprite.sprite_frames as SpriteFrames if sprite_frames.has_animation(mapping_name): @@ -97,7 +97,7 @@ func _on_mapping_submitted(new_text: String): _save_and_update_frames_and_config() -func _on_frames_speed_submitted(new_text: String): +func _on_frames_speed_submitted(new_text: String) -> void: frames_per_sec = int(new_text) if frames_per_sec < 1: frames_per_sec = 1 @@ -108,7 +108,7 @@ func _on_frames_speed_submitted(new_text: String): _save_and_update_frames_and_config() -func _on_first_frame_mapping_submitted(new_text: String): +func _on_first_frame_mapping_submitted(new_text: String) -> void: # clear the old first frame mapping if first_frame_mapping != "": var sprite_frames = animated_sprite.sprite_frames as SpriteFrames @@ -120,7 +120,7 @@ func _on_first_frame_mapping_submitted(new_text: String): _save_and_update_frames_and_config() -func _on_mirror_mapping_submitted(new_text: String): +func _on_mirror_mapping_submitted(new_text: String) -> void: # clear the old mirror mapping if mirror_mapping != "": var sprite_frames = animated_sprite.sprite_frames as SpriteFrames @@ -132,7 +132,7 @@ func _on_mirror_mapping_submitted(new_text: String): _save_and_update_frames_and_config() -func _create_mirror(): +func _create_mirror() -> void: if not mirror_mapping: return var mirror_dir_path = "res://asset/art/animation/" + mirror_mapping @@ -159,7 +159,7 @@ func _create_mirror(): sprite_frames.set_animation_speed(mapping_name, frames_per_sec) -func _save_and_update_frames_and_config(): +func _save_and_update_frames_and_config() -> void: # save the sprite_frames if animated_sprite: ResourceSaver.save(animated_sprite.sprite_frames) diff --git a/config/animation/gif_importer.gd b/config/animation/gif_importer.gd index 9fcd0ac4..d6b6a963 100644 --- a/config/animation/gif_importer.gd +++ b/config/animation/gif_importer.gd @@ -4,7 +4,7 @@ var gif_path = "res://asset/art/gif/" var sprite_frames = preload("res://config/animation/entity_sprite_frames.tres") -func _ready(): +func _ready() -> void: var gif_files = [] for file in DirAccess.open(gif_path).get_files(): if file.get_extension() == "gif": diff --git a/config/art/static_frames_loader.gd b/config/art/static_frames_loader.gd index 45b6d078..6195c09d 100644 --- a/config/art/static_frames_loader.gd +++ b/config/art/static_frames_loader.gd @@ -11,7 +11,7 @@ func _ready() -> void: load_btn.pressed.connect(_reload_all) -func _reload_all(): +func _reload_all() -> void: static_frames.clear_all() var dir = DirAccess.open(path) as DirAccess static_frames.add_animation("placeholder") diff --git a/config/audio/random_audio_stream_player.gd b/config/audio/random_audio_stream_player.gd index 708485fc..5befc657 100644 --- a/config/audio/random_audio_stream_player.gd +++ b/config/audio/random_audio_stream_player.gd @@ -9,7 +9,7 @@ func _init() -> void: bus = "game_sfx" -func play_random(): +func play_random() -> void: if audio_collections == null: push_warning("empty audio_collections") return diff --git a/manager/audio_manager/audio_manager.gd b/manager/audio_manager/audio_manager.gd index 210be7d9..d5339364 100644 --- a/manager/audio_manager/audio_manager.gd +++ b/manager/audio_manager/audio_manager.gd @@ -25,7 +25,7 @@ func _ready() -> void: _reload_groups() -func _reload_groups(): +func _reload_groups() -> void: VIBE_GROUPS.clear() for group in vibe_group_collection.groups: if group and group.group_name: @@ -91,7 +91,7 @@ func _find_group_by_name(group_name: StringName) -> VibeGroup: ## 核心方法:播放一个指定的 VibeGroup -func play_group(group_name: StringName, ease_in := 1.0): +func play_group(group_name: StringName, ease_in := 1.0) -> void: var group = _find_group_by_name(group_name) if not is_instance_valid(group): printerr("VibeManager: VibeGroup is not valid. group_name:", group_name) @@ -109,7 +109,7 @@ func play_group(group_name: StringName, ease_in := 1.0): vibe_player.play() -func stop_group(group_name: StringName, ease_out := 1.0): +func stop_group(group_name: StringName, ease_out := 1.0) -> void: if not vibe_player_dict.has(group_name): return var vibe_player = vibe_player_dict[group_name] diff --git a/manager/audio_manager/embellishment.gd b/manager/audio_manager/embellishment.gd index 42c0226b..c267f752 100644 --- a/manager/audio_manager/embellishment.gd +++ b/manager/audio_manager/embellishment.gd @@ -24,7 +24,7 @@ extends Resource @export_range(0.0, 300.0, 0.1, "s") var max_interval: float = 10.0 -func _init(): +func _init() -> void: # 确保 min <= max if min_interval > max_interval: max_interval = min_interval diff --git a/manager/audio_manager/vibe_group_player.gd b/manager/audio_manager/vibe_group_player.gd index 2972c65a..ed401f3c 100644 --- a/manager/audio_manager/vibe_group_player.gd +++ b/manager/audio_manager/vibe_group_player.gd @@ -13,7 +13,7 @@ var _base_db := 0.0: _base_player.volume_db = val -func _init(group: VibeGroup): +func _init(group: VibeGroup) -> void: if not group or not group.base_sound: printerr("VibeGroupPlayer: vibe_group or base sound is null, cannot initialize.") return @@ -49,7 +49,7 @@ func _init(group: VibeGroup): timer.timeout.connect(_on_embellishment_timer_timeout.bind(i)) -func _on_embellishment_timer_timeout(id: int): +func _on_embellishment_timer_timeout(id: int) -> void: var embellishment = vibe_group.embellishments[id] as Embellishment if not embellishment: return @@ -75,14 +75,14 @@ func _refresh_embellishment_player_db(id: int) -> void: ) -func set_volume_linear(volume: float): +func set_volume_linear(volume: float) -> void: _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(): +func play() -> void: if not vibe_group or not vibe_group.base_sound: printerr("VibeGroupPlayer: vibe_group or base sound is null, cannot play.") return @@ -108,6 +108,6 @@ func play(): timer.start(random_wait_time) -func stop_and_free(): +func stop_and_free() -> void: if not is_queued_for_deletion(): queue_free() diff --git a/manager/config_manager/global_config.gd b/manager/config_manager/global_config.gd index 44f376d6..04ad729f 100644 --- a/manager/config_manager/global_config.gd +++ b/manager/config_manager/global_config.gd @@ -21,6 +21,17 @@ const LOCALE_PREFIX_MAPPING = {"zh": 0, "en": 1} const CAPTION_OPTIONS_DICT = {0: ["上海话", "普通话"], 1: [""]} const CAPTION_LOCALES_DICT = {0: ["zh_SH", "zh_CN"], 1: ["en"]} +### dailog +const DIALOG_C01 = preload("uid://ckaq073w1lsom") +const DIALOG_C02 = preload("uid://o7gam82qlv3s") +const DIALOG_C03 = preload("uid://b66v5hsf3tdox") +const DIALOG_C04 = preload("uid://cthsrdkrseijb") +const DIALOG_C05 = preload("uid://c2em7wb623pd7") +const DIALOG_C06 = preload("uid://c1bkhblw88ls0") +const DIALOG_NPC = preload("uid://cni46vt7glkes") +const DIALOG_INSPECT = preload("uid://dwykrbeikrpw1") +const DIALOG_ITEM = preload("uid://b1vwhxctfhl5d") + ## layers # 设置, DebugPanel const CANVAS_LAYER_SETTINGS = 30 diff --git a/manager/event_manager/event2d.gd b/manager/event_manager/event2d.gd index 99eae62d..8e9160e3 100644 --- a/manager/event_manager/event2d.gd +++ b/manager/event_manager/event2d.gd @@ -2,6 +2,7 @@ extends Node2D class_name Event2D +@export_group("Event", "event") # 当前事件 @export var event_name: StringName: set(val): @@ -21,6 +22,7 @@ class_name Event2D event_stages = val if is_node_ready() and Engine.is_editor_hint(): _auto_memo() +@export_group("PreEvent", "pre_event") # 前置依赖事件,为空时意味着无前置事件 @export var pre_event_name: StringName: set(val): @@ -40,12 +42,12 @@ class_name Event2D pre_event_stages = val if is_node_ready() and Engine.is_editor_hint(): _auto_memo() -@export_multiline var event_memo := "" @export_tool_button("auto memo") var auto_memo = _auto_memo @export_tool_button("创建脚本") var create_script = _create_script @export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter @export_tool_button("复制 setter") var copy_setter = _copy_setter @export_tool_button("复制 getter") var copy_getter = _copy_getter +var event_memo := "" var stage := 0 var prev_stage := 0 @@ -113,6 +115,28 @@ func _on_stage_updated(): pass +##### event_memo getter and setter +func _get(property: StringName) -> Variant: + if property == "event_memo": + if Engine.is_editor_hint(): + return null + if event_memo == "": + _auto_memo() + return event_memo + return null + + +func _get_property_list() -> Array[Dictionary]: + return [ + { + "name": "event_memo", + "type": TYPE_STRING, + "hint": PROPERTY_HINT_MULTILINE_TEXT, + "usage": PROPERTY_USAGE_EDITOR + } + ] + + ###### TOOL BUTTON var script_template = preload("uid://bmxsei74o3pyw") as Script @@ -187,3 +211,4 @@ func _auto_memo() -> void: event_memo = "\n".join(kept_lines) event_memo += "\n" if kept_lines else "" event_memo += memo_str + notify_property_list_changed() diff --git a/manager/event_manager/event_binder.gd b/manager/event_manager/event_binder.gd index 091af96b..2cf02be0 100644 --- a/manager/event_manager/event_binder.gd +++ b/manager/event_manager/event_binder.gd @@ -1,9 +1,6 @@ @tool class_name EventBinder extends Node -@export_tool_button("auto memo") var auto_memo = _auto_memo -@export_multiline var memo := "" - @export_group("Updater", "updater") @export var updater_event := &"": set(val): @@ -64,6 +61,9 @@ class_name EventBinder extends Node if is_node_ready() and Engine.is_editor_hint(): _auto_memo() +var memo := "" +@export_tool_button("auto memo") var auto_memo = _auto_memo + var _local_updater_event_stage := 0 @@ -160,6 +160,28 @@ func _auto_detect_mode(): printerr("[EventBinder] _auto_detect_mode cannot detect trigger mode. path:", get_path()) +##### memo getter and setter +func _get(property: StringName) -> Variant: + if property == "memo": + if Engine.is_editor_hint(): + return null + if memo == "": + _auto_memo() + return memo + return null + + +func _get_property_list() -> Array[Dictionary]: + return [ + { + "name": "memo", + "type": TYPE_STRING, + "hint": PROPERTY_HINT_MULTILINE_TEXT, + "usage": PROPERTY_USAGE_EDITOR + } + ] + + #### TOOL BUTTON @@ -201,3 +223,4 @@ func _auto_memo() -> void: memo = "\n".join(kept_lines) memo += "\n" if kept_lines else "" memo += memo_str + notify_property_list_changed() diff --git a/manager/scene/scene_manager.gd b/manager/scene/scene_manager.gd index 7d076e7a..02e26ce1 100644 --- a/manager/scene/scene_manager.gd +++ b/manager/scene/scene_manager.gd @@ -74,6 +74,15 @@ func get_player() -> MainPlayer: return null +func resettle_player(global_position_x: float, direction: Vector2) -> void: + var player = get_player() + if player: + player.global_position.x = global_position_x + player.set_facing_direction(direction) + else: + printerr("settle_player: Player node not found") + + func focus_node(node: Node2D, duration := 0.0) -> void: var marker = get_camera_marker() if marker: diff --git a/project.godot b/project.godot index a04a8ec7..914333e8 100644 --- a/project.godot +++ b/project.godot @@ -76,6 +76,7 @@ runtime/balloon_path="res://scene/dialog/balloon.tscn" editor/translations/include_character_in_translation_exports=true editor/translations/include_notes_in_translation_exports=true editor/wrap_long_lines=true +editor/advanced/custom_test_scene_path="uid://ugd552efvil0" [display] diff --git a/scene/entity/ux/ppt_helper.gd b/scene/entity/ux/ppt_helper.gd new file mode 100644 index 00000000..5bfd0dfa --- /dev/null +++ b/scene/entity/ux/ppt_helper.gd @@ -0,0 +1,212 @@ +@tool + +class_name PPTHelper +extends Node2D + +signal slide_changed(new_slide_index: int) +signal presentation_finished + +## 转场配置数组,按顺序播放 +@export var configs: Array[PPTHelperConfig] = [] +## 如果为 true, 将在场景加载完成后自动播放 +@export var auto_start := true +## 如果为 true, 播放到结尾后将从头开始 +@export var loop := false + +## 当前激活的配置索引 +var current_index := -1 +## 动画播放锁,防止在转场时重复触发 +var is_playing := false + +## 编辑器工具按钮:自动配置 Slides +@export_tool_button("自动配置 Slides") var auto_config_slides = _auto_config_slides + + +func _ready() -> void: + if Engine.is_editor_hint(): + return + if auto_start: + play() + + +## 开始或重新开始播放 +## @param start_index 从指定的索引开始播放 +func play(start_index := 0) -> void: + if configs.is_empty(): + printerr("PPTHelper: No configs to play.") + return + if start_index < 0 or start_index >= configs.size(): + printerr("PPTHelper: 'start_index' is out of bounds.") + return + + # 重置状态 + is_playing = false + current_index = -1 + # 隐藏所有页面,准备从头开始 + for config in configs: + if config and config.canvas_item: + var node := get_node_or_null(config.canvas_item) as CanvasItem + if is_instance_valid(node): + node.modulate.a = 0.0 + + # 开始播放指定的页面 + _transition_to(start_index) + + +## 手动切换到下一个页面 +func next() -> void: + if is_playing or current_index == -1: + return + var next_index := current_index + 1 + if next_index >= configs.size(): + if loop: + next_index = 0 + else: + presentation_finished.emit() + print("PPTHelper: Reached the end of the presentation.") + return + _transition_to(next_index) + + +## 跳转到指定的页面 +func goto(target_index: int) -> void: + if target_index < 0 or target_index >= configs.size(): + printerr("PPTHelper: 'target_index' for goto() is out of bounds.") + return + if target_index == current_index or is_playing: + return + _transition_to(target_index) + + +# 核心转换函数 +func _transition_to(target_index: int) -> void: + if is_playing: + return + is_playing = true + var from_index := current_index + var tween: Tween = create_tween() + tween.set_parallel(true) # 并行处理 in 和 out 动画 + # --- 处理上一页的 "Ease Out" --- + if from_index != -1: + var from_config := configs[from_index] + var from_node := get_node_or_null(from_config.canvas_item) as CanvasItem + if is_instance_valid(from_node): + if from_config.ease_out_duration > 0: + ( + tween + . tween_property(from_node, "modulate:a", 0.0, from_config.ease_out_duration) + . set_trans(_get_trans_type(from_config.ease_out_trans_type)) + . set_ease(_get_ease_type(from_config.ease_out_type)) + ) + else: + from_node.modulate.a = 0.0 + else: + printerr("PPTHelper: Invalid node for ease out at index %d." % from_index) + + # --- 处理目标页的 "Ease In" --- + var target_config := configs[target_index] + var target_node := get_node_or_null(target_config.canvas_item) as CanvasItem + if is_instance_valid(target_node): + if target_config.ease_in_duration > 0: + target_node.modulate.a = 0.0 # 确保开始时透明 + ( + tween + . tween_property(target_node, "modulate:a", 1.0, target_config.ease_in_duration) + . set_trans(_get_trans_type(target_config.ease_in_trans_type)) + . set_ease(_get_ease_type(target_config.ease_in_type)) + ) + else: + target_node.modulate.a = 1.0 + else: + printerr("PPTHelper: Invalid node for ease in at index %d." % target_index) + is_playing = false # 如果节点无效,立即解锁 + return + + tween.tween_interval(0.001) # 最小延迟防止无效 + await tween.finished + + # --- 更新状态并检查自动播放下一个 --- + current_index = target_index + is_playing = false + slide_changed.emit(current_index) # 发射信号 + + # 如果配置为自动转到下一个,等待指定时间后执行 + if target_config.ease_out_to_next: + if target_config.ease_out_wait_time > 0.0: + await Util.wait(target_config.ease_out_wait_time) + next() + else: + presentation_finished.emit() + + +# 辅助函数:将字符串映射到 Tween.TransitionType +func _get_trans_type(trans_str: String) -> Tween.TransitionType: + match trans_str.to_lower(): + "linear": + return Tween.TRANS_LINEAR + "sine": + return Tween.TRANS_SINE + "cubic": + return Tween.TRANS_CUBIC + "quart": + return Tween.TRANS_QUART + "quint": + return Tween.TRANS_QUINT + "expo": + return Tween.TRANS_EXPO + "elastic": + return Tween.TRANS_ELASTIC + "bounce": + return Tween.TRANS_BOUNCE + "spring": + return Tween.TRANS_SPRING + _: + return Tween.TRANS_LINEAR + + +# 辅助函数:将字符串映射到 Tween.EaseType +func _get_ease_type(ease_str: String) -> Tween.EaseType: + match ease_str.to_lower(): + "in": + return Tween.EASE_IN + "out": + return Tween.EASE_OUT + "inout": + return Tween.EASE_IN_OUT + _: + return Tween.EASE_IN_OUT + + +#### TOOL BUTTON +func _auto_config_slides() -> void: + if not Engine.is_editor_hint(): + return # 只在编辑器中运行 + # 清空现有配置 + configs = [] + # 获取所有直接子节点 + var children := get_children() + if children.is_empty(): + printerr("PPTHelper: No child nodes found for auto-configuration.") + notify_property_list_changed() + return + + # 从下到上配置(反转数组) + children.reverse() + var configured_count := 0 + for child in children: + if child is CanvasItem: + var config := PPTHelperConfig.new() + config.canvas_item = get_path_to(child) # 设置 NodePath 到子节点 + # 其他属性使用默认值(如 ease_in_duration = 0.0 等),可手动调整 + configs.append(config) + configured_count += 1 + else: + print("PPTHelper: Skipping non-CanvasItem child: %s" % child.name) + + if configured_count > 0: + print("PPTHelper: Auto-configured %d slides from child nodes." % configured_count) + else: + printerr("PPTHelper: No valid CanvasItem children found for auto-configuration.") + + # 刷新编辑器属性以显示更新 + notify_property_list_changed() diff --git a/scene/entity/ux/ppt_helper.gd.uid b/scene/entity/ux/ppt_helper.gd.uid new file mode 100644 index 00000000..a95df0c0 --- /dev/null +++ b/scene/entity/ux/ppt_helper.gd.uid @@ -0,0 +1 @@ +uid://cys8g55ahou1u diff --git a/scene/entity/ux/ppt_helper_config.gd b/scene/entity/ux/ppt_helper_config.gd new file mode 100644 index 00000000..61b9817a --- /dev/null +++ b/scene/entity/ux/ppt_helper_config.gd @@ -0,0 +1,28 @@ +class_name PPTHelperConfig +extends Resource + +## 需要控制的 CanvasItem 节点路径 +@export_node_path("CanvasItem") var canvas_item: NodePath +# 转场 ease in 参数 +@export_group("EaseIn", "ease_in_") +## 动画的缓动方式 (进入, 退出, 或两者兼有) +@export_enum("in", "out", "inout") var ease_in_type := "inout" +## 动画的过渡曲线类型 +@export_enum("linear", "sine", "cubic", "quart", "quint", "expo", "elastic", "bounce", "spring") +var ease_in_trans_type := "cubic" +## 动画的持续时间(秒) 0 意味着直接出现(无需 ease) +@export var ease_in_duration := 0.0 + +# 转场 ease out 参数 +@export_group("EaseOut", "ease_out_") +## 是否自动转到下一个页面(在 ease in 完成后触发 ease out 并转场) +@export var ease_out_to_next := true +# ease_out_to_next 为 true 时, 等待 ease_out_wait_time 秒再执行 +@export var ease_out_wait_time := 0.5 +## 动画的缓动方式 (进入, 退出, 或两者兼有) +@export_enum("in", "out", "inout") var ease_out_type := "inout" +## 动画的过渡曲线类型 +@export_enum("linear", "sine", "cubic", "quart", "quint", "expo", "elastic", "bounce", "spring") +var ease_out_trans_type := "cubic" +## 动画的持续时间(秒) 0 意味着直接消失(无需 ease) +@export var ease_out_duration := 0.5 diff --git a/scene/entity/ux/ppt_helper_config.gd.uid b/scene/entity/ux/ppt_helper_config.gd.uid new file mode 100644 index 00000000..f0c69d68 --- /dev/null +++ b/scene/entity/ux/ppt_helper_config.gd.uid @@ -0,0 +1 @@ +uid://b1opm26eep8cw diff --git a/scene/ground/scene/c03/s03_瞎子理发店.gd b/scene/ground/scene/c03/s03_瞎子理发店.gd index 12adc88e..0f57c8ac 100644 --- a/scene/ground/scene/c03/s03_瞎子理发店.gd +++ b/scene/ground/scene/c03/s03_瞎子理发店.gd @@ -31,8 +31,11 @@ func _on_ground_ready() -> void: closeup刮海报_鬼母子.exit.connect(_check_if_flyer_shaven) _check_if_flyer_shaven() closeup癞子纸人.exit.connect(_on_laizi_exit) - if EventManager.get_stage("c03_s03_laizi_braid") >= 2: + var braid_satge := EventManager.get_stage("c03_s03_laizi_braid") + if braid_satge >= 1: _setup_beheaded_laizi_paperman() + if braid_satge == 1: + closeup癞子纸人.display() func _check_if_flyer_shaven(_arg = false) -> void: @@ -42,17 +45,16 @@ func _check_if_flyer_shaven(_arg = false) -> void: SceneManager.pop_os_with_str("c03_s03_获得剪刀纸舌头") +# 癞子演出 +# 渠道有二: +# 1. Closeup癞子纸人 exit true 后 +# 2. 自身 _on_ground_ready func _on_laizi_exit(_arg = false) -> void: if _arg: _setup_beheaded_laizi_paperman() - # TODO 癞子纸人 - SceneManager.lock_player() - # TODO - SceneManager.pop_debug_dialog_info("美术&音效", "剪辫子演出") - await Util.wait(2.0) - SceneManager.unlock_player() + $"../DeployLayer/Event2D癞子剪辫子".start_show() func _setup_beheaded_laizi_paperman(): - $"../DeployLayer/癞子纸人/癞子纸人头套".queue_free() - closeup癞子纸人.enabled = false \ No newline at end of file + $"../DeployLayer/癞子纸人/癞子纸人头套".hide() + closeup癞子纸人.enabled = false diff --git a/scene/ground/scene/c03/s03_瞎子理发店.tscn b/scene/ground/scene/c03/s03_瞎子理发店.tscn index 12f89b3f..f3fd9cf0 100644 --- a/scene/ground/scene/c03/s03_瞎子理发店.tscn +++ b/scene/ground/scene/c03/s03_瞎子理发店.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://bsqt2c061fmin"] +[gd_scene load_steps=21 format=3 uid="uid://bsqt2c061fmin"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_40yjl"] [ext_resource type="Script" uid="uid://cim5bqm2nayls" path="res://scene/ground/scene/c03/s03_瞎子理发店.gd" id="2_irgvj"] @@ -12,7 +12,13 @@ [ext_resource type="PackedScene" uid="uid://d320nw5yrmvjo" path="res://scene/ground/script/c03/s03_closeup癞子纸人.tscn" id="9_4imwu"] [ext_resource type="Texture2D" uid="uid://bv5vcrdqwtlm3" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子纸人.png" id="9_bdtls"] [ext_resource type="Texture2D" uid="uid://ckboywu6sjcpc" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子纸人头套.png" id="10_1pu6f"] +[ext_resource type="Script" uid="uid://cp8osi230xaqa" path="res://scene/ground/script/c03/s03_event_2d癞子剪辫子.gd" id="10_6m0be"] +[ext_resource type="PackedScene" uid="uid://bylmdf4duq6pw" path="res://scene/ground/script/c03/s03_closeup瞎子糕点.tscn" id="10_pkhgt"] [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="11_1pu6f"] +[ext_resource type="SpriteFrames" uid="uid://b0icyhxpj16tv" path="res://asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres" id="11_6ryqd"] +[ext_resource type="Script" uid="uid://cphfob11f7atx" path="res://addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd" id="12_15t2b"] +[ext_resource type="SpriteFrames" uid="uid://cmvr3lbwe3h7p" path="res://asset/art/gif/c03_特写与游戏动画/c03_特写与游戏动画_frames.tres" id="14_pkhgt"] +[ext_resource type="Texture2D" uid="uid://cylsq5cvhlp18" path="res://asset/art/tool/point_light.png" id="17_fq03x"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_k01ve"] @@ -75,12 +81,65 @@ texture = ExtResource("9_bdtls") position = Vector2(1, -23) texture = ExtResource("10_1pu6f") -[node name="Note桌子" parent="Ground/DeployLayer" index="6" instance=ExtResource("11_1pu6f")] +[node name="Event2D癞子剪辫子" type="Node2D" parent="Ground/DeployLayer" index="6"] +script = ExtResource("10_6m0be") +event_name = &"c03_s03_laizi_braid" +event_stages = Array[int]([1]) +metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" + +[node name="Pro癞子" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D癞子剪辫子"] +position = Vector2(343, 43) +sprite_frames = ExtResource("14_pkhgt") +animation = &"癞子背坐呼吸" +script = ExtResource("12_15t2b") +action_configs = Array[Dictionary]([{ +"animation_intro": "癞子背坐呼吸", +&"animation_next": "癞子背对侧头呼吸", +&"intro_loop": 4 +}]) +metadata/_custom_type_script = "uid://cphfob11f7atx" + +[node name="Pro瞎子" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D癞子剪辫子"] +position = Vector2(377, 48) +sprite_frames = ExtResource("11_6ryqd") +animation = &"方瞎子呼吸-左" +autoplay = "方瞎子呼吸-左" +script = ExtResource("12_15t2b") +move_configs = Array[Dictionary]([{ +"animation": "方瞎子走路-右", +"animation_next": "", +"duration": 1e+07, +"movement_x": 300.0, +"velocity": Vector2(70, 0) +}]) +debug_mov_animation = "方瞎子走路-右" +metadata/_custom_type_script = "uid://cphfob11f7atx" + +[node name="Pro陆仁" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D癞子剪辫子"] +position = Vector2(297, 37) +sprite_frames = ExtResource("14_pkhgt") +animation = &"父亲抱小孩" +autoplay = "父亲抱小孩" +script = ExtResource("12_15t2b") +metadata/_custom_type_script = "uid://cphfob11f7atx" + +[node name="Closeup瞎子糕点" parent="Ground/DeployLayer/Event2D癞子剪辫子" instance=ExtResource("5_d40x1")] +unique_name_in_owner = true +position = Vector2(357, -213) +packed_scene = ExtResource("10_pkhgt") +quit_closeup_on_cancel = false + +[node name="PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/Event2D癞子剪辫子"] +position = Vector2(337, 29) +texture = ExtResource("17_fq03x") +texture_scale = 0.6 + +[node name="Note桌子" parent="Ground/DeployLayer" index="7" instance=ExtResource("11_1pu6f")] position = Vector2(393, 33) title_filter = "c03" note_key = "c03_s03_桌子" -[node name="Note洗头盆" parent="Ground/DeployLayer" index="7" instance=ExtResource("11_1pu6f")] +[node name="Note洗头盆" parent="Ground/DeployLayer" index="8" instance=ExtResource("11_1pu6f")] position = Vector2(501, 46) title_filter = "c03" note_key = "c03_s03_洗头盆" @@ -106,7 +165,6 @@ offset = Vector2(0, -11) points = PackedVector2Array(35, 151, 541, 151) [node name="DirectionalLight2D" parent="Ground" index="8"] -visible = false energy = 0.85 blend_mode = 1 diff --git a/scene/ground/script/c03/s03_closeup癞子纸人.gd b/scene/ground/script/c03/s03_closeup癞子纸人.gd index a1e7256c..2108f8de 100644 --- a/scene/ground/script/c03/s03_closeup癞子纸人.gd +++ b/scene/ground/script/c03/s03_closeup癞子纸人.gd @@ -1,6 +1,8 @@ extends CanvasLayer @onready var bg = $BG as TextureRect +@onready var braid = %"HoverBraid" as CanvasItem + signal exit(success: bool) @@ -10,30 +12,24 @@ func _ready() -> void: # 两张纸钱点击事件 %"Draggable纸钱1".picked.connect(_on_paper_coin_picked, CONNECT_ONE_SHOT) %"Draggable纸钱2".picked.connect(_on_paper_coin_picked, CONNECT_ONE_SHOT) - %"HoverBraid".interacted.connect(_on_braid_interacted, CONNECT_ONE_SHOT) - + braid.interacted.connect(_on_braid_interacted, CONNECT_ONE_SHOT) _check_if_notify_to_use_prop() # 如果用过剪刀,则直接展示后脑勺 - # 0:初始化 1:已使用剪刀 2:已剪下 - if EventManager.get_stage("c03_s03_laizi_braid") > 0: + # 0:初始化 1:已剪下 2:演出结束 + var stage = EventManager.get_stage("c03_s03_laizi_braid") + if stage == 1: + _braid_cutting_show() + elif stage > 1: $"头".hide() + $"后脑勺".hide() $"头受伤".hide() + func _on_paper_coin_picked(_node = null) -> void: if GlobalFunctor.c03_get_paper_coin(): await SceneManager.get_inspector().quit_and_hidden _check_if_notify_to_use_prop() -func _on_braid_interacted() -> void: - var closeup = get_parent() as Closeup2D - # 禁用 cancel to quit - closeup.hold_cancel_before_exit() - SceneManager.enable_prop_item("prop_剪下的辫子") - await SceneManager.get_inspector().quit_and_hidden - await Util.wait(1.0) - # 退出,播放剪辫子演出 - exit.emit(true) - func _check_if_notify_to_use_prop() -> void: if EventManager.get_stage("c03_s03_papercoin1") > 0 and EventManager.get_stage("c03_s03_papercoin2") > 0: @@ -63,10 +59,42 @@ func _try_interact() -> void: if using_scissors: return using_scissors = true + var closeup = get_parent() as Closeup2D + # 禁用 cancel to quit + closeup.hold_cancel_before_exit() + await Util.wait(0.5) + # 飞针 + $AnimationPlayer.play("cutting_overhead") + # 抖动 + Util.shake_layer(self, 0.3) # TODO SceneManager.pop_debug_dialog_info("音效", "使用剪刀(惊悚)") $"头".hide() - await Util.wait(2.0) + await Util.wait(5.0) + $"后脑勺".show() $"头受伤".hide() + # TODO + SceneManager.pop_debug_dialog_info("音效", "纸人突然转头(咔嚓)") + + +# 剪下辫子 +func _on_braid_interacted() -> void: + # 剪刀变为重要物品 SceneManager.disable_prop_item("prop_剪刀") - EventManager.set_stage("c03_s03_laizi_braid", 1) + SceneManager.enable_important_item("prop_剪刀", false) + _braid_cutting_show() + + +# 播放演出 +func _braid_cutting_show() -> void: + $"头".hide() + $"头受伤".hide() + $"后脑勺".hide() + # SceneManager.enable_prop_item("prop_剪下的辫子") + await Util.wait(2.0) + $AnimationPlayer.play("light_and_canvas_flipping") + await Util.wait(1.5) + DialogueManager.show_dialogue_balloon(GlobalConfig.DIALOG_C03, "c03_s03_理发店演出1") + await DialogueManager.dialogue_ended + # 退出,播放剪辫子演出 + exit.emit(true) diff --git a/scene/ground/script/c03/s03_closeup癞子纸人.tscn b/scene/ground/script/c03/s03_closeup癞子纸人.tscn index 62f0c14f..77269950 100644 --- a/scene/ground/script/c03/s03_closeup癞子纸人.tscn +++ b/scene/ground/script/c03/s03_closeup癞子纸人.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://d320nw5yrmvjo"] +[gd_scene load_steps=20 format=3 uid="uid://d320nw5yrmvjo"] [ext_resource type="Script" uid="uid://de2smnt2my047" path="res://scene/ground/script/c03/s03_closeup癞子纸人.gd" id="1_6n6qt"] [ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="2_uenj0"] @@ -6,17 +6,247 @@ [ext_resource type="Texture2D" uid="uid://cxlwpf82sqc8p" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/1辫子没剪开.png" id="3_abwb2"] [ext_resource type="Texture2D" uid="uid://cpri1f3b2blfw" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/1辫子散开.png" id="3_jijuh"] [ext_resource type="Texture2D" uid="uid://c12xhretrdxs6" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/1大头.png" id="4_8yx5x"] -[ext_resource type="Texture2D" uid="uid://doqxrw48g45iy" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口_头.png" id="4_c581m"] [ext_resource type="PackedScene" uid="uid://bkk1rxx36ghrl" path="res://scene/entity/ux/hover_light_click_area.tscn" id="4_nc54a"] [ext_resource type="PackedScene" uid="uid://bg7oictr1wgex" path="res://scene/little_game/general/draggable.tscn" id="4_uenj0"] [ext_resource type="Texture2D" uid="uid://cqrc7v5lg2cey" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/l_辫子.png" id="5_jijuh"] [ext_resource type="Texture2D" uid="uid://fspvmlydy3hu" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/纸钱2.png" id="5_kcw8x"] [ext_resource type="Script" uid="uid://0wjaho6qkg6s" path="res://manager/event_manager/event_binder.gd" id="6_uenj0"] [ext_resource type="Texture2D" uid="uid://vyuf0wekr1lq" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/纸钱1.png" id="7_kcw8x"] +[ext_resource type="Texture2D" uid="uid://ypl41mx0etds" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口.png" id="9_eqvmt"] +[ext_resource type="Texture2D" uid="uid://k4eplss3bx5g" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/刀劈特效.png" id="9_yixv2"] +[ext_resource type="Texture2D" uid="uid://dr51e8ell86" path="res://asset/art/scene/c03/s03_瞎子理发店/癞子特写/伤口血迹.png" id="10_eqvmt"] + +[sub_resource type="Animation" id="Animation_eqvmt"] +resource_name = "cutting_overhead" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("飞针:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.133333), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(435, -88), Vector2(-93, 354)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("DirectionalLight2D:color") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.0333333, 0.366667, 0.533333), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(0.970477, 0.0170246, 0.00012822, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DirectionalLight2D:energy") +tracks/2/interp = 2 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.0333333, 0.133333, 0.233333, 0.3, 0.366667, 0.433333, 0.6), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.4, 0.0, 0.4, 0.0, 1.0, 0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("DirectionalLight2D:blend_mode") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.0333333, 0.233333, 0.3, 0.366667), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [0, 1, 0, 0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("头受伤:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("头受伤/伤口:modulate") +tracks/5/interp = 2 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.0666667, 0.2, 0.566667), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 0.52549), Color(1, 1, 1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("头受伤/伤口血迹:modulate") +tracks/6/interp = 2 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0.733333, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_nucp3"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("飞针:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(435, -88)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("DirectionalLight2D:color") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DirectionalLight2D:energy") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("DirectionalLight2D:blend_mode") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("头受伤/伤口:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("头受伤/伤口血迹:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("后脑勺_剪辫:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_otai4"] +resource_name = "light_and_canvas_flipping" +length = 5.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("DirectionalLight2D:energy") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1.06667, 2.4, 4.16667, 4.96667), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.2, 4.2034e-05, 0.2, 0.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("后脑勺_剪辫:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1.43333, 3.53333, 5), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(0, 0), Vector2(1, -2), Vector2(-1, 2), Vector2(0, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DirectionalLight2D:color") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_otai4"] +_data = { +&"RESET": SubResource("Animation_nucp3"), +&"cutting_overhead": SubResource("Animation_eqvmt"), +&"light_and_canvas_flipping": SubResource("Animation_otai4") +} [node name="Closeup癞子纸人" type="CanvasLayer"] script = ExtResource("1_6n6qt") +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_otai4") +} + [node name="BG" type="TextureRect" parent="."] anchors_preset = 15 anchor_right = 1.0 @@ -28,26 +258,13 @@ texture = ExtResource("2_xao0c") expand_mode = 1 stretch_mode = 3 -[node name="后脑勺_剪辫" type="TextureRect" parent="."] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="后脑勺_剪辫" type="Sprite2D" parent="."] texture = ExtResource("3_jijuh") -expand_mode = 1 -stretch_mode = 3 +centered = false [node name="后脑勺" type="TextureRect" parent="."] visible = false -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 texture = ExtResource("3_abwb2") -expand_mode = 1 -stretch_mode = 3 [node name="HoverBraid" parent="后脑勺" instance=ExtResource("4_nc54a")] unique_name_in_owner = true @@ -62,19 +279,9 @@ texture = ExtResource("5_jijuh") [node name="EventBinder" type="Node" parent="后脑勺/HoverBraid"] script = ExtResource("6_uenj0") -memo = "[hoverbraid] interacted 时: c03_s03_laizi_braid=2:已剪下辫子(greater)" +updater_stages = Array[int]([0]) trigger_event = &"c03_s03_laizi_braid" trigger_mode = "interacted" -trigger_stage = 2 -metadata/_custom_type_script = "uid://0wjaho6qkg6s" - -[node name="EventBinder" type="Node" parent="后脑勺"] -script = ExtResource("6_uenj0") -memo = "c03_s03_laizi_braid=[1:已用剪刀_准备剪辫] 时,显示: [后脑勺] -" -updater_event = &"c03_s03_laizi_braid" -updater_mode = "shower" -updater_ease_duration = 0.0 metadata/_custom_type_script = "uid://0wjaho6qkg6s" [node name="头受伤" type="TextureRect" parent="."] @@ -83,10 +290,28 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("4_c581m") +texture = ExtResource("4_8yx5x") expand_mode = 1 stretch_mode = 3 +[node name="伤口" type="Sprite2D" parent="头受伤"] +modulate = Color(1, 1, 1, 0) +position = Vector2(249, 114) +texture = ExtResource("9_eqvmt") + +[node name="伤口血迹" type="Sprite2D" parent="头受伤"] +position = Vector2(249, 114) +texture = ExtResource("10_eqvmt") + +[node name="DirectionalLight2D" type="DirectionalLight2D" parent="."] +energy = 0.0 +range_layer_max = 10 + +[node name="飞针" type="Sprite2D" parent="."] +position = Vector2(435, -88) +rotation = 0.0950055 +texture = ExtResource("9_yixv2") + [node name="头" type="TextureRect" parent="."] anchors_preset = 15 anchor_right = 1.0 @@ -105,8 +330,6 @@ texture = ExtResource("5_kcw8x") [node name="EventBinder" type="Node" parent="头/Draggable纸钱2"] script = ExtResource("6_uenj0") -memo = "c03_s03_papercoin2=[0] 时,显示: [纸钱2] -[纸钱2] picked 时: c03_s03_papercoin2=1(greater)" updater_event = &"c03_s03_papercoin2" updater_mode = "shower" updater_ease_duration = 0.0 @@ -126,8 +349,6 @@ texture = ExtResource("7_kcw8x") [node name="EventBinder" type="Node" parent="头/Draggable纸钱1"] script = ExtResource("6_uenj0") -memo = "c03_s03_papercoin1=[0] 时,显示: [纸钱1] -[纸钱1] picked 时: c03_s03_papercoin1=1(greater)" updater_event = &"c03_s03_papercoin1" updater_mode = "shower" updater_ease_duration = 0.0 diff --git a/scene/ground/script/c03/s03_closeup瞎子糕点.gd b/scene/ground/script/c03/s03_closeup瞎子糕点.gd new file mode 100644 index 00000000..8fa91dfc --- /dev/null +++ b/scene/ground/script/c03/s03_closeup瞎子糕点.gd @@ -0,0 +1,21 @@ +extends CanvasLayer + +signal exit(arg) + + +func _ready() -> void: + layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME + SceneManager.lock_player() + DialogueManager.show_dialogue_balloon(GlobalConfig.DIALOG_C03, "c03_s03_理发店演出3") + $PPTHelper.presentation_finished.connect(_on_presentation_finished) + await DialogueManager.dialogue_ended + if not presentation_finished: + await $PPTHelper.presentation_finished + EventManager.set_stage("c03_s03_laizi_braid", 2) + SceneManager.unlock_player() + exit.emit(true) + +var presentation_finished = false + +func _on_presentation_finished() -> void: + presentation_finished = true \ No newline at end of file diff --git a/scene/ground/script/c03/s03_closeup瞎子糕点.gd.uid b/scene/ground/script/c03/s03_closeup瞎子糕点.gd.uid new file mode 100644 index 00000000..c866a7fe --- /dev/null +++ b/scene/ground/script/c03/s03_closeup瞎子糕点.gd.uid @@ -0,0 +1 @@ +uid://d3oh3k2stf4x7 diff --git a/scene/ground/script/c03/s03_closeup瞎子糕点.tscn b/scene/ground/script/c03/s03_closeup瞎子糕点.tscn new file mode 100644 index 00000000..26313690 --- /dev/null +++ b/scene/ground/script/c03/s03_closeup瞎子糕点.tscn @@ -0,0 +1,143 @@ +[gd_scene load_steps=13 format=3 uid="uid://bylmdf4duq6pw"] + +[ext_resource type="Script" uid="uid://d3oh3k2stf4x7" path="res://scene/ground/script/c03/s03_closeup瞎子糕点.gd" id="1_exgm2"] +[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="2_e8ecu"] +[ext_resource type="Texture2D" uid="uid://dl8mx4mwjvlef" path="res://asset/art/scene/c03/s03_瞎子理发店/瞎子放糕点特写/瞎子场景.png" id="2_exgm2"] +[ext_resource type="Texture2D" uid="uid://cg8bgh3gxxace" path="res://asset/art/scene/c03/s03_瞎子理发店/瞎子放糕点特写/糕点打开.png" id="3_e8ecu"] +[ext_resource type="Texture2D" uid="uid://c6exk3siqfmm8" path="res://asset/art/scene/c03/s03_瞎子理发店/瞎子放糕点特写/糕点未打开.png" id="4_b3tds"] +[ext_resource type="Texture2D" uid="uid://dg2korx0gohxr" path="res://asset/art/scene/c03/s03_瞎子理发店/瞎子放糕点特写/瞎子放糕点.png" id="5_cat7j"] +[ext_resource type="Script" uid="uid://cys8g55ahou1u" path="res://scene/entity/ux/ppt_helper.gd" id="7_e8ecu"] +[ext_resource type="Script" uid="uid://b1opm26eep8cw" path="res://scene/entity/ux/ppt_helper_config.gd" id="8_b3tds"] + +[sub_resource type="Resource" id="Resource_b3tds"] +script = ExtResource("8_b3tds") +canvas_item = NodePath("背景") +ease_in_type = "inout" +ease_in_trans_type = "cubic" +ease_in_duration = 0.0 +ease_out_to_next = true +ease_out_wait_time = 1.0 +ease_out_type = "inout" +ease_out_trans_type = "cubic" +ease_out_duration = 0.5 + +[sub_resource type="Resource" id="Resource_cat7j"] +script = ExtResource("8_b3tds") +canvas_item = NodePath("瞎子放糕点") +ease_in_type = "inout" +ease_in_trans_type = "cubic" +ease_in_duration = 0.5 +ease_out_to_next = true +ease_out_wait_time = 1.0 +ease_out_type = "inout" +ease_out_trans_type = "cubic" +ease_out_duration = 0.3 + +[sub_resource type="Resource" id="Resource_va0t0"] +script = ExtResource("8_b3tds") +canvas_item = NodePath("糕点未打开") +ease_in_type = "inout" +ease_in_trans_type = "cubic" +ease_in_duration = 0.0 +ease_out_to_next = true +ease_out_wait_time = 1.5 +ease_out_type = "inout" +ease_out_trans_type = "cubic" +ease_out_duration = 0.2 + +[sub_resource type="Resource" id="Resource_svuqh"] +script = ExtResource("8_b3tds") +canvas_item = NodePath("糕点打开") +ease_in_type = "inout" +ease_in_trans_type = "cubic" +ease_in_duration = 0.0 +ease_out_to_next = true +ease_out_wait_time = 2.0 +ease_out_type = "inout" +ease_out_trans_type = "cubic" +ease_out_duration = 0.0 + +[node name="Closeup瞎子糕点" type="CanvasLayer"] +script = ExtResource("1_exgm2") + +[node name="BG" type="TextureRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = ExtResource("2_exgm2") + +[node name="PPTHelper" type="Node2D" parent="."] +script = ExtResource("7_e8ecu") +configs = Array[ExtResource("8_b3tds")]([SubResource("Resource_b3tds"), SubResource("Resource_cat7j"), SubResource("Resource_va0t0"), SubResource("Resource_svuqh")]) +metadata/_custom_type_script = "uid://cys8g55ahou1u" + +[node name="糕点打开" type="TextureRect" parent="PPTHelper"] +modulate = Color(1, 1, 1, 0) +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 50.0 +offset_top = 51.0 +offset_right = 457.0 +offset_bottom = 320.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = ExtResource("3_e8ecu") + +[node name="糕点未打开" type="TextureRect" parent="PPTHelper"] +modulate = Color(1, 1, 1, 0) +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 172.0 +offset_top = 59.5 +offset_right = 392.0 +offset_bottom = 256.5 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = ExtResource("4_b3tds") + +[node name="瞎子放糕点" type="TextureRect" parent="PPTHelper"] +modulate = Color(1, 1, 1, 0) +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -15.0 +offset_top = 9.0 +offset_right = 392.0 +offset_bottom = 325.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = ExtResource("5_cat7j") + +[node name="背景" type="TextureRect" parent="PPTHelper"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 564.0 +offset_bottom = 316.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = ExtResource("2_exgm2") + +[node name="遮罩" type="TextureRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("2_e8ecu") diff --git a/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd b/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd new file mode 100644 index 00000000..d6a2627c --- /dev/null +++ b/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd @@ -0,0 +1,45 @@ +@tool +extends Event2D + +# var prev_stage := 0 +# var stage := 0 + + +func _ready() -> void: + super._ready() + if Engine.is_editor_hint(): + return + + +func _on_global_stage_updated(e: StringName, s: int) -> void: + super._on_global_stage_updated(e, s) + + +func _on_ground_ready(_ground: Ground2D) -> void: + pass + + +func _on_pre_stage_updated() -> void: + pass + + +func _on_stage_updated() -> void: + pass + + +func start_show() -> void: + SceneManager.lock_player() + # 隐藏玩家 + SceneManager.get_player().visible = false + SceneManager.get_camera_marker().force_offset.x = 50.0 + # TODO + SceneManager.pop_debug_dialog_info("美术&音效", "剪辫子演出") + await Util.wait(2.5) + DialogueManager.show_dialogue_balloon(GlobalConfig.DIALOG_C03, "c03_s03_理发店演出2") + await DialogueManager.dialogue_ended + $"Pro瞎子".play("方瞎子走路-右") + await Util.wait(2.0) + $"Closeup瞎子糕点".display() + SceneManager.get_camera_marker().force_offset.x = 0.0 + SceneManager.get_player().visible = true + SceneManager.unlock_player() diff --git a/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd.uid b/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd.uid new file mode 100644 index 00000000..8d29a0f2 --- /dev/null +++ b/scene/ground/script/c03/s03_event_2d癞子剪辫子.gd.uid @@ -0,0 +1 @@ +uid://cp8osi230xaqa diff --git a/scene/ux/prop_inspector.tscn b/scene/ux/prop_inspector.tscn index 73a611b5..0b09fc2e 100644 --- a/scene/ux/prop_inspector.tscn +++ b/scene/ux/prop_inspector.tscn @@ -72,6 +72,7 @@ grow_vertical = 2 size_flags_vertical = 4 mouse_filter = 2 texture = ExtResource("2_wr575") +stretch_mode = 5 [node name="NotesBG" type="TextureRect" parent="."] unique_name_in_owner = true diff --git a/script_templates/event_2d.gd b/script_templates/event_2d.gd index 69036aba..f0be8b01 100644 --- a/script_templates/event_2d.gd +++ b/script_templates/event_2d.gd @@ -10,6 +10,7 @@ func _ready() -> void: if Engine.is_editor_hint(): return + func _on_global_stage_updated(e: StringName, s: int): super._on_global_stage_updated(e, s)