完善弹珠游戏

This commit is contained in:
cakipaul 2025-06-05 15:17:51 +08:00
parent 44e6920101
commit c10a9470df
63 changed files with 708 additions and 731 deletions

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cawpq7rnho5px"
path="res://.godot/imported/洞.png-966fe640ecc42fd45e1bd46377899638.ctex"
path="res://.godot/imported/洞.png-4b9f662fa1b15ce171b32301a2c981b5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/洞.png"
dest_files=["res://.godot/imported/洞.png-966fe640ecc42fd45e1bd46377899638.ctex"]
source_file="res://asset/art/gif/c02_小手/洞.png"
dest_files=["res://.godot/imported/洞.png-4b9f662fa1b15ce171b32301a2c981b5.ctex"]
[params]

View File

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

View File

@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bebgjc6t1arqr"
path="res://.godot/imported/水盆特写.png-7785ab04378ba468dbf3509897d90714.ctex"
uid="uid://oiswtv7jqcqy"
path="res://.godot/imported/水盆特写.png-18dcef2b274ca5d5520264a0fb265000.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/水盆特写.png"
dest_files=["res://.godot/imported/水盆特写.png-7785ab04378ba468dbf3509897d90714.ctex"]
source_file="res://asset/art/scene/c02/s06_二楼楼道/水盆特写.png"
dest_files=["res://.godot/imported/水盆特写.png-18dcef2b274ca5d5520264a0fb265000.ctex"]
[params]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bw32fmfjyd6jf"
path="res://.godot/imported/元宝.png-c1f8a81daa9916fc2a7a8c08d5e6cabe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/元宝.png"
dest_files=["res://.godot/imported/元宝.png-c1f8a81daa9916fc2a7a8c08d5e6cabe.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.9 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b5psce6mmucc3"
path="res://.godot/imported/小手_idle.png-bb6b10673a7daa8cc38feca24b12f6c9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手_idle.png"
dest_files=["res://.godot/imported/小手_idle.png-bb6b10673a7daa8cc38feca24b12f6c9.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: 3.0 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://da0fyixfmy0w4"
path="res://.godot/imported/小手_元宝_show.png-ac436d048509309b0c1fa257ec4b455f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手_元宝_show.png"
dest_files=["res://.godot/imported/小手_元宝_show.png-ac436d048509309b0c1fa257ec4b455f.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: 3.0 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cadoti5sjaly2"
path="res://.godot/imported/小手_玻璃珠_show.png-63e95ccb812ec0697668b796bf07a1b2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手_玻璃珠_show.png"
dest_files=["res://.godot/imported/小手_玻璃珠_show.png-63e95ccb812ec0697668b796bf07a1b2.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: 3.0 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfygthx56qdix"
path="res://.godot/imported/小手_纸杯_show.png-51a44b6a08b573a11da54507e55bb7e5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手_纸杯_show.png"
dest_files=["res://.godot/imported/小手_纸杯_show.png-51a44b6a08b573a11da54507e55bb7e5.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: 3.7 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://by5xehwr2y50m"
path="res://.godot/imported/小手_老虎钳_show.png-112bcfe2749aa6350cfb4b129d8e5dc3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手_老虎钳_show.png"
dest_files=["res://.godot/imported/小手_老虎钳_show.png-112bcfe2749aa6350cfb4b129d8e5dc3.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.9 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2eg2tf60mk63"
path="res://.godot/imported/小手(待机).png-93d7cb3bb312072478903fb2654369f3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/小手/小手(待机).png"
dest_files=["res://.godot/imported/小手(待机).png-93d7cb3bb312072478903fb2654369f3.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: 263 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://1jsvibtwb02n"
path="res://.godot/imported/bg_背景.png-b89ad5181b5cccbc0865463a9dad6ae8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/bg_背景.png"
dest_files=["res://.godot/imported/bg_背景.png-b89ad5181b5cccbc0865463a9dad6ae8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c71cbapdbd32g"
path="res://.godot/imported/前侧楼梯.png-d077484fc694763a15bfbbb57835baba.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/前侧楼梯.png"
dest_files=["res://.godot/imported/前侧楼梯.png-d077484fc694763a15bfbbb57835baba.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: 33 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dalbftdygcxg8"
path="res://.godot/imported/地面反光.png-3cb1875f6c357b0ae8f5d159eb4ee6dd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/地面反光.png"
dest_files=["res://.godot/imported/地面反光.png-3cb1875f6c357b0ae8f5d159eb4ee6dd.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: 315 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://brgxtky5ejish"
path="res://.godot/imported/水井(遮挡).png-b18e7ca98ef913ca7d5b8b6b19cfad6e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/水井(遮挡).png"
dest_files=["res://.godot/imported/水井(遮挡).png-b18e7ca98ef913ca7d5b8b6b19cfad6e.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: 70 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://5m36rt85krpv"
path="res://.godot/imported/火苗.png-74a173b6d4d812540032ac5b516402ae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/火苗.png"
dest_files=["res://.godot/imported/火苗.png-74a173b6d4d812540032ac5b516402ae.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: 29 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bbtgsle1b6r3h"
path="res://.godot/imported/药车.png-0c96532f35d2449ce0c6bf12c33055bd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/药车.png"
dest_files=["res://.godot/imported/药车.png-0c96532f35d2449ce0c6bf12c33055bd.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: 177 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://car54as8b1vwo"
path="res://.godot/imported/黄色背景烟.png-431d2a6c33fdf389499fb4a6c740cd06.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/火灾/黄色背景烟.png"
dest_files=["res://.godot/imported/黄色背景烟.png-431d2a6c33fdf389499fb4a6c740cd06.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: 444 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dybnw1hjwuna"
path="res://.godot/imported/空房间加裂缝红绳4.20.png-f3665bdc31855e02bbab3d3cb76cda2a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/空房间加裂缝红绳4.20.png"
dest_files=["res://.godot/imported/空房间加裂缝红绳4.20.png-f3665bdc31855e02bbab3d3cb76cda2a.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: 1.7 KiB

View File

@ -1,34 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ck43i3nulbmpm"
path="res://.godot/imported/探索空心ui.png-fa99c8e3e995614598deb7bf022f7160.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/ui/action_mark/探索空心ui.png"
dest_files=["res://.godot/imported/探索空心ui.png-fa99c8e3e995614598deb7bf022f7160.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://c27utrrbubglt"]
[ext_resource type="Script" uid="uid://1rtcvr1o5cy1" path="res://manager/audio_manager/audio_test.gd" id="1_csy6t"]
[ext_resource type="Script" uid="uid://1rtcvr1o5cy1" path="res://asset/audio/audio_test.gd" id="1_csy6t"]
[node name="AudioTestPanel" type="CanvasLayer"]
script = ExtResource("1_csy6t")

View File

@ -29,12 +29,12 @@
=> END
~ c01_s06_四个小孩画鬼差的对话
胖小孩: 画完了没有?你小子咋比秤砣还沉!
残疾小孩: 快了、快了。
跟班甲: 这是个啥?黑乎乎的,旁边还有两朵花。
残疾小孩: 非也,非也。谁规定神仙不能长成这样的?
胖小孩: 呸,神仙要是真长得这么丑,老子以后都倒立撒尿!
跟班乙: 嘶,总觉得好像在哪见过...
胖小孩: 画完了没有?你小子咋比秤砣还沉! [ID:c01_s06_四个小孩画鬼差的对话1]
残疾小孩: 快了、快了。 [ID:c01_s06_四个小孩画鬼差的对话2]
跟班甲: 这是个啥?黑乎乎的,旁边还有两朵花。 [ID:c01_s06_四个小孩画鬼差的对话3]
残疾小孩: 非也,非也。谁规定神仙不能长成这样的? [ID:c01_s06_四个小孩画鬼差的对话4]
胖小孩: 呸,神仙要是真长得这么丑,老子以后都倒立撒尿! [ID:c01_s06_四个小孩画鬼差的对话5]
跟班乙: 嘶,总觉得好像在哪见过... [ID:c01_s06_四个小孩画鬼差的对话6]
=> END
~ c01_s06_四个小孩_对话1

View File

@ -11,6 +11,11 @@ c02_李氏王赖子_耗子精10,“好了,其他的回去讲”,,王癞子,,[#
(小蝉说话),(小蝉说话),,,,
(胖子、瞎子来打断),(胖子、瞎子来打断),,,,
(告别),(告别),,,,
(你知道规则吗?),(你知道规则吗?),,,,
,,,,,
(这不可能!),(这不可能!),,,,
(游戏开始咯),(游戏开始咯),,,,
[wave amp=20.0 freq=5.0][shake rate=10.0 level=3] 把弹珠拿出来 [/wave][/shake],[wave amp=20.0 freq=5.0][shake rate=10.0 level=3] 把弹珠拿出来 [/wave][/shake],,,,
c02_吕萍_天暗,“天色变暗了”,,吕萍,,
c02_吕萍_井旁01,“这么冷的天,怎么这树的叶子还这么茂盛”,,吕萍,,[#wait=3]
c02_吕萍_井旁音效,...,,,,[#wait=2]
@ -124,17 +129,20 @@ c02_李氏王赖子_耗子精02,“(敲门游戏线索)”,,王癞子,,[#anonymo
(...),(...),,小蝉,,
c02_s03_敲门游戏,“(示例)理发上楼,看病上楼”,,???,,
(让玩家去寻找弹珠),(让玩家去寻找弹珠),,,,
(游戏开始咯),(游戏开始咯),,,,
(这不是我们说的弹珠),(这不是我们说的弹珠),,,,
(你知道规则吗?),(你知道规则吗?),,,,
,,,,,
(这不可能!),(这不可能!),,,,
把弹珠拿出来,把弹珠拿出来,,,,
你、你绝对不是第一次玩弹珠,你、你绝对不是第一次玩弹珠,,,,
这不可能...再来一次!,这不可能...再来一次!,,,,
我没输...你骗人!,我没输...你骗人!,,,,
这不可能!不不不...,这不可能!不不不...,,,,
我还有很多弹珠,玩到我赢为止!,我还有很多弹珠,玩到我赢为止!,,,,
碰到边界你就输了!,碰到边界你就输了!,,,,
(井边疯子对话),(井边疯子对话),,,,
(歌谣),(歌谣),,,,
(霸凌对话.),(霸凌对话.),,,,
(霸凌对话..),(霸凌对话..),,,,
(霸凌对话...),(霸凌对话...),,,,
c02_吕萍_玩具发光,“嗯?玩具在发光”,,吕萍,,
c02_s11_谢幕交谈1,(小蝉说话),,,,
c02_s11_谢幕交谈2,(胖子 瞎子来打断),,,,
c02_s11_谢幕交谈3,(告别),,,,
c02_s11_谢幕交谈1,(小蝉说话),,,,
c02_s11_谢幕交谈2,(胖子 瞎子来打断),,,,
c02_s11_谢幕交谈3,(告别),,,,

1 keys zh_CN en _character _notes _tags
11 (小蝉说话) (小蝉说话)
12 (胖子、瞎子来打断) (胖子、瞎子来打断)
13 (告别) (告别)
14 (你知道规则吗?) (你知道规则吗?)
15 () ()
16 (这不可能!) (这不可能!)
17 (游戏开始咯) (游戏开始咯)
18 [wave amp=20.0 freq=5.0][shake rate=10.0 level=3] 把弹珠拿出来 [/wave][/shake] [wave amp=20.0 freq=5.0][shake rate=10.0 level=3] 把弹珠拿出来 [/wave][/shake]
19 c02_吕萍_天暗 “天色变暗了” 吕萍
20 c02_吕萍_井旁01 “这么冷的天,怎么这树的叶子还这么茂盛” 吕萍 [#wait=3]
21 c02_吕萍_井旁音效 ... [#wait=2]
129 (歌谣) 我还有很多弹珠,玩到我赢为止! (歌谣) 我还有很多弹珠,玩到我赢为止!
130 (霸凌对话.) 碰到边界你就输了! (霸凌对话.) 碰到边界你就输了!
131 (霸凌对话..) (井边疯子对话) (霸凌对话..) (井边疯子对话)
(霸凌对话...) (霸凌对话...)
132 c02_吕萍_玩具发光 (歌谣) “嗯?玩具在发光” (歌谣) 吕萍
133 c02_s11_谢幕交谈1 (霸凌对话.) (小蝉说话) (霸凌对话.)
134 c02_s11_谢幕交谈2 (霸凌对话..) (胖子 瞎子来打断) (霸凌对话..)
135 c02_s11_谢幕交谈3 (霸凌对话...) (告别) (霸凌对话...)
136 c02_吕萍_玩具发光 “嗯?玩具在发光” 吕萍
137 c02_s11_谢幕交谈1 (小蝉说话)
138 c02_s11_谢幕交谈2 (胖子 瞎子来打断)
139 c02_s11_谢幕交谈3 (告别)
140
141
142
143
144
145
146
147
148

View File

@ -299,31 +299,43 @@
(让玩家去寻找弹珠)
=> END
# 开始游戏
~ c02_s05_三男孩弹珠游戏2
(游戏开始咯)
=> END
# 无法游戏
~ c02_s05_三男孩弹珠游戏3
~ c02_s05_三男孩弹珠游戏2
(这不是我们说的弹珠)
=> END
# 游戏intro
~ c02_弹珠游戏0
把弹珠拿出来
=> END!
# 游戏阶段1
~ c02_弹珠游戏1
(你知道规则吗?)
你、你绝对不是第一次玩弹珠
=> END
# 游戏阶段2
~ c02_弹珠游戏2
这不可能...再来一次!
=> END
# 游戏阶段5
~ c02_弹珠游戏5
(这不可能!)
# 游戏阶段3
~ c02_弹珠游戏3
我没输...你骗人!
这不可能!不不不...
=> END
# 游戏尾声
~ c02_弹珠游戏4
我还有很多弹珠,玩到我赢为止!
=> END
# 游戏失败
~ c02_弹珠游戏fail
碰到边界你就输了!
=> END!
~ c02_s11_井边疯子对话
(井边疯子对话)
=> END

View File

@ -162,40 +162,4 @@
没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移]
绳子和剪刀 [ID:c02_绳子剪刀]
这个玩具缺了个脑袋 [ID:c02_玩具缺脑袋]
又是那张寻人启示 [ID:c02_又是寻人启示]
墙上的海报被撕掉了 [ID:c02_墙上的海报被撕掉了]
井里有一股臭味 [ID:c02_井臭]
车上放了一些中药材 [ID:c02_中药材]
排队的人堵住了上楼的路 [ID:c02_排队]
最好还是先不要出去 [ID:c02_不要出去]
太阳快落山了 [ID:c02_太阳]
民国六年十月十五日 [ID:c02_民国六年1015]
一个洞,里面好像还有空间 [ID:c02_一个洞]
工具箱 [ID:c02_工具箱]
应该能找到有用的东西 [ID:c02_找到有用的东西]
公寓告示 [ID:c02_公寓告示]
通往里间的门 [ID:c02_通往里间的门]
花名册 [ID:c02_花名册]
罪 [ID:c02_罪]
门上有什么东西 [ID:c02_门上有什么东西]
奠 [ID:c02_奠]
失踪的小孩名叫夏小蝉 [ID:c02_寻夏小蝉]
小猫的尸体已经干了 [ID:c02_小猫干尸]
几块大洋 [ID:c02_几块大洋]
死掉的老鼠 [ID:c02_死老鼠]
石缝里开了几束花 [ID:c02_石缝开花]
石壁另一头好像还有空间 [ID:c02_石壁空间]
民国六年十二月二十一日 [ID:c02_民国六年1221]
一些患者的感谢信 [ID:c02_患者感谢信]
一本被撕掉的书 [ID:c02_被撕掉的书]
里面有什么东西 [ID:c02_里面有什么东西]
戏台上面刻了一首诗 [ID:c02_戏台上的诗]
锁开了 [ID:c02_锁开了]
口袋里有东西 [ID:c02_口袋里有东西]
雾太大了,看不清路 [ID:c02_雾太大]
是个八音盒 [ID:c02_八音盒]
祝女儿早日康复 [ID:c02_祝女儿早日康复]
这图案和我手臂上的一摸一样 [ID:c02_图案一样]
=> END

View File

@ -176,6 +176,11 @@ bag={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":66,"key_label":0,"unicode":98,"location":0,"echo":false,"script":null)
]
}
space={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
]
}
[internationalization]

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=14 format=3 uid="uid://61pis75a8fdq"]
[gd_scene load_steps=13 format=3 uid="uid://61pis75a8fdq"]
[ext_resource type="Script" uid="uid://b2dvvhawm820r" path="res://scene/entity/portal.gd" id="1_jyh6v"]
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="2_1sj6c"]
[ext_resource type="Texture2D" uid="uid://bc4lpa8aao60n" path="res://asset/art/ui/action_mark/传送.png" id="2_ay30q"]
[ext_resource type="Texture2D" uid="uid://r0n7qy4kr3w2" path="res://asset/art/ui/action_mark/UI场景切换.png" id="2_bxihn"]
[ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="2_fr7ak"]
@ -55,7 +54,7 @@ enabled = false
[node name="Sprite2D" parent="Sign/TextureContainer" index="0"]
position = Vector2(0, 10)
texture = ExtResource("2_1sj6c")
texture = ExtResource("2_bxihn")
[node name="PointLight2D" type="PointLight2D" parent="."]
unique_name_in_owner = true

View File

@ -54,10 +54,10 @@ func _on_ground_ready() -> void:
counter.visible = false
madman_ambush = $"../DeployLayer/Ambush井边疯子"
# c02_madman_hitwall 之后, c02_ball_game_stage==2(游戏结束) 之前
# c02_madman_hitwall 之后, c02_ball_game_stage==3(游戏结束) 之前
if (
ArchiveManager.get_global_value("c02_madman_hitwall")
and ArchiveManager.get_global_value("c02_ball_game_stage", 0) < 2
and ArchiveManager.get_global_value("c02_ball_game_stage", 0) < 3
):
madman_ambush.visible = true
madman_ambush.enabled = true
@ -66,7 +66,7 @@ func _on_ground_ready() -> void:
bully_layer = $"../DeployLayer/霸凌"
burning_layer = $"../DeployLayer/火灾"
if ArchiveManager.get_global_value("c02_ball_game_stage", 0) >= 2:
if ArchiveManager.get_global_value("c02_ball_game_stage", 0) >= 3:
_setup_bully_or_burning()
small_shoe = $"../DeployLayer/Pickable小鞋子" as Pickable2D

View File

@ -31,10 +31,10 @@ func _on_ground_ready() -> void:
closeup_ball = $"../DeployLayer/Closeup弹珠游戏" as Closeup2D
ball_game_boys_ambush = $"../DeployLayer/Ambush三男孩"
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:游戏结束
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
if (
ArchiveManager.get_global_value("c02_the_blind_room_entered", false)
and ArchiveManager.get_global_value("c02_ball_game_stage", 0) < 2
and ArchiveManager.get_global_value("c02_ball_game_stage", 0) < 3
):
# 进入瞎子卧室后,可开始弹珠游戏
ball_game_boys_ambush.enabled = true
@ -72,7 +72,7 @@ func _on_mice_hole_interacted():
func boys_ball_game() -> void:
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:游戏结束
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
var stage = ArchiveManager.get_global_value("c02_ball_game_stage", 0)
if stage == 0:
ArchiveManager.set_global_entry("c02_ball_game_stage", 1)
@ -81,24 +81,19 @@ func boys_ball_game() -> void:
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s05_三男孩弹珠游戏1")
await DialogueManager.dialogue_ended
SceneManager.release_player()
elif stage == 1:
var start_game = false
elif stage == 1 or stage == 2:
SceneManager.freeze_player(0)
if SceneManager.get_current_prop(false) != "prop_弹珠":
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s05_三男孩弹珠游戏3")
if stage == 1 and SceneManager.get_current_prop(false) != "prop_弹珠":
var hud = SceneManager.get_prop_hud() as PropHud
hud.on_toggle_invalid_prop()
else:
# 开始弹珠游戏
start_game = true
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s05_三男孩弹珠游戏2")
await DialogueManager.dialogue_ended
SceneManager.release_player()
if start_game:
else:
# 进入弹珠游戏
closeup_ball.exit.connect(_on_ball_game_exit)
closeup_ball.display()
# closeup_ball.enabled = false
SceneManager.release_player()
func _on_ball_game_exit(success = null):

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=23 format=3 uid="uid://cootarwb44vvh"]
[gd_scene load_steps=24 format=3 uid="uid://cootarwb44vvh"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qkymk"]
[ext_resource type="Script" uid="uid://cbt0ubygchxvv" path="res://scene/ground/scene/c02/s06_animation.gd" id="2_4dg6u"]
@ -17,6 +17,7 @@
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="14_k01ve"]
[ext_resource type="SpriteFrames" uid="uid://3nas025c2c5u" path="res://asset/art/gif/c02_杂项/frames.tres" id="14_och2w"]
[ext_resource type="SpriteFrames" uid="uid://b0icyhxpj16tv" path="res://asset/art/gif/c02_谢幕演出/frames.tres" id="15_k01ve"]
[ext_resource type="PackedScene" uid="uid://trkypc4gox20" path="res://scene/ground/script/c02/水盆特写.tscn" id="16_p6da7"]
[sub_resource type="Animation" id="Animation_k01ve"]
length = 0.001
@ -301,6 +302,7 @@ position = Vector2(167, 38)
enabled = false
trigger_mode = "interact"
one_shot = false
freeze_time = 0.1
hook_method = "boys_ball_game"
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/DeployLayer/Ambush三男孩"]
@ -312,10 +314,14 @@ frame = 6
frame_progress = 0.121203
[node name="Closeup弹珠游戏" parent="Ground/DeployLayer" index="10" instance=ExtResource("11_owxx3")]
position = Vector2(1260, 2)
position = Vector2(136, -319)
packed_scene = ExtResource("12_intre")
[node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="11"]
[node name="Closeup水盆" parent="Ground/DeployLayer" index="11" instance=ExtResource("11_owxx3")]
position = Vector2(289, 16)
packed_scene = ExtResource("16_p6da7")
[node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="12"]
visible = false
[node name="胖子" type="AnimatedSprite2D" parent="Ground/DeployLayer/c02_final"]

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=16 format=3 uid="uid://xovlfee503a4"]
[ext_resource type="Texture2D" uid="uid://cawpq7rnho5px" path="res://asset/art/scene/c02/小手/洞.png" id="1_47cqy"]
[ext_resource type="Texture2D" uid="uid://cawpq7rnho5px" path="res://asset/art/gif/c02_小手/洞.png" id="1_47cqy"]
[ext_resource type="Script" uid="uid://my5xqi3bkka6" path="res://scene/ground/script/c02/小手讨东西.gd" id="1_n7thl"]
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="2_40dr6"]
[ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="3_lr23o"]

View File

@ -0,0 +1,17 @@
[gd_scene load_steps=3 format=3 uid="uid://trkypc4gox20"]
[ext_resource type="Script" uid="uid://dnrql1t0j6v8i" path="res://scene/ground/script/c02/通用特写脚本.gd" id="1_rdtwt"]
[ext_resource type="Texture2D" uid="uid://oiswtv7jqcqy" path="res://asset/art/scene/c02/s06_二楼楼道/水盆特写.png" id="2_h4mql"]
[node name="水盆特写" type="CanvasLayer"]
script = ExtResource("1_rdtwt")
[node name="TextureRect" type="TextureRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_h4mql")
expand_mode = 5
stretch_mode = 5

View File

@ -1,22 +0,0 @@
extends CanvasLayer
signal exit(success: bool)
# @onready var button = $TextureButton as TextureButton
# var texture_dict = {
# "0": preload("res://asset/art/scene/c02/s04_保卫科/花名册/花名册封皮.png"),
# "1": preload("res://asset/art/scene/c02/s04_保卫科/花名册/翻开页.png"),
# }
# var current_texture = 0
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME
# button.pressed.connect(_on_button_pressed)
# func _on_button_pressed() -> void:
# current_texture = wrapi(current_texture + 1, 0, 2)
# button.texture_normal = texture_dict[str(current_texture)]
# button.set_anchors_preset(Control.PRESET_CENTER)

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://cdf2qe8l7323i"]
[ext_resource type="Script" uid="uid://dnrql1t0j6v8i" path="res://scene/ground/script/c02/老鼠精画像.gd" id="1_lpmq3"]
[ext_resource type="Script" uid="uid://dnrql1t0j6v8i" path="res://scene/ground/script/c02/通用特写脚本.gd" id="1_lpmq3"]
[ext_resource type="Texture2D" uid="uid://cypvxj1vsl5yk" path="res://asset/art/scene/c02/s04_保卫科/花名册/bg_花名册桌面.png" id="2_l77sh"]
[ext_resource type="Texture2D" uid="uid://sx3i3lkt2vfd" path="res://asset/art/scene/c02/s04_保卫科/花名册/花名册封皮.png" id="3_sdpps"]

View File

@ -0,0 +1,6 @@
extends CanvasLayer
signal exit(success: bool)
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME

View File

@ -5,7 +5,7 @@ extends RigidBody2D
signal hit_ball
signal hit_boundary
@export_enum("1", "2", "3") var id := "1":
@export_enum("1", "2", "3", "4", "5", "6", "7") var id := "1":
set(value):
id = value
if Engine.is_editor_hint() and is_node_ready():
@ -35,12 +35,32 @@ const texture_dict = {
func _ready() -> void:
if is_shooter:
linear_damp = 0
contact_monitor = true
max_contacts_reported = 1
_set_up_texture()
body_entered.connect(_on_body_entered)
func dispatch(origin_pos: Vector2):
visible = true
modulate.a = 0.3
var target_pos = position
position = origin_pos
collision_shape.disabled = true
var tween = create_tween()
tween.tween_property(self, "modulate:a", 1.0, 0.4)
tween.parallel().tween_property(self, "rotation", 4.0, 0.8).set_ease(Tween.EASE_IN_OUT)
tween.parallel().tween_property(self, "position", target_pos, 0.8).set_ease(Tween.EASE_IN_OUT)
tween.tween_callback(func(): collision_shape.disabled = false)
func hide_away():
visible = false
collision_shape.disabled = true
func rand_id():
# 随机 id
var rand = randi() % 3 + 1
@ -56,7 +76,8 @@ var recycling = false
func _on_body_entered(node: Node):
print("hit node", node.get_path())
if GlobalConfig.DEBUG:
print("[debug] hit node", node.get_path())
if recycling or not is_shooter:
return
recycling = true

View File

@ -19,6 +19,7 @@ collision_mask = 128
gravity_scale = 0.0
contact_monitor = true
max_contacts_reported = 1
linear_damp = 5.0
script = ExtResource("2_ni48t")
id = "2"

View File

@ -0,0 +1,7 @@
extends Node2D
func _ready() -> void:
if Engine.is_editor_hint():
return
for b in get_children():
b.add_to_group(name)

View File

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

View File

@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3 uid="uid://d0tuv2dtlosfe"]
[ext_resource type="PackedScene" uid="uid://bbcfjksjlyfx5" path="res://scene/little_game/弹珠游戏/ball.tscn" id="1_1yk24"]
[ext_resource type="Script" uid="uid://b4c1x33s0w2mm" path="res://scene/little_game/弹珠游戏/balls.gd" id="1_1yw0s"]
[node name="Balls0" type="Node2D"]
y_sort_enabled = true
script = ExtResource("1_1yw0s")
[node name="Ball" parent="." instance=ExtResource("1_1yk24")]
y_sort_enabled = true
position = Vector2(281, 149)
scale = Vector2(1.185, 1.185)
collision_layer = 132
id = "3"

View File

@ -0,0 +1,28 @@
[gd_scene load_steps=3 format=3 uid="uid://cv12saxinfoi7"]
[ext_resource type="Script" uid="uid://b4c1x33s0w2mm" path="res://scene/little_game/弹珠游戏/balls.gd" id="1_7ej7k"]
[ext_resource type="PackedScene" uid="uid://bbcfjksjlyfx5" path="res://scene/little_game/弹珠游戏/ball.tscn" id="1_a2gi7"]
[node name="Balls1" type="Node2D"]
y_sort_enabled = true
script = ExtResource("1_7ej7k")
[node name="Ball" parent="." instance=ExtResource("1_a2gi7")]
y_sort_enabled = true
position = Vector2(266, 107)
scale = Vector2(1.185, 1.185)
collision_layer = 132
[node name="Ball2" parent="." instance=ExtResource("1_a2gi7")]
y_sort_enabled = true
position = Vector2(342, 120)
scale = Vector2(1.2175, 1.2175)
collision_layer = 132
id = "3"
[node name="Ball3" parent="." instance=ExtResource("1_a2gi7")]
y_sort_enabled = true
position = Vector2(217, 158)
scale = Vector2(1.2275, 1.2275)
collision_layer = 132
id = "1"

View File

@ -0,0 +1,42 @@
[gd_scene load_steps=3 format=3 uid="uid://dr0rwr0xjgnjw"]
[ext_resource type="PackedScene" uid="uid://bbcfjksjlyfx5" path="res://scene/little_game/弹珠游戏/ball.tscn" id="1_capi7"]
[ext_resource type="Script" uid="uid://b4c1x33s0w2mm" path="res://scene/little_game/弹珠游戏/balls.gd" id="1_qtgyt"]
[node name="Balls2" type="Node2D"]
y_sort_enabled = true
script = ExtResource("1_qtgyt")
[node name="Ball" parent="." instance=ExtResource("1_capi7")]
y_sort_enabled = true
position = Vector2(353, 122)
scale = Vector2(1.185, 1.185)
collision_layer = 132
id = "1"
[node name="Ball2" parent="." instance=ExtResource("1_capi7")]
y_sort_enabled = true
position = Vector2(417, 119)
scale = Vector2(1.2175, 1.2175)
collision_layer = 132
[node name="Ball3" parent="." instance=ExtResource("1_capi7")]
y_sort_enabled = true
position = Vector2(129, 129)
scale = Vector2(1.2275, 1.2275)
collision_layer = 132
id = "3"
[node name="Ball4" parent="." instance=ExtResource("1_capi7")]
y_sort_enabled = true
position = Vector2(206, 92)
scale = Vector2(1.2175, 1.2175)
collision_layer = 132
id = "4"
[node name="Ball6" parent="." instance=ExtResource("1_capi7")]
y_sort_enabled = true
position = Vector2(323, 89)
scale = Vector2(1.2275, 1.2275)
collision_layer = 132
id = "6"

View File

@ -2,33 +2,132 @@ extends CanvasLayer
signal exit(success)
@onready var animation_player = $AnimationPlayer as AnimationPlayer
@onready var pivot = $Pivot as Node2D
@onready var hand_pivot = $Pivot/HandPivot as Node2D
@onready var audio_player = %AudioStreamPlayer as AudioStreamPlayer
@onready var label = %RichTextLabel as RichTextLabel
var dialogue_c02 = preload("res://asset/dialogue/c02.dialogue")
var balls_scene_dict = {
0: preload("uid://d0tuv2dtlosfe"),
1: preload("uid://cv12saxinfoi7"),
2: preload("uid://dr0rwr0xjgnjw"),
}
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME
hand_pivot.modulate.a = 0
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
if ArchiveManager.get_global_value("c02_ball_game_stage", 0) == 2:
checkout_round(0)
# checkout_round(2)
else:
intro()
label.hide()
func intro():
round_id = -1
# 关闭所有碰撞
for i in range(3):
var balls_name = "Balls" + str(i)
get_node(balls_name).visible = false
get_tree().call_group(balls_name, "hide_away")
pivot.get_child(0).modulate.a = 0
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏0")
await dialogue_ended
func intro_finished():
SceneManager.disable_prop_item("prop_弹珠")
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
# 放入弹珠,开始游戏
ArchiveManager.set_global_entry("c02_ball_game_stage", 2)
var ball = pivot.get_child(0) as RigidBody2D
ball.angular_velocity = 20
animation_player.play("give_ball")
await animation_player.animation_finished
# 开始弹珠游戏
checkout_round(0)
var round_ready = false
var round_id := 0 #-1:intro; 0, 1, 2
var hit_count = 0
var shooting = false
func checkout_round(r: int):
round_id = r
# 关闭所有碰撞
for i in range(3):
var balls_name = "Balls" + str(i)
get_node(balls_name).visible = false
get_tree().call_group(balls_name, "hide_away")
reload_round()
# 重置当前回合 introduce是否播放回合 dialogue
func reload_round():
# 重置参数
round_ready = false
hit_count = 0
hand_pivot.modulate.a = 0
# 重新加载 balls
var balls_name = "Balls" + str(round_id)
var old_balls = get_node(balls_name)
remove_child(old_balls)
old_balls.queue_free()
var new_balls = balls_scene_dict[round_id].instantiate()
new_balls.name = balls_name
add_child(new_balls)
new_balls.z_index = 2
get_tree().call_group(balls_name, "hide_away")
# 分散 balls
animation_player.play("dispatch_balls")
await animation_player.animation_finished
# 加载手中的球
reload_hand_ball()
wave_hand()
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_弹珠游戏1")
round_ready = true
func reload() -> void:
func do_dispatch_balls():
var balls_name = "Balls" + str(round_id)
get_tree().call_group(balls_name, "dispatch", Vector2(296.0, 102.0))
func reload_hand_ball() -> void:
shooting = false
# 重新加载
var ball_scene = preload("res://scene/little_game/弹珠游戏/ball.tscn")
var ball = ball_scene.instantiate()
ball.is_shooter = true
var old_ball = pivot.get_node_or_null("Ball")
if old_ball:
pivot.remove_child(old_ball)
old_ball.queue_free()
pivot.add_child(ball)
pivot.move_child(ball, 0)
ball.rand_id()
ball.name = "Ball"
# ball.rand_id()
ball.hit_ball.connect(_on_hit_ball)
ball.hit_boundary.connect(_on_hit_boundary)
var wave_tween: Tween
var shooting = false
func wave_hand() -> void:
hand_pivot.visible = true
if hand_pivot.modulate.a < 1:
create_tween().tween_property(hand_pivot, "modulate:a", 1.0, 0.5)
# 转动 pivot
if wave_tween:
if not wave_tween.is_running():
@ -63,8 +162,9 @@ func wave_hand() -> void:
wave_tween.set_loops(9999999)
# interactE 与 spacebar 都可以 shoot
func shoot() -> void:
if shooting:
if not round_ready or shooting or round_id < 0:
return
shooting = true
# 触发射击事件
@ -74,44 +174,120 @@ func shoot() -> void:
var direction = Vector2(0, -1).rotated(hand_pivot.rotation)
ball.linear_velocity = direction * 200
ball.angular_velocity = 20.0
ball.hit_ball.connect(_on_hit_ball)
ball.hit_boundary.connect(_on_hit_boundary)
var hit_count = 0
create_tween().tween_property(hand_pivot, "modulate:a", 0.0, 0.5)
func _on_hit_ball():
print("_on_hit_ball")
reload()
reload_hand_ball()
hit_count += 1
if round_id == 0:
round_ready = false
_success_dialogue()
await dialogue_ended
checkout_round(1)
elif round_id == 1 and hit_count >= 3:
round_ready = false
_success_dialogue()
await dialogue_ended
checkout_round(2)
elif round_id == 2 and hit_count >= 5:
round_ready = false
await dialogue_ended
game_over()
else:
wave_hand()
shooting = false
hit_count += 1
if hit_count >= 2:
# 触发游戏结束
print("round 1 game over")
hit_count = 0
game_over()
func _success_dialogue():
match round_id:
0:
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏1")
1:
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏2")
2:
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏3")
func _on_hit_boundary():
# 重开游戏
print("hit boundary, restart")
reload()
if round_id > 0:
# 后面的回合必须每次都击中球
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏fail")
await dialogue_ended
reload_round()
else:
reload_hand_ball()
wave_hand()
shooting = false
func game_over() -> void:
#TODO 弹珠雨
DialogueManager.show_dialogue_balloon_scene(self, dialogue_c02, "c02_弹珠游戏4")
await dialogue_ended
exit.emit(true)
# 0:默认 1:寻找弹珠(老虎钳可以换弹珠) 2:给出弹珠 3:游戏结束
ArchiveManager.set_global_entry("c02_ball_game_stage", 3)
SceneManager.disable_prop_item("prop_弹珠")
SceneManager.pop_debug_dialog_info("弹珠", "游戏关卡待完善")
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("interact"):
if round_id == -1:
# intro 阶段,给出弹珠
var hud = SceneManager.get_prop_hud() as PropHud
if SceneManager.get_current_prop(false) != "prop_弹珠":
hud.on_toggle_invalid_prop()
else:
intro_finished()
else:
shoot()
get_viewport().set_input_as_handled()
elif event.is_action_pressed("space"):
if round_id >= 0:
shoot()
get_viewport().set_input_as_handled()
func game_over() -> void:
exit.emit(true)
# 0:默认; 1:寻找弹珠(老虎钳可以换弹珠) 2:游戏结束
ArchiveManager.set_global_entry("c02_ball_game_stage", 2)
SceneManager.disable_prop_item("prop_弹珠")
SceneManager.pop_debug_dialog_info("弹珠", "游戏关卡待完善")
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_弹珠游戏5")
signal dialogue_ended
## The current line
var dialogue_line: DialogueLine:
set(value):
if value:
dialogue_line = value
apply_dialogue_line()
get:
return dialogue_line
func start(
dialogue_resource: DialogueResource, title: String, extra_game_states: Array = []
) -> void:
var temporary_game_states = [self] + extra_game_states
self.dialogue_line = await dialogue_resource.get_next_dialogue_line(
title, temporary_game_states
)
## Apply any changes to the balloon given a new [DialogueLine].
func apply_dialogue_line() -> void:
var translation_key = dialogue_line.translation_key
label.text = ("[wave amp=20.0 freq=5.0][shake rate=10.0 level=3] " + tr(translation_key))
label.show()
# 因为版权问题,有些 mp3 文件打不开,所以使用 ogg 格式
var audio_path = "res://asset/audio/peiyin/ogg/%s.ogg" % translation_key
if FileAccess.file_exists(audio_path):
var stream = load(audio_path)
audio_player.stream = stream
audio_player.play()
await audio_player.finished
await get_tree().create_timer(1.0).timeout
else:
push_warning("No audio file found for " + translation_key)
await get_tree().create_timer(3.0).timeout
label.hide()
dialogue_ended.emit()

View File

@ -1,9 +1,229 @@
[gd_scene load_steps=6 format=3 uid="uid://cjx7o685ox8c1"]
[gd_scene load_steps=17 format=3 uid="uid://cjx7o685ox8c1"]
[ext_resource type="Script" uid="uid://c5s4giu182isu" path="res://scene/little_game/弹珠游戏/弹珠游戏.gd" id="1_p2trd"]
[ext_resource type="Texture2D" uid="uid://bvf8b057baglw" path="res://asset/art/little_game/弹珠/bg_弹珠游戏.png" id="2_bm1k0"]
[ext_resource type="Texture2D" uid="uid://bs4tp4amd1kkm" path="res://asset/art/little_game/弹珠/抱手.png" id="3_3kvx4"]
[ext_resource type="PackedScene" uid="uid://bbcfjksjlyfx5" path="res://scene/little_game/弹珠游戏/ball.tscn" id="4_bm1k0"]
[ext_resource type="Texture2D" uid="uid://btplp6xvmc6sx" path="res://asset/art/little_game/弹珠/手屈伸/0.png" id="4_fk3jp"]
[ext_resource type="Texture2D" uid="uid://cny2ovcg2ry7c" path="res://asset/art/little_game/弹珠/瞄准线.png" id="4_plt4v"]
[ext_resource type="Texture2D" uid="uid://jv6fjt5fa68l" path="res://asset/art/little_game/弹珠/手屈伸/1.png" id="5_dowov"]
[ext_resource type="PackedScene" uid="uid://d0tuv2dtlosfe" path="res://scene/little_game/弹珠游戏/balls_0.tscn" id="5_obeip"]
[ext_resource type="PackedScene" uid="uid://cv12saxinfoi7" path="res://scene/little_game/弹珠游戏/balls_1.tscn" id="6_ymk37"]
[ext_resource type="PackedScene" uid="uid://dr0rwr0xjgnjw" path="res://scene/little_game/弹珠游戏/balls_2.tscn" id="7_oii6q"]
[sub_resource type="Animation" id="Animation_3kvx4"]
resource_name = "dispatch_balls"
length = 3.0
tracks/0/type = "method"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1.1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"do_dispatch_balls"
}]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Boy/BoyHand:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(308, 0), Vector2(307, 88)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Boy/BoyHand:frame")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [0, 1]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Boy/BoyHand:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 1.26667, 1.9),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_fk3jp"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Boy/BoyHand:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(307, 88)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Boy/BoyHand:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Boy/BoyHand:modulate")
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, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Pivot/Ball:position")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Boy/BoyHands: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("Boy/BoyHands:position")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(283, 61)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Pivot/Ball:modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_dowov"]
resource_name = "give_ball"
length = 3.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Pivot/Ball:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1.06667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, -190)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Boy/BoyHands:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.966667, 1.2, 2, 2.43333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Boy/BoyHands:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.833333, 1.3, 1.93333, 2.13333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Vector2(283, 61), Vector2(283, 40), Vector2(283, 61), Vector2(283, 61), Vector2(283, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Pivot/Ball:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.366667, 0.533333, 0.933333, 1.13333),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_fk3jp"]
_data = {
&"RESET": SubResource("Animation_fk3jp"),
&"dispatch_balls": SubResource("Animation_3kvx4"),
&"give_ball": SubResource("Animation_dowov")
}
[sub_resource type="SpriteFrames" id="SpriteFrames_jur7x"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("4_fk3jp")
}, {
"duration": 1.0,
"texture": ExtResource("5_dowov")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_bm1k0"]
radius = 300.0
@ -12,6 +232,7 @@ radius = 300.0
script = ExtResource("1_p2trd")
[node name="TextureRect" type="TextureRect" parent="."]
z_index = -1
offset_left = -4.0
offset_right = 1724.0
offset_bottom = 951.0
@ -20,6 +241,58 @@ size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("2_bm1k0")
[node name="MarginContainer" type="MarginContainer" parent="."]
z_index = 10
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -100.0
offset_top = -1.0
offset_right = 100.0
offset_bottom = 78.0
grow_horizontal = 2
theme_override_constants/margin_top = 52
[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(300, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_colors/default_color = Color(0.856067, 0.856067, 0.856067, 1)
theme_override_colors/font_outline_color = Color(0.401628, 0.253369, 0.0745033, 1)
theme_override_constants/outline_size = 5
theme_override_font_sizes/normal_font_size = 20
bbcode_enabled = true
text = "[wave amp=20.0 freq=5.0 connected=1][shake rate=10.0 level=3 connected=1]弹珠拿出来[/shake][/wave]"
fit_content = true
horizontal_alignment = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="MarginContainer"]
unique_name_in_owner = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_fk3jp")
}
[node name="Boy" type="Node2D" parent="."]
z_index = 1
[node name="BoyHands" type="Sprite2D" parent="Boy"]
modulate = Color(1, 1, 1, 0)
z_index = 3
position = Vector2(283, 61)
texture = ExtResource("3_3kvx4")
[node name="BoyHand" type="AnimatedSprite2D" parent="Boy"]
modulate = Color(1, 1, 1, 0)
position = Vector2(307, 88)
sprite_frames = SubResource("SpriteFrames_jur7x")
[node name="Marker2D" type="Marker2D" parent="Boy"]
position = Vector2(296, 102)
[node name="Area2D" type="Area2D" parent="."]
position = Vector2(274, 158)
collision_layer = 128
@ -36,15 +309,17 @@ collision_layer = 128
collision_mask = 128
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="StaticBody2D"]
position = Vector2(18, 53)
position = Vector2(17, 50)
build_mode = 1
polygon = PackedVector2Array(116, 41, 144, 48, 175, 41, 207, 25, 242, 25, 263, 37, 296, 41, 313, 26, 354, 24, 396, 45, 425, 47, 445, 45, 485, 71, 512, 108, 510, 142, 480, 168, 416, 201, 325, 225, 272, 229, 170, 218, 102, 197, 36, 145, 37, 103, 69, 70)
polygon = PackedVector2Array(117, 43, 144, 47, 175, 41, 208, 27, 234, 24, 262, 22, 289, 22, 314, 24, 355, 26, 396, 45, 425, 47, 445, 45, 489, 69, 522, 104, 517, 141, 488, 169, 416, 201, 330, 221, 273, 225, 173, 210, 101, 189, 36, 145, 35, 100, 65, 67)
[node name="Pivot" type="Marker2D" parent="."]
position = Vector2(294, 256)
position = Vector2(295, 249)
[node name="Ball" parent="Pivot" instance=ExtResource("4_bm1k0")]
y_sort_enabled = true
scale = Vector2(1.6575, 1.6575)
linear_damp = 0.0
is_shooter = true
[node name="HandPivot" type="Marker2D" parent="Pivot"]
@ -54,44 +329,9 @@ position = Vector2(1, -31)
scale = Vector2(1.5, 1.5)
texture = ExtResource("4_plt4v")
[node name="Balls" type="Node2D" parent="."]
[node name="Balls0" parent="." instance=ExtResource("5_obeip")]
[node name="Ball" parent="Balls" instance=ExtResource("4_bm1k0")]
position = Vector2(266, 107)
scale = Vector2(1.185, 1.185)
collision_layer = 132
[node name="Balls1" parent="." instance=ExtResource("6_ymk37")]
[node name="Ball2" parent="Balls" instance=ExtResource("4_bm1k0")]
position = Vector2(342, 120)
scale = Vector2(1.2175, 1.2175)
collision_layer = 132
id = "3"
[node name="Ball3" parent="Balls" instance=ExtResource("4_bm1k0")]
position = Vector2(204, 126)
scale = Vector2(1.2275, 1.2275)
collision_layer = 132
[node name="MarginContainer" type="MarginContainer" parent="."]
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -20.0
offset_right = 20.0
offset_bottom = 40.0
grow_horizontal = 2
theme_override_constants/margin_top = 52
[node name="RichTextLabel" type="RichTextLabel" parent="MarginContainer"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_colors/default_color = Color(0.856067, 0.856067, 0.856067, 1)
theme_override_colors/font_outline_color = Color(0.401628, 0.253369, 0.0745033, 1)
theme_override_constants/outline_size = 5
theme_override_font_sizes/normal_font_size = 24
bbcode_enabled = true
text = "[wave amp=20.0 freq=5.0 connected=1][shake rate=10.0 level=3 connected=1]弹珠拿出来[/shake][/wave]"
fit_content = true
horizontal_alignment = 1
[node name="Balls2" parent="." instance=ExtResource("7_oii6q")]
position = Vector2(5, 32)