理发店癞子理发演出

This commit is contained in:
cakipaul 2025-07-17 05:44:00 +08:00
parent b4d34bccb2
commit 72f00c821f
107 changed files with 1994 additions and 134 deletions

View File

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

View File

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

View File

@ -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")
}, {

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

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

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

View File

@ -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,谢谢方叔叔。,小小蝶,,
记得当年这箱麻将还是我弟弟背回来的。,记得当年这箱麻将还是我弟弟背回来的。,李氏,,
那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡...,那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡...,李氏,,
(轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。,(轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。,癞子,,
(苦笑)他呀,就是个死心眼,犟种!,(苦笑)他呀,就是个死心眼,犟种!,李氏,,
得了病就一直忍着,等到实在瞒不住了才告诉咱们!,得了病就一直忍着,等到实在瞒不住了才告诉咱们!,李氏,,
他认了命等死,咱们不能认,只要今晚赢了钱...,他认了命等死,咱们不能认,只要今晚赢了钱...,癞子,,
哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场!,哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场!,胖子,,
我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才...,我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才...,瞎子,,
(哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近...,(哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近...,胖子,,
最近怎么了?,最近怎么了?,李氏,,
碰。,碰。,瞎子,,
自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了?,自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了?,胖子,,
还真不好说。运气这玩意玄乎得很。,还真不好说。运气这玩意玄乎得很。,癞子,,
我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。,我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。,癞子,,
说是能“借”人家的命来延长自己的寿命...,说是能“借”人家的命来延长自己的寿命...,癞子,,
听着怪瘆人的。,听着怪瘆人的。,胖子,,
人外有人,天外有天。,人外有人,天外有天。,瞎子,,
天外还有什么...咱们这些闲杂人等也说了不算。,天外还有什么...咱们这些闲杂人等也说了不算。,瞎子,,
六万。,六万。,李氏,,
话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。,话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。,李氏,,
那叫香槟,洋人就喜欢整那些面子货,不适口。,那叫香槟,洋人就喜欢整那些面子货,不适口。,癞子,,
(啧)见多识广还得看王兄啊。,(啧)见多识广还得看王兄啊。,胖子,,
瞧这架势,以前没准多风光...,瞧这架势,以前没准多风光...,胖子,,
英雄不问出处。,英雄不问出处。,瞎子,,
都过去了,都过去了。,都过去了,都过去了。,癞子,,
为了跑出来,我们还睡过桥洞呢!,为了跑出来,我们还睡过桥洞呢!,李氏,,
(此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的...,(此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的...,李氏,,
你说的是外摆渡桥?,你说的是外摆渡桥?,胖子,,
应该是吧,我们再没回去过,也不知道后来成了什么样...,应该是吧,我们再没回去过,也不知道后来成了什么样...,癞子,,
(脏话)怎么一张牌都不来!,(脏话)怎么一张牌都不来!,胖子,,
八条,八条,瞎子,,
对了,小蝉那孩子有消息了吗?,对了,小蝉那孩子有消息了吗?,癞子,,
要是有消息,我也不会跟你们在这打牌,虚度光阴。,要是有消息,我也不会跟你们在这打牌,虚度光阴。,瞎子,,
方大哥,你这话说得不妥。,方大哥,你这话说得不妥。,李氏,,
咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。,咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。,李氏,,
找点乐子,何必想那么多。,找点乐子,何必想那么多。,胖子,,
我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。,我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。,李氏,,
要我说,还是得从身边的人下手。,要我说,还是得从身边的人下手。,李氏,,
指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。,指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。,癞子,,
...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。,...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。,胖子,,
他们一家人最近都不怎么出门,我看就是心里有鬼。,他们一家人最近都不怎么出门,我看就是心里有鬼。,胖子,,
把小孩骗走了换钱换药,搞邪术,什么都干得出来。,把小孩骗走了换钱换药,搞邪术,什么都干得出来。,胖子,,
这么一说,好像确实有点道理。,这么一说,好像确实有点道理。,癞子,,
我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。,我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。,李氏,,
我活了这么大岁数,也是第一次见。,我活了这么大岁数,也是第一次见。,李氏,,
道听途说而已。,道听途说而已。,瞎子,,
自摸!(笑),自摸!(笑),癞子,,
(脏话)不玩了不玩了,今天一把都没胡过!,(脏话)不玩了不玩了,今天一把都没胡过!,胖子,,
我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。,我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。,瞎子,,
天黑了,你们回去都小心着点。,天黑了,你们回去都小心着点。,李氏,,
嘶...,嘶...,癞子,,

1 keys zh_CN _character _notes _tags
8 Start again Start again (response)
9 End the conversation End the conversation (response)
10 For more information see the online documentation. For more information see the online documentation. Nathan
11 (看病费用涨价,为了攒钱让小蝶上学,) (看病费用涨价,为了攒钱让小蝶上学,) 陆仁
12 (小蝶想请小蝉来家里吃饭,写了请柬) (小蝶想请小蝉来家里吃饭,写了请柬) 小蝶
13 (父母让小蝶去送请柬,顺便带肉回家做饭) (父母让小蝶去送请柬,顺便带肉回家做饭) 陆仁
14 那个...方叔叔,小蝉在吗? [ID:] 那个...方叔叔,小蝉在吗? [ID:] 小小蝶
15 咳咳,她,咳咳,不在。 [ID:] 咳咳,她,咳咳,不在。 [ID:] 瞎子
16 她是生病了吗,好几天没见她了。 [ID:] 她是生病了吗,好几天没见她了。 [ID:] 小小蝶
17 她... [ID:] 她... [ID:] 瞎子
18 我挨家挨户地问啊,都说没看见她。 [ID:] 我挨家挨户地问啊,都说没看见她。 [ID:] 瞎子
19 一个活生生的小孩子,就这么找不见了... [ID:] 一个活生生的小孩子,就这么找不见了... [ID:] 瞎子
20 c03_理发店_癞子_8 我家那个昨天想拿推子给我剃头,差点给我开了瓢! 癞子
21 c03_理发店_癞子_9 你瞅瞅,这么长一道血印子!唉呀... 癞子
22 c03_理发店_瞎子_15 可不能这么说。 瞎子
23 c03_理发店_瞎子_16 弟妹这一手,没准是变相消了你的血光灾呢。 瞎子
24 c03_理发店_瞎子_17 逢凶化吉,灾消晦退,好日子还在后头。 瞎子
25 c03_理发店_癞子_10 哼,听你这么一说,好像确实有那么几分道理。 癞子
26 c03_理发店_癞子_11 不过这辫子留了这么多年,乍一找人剪了,心里还有点怪不是滋味儿。 癞子
27 c03_理发店_瞎子_18 怎么舍得剪了? 瞎子
28 c03_理发店_癞子_12 妇人家家的,不知道从哪打听到用男人的辫子入药能治病,一直念叨个不停。 癞子
29 c03_理发店_癞子_13 ...你听过这说法没有? 癞子
30 c03_理发店_瞎子_19 我不懂医,不好乱说。 瞎子
31 c03_理发店_癞子_14 最近街上也是彻底乱了套,那些人看见你留了“阴阳头”,就跟那闻着味儿的狗一样凑过来... 癞子
32 c03_理发店_癞子_15 哦,瞧我这记性,忘了你眼神不好,不爱出门。 癞子
33 c03_理发店_小小蝶_5 方叔叔,我来找小蝉玩儿,她在屋里吗? 小小蝶
34 c03_理发店_瞎子_20 她摔了一跤,还睡着呢,我喊她起来? 瞎子
35 c03_理发店_小小蝶_6 不用不用,我在这等一会儿就行。 小小蝶
36 c03_理发店_陆仁 方老弟,你正好给我家这小皮猴儿修修毛,成天跟个假小子似的,没个小姑娘样子。 陆仁
37 c03_理发店_瞎子_21 小孩子嘛,高高兴兴就好。 瞎子
38 c03_理发店_瞎子_22 你们也别在这干等,我去给你们拿些“洋点心”。 瞎子
39 c03_理发店_瞎子_23 说是什么舶来品,高级货,你们拿出尝尝,甜个嘴。 瞎子
40 c03_理发店_小小蝶_7 谢谢方叔叔。 小小蝶
41 记得当年这箱麻将还是我弟弟背回来的。 记得当年这箱麻将还是我弟弟背回来的。 李氏
42 那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡... 那天下了雨,他光着膀子回来,用衣裳包着,说木头怕水他不怕,就当免费洗了个澡... 李氏
43 (轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。 (轻笑一声)后来发现少了张牌,这小崽子又背着我们敲敲打打,硬是做了张一模一样的补上。 癞子
44 (苦笑)他呀,就是个死心眼,犟种! (苦笑)他呀,就是个死心眼,犟种! 李氏
45 得了病就一直忍着,等到实在瞒不住了才告诉咱们! 得了病就一直忍着,等到实在瞒不住了才告诉咱们! 李氏
46 他认了命等死,咱们不能认,只要今晚赢了钱... 他认了命等死,咱们不能认,只要今晚赢了钱... 癞子
47 哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场! 哟,人都来齐了怎么还在理麻将?今晚大家可得好好地打一场! 胖子
48 我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才... 我观张老弟面色晦暗、嘴唇发白,难不成是这些日子手气不佳,输多了牌才... 瞎子
49 (哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近... (哼)以前可不这样,不说牌桌通杀,也是赢多输少,偏偏最近... 胖子
50 最近怎么了? 最近怎么了? 李氏
51 碰。 碰。 瞎子
52 自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了? 自从那三楼的婆娘出了名以后,我这手气就臭得不行...怕不是让人给“借运”了? 胖子
53 还真不好说。运气这玩意玄乎得很。 还真不好说。运气这玩意玄乎得很。 癞子
54 我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。 我以前走南闯北的时候,见过一个会使邪门功夫的老爷子。 癞子
55 说是能“借”人家的命来延长自己的寿命... 说是能“借”人家的命来延长自己的寿命... 癞子
56 听着怪瘆人的。 听着怪瘆人的。 胖子
57 人外有人,天外有天。 人外有人,天外有天。 瞎子
58 天外还有什么...咱们这些闲杂人等也说了不算。 天外还有什么...咱们这些闲杂人等也说了不算。 瞎子
59 六万。 六万。 李氏
60 话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。 话又说回来,你们喝过洋酒没有?用葡萄发酵成的,红得发黑,度数还高。 李氏
61 那叫香槟,洋人就喜欢整那些面子货,不适口。 那叫香槟,洋人就喜欢整那些面子货,不适口。 癞子
62 (啧)见多识广还得看王兄啊。 (啧)见多识广还得看王兄啊。 胖子
63 瞧这架势,以前没准多风光... 瞧这架势,以前没准多风光... 胖子
64 英雄不问出处。 英雄不问出处。 瞎子
65 都过去了,都过去了。 都过去了,都过去了。 癞子
66 为了跑出来,我们还睡过桥洞呢! 为了跑出来,我们还睡过桥洞呢! 李氏
67 (此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的... (此处响起癞子的咳嗽声)那阵子我老是梦见让人剁了手指头,八成就是因为那桥是洋人建的... 李氏
68 你说的是外摆渡桥? 你说的是外摆渡桥? 胖子
69 应该是吧,我们再没回去过,也不知道后来成了什么样... 应该是吧,我们再没回去过,也不知道后来成了什么样... 癞子
70 (脏话)怎么一张牌都不来! (脏话)怎么一张牌都不来! 胖子
71 八条 八条 瞎子
72 对了,小蝉那孩子有消息了吗? 对了,小蝉那孩子有消息了吗? 癞子
73 要是有消息,我也不会跟你们在这打牌,虚度光阴。 要是有消息,我也不会跟你们在这打牌,虚度光阴。 瞎子
74 方大哥,你这话说得不妥。 方大哥,你这话说得不妥。 李氏
75 咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。 咱们哪个心里头不苦的?不都是在这牌桌上苦中作乐呢。 李氏
76 找点乐子,何必想那么多。 找点乐子,何必想那么多。 胖子
77 我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。 我这头生意都不做了,帮你满大街的又找又问,不也是白忙活一场。 李氏
78 要我说,还是得从身边的人下手。 要我说,还是得从身边的人下手。 李氏
79 指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。 指不定是被楼里的那个邻居拐了呢,就那么一丁点的小女孩,谁都能敲昏了抱回家去。 癞子
80 ...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。 ...我看她跟三楼那个叫什么小蝶的走得很近,老是手拉手出去,成天凑在一块说悄悄话。 胖子
81 他们一家人最近都不怎么出门,我看就是心里有鬼。 他们一家人最近都不怎么出门,我看就是心里有鬼。 胖子
82 把小孩骗走了换钱换药,搞邪术,什么都干得出来。 把小孩骗走了换钱换药,搞邪术,什么都干得出来。 胖子
83 这么一说,好像确实有点道理。 这么一说,好像确实有点道理。 癞子
84 我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。 我小弟去看过病了,那药方邪门得很,待会我拿给你们瞧瞧。 李氏
85 我活了这么大岁数,也是第一次见。 我活了这么大岁数,也是第一次见。 李氏
86 道听途说而已。 道听途说而已。 瞎子
87 自摸!(笑) 自摸!(笑) 癞子
88 (脏话)不玩了不玩了,今天一把都没胡过! (脏话)不玩了不玩了,今天一把都没胡过! 胖子
89 我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。 我也得早点回去,没准小蝉今儿个能回来,我总惦记着回去看看。 瞎子
90 天黑了,你们回去都小心着点。 天黑了,你们回去都小心着点。 李氏
91 嘶... 嘶... 癞子

View File

@ -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
# 打牌准备,整理麻将盒游戏成功(演出至麻将搬到桌上):

View File

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

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

View File

@ -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:准备好进入游戏

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1 @@
uid://cys8g55ahou1u

View File

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

View File

@ -0,0 +1 @@
uid://b1opm26eep8cw

View File

@ -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
$"../DeployLayer/癞子纸人/癞子纸人头套".hide()
closeup癞子纸人.enabled = false

View File

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

View File

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

View File

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

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