diff --git a/asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_脸.png b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_脸.png index 06786712..d3500482 100644 Binary files a/asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_脸.png and b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_脸.png differ diff --git a/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png new file mode 100644 index 00000000..70a3ff36 Binary files /dev/null and b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png differ diff --git a/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png.import b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png.import new file mode 100644 index 00000000..439ebec4 --- /dev/null +++ b/asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gan7qq0i7uiw" +path="res://.godot/imported/ux_镜子遮罩.png-0dd6b96863a6b256a2eae5a1d3ec8f65.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png" +dest_files=["res://.godot/imported/ux_镜子遮罩.png-0dd6b96863a6b256a2eae5a1d3ec8f65.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/c03.dialogue b/asset/dialogue/c03.dialogue index e13ff4f1..e37488dd 100644 --- a/asset/dialogue/c03.dialogue +++ b/asset/dialogue/c03.dialogue @@ -177,3 +177,78 @@ 瞎子: 这种事情就算我晓得,也不好教你们去害人的。 瞎子: 你们好跑了,我还要去问问告示都贴完了伐,不够的闲话还要再写两张... => END + +~ c03_s05_肉铺隔门板偷听 +陆仁: 咦?哪能没开门?不应该啊... +陆仁: 张老板?张老板? +陆仁: ... +陆仁: 算了,有可能人家办事去了,咱们过两天再来伐。 +小小蝶: 老板就在店里厢呀。 +陆仁: 侬这孩子,啥人讲给你听的? +小小蝶: 喏,是它讲的呀。 +小小蝶: 侬要是不相信么,我现在就问问它,老板到底在啥地方... +小小蝶: ... +小小蝶: 爸爸,它讲,它晓得小蝉在啥地方。 +陆仁: 侬覅、(深吸一口气)这种鬼出莫辩(句测老逼)的事情伐好瞎讲的,听到了伐! +=> END + + +~ c03_胖子游戏对白 +探子: 侬哪能又来了。 +肉铺胖子: 侬在看啥? +探子: 看人家过河帮,吃力(撒度)了就算算加减法。 +肉铺胖子: 格搭除了我们,啥还有其他人阿? +探子: 文开呀,人家都讲你港,讲的真的一点不错。 +探子: 他们就是老早死在河帮里厢的人呀! +探子: 要不是你们拦了嘿,他们老早就跑掉了。 +肉铺胖子: 跑?跑到啥方去啊? +探子: 跑到外地去,讲不定就死不掉了呢。 +肉铺胖子: ...侬跟他们不一样。 +探子: 对额!想当初侬一记头就看出来我是细作。 +探子: 侬有点小聪明的,想拿我抓回去,也好吃顿饱饭。 +探子: 不过侬太年轻、人么又瘦,就这样一趟翻身的机会侬浪费掉了。 +探子: 但是要我讲哦,最最重要的是啥东西侬晓得哇... +肉铺胖子: 要讲就讲,别装模作样。 +探子: 侬跟他们一样,这条河帮你也过不过去的。 +探子: 作孽啊... +=> END + + +#【玩家⾛近,触发演出对白:陆仁坐倒在地咳⾎,⼩⼩蝶和陆仁对话(关于陆仁近期身体越来越差,⼩⼩蝶关⼼陆仁身体,再次提到⼩猫玩具上的⼩⻤,觉得⼩⻤已经附身在了⾃⼰身上,让⾃⼰变重才导致陆仁背不动⾃⼰,陆仁扯开话题),随后两⼈⾛向玩家⽅向,和玩家擦肩⽽过。(玩家碎碎念:设定好时⻓,在陆仁⾛⾄玩家身后时正好碎碎念⾄“爸爸”,陆仁停顿,微微侧头,然后离开,演出结束。)】 +~ c03_三楼陆仁演出 +陆仁: 咳...嗬...咳咳...(咳嗽) +小小蝶: 爸爸!侬、侬哪能... +陆仁: 爸爸越来越没用了。 +陆仁: 现在连的侬都背不动... +小小蝶: 伐是的! +小小蝶: 肯定是、是因为这玩具里厢的小鬼太重了!它老是要跑到我身高头来,所以才会的这幅样子! +陆仁: 还瞎讲! +陆仁: 侬在瞎三话四滴啥东西?要是让人家听到了,又要讲咱们哪能哪能了... +小小蝶: 我... +陆仁: 我吃力了,侬来搭把手,我到里厢坐特些。 +吕萍: 爸爸... +吕萍: 侬还在此地伐? +=> END + + +~ c03_结尾回忆小蝶和小婵 +小小蝶: 喏,侬的玻璃弹子,我帮侬拿回来了。 +小蝉: 谢谢。 +小小蝶: 你的弹子老好看的,我从来没看到过这种样子的。 +小蝉: ...侬要欢喜,我就送给侬。 +小小蝶: 谢谢侬,但是我(阿拉)爸不让我玩这个。 +小小蝶: 他老是讲小姑娘要文一点,要有小姑娘的样子,其实...我玻璃弹子打的比他们好的多呢。 +小小蝶: ...你(呐)爸爸呢? +小蝉: 嗯...他蛮好的。 +小小蝶: 他管侬管的紧哇,是不是经常会的讲‘都是为了侬好’这种闲话啊? +小蝉: 有时候(辰光)会的,他蛮吓人的。 +小蝉: 我、我不想惹(za)他不开心。 +小小蝶: 还是当大人好。等我们长大了,就没人再讲咱们是一懂不懂的小朋友了。 +小小蝶: 到那个时候,我欢喜撒就组撒、伐想组就伐组,彻底解放了! +小蝉: 真好啊。 +小小蝶: 诶,我马上就要过生日了!侬想...咦,妈妈,侬哪能来了? +小小蝶: 那个,这是我刚刚认识的好朋友,她叫、她叫... +小蝉: 我叫方小蝉。 +小蝉: 阿姨,你们是伐是要回起吃饭啦,我爸爸...等些阿要叫我回起了。 +小蝉: 再、再见。 +=> END diff --git a/scene/ground/scene/c03/s04_李癞房间.tscn b/scene/ground/scene/c03/s04_李癞房间.tscn index 4096d70e..3d5957c2 100644 --- a/scene/ground/scene/c03/s04_李癞房间.tscn +++ b/scene/ground/scene/c03/s04_李癞房间.tscn @@ -107,15 +107,6 @@ texture = ExtResource("15_r0k7c") position = Vector2(64, 46) texture = ExtResource("16_4umel") -[node name="床上死人" type="Sprite2D" parent="Ground/DeployLayer/Event2D香炉"] -position = Vector2(145, 48) - -[node name="Label" type="Label" parent="Ground/DeployLayer/Event2D香炉/床上死人"] -offset_left = -49.0 -offset_right = 51.0 -offset_bottom = 14.0 -text = "【此处应有弟弟尸体】" - [node name="Closeup李氏纸人" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_dbkw8")] unique_name_in_owner = true position = Vector2(372, 40) diff --git a/scene/ground/scene/c03/s05_肉铺.tscn b/scene/ground/scene/c03/s05_肉铺.tscn index 3023b4ff..c7227c03 100644 --- a/scene/ground/scene/c03/s05_肉铺.tscn +++ b/scene/ground/scene/c03/s05_肉铺.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://6ehb3ux2kilu"] +[gd_scene load_steps=9 format=3 uid="uid://6ehb3ux2kilu"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_ip0og"] [ext_resource type="Script" path="res://scene/ground/scene/c03/s05_肉铺.gd" id="2_l22xv"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://ccl8ud5hbuq1r" path="res://asset/art/scene/c03/s05_肉铺/bg_肉铺内背景.png" id="4_ip0og"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_r4bhp"] [ext_resource type="Texture2D" uid="uid://c5oth3mdxrnby" path="res://asset/art/scene/c03/s05_肉铺/fg_肉铺内前景.png" id="5_l22xv"] +[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_r4bhp"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_k01ve"] @@ -52,6 +53,13 @@ target_scene = "c03_s07" target_portal = "left" status = "opened" +[node name="Ambush偷听门板" parent="Ground/DeployLayer" index="2" instance=ExtResource("6_r4bhp")] +position = Vector2(291, 18) +trigger_mode = "interact" +collision_width_and_x = Vector2(61.48, 0) +hook_dialogue_res = "c03" +hook_dialogue_title = "c03_s05_肉铺隔门板偷听" + [node name="MainPlayer" parent="Ground" index="5"] position = Vector2(63, 95) catty_light_energy = 0.5 diff --git a/scene/ground/scene/c03/s08_囚室.tscn b/scene/ground/scene/c03/s08_囚室.tscn index 763bd6bb..700b5a91 100644 --- a/scene/ground/scene/c03/s08_囚室.tscn +++ b/scene/ground/scene/c03/s08_囚室.tscn @@ -181,7 +181,7 @@ updater_stages = Array[int]([0]) metadata/_custom_type_script = "uid://0wjaho6qkg6s" [node name="Ambush偷听" parent="Ground/DeployLayer" index="6" instance=ExtResource("12_73c8v")] -position = Vector2(532, 33) +position = Vector2(531, 18) trigger_mode = "interact" hook_dialogue_res = "c03" hook_dialogue_title = "c03_s08_囚室偷听" diff --git a/scene/ground/script/c03/s03_closeup镜子特写.tscn b/scene/ground/script/c03/s03_closeup镜子特写.tscn index 553076b8..392d28ce 100644 --- a/scene/ground/script/c03/s03_closeup镜子特写.tscn +++ b/scene/ground/script/c03/s03_closeup镜子特写.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=6 format=3 uid="uid://bnoqhovb0wjem"] -[ext_resource type="Script" uid="uid://xyswrst2qvnv" path="res://scene/ground/script/c03/s03_closeup镜子特写.gd" id="1_l7eke"] +[ext_resource type="Script" path="res://scene/ground/script/c03/s03_closeup镜子特写.gd" id="1_l7eke"] [ext_resource type="Texture2D" uid="uid://cv43fc0yphoyh" path="res://asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_脸.png" id="2_h11vl"] -[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="2_x88e4"] [ext_resource type="PackedScene" uid="uid://bg7oictr1wgex" path="res://scene/little_game/general/draggable.tscn" id="4_pmhbo"] [ext_resource type="Texture2D" uid="uid://dri7gy7janvim" path="res://asset/art/scene/c03/s03_瞎子理发店/ux_镜子特写_红绳麻将.png" id="5_l7eke"] +[ext_resource type="Texture2D" uid="uid://gan7qq0i7uiw" path="res://asset/art/scene/c03/s03_瞎子理发店/ux_镜子遮罩.png" id="5_pmhbo"] [node name="Closeup镜子特写" type="CanvasLayer"] script = ExtResource("1_l7eke") @@ -17,15 +17,6 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("2_h11vl") -[node name="遮罩" type="TextureRect" parent="."] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -texture = ExtResource("2_x88e4") - [node name="Draggable2D麻绳" parent="." instance=ExtResource("4_pmhbo")] position = Vector2(122, 78) act_as_button = true @@ -33,3 +24,12 @@ texture = ExtResource("5_l7eke") [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Draggable2D麻绳"] polygon = PackedVector2Array(5, -83.5, -4, -83.5, -4, 36.5, -9.8, 36.5, -13.8, 40.5, -15, 40.5, -15, 79.6, -14.5, 79.9, -13.7, 79, -13.1, 83.5, -2.8, 83.5, -4, 81, -4, 80.3, 14.2, 78.5, 15, 78.5, 15, 37.4, 7, 36.6, 7, -79.7, 5, -80.8) + +[node name="遮罩" type="TextureRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("5_pmhbo") diff --git a/scene/ground/script/c03/s04_closeup麻将出千游戏.gd b/scene/ground/script/c03/s04_closeup麻将出千游戏.gd index 9ac233f0..ba4f1378 100644 --- a/scene/ground/script/c03/s04_closeup麻将出千游戏.gd +++ b/scene/ground/script/c03/s04_closeup麻将出千游戏.gd @@ -29,7 +29,6 @@ var mahjongs = { # 替换后会从数组中移除 @onready var holding_mahjongs_btn_dict: Dictionary[int, TextureButton] = {14: %"14", 15: %"15", 16: %"16"} - var current_round := 0 # 回合1-4摸牌:3万、2万、1条、2筒(胜利) var dispatched_card_per_round: Array[String] = ["万3", "万2", "条1", "筒2"] @@ -41,6 +40,9 @@ var standing_cards: Array[String] = ["筒7", "筒8", "风南", "条1", "条2", " # 赖子手在左下角桌子下,手中为三个麻将,5万、3条、9筒 var holding_cards_dict: Dictionary[int, String] = {14: "万5", 15: "条3", 16: "筒9"} +# 前三回合,对话结束后,等待一段时间给出提示(提示为高亮桌面需要打出的牌面) +var tip_wait_time = [10.0, 20.0, 30.0] + var freezing = true: set(val): if freezing != val: @@ -158,6 +160,8 @@ func _start_game() -> void: await tween.finished freezing = false _play_dialogue_with_update_stage(2) + _load_tip(2) + func _play_dialogue_with_update_stage(stage: int): @@ -208,6 +212,7 @@ func _exchange_texture_and_card(btn1: TextureButton, btn2: TextureButton) -> voi var require_replacing_card = intersect(useless_cards, holding_cards_dict) var require_dealing_card = intersect(useless_cards, standing_cards, require_replacing_card) if require_replacing_card and require_dealing_card: + _skip_tip() useless_cards.erase(require_replacing_card) useless_cards.erase(require_dealing_card) _toggle_hightlight_for_all(false) @@ -268,6 +273,7 @@ func _next_round() -> void: # 对话结束后,开始第二回合 await _await_dialog(3) _play_dialogue_with_update_stage(4) + _load_tip(4) elif current_round == 2: # 第二回合结束 await _await_dialog(4) @@ -275,6 +281,7 @@ func _next_round() -> void: # 对话结束后,开始第三回合 await _await_dialog(5) _play_dialogue_with_update_stage(6) + _load_tip(6) elif current_round == 3: # 第三回合结束 await _await_dialog(6) @@ -298,11 +305,67 @@ func _next_round() -> void: else: freezing = false +# dialog stage 结束后开始计时, 而不是回合开始就计时 +# 所以需要关联到对应对话 stage +func _load_tip(stage: int) -> void: + if _last_dialog_updated.is_connected(_counting_down_tip): + _last_dialog_updated.disconnect(_counting_down_tip) + _last_dialog_updated.connect(_counting_down_tip.bind(stage)) + +var tip_tween: Tween + +func _counting_down_tip(stage: int) -> void: + # 对话阶段还没到 + if _last_dialog_stage < stage: + return + # 对话阶段已到 + if _last_dialog_stage >= stage: + if _last_dialog_updated.is_connected(_counting_down_tip): + _last_dialog_updated.disconnect(_counting_down_tip) + # 对话阶段正好,开始计时 + if _last_dialog_stage == stage: + if tip_tween and tip_tween.is_running(): + tip_tween.kill() + if current_round >= 3: + printerr("Warning: current_round >= 3, should not display tip.") + return + var wait_time = tip_wait_time[current_round] + if GlobalConfig.DEBUG: + SceneManager.pop_debug_dialog_info("Tip", "debug等待5秒进行提示,正常模式下等待" + str(wait_time) + "秒") + wait_time = 5 + tip_tween = create_tween() + tip_tween.tween_interval(wait_time) + tip_tween.tween_callback(_display_tip) + + +func _display_tip() -> void: + var hight_light_btns: Array[TextureButton] = [] + for useless in useless_cards: + var id = standing_cards.find(useless) + if id > 0: + var btn = standing_mahjongs_btn[id] + hight_light_btns.append(btn) + btn.get_node("光束").enabled = true + await Util.wait(2.0) + for btn in hight_light_btns: + # 未在 hightlight 状态 + if not btn.get_meta("hightlighting", false): + btn.get_node("光束").enabled = false + + +func _skip_tip() -> void: + if tip_tween and tip_tween.is_running(): + tip_tween.kill() + if _last_dialog_updated.is_connected(_counting_down_tip): + _last_dialog_updated.disconnect(_counting_down_tip) + func _toggle_hightlight(btn: TextureButton, hightlight: bool) -> void: if null == btn: return btn.get_node("光束").enabled = hightlight + # 记录 hightlight 状态 + btn.set_meta("hightlighting", hightlight) func _toggle_hightlight_for_all(hightlighted: bool) -> void: