diff --git a/asset/art/gif/c02_杂项/听纸杯/0.png b/asset/art/gif/c02_杂项/听纸杯/0.png index 5c77e8f2..aa98b25b 100644 Binary files a/asset/art/gif/c02_杂项/听纸杯/0.png and b/asset/art/gif/c02_杂项/听纸杯/0.png differ diff --git a/asset/art/gif/c02_杂项/听纸杯/1.png b/asset/art/gif/c02_杂项/听纸杯/1.png index c9413ecc..85acdad3 100644 Binary files a/asset/art/gif/c02_杂项/听纸杯/1.png and b/asset/art/gif/c02_杂项/听纸杯/1.png differ diff --git a/asset/art/gif/c02_杂项/听纸杯/2.png b/asset/art/gif/c02_杂项/听纸杯/2.png index dc22508b..752d366b 100644 Binary files a/asset/art/gif/c02_杂项/听纸杯/2.png and b/asset/art/gif/c02_杂项/听纸杯/2.png differ diff --git a/asset/art/gif/c02_杂项/听纸杯/3.png b/asset/art/gif/c02_杂项/听纸杯/3.png index c9413ecc..85acdad3 100644 Binary files a/asset/art/gif/c02_杂项/听纸杯/3.png and b/asset/art/gif/c02_杂项/听纸杯/3.png differ diff --git a/asset/art/gif/c02_杂项/听纸杯/4.png b/asset/art/gif/c02_杂项/听纸杯/4.png index 5c77e8f2..aa98b25b 100644 Binary files a/asset/art/gif/c02_杂项/听纸杯/4.png and b/asset/art/gif/c02_杂项/听纸杯/4.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/0.png b/asset/art/gif/c02_杂项/拿纸杯/0.png index 5d798544..a17b193f 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/0.png and b/asset/art/gif/c02_杂项/拿纸杯/0.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/1.png b/asset/art/gif/c02_杂项/拿纸杯/1.png index 7458c4ec..7fa1f599 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/1.png and b/asset/art/gif/c02_杂项/拿纸杯/1.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/2.png b/asset/art/gif/c02_杂项/拿纸杯/2.png index 4fa3a269..ce53d54a 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/2.png and b/asset/art/gif/c02_杂项/拿纸杯/2.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/3.png b/asset/art/gif/c02_杂项/拿纸杯/3.png index b7719fe5..a3951ba7 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/3.png and b/asset/art/gif/c02_杂项/拿纸杯/3.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/4.png b/asset/art/gif/c02_杂项/拿纸杯/4.png index 2ae5df85..b607af2e 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/4.png and b/asset/art/gif/c02_杂项/拿纸杯/4.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/5.png b/asset/art/gif/c02_杂项/拿纸杯/5.png index bb24d345..3789e30b 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/5.png and b/asset/art/gif/c02_杂项/拿纸杯/5.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/6.png b/asset/art/gif/c02_杂项/拿纸杯/6.png index c6747dc1..fc17934b 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/6.png and b/asset/art/gif/c02_杂项/拿纸杯/6.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/7.png b/asset/art/gif/c02_杂项/拿纸杯/7.png index 25c0d250..56da4421 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/7.png and b/asset/art/gif/c02_杂项/拿纸杯/7.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/8.png b/asset/art/gif/c02_杂项/拿纸杯/8.png index c818006f..e50f4790 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/8.png and b/asset/art/gif/c02_杂项/拿纸杯/8.png differ diff --git a/asset/art/gif/c02_杂项/拿纸杯/9.png b/asset/art/gif/c02_杂项/拿纸杯/9.png index 5c77e8f2..a3c1083d 100644 Binary files a/asset/art/gif/c02_杂项/拿纸杯/9.png and b/asset/art/gif/c02_杂项/拿纸杯/9.png differ diff --git a/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png b/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png new file mode 100755 index 00000000..e4b1975d Binary files /dev/null and b/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png differ diff --git a/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png.import b/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png.import new file mode 100644 index 00000000..0a363525 --- /dev/null +++ b/asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png.import @@ -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 diff --git a/asset/dialogue/c01.dialogue b/asset/dialogue/c01.dialogue index 747c695a..7fcd79aa 100644 --- a/asset/dialogue/c01.dialogue +++ b/asset/dialogue/c01.dialogue @@ -1,11 +1,7 @@ -~ c01_s05_院长房间_开场 +~ c01_s05_院长房间_看不清了 ???: ...后面看不清了。 [ID:c01_1小小蝶_开头阅读2] => END -#~ c01_s05_院长房间_开场_sh -#???: ...后面看不清了。 [ID:c01_1小小蝶_开头阅读2] -#=> END - ~ c01_s06_走廊前对话 老师: 昨天认的字,现在全忘了? [ID:c01_2老师1] 老师: (唉呀)黄鱼脑子! [ID:c01_2老师2] @@ -152,6 +148,9 @@ 车夫: 读书?读书好呀。打您一上车,我就能感觉到那什么...书香气,对对对,书香气! [ID:c01_9车夫_17] 车夫: 您将来一定大有可为! [ID:c01_9车夫_18] 吕萍: 那就借师傅吉言了。 [ID:c01_9小蝶_8] +=> END + +~ c01_s11_车夫对话5 车夫: 到地方喽——您看好自己的东西再下车! [ID:c01_9车夫_19] 吕萍: 谢谢。 [ID:c01_9小蝶_9] => END \ No newline at end of file diff --git a/asset/dialogue/c02.csv b/asset/dialogue/c02.csv index d75450e3..5efcfd66 100644 --- a/asset/dialogue/c02.csv +++ b/asset/dialogue/c02.csv @@ -224,7 +224,7 @@ c02_4小蝉_1,啊?,,方小蝉,, c02_4小蝉_2,...「死」是什么意思?,,方小蝉,, c02_4瞎子_2,每个人就像一个封起来的盒子,人死了,就是打开盒盖,把里面的灵魂放走了。,,方启钊,, c02_4小蝉_3,然后呢?,,方小蝉,, -c02_4小蝉_4,方小蝉:那个盒子怎么样了?,,,, +c02_4小蝉_4,那个盒子怎么样了?,,方小蝉,, c02_4瞎子_3,一个空盒子而已,没人会在乎这个。,,方启钊,, c02_4小蝉_5,...那你死了之后,也会变成空盒子吗?我可以住进空盒子里陪着你。,,方小蝉,, c02_4瞎子_4,你不明白。人死了,就意味着...,,方启钊,, @@ -237,9 +237,9 @@ c02_4瞎子_9,你还小,不需要知道这么多。,,方启钊,, c02_4小蝉_7,...但是你不要死,爸爸。,,方小蝉,, c02_4瞎子_10,生死哪由人。,,方启钊,, c02_4瞎子_11,走吧。,,方启钊,, -c02_11肉铺敲门_1,理发二楼,看病三楼!,,???,, -c02_11肉铺敲门_2,敲什么敲!,,???,, -c02_11肉铺敲门_3,不做生意赶紧滚!,,???,, +c02_11肉铺敲门_1,理发二楼,看病三楼!,,???,, +c02_11肉铺敲门_2,敲什么敲!,,???,, +c02_11肉铺敲门_3,不做生意赶紧滚!,,???,, c02_5小男孩_1,大姐姐,等一下!你玩过打弹珠没有?,,小男孩,, c02_5小男孩_2,你赢了的话,我们就认你当老大,听你的吩咐办事!,,小男孩,, c02_5小男孩_3,你得有弹珠才能跟我们玩儿!,,,, diff --git a/asset/dialogue/c02.dialogue b/asset/dialogue/c02.dialogue index 0737caf3..5f49575d 100644 --- a/asset/dialogue/c02.dialogue +++ b/asset/dialogue/c02.dialogue @@ -1,8 +1,3 @@ -~ c02_s01_门口 -芦昌路26弄3号 [ID:c02_芦昌路26] -=> END - - ~ c02_04_李氏癞子 #[#anonymous] 李兰: 真的假的?你钻进去啦,你这个体型进得去哒? [ID:c02_6偷听对话_李氏_1] @@ -45,12 +40,12 @@ => END ~ c02_s03_敲门游戏intro -???: 理发二楼,看病三楼! [ID:c02_11肉铺敲门_1] +???: 理发二楼,看病三楼! [ID:c02_11肉铺敲门_1] => END ~ c02_s03_敲门游戏 -???: 敲什么敲! [ID:c02_11肉铺敲门_2] -???: 不做生意赶紧滚! [ID:c02_11肉铺敲门_3] +???: 敲什么敲! [ID:c02_11肉铺敲门_2] +???: 不做生意赶紧滚! [ID:c02_11肉铺敲门_3] => END # 寻找弹珠 @@ -117,7 +112,7 @@ #【未完成拯救小蝉的游戏】 #小蝉: 再见了,大姐姐。 -~ c02_s11_谢幕交谈 +~ c02_s11_谢幕交谈1 吕萍: 小姑娘,你认识我,对不对? [ID:c02_10小蝶_1] 方小蝉: 嗯。 [ID:c02_10小蝉_1] 吕萍: 我能感觉到,从我踏进这里的那一刻,你就在盯着我。 [ID:c02_10小蝶_2] diff --git a/asset/dialogue/inspect_content.dialogue b/asset/dialogue/inspect_content.dialogue index b19dd6a0..80974e45 100644 --- a/asset/dialogue/inspect_content.dialogue +++ b/asset/dialogue/inspect_content.dialogue @@ -1,27 +1,27 @@ -~ c01_院长座钟 -x年 [ID:t89c0f4a8de] -下午一点 [ID:t356af5308e] +~ c01_飘落的寻人启事 +寻人启事 [ID:c01_飘落的寻人启事1] => END ~ c02_鼠疫海报 -据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。 [ID:t344c97cf2c] -有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。 [ID:tdb119a3714] +据闻奉贤县分水墩有两人染受鼠疫毙命,医官拟将死者尸骸解剖以观受病之原因及其情状,竟未得死者家属之同意,以该处风气闭塞,闻解剖之说,地方人民甚为惊骇,闻已有聚众滋闹之事,并闻医官已被人殴打,政府以防疫事宜关系紧要拟改令赴沪南区一带调查防疫事宜云。[ID:tdb119a3714] 《申报》 [ID:ta750647b12] 民国五年一月十三日 [ID:t736cca4563] => END -~ c02_公寓告示 -公寓告示正文 [ID:公寓告示正文_1] -=> END - ~ c02_海报1 -海报1内容 [ID:c02_海报1] +战胜北方鼠疫之二杰 [ID:c02_海报1] => END ~ c02_海报2 -海报2内容 [ID:c02_海报2] +剪辮懸樑上偵探奇聞 [ID:c02_海报2] +=> END + +~ c02_海报3 +大舞台 [ID:c02_海报3] +二月初三夜,二等正厅,三等包厢 [ID:c02_海报4] => END ~ c02_保卫科花名册 -花名册内容 [ID:c02_保卫科花名册] +芦昌公寓居民登记簿(黄国栋记) [ID:c02_保卫科花名册1] +... [ID:c02_保卫科花名册2] => END diff --git a/asset/dialogue/item_description.csv b/asset/dialogue/item_description.csv index 615375a0..4b46685c 100644 --- a/asset/dialogue/item_description.csv +++ b/asset/dialogue/item_description.csv @@ -4,6 +4,42 @@ ui_press_b,按 B 打开背包,,, 5,5,,, 院长的信...,院长的信...,,, 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_退出游戏,退出游戏,,, @@ -31,9 +67,9 @@ ui_阅读,阅读,,, ui_检阅,检阅,,, ui_收起,收起,,, ui_夜行船1,百岁光阴一梦蝶。,,, -ui_夜行船2,重回⾸往事堪嗟。,,, -ui_夜行船3,今⽇春来。,,, -ui_夜行船4,今⽇春来,明朝花谢。,,, +ui_夜行船2,重回首往事堪嗟。,,, +ui_夜行船3,今日春来。,,, +ui_夜行船4,今日春来,明朝花谢。,,, ui_夜行船5,急罚盏夜阑灯灭。,,, ui_夜行船6,夜行船,,, prop_空手,空手,,, @@ -108,48 +144,17 @@ c01_s07_书店展柜,"院长说,读一百本书,就可以成为无所不能 如果我再大一些,没准可以求店长把我留下,我会干很多活,也能吃苦...",,, 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_民国六年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_图案一样,这图案和我手臂上的一摸一样,,, diff --git a/asset/dialogue/item_description.dialogue b/asset/dialogue/item_description.dialogue index d64e7fb4..a871743c 100644 --- a/asset/dialogue/item_description.dialogue +++ b/asset/dialogue/item_description.dialogue @@ -33,9 +33,9 @@ 百岁光阴一梦蝶。 [ID:ui_夜行船1] -重回⾸往事堪嗟。 [ID:ui_夜行船2] -今⽇春来。 [ID:ui_夜行船3] -今⽇春来,明朝花谢。 [ID:ui_夜行船4] +重回首往事堪嗟。 [ID:ui_夜行船2] +今日春来。 [ID:ui_夜行船3] +今日春来,明朝花谢。 [ID:ui_夜行船4] 急罚盏夜阑灯灭。 [ID:ui_夜行船5] 夜行船 [ID:ui_夜行船6] => END @@ -149,16 +149,21 @@ 工钱还在老地方。 [ID:c01_s08_获得袁大头后] # c02 # c02-s01 街道 -似乎是一张寻人启事\n脸的部分被撕掉了,看不清 [ID:c02_小蝉寻人启事_脸部破碎] +寻人启事...画像和字迹都看不清。 [ID:c02_小蝉寻人启事_脸部破碎] +芦昌路26弄3号,就是这里了。 [ID:c02_芦昌路26] # c02-s02 走道 +冷飕飕的... [ID:c02_冷飕飕的] +太暗了,找找能照明的东西吧。 [ID:c02_太暗了] +上了年头的煤油灯,似乎很久没用过了。 [ID:c02_陈旧的煤油灯] +呼,那股阴冷的感觉也消失了。 [ID:c02_使用煤油灯] 几张卫生宣传画 [ID:c02_卫生宣传画] 一个老鼠洞\n在这种楼里挺常见的 [ID:c02_老鼠洞] 十几年前的报纸 [ID:c02_十几年前的报纸] # c02 内侧楼道 被挡住了 [ID:c02_一楼楼道被挡住] - # c02 火灾 还没准备好点火呢 [ID:c02_火灾等待准备] +嗯?玩具在发光 [ID:小猫玩具发光] 没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移] diff --git a/config/animation/entity_sprite_frames.tres b/config/animation/entity_sprite_frames.tres index 8aa39e1e..e44aba2b 100644 --- a/config/animation/entity_sprite_frames.tres +++ b/config/animation/entity_sprite_frames.tres @@ -1970,6 +1970,24 @@ animations = [{ "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("146_glua7") +}, { +"duration": 1.0, +"texture": ExtResource("147_jn0hd") +}, { +"duration": 1.0, "texture": ExtResource("148_gtwc1") }, { "duration": 1.0, @@ -2812,7 +2830,7 @@ animations = [{ "speed": 6.0 }, { "frames": [{ -"duration": 1.0, +"duration": 12.0, "texture": ExtResource("227_n073l") }, { "duration": 1.0, diff --git a/config/default_bus_layout.tres b/config/default_bus_layout.tres index ef4b8c49..6b89600e 100644 --- a/config/default_bus_layout.tres +++ b/config/default_bus_layout.tres @@ -2,18 +2,18 @@ [resource] bus/0/volume_db = -0.030508 -bus/1/name = &"game_sfx" +bus/1/name = &"dialog" bus/1/solo = false bus/1/mute = false bus/1/bypass_fx = false -bus/1/volume_db = 0.0 -bus/1/send = &"Master" -bus/2/name = &"dialog" +bus/1/volume_db = -0.00828743 +bus/1/send = &"game_sfx" +bus/2/name = &"game_sfx" bus/2/solo = false bus/2/mute = false bus/2/bypass_fx = false -bus/2/volume_db = 0.0 -bus/2/send = &"game_sfx" +bus/2/volume_db = -0.00606537 +bus/2/send = &"Master" bus/3/name = &"music" bus/3/solo = false bus/3/mute = false diff --git a/manager/scene/scene_manager.gd b/manager/scene/scene_manager.gd index a528e3ba..8dd8b470 100644 --- a/manager/scene/scene_manager.gd +++ b/manager/scene/scene_manager.gd @@ -80,7 +80,6 @@ func unlock_player(): # return true # return player.operational - # func set_player_operational(val := true): # var player = get_player() as MainPlayer # if player: @@ -157,6 +156,7 @@ func get_current_prop(must_selected: bool) -> String: return prop_hud.inventory.current_item_key() return "" + # 静默增加 prop,一般用于提前保存数据,确保数据一致性(防止在 await 时退出等导致丢数据) func enable_prop_item_silently(prop_key: String) -> void: var prop_hud = get_prop_hud() @@ -165,6 +165,7 @@ func enable_prop_item_silently(prop_key: String) -> void: else: printerr("enable_prop_item_silently PropHud node not found") + func enable_prop_item(prop_key: String) -> void: var prop_hud = get_prop_hud() if prop_hud: @@ -177,6 +178,7 @@ func enable_important_item(prop_key: String) -> void: var prop_hud = get_prop_hud() if prop_hud: prop_hud.inventory.enable_important_item(prop_key) + SceneManager.pop_center_notification(tr("ui_important_item_update")) else: 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") -func pop_os(lines := []): - var player = get_player() +func pop_os(lines := [], auto_freeze := true, auto_release := true): + var player = get_player() as MainPlayer if player: - player.pop_os(lines) + player.pop_os(lines, auto_freeze, auto_release) else: 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: var notification_node = get_node_or_null("/root/Main/UILayer/Notification") if notification_node: diff --git a/scene/dialog/balloon.tscn b/scene/dialog/balloon.tscn index 62509bd8..ec34207f 100644 --- a/scene/dialog/balloon.tscn +++ b/scene/dialog/balloon.tscn @@ -165,7 +165,6 @@ mouse_filter = 1 text = "Response example" [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] -volume_db = -20.0 bus = &"dialog" [connection signal="gui_input" from="Balloon" to="." method="_on_balloon_gui_input"] diff --git a/scene/entity/ambush.gd b/scene/entity/ambush.gd index 2d41ec5d..17ace9f9 100644 --- a/scene/entity/ambush.gd +++ b/scene/entity/ambush.gd @@ -20,6 +20,7 @@ signal triggered @export var freeze_time := 5.0 var hook_animation = "" @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": set(val): hook_dialogue_res = val @@ -151,6 +152,9 @@ func _do_trigger(): SceneManager.freeze_player(0.0) DialogueManager.show_dialogue_balloon(dialogue_res, hook_dialogue_title) 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: var animation_player = _get_animation_player() if animation_player: diff --git a/scene/entity/note.gd b/scene/entity/note.gd index 8d2d62f3..e804efac 100644 --- a/scene/entity/note.gd +++ b/scene/entity/note.gd @@ -62,6 +62,7 @@ var tried_times: int: func _ready() -> void: if Engine.is_editor_hint(): + notify_property_list_changed() return area2d.body_entered.connect(_reset) area2d.body_exited.connect(_on_cancel) @@ -100,7 +101,7 @@ func _on_interacted() -> void: func _show_os(res, title): var lines = await DialogueUtil.get_lines(res, title) - SceneManager.pop_os(lines) + SceneManager.pop_os(lines, false, false) interacting = true var player = SceneManager.get_player() if player: diff --git a/scene/entity/portal.gd b/scene/entity/portal.gd index 6603b20c..ed5d279a 100644 --- a/scene/entity/portal.gd +++ b/scene/entity/portal.gd @@ -131,10 +131,7 @@ func _on_interacted() -> void: tried_times += 1 if holding: if holding_reason_key: - var reason = tr(holding_reason_key) - if reason: - var lines = await DialogueUtil.generate_lines(reason) - SceneManager.pop_os(lines) + SceneManager.pop_os_with_str(holding_reason_key) return if target_portal == "none" or not enabled: return diff --git a/scene/entity/portal.tscn b/scene/entity/portal.tscn index 3c173673..3ca23648 100644 --- a/scene/entity/portal.tscn +++ b/scene/entity/portal.tscn @@ -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="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="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="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://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")] unique_name_in_owner = true -stream = ExtResource("4_p48ld") +stream = ExtResource("6_1sj6c") file = "" [node name="SfxOpen" parent="." instance=ExtResource("3_6khux")] diff --git a/scene/ground/ground.gd b/scene/ground/ground.gd index 2523c506..a822d296 100644 --- a/scene/ground/ground.gd +++ b/scene/ground/ground.gd @@ -87,6 +87,7 @@ func _ready() -> void: # %ColorRectTop.visible = true # %ColorRectBottom.visible = true # 如果 debug 模式下不通过 GroundLoader 启动,则插入到 main 以下 + _setup_player_light() 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") # 传送后,重置 camera 位置 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) diff --git a/scene/ground/ground_loader.gd b/scene/ground/ground_loader.gd index 3c32cd97..4b121ebd 100644 --- a/scene/ground/ground_loader.gd +++ b/scene/ground/ground_loader.gd @@ -60,7 +60,9 @@ func _ready() -> void: if not ignore_archive: _load_save() 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(): diff --git a/scene/ground/scene/c01/s05_animation.gd b/scene/ground/scene/c01/s05_animation.gd index c943af87..7d172e19 100644 --- a/scene/ground/scene/c01/s05_animation.gd +++ b/scene/ground/scene/c01/s05_animation.gd @@ -6,26 +6,26 @@ var frame: Note2D var paper: Interactable2D var right_door: Portal2D var piano: Interactable2D -var bed_reading: AnimatedSprite2D + # 覆盖该方法 func _default_data() -> Dictionary: - return { - "frame_relocated": false - } + return {"frame_relocated": false} func _ready() -> void: super._ready() 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(): - # 播放开场对话 - # DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_开场") # 直接使用 sfx,防止下方字幕与全屏文字重复 $intro_audio_player.play() - SceneManager.pop_debug_dialog_info("音效", "开场念诵声等") func _on_ground_ready() -> void: @@ -34,8 +34,8 @@ func _on_ground_ready() -> void: paper = $"../DeployLayer/oneshot纸片" right_door = $"../DeployLayer/portal_right" piano = $"../DeployLayer/钢琴" - bed_reading = $"../DeployLayer/小小蝶看书" - bed_reading.frame_changed.connect(_on_bed_reading_frame_changed) + if data["oneshot_animation_played"]: + $"../DeployLayer/床".enabled = true # 画框是否已经正位 data.frame_relocated = ambush.played and ambush.one_shot # 禁用鸡毛掸子 @@ -74,18 +74,8 @@ func _on_ground_ready() -> void: $"环境音".finished.connect($"环境音".play) -var intro_dialog_played = false - -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 cant_read(): + DialogueManager.show_dialogue_balloon(dialogue_c01, "c01_s05_院长房间_看不清了") func _on_note_read(): @@ -112,15 +102,7 @@ func _on_paper_interacted(): paper.visible = false paper.enabled = false SceneManager.enable_prop_item("prop_信碎片1") - SceneManager.enable_important_item("prop_信碎片1") 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"), ] + func _on_piano_interacted(): # 钢琴音符最大编号 var piano_id_max := piano_streams.size() diff --git a/scene/ground/scene/c01/s05_院长房间.tscn b/scene/ground/scene/c01/s05_院长房间.tscn index 1c614383..9de6ed91 100644 --- a/scene/ground/scene/c01/s05_院长房间.tscn +++ b/scene/ground/scene/c01/s05_院长房间.tscn @@ -79,163 +79,163 @@ tracks/3/keys = { tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("MainPlayer:visible") +tracks/4/path = NodePath("DeployLayer/画框:rotation") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] +"update": 0, +"values": [-0.179769] } tracks/5/type = "value" tracks/5/imported = false tracks/5/enabled = true -tracks/5/path = NodePath("DeployLayer/画框:rotation") +tracks/5/path = NodePath("Intro:visible") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 0, -"values": [-0.179769] +"update": 1, +"values": [false] } tracks/6/type = "value" tracks/6/imported = false tracks/6/enabled = true -tracks/6/path = NodePath("Intro:visible") +tracks/6/path = NodePath("Intro:modulate") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] +"update": 0, +"values": [Color(1, 1, 1, 1)] } tracks/7/type = "value" tracks/7/imported = false tracks/7/enabled = true -tracks/7/path = NodePath("Intro:modulate") +tracks/7/path = NodePath("MainPlayer:position") tracks/7/interp = 1 tracks/7/loop_wrap = true tracks/7/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Color(1, 1, 1, 1)] +"values": [Vector2(26, 88)] } tracks/8/type = "value" tracks/8/imported = false tracks/8/enabled = true -tracks/8/path = NodePath("MainPlayer:position") +tracks/8/path = NodePath("DeployLayer/小小蝶看书:visible") tracks/8/interp = 1 tracks/8/loop_wrap = true tracks/8/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(26, 88)] +"update": 1, +"values": [false] } tracks/9/type = "value" tracks/9/imported = false tracks/9/enabled = true -tracks/9/path = NodePath("DeployLayer/小小蝶看书:visible") +tracks/9/path = NodePath("DeployLayer/小小蝶看书:frame") tracks/9/interp = 1 tracks/9/loop_wrap = true tracks/9/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [false] +"values": [10] } tracks/10/type = "value" tracks/10/imported = false tracks/10/enabled = true -tracks/10/path = NodePath("DeployLayer/小小蝶看书:frame") +tracks/10/path = NodePath("DeployLayer/oneshot纸片/Area2D:position") tracks/10/interp = 1 tracks/10/loop_wrap = true tracks/10/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [10] +"update": 0, +"values": [Vector2(0, 0)] } tracks/11/type = "value" tracks/11/imported = false 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/loop_wrap = true tracks/11/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 0)] +"update": 1, +"values": [9] } tracks/12/type = "value" tracks/12/imported = false 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/loop_wrap = true tracks/12/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [9] +"values": [true] } tracks/13/type = "value" tracks/13/imported = false 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/loop_wrap = true tracks/13/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] +"update": 0, +"values": [Vector2(3, -4)] } tracks/14/type = "value" tracks/14/imported = false 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/loop_wrap = true tracks/14/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector2(3, -4)] +"values": [1.0] } tracks/15/type = "value" tracks/15/imported = false tracks/15/enabled = true -tracks/15/path = NodePath("CameraFocusMarker:zoom_ratio") +tracks/15/path = NodePath("CameraFocusMarker:force_offset") tracks/15/interp = 1 tracks/15/loop_wrap = true tracks/15/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [1.0] +"values": [Vector2(0, 0)] } tracks/16/type = "value" tracks/16/imported = false tracks/16/enabled = true -tracks/16/path = NodePath("CameraFocusMarker:force_offset") +tracks/16/path = NodePath("AnimationPlayer/扶正相框:playing") tracks/16/interp = 1 tracks/16/loop_wrap = true tracks/16/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 0)] +"update": 1, +"values": [false] } tracks/17/type = "value" tracks/17/imported = false tracks/17/enabled = true -tracks/17/path = NodePath("AnimationPlayer/扶正相框:playing") +tracks/17/path = NodePath("AnimationPlayer/下床音效:playing") tracks/17/interp = 1 tracks/17/loop_wrap = true tracks/17/keys = { @@ -247,7 +247,7 @@ tracks/17/keys = { tracks/18/type = "value" tracks/18/imported = false tracks/18/enabled = true -tracks/18/path = NodePath("AnimationPlayer/下床音效:playing") +tracks/18/path = NodePath("MainPlayer:hide_sprite") tracks/18/interp = 1 tracks/18/loop_wrap = true tracks/18/keys = { @@ -256,10 +256,34 @@ tracks/18/keys = { "update": 1, "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"] resource_name = "intro" -length = 7.0 +length = 24.0 capture_included = true tracks/0/type = "value" tracks/0/imported = false @@ -268,7 +292,7 @@ tracks/0/path = NodePath("Intro:visible") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 4.63333), +"times": PackedFloat32Array(0, 18.4333), "transitions": PackedFloat32Array(1, 1), "update": 1, "values": [true, false] @@ -280,7 +304,7 @@ tracks/1/path = NodePath("Intro:modulate") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(0, 4.4, 4.63333), +"times": PackedFloat32Array(0, 15.5333, 18.4333), "transitions": PackedFloat32Array(1, 1, 1), "update": 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/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(3.93333), +"times": PackedFloat32Array(17.7333), "transitions": PackedFloat32Array(1), "update": 0, "values": [Vector2(87, 88)] @@ -300,93 +324,109 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("MainPlayer:visible") +tracks/3/path = NodePath("DeployLayer/小小蝶看书:visible") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { -"times": PackedFloat32Array(0, 6.63333), -"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), +"times": PackedFloat32Array(0, 23.8667), "transitions": PackedFloat32Array(1, 1), "update": 1, "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/imported = false tracks/5/enabled = true -tracks/5/path = NodePath("MainPlayer") +tracks/5/path = NodePath("AnimationPlayer") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(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), +"times": PackedFloat32Array(0, 1.93333, 19.1), +"transitions": PackedFloat32Array(1, 1, 1), "values": [{ "args": [], +"method": &"intro_start" +}, { +"args": [], "method": &"play_intro_dialogue" +}, { +"args": [], +"method": &"cant_read" }] } -tracks/8/type = "method" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("Intro") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { -"times": PackedFloat32Array(4.76667), +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Intro") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(18.5667), "transitions": PackedFloat32Array(1), "values": [{ "args": [], "method": &"queue_free" }] } -tracks/9/type = "value" -tracks/9/imported = false -tracks/9/enabled = true -tracks/9/path = NodePath("AnimationPlayer/下床音效:playing") -tracks/9/interp = 1 -tracks/9/loop_wrap = true -tracks/9/keys = { -"times": PackedFloat32Array(5.33333), +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("AnimationPlayer/下床音效:playing") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(21.7667), "transitions": PackedFloat32Array(1), "update": 1, "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"] resource_name = "使用鸡毛掸子" @@ -458,34 +498,22 @@ tracks/4/keys = { tracks/5/type = "value" tracks/5/imported = false tracks/5/enabled = true -tracks/5/path = NodePath("MainPlayer:visible") +tracks/5/path = NodePath("DeployLayer/ambush鸡毛掸子:visible") tracks/5/interp = 1 tracks/5/loop_wrap = true 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), "transitions": PackedFloat32Array(1, 1, 1), "update": 1, "values": [true, false, true] } -tracks/7/type = "method" -tracks/7/imported = false -tracks/7/enabled = true -tracks/7/path = NodePath("MainPlayer") -tracks/7/interp = 1 -tracks/7/loop_wrap = true -tracks/7/keys = { +tracks/6/type = "method" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("MainPlayer") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { "times": PackedFloat32Array(0.08), "transitions": PackedFloat32Array(1), "values": [{ @@ -493,42 +521,54 @@ tracks/7/keys = { "method": &"walk_to" }] } -tracks/8/type = "value" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("CameraFocusMarker:zoom_ratio") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CameraFocusMarker:zoom_ratio") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { "times": PackedFloat32Array(0, 1.22, 3.1, 4.1), "transitions": PackedFloat32Array(1, 1, 1, 1), "update": 0, "values": [1.0, 1.3, 1.3, 1.0] } -tracks/9/type = "value" -tracks/9/imported = false -tracks/9/enabled = true -tracks/9/path = NodePath("CameraFocusMarker:force_offset") -tracks/9/interp = 1 -tracks/9/loop_wrap = true -tracks/9/keys = { +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("CameraFocusMarker:force_offset") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { "times": PackedFloat32Array(0, 4.08), "transitions": PackedFloat32Array(1, 1), "update": 0, "values": [Vector2(0, -20), Vector2(0, -20)] } -tracks/10/type = "value" -tracks/10/imported = false -tracks/10/enabled = true -tracks/10/path = NodePath("AnimationPlayer/扶正相框:playing") -tracks/10/interp = 1 -tracks/10/loop_wrap = true -tracks/10/keys = { +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("AnimationPlayer/扶正相框:playing") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { "times": PackedFloat32Array(0, 2.28), "transitions": PackedFloat32Array(1, 1), "update": 1, "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"] resource_name = "纸片飘落" @@ -642,7 +682,8 @@ oneshot_animation = "intro" [node name="intro_audio_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"] stream = ExtResource("3_sluu3") -bus = &"game_sfx" +volume_db = -20.0 +bus = &"dialog" [node name="piano_player" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] bus = &"game_sfx" @@ -707,10 +748,10 @@ title_filter = "c01" note_key = "c01_倾斜的洋相片" [node name="Sign" parent="Ground/DeployLayer/画框" index="1"] -offset_left = 3.0 -offset_top = -7.0 -offset_right = 86.0 -offset_bottom = 73.0 +offset_left = 2.77355 +offset_top = 7.10178 +offset_right = 85.7736 +offset_bottom = 87.1018 metadata/_edit_use_anchors_ = true [node name="CollisionShape2D" parent="Ground/DeployLayer/画框/Area2D" index="0"] @@ -785,10 +826,10 @@ stream = null file = "" [node name="Sign" parent="Ground/DeployLayer/钢琴" index="2"] -offset_left = -1.0 -offset_top = -8.0 -offset_right = -1.0 -offset_bottom = -8.0 +offset_left = 4.0 +offset_top = -18.0 +offset_right = 4.0 +offset_bottom = -18.0 [node name="CollisionShape2D" parent="Ground/DeployLayer/钢琴/Area2D" index="0"] shape = SubResource("RectangleShape2D_5s1ih") @@ -807,6 +848,7 @@ height = 50.0 [node name="MainPlayer" parent="Ground" index="5"] position = Vector2(26, 88) +enable_light = false character = "小小蝶" [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纸片/Sign"] [editable path="Ground/DeployLayer/钢琴"] -[editable path="Ground/DeployLayer/钢琴/Sign"] diff --git a/scene/ground/scene/c01/s06_animation.gd b/scene/ground/scene/c01/s06_animation.gd index 4d410833..7f2111d9 100644 --- a/scene/ground/scene/c01/s06_animation.gd +++ b/scene/ground/scene/c01/s06_animation.gd @@ -92,13 +92,8 @@ func _on_pre_game_intro_finished(_res): # 重置镜头 SceneManager.focus_player_and_reset_zoom(2.5) await get_tree().create_timer(1.5).timeout - var lines = await DialogueUtil.generate_lines(tr("c01_s06_熟悉的墙画")) - var player = SceneManager.get_player() as MainPlayer - player.pop_os(lines) - player.os_finished.connect(pre_game_os_finished, CONNECT_ONE_SHOT) + SceneManager.pop_os_with_str("c01_s06_熟悉的墙画", false, true) -func pre_game_os_finished(): - SceneManager.release_player() func game_intro() -> void: standing_kid1.get_node("对话1ambush").enabled = false @@ -147,17 +142,21 @@ func _game_counting_down(_res = null): func talk1(): _on_talked() + # 与小孩 2 对话 func talk2(): _on_talked() + # 与残疾小孩对话 func talk3(): _on_talked() + # 玩家与三个小孩的互动计数 var talk_count := 0 + func _on_talked(): talk_count += 1 if talk_count == 3: @@ -165,10 +164,7 @@ func _on_talked(): await DialogueManager.dialogue_ended SceneManager.freeze_player(0) await get_tree().create_timer(1.0).timeout - var lines = await DialogueUtil.generate_lines(tr("c01_s06_四小孩对话结束")) - var player = SceneManager.get_player() as MainPlayer - player.pop_os(lines) - player.os_finished.connect(SceneManager.release_player, CONNECT_ONE_SHOT) + SceneManager.pop_os_with_str("c01_s06_四小孩对话结束", false, true) var kid_run_tween diff --git a/scene/ground/scene/c01/s07_animation.gd b/scene/ground/scene/c01/s07_animation.gd index d18992f7..ff2326f5 100644 --- a/scene/ground/scene/c01/s07_animation.gd +++ b/scene/ground/scene/c01/s07_animation.gd @@ -89,9 +89,7 @@ func seller_interacted(): ArchiveManager.archive.prop_inventory.enable_item("prop_信碎片2") await get_tree().create_timer(1.5).timeout $"报童音效".play() - var msg = tr("c01_s07_获得报纸") - var lines = await DialogueUtil.generate_lines(msg) - SceneManager.pop_os(lines) + SceneManager.pop_os_with_str("c01_s07_获得报纸") # 播放获得动画 await get_tree().create_timer(2.0).timeout SceneManager.enable_prop_item("prop_信碎片2") diff --git a/scene/ground/scene/c01/s08_animation.gd b/scene/ground/scene/c01/s08_animation.gd index b2343ce0..db264205 100644 --- a/scene/ground/scene/c01/s08_animation.gd +++ b/scene/ground/scene/c01/s08_animation.gd @@ -155,9 +155,8 @@ func _on_fall_off_finished() -> void: # 最后释放玩家 SceneManager.release_player() SceneManager.get_player().visible = true - var lines = await DialogueUtil.generate_lines(tr("c01_s08_书架游戏完成")) - var callback = SceneManager.pop_os.bind(lines) - get_tree().create_timer(1.0).timeout.connect(callback) + await get_tree().create_timer(1.2).timeout + SceneManager.pop_os_with_str("c01_s08_书架游戏完成") func _setup_weird_bookstore() -> void: # 切换背景音效 @@ -169,6 +168,7 @@ func _setup_weird_bookstore() -> void: ladder.enabled = false manager.visible = false mice.visible = true + $"../DirectionalLight2D".energy = 0.7 $"../BGSprite2D".texture = preload("res://asset/art/scene/c01/s08_书店/夜晚版/bg_书店夜晚.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") @@ -205,6 +205,4 @@ func pay_off_wage() -> void: _check_portal() func _on_quit_inspect_coin() -> void: - var msg = tr("c01_s08_获得袁大头后") - var lines = await DialogueUtil.generate_lines(msg) - SceneManager.pop_os(lines) + SceneManager.pop_os_with_str("c01_s08_获得袁大头后") diff --git a/scene/ground/scene/c01/s08_书店.tscn b/scene/ground/scene/c01/s08_书店.tscn index b7552180..d6ffdfe3 100644 --- a/scene/ground/scene/c01/s08_书店.tscn +++ b/scene/ground/scene/c01/s08_书店.tscn @@ -184,6 +184,10 @@ offset = Vector2(0, 40) [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] points = PackedVector2Array(30, 150, 545, 150) +[node name="DirectionalLight2D" parent="Ground" index="9"] +energy = 0.0 +blend_mode = 1 + [node name="参考" type="Sprite2D" parent="."] visible = false modulate = Color(1, 1, 1, 0.580392) diff --git a/scene/ground/scene/c01/s11_animation.gd b/scene/ground/scene/c01/s11_animation.gd index bff20de0..6372be83 100644 --- a/scene/ground/scene/c01/s11_animation.gd +++ b/scene/ground/scene/c01/s11_animation.gd @@ -4,16 +4,15 @@ extends AnimationRoot var footstep_sfx: Sfx var chapter_sfx: Sfx var main_character: AnimatedSprite2D -# 2:33 ~ 3:44, 71s -var duration := 67.0 +var duration := 90.0 var target_x := 10750.0 -var building_duration := 30.0 -var building_y := 450.0 +var building_duration := 10.0 +var building_y := 350.0 -var title_1 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕1.png") -var title_2 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕2.png") -var title_3 = preload("res://asset/art/scene/c01/s04_旧版序章/f_动画字幕3.png") -var chapter_title = preload("res://asset/art/scene/c01/s04_旧版序章/f_第一章标题.png") +var title_1 = preload("uid://snm3q333tqhl") +var title_2 = preload("uid://d4laekws15ap6") +var title_3 = preload("uid://5oln8axxcfep") +var chapter_title = preload("uid://bvjt8iyliunfs") # 覆盖该方法 @@ -45,15 +44,15 @@ func _on_ground_ready() -> void: func pop_title_1(): - SceneManager.pop_center_texture(title_1) + SceneManager.pop_center_texture(title_1, 6.0) func pop_title_2(): - SceneManager.pop_center_texture(title_2) + SceneManager.pop_center_texture(title_2, 10.5) func pop_title_3(): - SceneManager.pop_center_texture(title_3) + SceneManager.pop_center_texture(title_3, 4) # 又是这个梦.. 12句 @@ -97,17 +96,15 @@ func dialog3() -> void: 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(): var camera = SceneManager.get_camera_marker() footstep_sfx.stop() - # 吕萍: “是到了吗,师傅” - # 车夫: “到了,芦昌路26弄3号,就是这里” - # 6句 - # 车夫: “嗯,钱正好,那么我先跑了” - DialogueManager.show_dialogue_balloon( - dialogue_c01, "c01_s11_车夫对话4", [GlobalConfig.DIALOG_IGNORE_INPUT] - ) # 运镜 marker var marker = Node2D.new() get_parent().add_child(marker) @@ -117,11 +114,17 @@ func _on_finished(): camera.focus_node(marker, 0.0) # 运镜,上下打量公寓楼 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(final_dialog) tween.tween_property(marker, "global_position:y", target_y, building_duration) 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(): diff --git a/scene/ground/scene/c01/s11_黄包车演出.tscn b/scene/ground/scene/c01/s11_黄包车演出.tscn index 36692ed5..8a3d2462 100644 --- a/scene/ground/scene/c01/s11_黄包车演出.tscn +++ b/scene/ground/scene/c01/s11_黄包车演出.tscn @@ -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="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="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="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="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="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"] @@ -122,6 +124,13 @@ _data = { &"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"] size = Vector2(200, 100) @@ -159,6 +168,11 @@ bus = &"game_sfx" script = ExtResource("3_vx53v") 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"] position = Vector2(-12, 2) offset = Vector2(0, -646) @@ -191,19 +205,20 @@ autoplay = "车夫静止" shape = SubResource("RectangleShape2D_b0oon") [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") animation = &"c01_捡球男孩_关键帧" [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" one_shot = false freeze_time = 1.0 hook_method = "pop_title_1" [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" one_shot = false hook_method = "pop_title_2" @@ -215,17 +230,23 @@ one_shot = false hook_method = "pop_title_3" [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" one_shot = false hook_method = "dialog2" [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" one_shot = false 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"] position = Vector2(405, 10) script = ExtResource("9_6p5hp") diff --git a/scene/ground/scene/c01/s12_书店外_诡异版.tscn b/scene/ground/scene/c01/s12_书店外_诡异版.tscn index 2f8bad99..1eca5b96 100644 --- a/scene/ground/scene/c01/s12_书店外_诡异版.tscn +++ b/scene/ground/scene/c01/s12_书店外_诡异版.tscn @@ -279,14 +279,12 @@ texture = ExtResource("17_nta2f") position = Vector2(41, 98) character = "小小蝶" -[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] -texture = null - [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] points = PackedVector2Array(37, 150, 3050, 150) [node name="DirectionalLight2D" parent="Ground" index="9"] -visible = false +energy = 0.4 +blend_mode = 1 [node name="参考" type="Sprite2D" parent="."] visible = false diff --git a/scene/ground/scene/c02/s01_街道.tscn b/scene/ground/scene/c02/s01_街道.tscn index 8912e1ec..03045e84 100644 --- a/scene/ground/scene/c02/s01_街道.tscn +++ b/scene/ground/scene/c02/s01_街道.tscn @@ -1,15 +1,15 @@ [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="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="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="Ground" parent="." instance=ExtResource("1_gdcov")] scene_name = "c02_s01" -player_y = 55 +player_y = 60 [node name="AnimationPlayer" parent="Ground" index="0"] script = ExtResource("2_uuwn3") @@ -20,7 +20,7 @@ data = { oneshot_animation = "" [node name="BGSprite2D" parent="Ground" index="2"] -texture = ExtResource("2_ni1a4") +texture = ExtResource("3_a5loe") [node name="portal_left" parent="Ground/DeployLayer" index="0"] position = Vector2(78, 27) @@ -28,25 +28,23 @@ immediately = true matched_sign_texture = null [node name="portal_right" parent="Ground/DeployLayer" index="1"] -position = Vector2(392, 2) +position = Vector2(371, 2) target_scene = "c02_s02" target_portal = "left" matched_sign_texture = null [node name="Note寻人启事" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_6lnxd")] -position = Vector2(250, -22) +position = Vector2(230, -24) title_filter = "c02" note_key = "c02_小蝉寻人启事_脸部破碎" [node name="Note门口" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6lnxd")] -position = Vector2(311, -27) -mode = "ballon" -dialogue = "c02" +position = Vector2(290, -20) title_filter = "c02" -note_key = "c02_s01_门口" +note_key = "c02_芦昌路26" [node name="MainPlayer" parent="Ground" index="5"] -position = Vector2(78, 103) +position = Vector2(78, 98) [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] points = PackedVector2Array(37, 150, 720, 150) diff --git a/scene/ground/scene/c02/s02_animation.gd b/scene/ground/scene/c02/s02_animation.gd index 695484f8..fd775c87 100644 --- a/scene/ground/scene/c02/s02_animation.gd +++ b/scene/ground/scene/c02/s02_animation.gd @@ -8,7 +8,9 @@ var music_box: Closeup2D # 覆盖该方法 func _default_data() -> Dictionary: - return {} + return { + "first_enter": false + } func _ready() -> void: @@ -19,7 +21,10 @@ func _ready() -> void: func _on_ground_ready() -> void: wind_blows = $"../DeployLayer/WindBlows" - wind_blows.visible = false + if data.first_enter: + wind_blows.visible = false + else: + _oneshot_wind.call_deferred() paper_man = $"../DeployLayer/Ambush纸人" if 5 <= ArchiveManager.get_global_value("c02_musicbox_stage", 0): _display_paper_man(false) @@ -32,25 +37,22 @@ func _on_ground_ready() -> void: func _oneshot_wind(): - SceneManager.get_player().global_position.x = 53 - SceneManager.get_player().set_facing_direction(Vector2.RIGHT) + var player = %MainPlayer as MainPlayer 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.play() wind_blows.animation_finished.connect(_on_wind_finished, CONNECT_ONE_SHOT) func _on_wind_finished(): - %MainPlayer.visible = true + set_data("first_enter", true) + %MainPlayer.hide_sprite = false wind_blows.visible = false - #TODO 使用气泡文字 - # DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s02_天冷") - DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT) - - -func _on_dialogue_ended(_res): - SceneManager.release_player() + # 使用气泡文字 + SceneManager.pop_os_with_str("c02_冷飕飕的", false, true) func lumber_interacted(): diff --git a/scene/ground/scene/c02/s02_过道.tscn b/scene/ground/scene/c02/s02_过道.tscn index 8da46735..4ce56c90 100644 --- a/scene/ground/scene/c02/s02_过道.tscn +++ b/scene/ground/scene/c02/s02_过道.tscn @@ -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="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="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="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://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="Texture2D" uid="uid://dtpn7k468vcjb" path="res://asset/art/prop/c02/海报(小)/大舞台.png" id="8_jg8g0"] -[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="Texture2D" uid="uid://bt37pw8hhgsec" path="res://asset/art/prop/c02/海报(小)/剪辫子侦探.png" id="8_m1xet"] [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="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"] @@ -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="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"] -_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"] resource_local_to_scene = true @@ -93,9 +58,10 @@ libraries = { script = ExtResource("2_5p8ev") data = { "display_paper_man": false, +"first_enter": false, "oneshot_animation_played": false } -oneshot_animation = "oneshot_天冷" +oneshot_animation = "" [node name="BGSprite2D" parent="Ground" index="2"] self_modulate = Color(0.831373, 0.886275, 0.956863, 1) @@ -105,7 +71,7 @@ texture = ExtResource("3_gjwum") offset = Vector2(0, -240) [node name="portal_left" parent="Ground/DeployLayer" index="0"] -position = Vector2(32, 15) +position = Vector2(28, 21) target_scene = "c02_s01" target_portal = "right" matched_sign_texture = null @@ -121,35 +87,35 @@ unique_name_in_owner = true position = Vector2(394, 23) sprite_frames = ExtResource("4_wbif8") animation = &"c02_吕萍_风吹过" +frame = 10 +frame_progress = 1.0 -[node name="PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/WindBlows"] -position = Vector2(-341, 18) -energy = 0.5 -range_item_cull_mask = 15 -texture = SubResource("GradientTexture2D_m1xet") -height = 10.0 +[node name="Ambush太暗了" parent="Ground/DeployLayer" index="3" instance=ExtResource("8_52as8")] +position = Vector2(177, 42) +hook_os_key = "c02_太暗了" -[node name="海报1" parent="Ground/DeployLayer" index="3" instance=ExtResource("12_0fckv")] -position = Vector2(255, -11) +[node name="海报1" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")] +position = Vector2(223, -28) +texture = ExtResource("6_gjwum") content_centered = true -texture_cover = ExtResource("9_jg8g0") +texture_cover = ExtResource("7_jg8g0") content_key = "c02_海报1" -[node name="海报2" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")] -position = Vector2(319, -17) -texture = ExtResource("8_jg8g0") +[node name="海报2" parent="Ground/DeployLayer" index="5" instance=ExtResource("12_0fckv")] +position = Vector2(314, -26) +texture = ExtResource("8_m1xet") content_centered = true -texture_cover = ExtResource("9_m1xet") +texture_cover = ExtResource("10_jg8g0") 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) texture_cover = ExtResource("7_wdwbi") 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 -position = Vector2(113, 53) +position = Vector2(113, 44) texture = ExtResource("7_xsghn") flip_h = true enabled = false @@ -182,13 +148,13 @@ stream = ExtResource("11_u68d7") dir = "c02" 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) trigger_mode = "interact" freeze_time = 1.0 hook_method = "lumber_interacted" -[node name="杂物眨眼睛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="8"] +[node name="杂物眨眼睛" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="9"] visible = false light_mask = 5 position = Vector2(269, 38) @@ -201,35 +167,35 @@ energy = 3.0 range_item_cull_mask = 4 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) title_filter = "c02" note_key = "c02_老鼠洞" -[node name="老鼠拖鞋" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="10"] +[node name="老鼠拖鞋" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="11"] visible = false position = Vector2(498, 0) sprite_frames = ExtResource("19_q0axc") 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) enabled = false 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) one_shot = false freeze_time = 1.0 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) gaslight_energy = 2.0 gaslight_ground_energy = 2.0 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) packed_scene = ExtResource("10_ifae7") @@ -250,6 +216,7 @@ texture = SubResource("GradientTexture2D_fvldj") [node name="MainPlayer" parent="Ground" index="5"] position = Vector2(53, 98) +facing_direction = Vector2(1, 0) [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] points = PackedVector2Array(37, 150, 670, 150) diff --git a/scene/ground/scene/c02/s03_animation.gd b/scene/ground/scene/c02/s03_animation.gd index 5ccb043e..018c3796 100644 --- a/scene/ground/scene/c02/s03_animation.gd +++ b/scene/ground/scene/c02/s03_animation.gd @@ -121,7 +121,7 @@ func eavesdrop() -> void: await get_tree().create_timer(1.0).timeout # TODO 对话替换 DialogueManager.show_dialogue_balloon( - dialogue_c02, "c02_04_李氏王赖子", [GlobalConfig.DIALOG_IGNORE_INPUT] + dialogue_c02, "c02_04_李氏癞子", [GlobalConfig.DIALOG_IGNORE_INPUT] ) await animation_finished SceneManager.release_player() @@ -164,16 +164,13 @@ func bully_ambush(): func bully_end(): SceneManager.release_player() - # 小猫玩具微亮 + #TODO 小猫玩具微亮 SceneManager.pop_debug_dialog_info("美术", "手中小猫玩具微亮") - #TODO 使用气泡文字 - # DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_s11_玩具发光") + SceneManager.pop_os_with_str("小猫玩具发光", true, true) func block_right_move(): - var msg = tr("c02_点火前阻止右移") - var lines = await DialogueUtil.generate_lines(msg) - SceneManager.pop_os(lines) + SceneManager.pop_os_with_str("c02_点火前阻止右移") # var count_down_tween:Tween @@ -187,9 +184,7 @@ func block_right_move(): func _on_counter_interacted(): if not ArchiveManager.get_global_value("c02_ready_to_fire"): - var msg = tr("c02_火灾等待准备") - var lines = await DialogueUtil.generate_lines(msg) - SceneManager.pop_os(lines) + SceneManager.pop_os_with_str("c02_火灾等待准备") return counter.enabled = false if not ArchiveManager.get_global_value("c02_burning"): diff --git a/scene/ground/scene/c02/s06_animation.gd b/scene/ground/scene/c02/s06_animation.gd index bc109dd2..18d027df 100644 --- a/scene/ground/scene/c02/s06_animation.gd +++ b/scene/ground/scene/c02/s06_animation.gd @@ -112,7 +112,11 @@ func _c02_final_show(): # WARN: 如果不延时,开场直接显示 dialog 可能会显示失败(无报错提示) await get_tree().create_timer(0.1).timeout 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(): diff --git a/scene/ground/scene/c02/s06_二楼.tscn b/scene/ground/scene/c02/s06_二楼.tscn index 9b9b939b..f0ae7aa1 100644 --- a/scene/ground/scene/c02/s06_二楼.tscn +++ b/scene/ground/scene/c02/s06_二楼.tscn @@ -361,6 +361,7 @@ texture = ExtResource("5_26mqt") points = PackedVector2Array(37, 150, 900, 150) [node name="DirectionalLight2D" parent="Ground" index="9"] +visible = false energy = 0.9 blend_mode = 1 diff --git a/scene/ground/script/c02/小手讨东西.gd b/scene/ground/script/c02/小手讨东西.gd index 7ebcc94e..ed5faf8f 100644 --- a/scene/ground/script/c02/小手讨东西.gd +++ b/scene/ground/script/c02/小手讨东西.gd @@ -142,6 +142,7 @@ func _quit_communicating() -> void: # 重置动画 SceneManager.get_player().set_facing_direction(Vector2.ONE) animated_sprite.visible = true + animated_sprite.play("小手_纸杯_show") var interacting := false: diff --git a/scene/little_game/拼凑信件.gd b/scene/little_game/拼凑信件.gd index 2a002a0f..d87df4f3 100644 --- a/scene/little_game/拼凑信件.gd +++ b/scene/little_game/拼凑信件.gd @@ -134,7 +134,6 @@ func _post_success(): # 不显示文本,让玩家在重要物品栏去看(提示) # var tween = create_tween() # 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 inspector = SceneManager.get_inspector() inspector.pop_standard_inspection(texture, null, tr("prop_院长的信_说明")) diff --git a/scene/notification/notification.tscn b/scene/notification/notification.tscn index 145ac4e4..6f2a7e03 100644 --- a/scene/notification/notification.tscn +++ b/scene/notification/notification.tscn @@ -2,7 +2,7 @@ [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="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"] font = ExtResource("2_eh7gu") @@ -64,9 +64,15 @@ label_settings = SubResource("LabelSettings_ycsas") [node name="MarginContainer3" type="MarginContainer" parent="."] layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 +anchors_preset = 8 +anchor_left = 0.5 +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_vertical = 2 mouse_filter = 2 @@ -79,6 +85,6 @@ theme_override_constants/margin_bottom = 64 unique_name_in_owner = true layout_mode = 2 mouse_filter = 2 -texture = ExtResource("3_wqejl") -expand_mode = 1 +texture = ExtResource("3_otkdq") +expand_mode = 3 stretch_mode = 5 diff --git a/scene/player/main_player.gd b/scene/player/main_player.gd index 3bc5bd71..89ff439d 100644 --- a/scene/player/main_player.gd +++ b/scene/player/main_player.gd @@ -7,6 +7,11 @@ signal position_updated(global_pos: Vector2) signal os_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: set(val): enable_light = val @@ -76,6 +81,7 @@ var current_animation_config := ( # # animation -> {frame -> {shadow polygon}} # var animation_shadow_polygons = {} func _ready() -> void: + sprite.visible = not hide_sprite light.enabled = enable_light os_contaner.modulate.a = 0.0 # set up animated sprite @@ -240,6 +246,9 @@ func _tweak_camera_marker(): func set_catty_light(enable := false): + # 如果没有允许光照,那么 catty 的光也不添加 + if not enable_light: + return var tween = create_tween() if enable: 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_pausing_timer: SceneTreeTimer -func pop_os(lines := []): +func pop_os(lines := [], auto_freeze := true, auto_release := true): if os_tween: os_tween.kill() + if auto_freeze: + freeze_player(0, 3, false) os_tween = create_tween() os_label.text = "" os_tween.tween_property(os_contaner, "modulate:a", 1.0, 0.2) 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 - os_tween.tween_callback(_os_load_line.bind(line)) - os_tween.tween_callback(os_label.type_out) - os_tween.tween_interval(duration) + os_tween.tween_callback(_os_load_line.bind(line, duration)) + os_tween.tween_interval(0.1) os_tween.tween_callback(os_finished.emit) 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.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 diff --git a/scene/settings/settings.gd b/scene/settings/settings.gd index b48c0eb2..8e6a9dc3 100644 --- a/scene/settings/settings.gd +++ b/scene/settings/settings.gd @@ -13,6 +13,9 @@ signal exited @onready var exit_btn = %ExitBtn as Button @onready var diary_btn = %DiaryBtn as Button +# 音量 DB 偏移 +var sfx_db_offset := 6.0 +var dialog_db_offset := -20.0 func _ready(): layer = GlobalConfig.CANVAS_LAYER_SETTINGS @@ -22,10 +25,10 @@ func _ready(): AudioServer.get_bus_volume_db(AudioServer.get_bus_index("Master")) ) 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( - 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) 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: - var db_value = linear_to_db(value) + var db_value = linear_to_db(value) + sfx_db_offset GlobalConfigManager.config.db_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: - var db_value = linear_to_db(value) + var db_value = linear_to_db(value) + dialog_db_offset GlobalConfigManager.config.db_dialog = db_value AudioServer.set_bus_volume_db(AudioServer.get_bus_index("dialog"), db_value)