diff --git a/asset/art/little_game/c03_药车游戏/ux_碗前遮挡_扩张.png b/asset/art/little_game/c03_药车游戏/ux_碗前遮挡_扩张.png index 2cc32c03..3b41cc34 100644 Binary files a/asset/art/little_game/c03_药车游戏/ux_碗前遮挡_扩张.png and b/asset/art/little_game/c03_药车游戏/ux_碗前遮挡_扩张.png differ diff --git a/asset/art/little_game/c03_药车游戏/底图.png b/asset/art/little_game/c03_药车游戏/底图.png new file mode 100644 index 00000000..486ab442 Binary files /dev/null and b/asset/art/little_game/c03_药车游戏/底图.png differ diff --git a/asset/art/little_game/c03_药车游戏/底图.png.import b/asset/art/little_game/c03_药车游戏/底图.png.import new file mode 100644 index 00000000..f1809712 --- /dev/null +++ b/asset/art/little_game/c03_药车游戏/底图.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2i5cqfwnabc" +path="res://.godot/imported/底图.png-85914ea1b842b552fc8a23ae13dbd8af.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/little_game/c03_药车游戏/底图.png" +dest_files=["res://.godot/imported/底图.png-85914ea1b842b552fc8a23ae13dbd8af.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/little_game/c03_药车游戏/捣药棒竖.png b/asset/art/little_game/c03_药车游戏/捣药棒竖.png index 59d0bbdd..13bdf7a6 100644 Binary files a/asset/art/little_game/c03_药车游戏/捣药棒竖.png and b/asset/art/little_game/c03_药车游戏/捣药棒竖.png differ diff --git a/asset/art/little_game/c03_药车游戏/标签.png b/asset/art/little_game/c03_药车游戏/标签.png deleted file mode 100644 index afdb6fc6..00000000 Binary files a/asset/art/little_game/c03_药车游戏/标签.png and /dev/null differ diff --git a/asset/art/little_game/c03_药车游戏/标签_中文.png b/asset/art/little_game/c03_药车游戏/标签_中文.png new file mode 100644 index 00000000..e2afba09 Binary files /dev/null and b/asset/art/little_game/c03_药车游戏/标签_中文.png differ diff --git a/asset/art/little_game/c03_药车游戏/标签.png.import b/asset/art/little_game/c03_药车游戏/标签_中文.png.import similarity index 76% rename from asset/art/little_game/c03_药车游戏/标签.png.import rename to asset/art/little_game/c03_药车游戏/标签_中文.png.import index 3032d35b..52cbb494 100644 --- a/asset/art/little_game/c03_药车游戏/标签.png.import +++ b/asset/art/little_game/c03_药车游戏/标签_中文.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://b02vrycgotcfe" -path="res://.godot/imported/标签.png-79240f7e8af69a09f7e264f3ed9dc32e.ctex" +path="res://.godot/imported/标签_中文.png-6e1725f7c13216a151a40a194ab9928d.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://asset/art/little_game/c03_药车游戏/标签.png" -dest_files=["res://.godot/imported/标签.png-79240f7e8af69a09f7e264f3ed9dc32e.ctex"] +source_file="res://asset/art/little_game/c03_药车游戏/标签_中文.png" +dest_files=["res://.godot/imported/标签_中文.png-6e1725f7c13216a151a40a194ab9928d.ctex"] [params] diff --git a/asset/art/little_game/c03_药车游戏/标签_英文.png b/asset/art/little_game/c03_药车游戏/标签_英文.png new file mode 100644 index 00000000..d6faf163 Binary files /dev/null and b/asset/art/little_game/c03_药车游戏/标签_英文.png differ diff --git a/asset/art/little_game/c03_药车游戏/标签_英文.png.import b/asset/art/little_game/c03_药车游戏/标签_英文.png.import new file mode 100644 index 00000000..a78c763e --- /dev/null +++ b/asset/art/little_game/c03_药车游戏/标签_英文.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bknyukxevd2lw" +path="res://.godot/imported/标签_英文.png-d8e5b3330b7185c6fc3934d361427627.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/little_game/c03_药车游戏/标签_英文.png" +dest_files=["res://.godot/imported/标签_英文.png-d8e5b3330b7185c6fc3934d361427627.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/little_game/c03_药车游戏/石臼前侧.png b/asset/art/little_game/c03_药车游戏/石臼前侧.png new file mode 100644 index 00000000..63fb24f4 Binary files /dev/null and b/asset/art/little_game/c03_药车游戏/石臼前侧.png differ diff --git a/asset/art/little_game/c03_药车游戏/石臼前侧.png.import b/asset/art/little_game/c03_药车游戏/石臼前侧.png.import new file mode 100644 index 00000000..76691d42 --- /dev/null +++ b/asset/art/little_game/c03_药车游戏/石臼前侧.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://5qrlqm1moo3s" +path="res://.godot/imported/石臼前侧.png-c5c3e94bd89da7e16b00c1ecb2572f5d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/little_game/c03_药车游戏/石臼前侧.png" +dest_files=["res://.godot/imported/石臼前侧.png-c5c3e94bd89da7e16b00c1ecb2572f5d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/little_game/c03_药车游戏/蟋蟀单独.png b/asset/art/little_game/c03_药车游戏/蟋蟀单独.png index 446b5677..1f16df09 100644 Binary files a/asset/art/little_game/c03_药车游戏/蟋蟀单独.png and b/asset/art/little_game/c03_药车游戏/蟋蟀单独.png differ diff --git a/asset/art/little_game/c03_药车游戏/黑色粉末单独.png b/asset/art/little_game/c03_药车游戏/黑色粉末单独.png index 5b1266fa..42f608d3 100644 Binary files a/asset/art/little_game/c03_药车游戏/黑色粉末单独.png and b/asset/art/little_game/c03_药车游戏/黑色粉末单独.png differ diff --git a/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg b/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg new file mode 100644 index 00000000..0616fda8 Binary files /dev/null and b/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg differ diff --git a/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg.import b/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg.import new file mode 100644 index 00000000..0b90ff07 --- /dev/null +++ b/asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dlvxxvcx7ga3w" +path="res://.godot/imported/amb_第二章结尾.ogg-5b3e4bbb5af26683d4c49855c1c00d2d.oggvorbisstr" + +[deps] + +source_file="res://asset/audio/sfx/环境音/第二章/amb_第二章结尾.ogg" +dest_files=["res://.godot/imported/amb_第二章结尾.ogg-5b3e4bbb5af26683d4c49855c1c00d2d.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/asset/dialogue/event_stage.dialogue b/asset/dialogue/event_stage.dialogue index 06f44d6d..1d190dce 100644 --- a/asset/dialogue/event_stage.dialogue +++ b/asset/dialogue/event_stage.dialogue @@ -17,6 +17,7 @@ c03_f2_madman_runaway: 0:初始化 1:跑开_纸人挡路 2:消除纸人 c03_invite_xchan_supper=3 -> c03_f2_madman_runaway=2 c03_before_mahjong_game: 0:初始化 1:粘舌头和刀把 2:给药 4:准备好进入游戏 c03_mahjong_game: 0:麻将理牌 1:麻将出千 2:麻将结束 +c03_durg_game: 0:初始化 1:获得药方 2:获得药包 c03_li_paperwoman: 0:初始化隐藏 1:显示纸人 2:纸舌头完成 3:给药完成 => END diff --git a/asset/dialogue/item_description.csv b/asset/dialogue/item_description.csv index 9b25e593..1f0bb8b7 100644 --- a/asset/dialogue/item_description.csv +++ b/asset/dialogue/item_description.csv @@ -1,5 +1,7 @@ keys,zh_CN,_character,_notes,_tags,zh_SH,en prop_下半部的舌头,下半部的舌头,,,[#texture=c03/ux_下半部的舌头.png],, +prop_2013钥匙,2013钥匙,,,[#texture=c03/2013钥匙.png],, +prop_2013钥匙_说明,看起来较新的钥匙,标着「2013」的房间号码,,,,, index_新游戏,新游戏,,,,,New Game index_继续游戏,继续游戏,,,,,Continue index_退出游戏,退出游戏,,,,,Exit Game @@ -47,6 +49,11 @@ input_拼凑信件,点击选择信件碎片,方向键移动,E 旋碎片转 input_书架游戏,点击书本可选中或交换,Q 退出,,,,,"Click books to select or swap, Q to exit" input_麻将游戏_麻将不足,还缺一块麻将,,,,, input_麻将游戏_操作规则,依次点击两块麻将可进行交换,,,,, +ui_center_notify_c03药车缺少物品,缺少药引,,,,, +ui_center_notify_c03药车不能再取药材,同种药材只能取出一份,,,,, +ui_center_notify_c03放到碗中或原处,药材只能放到碗中或原处,,,,, +ui_center_notify_c03碗口放入药材,从碗口处放入药材,,,,, +ui_center_notify_c03准备研磨,已准备好研磨,,,,, ui_获得道具,获得道具,,,,,Item Obtained ui_获得重要物品,重要物品,,,,,Important Item ui_退出,退出,,,,,Exit @@ -97,7 +104,7 @@ prop_粘鼠板_说明,自制的捕鼠工具,纸上面有黏黏的浆糊,,,,,Ho prop_一把香,一把香,,,[#texture=c03/一把香.png][#inspect=c03/一把香.png],,Bundle of Incense prop_一把香_说明,三炷细香捆成一束,香头微微发黑,散发着淡淡的檀木气息,,,,, prop_麻将2,麻将(二),,,[#texture=c03/麻将2.png][#inspect=c03/ux_麻将2.png],, -prop_麻将2_说明,这块麻将上刻着幺鸡,边角已被摸得光滑,,,,, +prop_麻将2_说明,上面的幺鸡图是鸟和鸡的组合,幺字在南方的方言中有一的意思,,,,, prop_一碗浆糊,一碗浆糊,,,[#texture=c03/一碗浆糊.png][#inspect=c03/ux_一碗浆糊.png],, prop_一碗浆糊_说明,用面粉调制的黏糊糊的浆液,表面已经结了一层薄膜,,,,, prop_纸舌头,纸舌头,,,[#texture=c03/下半部的舌头.png][#inspect=c03/ux_下半部的舌头.png],, @@ -105,7 +112,7 @@ prop_纸舌头_说明,用红纸剪成的舌头形状,边缘参差不齐,像 prop_刀把,刀把,,,[#texture=c03/刀把.png][#inspect=c03/ux_刀把.png],, prop_刀把_说明,木质刀柄,表面磨得发亮,刀身不知去向,,,,, prop_剪下的辫子,剪下的辫子,,,[#texture=c03/剪下的辫子.png][#inspect=c03/ux_剪下的辫子.png],, -prop_剪下的辫子_说明,一束乌黑的长辫,发丝柔顺,似乎刚被剪下不久,,,,, +prop_剪下的辫子_说明,王守义的辫子,是他极其宝贝之物,油亮浓密,没生虱子,,,,, prop_沾血的纸条,沾血的纸条,,,[#texture=c03/沾血的纸条.png][#inspect=c03/ux_沾血的纸条.png],, prop_沾血的纸条_说明,薄薄的纸片上有暗红色的斑点,字迹已经模糊不清,,,,, prop_纸铜钱1,纸铜钱,,,[#texture=c03/纸铜钱1.png][#inspect=c03/ux_纸铜钱1.png],, @@ -122,8 +129,8 @@ prop_菜刀,菜刀,,,[#texture=c03/菜刀.png][#inspect=c03/ux_菜刀.png],, prop_菜刀_说明,厨房里常见的菜刀,刀刃锋利,刀身微微泛着寒光,,,,, prop_1015钥匙,1015钥匙,,,[#texture=c03/1015钥匙.png],, prop_1015钥匙_说明,铜制钥匙,上面刻着「1015」的数字,,,,, -prop_2013钥匙,2013钥匙,,,[#texture=c03/2013钥匙.png],, -prop_2013钥匙_说明,看起来较新的钥匙,标着「2013」的房间号码,,,,, +prop_3012钥匙,3012钥匙,,,[#texture=c03/3012钥匙.png],, +prop_3012钥匙_说明,3012钥匙说明,,,,, prop_胖子的钥匙,胖子的钥匙,,,[#texture=c03/胖子的钥匙.png],, prop_胖子的钥匙_说明,一把普通的房门钥匙,钥匙环上还挂着个小铃铛,,,,, prop_药方,药方,,,[#texture=c03/药方.png][#inspect=c03/ux_药方.png],, @@ -140,6 +147,8 @@ prop_单只小鞋子,一只小鞋子,,,[#texture=c02/小鞋子1.png],,A Single S prop_单只小鞋子_说明,这只小鞋子曾经属于一个裹了小脚的女孩。{br}鞋不成双,祸事难防。,,,,,"This small shoe once belonged to a girl with bound feet.{br}When shoes don't come in pairs, misfortune is hard to prevent." prop_邀请信,邀请信,,,[#texture=c03/邀请信.png][#inspect=c03/ux_邀请信.png],, prop_邀请信_说明,邀请信说明,,,,, +prop_两个麻将,麻将,,,[#texture=c03/两个麻将.png],, +prop_两个麻将_说明,王守义出老千时用的麻将{br}我听说,那会儿赌场由黑帮控制,秩序混乱,赌徒设局被抓后,往往下场凄惨,只有极少数人能够全身而退。,,,,, c01_s05_检查院长房间,好像忘记了什么事情,再回去检查一遍吧。,,ID格式: prop_xx_说明,,,I feel like I've forgotten something. Let me go back and check again. c01_s07_需要报纸,书店还没开门。,,,,,The bookstore isn't open yet. c01_s08_书店工作,老板交代的工作还没做完,不能偷懒。,,,,,I haven't finished the work the boss assigned. I can't slack off. @@ -242,3 +251,4 @@ c03_s03_获得剪刀纸舌头,?✂️纸人,,,,, c03_s03_桌子,?桌子,,,,, c03_s03_洗头盆,?洗头盆,,,,, c03_s03_演出结束,?演出结束,刚刚他们?,,,,, +c03_药方内容,生姜两片{br}竹叶十片去尖{br}经霜三年的甘蔗{br}蟋蟀一对 注:要原配,即本在一窠中者{br}金钱鼠尾辫一副 注:生剪 烧成灰兑水送服,,,,, diff --git a/asset/dialogue/item_description.dialogue b/asset/dialogue/item_description.dialogue index 9d8475d5..626cceae 100644 --- a/asset/dialogue/item_description.dialogue +++ b/asset/dialogue/item_description.dialogue @@ -57,9 +57,11 @@ # c03 还缺一块麻将 [ID:input_麻将游戏_麻将不足] 依次点击两块麻将可进行交换 [ID:input_麻将游戏_操作规则] +缺少药引 [ID:ui_center_notify_c03药车缺少物品] 同种药材只能取出一份 [ID:ui_center_notify_c03药车不能再取药材] 药材只能放到碗中或原处 [ID:ui_center_notify_c03放到碗中或原处] 从碗口处放入药材 [ID:ui_center_notify_c03碗口放入药材] +已准备好研磨 [ID:ui_center_notify_c03准备研磨] 获得道具 [ID:ui_获得道具] @@ -334,6 +336,8 @@ ?桌子 [ID:c03_s03_桌子] ?洗头盆 [ID:c03_s03_洗头盆] ?演出结束,刚刚他们? [ID:c03_s03_演出结束] +# 抓药游戏 +生姜两片{br}竹叶十片去尖{br}经霜三年的甘蔗{br}蟋蟀一对 注:要原配,即本在一窠中者{br}金钱鼠尾辫一副 注:生剪 烧成灰兑水送服 [ID:c03_药方内容] # s04 李癞房间 # s05 肉铺 # s06 胖子卧室 diff --git a/project.godot b/project.godot index 25d6e240..cfc44974 100644 --- a/project.godot +++ b/project.godot @@ -222,12 +222,16 @@ debugging={ [internationalization] locale/translation_remaps={ +"res://asset/art/little_game/c03_药车游戏/标签_英文.png": PackedStringArray("res://asset/art/little_game/c03_药车游戏/标签_中文.png:zh"), "res://asset/art/ui/note/c02_slices.png": PackedStringArray("res://asset/art/ui/note/c02_slices_en.png:en") } locale/translations=PackedStringArray("res://asset/dialogue/c01.zh_CN.translation", "res://asset/dialogue/c02.zh_CN.translation", "res://asset/dialogue/inspect_content.zh_CN.translation", "res://asset/dialogue/item_description.zh_CN.translation", "res://asset/dialogue/names.zh_CN.translation", "res://asset/dialogue/npc.zh_CN.translation", "res://asset/dialogue/c01.zh_SH.translation", "res://asset/dialogue/c01.en.translation", "res://asset/dialogue/c03.zh_CN.translation", "res://asset/dialogue/c04.zh_CN.translation", "res://asset/dialogue/c05.zh_CN.translation", "res://asset/dialogue/c06.zh_CN.translation", "res://asset/dialogue/item_description.en.translation", "res://asset/dialogue/item_description.zh_SH.translation", "res://asset/dialogue/c02.zh_SH.translation", "res://asset/dialogue/npc.zh_SH.translation", "res://asset/dialogue/c02.en.translation", "res://asset/dialogue/inspect_content.en.translation", "res://asset/dialogue/names.en.translation", "res://asset/dialogue/npc.en.translation", "res://asset/dialogue/线索笔记.en.translation", "res://asset/dialogue/线索笔记.zh_CN.translation") locale/translations_pot_files=PackedStringArray("res://asset/dialogue/item_description.dialogue", "res://asset/dialogue/c01.dialogue", "res://asset/dialogue/c02.dialogue", "res://asset/dialogue/inspect_content.dialogue", "res://asset/dialogue/npc.dialogue", "res://asset/dialogue/c03.dialogue", "res://asset/dialogue/c04.dialogue", "res://asset/dialogue/c05.dialogue", "res://asset/dialogue/c06.dialogue", "res://asset/dialogue/event_stage.dialogue") locale/test="zh-Hans" locale/fallback="zh" +locale/language_filter=["cmn", "en", "eo", "es", "it", "ja", "ko", "tr", "uk", "zh"] +locale/locale_filter_mode=1 +locale/country_filter=["CN", "DE", "ES", "EU", "FR", "GB", "HK", "IT", "JP", "KR", "NO", "NZ", "TR", "TW", "US"] [layer_names] diff --git a/scene/ground/scene/c02/s03_院子.tscn b/scene/ground/scene/c02/s03_院子.tscn index f461e99b..91ae5a9a 100644 --- a/scene/ground/scene/c02/s03_院子.tscn +++ b/scene/ground/scene/c02/s03_院子.tscn @@ -32,7 +32,6 @@ [ext_resource type="Texture2D" uid="uid://0x7cl2cmcs6l" path="res://asset/art/scene/c02/s03_公寓一楼院子/光晕/光晕2.png" id="11_g0qhj"] [ext_resource type="Script" uid="uid://3p6e8f385kow" path="res://scene/ground/script/c02/event_2d_xchan_run_after_got_pliers.gd" id="11_lq23y"] [ext_resource type="SpriteFrames" uid="uid://di43shn22n5ph" path="res://asset/art/gif/c00_通用动作/c00_通用动作_frames.tres" id="11_o1qbs"] -[ext_resource type="Script" uid="uid://0wjaho6qkg6s" path="res://manager/event_manager/event_binder.gd" id="12_2b6vx"] [ext_resource type="Texture2D" uid="uid://c8b80a75k3qw6" path="res://asset/art/scene/c02/s03_公寓一楼院子/e_院子地上纸钱.png" id="14_qqdxs"] [ext_resource type="Texture2D" uid="uid://douwcahbhr1wt" path="res://asset/art/scene/c02/s03_公寓一楼院子/诡异效果/前侧楼梯_楼梯人群.png" id="18_crgo6"] [ext_resource type="Texture2D" uid="uid://dqd645v3k4yar" path="res://asset/art/scene/c02/s03_公寓一楼院子/诡异效果/前侧楼梯_诡异纸人.png" id="19_vddfx"] @@ -56,6 +55,7 @@ [ext_resource type="Texture2D" uid="uid://bcc7ni57tohwb" path="res://asset/art/scene/c02/s03_公寓一楼院子/光晕/光晕6.png" id="35_o1qbs"] [ext_resource type="PackedScene" uid="uid://0sofmhrl358m" path="res://scene/entity/npc.tscn" id="35_plfv5"] [ext_resource type="Texture2D" uid="uid://uh2ruegr3d7v" path="res://asset/art/gif/c02_一楼火灾/7-最左木箱 烧痕.png" id="36_rnk1v"] +[ext_resource type="Script" uid="uid://chgyivvdw22cw" path="res://scene/ground/script/c02/s03_event_2d抓药游戏.gd" id="38_g0s7j"] [ext_resource type="SpriteFrames" uid="uid://b0icyhxpj16tv" path="res://asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres" id="39_rnk1v"] [ext_resource type="PackedScene" uid="uid://cpxt082my5yac" path="res://scene/ground/script/c02/s03_closeup抓药游戏.tscn" id="45_fxne6"] [ext_resource type="AudioStream" uid="uid://broetvd8vuc05" path="res://asset/audio/peiyin/c02/c02_8小男孩童谣.ogg" id="46_qqdxs"] @@ -652,18 +652,18 @@ z_index = 11 position = Vector2(1025, 27) texture = ExtResource("22_3y5s5") -[node name="Closeup抓药游戏" parent="Ground/DeployLayer" index="24" instance=ExtResource("23_81juy")] +[node name="Event2D抓药游戏" type="Node2D" parent="Ground/DeployLayer" index="24"] +script = ExtResource("38_g0s7j") +event_name = &"c03_durg_game" +event_stages = Array[int]([1]) +metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" + +[node name="Closeup抓药游戏" parent="Ground/DeployLayer/Event2D抓药游戏" instance=ExtResource("23_81juy")] position = Vector2(1058, 24) packed_scene = ExtResource("45_fxne6") +action_key = 3 collision_width_and_x = Vector2(40, 0) -[node name="EventBinder" type="Node" parent="Ground/DeployLayer/Closeup抓药游戏"] -script = ExtResource("12_2b6vx") -updater_event = &"current_chapter_stage" -updater_stage_mode = "exclude" -updater_stages = Array[int]([0, 1, 2]) -metadata/_custom_type_script = "uid://0wjaho6qkg6s" - [node name="Closeup敲门游戏" parent="Ground/DeployLayer" index="25" instance=ExtResource("23_81juy")] position = Vector2(466, 3) packed_scene = ExtResource("24_0o4rt") diff --git a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn index 077ed912..b42eadfd 100644 --- a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn +++ b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=43 format=3 uid="uid://cp8d3ag5nbjq0"] +[gd_scene load_steps=44 format=3 uid="uid://cp8d3ag5nbjq0"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_6w6et"] [ext_resource type="Script" uid="uid://dydpmjpcvt3v1" path="res://scene/ground/scene/c02/s05_一楼内侧楼道.gd" id="2_70lf6"] @@ -30,6 +30,7 @@ [ext_resource type="AudioStream" uid="uid://bhaws2ungqaf5" path="res://asset/audio/sfx/交互/角色/sfx_哼歌.ogg" id="24_7mq0m"] [ext_resource type="Script" uid="uid://wapo47a1oddf" path="res://scene/entity/audio/sfx2d.gd" id="25_4k6pw"] [ext_resource type="PackedScene" uid="uid://decfqoe5v0y6n" path="res://scene/effect/dizzy_shader.tscn" id="29_74b3r"] +[ext_resource type="Script" uid="uid://bkkiyk5jkdw4d" path="res://manager/event_manager/event2d.gd" id="30_23jkv"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_n48fn"] @@ -341,6 +342,11 @@ metadata/_custom_type_script = "uid://wapo47a1oddf" position = Vector2(528, 57) hook_method = "update_1l_map" +[node name="Event2D抓药演出" type="Node2D" parent="Ground/DeployLayer" index="22"] +position = Vector2(353, 0) +script = ExtResource("30_23jkv") +metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" + [node name="MainPlayer" parent="Ground" index="5"] position = Vector2(41, 98) player_movement_rect = Rect2(23, -158, 677, 316) diff --git a/scene/ground/script/c02/s03_closeup抓药游戏.gd b/scene/ground/script/c02/s03_closeup抓药游戏.gd index 747787a2..d44e09c0 100644 --- a/scene/ground/script/c02/s03_closeup抓药游戏.gd +++ b/scene/ground/script/c02/s03_closeup抓药游戏.gd @@ -3,9 +3,11 @@ extends CanvasLayer @warning_ignore("unused_signal") signal exit(arg) + +@onready var animation_player: AnimationPlayer = %AnimationPlayer @onready var slot_bowl: Marker2D = %DropSlotBowl @onready var drawers: Array[HoverLightClickArea] = [ - %Drawer1, %Drawer2, %Drawer3, %Drawer4, %Drawer5, %Drawer6 + %Drawer1, %Drawer2, %Drawer3, %Drawer4, %Drawer5, %Drawer6, %"Hover蟋蟀", %"Hover粉末" ] @onready var draggables: Array[DraggableRigid] = [ %DraggableRigid1, @@ -13,28 +15,50 @@ signal exit(arg) %DraggableRigid3, %DraggableRigid4, %DraggableRigid5, - %DraggableRigid6 + %DraggableRigid6, + %DraggableRigid7, + %DraggableRigid8 ] -@onready var sfx_picked = $SfxPicked as AudioStreamPlayer -@onready var sfx_invalid_drop = $SfxInvalidDrop as AudioStreamPlayer -@onready var sfx_dropped = $SfxDropped as AudioStreamPlayer -@onready var sfx_ready_to_grind = $SfxReadyToGrind as AudioStreamPlayer +@onready var sfx_picked = $SfxPicked as Sfx +@onready var sfx_invalid_drop = $SfxInvalidDrop as Sfx +@onready var sfx_dropped = $SfxDropped as Sfx +@onready var sfx_ready_to_grind = $SfxReadyToGrind as Sfx +@onready var sfx_ingredients_ready = $SfxIngredientsReady as Sfx +@onready var sfx_toggle_grinder = $SfxToggleGrinder as Sfx +@onready var sfx_grinding = $SfxGrinding as Sfx +@onready var sfx_packing = $SfxPacking as Sfx + +@onready var inspect_content = %"InspectContent" as Control +@onready var hover_spec = %"Hover药方" as HoverLightClickArea +@onready var hover_grinder = %"Hover石臼棒" as HoverLightClickArea +@onready var hover_finished_powder = %"Hover完成的药粉" as HoverLightClickArea -const correct_ingredients = [0, 4, 6] # 生姜,竹叶,甘蔗 + +const correct_ingredients = [0, 3, 5, 6, 7] # 生姜,竹叶,甘蔗, 蟋蟀, 粉末 var picked_ingredients: Array[int] = [] var holding_ingredient := -1 var all_picked = false + func _ready() -> void: layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME - for i in 6: + for i in drawers.size(): toggle_draggable_visible(i, false) var drawer = drawers[i] drawer.interacted.connect(_on_drawer_interacted.bind(i)) var drag = draggables[i] drag.picked.connect(_on_picked.bind(i)) drag.dropped.connect(_on_dropped.bind(i)) + hover_spec.interacted.connect(_on_spec_interacted) + if not SceneManager.has_prop("prop_剪下的辫子"): + _freezing_drawers() + SceneManager.pop_center_notification("ui_center_notify_c03药车缺少物品") + + +func _on_spec_interacted() -> void: + hover_spec.hide() + inspect_content.show() func toggle_draggable_freeze(freezing := true): @@ -54,6 +78,7 @@ var has_notified_put_to_bowl = false func _on_drawer_interacted(id: int): if picked_ingredients.has(id) or holding_ingredient > 0: $SfxPickFailed.play() + drawers[id].invalid_blink() SceneManager.pop_center_notification("ui_center_notify_c03药车不能再取药材") else: if not has_notified_put_to_bowl: @@ -68,7 +93,12 @@ func _on_drawer_interacted(id: int): func _on_picked(_node: DraggableRigid, id: int): $SfxPicked.play() if holding_ingredient > 0 and holding_ingredient != id: - printerr("DraggableRigid _on_picked: holding_ingredient=", holding_ingredient, " but picked id=", id) + printerr( + "DraggableRigid _on_picked: holding_ingredient=", + holding_ingredient, + " but picked id=", + id + ) picked_ingredients.erase(id) holding_ingredient = id @@ -79,13 +109,14 @@ func _on_dropped(node: DraggableRigid, id: int): if dropping_position.x < 210: dropped = true picked_ingredients.append(id) + if GlobalConfig.DEBUG: + print("picked_ingredients updated:", picked_ingredients) else: # 判断是否对应到 slots 在 limit_squared 范围内 var drawer = drawers[id] if drawer.is_focused(): holding_ingredient = -1 dropped = true - node.update_position(drawer.global_position) toggle_draggable_visible(id, false) else: for d in drawers: @@ -104,7 +135,7 @@ func _on_dropped(node: DraggableRigid, id: int): if all_picked: print(picked_ingredients) # 全部插入,stage 进入下一阶段 - sfx_ready_to_grind.play() + sfx_ingredients_ready.play() _setup_on_ready_to_grind() else: sfx_dropped.play() @@ -115,8 +146,60 @@ func _on_dropped(node: DraggableRigid, id: int): sfx_invalid_drop.play() -func _setup_on_ready_to_grind() -> void: - toggle_draggable_freeze(true) +func _freezing_drawers() -> void: # 禁用 drawer for d in drawers: d.freezing = true + + +func _setup_on_ready_to_grind() -> void: + toggle_draggable_freeze(true) + _freezing_drawers() + _process_grinding() + var p = get_parent() as Closeup2D + if p: + p.hold_cancel_before_exit() + + +func _process_grinding() -> void: + hover_spec.freezing = true + hover_spec.show() + inspect_content.hide() + SceneManager.pop_center_notification("ui_center_notify_c03准备研磨") + sfx_ready_to_grind.play() + hover_grinder.freezing = false + await hover_grinder.interacted + hover_grinder.freezing = true + animation_player.play("intro_grinding") + sfx_toggle_grinder.play() + await animation_player.animation_finished + hover_finished_powder.freezing = false + hover_finished_powder.interacted.connect(_on_finished_powder_interacted, CONNECT_ONE_SHOT) + + +func _on_finished_powder_interacted() -> void: + var packing_paper = $"洞中药纸" + sfx_packing.play() + var tween = create_tween() + tween.tween_property(packing_paper, "modulate:a", 0.0, 1.0) + tween = create_tween() + tween.tween_interval(0.5) + tween.tween_property(hover_finished_powder, "modulate:a", 0.0, 0.5) + tween.tween_callback(SceneManager.enable_prop_item.bind("prop_药包")) + tween.tween_callback(exit.emit.bind(true)) + + +func ingredients_fading_out() -> void: + var tween = create_tween() + tween.tween_interval(0.01) + for i in drawers.size(): + tween.parallel().tween_property(draggables[i], "modulate:a", 0.0, 3.0) + for i in drawers.size(): + tween.tween_callback(draggables[i].queue_free) + + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("cancel") and inspect_content.visible: + get_viewport().set_input_as_handled() + hover_spec.show() + inspect_content.hide() diff --git a/scene/ground/script/c02/s03_closeup抓药游戏.tscn b/scene/ground/script/c02/s03_closeup抓药游戏.tscn index 8c9b5bd5..4f05f6cb 100644 --- a/scene/ground/script/c02/s03_closeup抓药游戏.tscn +++ b/scene/ground/script/c02/s03_closeup抓药游戏.tscn @@ -1,26 +1,220 @@ -[gd_scene load_steps=31 format=3 uid="uid://cpxt082my5yac"] +[gd_scene load_steps=59 format=3 uid="uid://cpxt082my5yac"] [ext_resource type="Script" uid="uid://dj2b4f3soxki5" path="res://scene/ground/script/c02/s03_closeup抓药游戏.gd" id="1_0wbm3"] -[ext_resource type="Texture2D" uid="uid://c1704t86t55cr" path="res://asset/art/little_game/c03_药车游戏/参考图.png" id="2_0wbm3"] +[ext_resource type="Texture2D" uid="uid://bs4npq7fnwjhw" path="res://asset/art/little_game/c03_药车游戏/背景底图.png" id="2_5ts1i"] +[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="2_wtw10"] +[ext_resource type="Texture2D" uid="uid://c78ox8ynkdvdx" path="res://asset/art/little_game/c03_药车游戏/石臼单独.png" id="3_dv1g7"] [ext_resource type="PackedScene" uid="uid://dmysq4sxx8iqh" path="res://scene/entity/ux/content_inspector.tscn" id="3_h2dug"] [ext_resource type="Texture2D" uid="uid://nil1tps2bcwg" path="res://asset/art/little_game/c03_药车游戏/碗完整.png" id="3_nugkd"] +[ext_resource type="Texture2D" uid="uid://c5q0o3aiiwg86" path="res://asset/art/little_game/c03_药车游戏/捣药棒竖.png" id="4_8leof"] +[ext_resource type="Texture2D" uid="uid://dm44hxapmdael" path="res://asset/art/little_game/c03_药车游戏/捣药棒(石臼中).png" id="4_j2sy5"] +[ext_resource type="Texture2D" uid="uid://bagdbej72i006" path="res://asset/art/little_game/c03_药车游戏/竹筐蟋蟀.png" id="5_6mqrq"] +[ext_resource type="Texture2D" uid="uid://5qrlqm1moo3s" path="res://asset/art/little_game/c03_药车游戏/石臼前侧.png" id="5_ctou3"] [ext_resource type="Texture2D" uid="uid://f186lvt5y2ql" path="res://asset/art/ui/遮罩/inspect背景遮罩.png" id="5_qafag"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="6_0wbm3"] [ext_resource type="AudioStream" uid="uid://bbe0mq32pms3v" path="res://asset/audio/effect/impact/impactPlank_medium_002.ogg" id="6_aqv3v"] [ext_resource type="Script" uid="uid://dpocj5al0rvai" path="res://ui/text_helper.gd" id="6_y0m4i"] [ext_resource type="AudioStream" uid="uid://cx3dugjvb4142" path="res://asset/audio/effect/impact/impactWood_light_001.ogg" id="7_flc3m"] [ext_resource type="PackedScene" uid="uid://c3gesto3ijcyq" path="res://scene/little_game/general/draggable_rigid.tscn" id="7_lv3nw"] +[ext_resource type="Texture2D" uid="uid://bykchi6rjrl4a" path="res://asset/art/little_game/c03_药车游戏/药方.png" id="7_otneu"] +[ext_resource type="Texture2D" uid="uid://b6oh1cyi1fb54" path="res://asset/art/little_game/c03_药车游戏/框内黑色粉末.png" id="8_kbm4v"] [ext_resource type="Texture2D" uid="uid://hsignnm14m86" path="res://asset/art/little_game/c03_药车游戏/生姜.png" id="8_lv3nw"] [ext_resource type="AudioStream" uid="uid://0i2xcuon17va" path="res://asset/audio/effect/impact/impactBell_heavy_002.ogg" id="9_8lx66"] +[ext_resource type="Texture2D" uid="uid://g6i61gj85w66" path="res://asset/art/little_game/c03_药车游戏/第1格.png" id="9_i3023"] [ext_resource type="Texture2D" uid="uid://kmjw6xi8sufe" path="res://asset/art/little_game/c03_药车游戏/茯苓.png" id="9_igyl7"] [ext_resource type="AudioStream" uid="uid://gxoubqjqpuks" path="res://asset/audio/sfx/交互/序章/04_书店内_点击书本.ogg" id="10_aqv3v"] [ext_resource type="Texture2D" uid="uid://da5gf0n8qgyq0" path="res://asset/art/little_game/c03_药车游戏/黄岑.png" id="10_nugkd"] +[ext_resource type="Texture2D" uid="uid://c5j4i6lkuqh3x" path="res://asset/art/little_game/c03_药车游戏/第2格.png" id="10_wvyjr"] [ext_resource type="Texture2D" uid="uid://xkf7pjxngrkc" path="res://asset/art/little_game/c03_药车游戏/竹叶.png" id="11_bmmll"] [ext_resource type="AudioStream" uid="uid://i744r3cpknpe" path="res://asset/audio/effect/impact/impactBell_heavy_000.ogg" id="11_jwgdn"] +[ext_resource type="Texture2D" uid="uid://eikp4cro2dug" path="res://asset/art/little_game/c03_药车游戏/第3格.png" id="11_pcsd2"] [ext_resource type="Texture2D" uid="uid://bxmbmtmndc656" path="res://asset/art/little_game/c03_药车游戏/金银花.png" id="12_12r3p"] +[ext_resource type="Texture2D" uid="uid://nv8312yg3gx3" path="res://asset/art/little_game/c03_药车游戏/第4格.png" id="12_gf0xj"] +[ext_resource type="Texture2D" uid="uid://cc10kf65rd5br" path="res://asset/art/little_game/c03_药车游戏/第5格.png" id="13_26hqw"] [ext_resource type="Texture2D" uid="uid://phb40d686c16" path="res://asset/art/little_game/c03_药车游戏/甘蔗.png" id="13_x7amv"] +[ext_resource type="Texture2D" uid="uid://dli2dahffsmk6" path="res://asset/art/little_game/c03_药车游戏/第6格.png" id="14_wdf7x"] [ext_resource type="Texture2D" uid="uid://ci5u7n7ws07ws" path="res://asset/art/little_game/c03_药车游戏/ux_碗前遮挡_扩张.png" id="15_nugkd"] +[ext_resource type="Texture2D" uid="uid://bknyukxevd2lw" path="res://asset/art/little_game/c03_药车游戏/标签_英文.png" id="15_wvyjr"] [ext_resource type="PackedScene" uid="uid://bkk1rxx36ghrl" path="res://scene/entity/ux/hover_light_click_area.tscn" id="20_8lx66"] +[ext_resource type="AudioStream" uid="uid://b1ka1gwskwqa6" path="res://asset/audio/effect/impact/impactGeneric_light_004.ogg" id="24_vnme8"] +[ext_resource type="Texture2D" uid="uid://r2idykchn6re" path="res://asset/art/prop/c03/ux_药方.png" id="25_gonyp"] +[ext_resource type="AudioStream" uid="uid://44slgncnt6sj" path="res://asset/audio/sfx/交互/第一章/sfx_手交互成功.ogg" id="25_vnme8"] +[ext_resource type="AudioStream" uid="uid://bs3hohq8pftc7" path="res://asset/audio/effect/impact/fire_impact_short.ogg" id="26_ctou3"] +[ext_resource type="Texture2D" uid="uid://e4q2o6x1gtvo" path="res://asset/art/little_game/c03_药车游戏/完成药粉.png" id="29_26hqw"] +[ext_resource type="Texture2D" uid="uid://due28st4b4e01" path="res://asset/art/little_game/c03_药车游戏/洞中药纸.png" id="30_8leof"] +[ext_resource type="Texture2D" uid="uid://b5ibixjn6oikx" path="res://asset/art/little_game/c03_药车游戏/黑色粉末单独.png" id="32_gf0xj"] +[ext_resource type="Texture2D" uid="uid://bq1ilitkvodnr" path="res://asset/art/little_game/c03_药车游戏/蟋蟀单独.png" id="33_26hqw"] + +[sub_resource type="Animation" id="Animation_wdf7x"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Hover石臼棒:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(205, 58)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Hover石臼棒:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hover石臼棒:z_index") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("SfxGrinding:playing") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("完成的药粉:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("洞中药纸:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("SfxPacking:playing") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_26hqw"] +resource_name = "intro_grinding" +length = 8.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Hover石臼棒:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.7, 1.36667, 2, 3, 3.33333, 3.8, 4.33333, 4.66667, 5.26667, 5.93333, 6.46667, 7, 7.7), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(205, 58), Vector2(170, 33), Vector2(169, 9), Vector2(132, 53), Vector2(134, 113), Vector2(131, 78), Vector2(132, 53), Vector2(134, 113), Vector2(131, 78), Vector2(132, 53), Vector2(134, 113), Vector2(131, 51), Vector2(171, -3.99999), Vector2(203, 57)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Hover石臼棒:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.7, 7, 7.73333), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, -0.614241, -0.614241, 0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hover石臼棒:z_index") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1.4, 7.1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 1, 0] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("SfxGrinding:playing") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(2.8, 4.2, 5.73333), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, true, true] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("完成的药粉:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(3.2, 5.9), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/5/type = "method" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(3.33333), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"ingredients_fading_out" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_wdf7x"] +_data = { +&"RESET": SubResource("Animation_wdf7x"), +&"intro_grinding": SubResource("Animation_26hqw") +} [sub_resource type="Gradient" id="Gradient_aqv3v"] offsets = PackedFloat32Array(0.0291971, 0.782482, 1) @@ -52,8 +246,22 @@ radius = 14.0 [sub_resource type="CircleShape2D" id="CircleShape2D_8lx66"] radius = 15.0 +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ctou3"] +radius = 7.0 +height = 29.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_ujbuy"] +radius = 15.0 + [node name="Closeup抓药游戏" type="CanvasLayer"] script = ExtResource("1_0wbm3") +metadata/_edit_horizontal_guides_ = [143.0] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +unique_name_in_owner = true +libraries = { +&"": SubResource("AnimationLibrary_wdf7x") +} [node name="BG" type="TextureRect" parent="."] light_mask = 5 @@ -62,12 +270,115 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("2_0wbm3") +texture = ExtResource("2_5ts1i") -[node name="碗完整" type="Sprite2D" parent="BG"] -visible = false -position = Vector2(142, 187) +[node name="石臼" type="Sprite2D" parent="."] +position = Vector2(117, 62) +texture = ExtResource("3_dv1g7") +centered = false + +[node name="竹筐蟋蟀" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(9, 38) +texture = ExtResource("5_6mqrq") +centered = false + +[node name="Hover石臼棒" parent="." instance=ExtResource("20_8lx66")] +unique_name_in_owner = true +position = Vector2(205, 58) +freezing = true + +[node name="PointLight2D" type="PointLight2D" parent="Hover石臼棒"] +position = Vector2(-13, 7) +energy = 2.0 +range_layer_max = 10 +range_item_cull_mask = 4 +texture = ExtResource("4_j2sy5") + +[node name="石杵" type="Sprite2D" parent="Hover石臼棒"] +light_mask = 5 +position = Vector2(2, -36) +rotation = 0.571752 +texture = ExtResource("4_8leof") +centered = false + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover石臼棒"] +show_behind_parent = true +position = Vector2(-49, -31) +polygon = PackedVector2Array(69, 0.2, 67, 0, 45, 0, 43, 3, 41, 3, 41, 14.3, 0, 69, 0, 75, 38.6, 75, 44.9, 68, 46.2, 68, 64, 32.5, 64, 30.8, 71.7, 24, 72, 4.4, 69, 2) + +[node name="石臼前侧" type="Sprite2D" parent="."] +position = Vector2(117, 62) +texture = ExtResource("5_ctou3") +centered = false + +[node name="Hover药方" parent="." instance=ExtResource("20_8lx66")] +unique_name_in_owner = true +position = Vector2(328, 218) + +[node name="PointLight2D" type="PointLight2D" parent="Hover药方"] +position = Vector2(-6, 10) +energy = 0.6 +range_layer_max = 10 +range_item_cull_mask = 4 +texture = ExtResource("7_otneu") + +[node name="药方" type="Sprite2D" parent="Hover药方"] +light_mask = 5 +position = Vector2(-111, -65) +texture = ExtResource("7_otneu") +centered = false + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover药方"] +position = Vector2(-111, -65) +polygon = PackedVector2Array(210, 0, 156.6, 0, 154, 0.1, 154, 0.9, 124, 0, 54, 0, 54, 0.7, 20, 105.7, 20, 107.5, 4, 141.6, 4, 142.7, 0, 144.7, 0, 150, 168.8, 150, 181.9, 136, 183.2, 136, 193.2, 117, 194.7, 117, 198, 97.2, 198, 87.6, 201.1, 83, 202.3, 83, 203.4, 80.5, 200, 77.1, 200, 76, 202, 69.3, 202, 67.1, 205, 65.1, 205, 60.9, 202, 58.9, 202, 55, 203, 55, 203, 47.2, 205.5, 46, 209.2, 46, 205, 37.5, 205, 35, 210, 35, 210, 32.5, 207, 26.5, 207, 24.2, 210, 14.6) + +[node name="碗" type="Sprite2D" parent="."] +position = Vector2(38, 124.5) texture = ExtResource("3_nugkd") +centered = false + +[node name="柜格1" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(259, 36) +texture = ExtResource("9_i3023") +centered = false + +[node name="柜格2" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(364, 35) +texture = ExtResource("10_wvyjr") +centered = false + +[node name="柜格3" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(467, 36) +texture = ExtResource("11_pcsd2") +centered = false + +[node name="柜格4" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(259, 96) +texture = ExtResource("12_gf0xj") +centered = false + +[node name="柜格5" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(361, 98) +texture = ExtResource("13_26hqw") +centered = false + +[node name="柜格6" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(465, 98) +texture = ExtResource("14_wdf7x") +centered = false + +[node name="标签" type="Sprite2D" parent="."] +light_mask = 5 +position = Vector2(293, 56) +texture = ExtResource("15_wvyjr") +centered = false [node name="SfxPicked" type="AudioStreamPlayer" parent="."] stream = ExtResource("7_flc3m") @@ -93,12 +404,36 @@ bus = &"game_sfx" script = ExtResource("6_0wbm3") metadata/_custom_type_script = "uid://rq6w1vuhuq1m" +[node name="SfxIngredientsReady" type="AudioStreamPlayer" parent="."] +stream = ExtResource("11_jwgdn") +bus = &"game_sfx" +script = ExtResource("6_0wbm3") +metadata/_custom_type_script = "uid://rq6w1vuhuq1m" + [node name="SfxReadyToGrind" type="AudioStreamPlayer" parent="."] stream = ExtResource("11_jwgdn") bus = &"game_sfx" script = ExtResource("6_0wbm3") metadata/_custom_type_script = "uid://rq6w1vuhuq1m" +[node name="SfxToggleGrinder" type="AudioStreamPlayer" parent="."] +stream = ExtResource("24_vnme8") +bus = &"game_sfx" +script = ExtResource("6_0wbm3") +metadata/_custom_type_script = "uid://rq6w1vuhuq1m" + +[node name="SfxGrinding" type="AudioStreamPlayer" parent="."] +stream = ExtResource("26_ctou3") +bus = &"game_sfx" +script = ExtResource("6_0wbm3") +metadata/_custom_type_script = "uid://rq6w1vuhuq1m" + +[node name="SfxPacking" type="AudioStreamPlayer" parent="."] +stream = ExtResource("25_vnme8") +bus = &"game_sfx" +script = ExtResource("6_0wbm3") +metadata/_custom_type_script = "uid://rq6w1vuhuq1m" + [node name="DropSlotBowl" type="Marker2D" parent="."] unique_name_in_owner = true position = Vector2(135, 141) @@ -187,12 +522,50 @@ texture = SubResource("GradientTexture2D_jwgdn") position = Vector2(0.5, -0.5) shape = SubResource("RectangleShape2D_aqv3v") -[node name="DraggableRigid1" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="Hover蟋蟀" parent="." instance=ExtResource("20_8lx66")] +unique_name_in_owner = true +position = Vector2(56, 61) + +[node name="PointLight2D" type="PointLight2D" parent="Hover蟋蟀"] +position = Vector2(10, 2) +energy = 2.0 +range_layer_max = 10 +range_item_cull_mask = 4 +texture = ExtResource("33_26hqw") + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover蟋蟀"] +show_behind_parent = true +position = Vector2(-47, -23) +polygon = PackedVector2Array(92, 0, 74.8, 0, 71.5, 2, 69.1, 2, 59, 14.3, 45, 20.7, 38.8, 22, 34.5, 22, 25.5, 17, 23.1, 17, 17, 24.3, 17, 25.7, 10.5, 29, 8, 29, 1, 38, 0, 38, 0, 43.3, 3.4, 53.4, 83, 54, 87.7, 50, 89.6, 50, 91, 43.2, 91, 37.1, 83, 30.1, 83, 28.7, 70.3, 23.2, 80, 17.1, 93, 14, 93, 3.9, 80.9, 7, 78.9, 7, 79, 6.4, 89.3, 3, 91.9, 3) + +[node name="Hover粉末" parent="." instance=ExtResource("20_8lx66")] +unique_name_in_owner = true +position = Vector2(478, 209) + +[node name="PointLight2D" type="PointLight2D" parent="Hover粉末"] +position = Vector2(4, 6) +energy = 2.0 +range_layer_max = 10 +range_item_cull_mask = 4 +texture = ExtResource("8_kbm4v") + +[node name="头发粉末" type="Sprite2D" parent="Hover粉末"] +light_mask = 5 +position = Vector2(-79, -49) +texture = ExtResource("8_kbm4v") +centered = false + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover粉末"] +position = Vector2(-79, -49) +polygon = PackedVector2Array(107.4, 0, 79.8, 0, 64.4, 10, 62.2, 10, 50, 22.2, 50, 22.9, 0, 59.5, 0, 70, 2.7, 71, 9.9, 71, 11, 72.6, 11, 74.2, 23.5, 81, 28, 81, 32, 86, 37.3, 86, 56.4, 99, 58.1, 99, 67.4, 110, 84.7, 110, 110, 94.1, 115.3, 93, 116.5, 93, 152.5, 74, 154.9, 74, 161.9, 66, 163.4, 66, 166, 58.2, 166, 34.9, 162, 29.3, 162, 27, 138, 9, 138, 7, 122.5, 7) + +[node name="DraggableRigid1" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(314, 69) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("8_lv3nw") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid1"] shape = SubResource("CircleShape2D_nugkd") @@ -202,12 +575,13 @@ shape = SubResource("CircleShape2D_nugkd") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid1/Area2D"] polygon = PackedVector2Array(23, -19, -1.8, -19, -14.5, -14, -20.7, -14, -29.7, -7, -30, 6.5, -15.1, 19, 11.5, 19, 30, 6.4, 30, -11.7, 23, -17.9) -[node name="DraggableRigid2" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="DraggableRigid2" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(413, 67) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("9_igyl7") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid2"] shape = SubResource("CircleShape2D_bmmll") @@ -217,12 +591,13 @@ shape = SubResource("CircleShape2D_bmmll") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid2/Area2D"] polygon = PackedVector2Array(16, -16.5, -9.5, -16.5, -17.5, -12.5, -18, 10, -15, 12.4, -15, 13.7, -10.1, 16.5, 11.6, 16.5, 17.9, 9.5, 18, -14, 16, -15.5) -[node name="DraggableRigid3" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="DraggableRigid3" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(518, 68) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("10_nugkd") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="Area2D" type="Area2D" parent="DraggableRigid3"] @@ -232,12 +607,13 @@ polygon = PackedVector2Array(15, -18.5, -6.2, -18.5, -9.5, -16.5, -11.9, -16.5, [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid3"] shape = SubResource("CircleShape2D_12r3p") -[node name="DraggableRigid4" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="DraggableRigid4" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(312, 126) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("11_bmmll") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid4"] shape = SubResource("CircleShape2D_x7amv") @@ -247,12 +623,13 @@ shape = SubResource("CircleShape2D_x7amv") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid4/Area2D"] polygon = PackedVector2Array(-7.3, -24.4, -14, -24.5, -20.6, -18.7, -22, -20.5, -25.3, -20.5, -29.3, -11.5, -31, -11.5, -31, -9.2, -29, -1.5, -30.2, 1.5, -31, 1.5, -31, 5.9, -30, 7.9, -31, 8.3, -31, 17.6, -27.8, 18.9, -29, 22.1, -29, 24.5, -21.2, 24.5, -15, 22.2, -12, 23.7, -12, 24.5, 7.7, 24.5, 11, 20.2, 22.3, 16.5, 27.8, 16.5, 31, 13.3, 31, 10.4, 28.3, 8.8, 30.3, 8.5, 31, 8.5, 31, -2.6, 30.1, -6.5, 31, -6.5, 31, -19, 26.7, -17.5, 21.7, -17.5, 13, -24.5, -6.5, -24.5) -[node name="DraggableRigid5" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="DraggableRigid5" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(413, 124) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("12_12r3p") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid5"] shape = SubResource("CircleShape2D_flc3m") @@ -262,12 +639,13 @@ shape = SubResource("CircleShape2D_flc3m") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid5/Area2D"] polygon = PackedVector2Array(-2, -28, -20, -28, -20, -23.5, -16.7, -17.7, -30.2, -16, -32, -16, -32, -12, -26, -3.5, -32, 0.6, -32, 11.1, -26.4, 7, -23, 15.4, -23, 17.4, -20.3, 18.4, -15, 11.7, -15, 11, -13.5, 11, -11, 19.2, -11, 28, 5.5, 28, 9, 23.7, 9, 21.5, 12, 20.8, 13.2, 22, 17.6, 22, 19, 15.2, 19, 13.8, 31.1, 13, 32, 13, 32, 7.2, 29.4, 3.1, 32, 1.4, 32, -11.1, 23.7, -13.9, 22, -22.4, 22, -24.3, 19.7, -25.4, 15.4, -21.9, 16, -26.9, 16, -28, 6.2, -28, 3, -24.8, -1, -23.4, -2, -27) -[node name="DraggableRigid6" parent="." node_paths=PackedStringArray("replaced_area_monitor") instance=ExtResource("7_lv3nw")] +[node name="DraggableRigid6" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] unique_name_in_owner = true position = Vector2(515, 124) +angular_damp = 1.0 replaced_area_monitor = NodePath("Area2D") texture = ExtResource("13_x7amv") -limit_rect = Rect2(65, 30, 460, 100) +limit_polygon = NodePath("../LimitPolygon2D") [node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid6"] position = Vector2(-6, 3) @@ -278,22 +656,129 @@ shape = SubResource("CircleShape2D_8lx66") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid6/Area2D"] polygon = PackedVector2Array(-9, -26, -16.7, -20, -19.1, -20, -24, -12.6, -24, -7.5, -28, -6.1, -28, 26, 0.4, 26, 2, 23.6, 2, 23, 3.3, 24, 16.4, 24, 27.4, 19, 28, 19, 28, -5.8, 24.8, -9, 14.6, -9, 16, -13.7, 16, -18.8, 9, -25.8) +[node name="DraggableRigid7" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] +unique_name_in_owner = true +position = Vector2(66, 63) +angular_damp = 1.0 +replaced_area_monitor = NodePath("Area2D") +texture = ExtResource("33_26hqw") +limit_polygon = NodePath("../LimitPolygon2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid7"] +position = Vector2(-6, 6) +rotation = 0.883805 +shape = SubResource("CapsuleShape2D_ctou3") + +[node name="Area2D" type="Area2D" parent="DraggableRigid7"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid7/Area2D"] +polygon = PackedVector2Array(35, -25, 17.8, -25, 14.5, -23, 12.1, -23, 2, -10.7, -15.6, -2.5, -30, -6.5, -30, -7.3, -32.5, -8.4, -35.8, -5, -36, 7.7, -28.1, 14.9, -29, 16.4, -29, 20.8, -26, 23.8, -26, 25, -9.8, 25, -7.8, 21.5, -5.8, 25, -0.299999, 25, 1.1, 23, 3.7, 23, 0.799999, 13.3, 1.3, 12.6, 12, 16.4, 12, 17.3, 14.5, 18.4, 16.8, 16, 18.3, 16, 19.4, 13.7, 13.2, 6.5, 17, 2.8, 17, -0.4, 13.4, -1.9, 23, -7.9, 35.4, -11, 36, -11, 36, -21, 29.3, -21, 32.3, -22, 34.9, -22) + +[node name="DraggableRigid8" parent="." node_paths=PackedStringArray("replaced_area_monitor", "limit_polygon") instance=ExtResource("7_lv3nw")] +unique_name_in_owner = true +position = Vector2(474, 216) +angular_damp = 1.0 +replaced_area_monitor = NodePath("Area2D") +texture = ExtResource("32_gf0xj") +limit_polygon = NodePath("../LimitPolygon2D") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DraggableRigid8"] +position = Vector2(4, 4) +shape = SubResource("CircleShape2D_ujbuy") + +[node name="Area2D" type="Area2D" parent="DraggableRigid8"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="DraggableRigid8/Area2D"] +position = Vector2(-37, -10) +polygon = PackedVector2Array(51.1, 0, 24.5, 0, 6.6, 8, 4.1, 8, 0, 12.9, 0, 25, 3.8, 26, 59.7, 26, 66.9, 18, 67, 12.8, 63, 8.2, 63, 6.9) + +[node name="LimitPolygon2D" type="Polygon2D" parent="."] +visible = false +polygon = PackedVector2Array(51, 33, 51, 120, 78, 166, 127, 175, 173, 174, 205, 160, 219, 141, 243, 137, 357, 164, 429, 235, 553, 235, 552, 33) + +[node name="Hover完成的药粉" parent="." instance=ExtResource("20_8lx66")] +unique_name_in_owner = true +position = Vector2(134, 166) +freezing = true + +[node name="PointLight2D" type="PointLight2D" parent="Hover完成的药粉"] +position = Vector2(3, 8.5) +energy = 2.0 +range_layer_max = 10 +range_item_cull_mask = 4 +texture = ExtResource("29_26hqw") + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Hover完成的药粉"] +position = Vector2(-82, -34) +polygon = PackedVector2Array(100, 0, 67.8, 0, 65.8, 1.3, 62.4, 0, 59.4, 0, 55, 2.9, 46.2, 3, 43.1, 6, 41.6, 5, 37.3, 5, 26.9, 12.5, 25, 10, 21.4, 10, 0.4, 25, 0, 50.7, 36, 77.9, 36, 79.5, 53.7, 85, 111.2, 85, 131.4, 81, 133.8, 81, 166.8, 49, 168.4, 49, 170, 45, 170, 25, 164.5, 25, 140.5, 13, 141.1, 12, 142.3, 12, 143.4, 9.5, 141, 7.1, 141, 3.8, 136.5, 6, 133.6, 6, 128, 1.9, 128, 0, 125.6, 0, 118.8, 2, 117.7, 2, 116, 0.9, 116, 0, 111, 0, 108.5, 1, 104.1, 1) + +[node name="完成的药粉" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0) +light_mask = 5 +position = Vector2(52, 132) +texture = ExtResource("29_26hqw") +centered = false + [node name="StaticBodyBowl" type="StaticBody2D" parent="."] position = Vector2(132, 178) collision_layer = 4 collision_mask = 4 [node name="碗前侧" type="Sprite2D" parent="StaticBodyBowl"] +z_index = 1 position = Vector2(150, -20) texture = ExtResource("15_nugkd") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="StaticBodyBowl"] +show_behind_parent = true polygon = PackedVector2Array(-94, -7, -72, 14, -53, 22, -22, 25, 20, 24, 49, 22, 74, 15, 97, -1, 109, -8, 126, -16, 456, -18, 460, 87, 24, 90, -160, 86, -162, -30, -142, -63, -102, -30) -[node name="ContentInspector" parent="." instance=ExtResource("3_h2dug")] +[node name="洞中药纸" type="Sprite2D" parent="."] +z_index = 1 +position = Vector2(14, 198) +texture = ExtResource("30_8leof") +centered = false -[node name="遮罩" type="TextureRect" parent="ContentInspector"] +[node name="遮罩" type="TextureRect" parent="."] +light_mask = 5 +z_index = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 1.0 +offset_top = 17.0 +offset_right = 1.0 +offset_bottom = 17.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("2_wtw10") + +[node name="InspectContent" type="Control" parent="."] +unique_name_in_owner = true visible = false +z_index = 1 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="药方" type="TextureRect" parent="InspectContent"] +layout_mode = 0 +offset_left = -14.0 +offset_top = -10.0 +offset_right = 562.0 +offset_bottom = 306.0 +mouse_filter = 2 +texture = ExtResource("25_gonyp") + +[node name="ContentInspector" parent="InspectContent" instance=ExtResource("3_h2dug")] +layout_mode = 1 + +[node name="遮罩" type="TextureRect" parent="InspectContent/ContentInspector"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -303,7 +788,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("5_qafag") -[node name="Label" type="Label" parent="ContentInspector/遮罩"] +[node name="Label" type="Label" parent="InspectContent/ContentInspector/遮罩"] custom_minimum_size = Vector2(180, 0) layout_mode = 1 anchors_preset = 8 @@ -317,7 +802,7 @@ offset_right = 60.0 offset_bottom = 15.5 grow_horizontal = 2 grow_vertical = 2 -text = "safasf" vertical_alignment = 1 autowrap_mode = 3 script = ExtResource("6_y0m4i") +translation_key = "c03_药方内容" diff --git a/scene/ground/script/c02/s03_event_2d抓药游戏.gd b/scene/ground/script/c02/s03_event_2d抓药游戏.gd new file mode 100644 index 00000000..71bfa318 --- /dev/null +++ b/scene/ground/script/c02/s03_event_2d抓药游戏.gd @@ -0,0 +1,31 @@ +@tool +extends Event2D + +# var prev_stage := 0 +# var stage := 0 + + +func _ready() -> void: + super._ready() + if Engine.is_editor_hint(): + return + + +func _on_global_stage_updated(e: StringName, s: int): + super._on_global_stage_updated(e, s) + + +func _on_ground_ready(_ground: Ground2D): + $"Closeup抓药游戏".exit.connect( + func (arg): + if arg: + EventManager.set_stage_if_greater("c03_durg_game", 2) + ) + + +func _on_pre_stage_updated(): + pass + + +func _on_stage_updated(): + pass diff --git a/scene/ground/script/c02/s03_event_2d抓药游戏.gd.uid b/scene/ground/script/c02/s03_event_2d抓药游戏.gd.uid new file mode 100644 index 00000000..e0a833a8 --- /dev/null +++ b/scene/ground/script/c02/s03_event_2d抓药游戏.gd.uid @@ -0,0 +1 @@ +uid://chgyivvdw22cw diff --git a/scene/ground/script/c03/s06_closeup柜子后的洞.tscn b/scene/ground/script/c03/s06_closeup柜子后的洞.tscn index d3c12e74..ebacd78c 100644 --- a/scene/ground/script/c03/s06_closeup柜子后的洞.tscn +++ b/scene/ground/script/c03/s06_closeup柜子后的洞.tscn @@ -48,8 +48,6 @@ polygon = PackedVector2Array(13.5, -10, 4, -10, -1.5, -7.8, -4, -9, -11.6, -9, - [node name="EventBinder" type="Node" parent="BG折起来/HoverLight钥匙"] script = ExtResource("6_aen5b") -memo = "c03_s06_hole_key=[0] 时,显示: [钥匙] -[钥匙] interacted 时: c03_s06_hole_key=1(greater)" updater_event = &"c03_s06_hole_key" updater_mode = "shower" updater_ease_duration = 0.0 @@ -79,8 +77,6 @@ polygon = PackedVector2Array(-17.6, -11.5, -30.9, -6.5, -31.5, -6.5, -31.5, 9.9, [node name="EventBinder" type="Node" parent="BG折起来/HoverLight刀柄"] script = ExtResource("6_aen5b") -memo = "c03_s06_hole_knife_handle=[0] 时,显示: [刀柄] -[刀柄] interacted 时: c03_s06_hole_knife_handle=1(greater)" updater_event = &"c03_s06_hole_knife_handle" updater_mode = "shower" updater_ease_duration = 0.0 @@ -121,7 +117,6 @@ texture = ExtResource("2_wpl64") [node name="ContentInspector" parent="." instance=ExtResource("3_mkmvg")] visible = false -mouse_filter = 2 [node name="遮罩" type="TextureRect" parent="ContentInspector"] layout_mode = 1 diff --git a/scene/little_game/general/draggable_rigid.gd b/scene/little_game/general/draggable_rigid.gd index b5860a2a..1c6026ef 100644 --- a/scene/little_game/general/draggable_rigid.gd +++ b/scene/little_game/general/draggable_rigid.gd @@ -19,7 +19,6 @@ signal dropped(node: DraggableRigid) @export var freezing := false: set(val): freezing = val - refresh_gravity_and_collision() if freezing: if holding: _drop() @@ -31,15 +30,16 @@ signal dropped(node: DraggableRigid) texture = val if is_node_ready(): sprite.texture = texture -@export var limit_rect := Rect2(Vector2.ZERO, Vector2(564, 316)) +@export var limit_polygon: Polygon2D @onready var sprite: Sprite2D = $Sprite2D # Whether the item is currently being held by the player var holding := false: set(val): - holding = val - refresh_gravity_and_collision() + if holding != val: + holding = val + freeze = val var touching := false # 静态变量优化:避免频繁的字符串比较 @@ -58,17 +58,12 @@ const HUD_FADE_DURATION := 0.3 var _mouse_event_source: Node var _outline_tween: Tween var _shake_tween: Tween -var default_gravity_scale: float -var default_collision_layer: int - func _ready() -> void: sprite.texture = texture sprite.offset = sprite_offset if Engine.is_editor_hint(): return - default_gravity_scale = gravity_scale - default_collision_layer = collision_layer # 初始化隐藏白边 sprite.material.set_shader_parameter("thickness", 0.0) @@ -81,15 +76,6 @@ func _ready() -> void: _mouse_event_source.mouse_exited.connect(_on_mouse_exited) -func refresh_gravity_and_collision() -> void: - if holding or freezing: - gravity_scale = 0.0 - default_collision_layer = 0 - else: - gravity_scale = default_gravity_scale - collision_layer = default_collision_layer - - func is_focused() -> bool: return current_focusing_node == self @@ -145,20 +131,17 @@ func _unhandled_input(event: InputEvent) -> void: elif holding: get_viewport().set_input_as_handled() _drop() - elif holding and event is InputEventMouseMotion: - _update_pos_to_mouse() -func _update_pos_to_mouse() -> void: - var mouse_pos := get_global_mouse_position() - mouse_pos = mouse_pos.clamp(limit_rect.position, limit_rect.end) - update_position(mouse_pos) - - -func update_position(pos: Vector2) -> void: - PhysicsServer2D.body_set_state( - get_rid(), PhysicsServer2D.BODY_STATE_TRANSFORM, Transform2D.IDENTITY.translated(pos) - ) +func _physics_process(_delta: float) -> void: + if holding: + var target = get_global_mouse_position() + if limit_polygon: + target = Util.get_closest_point_on_polygon(target, limit_polygon.polygon) + # PhysicsServer2D.body_set_state( + # get_rid(), PhysicsServer2D.BODY_STATE_TRANSFORM, Transform2D.IDENTITY.translated(target) + # ) + global_position = target func _try_pick() -> void: @@ -166,7 +149,6 @@ func _try_pick() -> void: return _toggle_outline(false) holding = true - _update_pos_to_mouse() picked.emit(self) @@ -208,7 +190,6 @@ func force_hold() -> void: _toggle_outline(false) current_focusing_node = self holding = true - _update_pos_to_mouse() picked.emit(self) diff --git a/scene/ux/prop_hud.gd b/scene/ux/prop_hud.gd index e71c34c8..d80dbc71 100644 --- a/scene/ux/prop_hud.gd +++ b/scene/ux/prop_hud.gd @@ -459,11 +459,9 @@ func _on_mouse_exited() -> void: func _mouse_moved_on_listening(unfold_scroll := false) -> void: if unfold_scroll: _toggle_scroll(false) - if not displaying: _toggle_details(true) return - timer.start(display_time) @@ -475,7 +473,6 @@ func _on_timer_timeout() -> void: func _unhandled_input(event: InputEvent) -> void: if locked or not listening_hotkey: return - if event.is_action_pressed("prop_left"): on_left_pressed() get_viewport().set_input_as_handled() @@ -497,7 +494,6 @@ func _unhandled_input(event: InputEvent) -> void: func _input(event: InputEvent) -> void: if locked: return - if listen_mouse and (event is InputEventMouseMotion or event is InputEventScreenTouch): _mouse_moved_on_listening() diff --git a/scene/ux/prop_hud.tscn b/scene/ux/prop_hud.tscn index e454b82e..ccc0ea36 100644 --- a/scene/ux/prop_hud.tscn +++ b/scene/ux/prop_hud.tscn @@ -29,6 +29,7 @@ offset_top = 4.0 offset_right = 608.0 offset_bottom = 504.0 scale = Vector2(0.3, 0.3) +mouse_filter = 1 script = ExtResource("1_bbv0a") [node name="VBoxContainer" type="VBoxContainer" parent="."] diff --git a/util/util.gd b/util/util.gd index bdd7b445..84a13c87 100644 --- a/util/util.gd +++ b/util/util.gd @@ -1,6 +1,7 @@ @tool extends Node + #### Timer func wait(duration: float) -> void: if duration <= 0: @@ -58,3 +59,49 @@ func generate_lines(content: String) -> Array: var text = "~ title\n" + content + "\n=> END" var res = DialogueManager.create_resource_from_text(text) return await get_lines(res, "title") + + +#### Geometry + + +# This function finds the closest point on the boundary or inside of a polygon +# to a given point. +# +# @param point: The Vector2 point to test against. +# @param polygon_vertices: A PackedVector2Array defining the polygon. +# @return: The Vector2 coordinate of the closest point. +func get_closest_point_on_polygon(point: Vector2, polygon_vertices: PackedVector2Array) -> Vector2: + var vertex_count = polygon_vertices.size() + if vertex_count == 0: + return Vector2.ZERO # Or handle error appropriately + if vertex_count == 1: + return polygon_vertices[0] + + # First, check if the point is already inside the polygon. + # If so, the point itself is the answer. + if Geometry2D.is_point_in_polygon(point, polygon_vertices): + return point + + # If the point is outside, we need to find the closest point on its edges. + var closest_point_so_far: Vector2 + var min_dist_sq = INF # Use infinity as the initial maximum distance + + # Iterate through each edge of the polygon. + for i in range(vertex_count): + # An edge is a segment between the current vertex and the next one. + # The modulo operator (%) handles the last edge connecting the last vertex to the first. + var p1 = polygon_vertices[i] + var p2 = polygon_vertices[(i + 1) % vertex_count] + + # Get the closest point on the current line segment. + var closest_point_on_segment = Geometry2D.get_closest_point_to_segment(point, p1, p2) + + # Calculate the squared distance. This is more efficient than using sqrt(). + var dist_sq = point.distance_squared_to(closest_point_on_segment) + + # If this point is closer than any we've seen before, update our variables. + if dist_sq < min_dist_sq: + min_dist_sq = dist_sq + closest_point_so_far = closest_point_on_segment + + return closest_point_so_far