细节调整

This commit is contained in:
cakipaul 2025-06-07 17:04:08 +08:00
parent 446dc2224c
commit b78d2c80ce
53 changed files with 570 additions and 440 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d05pqud4yoxx3"
path="res://.godot/imported/bg_公寓门口.png-5b96fed8c17c1ee89574cd626a23f2fe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png"
dest_files=["res://.godot/imported/bg_公寓门口.png-5b96fed8c17c1ee89574cd626a23f2fe.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,11 +1,7 @@
~ c01_s05_院长房间_开场 ~ c01_s05_院长房间_看不清了
: ...后面看不清了。 [ID:c01_1小小蝶_开头阅读2] : ...后面看不清了。 [ID:c01_1小小蝶_开头阅读2]
=> END => END
#~ c01_s05_院长房间_开场_sh
#: ...后面看不清了。 [ID:c01_1小小蝶_开头阅读2]
#=> END
~ c01_s06_走廊前对话 ~ c01_s06_走廊前对话
老师: 昨天认的字,现在全忘了? [ID:c01_2老师1] 老师: 昨天认的字,现在全忘了? [ID:c01_2老师1]
老师: (唉呀)黄鱼脑子! [ID:c01_2老师2] 老师: (唉呀)黄鱼脑子! [ID:c01_2老师2]
@ -152,6 +148,9 @@
车夫: 读书?读书好呀。打您一上车,我就能感觉到那什么...书香气,对对对,书香气! [ID:c01_9车夫_17] 车夫: 读书?读书好呀。打您一上车,我就能感觉到那什么...书香气,对对对,书香气! [ID:c01_9车夫_17]
车夫: 您将来一定大有可为! [ID:c01_9车夫_18] 车夫: 您将来一定大有可为! [ID:c01_9车夫_18]
吕萍: 那就借师傅吉言了。 [ID:c01_9小蝶_8] 吕萍: 那就借师傅吉言了。 [ID:c01_9小蝶_8]
=> END
~ c01_s11_车夫对话5
车夫: 到地方喽——您看好自己的东西再下车! [ID:c01_9车夫_19] 车夫: 到地方喽——您看好自己的东西再下车! [ID:c01_9车夫_19]
吕萍: 谢谢。 [ID:c01_9小蝶_9] 吕萍: 谢谢。 [ID:c01_9小蝶_9]
=> END => END

View File

@ -224,7 +224,7 @@ c02_4小蝉_1,啊?,,方小蝉,,
c02_4小蝉_2,...「死」是什么意思?,,方小蝉,, c02_4小蝉_2,...「死」是什么意思?,,方小蝉,,
c02_4瞎子_2,每个人就像一个封起来的盒子,人死了,就是打开盒盖,把里面的灵魂放走了。,,方启钊,, c02_4瞎子_2,每个人就像一个封起来的盒子,人死了,就是打开盒盖,把里面的灵魂放走了。,,方启钊,,
c02_4小蝉_3,然后呢?,,方小蝉,, c02_4小蝉_3,然后呢?,,方小蝉,,
c02_4小蝉_4,方小蝉:那个盒子怎么样了?,,,, c02_4小蝉_4,那个盒子怎么样了?,,方小蝉,,
c02_4瞎子_3,一个空盒子而已,没人会在乎这个。,,方启钊,, c02_4瞎子_3,一个空盒子而已,没人会在乎这个。,,方启钊,,
c02_4小蝉_5,...那你死了之后,也会变成空盒子吗?我可以住进空盒子里陪着你。,,方小蝉,, c02_4小蝉_5,...那你死了之后,也会变成空盒子吗?我可以住进空盒子里陪着你。,,方小蝉,,
c02_4瞎子_4,你不明白。人死了,就意味着...,,方启钊,, c02_4瞎子_4,你不明白。人死了,就意味着...,,方启钊,,
@ -237,9 +237,9 @@ c02_4瞎子_9,你还小,不需要知道这么多。,,方启钊,,
c02_4小蝉_7,...但是你不要死,爸爸。,,方小蝉,, c02_4小蝉_7,...但是你不要死,爸爸。,,方小蝉,,
c02_4瞎子_10,生死哪由人。,,方启钊,, c02_4瞎子_10,生死哪由人。,,方启钊,,
c02_4瞎子_11,走吧。,,方启钊,, c02_4瞎子_11,走吧。,,方启钊,,
c02_11肉铺敲门_1,理发二楼,看病三楼!,,???,, c02_11肉铺敲门_1,理发二楼,看病三楼!,,,,
c02_11肉铺敲门_2,敲什么敲!,,???,, c02_11肉铺敲门_2,敲什么敲!,,,,
c02_11肉铺敲门_3,不做生意赶紧滚!,,???,, c02_11肉铺敲门_3,不做生意赶紧滚!,,,,
c02_5小男孩_1,大姐姐,等一下!你玩过打弹珠没有?,,小男孩,, c02_5小男孩_1,大姐姐,等一下!你玩过打弹珠没有?,,小男孩,,
c02_5小男孩_2,你赢了的话,我们就认你当老大,听你的吩咐办事!,,小男孩,, c02_5小男孩_2,你赢了的话,我们就认你当老大,听你的吩咐办事!,,小男孩,,
c02_5小男孩_3,你得有弹珠才能跟我们玩儿!,,,, c02_5小男孩_3,你得有弹珠才能跟我们玩儿!,,,,

1 keys zh_CN en _character _notes _tags
224 c02_4瞎子_7 这世界上只有一个你,也只有一个我。死了、灵魂跑远了,就再也没有了。 方启钊
225 c02_4瞎子_8 听懂了吗? 方启钊
226 c02_4小蝉_6 ... 方小蝉
227 c02_4瞎子_9 你还小,不需要知道这么多。 方启钊
228 c02_4小蝉_7 ...但是你不要死,爸爸。 方小蝉
229 c02_4瞎子_10 生死哪由人。 方启钊
230 c02_4瞎子_11 走吧。 方启钊
237 c02_弹珠游戏0 把弹珠拿出来
238 c02_弹珠游戏1 你、你绝对不是第一次玩弹珠
239 c02_弹珠游戏2 这不可能...再来一次!
240 c02_弹珠游戏3 我没输...你骗人!
241 c02_弹珠游戏4 这不可能!不不不...
242 c02_弹珠游戏5 我还有很多弹珠,玩到我赢为止!
243 c02_弹珠游戏6 先碰到边界你就输了!
244 下⾬了、打烊了、⼩脚⼩孩跳舞了 [ID:] 下⾬了、打烊了、⼩脚⼩孩跳舞了 [ID:]
245 摔倒了、哭⿐头、⼩脚上面出血了 [ID:] 摔倒了、哭⿐头、⼩脚上面出血了 [ID:]

View File

@ -1,8 +1,3 @@
~ c02_s01_门口
芦昌路26弄3号 [ID:c02_芦昌路26]
=> END
~ c02_04_李氏癞子 ~ c02_04_李氏癞子
#[#anonymous] #[#anonymous]
李兰: 真的假的?你钻进去啦,你这个体型进得去哒? [ID:c02_6偷听对话_李氏_1] 李兰: 真的假的?你钻进去啦,你这个体型进得去哒? [ID:c02_6偷听对话_李氏_1]
@ -45,12 +40,12 @@
=> END => END
~ c02_s03_敲门游戏intro ~ c02_s03_敲门游戏intro
???: 理发二楼,看病三楼! [ID:c02_11肉铺敲门_1] : 理发二楼,看病三楼! [ID:c02_11肉铺敲门_1]
=> END => END
~ c02_s03_敲门游戏 ~ c02_s03_敲门游戏
???: 敲什么敲! [ID:c02_11肉铺敲门_2] : 敲什么敲! [ID:c02_11肉铺敲门_2]
???: 不做生意赶紧滚! [ID:c02_11肉铺敲门_3] : 不做生意赶紧滚! [ID:c02_11肉铺敲门_3]
=> END => END
# 寻找弹珠 # 寻找弹珠
@ -117,7 +112,7 @@
#【未完成拯救小蝉的游戏】 #【未完成拯救小蝉的游戏】
#小蝉: 再见了,大姐姐。 #小蝉: 再见了,大姐姐。
~ c02_s11_谢幕交谈 ~ c02_s11_谢幕交谈1
吕萍: 小姑娘,你认识我,对不对? [ID:c02_10小蝶_1] 吕萍: 小姑娘,你认识我,对不对? [ID:c02_10小蝶_1]
方小蝉: 嗯。 [ID:c02_10小蝉_1] 方小蝉: 嗯。 [ID:c02_10小蝉_1]
吕萍: 我能感觉到,从我踏进这里的那一刻,你就在盯着我。 [ID:c02_10小蝶_2] 吕萍: 我能感觉到,从我踏进这里的那一刻,你就在盯着我。 [ID:c02_10小蝶_2]

View File

@ -1,27 +1,27 @@
~ c01_院长座钟 ~ c01_飘落的寻人启事
x年 [ID:t89c0f4a8de] 寻人启事 [ID:c01_飘落的寻人启事1]
下午一点 [ID:t356af5308e]
=> END => END
~ c02_鼠疫海报 ~ c02_鼠疫海报
据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。 [ID:t344c97cf2c] 据闻奉贤县分水墩有两人染受鼠疫毙命,医官拟将死者尸骸解剖以观受病之原因及其情状,竟未得死者家属之同意,以该处风气闭塞,闻解剖之说,地方人民甚为惊骇,闻已有聚众滋闹之事,并闻医官已被人殴打,政府以防疫事宜关系紧要拟改令赴沪南区一带调查防疫事宜云。[ID:tdb119a3714]
有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。 [ID:tdb119a3714]
《申报》 [ID:ta750647b12] 《申报》 [ID:ta750647b12]
民国五年一月十三日 [ID:t736cca4563] 民国五年一月十三日 [ID:t736cca4563]
=> END => END
~ c02_公寓告示
公寓告示正文 [ID:公寓告示正文_1]
=> END
~ c02_海报1 ~ c02_海报1
海报1内容 [ID:c02_海报1] 战胜北方鼠疫之二杰 [ID:c02_海报1]
=> END => END
~ c02_海报2 ~ c02_海报2
海报2内容 [ID:c02_海报2] 剪辮懸樑上偵探奇聞 [ID:c02_海报2]
=> END
~ c02_海报3
大舞台 [ID:c02_海报3]
二月初三夜,二等正厅,三等包厢 [ID:c02_海报4]
=> END => END
~ c02_保卫科花名册 ~ c02_保卫科花名册
花名册内容 [ID:c02_保卫科花名册] 芦昌公寓居民登记簿(黄国栋记) [ID:c02_保卫科花名册1]
... [ID:c02_保卫科花名册2]
=> END => END

View File

@ -4,6 +4,42 @@ ui_press_b,按 B 打开背包,,,
5,5,,, 5,5,,,
院长的信...,院长的信...,,, 院长的信...,院长的信...,,,
prop_小鞋子,小鞋子,,,[#texture=c02/小鞋子.png] prop_小鞋子,小鞋子,,,[#texture=c02/小鞋子.png]
c02_绳子剪刀,绳子和剪刀,,,
c02_玩具缺脑袋,这个玩具缺了个脑袋,,,
c02_又是寻人启示,又是那张寻人启示,,,
c02_墙上的海报被撕掉了,墙上的海报被撕掉了,,,
c02_井臭,井里有一股臭味,,,
c02_中药材,车上放了一些中药材,,,
c02_排队,排队的人堵住了上楼的路,,,
c02_不要出去,最好还是先不要出去,,,
c02_太阳,太阳快落山了,,,
c02_民国六年1015,民国六年十月十五日,,,
c02_一个洞,一个洞,里面好像还有空间,,,
c02_工具箱,工具箱,,,
c02_找到有用的东西,应该能找到有用的东西,,,
c02_公寓告示,公寓告示,,,
c02_通往里间的门,通往里间的门,,,
c02_花名册,花名册,,,
c02_罪,罪,,,
c02_门上有什么东西,门上有什么东西,,,
c02_奠,奠,,,
c02_寻夏小蝉,失踪的小孩名叫夏小蝉,,,
c02_小猫干尸,小猫的尸体已经干了,,,
c02_几块大洋,几块大洋,,,
c02_死老鼠,死掉的老鼠,,,
c02_石缝开花,石缝里开了几束花,,,
c02_石壁空间,石壁另一头好像还有空间,,,
c02_民国六年1221,民国六年十二月二十一日,,,
c02_患者感谢信,一些患者的感谢信,,,
c02_被撕掉的书,一本被撕掉的书,,,
c02_里面有什么东西,里面有什么东西,,,
c02_戏台上的诗,戏台上面刻了一首诗,,,
c02_锁开了,锁开了,,,
c02_口袋里有东西,口袋里有东西,,,
c02_雾太大,雾太大了,看不清路,,,
c02_八音盒,是个八音盒,,,
c02_祝女儿早日康复,祝女儿早日康复,,,
c02_图案一样,这图案和我手臂上的一摸一样,,,
index_新游戏,新游戏,,, index_新游戏,新游戏,,,
index_继续游戏,继续游戏,,, index_继续游戏,继续游戏,,,
index_退出游戏,退出游戏,,, index_退出游戏,退出游戏,,,
@ -31,9 +67,9 @@ ui_阅读,阅读,,,
ui_检阅,检阅,,, ui_检阅,检阅,,,
ui_收起,收起,,, ui_收起,收起,,,
ui_夜行船1,百岁光阴一梦蝶。,,, ui_夜行船1,百岁光阴一梦蝶。,,,
ui_夜行船2,重回往事堪嗟。,,, ui_夜行船2,重回往事堪嗟。,,,
ui_夜行船3,今春来。,,, ui_夜行船3,今春来。,,,
ui_夜行船4,今春来,明朝花谢。,,, ui_夜行船4,今春来,明朝花谢。,,,
ui_夜行船5,急罚盏夜阑灯灭。,,, ui_夜行船5,急罚盏夜阑灯灭。,,,
ui_夜行船6,夜行船,,, ui_夜行船6,夜行船,,,
prop_空手,空手,,, prop_空手,空手,,,
@ -108,48 +144,17 @@ c01_s07_书店展柜,"院长说,读一百本书,就可以成为无所不能
如果我再大一些,没准可以求店长把我留下,我会干很多活,也能吃苦...",,, 如果我再大一些,没准可以求店长把我留下,我会干很多活,也能吃苦...",,,
c01_s08_书架游戏完成,这些书都被老鼠啃坏了,连木头架子都没放过。,,, c01_s08_书架游戏完成,这些书都被老鼠啃坏了,连木头架子都没放过。,,,
c01_s08_获得袁大头后,工钱还在老地方。,,, c01_s08_获得袁大头后,工钱还在老地方。,,,
c02_小蝉寻人启事_脸部破碎,"似乎是一张寻人启事 c02_小蝉寻人启事_脸部破碎,寻人启事...画像和字迹都看不清。,,,
脸的部分被撕掉了,看不清",,, c02_芦昌路26,芦昌路26弄3号就是这里了。,,,
c02_冷飕飕的,冷飕飕的...,,,
c02_太暗了,太暗了,找找能照明的东西吧。,,,
c02_陈旧的煤油灯,上了年头的煤油灯,似乎很久没用过了。,,,
c02_使用煤油灯,呼,那股阴冷的感觉也消失了。,,,
c02_卫生宣传画,几张卫生宣传画,,, c02_卫生宣传画,几张卫生宣传画,,,
c02_老鼠洞,"一个老鼠洞 c02_老鼠洞,"一个老鼠洞
在这种楼里挺常见的",,, 在这种楼里挺常见的",,,
c02_十几年前的报纸,十几年前的报纸,,, c02_十几年前的报纸,十几年前的报纸,,,
c02_一楼楼道被挡住,被挡住了,,, c02_一楼楼道被挡住,被挡住了,,,
c02_火灾等待准备,还没准备好点火呢,,, c02_火灾等待准备,还没准备好点火呢,,,
小猫玩具发光,嗯?玩具在发光,,,
c02_点火前阻止右移,没时间浪费了!想想办法救出小蝉...,,, c02_点火前阻止右移,没时间浪费了!想想办法救出小蝉...,,,
c02_绳子剪刀,绳子和剪刀,,,
c02_玩具缺脑袋,这个玩具缺了个脑袋,,,
c02_又是寻人启示,又是那张寻人启示,,,
c02_墙上的海报被撕掉了,墙上的海报被撕掉了,,,
c02_井臭,井里有一股臭味,,,
c02_中药材,车上放了一些中药材,,,
c02_排队,排队的人堵住了上楼的路,,,
c02_不要出去,最好还是先不要出去,,,
c02_太阳,太阳快落山了,,,
c02_民国六年1015,民国六年十月十五日,,,
c02_一个洞,一个洞,里面好像还有空间,,,
c02_工具箱,工具箱,,,
c02_找到有用的东西,应该能找到有用的东西,,,
c02_公寓告示,公寓告示,,,
c02_通往里间的门,通往里间的门,,,
c02_花名册,花名册,,,
c02_罪,罪,,,
c02_门上有什么东西,门上有什么东西,,,
c02_奠,奠,,,
c02_寻夏小蝉,失踪的小孩名叫夏小蝉,,,
c02_小猫干尸,小猫的尸体已经干了,,,
c02_几块大洋,几块大洋,,,
c02_死老鼠,死掉的老鼠,,,
c02_石缝开花,石缝里开了几束花,,,
c02_石壁空间,石壁另一头好像还有空间,,,
c02_民国六年1221,民国六年十二月二十一日,,,
c02_患者感谢信,一些患者的感谢信,,,
c02_被撕掉的书,一本被撕掉的书,,,
c02_里面有什么东西,里面有什么东西,,,
c02_戏台上的诗,戏台上面刻了一首诗,,,
c02_锁开了,锁开了,,,
c02_口袋里有东西,口袋里有东西,,,
c02_雾太大,雾太大了,看不清路,,,
c02_八音盒,是个八音盒,,,
c02_祝女儿早日康复,祝女儿早日康复,,,
c02_图案一样,这图案和我手臂上的一摸一样,,,

1 keys zh_CN _character _notes _tags
4 5 5
5 院长的信... 院长的信...
6 prop_小鞋子 小鞋子 [#texture=c02/小鞋子.png]
7 c02_绳子剪刀 绳子和剪刀
8 c02_玩具缺脑袋 这个玩具缺了个脑袋
9 c02_又是寻人启示 又是那张寻人启示
10 c02_墙上的海报被撕掉了 墙上的海报被撕掉了
11 c02_井臭 井里有一股臭味
12 c02_中药材 车上放了一些中药材
13 c02_排队 排队的人堵住了上楼的路
14 c02_不要出去 最好还是先不要出去
15 c02_太阳 太阳快落山了
16 c02_民国六年1015 民国六年十月十五日
17 c02_一个洞 一个洞,里面好像还有空间
18 c02_工具箱 工具箱
19 c02_找到有用的东西 应该能找到有用的东西
20 c02_公寓告示 公寓告示
21 c02_通往里间的门 通往里间的门
22 c02_花名册 花名册
23 c02_罪
24 c02_门上有什么东西 门上有什么东西
25 c02_奠
26 c02_寻夏小蝉 失踪的小孩名叫夏小蝉
27 c02_小猫干尸 小猫的尸体已经干了
28 c02_几块大洋 几块大洋
29 c02_死老鼠 死掉的老鼠
30 c02_石缝开花 石缝里开了几束花
31 c02_石壁空间 石壁另一头好像还有空间
32 c02_民国六年1221 民国六年十二月二十一日
33 c02_患者感谢信 一些患者的感谢信
34 c02_被撕掉的书 一本被撕掉的书
35 c02_里面有什么东西 里面有什么东西
36 c02_戏台上的诗 戏台上面刻了一首诗
37 c02_锁开了 锁开了
38 c02_口袋里有东西 口袋里有东西
39 c02_雾太大 雾太大了,看不清路
40 c02_八音盒 是个八音盒
41 c02_祝女儿早日康复 祝女儿早日康复
42 c02_图案一样 这图案和我手臂上的一摸一样
43 index_新游戏 新游戏
44 index_继续游戏 继续游戏
45 index_退出游戏 退出游戏
67 ui_检阅 检阅
68 ui_收起 收起
69 ui_夜行船1 百岁光阴一梦蝶。
70 ui_夜行船2 重回⾸往事堪嗟。 重回首往事堪嗟。
71 ui_夜行船3 今⽇春来。 今日春来。
72 ui_夜行船4 今⽇春来,明朝花谢。 今日春来,明朝花谢。
73 ui_夜行船5 急罚盏夜阑灯灭。
74 ui_夜行船6 夜行船
75 prop_空手 空手
144 c02_绳子剪刀 c02_老鼠洞 绳子和剪刀 一个老鼠洞 在这种楼里挺常见的
145 c02_玩具缺脑袋 c02_十几年前的报纸 这个玩具缺了个脑袋 十几年前的报纸
146 c02_又是寻人启示 c02_一楼楼道被挡住 又是那张寻人启示 被挡住了
147 c02_墙上的海报被撕掉了 c02_火灾等待准备 墙上的海报被撕掉了 还没准备好点火呢
148 c02_井臭 小猫玩具发光 井里有一股臭味 嗯?玩具在发光
149 c02_点火前阻止右移 没时间浪费了!想想办法救出小蝉...
150
151
152
153
154
155
156
157
158
159
160
c02_找到有用的东西 应该能找到有用的东西
c02_公寓告示 公寓告示
c02_通往里间的门 通往里间的门
c02_花名册 花名册
c02_罪
c02_门上有什么东西 门上有什么东西
c02_奠
c02_寻夏小蝉 失踪的小孩名叫夏小蝉
c02_小猫干尸 小猫的尸体已经干了
c02_几块大洋 几块大洋
c02_死老鼠 死掉的老鼠
c02_石缝开花 石缝里开了几束花
c02_石壁空间 石壁另一头好像还有空间
c02_民国六年1221 民国六年十二月二十一日
c02_患者感谢信 一些患者的感谢信
c02_被撕掉的书 一本被撕掉的书
c02_里面有什么东西 里面有什么东西
c02_戏台上的诗 戏台上面刻了一首诗
c02_锁开了 锁开了
c02_口袋里有东西 口袋里有东西
c02_雾太大 雾太大了,看不清路
c02_八音盒 是个八音盒
c02_祝女儿早日康复 祝女儿早日康复
c02_图案一样 这图案和我手臂上的一摸一样

View File

@ -33,9 +33,9 @@
百岁光阴一梦蝶。 [ID:ui_夜行船1] 百岁光阴一梦蝶。 [ID:ui_夜行船1]
重回往事堪嗟。 [ID:ui_夜行船2] 重回往事堪嗟。 [ID:ui_夜行船2]
春来。 [ID:ui_夜行船3] 春来。 [ID:ui_夜行船3]
春来,明朝花谢。 [ID:ui_夜行船4] 春来,明朝花谢。 [ID:ui_夜行船4]
急罚盏夜阑灯灭。 [ID:ui_夜行船5] 急罚盏夜阑灯灭。 [ID:ui_夜行船5]
夜行船 [ID:ui_夜行船6] 夜行船 [ID:ui_夜行船6]
=> END => END
@ -149,16 +149,21 @@
工钱还在老地方。 [ID:c01_s08_获得袁大头后] 工钱还在老地方。 [ID:c01_s08_获得袁大头后]
# c02 # c02
# c02-s01 街道 # c02-s01 街道
似乎是一张寻人启事\n脸的部分被撕掉了看不清 [ID:c02_小蝉寻人启事_脸部破碎] 寻人启事...画像和字迹都看不清。 [ID:c02_小蝉寻人启事_脸部破碎]
芦昌路26弄3号就是这里了。 [ID:c02_芦昌路26]
# c02-s02 走道 # c02-s02 走道
冷飕飕的... [ID:c02_冷飕飕的]
太暗了,找找能照明的东西吧。 [ID:c02_太暗了]
上了年头的煤油灯,似乎很久没用过了。 [ID:c02_陈旧的煤油灯]
呼,那股阴冷的感觉也消失了。 [ID:c02_使用煤油灯]
几张卫生宣传画 [ID:c02_卫生宣传画] 几张卫生宣传画 [ID:c02_卫生宣传画]
一个老鼠洞\n在这种楼里挺常见的 [ID:c02_老鼠洞] 一个老鼠洞\n在这种楼里挺常见的 [ID:c02_老鼠洞]
十几年前的报纸 [ID:c02_十几年前的报纸] 十几年前的报纸 [ID:c02_十几年前的报纸]
# c02 内侧楼道 # c02 内侧楼道
被挡住了 [ID:c02_一楼楼道被挡住] 被挡住了 [ID:c02_一楼楼道被挡住]
# c02 火灾 # c02 火灾
还没准备好点火呢 [ID:c02_火灾等待准备] 还没准备好点火呢 [ID:c02_火灾等待准备]
嗯?玩具在发光 [ID:小猫玩具发光]
没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移] 没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移]

View File

@ -1970,6 +1970,24 @@ animations = [{
"texture": ExtResource("147_jn0hd") "texture": ExtResource("147_jn0hd")
}, { }, {
"duration": 1.0, "duration": 1.0,
"texture": ExtResource("146_glua7")
}, {
"duration": 1.0,
"texture": ExtResource("147_jn0hd")
}, {
"duration": 1.0,
"texture": ExtResource("146_glua7")
}, {
"duration": 1.0,
"texture": ExtResource("147_jn0hd")
}, {
"duration": 1.0,
"texture": ExtResource("146_glua7")
}, {
"duration": 1.0,
"texture": ExtResource("147_jn0hd")
}, {
"duration": 1.0,
"texture": ExtResource("148_gtwc1") "texture": ExtResource("148_gtwc1")
}, { }, {
"duration": 1.0, "duration": 1.0,
@ -2812,7 +2830,7 @@ animations = [{
"speed": 6.0 "speed": 6.0
}, { }, {
"frames": [{ "frames": [{
"duration": 1.0, "duration": 12.0,
"texture": ExtResource("227_n073l") "texture": ExtResource("227_n073l")
}, { }, {
"duration": 1.0, "duration": 1.0,

View File

@ -2,18 +2,18 @@
[resource] [resource]
bus/0/volume_db = -0.030508 bus/0/volume_db = -0.030508
bus/1/name = &"game_sfx" bus/1/name = &"dialog"
bus/1/solo = false bus/1/solo = false
bus/1/mute = false bus/1/mute = false
bus/1/bypass_fx = false bus/1/bypass_fx = false
bus/1/volume_db = 0.0 bus/1/volume_db = -0.00828743
bus/1/send = &"Master" bus/1/send = &"game_sfx"
bus/2/name = &"dialog" bus/2/name = &"game_sfx"
bus/2/solo = false bus/2/solo = false
bus/2/mute = false bus/2/mute = false
bus/2/bypass_fx = false bus/2/bypass_fx = false
bus/2/volume_db = 0.0 bus/2/volume_db = -0.00606537
bus/2/send = &"game_sfx" bus/2/send = &"Master"
bus/3/name = &"music" bus/3/name = &"music"
bus/3/solo = false bus/3/solo = false
bus/3/mute = false bus/3/mute = false

View File

@ -80,7 +80,6 @@ func unlock_player():
# return true # return true
# return player.operational # return player.operational
# func set_player_operational(val := true): # func set_player_operational(val := true):
# var player = get_player() as MainPlayer # var player = get_player() as MainPlayer
# if player: # if player:
@ -157,6 +156,7 @@ func get_current_prop(must_selected: bool) -> String:
return prop_hud.inventory.current_item_key() return prop_hud.inventory.current_item_key()
return "" return ""
# 静默增加 prop一般用于提前保存数据确保数据一致性防止在 await 时退出等导致丢数据) # 静默增加 prop一般用于提前保存数据确保数据一致性防止在 await 时退出等导致丢数据)
func enable_prop_item_silently(prop_key: String) -> void: func enable_prop_item_silently(prop_key: String) -> void:
var prop_hud = get_prop_hud() var prop_hud = get_prop_hud()
@ -165,6 +165,7 @@ func enable_prop_item_silently(prop_key: String) -> void:
else: else:
printerr("enable_prop_item_silently PropHud node not found") printerr("enable_prop_item_silently PropHud node not found")
func enable_prop_item(prop_key: String) -> void: func enable_prop_item(prop_key: String) -> void:
var prop_hud = get_prop_hud() var prop_hud = get_prop_hud()
if prop_hud: if prop_hud:
@ -177,6 +178,7 @@ func enable_important_item(prop_key: String) -> void:
var prop_hud = get_prop_hud() var prop_hud = get_prop_hud()
if prop_hud: if prop_hud:
prop_hud.inventory.enable_important_item(prop_key) prop_hud.inventory.enable_important_item(prop_key)
SceneManager.pop_center_notification(tr("ui_important_item_update"))
else: else:
printerr("enable_important_item PropHud node not found") printerr("enable_important_item PropHud node not found")
@ -189,14 +191,20 @@ func disable_prop_item(prop_key: String) -> void:
printerr("disable_prop_item PropHud node not found") printerr("disable_prop_item PropHud node not found")
func pop_os(lines := []): func pop_os(lines := [], auto_freeze := true, auto_release := true):
var player = get_player() var player = get_player() as MainPlayer
if player: if player:
player.pop_os(lines) player.pop_os(lines, auto_freeze, auto_release)
else: else:
printerr("Player node not found") printerr("Player node not found")
func pop_os_with_str(translation_key: String, auto_freeze := true, auto_release := true):
var msg = tr(translation_key)
var lines = await DialogueUtil.generate_lines(msg)
SceneManager.pop_os(lines, auto_freeze, auto_release)
func pop_notification(msg: String, number := 1) -> void: func pop_notification(msg: String, number := 1) -> void:
var notification_node = get_node_or_null("/root/Main/UILayer/Notification") var notification_node = get_node_or_null("/root/Main/UILayer/Notification")
if notification_node: if notification_node:

View File

@ -165,7 +165,6 @@ mouse_filter = 1
text = "Response example" text = "Response example"
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
volume_db = -20.0
bus = &"dialog" bus = &"dialog"
[connection signal="gui_input" from="Balloon" to="." method="_on_balloon_gui_input"] [connection signal="gui_input" from="Balloon" to="." method="_on_balloon_gui_input"]

View File

@ -20,6 +20,7 @@ signal triggered
@export var freeze_time := 5.0 @export var freeze_time := 5.0
var hook_animation = "" var hook_animation = ""
@export var lock_player_on_playing_dialogue = true @export var lock_player_on_playing_dialogue = true
@export var hook_os_key := ""
@export_enum("c01", "c02", "c03", "c04", "c05") var hook_dialogue_res = "c01": @export_enum("c01", "c02", "c03", "c04", "c05") var hook_dialogue_res = "c01":
set(val): set(val):
hook_dialogue_res = val hook_dialogue_res = val
@ -151,6 +152,9 @@ func _do_trigger():
SceneManager.freeze_player(0.0) SceneManager.freeze_player(0.0)
DialogueManager.show_dialogue_balloon(dialogue_res, hook_dialogue_title) DialogueManager.show_dialogue_balloon(dialogue_res, hook_dialogue_title)
DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT) DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT)
# hook_os
if hook_os_key:
SceneManager.pop_os_with_str(hook_os_key)
if hook_method: if hook_method:
var animation_player = _get_animation_player() var animation_player = _get_animation_player()
if animation_player: if animation_player:

View File

@ -62,6 +62,7 @@ var tried_times: int:
func _ready() -> void: func _ready() -> void:
if Engine.is_editor_hint(): if Engine.is_editor_hint():
notify_property_list_changed()
return return
area2d.body_entered.connect(_reset) area2d.body_entered.connect(_reset)
area2d.body_exited.connect(_on_cancel) area2d.body_exited.connect(_on_cancel)
@ -100,7 +101,7 @@ func _on_interacted() -> void:
func _show_os(res, title): func _show_os(res, title):
var lines = await DialogueUtil.get_lines(res, title) var lines = await DialogueUtil.get_lines(res, title)
SceneManager.pop_os(lines) SceneManager.pop_os(lines, false, false)
interacting = true interacting = true
var player = SceneManager.get_player() var player = SceneManager.get_player()
if player: if player:

View File

@ -131,10 +131,7 @@ func _on_interacted() -> void:
tried_times += 1 tried_times += 1
if holding: if holding:
if holding_reason_key: if holding_reason_key:
var reason = tr(holding_reason_key) SceneManager.pop_os_with_str(holding_reason_key)
if reason:
var lines = await DialogueUtil.generate_lines(reason)
SceneManager.pop_os(lines)
return return
if target_portal == "none" or not enabled: if target_portal == "none" or not enabled:
return return

View File

@ -6,9 +6,9 @@
[ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="2_fr7ak"] [ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="2_fr7ak"]
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="3_6khux"] [ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="3_6khux"]
[ext_resource type="Texture2D" uid="uid://bc8sn2v4t1yta" path="res://asset/art/ui/action_mark/UI开锁.png" id="3_fr7ak"] [ext_resource type="Texture2D" uid="uid://bc8sn2v4t1yta" path="res://asset/art/ui/action_mark/UI开锁.png" id="3_fr7ak"]
[ext_resource type="AudioStream" uid="uid://bghyinc16m1nx" path="res://asset/audio/sfx/交互/收起背包.wav" id="4_p48ld"]
[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_ty1ds"] [ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_ty1ds"]
[ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/ui/开锁声.mp3" id="5_l48hy"] [ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/ui/开锁声.mp3" id="5_l48hy"]
[ext_resource type="AudioStream" uid="uid://dqdjxy04ge0r5" path="res://asset/audio/sfx/旧版/c02/场景转场.mp3" id="6_1sj6c"]
[ext_resource type="AudioStream" uid="uid://c1eftumrd4mgw" path="res://asset/audio/sfx/交互/开门.wav" id="6_p48ld"] [ext_resource type="AudioStream" uid="uid://c1eftumrd4mgw" path="res://asset/audio/sfx/交互/开门.wav" id="6_p48ld"]
[ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/ui/门锁互动.mp3" id="7_bjcty"] [ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/ui/门锁互动.mp3" id="7_bjcty"]
@ -27,7 +27,7 @@ prop_key = ""
[node name="SfxDefault" parent="." instance=ExtResource("3_6khux")] [node name="SfxDefault" parent="." instance=ExtResource("3_6khux")]
unique_name_in_owner = true unique_name_in_owner = true
stream = ExtResource("4_p48ld") stream = ExtResource("6_1sj6c")
file = "" file = ""
[node name="SfxOpen" parent="." instance=ExtResource("3_6khux")] [node name="SfxOpen" parent="." instance=ExtResource("3_6khux")]

View File

@ -87,6 +87,7 @@ func _ready() -> void:
# %ColorRectTop.visible = true # %ColorRectTop.visible = true
# %ColorRectBottom.visible = true # %ColorRectBottom.visible = true
# 如果 debug 模式下不通过 GroundLoader 启动,则插入到 main 以下 # 如果 debug 模式下不通过 GroundLoader 启动,则插入到 main 以下
_setup_player_light()
func _restart_from_main(): func _restart_from_main():
@ -160,3 +161,11 @@ func move_player_to_portal(portal_name: String) -> void:
printerr("move_player_to_portal player not ready") printerr("move_player_to_portal player not ready")
# 传送后,重置 camera 位置 # 传送后,重置 camera 位置
camera_focus_marker.reset_position_immediately() camera_focus_marker.reset_position_immediately()
func _setup_player_light():
# 设置角色身上光源
if directional_light.blend_mode == Light2D.BLEND_MODE_SUB and directional_light.energy > 0.6:
player.enable_light = true
else:
player.enable_light = false
print("_setup_player_light player.enable_light=", player.enable_light)

View File

@ -60,7 +60,9 @@ func _ready() -> void:
if not ignore_archive: if not ignore_archive:
_load_save() _load_save()
if current_scene and entrance_portal: if current_scene and entrance_portal:
transition_to_scene(current_scene, entrance_portal, 0.0) # 首次进入渐隐效果
transition_to_scene(current_scene, entrance_portal)
# transition_to_scene(current_scene, entrance_portal, 0.0)
func _load_save(): func _load_save():

View File

@ -6,26 +6,26 @@ var frame: Note2D
var paper: Interactable2D var paper: Interactable2D
var right_door: Portal2D var right_door: Portal2D
var piano: Interactable2D var piano: Interactable2D
var bed_reading: AnimatedSprite2D
# 覆盖该方法 # 覆盖该方法
func _default_data() -> Dictionary: func _default_data() -> Dictionary:
return { return {"frame_relocated": false}
"frame_relocated": false
}
func _ready() -> void: func _ready() -> void:
super._ready() super._ready()
oneshot_animation_finished.connect(show_interact_help) oneshot_animation_finished.connect(show_interact_help)
func intro_start():
SceneManager.freeze_player(0)
await animation_finished
SceneManager.release_player()
$"../DeployLayer/床".enabled = true
func play_intro_dialogue(): func play_intro_dialogue():
# 播放开场对话
# DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_开场")
# 直接使用 sfx防止下方字幕与全屏文字重复 # 直接使用 sfx防止下方字幕与全屏文字重复
$intro_audio_player.play() $intro_audio_player.play()
SceneManager.pop_debug_dialog_info("音效", "开场念诵声等")
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
@ -34,8 +34,8 @@ func _on_ground_ready() -> void:
paper = $"../DeployLayer/oneshot纸片" paper = $"../DeployLayer/oneshot纸片"
right_door = $"../DeployLayer/portal_right" right_door = $"../DeployLayer/portal_right"
piano = $"../DeployLayer/钢琴" piano = $"../DeployLayer/钢琴"
bed_reading = $"../DeployLayer/小小蝶看书" if data["oneshot_animation_played"]:
bed_reading.frame_changed.connect(_on_bed_reading_frame_changed) $"../DeployLayer/床".enabled = true
# 画框是否已经正位 # 画框是否已经正位
data.frame_relocated = ambush.played and ambush.one_shot data.frame_relocated = ambush.played and ambush.one_shot
# 禁用鸡毛掸子 # 禁用鸡毛掸子
@ -74,18 +74,8 @@ func _on_ground_ready() -> void:
$"环境音".finished.connect($"环境音".play) $"环境音".finished.connect($"环境音".play)
var intro_dialog_played = false func cant_read():
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_看不清了")
func _on_bed_reading_frame_changed():
if bed_reading.animation == "c01_小小蝶_床上看书":
if bed_reading.frame == 5 and not intro_dialog_played:
intro_dialog_played = true
DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_开场")
elif bed_reading.frame == 10:
# 播放结束0.5s 后释放角色
get_tree().create_timer(0.5).timeout.connect(SceneManager.release_player)
$"../DeployLayer/床".enabled = true
func _on_note_read(): func _on_note_read():
@ -112,15 +102,7 @@ func _on_paper_interacted():
paper.visible = false paper.visible = false
paper.enabled = false paper.enabled = false
SceneManager.enable_prop_item("prop_信碎片1") SceneManager.enable_prop_item("prop_信碎片1")
SceneManager.enable_important_item("prop_信碎片1")
right_door.holding = false right_door.holding = false
# SceneManager.pop_debug_dialog_info("音效", "开门声")
var inspector = SceneManager.get_inspector() as PropInspector
if inspector:
# 显示互动提示
inspector.quit_and_hidden.connect(
SceneManager.pop_center_notification.bind(tr("ui_important_item_update")), CONNECT_ONE_SHOT
)
# 钢琴音效,每次按下播放不同音符 # 钢琴音效,每次按下播放不同音符
@ -145,6 +127,7 @@ var piano_streams = [
preload("res://asset/audio/sfx/交互/序章/01_院长房间_钢琴_13.wav"), preload("res://asset/audio/sfx/交互/序章/01_院长房间_钢琴_13.wav"),
] ]
func _on_piano_interacted(): func _on_piano_interacted():
# 钢琴音符最大编号 # 钢琴音符最大编号
var piano_id_max := piano_streams.size() var piano_id_max := piano_streams.size()

View File

@ -79,163 +79,163 @@ tracks/3/keys = {
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("MainPlayer:visible") tracks/4/path = NodePath("DeployLayer/画框:rotation")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 0,
"values": [true] "values": [-0.179769]
} }
tracks/5/type = "value" tracks/5/type = "value"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("DeployLayer/画框:rotation") tracks/5/path = NodePath("Intro:visible")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 1,
"values": [-0.179769] "values": [false]
} }
tracks/6/type = "value" tracks/6/type = "value"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = true tracks/6/enabled = true
tracks/6/path = NodePath("Intro:visible") tracks/6/path = NodePath("Intro:modulate")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 0,
"values": [false] "values": [Color(1, 1, 1, 1)]
} }
tracks/7/type = "value" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = true tracks/7/enabled = true
tracks/7/path = NodePath("Intro:modulate") tracks/7/path = NodePath("MainPlayer:position")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Color(1, 1, 1, 1)] "values": [Vector2(26, 88)]
} }
tracks/8/type = "value" tracks/8/type = "value"
tracks/8/imported = false tracks/8/imported = false
tracks/8/enabled = true tracks/8/enabled = true
tracks/8/path = NodePath("MainPlayer:position") tracks/8/path = NodePath("DeployLayer/小小蝶看书:visible")
tracks/8/interp = 1 tracks/8/interp = 1
tracks/8/loop_wrap = true tracks/8/loop_wrap = true
tracks/8/keys = { tracks/8/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 1,
"values": [Vector2(26, 88)] "values": [false]
} }
tracks/9/type = "value" tracks/9/type = "value"
tracks/9/imported = false tracks/9/imported = false
tracks/9/enabled = true tracks/9/enabled = true
tracks/9/path = NodePath("DeployLayer/小小蝶看书:visible") tracks/9/path = NodePath("DeployLayer/小小蝶看书:frame")
tracks/9/interp = 1 tracks/9/interp = 1
tracks/9/loop_wrap = true tracks/9/loop_wrap = true
tracks/9/keys = { tracks/9/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 1,
"values": [false] "values": [10]
} }
tracks/10/type = "value" tracks/10/type = "value"
tracks/10/imported = false tracks/10/imported = false
tracks/10/enabled = true tracks/10/enabled = true
tracks/10/path = NodePath("DeployLayer/小小蝶看书:frame") tracks/10/path = NodePath("DeployLayer/oneshot纸片/Area2D:position")
tracks/10/interp = 1 tracks/10/interp = 1
tracks/10/loop_wrap = true tracks/10/loop_wrap = true
tracks/10/keys = { tracks/10/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 0,
"values": [10] "values": [Vector2(0, 0)]
} }
tracks/11/type = "value" tracks/11/type = "value"
tracks/11/imported = false tracks/11/imported = false
tracks/11/enabled = true tracks/11/enabled = true
tracks/11/path = NodePath("DeployLayer/oneshot纸片/Area2D:position") tracks/11/path = NodePath("DeployLayer/oneshot纸片/AnimatedSprite2D:frame")
tracks/11/interp = 1 tracks/11/interp = 1
tracks/11/loop_wrap = true tracks/11/loop_wrap = true
tracks/11/keys = { tracks/11/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 1,
"values": [Vector2(0, 0)] "values": [9]
} }
tracks/12/type = "value" tracks/12/type = "value"
tracks/12/imported = false tracks/12/imported = false
tracks/12/enabled = true tracks/12/enabled = true
tracks/12/path = NodePath("DeployLayer/oneshot纸片/AnimatedSprite2D:frame") tracks/12/path = NodePath("DeployLayer/oneshot纸片/Sign:display_sign")
tracks/12/interp = 1 tracks/12/interp = 1
tracks/12/loop_wrap = true tracks/12/loop_wrap = true
tracks/12/keys = { tracks/12/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 1,
"values": [9] "values": [true]
} }
tracks/13/type = "value" tracks/13/type = "value"
tracks/13/imported = false tracks/13/imported = false
tracks/13/enabled = true tracks/13/enabled = true
tracks/13/path = NodePath("DeployLayer/oneshot纸片/Sign:display_sign") tracks/13/path = NodePath("DeployLayer/oneshot纸片/Sign:position")
tracks/13/interp = 1 tracks/13/interp = 1
tracks/13/loop_wrap = true tracks/13/loop_wrap = true
tracks/13/keys = { tracks/13/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 0,
"values": [true] "values": [Vector2(3, -4)]
} }
tracks/14/type = "value" tracks/14/type = "value"
tracks/14/imported = false tracks/14/imported = false
tracks/14/enabled = true tracks/14/enabled = true
tracks/14/path = NodePath("DeployLayer/oneshot纸片/Sign:position") tracks/14/path = NodePath("CameraFocusMarker:zoom_ratio")
tracks/14/interp = 1 tracks/14/interp = 1
tracks/14/loop_wrap = true tracks/14/loop_wrap = true
tracks/14/keys = { tracks/14/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector2(3, -4)] "values": [1.0]
} }
tracks/15/type = "value" tracks/15/type = "value"
tracks/15/imported = false tracks/15/imported = false
tracks/15/enabled = true tracks/15/enabled = true
tracks/15/path = NodePath("CameraFocusMarker:zoom_ratio") tracks/15/path = NodePath("CameraFocusMarker:force_offset")
tracks/15/interp = 1 tracks/15/interp = 1
tracks/15/loop_wrap = true tracks/15/loop_wrap = true
tracks/15/keys = { tracks/15/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [1.0] "values": [Vector2(0, 0)]
} }
tracks/16/type = "value" tracks/16/type = "value"
tracks/16/imported = false tracks/16/imported = false
tracks/16/enabled = true tracks/16/enabled = true
tracks/16/path = NodePath("CameraFocusMarker:force_offset") tracks/16/path = NodePath("AnimationPlayer/扶正相框:playing")
tracks/16/interp = 1 tracks/16/interp = 1
tracks/16/loop_wrap = true tracks/16/loop_wrap = true
tracks/16/keys = { tracks/16/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 1,
"values": [Vector2(0, 0)] "values": [false]
} }
tracks/17/type = "value" tracks/17/type = "value"
tracks/17/imported = false tracks/17/imported = false
tracks/17/enabled = true tracks/17/enabled = true
tracks/17/path = NodePath("AnimationPlayer/扶正相框:playing") tracks/17/path = NodePath("AnimationPlayer/下床音效:playing")
tracks/17/interp = 1 tracks/17/interp = 1
tracks/17/loop_wrap = true tracks/17/loop_wrap = true
tracks/17/keys = { tracks/17/keys = {
@ -247,7 +247,7 @@ tracks/17/keys = {
tracks/18/type = "value" tracks/18/type = "value"
tracks/18/imported = false tracks/18/imported = false
tracks/18/enabled = true tracks/18/enabled = true
tracks/18/path = NodePath("AnimationPlayer/下床音效:playing") tracks/18/path = NodePath("MainPlayer:hide_sprite")
tracks/18/interp = 1 tracks/18/interp = 1
tracks/18/loop_wrap = true tracks/18/loop_wrap = true
tracks/18/keys = { tracks/18/keys = {
@ -256,10 +256,34 @@ tracks/18/keys = {
"update": 1, "update": 1,
"values": [false] "values": [false]
} }
tracks/19/type = "value"
tracks/19/imported = false
tracks/19/enabled = true
tracks/19/path = NodePath("AnimationPlayer/intro_audio_player:volume_db")
tracks/19/interp = 1
tracks/19/loop_wrap = true
tracks/19/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-20.0]
}
tracks/20/type = "value"
tracks/20/imported = false
tracks/20/enabled = true
tracks/20/path = NodePath("Intro/HBoxContainer:modulate")
tracks/20/interp = 1
tracks/20/loop_wrap = true
tracks/20/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_7k2c8"] [sub_resource type="Animation" id="Animation_7k2c8"]
resource_name = "intro" resource_name = "intro"
length = 7.0 length = 24.0
capture_included = true capture_included = true
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
@ -268,7 +292,7 @@ tracks/0/path = NodePath("Intro:visible")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0, 4.63333), "times": PackedFloat32Array(0, 18.4333),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [true, false] "values": [true, false]
@ -280,7 +304,7 @@ tracks/1/path = NodePath("Intro:modulate")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"times": PackedFloat32Array(0, 4.4, 4.63333), "times": PackedFloat32Array(0, 15.5333, 18.4333),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 0, "update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
@ -292,7 +316,7 @@ tracks/2/path = NodePath("MainPlayer:position")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(3.93333), "times": PackedFloat32Array(17.7333),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 0, "update": 0,
"values": [Vector2(87, 88)] "values": [Vector2(87, 88)]
@ -300,93 +324,109 @@ tracks/2/keys = {
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("MainPlayer:visible") tracks/3/path = NodePath("DeployLayer/小小蝶看书:visible")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 6.63333), "times": PackedFloat32Array(0, 23.8667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("DeployLayer/小小蝶看书:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 6.66667),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [true, false] "values": [true, false]
} }
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("DeployLayer/小小蝶看书:frame")
tracks/4/interp = 1
tracks/4/loop_wrap = false
tracks/4/keys = {
"times": PackedFloat32Array(18.4, 23.8667),
"transitions": PackedFloat32Array(1, 1),
"update": 2,
"values": [0, 16]
}
tracks/5/type = "method" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("MainPlayer") tracks/5/path = NodePath("AnimationPlayer")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0, 1.93333, 19.1),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1, 1, 1),
"values": [{
"args": [0.0, -1, false],
"method": &"freeze_player"
}]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("DeployLayer/小小蝶看书:frame")
tracks/6/interp = 1
tracks/6/loop_wrap = false
tracks/6/keys = {
"times": PackedFloat32Array(4.56667, 6.66667),
"transitions": PackedFloat32Array(1, 1),
"update": 2,
"values": [0, 10]
}
tracks/7/type = "method"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("AnimationPlayer")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.133333),
"transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"intro_start"
}, {
"args": [],
"method": &"play_intro_dialogue" "method": &"play_intro_dialogue"
}, {
"args": [],
"method": &"cant_read"
}] }]
} }
tracks/8/type = "method" tracks/6/type = "method"
tracks/8/imported = false tracks/6/imported = false
tracks/8/enabled = true tracks/6/enabled = true
tracks/8/path = NodePath("Intro") tracks/6/path = NodePath("Intro")
tracks/8/interp = 1 tracks/6/interp = 1
tracks/8/loop_wrap = true tracks/6/loop_wrap = true
tracks/8/keys = { tracks/6/keys = {
"times": PackedFloat32Array(4.76667), "times": PackedFloat32Array(18.5667),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"queue_free" "method": &"queue_free"
}] }]
} }
tracks/9/type = "value" tracks/7/type = "value"
tracks/9/imported = false tracks/7/imported = false
tracks/9/enabled = true tracks/7/enabled = true
tracks/9/path = NodePath("AnimationPlayer/下床音效:playing") tracks/7/path = NodePath("AnimationPlayer/下床音效:playing")
tracks/9/interp = 1 tracks/7/interp = 1
tracks/9/loop_wrap = true tracks/7/loop_wrap = true
tracks/9/keys = { tracks/7/keys = {
"times": PackedFloat32Array(5.33333), "times": PackedFloat32Array(21.7667),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"update": 1, "update": 1,
"values": [true] "values": [true]
} }
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("MainPlayer:hide_sprite")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 23.8667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("AnimationPlayer/intro_audio_player:volume_db")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0, 5.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [-10.0, 0.0]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("Intro/HBoxContainer:modulate")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0, 3.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_il8ov"] [sub_resource type="Animation" id="Animation_il8ov"]
resource_name = "使用鸡毛掸子" resource_name = "使用鸡毛掸子"
@ -458,34 +498,22 @@ tracks/4/keys = {
tracks/5/type = "value" tracks/5/type = "value"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("MainPlayer:visible") tracks/5/path = NodePath("DeployLayer/ambush鸡毛掸子:visible")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0.88, 3.96),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("DeployLayer/ambush鸡毛掸子:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.02, 1.48, 3.42), "times": PackedFloat32Array(0.02, 1.48, 3.42),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [true, false, true] "values": [true, false, true]
} }
tracks/7/type = "method" tracks/6/type = "method"
tracks/7/imported = false tracks/6/imported = false
tracks/7/enabled = true tracks/6/enabled = true
tracks/7/path = NodePath("MainPlayer") tracks/6/path = NodePath("MainPlayer")
tracks/7/interp = 1 tracks/6/interp = 1
tracks/7/loop_wrap = true tracks/6/loop_wrap = true
tracks/7/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0.08), "times": PackedFloat32Array(0.08),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
@ -493,42 +521,54 @@ tracks/7/keys = {
"method": &"walk_to" "method": &"walk_to"
}] }]
} }
tracks/8/type = "value" tracks/7/type = "value"
tracks/8/imported = false tracks/7/imported = false
tracks/8/enabled = true tracks/7/enabled = true
tracks/8/path = NodePath("CameraFocusMarker:zoom_ratio") tracks/7/path = NodePath("CameraFocusMarker:zoom_ratio")
tracks/8/interp = 1 tracks/7/interp = 1
tracks/8/loop_wrap = true tracks/7/loop_wrap = true
tracks/8/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0, 1.22, 3.1, 4.1), "times": PackedFloat32Array(0, 1.22, 3.1, 4.1),
"transitions": PackedFloat32Array(1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0, "update": 0,
"values": [1.0, 1.3, 1.3, 1.0] "values": [1.0, 1.3, 1.3, 1.0]
} }
tracks/9/type = "value" tracks/8/type = "value"
tracks/9/imported = false tracks/8/imported = false
tracks/9/enabled = true tracks/8/enabled = true
tracks/9/path = NodePath("CameraFocusMarker:force_offset") tracks/8/path = NodePath("CameraFocusMarker:force_offset")
tracks/9/interp = 1 tracks/8/interp = 1
tracks/9/loop_wrap = true tracks/8/loop_wrap = true
tracks/9/keys = { tracks/8/keys = {
"times": PackedFloat32Array(0, 4.08), "times": PackedFloat32Array(0, 4.08),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Vector2(0, -20), Vector2(0, -20)] "values": [Vector2(0, -20), Vector2(0, -20)]
} }
tracks/10/type = "value" tracks/9/type = "value"
tracks/10/imported = false tracks/9/imported = false
tracks/10/enabled = true tracks/9/enabled = true
tracks/10/path = NodePath("AnimationPlayer/扶正相框:playing") tracks/9/path = NodePath("AnimationPlayer/扶正相框:playing")
tracks/10/interp = 1 tracks/9/interp = 1
tracks/10/loop_wrap = true tracks/9/loop_wrap = true
tracks/10/keys = { tracks/9/keys = {
"times": PackedFloat32Array(0, 2.28), "times": PackedFloat32Array(0, 2.28),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [false, true] "values": [false, true]
} }
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("MainPlayer:hide_sprite")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0.94, 3.98),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="Animation" id="Animation_ocf0o"] [sub_resource type="Animation" id="Animation_ocf0o"]
resource_name = "纸片飘落" resource_name = "纸片飘落"
@ -642,7 +682,8 @@ oneshot_animation = "intro"
[node name="intro_audio_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"] [node name="intro_audio_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"]
stream = ExtResource("3_sluu3") stream = ExtResource("3_sluu3")
bus = &"game_sfx" volume_db = -20.0
bus = &"dialog"
[node name="piano_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] [node name="piano_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"]
bus = &"game_sfx" bus = &"game_sfx"
@ -707,10 +748,10 @@ title_filter = "c01"
note_key = "c01_倾斜的洋相片" note_key = "c01_倾斜的洋相片"
[node name="Sign" parent="Ground/DeployLayer/画框" index="1"] [node name="Sign" parent="Ground/DeployLayer/画框" index="1"]
offset_left = 3.0 offset_left = 2.77355
offset_top = -7.0 offset_top = 7.10178
offset_right = 86.0 offset_right = 85.7736
offset_bottom = 73.0 offset_bottom = 87.1018
metadata/_edit_use_anchors_ = true metadata/_edit_use_anchors_ = true
[node name="CollisionShape2D" parent="Ground/DeployLayer/画框/Area2D" index="0"] [node name="CollisionShape2D" parent="Ground/DeployLayer/画框/Area2D" index="0"]
@ -785,10 +826,10 @@ stream = null
file = "" file = ""
[node name="Sign" parent="Ground/DeployLayer/钢琴" index="2"] [node name="Sign" parent="Ground/DeployLayer/钢琴" index="2"]
offset_left = -1.0 offset_left = 4.0
offset_top = -8.0 offset_top = -18.0
offset_right = -1.0 offset_right = 4.0
offset_bottom = -8.0 offset_bottom = -18.0
[node name="CollisionShape2D" parent="Ground/DeployLayer/钢琴/Area2D" index="0"] [node name="CollisionShape2D" parent="Ground/DeployLayer/钢琴/Area2D" index="0"]
shape = SubResource("RectangleShape2D_5s1ih") shape = SubResource("RectangleShape2D_5s1ih")
@ -807,6 +848,7 @@ height = 50.0
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(26, 88) position = Vector2(26, 88)
enable_light = false
character = "小小蝶" character = "小小蝶"
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
@ -971,4 +1013,3 @@ texture = ExtResource("3_7u4bh")
[editable path="Ground/DeployLayer/oneshot纸片"] [editable path="Ground/DeployLayer/oneshot纸片"]
[editable path="Ground/DeployLayer/oneshot纸片/Sign"] [editable path="Ground/DeployLayer/oneshot纸片/Sign"]
[editable path="Ground/DeployLayer/钢琴"] [editable path="Ground/DeployLayer/钢琴"]
[editable path="Ground/DeployLayer/钢琴/Sign"]

View File

@ -92,13 +92,8 @@ func _on_pre_game_intro_finished(_res):
# 重置镜头 # 重置镜头
SceneManager.focus_player_and_reset_zoom(2.5) SceneManager.focus_player_and_reset_zoom(2.5)
await get_tree().create_timer(1.5).timeout await get_tree().create_timer(1.5).timeout
var lines = await DialogueUtil.generate_lines(tr("c01_s06_熟悉的墙画")) SceneManager.pop_os_with_str("c01_s06_熟悉的墙画", false, true)
var player = SceneManager.get_player() as MainPlayer
player.pop_os(lines)
player.os_finished.connect(pre_game_os_finished, CONNECT_ONE_SHOT)
func pre_game_os_finished():
SceneManager.release_player()
func game_intro() -> void: func game_intro() -> void:
standing_kid1.get_node("对话1ambush").enabled = false standing_kid1.get_node("对话1ambush").enabled = false
@ -147,17 +142,21 @@ func _game_counting_down(_res = null):
func talk1(): func talk1():
_on_talked() _on_talked()
# 与小孩 2 对话 # 与小孩 2 对话
func talk2(): func talk2():
_on_talked() _on_talked()
# 与残疾小孩对话 # 与残疾小孩对话
func talk3(): func talk3():
_on_talked() _on_talked()
# 玩家与三个小孩的互动计数 # 玩家与三个小孩的互动计数
var talk_count := 0 var talk_count := 0
func _on_talked(): func _on_talked():
talk_count += 1 talk_count += 1
if talk_count == 3: if talk_count == 3:
@ -165,10 +164,7 @@ func _on_talked():
await DialogueManager.dialogue_ended await DialogueManager.dialogue_ended
SceneManager.freeze_player(0) SceneManager.freeze_player(0)
await get_tree().create_timer(1.0).timeout await get_tree().create_timer(1.0).timeout
var lines = await DialogueUtil.generate_lines(tr("c01_s06_四小孩对话结束")) SceneManager.pop_os_with_str("c01_s06_四小孩对话结束", false, true)
var player = SceneManager.get_player() as MainPlayer
player.pop_os(lines)
player.os_finished.connect(SceneManager.release_player, CONNECT_ONE_SHOT)
var kid_run_tween var kid_run_tween

View File

@ -89,9 +89,7 @@ func seller_interacted():
ArchiveManager.archive.prop_inventory.enable_item("prop_信碎片2") ArchiveManager.archive.prop_inventory.enable_item("prop_信碎片2")
await get_tree().create_timer(1.5).timeout await get_tree().create_timer(1.5).timeout
$"报童音效".play() $"报童音效".play()
var msg = tr("c01_s07_获得报纸") SceneManager.pop_os_with_str("c01_s07_获得报纸")
var lines = await DialogueUtil.generate_lines(msg)
SceneManager.pop_os(lines)
# 播放获得动画 # 播放获得动画
await get_tree().create_timer(2.0).timeout await get_tree().create_timer(2.0).timeout
SceneManager.enable_prop_item("prop_信碎片2") SceneManager.enable_prop_item("prop_信碎片2")

View File

@ -155,9 +155,8 @@ func _on_fall_off_finished() -> void:
# 最后释放玩家 # 最后释放玩家
SceneManager.release_player() SceneManager.release_player()
SceneManager.get_player().visible = true SceneManager.get_player().visible = true
var lines = await DialogueUtil.generate_lines(tr("c01_s08_书架游戏完成")) await get_tree().create_timer(1.2).timeout
var callback = SceneManager.pop_os.bind(lines) SceneManager.pop_os_with_str("c01_s08_书架游戏完成")
get_tree().create_timer(1.0).timeout.connect(callback)
func _setup_weird_bookstore() -> void: func _setup_weird_bookstore() -> void:
# 切换背景音效 # 切换背景音效
@ -169,6 +168,7 @@ func _setup_weird_bookstore() -> void:
ladder.enabled = false ladder.enabled = false
manager.visible = false manager.visible = false
mice.visible = true mice.visible = true
$"../DirectionalLight2D".energy = 0.7
$"../BGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/bg_书店夜晚.png") $"../BGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/bg_书店夜晚.png")
$"../ParallaxForeground/FGParallaxLayer/FGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/fg_书店夜晚前景.png") $"../ParallaxForeground/FGParallaxLayer/FGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/fg_书店夜晚前景.png")
ladder.texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/e_梯子 夜晚.png") ladder.texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/e_梯子 夜晚.png")
@ -205,6 +205,4 @@ func pay_off_wage() -> void:
_check_portal() _check_portal()
func _on_quit_inspect_coin() -> void: func _on_quit_inspect_coin() -> void:
var msg = tr("c01_s08_获得袁大头后") SceneManager.pop_os_with_str("c01_s08_获得袁大头后")
var lines = await DialogueUtil.generate_lines(msg)
SceneManager.pop_os(lines)

View File

@ -184,6 +184,10 @@ offset = Vector2(0, 40)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(30, 150, 545, 150) points = PackedVector2Array(30, 150, 545, 150)
[node name="DirectionalLight2D" parent="Ground" index="9"]
energy = 0.0
blend_mode = 1
[node name="参考" type="Sprite2D" parent="."] [node name="参考" type="Sprite2D" parent="."]
visible = false visible = false
modulate = Color(1, 1, 1, 0.580392) modulate = Color(1, 1, 1, 0.580392)

View File

@ -4,16 +4,15 @@ extends AnimationRoot
var footstep_sfx: Sfx var footstep_sfx: Sfx
var chapter_sfx: Sfx var chapter_sfx: Sfx
var main_character: AnimatedSprite2D var main_character: AnimatedSprite2D
# 2:33 ~ 3:44, 71s var duration := 90.0
var duration := 67.0
var target_x := 10750.0 var target_x := 10750.0
var building_duration := 30.0 var building_duration := 10.0
var building_y := 450.0 var building_y := 350.0
var title_1 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕1.png") var title_1 = preload("uid://snm3q333tqhl")
var title_2 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕2.png") var title_2 = preload("uid://d4laekws15ap6")
var title_3 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕3.png") var title_3 = preload("uid://5oln8axxcfep")
var chapter_title = preload("res://asset/art/scene/c01/s04_旧版序章/f_第一章标题.png") var chapter_title = preload("uid://bvjt8iyliunfs")
# 覆盖该方法 # 覆盖该方法
@ -45,15 +44,15 @@ func _on_ground_ready() -> void:
func pop_title_1(): func pop_title_1():
SceneManager.pop_center_texture(title_1) SceneManager.pop_center_texture(title_1, 6.0)
func pop_title_2(): func pop_title_2():
SceneManager.pop_center_texture(title_2) SceneManager.pop_center_texture(title_2, 10.5)
func pop_title_3(): func pop_title_3():
SceneManager.pop_center_texture(title_3) SceneManager.pop_center_texture(title_3, 4)
# 又是这个梦.. 12句 # 又是这个梦.. 12句
@ -97,17 +96,15 @@ func dialog3() -> void:
dialogue_c01, "c01_s11_车夫对话3", [GlobalConfig.DIALOG_IGNORE_INPUT] dialogue_c01, "c01_s11_车夫对话3", [GlobalConfig.DIALOG_IGNORE_INPUT]
) )
func dialog4() -> void:
DialogueManager.show_dialogue_balloon(
dialogue_c01, "c01_s11_车夫对话4", [GlobalConfig.DIALOG_IGNORE_INPUT]
)
func _on_finished(): func _on_finished():
var camera = SceneManager.get_camera_marker() var camera = SceneManager.get_camera_marker()
footstep_sfx.stop() footstep_sfx.stop()
# 吕萍: “是到了吗,师傅”
# 车夫: “到了芦昌路26弄3号就是这里”
# 6句
# 车夫: “嗯,钱正好,那么我先跑了”
DialogueManager.show_dialogue_balloon(
dialogue_c01, "c01_s11_车夫对话4", [GlobalConfig.DIALOG_IGNORE_INPUT]
)
# 运镜 marker # 运镜 marker
var marker = Node2D.new() var marker = Node2D.new()
get_parent().add_child(marker) get_parent().add_child(marker)
@ -117,11 +114,17 @@ func _on_finished():
camera.focus_node(marker, 0.0) camera.focus_node(marker, 0.0)
# 运镜,上下打量公寓楼 # 运镜,上下打量公寓楼
var tween = create_tween() var tween = create_tween()
tween.tween_interval(3.0) tween.tween_interval(1.0)
tween.tween_callback(camera.tween_zoom.bind(0.7, 3.0)) tween.tween_callback(camera.tween_zoom.bind(0.7, 3.0))
tween.tween_callback(final_dialog)
tween.tween_property(marker, "global_position:y", target_y, building_duration) tween.tween_property(marker, "global_position:y", target_y, building_duration)
tween.tween_callback(_show_chapter) tween.tween_callback(_show_chapter)
func final_dialog():
await get_tree().create_timer(2.0).timeout
DialogueManager.show_dialogue_balloon(
dialogue_c01, "c01_s11_车夫对话5", [GlobalConfig.DIALOG_IGNORE_INPUT]
)
# 展示章节转场 # 展示章节转场
func _show_chapter(): func _show_chapter():

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=28 format=3 uid="uid://coiumaaenimbc"] [gd_scene load_steps=31 format=3 uid="uid://coiumaaenimbc"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_1sveo"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_1sveo"]
[ext_resource type="Script" uid="uid://dcn7u7v3fsscj" path="res://scene/ground/scene/c01/s11_animation.gd" id="2_espm6"] [ext_resource type="Script" uid="uid://dcn7u7v3fsscj" path="res://scene/ground/scene/c01/s11_animation.gd" id="2_espm6"]
@ -9,7 +9,9 @@
[ext_resource type="Texture2D" uid="uid://qbwh5si2owve" path="res://asset/art/scene/c01/s04_旧版序章/fg_前景3.png" id="4_1flr0"] [ext_resource type="Texture2D" uid="uid://qbwh5si2owve" path="res://asset/art/scene/c01/s04_旧版序章/fg_前景3.png" id="4_1flr0"]
[ext_resource type="AudioStream" uid="uid://qku3yk82g364" path="res://asset/audio/sfx/交互/标题出现音效.wav" id="5_amglq"] [ext_resource type="AudioStream" uid="uid://qku3yk82g364" path="res://asset/audio/sfx/交互/标题出现音效.wav" id="5_amglq"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_3k8jj"] [ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_3k8jj"]
[ext_resource type="AudioStream" uid="uid://b8rg7adnnkjll" path="res://asset/audio/BGM/戏曲声.wav" id="6_68ynl"]
[ext_resource type="SpriteFrames" uid="uid://bk54qlc8dr5xr" path="res://asset/art/gif/c01_黄包车长场景/frames.tres" id="7_wo6md"] [ext_resource type="SpriteFrames" uid="uid://bk54qlc8dr5xr" path="res://asset/art/gif/c01_黄包车长场景/frames.tres" id="7_wo6md"]
[ext_resource type="AudioStream" uid="uid://bi6gm533oqsa" path="res://asset/audio/BGM/街道背景音.wav" id="7_yajus"]
[ext_resource type="Script" uid="uid://dvmw38syi54l3" path="res://scene/ground/script/c01/s11_路灯序列.gd" id="9_6p5hp"] [ext_resource type="Script" uid="uid://dvmw38syi54l3" path="res://scene/ground/script/c01/s11_路灯序列.gd" id="9_6p5hp"]
[ext_resource type="Texture2D" uid="uid://cg1ey0l55acvs" path="res://asset/art/scene/c01/s09_黄包车长场景/e_单个路灯.png" id="9_u6881"] [ext_resource type="Texture2D" uid="uid://cg1ey0l55acvs" path="res://asset/art/scene/c01/s09_黄包车长场景/e_单个路灯.png" id="9_u6881"]
[ext_resource type="Texture2D" uid="uid://cgsq1im2q63f8" path="res://asset/art/scene/c01/s09_黄包车长场景/e_路灯灯芯.png" id="11_2w2ir"] [ext_resource type="Texture2D" uid="uid://cgsq1im2q63f8" path="res://asset/art/scene/c01/s09_黄包车长场景/e_路灯灯芯.png" id="11_2w2ir"]
@ -122,6 +124,13 @@ _data = {
&"intro": SubResource("Animation_blie8") &"intro": SubResource("Animation_blie8")
} }
[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_s11la"]
stream_count = 2
stream_0/stream = ExtResource("6_68ynl")
stream_0/volume = 5.0
stream_1/stream = ExtResource("7_yajus")
stream_1/volume = -3.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_b0oon"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_b0oon"]
size = Vector2(200, 100) size = Vector2(200, 100)
@ -159,6 +168,11 @@ bus = &"game_sfx"
script = ExtResource("3_vx53v") script = ExtResource("3_vx53v")
file = "" file = ""
[node name="背景音" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="2"]
stream = SubResource("AudioStreamSynchronized_s11la")
volume_db = -3.0
autoplay = true
[node name="BGSprite2D" parent="Ground" index="2"] [node name="BGSprite2D" parent="Ground" index="2"]
position = Vector2(-12, 2) position = Vector2(-12, 2)
offset = Vector2(0, -646) offset = Vector2(0, -646)
@ -191,19 +205,20 @@ autoplay = "车夫静止"
shape = SubResource("RectangleShape2D_b0oon") shape = SubResource("RectangleShape2D_b0oon")
[node name="小孩捡球" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"] [node name="小孩捡球" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
position = Vector2(461, 80) modulate = Color(0, 0, 0, 1)
position = Vector2(460, 69)
sprite_frames = ExtResource("3_hnnuc") sprite_frames = ExtResource("3_hnnuc")
animation = &"c01_捡球男孩_关键帧" animation = &"c01_捡球男孩_关键帧"
[node name="ambush_title1" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_3k8jj")] [node name="ambush_title1" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_3k8jj")]
position = Vector2(1553, 15) position = Vector2(1365, 4)
trigger_mode = "area_enter" trigger_mode = "area_enter"
one_shot = false one_shot = false
freeze_time = 1.0 freeze_time = 1.0
hook_method = "pop_title_1" hook_method = "pop_title_1"
[node name="ambush_title2" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_3k8jj")] [node name="ambush_title2" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_3k8jj")]
position = Vector2(3012, 4) position = Vector2(2870, -10)
trigger_mode = "area_enter" trigger_mode = "area_enter"
one_shot = false one_shot = false
hook_method = "pop_title_2" hook_method = "pop_title_2"
@ -215,17 +230,23 @@ one_shot = false
hook_method = "pop_title_3" hook_method = "pop_title_3"
[node name="ambush_dialog2" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_3k8jj")] [node name="ambush_dialog2" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_3k8jj")]
position = Vector2(1956, 5) position = Vector2(866, 5)
trigger_mode = "area_enter" trigger_mode = "area_enter"
one_shot = false one_shot = false
hook_method = "dialog2" hook_method = "dialog2"
[node name="ambush_dialog3" parent="Ground/DeployLayer" index="8" instance=ExtResource("6_3k8jj")] [node name="ambush_dialog3" parent="Ground/DeployLayer" index="8" instance=ExtResource("6_3k8jj")]
position = Vector2(5009, -15) position = Vector2(3448, -8)
trigger_mode = "area_enter" trigger_mode = "area_enter"
one_shot = false one_shot = false
hook_method = "dialog3" hook_method = "dialog3"
[node name="ambush_dialog4" parent="Ground/DeployLayer" index="9" instance=ExtResource("6_3k8jj")]
position = Vector2(5305, -2)
trigger_mode = "area_enter"
one_shot = false
hook_method = "dialog4"
[node name="路灯序列1" type="Node2D" parent="Ground/AmbientLayer" index="0"] [node name="路灯序列1" type="Node2D" parent="Ground/AmbientLayer" index="0"]
position = Vector2(405, 10) position = Vector2(405, 10)
script = ExtResource("9_6p5hp") script = ExtResource("9_6p5hp")

View File

@ -279,14 +279,12 @@ texture = ExtResource("17_nta2f")
position = Vector2(41, 98) position = Vector2(41, 98)
character = "小小蝶" character = "小小蝶"
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 3050, 150) points = PackedVector2Array(37, 150, 3050, 150)
[node name="DirectionalLight2D" parent="Ground" index="9"] [node name="DirectionalLight2D" parent="Ground" index="9"]
visible = false energy = 0.4
blend_mode = 1
[node name="参考" type="Sprite2D" parent="."] [node name="参考" type="Sprite2D" parent="."]
visible = false visible = false

View File

@ -1,15 +1,15 @@
[gd_scene load_steps=5 format=3 uid="uid://bbs7yy5aofw1v"] [gd_scene load_steps=5 format=3 uid="uid://bbs7yy5aofw1v"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_gdcov"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_gdcov"]
[ext_resource type="Texture2D" uid="uid://dibfvlmarlkg6" path="res://asset/art/scene/c02/旧版/s01_街道/bg_公寓入口.png" id="2_ni1a4"]
[ext_resource type="Script" uid="uid://jkselt4d5q4r" path="res://scene/ground/scene/c02/s01_animation.gd" id="2_uuwn3"] [ext_resource type="Script" uid="uid://jkselt4d5q4r" path="res://scene/ground/scene/c02/s01_animation.gd" id="2_uuwn3"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_6lnxd"] [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_6lnxd"]
[ext_resource type="Texture2D" uid="uid://d05pqud4yoxx3" path="res://asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png" id="3_a5loe"]
[node name="S01" type="Node2D"] [node name="S01" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_gdcov")] [node name="Ground" parent="." instance=ExtResource("1_gdcov")]
scene_name = "c02_s01" scene_name = "c02_s01"
player_y = 55 player_y = 60
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_uuwn3") script = ExtResource("2_uuwn3")
@ -20,7 +20,7 @@ data = {
oneshot_animation = "" oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"] [node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("2_ni1a4") texture = ExtResource("3_a5loe")
[node name="portal_left" parent="Ground/DeployLayer" index="0"] [node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(78, 27) position = Vector2(78, 27)
@ -28,25 +28,23 @@ immediately = true
matched_sign_texture = null matched_sign_texture = null
[node name="portal_right" parent="Ground/DeployLayer" index="1"] [node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(392, 2) position = Vector2(371, 2)
target_scene = "c02_s02" target_scene = "c02_s02"
target_portal = "left" target_portal = "left"
matched_sign_texture = null matched_sign_texture = null
[node name="Note寻人启事" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_6lnxd")] [node name="Note寻人启事" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_6lnxd")]
position = Vector2(250, -22) position = Vector2(230, -24)
title_filter = "c02" title_filter = "c02"
note_key = "c02_小蝉寻人启事_脸部破碎" note_key = "c02_小蝉寻人启事_脸部破碎"
[node name="Note门口" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6lnxd")] [node name="Note门口" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6lnxd")]
position = Vector2(311, -27) position = Vector2(290, -20)
mode = "ballon"
dialogue = "c02"
title_filter = "c02" title_filter = "c02"
note_key = "c02_s01_门口" note_key = "c02_芦昌路26"
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(78, 103) position = Vector2(78, 98)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 720, 150) points = PackedVector2Array(37, 150, 720, 150)

View File

@ -8,7 +8,9 @@ var music_box: Closeup2D
# 覆盖该方法 # 覆盖该方法
func _default_data() -> Dictionary: func _default_data() -> Dictionary:
return {} return {
"first_enter": false
}
func _ready() -> void: func _ready() -> void:
@ -19,7 +21,10 @@ func _ready() -> void:
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
wind_blows = $"../DeployLayer/WindBlows" wind_blows = $"../DeployLayer/WindBlows"
if data.first_enter:
wind_blows.visible = false wind_blows.visible = false
else:
_oneshot_wind.call_deferred()
paper_man = $"../DeployLayer/Ambush纸人" paper_man = $"../DeployLayer/Ambush纸人"
if 5 <= ArchiveManager.get_global_value("c02_musicbox_stage", 0): if 5 <= ArchiveManager.get_global_value("c02_musicbox_stage", 0):
_display_paper_man(false) _display_paper_man(false)
@ -32,25 +37,22 @@ func _on_ground_ready() -> void:
func _oneshot_wind(): func _oneshot_wind():
SceneManager.get_player().global_position.x = 53 var player = %MainPlayer as MainPlayer
SceneManager.get_player().set_facing_direction(Vector2.RIGHT)
SceneManager.freeze_player(0) SceneManager.freeze_player(0)
%MainPlayer.visible = false player.hide_sprite = true
player.set_facing_direction(Vector2.RIGHT)
player.global_position.x = 53.0
wind_blows.visible = true wind_blows.visible = true
wind_blows.play() wind_blows.play()
wind_blows.animation_finished.connect(_on_wind_finished, CONNECT_ONE_SHOT) wind_blows.animation_finished.connect(_on_wind_finished, CONNECT_ONE_SHOT)
func _on_wind_finished(): func _on_wind_finished():
%MainPlayer.visible = true set_data("first_enter", true)
%MainPlayer.hide_sprite = false
wind_blows.visible = false wind_blows.visible = false
#TODO 使用气泡文字 # 使用气泡文字
# DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s02_天冷") SceneManager.pop_os_with_str("c02_冷飕飕的", false, true)
DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT)
func _on_dialogue_ended(_res):
SceneManager.release_player()
func lumber_interacted(): func lumber_interacted():

View File

@ -1,17 +1,18 @@
[gd_scene load_steps=30 format=3 uid="uid://brck77w81fhvc"] [gd_scene load_steps=28 format=3 uid="uid://brck77w81fhvc"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_wrr6r"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_wrr6r"]
[ext_resource type="Script" uid="uid://bfrgnmde3hjn0" path="res://scene/ground/scene/c02/s02_animation.gd" id="2_5p8ev"] [ext_resource type="Script" uid="uid://bfrgnmde3hjn0" path="res://scene/ground/scene/c02/s02_animation.gd" id="2_5p8ev"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_fy0o1"] [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_fy0o1"]
[ext_resource type="Texture2D" uid="uid://5428j51dwarc" path="res://asset/art/scene/c02/s02_大门过道/bg_过道背景.png" id="3_gjwum"] [ext_resource type="Texture2D" uid="uid://5428j51dwarc" path="res://asset/art/scene/c02/s02_大门过道/bg_过道背景.png" id="3_gjwum"]
[ext_resource type="SpriteFrames" uid="uid://b7fhheih1hbvf" path="res://config/animation/entity_sprite_frames.tres" id="4_wbif8"] [ext_resource type="SpriteFrames" uid="uid://b7fhheih1hbvf" path="res://config/animation/entity_sprite_frames.tres" id="4_wbif8"]
[ext_resource type="Texture2D" uid="uid://ceijv5l0prppa" path="res://asset/art/prop/c02/海报(小)/除鼠双杰.png" id="6_gjwum"]
[ext_resource type="Texture2D" uid="uid://b8pcnqvdddo5g" path="res://asset/art/prop/c02/海报特写/除鼠二杰.png" id="7_jg8g0"]
[ext_resource type="Texture2D" uid="uid://cvgw2mxrlr6io" path="res://asset/art/scene/c02/旧版/s02_走道/ux_进门鼠疫海报yz.png" id="7_wdwbi"] [ext_resource type="Texture2D" uid="uid://cvgw2mxrlr6io" path="res://asset/art/scene/c02/旧版/s02_走道/ux_进门鼠疫海报yz.png" id="7_wdwbi"]
[ext_resource type="Texture2D" uid="uid://5pl1b7cor715" path="res://asset/art/scene/c02/旧版/s02_走道/e_纸人.png" id="7_xsghn"] [ext_resource type="Texture2D" uid="uid://5pl1b7cor715" path="res://asset/art/scene/c02/旧版/s02_走道/e_纸人.png" id="7_xsghn"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="8_52as8"] [ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="8_52as8"]
[ext_resource type="Texture2D" uid="uid://dtpn7k468vcjb" path="res://asset/art/prop/c02/海报(小)/大舞台.png" id="8_jg8g0"] [ext_resource type="Texture2D" uid="uid://bt37pw8hhgsec" path="res://asset/art/prop/c02/海报(小)/剪辫子侦探.png" id="8_m1xet"]
[ext_resource type="Texture2D" uid="uid://dut11vxri2hy5" path="res://asset/art/prop/c02/海报特写/剪辫子侦探.png" id="9_jg8g0"]
[ext_resource type="Texture2D" uid="uid://7nudp635g54o" path="res://asset/art/prop/c02/海报特写/大舞台.png" id="9_m1xet"]
[ext_resource type="PackedScene" uid="uid://beleib3mmu0af" path="res://scene/little_game/八音盒/八音盒.tscn" id="10_ifae7"] [ext_resource type="PackedScene" uid="uid://beleib3mmu0af" path="res://scene/little_game/八音盒/八音盒.tscn" id="10_ifae7"]
[ext_resource type="Texture2D" uid="uid://dut11vxri2hy5" path="res://asset/art/prop/c02/海报特写/剪辫子侦探.png" id="10_jg8g0"]
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="10_pelha"] [ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="10_pelha"]
[ext_resource type="AudioStream" uid="uid://dq2ndg5yd3rps" path="res://asset/audio/sfx/旧版/c02/出现.mp3" id="11_u68d7"] [ext_resource type="AudioStream" uid="uid://dq2ndg5yd3rps" path="res://asset/audio/sfx/旧版/c02/出现.mp3" id="11_u68d7"]
[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="12_0fckv"] [ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="12_0fckv"]
@ -22,43 +23,7 @@
[ext_resource type="SpriteFrames" uid="uid://blij4obvhb1vf" path="res://asset/art/gif/c02_公寓过道/frames.tres" id="19_q0axc"] [ext_resource type="SpriteFrames" uid="uid://blij4obvhb1vf" path="res://asset/art/gif/c02_公寓过道/frames.tres" id="19_q0axc"]
[ext_resource type="Texture2D" uid="uid://6x6mmg2hig5j" path="res://asset/art/scene/c02/s02_大门过道/e-八音盒(场景中).png" id="22_jg8g0"] [ext_resource type="Texture2D" uid="uid://6x6mmg2hig5j" path="res://asset/art/scene/c02/s02_大门过道/e-八音盒(场景中).png" id="22_jg8g0"]
[sub_resource type="Animation" id="Animation_abofy"]
resource_name = "oneshot_天冷"
length = 3.0
tracks/0/type = "method"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"_oneshot_wind"
}]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_fjkfm"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_fjkfm"]
_data = {
&"oneshot_天冷": SubResource("Animation_abofy")
}
[sub_resource type="Gradient" id="Gradient_p6da7"]
interpolation_mode = 2
interpolation_color_space = 1
offsets = PackedFloat32Array(0, 0.177305, 0.43617, 0.684397, 0.989362)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.294118, 1.01176, 1.01176, 1.01176, 0.12549, 1, 1, 1, 0.00520623, 1, 1, 1, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_m1xet"]
gradient = SubResource("Gradient_p6da7")
width = 512
height = 512
use_hdr = true
fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(1, 1)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_dwg0o"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_dwg0o"]
resource_local_to_scene = true resource_local_to_scene = true
@ -93,9 +58,10 @@ libraries = {
script = ExtResource("2_5p8ev") script = ExtResource("2_5p8ev")
data = { data = {
"display_paper_man": false, "display_paper_man": false,
"first_enter": false,
"oneshot_animation_played": false "oneshot_animation_played": false
} }
oneshot_animation = "oneshot_天冷" oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"] [node name="BGSprite2D" parent="Ground" index="2"]
self_modulate = Color(0.831373, 0.886275, 0.956863, 1) self_modulate = Color(0.831373, 0.886275, 0.956863, 1)
@ -105,7 +71,7 @@ texture = ExtResource("3_gjwum")
offset = Vector2(0, -240) offset = Vector2(0, -240)
[node name="portal_left" parent="Ground/DeployLayer" index="0"] [node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(32, 15) position = Vector2(28, 21)
target_scene = "c02_s01" target_scene = "c02_s01"
target_portal = "right" target_portal = "right"
matched_sign_texture = null matched_sign_texture = null
@ -121,35 +87,35 @@ unique_name_in_owner = true
position = Vector2(394, 23) position = Vector2(394, 23)
sprite_frames = ExtResource("4_wbif8") sprite_frames = ExtResource("4_wbif8")
animation = &"c02_吕萍_风吹过" animation = &"c02_吕萍_风吹过"
frame = 10
frame_progress = 1.0
[node name="PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/WindBlows"] [node name="Ambush太暗了" parent="Ground/DeployLayer" index="3" instance=ExtResource("8_52as8")]
position = Vector2(-341, 18) position = Vector2(177, 42)
energy = 0.5 hook_os_key = "c02_太暗了"
range_item_cull_mask = 15
texture = SubResource("GradientTexture2D_m1xet")
height = 10.0
[node name="海报1" parent="Ground/DeployLayer" index="3" instance=ExtResource("12_0fckv")] [node name="海报1" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")]
position = Vector2(255, -11) position = Vector2(223, -28)
texture = ExtResource("6_gjwum")
content_centered = true content_centered = true
texture_cover = ExtResource("9_jg8g0") texture_cover = ExtResource("7_jg8g0")
content_key = "c02_海报1" content_key = "c02_海报1"
[node name="海报2" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")] [node name="海报2" parent="Ground/DeployLayer" index="5" instance=ExtResource("12_0fckv")]
position = Vector2(319, -17) position = Vector2(314, -26)
texture = ExtResource("8_jg8g0") texture = ExtResource("8_m1xet")
content_centered = true content_centered = true
texture_cover = ExtResource("9_m1xet") texture_cover = ExtResource("10_jg8g0")
content_key = "c02_海报2" content_key = "c02_海报2"
[node name="鼠疫海报" parent="Ground/DeployLayer" index="5" instance=ExtResource("12_0fckv")] [node name="鼠疫海报" parent="Ground/DeployLayer" index="6" instance=ExtResource("12_0fckv")]
position = Vector2(441, -14) position = Vector2(441, -14)
texture_cover = ExtResource("7_wdwbi") texture_cover = ExtResource("7_wdwbi")
content_key = "c02_鼠疫海报" content_key = "c02_鼠疫海报"
[node name="Ambush纸人" parent="Ground/DeployLayer" index="6" instance=ExtResource("8_52as8")] [node name="Ambush纸人" parent="Ground/DeployLayer" index="7" instance=ExtResource("8_52as8")]
visible = false visible = false
position = Vector2(113, 53) position = Vector2(113, 44)
texture = ExtResource("7_xsghn") texture = ExtResource("7_xsghn")
flip_h = true flip_h = true
enabled = false enabled = false
@ -182,13 +148,13 @@ stream = ExtResource("11_u68d7")
dir = "c02" dir = "c02"
file = "出现.mp3" file = "出现.mp3"
[node name="Ambush杂物堆" parent="Ground/DeployLayer" index="7" instance=ExtResource("8_52as8")] [node name="Ambush杂物堆" parent="Ground/DeployLayer" index="8" instance=ExtResource("8_52as8")]
position = Vector2(387, 66) position = Vector2(387, 66)
trigger_mode = "interact" trigger_mode = "interact"
freeze_time = 1.0 freeze_time = 1.0
hook_method = "lumber_interacted" hook_method = "lumber_interacted"
[node name="杂物眨眼睛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="8"] [node name="杂物眨眼睛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="9"]
visible = false visible = false
light_mask = 5 light_mask = 5
position = Vector2(269, 38) position = Vector2(269, 38)
@ -201,35 +167,35 @@ energy = 3.0
range_item_cull_mask = 4 range_item_cull_mask = 4
texture = ExtResource("17_m1xet") texture = ExtResource("17_m1xet")
[node name="Note老鼠洞" parent="Ground/DeployLayer" index="9" instance=ExtResource("3_fy0o1")] [node name="Note老鼠洞" parent="Ground/DeployLayer" index="10" instance=ExtResource("3_fy0o1")]
position = Vector2(507, 64) position = Vector2(507, 64)
title_filter = "c02" title_filter = "c02"
note_key = "c02_老鼠洞" note_key = "c02_老鼠洞"
[node name="老鼠拖鞋" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="10"] [node name="老鼠拖鞋" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="11"]
visible = false visible = false
position = Vector2(498, 0) position = Vector2(498, 0)
sprite_frames = ExtResource("19_q0axc") sprite_frames = ExtResource("19_q0axc")
animation = &"老鼠托小鞋子" animation = &"老鼠托小鞋子"
[node name="Interactable小鞋子" parent="Ground/DeployLayer" index="11" instance=ExtResource("13_ck13g")] [node name="Interactable小鞋子" parent="Ground/DeployLayer" index="12" instance=ExtResource("13_ck13g")]
position = Vector2(498, 65) position = Vector2(498, 65)
enabled = false enabled = false
mute_when_interacted = true mute_when_interacted = true
[node name="Ambush推小鞋子" parent="Ground/DeployLayer" index="12" instance=ExtResource("8_52as8")] [node name="Ambush推小鞋子" parent="Ground/DeployLayer" index="13" instance=ExtResource("8_52as8")]
position = Vector2(537, 54) position = Vector2(537, 54)
one_shot = false one_shot = false
freeze_time = 1.0 freeze_time = 1.0
hook_method = "check_if_show_shoes" hook_method = "check_if_show_shoes"
[node name="煤油灯" parent="Ground/DeployLayer" index="13" instance=ExtResource("17_mpkj1")] [node name="煤油灯" parent="Ground/DeployLayer" index="14" instance=ExtResource("17_mpkj1")]
position = Vector2(122, -15) position = Vector2(122, -15)
gaslight_energy = 2.0 gaslight_energy = 2.0
gaslight_ground_energy = 2.0 gaslight_ground_energy = 2.0
debug_light_switch = true debug_light_switch = true
[node name="Closeup八音盒" parent="Ground/DeployLayer" index="14" instance=ExtResource("19_6wwyd")] [node name="Closeup八音盒" parent="Ground/DeployLayer" index="15" instance=ExtResource("19_6wwyd")]
position = Vector2(533, 67) position = Vector2(533, 67)
packed_scene = ExtResource("10_ifae7") packed_scene = ExtResource("10_ifae7")
@ -250,6 +216,7 @@ texture = SubResource("GradientTexture2D_fvldj")
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(53, 98) position = Vector2(53, 98)
facing_direction = Vector2(1, 0)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 670, 150) points = PackedVector2Array(37, 150, 670, 150)

View File

@ -121,7 +121,7 @@ func eavesdrop() -> void:
await get_tree().create_timer(1.0).timeout await get_tree().create_timer(1.0).timeout
# TODO 对话替换 # TODO 对话替换
DialogueManager.show_dialogue_balloon( DialogueManager.show_dialogue_balloon(
dialogue_c02, "c02_04_李氏王赖", [GlobalConfig.DIALOG_IGNORE_INPUT] dialogue_c02, "c02_04_李氏", [GlobalConfig.DIALOG_IGNORE_INPUT]
) )
await animation_finished await animation_finished
SceneManager.release_player() SceneManager.release_player()
@ -164,16 +164,13 @@ func bully_ambush():
func bully_end(): func bully_end():
SceneManager.release_player() SceneManager.release_player()
# 小猫玩具微亮 #TODO 小猫玩具微亮
SceneManager.pop_debug_dialog_info("美术", "手中小猫玩具微亮") SceneManager.pop_debug_dialog_info("美术", "手中小猫玩具微亮")
#TODO 使用气泡文字 SceneManager.pop_os_with_str("小猫玩具发光", true, true)
# DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_玩具发光")
func block_right_move(): func block_right_move():
var msg = tr("c02_点火前阻止右移") SceneManager.pop_os_with_str("c02_点火前阻止右移")
var lines = await DialogueUtil.generate_lines(msg)
SceneManager.pop_os(lines)
# var count_down_tween:Tween # var count_down_tween:Tween
@ -187,9 +184,7 @@ func block_right_move():
func _on_counter_interacted(): func _on_counter_interacted():
if not ArchiveManager.get_global_value("c02_ready_to_fire"): if not ArchiveManager.get_global_value("c02_ready_to_fire"):
var msg = tr("c02_火灾等待准备") SceneManager.pop_os_with_str("c02_火灾等待准备")
var lines = await DialogueUtil.generate_lines(msg)
SceneManager.pop_os(lines)
return return
counter.enabled = false counter.enabled = false
if not ArchiveManager.get_global_value("c02_burning"): if not ArchiveManager.get_global_value("c02_burning"):

View File

@ -112,7 +112,11 @@ func _c02_final_show():
# WARN: 如果不延时,开场直接显示 dialog 可能会显示失败(无报错提示) # WARN: 如果不延时,开场直接显示 dialog 可能会显示失败(无报错提示)
await get_tree().create_timer(0.1).timeout await get_tree().create_timer(0.1).timeout
player.global_position.x = 650 player.global_position.x = 650
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈") # 和小蝉对话
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈1")
await DialogueManager.dialogue_ended
# 瞎子打断
DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_谢幕交谈2")
func _c02_final_show_end(): func _c02_final_show_end():

View File

@ -361,6 +361,7 @@ texture = ExtResource("5_26mqt")
points = PackedVector2Array(37, 150, 900, 150) points = PackedVector2Array(37, 150, 900, 150)
[node name="DirectionalLight2D" parent="Ground" index="9"] [node name="DirectionalLight2D" parent="Ground" index="9"]
visible = false
energy = 0.9 energy = 0.9
blend_mode = 1 blend_mode = 1

View File

@ -142,6 +142,7 @@ func _quit_communicating() -> void:
# 重置动画 # 重置动画
SceneManager.get_player().set_facing_direction(Vector2.ONE) SceneManager.get_player().set_facing_direction(Vector2.ONE)
animated_sprite.visible = true animated_sprite.visible = true
animated_sprite.play("小手_纸杯_show")
var interacting := false: var interacting := false:

View File

@ -134,7 +134,6 @@ func _post_success():
# 不显示文本,让玩家在重要物品栏去看(提示) # 不显示文本,让玩家在重要物品栏去看(提示)
# var tween = create_tween() # var tween = create_tween()
# tween.tween_property(content_rect, "modulate:a", 1.0, 1.0) # tween.tween_property(content_rect, "modulate:a", 1.0, 1.0)
SceneManager.pop_center_notification(tr("ui_important_item_update"))
var texture = preload("res://asset/art/prop/c01/院长的信.png") var texture = preload("res://asset/art/prop/c01/院长的信.png")
var inspector = SceneManager.get_inspector() var inspector = SceneManager.get_inspector()
inspector.pop_standard_inspection(texture, null, tr("prop_院长的信_说明")) inspector.pop_standard_inspection(texture, null, tr("prop_院长的信_说明"))

View File

@ -2,7 +2,7 @@
[ext_resource type="Script" uid="uid://b2aixse6e2l86" path="res://scene/notification/notification.gd" id="1_j0g80"] [ext_resource type="Script" uid="uid://b2aixse6e2l86" path="res://scene/notification/notification.gd" id="1_j0g80"]
[ext_resource type="FontFile" uid="uid://dr8bp6p7byb37" path="res://asset/font/字体/方正楷体简体.TTF" id="2_eh7gu"] [ext_resource type="FontFile" uid="uid://dr8bp6p7byb37" path="res://asset/font/字体/方正楷体简体.TTF" id="2_eh7gu"]
[ext_resource type="Texture2D" uid="uid://b0f00retoqxyc" path="res://asset/art/scene/c01/s04_旧版序章/f_动画字幕1.png" id="3_wqejl"] [ext_resource type="Texture2D" uid="uid://d4laekws15ap6" path="res://asset/art/scene/c01/s09_黄包车长场景/动画字幕/动画字幕-08.png" id="3_otkdq"]
[sub_resource type="LabelSettings" id="LabelSettings_ycsas"] [sub_resource type="LabelSettings" id="LabelSettings_ycsas"]
font = ExtResource("2_eh7gu") font = ExtResource("2_eh7gu")
@ -64,9 +64,15 @@ label_settings = SubResource("LabelSettings_ycsas")
[node name="MarginContainer3" type="MarginContainer" parent="."] [node name="MarginContainer3" type="MarginContainer" parent="."]
layout_mode = 1 layout_mode = 1
anchors_preset = 15 anchors_preset = 8
anchor_right = 1.0 anchor_left = 0.5
anchor_bottom = 1.0 anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -150.0
offset_top = -150.0
offset_right = 150.0
offset_bottom = 150.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2 mouse_filter = 2
@ -79,6 +85,6 @@ theme_override_constants/margin_bottom = 64
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
mouse_filter = 2 mouse_filter = 2
texture = ExtResource("3_wqejl") texture = ExtResource("3_otkdq")
expand_mode = 1 expand_mode = 3
stretch_mode = 5 stretch_mode = 5

View File

@ -7,6 +7,11 @@ signal position_updated(global_pos: Vector2)
signal os_finished signal os_finished
signal animation_finished signal animation_finished
@export var hide_sprite := false:
set(val):
hide_sprite = val
if is_node_ready():
sprite.visible = not hide_sprite
@export var enable_light := true: @export var enable_light := true:
set(val): set(val):
enable_light = val enable_light = val
@ -76,6 +81,7 @@ var current_animation_config := (
# # animation -> {frame -> {shadow polygon}} # # animation -> {frame -> {shadow polygon}}
# var animation_shadow_polygons = {} # var animation_shadow_polygons = {}
func _ready() -> void: func _ready() -> void:
sprite.visible = not hide_sprite
light.enabled = enable_light light.enabled = enable_light
os_contaner.modulate.a = 0.0 os_contaner.modulate.a = 0.0
# set up animated sprite # set up animated sprite
@ -240,6 +246,9 @@ func _tweak_camera_marker():
func set_catty_light(enable := false): func set_catty_light(enable := false):
# 如果没有允许光照,那么 catty 的光也不添加
if not enable_light:
return
var tween = create_tween() var tween = create_tween()
if enable: if enable:
tween.tween_property(catty_light, "energy", catty_light_energy, 0.5) tween.tween_property(catty_light, "energy", catty_light_energy, 0.5)
@ -361,26 +370,53 @@ func _reset_os_and_shadow_position():
var os_tween: Tween var os_tween: Tween
var os_pausing_timer: SceneTreeTimer
func pop_os(lines := []): func pop_os(lines := [], auto_freeze := true, auto_release := true):
if os_tween: if os_tween:
os_tween.kill() os_tween.kill()
if auto_freeze:
freeze_player(0, 3, false)
os_tween = create_tween() os_tween = create_tween()
os_label.text = "" os_label.text = ""
os_tween.tween_property(os_contaner, "modulate:a", 1.0, 0.2) os_tween.tween_property(os_contaner, "modulate:a", 1.0, 0.2)
for line in lines: for line in lines:
var duration = max(min(4.0, line.text.length() * 0.2), 2.0) var duration = max(min(4.0, line.text.length() * 0.2), 2.0) + 0.2
# var duration = max(min(4.0, line.text.length() * 0.2), 2.0) - 0.4 # var duration = max(min(4.0, line.text.length() * 0.2), 2.0) - 0.4
os_tween.tween_callback(_os_load_line.bind(line)) os_tween.tween_callback(_os_load_line.bind(line, duration))
os_tween.tween_callback(os_label.type_out) os_tween.tween_interval(0.1)
os_tween.tween_interval(duration)
os_tween.tween_callback(os_finished.emit) os_tween.tween_callback(os_finished.emit)
os_tween.tween_property(os_contaner, "modulate:a", 0.0, 0.2) os_tween.tween_property(os_contaner, "modulate:a", 0.0, 0.2)
if auto_release:
os_tween.tween_callback(release_player)
func _os_load_line(line): func _os_load_line(line, duration):
os_label.dialogue_line = line os_label.dialogue_line = line
os_label.type_out()
os_tween.pause()
if os_pausing_timer and os_pausing_timer.timeout.is_connected(os_tween.play):
os_pausing_timer.timeout.disconnect(os_tween.play)
os_pausing_timer = get_tree().create_timer(duration)
os_pausing_timer.timeout.connect(_on_os_line_timeout, CONNECT_ONE_SHOT)
func _on_os_line_timeout(naturally := true):
if not naturally:
if os_pausing_timer.timeout.is_connected(_on_os_line_timeout):
os_pausing_timer.timeout.disconnect(_on_os_line_timeout)
if os_tween.is_valid():
os_label.text = ""
os_tween.play()
os_pausing_timer = null
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("interact"):
if os_pausing_timer and os_pausing_timer.time_left > 0:
_on_os_line_timeout(false)
get_viewport().set_input_as_handled()
# animation -> offset_y # animation -> offset_y

View File

@ -13,6 +13,9 @@ signal exited
@onready var exit_btn = %ExitBtn as Button @onready var exit_btn = %ExitBtn as Button
@onready var diary_btn = %DiaryBtn as Button @onready var diary_btn = %DiaryBtn as Button
# 音量 DB 偏移
var sfx_db_offset := 6.0
var dialog_db_offset := -20.0
func _ready(): func _ready():
layer = GlobalConfig.CANVAS_LAYER_SETTINGS layer = GlobalConfig.CANVAS_LAYER_SETTINGS
@ -22,10 +25,10 @@ func _ready():
AudioServer.get_bus_volume_db(AudioServer.get_bus_index("Master")) AudioServer.get_bus_volume_db(AudioServer.get_bus_index("Master"))
) )
sfx_bus_slider.value = db_to_linear( sfx_bus_slider.value = db_to_linear(
AudioServer.get_bus_volume_db(AudioServer.get_bus_index("game_sfx")) AudioServer.get_bus_volume_db(AudioServer.get_bus_index("game_sfx")) - sfx_db_offset
) )
dialog_bus_slider.value = db_to_linear( dialog_bus_slider.value = db_to_linear(
AudioServer.get_bus_volume_db(AudioServer.get_bus_index("dialog")) AudioServer.get_bus_volume_db(AudioServer.get_bus_index("dialog")) - dialog_db_offset
) )
master_bus_slider.value_changed.connect(_on_master_bus_slider_value_changed) master_bus_slider.value_changed.connect(_on_master_bus_slider_value_changed)
sfx_bus_slider.value_changed.connect(_on_sfx_bus_slider_value_changed) sfx_bus_slider.value_changed.connect(_on_sfx_bus_slider_value_changed)
@ -69,13 +72,13 @@ func _on_master_bus_slider_value_changed(value: float) -> void:
func _on_sfx_bus_slider_value_changed(value: float) -> void: func _on_sfx_bus_slider_value_changed(value: float) -> void:
var db_value = linear_to_db(value) var db_value = linear_to_db(value) + sfx_db_offset
GlobalConfigManager.config.db_game_sfx = db_value GlobalConfigManager.config.db_game_sfx = db_value
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("game_sfx"), db_value) AudioServer.set_bus_volume_db(AudioServer.get_bus_index("game_sfx"), db_value)
func _on_dialog_bus_slider_value_changed(value: float) -> void: func _on_dialog_bus_slider_value_changed(value: float) -> void:
var db_value = linear_to_db(value) var db_value = linear_to_db(value) + dialog_db_offset
GlobalConfigManager.config.db_dialog = db_value GlobalConfigManager.config.db_dialog = db_value
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("dialog"), db_value) AudioServer.set_bus_volume_db(AudioServer.get_bus_index("dialog"), db_value)