diff --git a/asset/art/ui/标题字/标题字-12.png b/asset/art/ui/标题字/标题字-12.png
index 8e3be798..8bddd760 100644
Binary files a/asset/art/ui/标题字/标题字-12.png and b/asset/art/ui/标题字/标题字-12.png differ
diff --git a/asset/dialogue/inspect_content.csv b/asset/dialogue/inspect_content.csv
index 821e8ed6..d550beb8 100644
--- a/asset/dialogue/inspect_content.csv
+++ b/asset/dialogue/inspect_content.csv
@@ -19,12 +19,12 @@ c02_青岛啤酒详情,系最好最廉之酒,并且每星期有新货到埠,,,
tdb119a3714,据闻奉贤县分水墩有两人染受鼠疫毙命,医官拟将死者尸骸解剖以观受病之原因及其情状,竟未得死者家属之同意,以该处风气闭塞,闻解剖之说,地方人民甚为惊骇,闻已有聚众滋闹之事,并闻医官已被人殴打,政府以防疫事宜关系紧要拟改令赴沪南区一带调查防疫事宜云。,,,
ta750647b12,《申报》,,,
t736cca4563,民国五年一月十三日,,,
-c02_保卫科花名册1,一零一四 空,,,
-c02_保卫科花名册2,一零一五王守义 李兰,,,
-c02_保卫科花名册3,二零一二 张文开,,,
-c02_保卫科花名册4,二零一三 方启钊 方小蝉,,,
-c02_保卫科花名册5,三零一二 吕萍,,,
-c02_保卫科花名册6,三零一三(看不清),,,
+c02_保卫科花名册1,一〇一四 空,,,
+c02_保卫科花名册2,一〇一五 王守义 李兰,,,
+c02_保卫科花名册3,二〇一三 张文开,,,
+c02_保卫科花名册4,二〇一五 方启钊 方小蝉,,,
+c02_保卫科花名册5,三〇一二 吕萍,,,
+c02_保卫科花名册6,三〇一三 (看不清),,,
c02_保卫科花名册7,把我的鞋子拿给老鼠,老鼠会引开那个疯男人,,,
c02_保卫科花名册8,不要相信墙里的东西!,,,
c02_小猫纸条,大哥!今晚老地方见 /井\,,,
diff --git a/asset/dialogue/inspect_content.dialogue b/asset/dialogue/inspect_content.dialogue
index fd5d88bf..460db3e7 100644
--- a/asset/dialogue/inspect_content.dialogue
+++ b/asset/dialogue/inspect_content.dialogue
@@ -32,13 +32,13 @@
~ c02_保卫科花名册
-一零一四 空 [ID:c02_保卫科花名册1]
-一零一五王守义 李兰 [ID:c02_保卫科花名册2]
-二零一二 张文开 [ID:c02_保卫科花名册3]
-二零一三 方启钊 方小蝉 [ID:c02_保卫科花名册4]
+一〇一四 空 [ID:c02_保卫科花名册1]
+一〇一五 王守义 李兰 [ID:c02_保卫科花名册2]
+二〇一三 张文开 [ID:c02_保卫科花名册3]
+二〇一五 方启钊 方小蝉 [ID:c02_保卫科花名册4]
-三零一二 吕萍 [ID:c02_保卫科花名册5]
-三零一三(看不清) [ID:c02_保卫科花名册6]
+三〇一二 吕萍 [ID:c02_保卫科花名册5]
+三〇一三 (看不清) [ID:c02_保卫科花名册6]
把我的鞋子拿给老鼠,老鼠会引开那个疯男人 [ID:c02_保卫科花名册7]
不要相信墙里的东西! [ID:c02_保卫科花名册8]
=> END
diff --git a/asset/dialogue/item_description.csv b/asset/dialogue/item_description.csv
index d94371cb..d7e9610e 100644
--- a/asset/dialogue/item_description.csv
+++ b/asset/dialogue/item_description.csv
@@ -5,6 +5,7 @@ prop_小猫纸条,小猫纸条,,,[#texture=c02/小猫纸条.png],,
prop_小猫纸条_说明,「大哥,今晚老地方见 /井\」,,,,,
prop_眼镜,眼镜,,,[#texture=c02/眼镜.png],,
prop_眼镜_说明,这副眼镜对我很重要。
记得小时候在浦育院的日子,我经常会在半夜时听到奇怪的说话声,还时不时能看见其他小孩子看不见的东西。
院长不知从哪儿找来了这样一副眼镜,戴上它后那些怪事就很少发生。
随着年龄增长,我几乎已用不到这副眼镜。现在它对我来说似乎有了新的意义。,,,,,
+prop_小鞋子_说明,这只小鞋子曾经属于一个裹了小脚的女孩,鞋不成双,祸事难防。,,,,,
index_新游戏,新游戏,,,,,
index_继续游戏,继续游戏,,,,,
index_退出游戏,退出游戏,,,,,
@@ -108,8 +109,8 @@ prop_眼镜盒,眼镜盒,,,[#texture=c02/眼镜盒.png],,
prop_眼镜盒_说明,这副眼镜对我很重要。
记得小时候在浦育院的日子,我经常会在半夜时听到奇怪的说话声,还时不时能看见其他小孩子看不见的东西。
院长不知从哪儿找来了这样一副眼镜,戴上它后那些怪事就很少发生。
随着年龄增长,我几乎已用不到这副眼镜。现在它对我来说似乎有了新的意义。,,,,,
prop_小蝉人偶,小蝉人偶,,,[#texture=c02/小蝉人偶.png],,
prop_小蝉人偶_说明,小小的人儿,小小的鞋子,小小的友情啊——像蝶依偎着花。,,,,,
-prop_单只小鞋子,单只小鞋子,,,[#texture=c02/小鞋子1.png],,
-prop_小鞋子_说明,这只小鞋子曾经属于一个裹了小脚的女孩,鞋不成双,祸事难防。,,,,,
+prop_单只小鞋子,一只小鞋子,,,[#texture=c02/小鞋子1.png],,
+prop_单只小鞋子_说明,这只小鞋子曾经属于一个裹了小脚的女孩。
鞋不成双,祸事难防。,,,,,
c01_s05_检查院长房间,好像忘记了什么事情,再回去检查一遍吧。,,ID格式: prop_xx_说明,,,
c01_s07_需要报纸,书店还没开门。,,,,,
c01_s08_书店工作,老板交代的工作还没做完,不能偷懒。,,,,,
diff --git a/asset/dialogue/item_description.dialogue b/asset/dialogue/item_description.dialogue
index da92b140..13ec28d9 100644
--- a/asset/dialogue/item_description.dialogue
+++ b/asset/dialogue/item_description.dialogue
@@ -135,8 +135,8 @@
这副眼镜对我很重要。
记得小时候在浦育院的日子,我经常会在半夜时听到奇怪的说话声,还时不时能看见其他小孩子看不见的东西。
院长不知从哪儿找来了这样一副眼镜,戴上它后那些怪事就很少发生。
随着年龄增长,我几乎已用不到这副眼镜。现在它对我来说似乎有了新的意义。[ID:prop_眼镜盒_说明]
小蝉人偶[#texture=c02/小蝉人偶.png] [ID:prop_小蝉人偶]
小小的人儿,小小的鞋子,小小的友情啊——像蝶依偎着花。 [ID:prop_小蝉人偶_说明]
-单只小鞋子 [#texture=c02/小鞋子1.png] [ID:prop_单只小鞋子]
-这只小鞋子曾经属于一个裹了小脚的女孩,鞋不成双,祸事难防。[ID:prop_小鞋子_说明]
+一只小鞋子 [#texture=c02/小鞋子1.png] [ID:prop_单只小鞋子]
+这只小鞋子曾经属于一个裹了小脚的女孩。
鞋不成双,祸事难防。[ID:prop_单只小鞋子_说明]
=> END
#~ prop说明
diff --git a/asset/dialogue/纯中文_无需本地化.csv b/asset/dialogue/纯中文_无需本地化.csv
index a47470cb..43415b89 100644
--- a/asset/dialogue/纯中文_无需本地化.csv
+++ b/asset/dialogue/纯中文_无需本地化.csv
@@ -21,6 +21,6 @@ c02_议论文字19,你们在说什么妖怪?,,,
c02_议论文字20,谁家有妖怪?,,,
c02_议论文字21,啥妖怪,,,
c02_议论文字22,真的假的妖怪,,,
-c02_议论文字23,3014那家有妖怪,,,
+c02_议论文字23,三〇一二那家有妖怪,,,
c02_议论文字24,要死了,,,
c02_议论文字25,养妖怪,,,
diff --git a/asset/dialogue/纯中文_无需本地化.dialogue b/asset/dialogue/纯中文_无需本地化.dialogue
index f2b5daf4..b82847a3 100644
--- a/asset/dialogue/纯中文_无需本地化.dialogue
+++ b/asset/dialogue/纯中文_无需本地化.dialogue
@@ -21,7 +21,7 @@
谁家有妖怪? [ID:c02_议论文字20]
啥妖怪 [ID:c02_议论文字21]
真的假的妖怪 [ID:c02_议论文字22]
-3014那家有妖怪 [ID:c02_议论文字23]
+三〇一二那家有妖怪 [ID:c02_议论文字23]
要死了 [ID:c02_议论文字24]
养妖怪 [ID:c02_议论文字25]
=> END
\ No newline at end of file
diff --git a/manager/archive_manager/assembled_archive.gd b/manager/archive_manager/assembled_archive.gd
index aa8163b5..582d301f 100644
--- a/manager/archive_manager/assembled_archive.gd
+++ b/manager/archive_manager/assembled_archive.gd
@@ -22,9 +22,8 @@ class_name AssembledArchive extends Resource
# 只有在 >=0 的情况下才会生效
@export var player_global_position_x := -100.0
@export var player_direction := Vector2(0, 0)
-# game total seconds
-@export var game_seconds_all := 0
-@export var game_seconds_current := 0
+# game seconds
+@export var game_seconds := 0
# created time
@export var created_time := "2024-12-24 00:00:00"
diff --git a/manager/config_manager/global_config_manager.gd b/manager/config_manager/global_config_manager.gd
index 5f89906e..7259fee4 100644
--- a/manager/config_manager/global_config_manager.gd
+++ b/manager/config_manager/global_config_manager.gd
@@ -62,38 +62,29 @@ func update_locale(lang_id: int, caption_id: int):
TranslationServer.set_locale(lang)
+var _on_timer_timeout_counter := 0
+
+
func _on_timer_timeout():
var archive = ArchiveManager.archive
- if archive:
- archive.game_seconds_all += 5
- archive.game_seconds_current += 5
- if config:
+ if archive and config:
+ archive.game_seconds += 5
config.game_total_seconds += 5
-
-
-func pack_current_time():
- var packed_time = PackedTime.new()
- packed_time.time = Time.get_datetime_string_from_system(false, true)
- var archive = ArchiveManager.archive
- if archive:
- packed_time.chapter = archive.current_chapter
- packed_time.section = archive.current_section
- packed_time.game_archive_id = archive.archive_id
- packed_time.game_seconds_all = archive.game_seconds_all
- packed_time.game_seconds_current = archive.game_seconds_current
+ # 30s 打印一次
+ if _on_timer_timeout_counter % 6 == 0:
+ var time = get_concise_timemark(archive)
+ prints("[timemark]", Time.get_datetime_string_from_system(), time)
+ _on_timer_timeout_counter += 1
# for log use
-func get_concise_timemark() -> String:
- var archive = ArchiveManager.archive
- if not archive:
- return "r0_c0_s0 00:00:00"
- var hour = archive.game_seconds_current / 3600 as int
- var minute = (archive.game_seconds_current % 3600) / 60 as int
- var second = archive.game_seconds_current % 60
+func get_concise_timemark(archive) -> String:
+ var hour = archive.game_seconds / 3600 as int
+ var minute = (archive.game_seconds % 3600) / 60 as int
+ var second = archive.game_seconds % 60
return (
"r"
- + str(ArchiveManager.current_archive_id)
+ + str(config.game_rounds)
+ "_c"
+ str(archive.current_chapter)
+ " "
diff --git a/manager/config_manager/packed_time.gd b/manager/config_manager/packed_time.gd
index 89d8b431..2f076fa0 100644
--- a/manager/config_manager/packed_time.gd
+++ b/manager/config_manager/packed_time.gd
@@ -5,8 +5,7 @@ class_name PackedTime extends Resource
@export var game_archive_id := 0
@export var game_rounds := 0
@export var timestamp := "2024-12-20 08:00:00" #system
-@export var game_seconds_all := 0 #game seconds since current archive start
-@export var game_seconds_current := 0 #game seconds since last chapter
+@export var game_seconds := 0 #game seconds since last chapter
@export var chapter := 0 #chapter id
@export var section := 0 #section id
diff --git a/manager/scene/scene_manager.gd b/manager/scene/scene_manager.gd
index 3971155b..521eba6c 100644
--- a/manager/scene/scene_manager.gd
+++ b/manager/scene/scene_manager.gd
@@ -270,6 +270,7 @@ func pop_center_texture(texture: Texture2D, duration := 3.5) -> void:
var chapter_sfx = preload("uid://qku3yk82g364")
+
func pop_chapter_notification(id: int) -> void:
AudioManager.play_sfx(chapter_sfx)
var texture
@@ -381,7 +382,8 @@ func show_settings() -> void:
#### 游戏场景树暂停计数器,设置、memory、bag 等菜单都会导致 pause
var pause_counter := 0
-var pause_counter_mutex := Mutex.new()
+var pause_counter_mutex := Mutex.new()
+
func toggle_pause_counter(plus := true) -> void:
# 若不 lock,会导致快速切换菜单时出现并发问题(pause_counter 成为负数)
@@ -393,6 +395,12 @@ func toggle_pause_counter(plus := true) -> void:
func quit_game() -> void:
+ # 防止 await 阻塞导致 bug
+ get_inspector().quit_and_hidden.emit()
+ DialogueManager.dialogue_ended.emit(null)
+ get_player().os_finished.emit("")
+ get_player().animation_finished.emit()
+
ArchiveManager.save_all()
var ground_loader = get_ground_loader() as GroundLoader
if ground_loader:
diff --git a/scene/entity/pickable.gd b/scene/entity/pickable.gd
index 3c45e351..ecbb7788 100644
--- a/scene/entity/pickable.gd
+++ b/scene/entity/pickable.gd
@@ -90,7 +90,7 @@ func _check_display():
if picked:
visible = false
elif visible_follow_enabled:
- visible = enabled
+ modulate.a = 1.0 if enabled else 0.0
sign_mark.enabled = enabled and is_visible_in_tree()
diff --git a/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn b/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn
index d86ae0d8..d30f12cf 100644
--- a/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn
+++ b/scene/ground/scene/c01/s06_孤儿院长廊围墙.tscn
@@ -291,7 +291,7 @@ speed = 90.0
position = Vector2(1241, -1)
sprite_frames = ExtResource("2_l4axy")
animation = &"秋千"
-frame = 3
+frame = 5
[node name="Sfx2D" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/秋千"]
process_mode = 1
@@ -321,7 +321,7 @@ position = Vector2(1358, 0)
sprite_frames = ExtResource("2_l4axy")
animation = &"跷跷板"
autoplay = "跷跷板"
-frame = 5
+frame = 3
[node name="Sfx2D" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/跷跷板"]
process_mode = 1
@@ -370,6 +370,7 @@ action_configs = Array[Dictionary]([{
position = Vector2(43, -44.5)
sprite_frames = ExtResource("7_dsj2r")
animation = &"【画画男孩-1】呼吸"
+frame = 1
action_configs = Array[Dictionary]([{
"animation_intro": "【画画男孩-1】呼吸",
"animation_next": "【画画男孩-1】画画",
@@ -425,6 +426,7 @@ one_shot = false
position = Vector2(1558, -12)
sprite_frames = ExtResource("7_dsj2r")
animation = &"【站立小孩-3】呼吸"
+frame = 1
action_configs = Array[Dictionary]([{
"animation_intro": &"【站立小孩-3】转身",
"animation_next": "【站立小孩-3】走路",
@@ -745,6 +747,7 @@ position = Vector2(377, 18)
scale = Vector2(0.9, 0.9)
sprite_frames = ExtResource("2_l4axy")
animation = &"中蓝衣小孩呼吸"
+frame = 2
[node name="门口_右绿衣男孩" parent="Ground/ParallaxForeground/BGParallaxLayer" index="3" instance=ExtResource("8_ouldg")]
position = Vector2(408, 3)
@@ -756,7 +759,6 @@ light_mask = 2
position = Vector2(333, 9.5)
sprite_frames = ExtResource("2_l4axy")
animation = &"红衣姑娘呼吸"
-frame = 2
action_configs = Array[Dictionary]([{
"animation_intro": &"红衣姑娘抬头",
"animation_next": "红衣姑娘呼吸",
@@ -777,6 +779,7 @@ texture_scale = 0.5
position = Vector2(301, 8.5)
sprite_frames = ExtResource("2_l4axy")
animation = &"院长呼吸"
+frame = 1
action_configs = Array[Dictionary]([{
"animation_intro": "院长翻书",
"animation_next": "院长呼吸",
@@ -810,7 +813,6 @@ scale = Vector2(0.8, 0.8)
sprite_frames = ExtResource("15_wtosl")
animation = &"gif"
autoplay = "gif"
-frame = 1
centered = false
offset = Vector2(0, -159)
diff --git a/scene/ground/scene/c02/s03_院子.tscn b/scene/ground/scene/c02/s03_院子.tscn
index d361af35..6d2dea1f 100644
--- a/scene/ground/scene/c02/s03_院子.tscn
+++ b/scene/ground/scene/c02/s03_院子.tscn
@@ -432,6 +432,7 @@ position = Vector2(953, 42)
sprite_frames = ExtResource("11_o1qbs")
animation = &"c00_头套小婵_run"
autoplay = "c00_头套小婵_idle"
+frame = 3
move_configs = Array[Dictionary]([{
"animation": "c00_头套小婵_run",
"animation_next": "",
@@ -785,6 +786,7 @@ position = Vector2(29, -3)
sprite_frames = ExtResource("34_1tart")
animation = &"小婵_被霸凌"
autoplay = "小婵_被霸凌"
+frame = 1
[node name="f1" parent="Ground/DeployLayer/霸凌" instance=ExtResource("33_ycojw")]
z_index = 10
@@ -792,7 +794,7 @@ position = Vector2(-11, 1)
sprite_frames = ExtResource("34_1tart")
animation = &"霸凌1"
autoplay = "霸凌1"
-frame = 6
+frame = 4
[node name="Sfx2D霸凌童谣" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/霸凌/f1"]
process_mode = 1
@@ -810,7 +812,7 @@ position = Vector2(23, 11)
sprite_frames = ExtResource("34_1tart")
animation = &"霸凌2"
autoplay = "霸凌2"
-frame = 4
+frame = 9
[node name="f3" parent="Ground/DeployLayer/霸凌" instance=ExtResource("33_ycojw")]
z_index = 10
@@ -818,7 +820,7 @@ position = Vector2(57, 7)
sprite_frames = ExtResource("34_1tart")
animation = &"霸凌3"
autoplay = "霸凌3"
-frame = 1
+frame = 2
[node name="Ambush点火游戏阻挡右移" parent="Ground/DeployLayer/霸凌" instance=ExtResource("25_iyaiw")]
position = Vector2(-116, -13)
@@ -1007,7 +1009,6 @@ position = Vector2(2229, 41)
sprite_frames = ExtResource("34_1tart")
animation = &"霸凌3-发抖"
autoplay = "霸凌3-发抖"
-frame = 1
[node name="Pro小孩喊着火啦3" parent="Ground/DeployLayer/火灾" instance=ExtResource("33_ycojw")]
z_index = 9
@@ -1066,6 +1067,7 @@ z_index = 5
position = Vector2(17, -11)
sprite_frames = ExtResource("39_rnk1v")
animation = &"吕萍牵手动作"
+frame = 3
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/火灾/牵手跑"]
shape = SubResource("RectangleShape2D_vddfx")
diff --git a/scene/ground/scene/c02/s06_二楼.gd b/scene/ground/scene/c02/s06_二楼.gd
index 97231759..5a93824d 100644
--- a/scene/ground/scene/c02/s06_二楼.gd
+++ b/scene/ground/scene/c02/s06_二楼.gd
@@ -138,9 +138,24 @@ func _on_ball_game_exit(success = null):
ball_game_boys_ambush.enabled = false
ball_game_boys_ambush.visible = false
+func _toggle_candles(show: bool) -> void:
+ var candles = $"../DeployLayer/楼梯蜡烛"
+ var lights = candles.get_children()
+ if show:
+ var tween = create_tween()
+ tween.tween_property(candles, "modulate:a", 1.0, 1.0)
+ for light in lights:
+ tween.parallel().tween_property(light, "energy", 1.2, 1.0)
+ else:
+ candles.modulate.a = 0.0
+ for light in lights:
+ light.energy = 0.0
+
+
# 第一章火灾结束,尾声演出
func _c02_final_show():
+ _toggle_candles(false)
var player = SceneManager.get_player()
player.set_facing_direction(Vector2(-1, 0))
player.update_x_with_camera_followed(650.0)
@@ -172,16 +187,18 @@ func _on_exit_final_show(_arg):
c02_final_layer.get_node("小蝉").play("小婵捂脸")
c02_final_layer.get_node("胖子").play("胖子呼吸")
c02_final_layer.get_node("瞎子").play("方瞎子呼吸-右")
- await get_tree().create_timer(1.0).timeout
+ await get_tree().create_timer(3.0).timeout
$"../DeployLayer/c02_final/瞎子/Sfx2D脚步声".play()
await animation_finished
c02_final_layer.queue_free()
+ _toggle_candles(true)
await Util.wait(0.5)
# 小蝉上楼后开启第二章
var xxdie = $"../DeployLayer/Pro小小蝶上楼" as AnimatedSprite2D
xxdie.play("小小小蝶动画(跑)")
+ xxdie.get_node("Sfx2D脚步声").play()
#跑
await xxdie.animation_changed
SceneManager.get_player().set_facing_direction(Vector2.RIGHT)
diff --git a/scene/ground/scene/c02/s06_二楼.tscn b/scene/ground/scene/c02/s06_二楼.tscn
index d83e106a..31fbf682 100644
--- a/scene/ground/scene/c02/s06_二楼.tscn
+++ b/scene/ground/scene/c02/s06_二楼.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=63 format=3 uid="uid://cootarwb44vvh"]
+[gd_scene load_steps=65 format=3 uid="uid://cootarwb44vvh"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qkymk"]
[ext_resource type="Script" uid="uid://cbt0ubygchxvv" path="res://scene/ground/scene/c02/s06_二楼.gd" id="2_4dg6u"]
@@ -26,6 +26,7 @@
[ext_resource type="SpriteFrames" uid="uid://c218xrr85jdc7" path="res://asset/art/gif/c03_小小小蝶上楼道/c03_小小小蝶上楼道_frames.tres" id="13_6iuix"]
[ext_resource type="Script" uid="uid://wapo47a1oddf" path="res://scene/entity/audio/sfx2d.gd" id="14_7x2h6"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="14_k01ve"]
+[ext_resource type="AudioStream" uid="uid://oya48ab6e3ye" path="res://asset/audio/sfx/旧版/child/小孩从远到近跑步.wav" id="14_lipxo"]
[ext_resource type="SpriteFrames" uid="uid://3nas025c2c5u" path="res://asset/art/gif/c02_杂项/c02_杂项_frames.tres" id="14_och2w"]
[ext_resource type="SpriteFrames" uid="uid://b0icyhxpj16tv" path="res://asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres" id="15_k01ve"]
[ext_resource type="Texture2D" uid="uid://1pr32tkx4ttl" path="res://asset/art/scene/c02/s03_公寓一楼院子/e_煤油灯座.png" id="16_osg51"]
@@ -835,6 +836,10 @@ animations = [{
"speed": 10.0
}]
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_2rktm"]
+resource_local_to_scene = true
+size = Vector2(20, 400)
+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_lh55k"]
resource_local_to_scene = true
size = Vector2(20, 70)
@@ -895,7 +900,7 @@ script = ExtResource("2_4dg6u")
debug_global_data = Dictionary[String, Variant]({
"c02_2f_xchan_run_away": 0,
"c02_ball_game_stage": 1,
-"c02_burning_end_stage": 2,
+"c02_burning_end_stage": 1,
"c02_madman_hitwall": false,
"c02_mouse_follow_player": false,
"c02_pliers_to_ball": false,
@@ -1006,62 +1011,62 @@ prop_key = "prop_2014钥匙"
[node name="楼梯蜡烛" type="Node2D" parent="Ground/DeployLayer" index="5"]
-[node name="小蜡烛" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛"]
-self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
-position = Vector2(777.8, -35.3828)
-sprite_frames = SubResource("SpriteFrames_lipxo")
-autoplay = "default"
-
-[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛"]
-position = Vector2(0, -12.8172)
+[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+position = Vector2(777.8, -48.2)
color = Color(0.999971, 0.912551, 0.842208, 1)
energy = 1.2
blend_mode = 2
texture = ExtResource("11_2rktm")
texture_scale = 0.3
-[node name="小蜡烛2" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+[node name="小蜡烛" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛PointLight2D"]
self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
-position = Vector2(823, -6)
+position = Vector2(0, 12.8172)
sprite_frames = SubResource("SpriteFrames_lipxo")
autoplay = "default"
-[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛2"]
-position = Vector2(0, -12.8172)
+[node name="小蜡烛PointLight2D2" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+position = Vector2(823, -18.8172)
color = Color(0.999971, 0.912551, 0.842208, 1)
energy = 1.2
blend_mode = 2
texture = ExtResource("11_2rktm")
texture_scale = 0.3
-[node name="小蜡烛3" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+[node name="小蜡烛2" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛PointLight2D2"]
self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
-position = Vector2(774, 3)
+position = Vector2(0, 12.8172)
sprite_frames = SubResource("SpriteFrames_lipxo")
autoplay = "default"
-[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛3"]
-position = Vector2(0, -12.8172)
+[node name="小蜡烛PointLight2D3" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+position = Vector2(774, -9.8172)
color = Color(0.999971, 0.912551, 0.842208, 1)
energy = 1.2
blend_mode = 2
texture = ExtResource("11_2rktm")
texture_scale = 0.3
-[node name="小蜡烛4" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+[node name="小蜡烛3" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛PointLight2D3"]
self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
-position = Vector2(824, 56)
+position = Vector2(0, 12.8172)
sprite_frames = SubResource("SpriteFrames_lipxo")
autoplay = "default"
-[node name="小蜡烛PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛4"]
-position = Vector2(0, -12.8172)
+[node name="小蜡烛PointLight2D4" type="PointLight2D" parent="Ground/DeployLayer/楼梯蜡烛"]
+position = Vector2(824, 43.1828)
color = Color(0.999971, 0.912551, 0.842208, 1)
energy = 1.2
blend_mode = 2
texture = ExtResource("11_2rktm")
texture_scale = 0.3
+[node name="小蜡烛4" type="AnimatedSprite2D" parent="Ground/DeployLayer/楼梯蜡烛/小蜡烛PointLight2D4"]
+self_modulate = Color(0.611765, 0.611765, 0.611765, 1)
+position = Vector2(0, 12.8172)
+sprite_frames = SubResource("SpriteFrames_lipxo")
+autoplay = "default"
+
[node name="Pro小小蝶上楼" parent="Ground/DeployLayer" index="6" instance=ExtResource("10_p6da7")]
position = Vector2(953, 30)
sprite_frames = ExtResource("13_6iuix")
@@ -1078,13 +1083,28 @@ move_configs = Array[Dictionary]([{
}])
debug_mov_animation = "小小小蝶动画(跑)"
+[node name="Sfx2D脚步声" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Pro小小蝶上楼"]
+process_mode = 1
+stream = ExtResource("14_lipxo")
+max_distance = 1000.0
+attenuation = 1.31951
+bus = &"game_sfx"
+script = ExtResource("14_7x2h6")
+metadata/_custom_type_script = "uid://wapo47a1oddf"
+
[node name="Note楼梯杂物堆" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_h3h1a")]
position = Vector2(801, -77)
texture = ExtResource("7_v3hjg")
-sign_mark_offset = Vector2(0, 12.34)
+sign_mark_offset = Vector2(0, 1.47)
title_filter = "c02"
note_key = "c02_二楼楼梯杂物堆"
+[node name="Sign" parent="Ground/DeployLayer/Note楼梯杂物堆" index="1"]
+sign_mark_offset = Vector2(0, 1.47)
+
+[node name="CollisionShape2D" parent="Ground/DeployLayer/Note楼梯杂物堆/Area2D" index="0"]
+shape = SubResource("RectangleShape2D_2rktm")
+
[node name="煤油灯" parent="Ground/DeployLayer" index="8" instance=ExtResource("5_3p5ta")]
position = Vector2(616, -14)
ground_light_texture = ExtResource("8_7x2h6")
@@ -1220,8 +1240,7 @@ autostart = false
action_configs = Array[Dictionary]([{
"animation_intro": &"胖子呼吸",
&"animation_next": "胖子走路",
-"animation_wait_time": 0.0,
-&"intro_loop": 6
+&"intro_loop": 5
}])
move_configs = Array[Dictionary]([{
"animation": "胖子走路",
@@ -1248,14 +1267,11 @@ animation = &"小婵捂脸"
autostart = false
action_configs = Array[Dictionary]([{
"animation_intro": "小婵捂脸",
-&"animation_next": "小婵呼吸",
-"animation_wait_time": 0.0,
-"intro_loop": 1
+&"animation_next": "小婵呼吸"
}, {
"animation_intro": &"小婵呼吸",
&"animation_next": "小婵走路",
-"animation_wait_time": 0.0,
-&"intro_loop": 8
+&"intro_loop": 7
}])
move_configs = Array[Dictionary]([{
"animation": "小婵走路",
@@ -1276,8 +1292,7 @@ autostart = false
action_configs = Array[Dictionary]([{
"animation_intro": &"方瞎子呼吸-右",
&"animation_next": "方瞎子走路-左",
-"animation_wait_time": 0.0,
-&"intro_loop": 7
+&"intro_loop": 6
}])
move_configs = Array[Dictionary]([{
"animation": "方瞎子走路-左",
@@ -1394,5 +1409,6 @@ energy = 0.9
blend_mode = 1
[editable path="Ground"]
+[editable path="Ground/DeployLayer/Note楼梯杂物堆"]
[editable path="Ground/DeployLayer/煤油灯"]
[editable path="Ground/DeployLayer/Interactable老鼠洞"]
diff --git a/scene/ground/scene/c02/s09_裂缝.tscn b/scene/ground/scene/c02/s09_裂缝.tscn
index 94a49742..28b7a157 100644
--- a/scene/ground/scene/c02/s09_裂缝.tscn
+++ b/scene/ground/scene/c02/s09_裂缝.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=56 format=4 uid="uid://ryups1dnwdto"]
+[gd_scene load_steps=58 format=4 uid="uid://ryups1dnwdto"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_o0m5w"]
[ext_resource type="Script" uid="uid://beqnywn1dlnax" path="res://scene/ground/scene/c02/s09_裂缝.gd" id="2_34a6f"]
@@ -170,6 +170,18 @@ fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(1, 1)
+[sub_resource type="Gradient" id="Gradient_dv46s"]
+offsets = PackedFloat32Array(0, 0.713622, 1)
+colors = PackedColorArray(1, 1, 1, 1, 0.831373, 0.831373, 0.831373, 0, 1, 1, 1, 0)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_4uwnc"]
+gradient = SubResource("Gradient_dv46s")
+width = 200
+height = 200
+fill = 1
+fill_from = Vector2(0.5, 0.5)
+fill_to = Vector2(1, 1)
+
[node name="S09" type="Node2D"]
metadata/_edit_horizontal_guides_ = [-120.0]
@@ -184,7 +196,7 @@ debug_global_data = Dictionary[String, Variant]({
"c02_counter_pushed_out": false,
"c02_counter_x": 100.0,
"enabled_items": {},
-"player_x": 4500.0
+"player_x": 2000.0
})
debug_ground_data = Dictionary[String, Variant]({
"Ambush剪影指天": {
@@ -731,7 +743,7 @@ texture = ExtResource("16_7mvsg")
position = Vector2(637.5, -19)
sprite_frames = ExtResource("21_kpfk1")
animation = &"剪影人物床_呼吸"
-frame = 3
+frame = 2
action_configs = Array[Dictionary]([{
"animation_intro": "剪影人物床_指天",
&"animation_next": "剪影人物床_指天呼吸",
@@ -857,45 +869,73 @@ energy = 1.7
range_item_cull_mask = 5
texture = SubResource("GradientTexture2D_xbdgx")
-[node name="PointLight2D锅打光" type="PointLight2D" parent="Ground/AmbientLayer" index="7"]
+[node name="PointLight2D周边眼睛打光" type="PointLight2D" parent="Ground/AmbientLayer" index="7"]
+position = Vector2(1893, -66)
+color = Color(0.955664, 0.335062, 0.346781, 1)
+energy = 0.7
+range_item_cull_mask = 5
+texture = SubResource("GradientTexture2D_4uwnc")
+
+[node name="PointLight2D周边眼睛打光2" type="PointLight2D" parent="Ground/AmbientLayer" index="8"]
+position = Vector2(1684, -30)
+color = Color(0.955664, 0.335062, 0.346781, 1)
+energy = 0.7
+range_item_cull_mask = 5
+texture = SubResource("GradientTexture2D_4uwnc")
+
+[node name="PointLight2D周边眼睛打光3" type="PointLight2D" parent="Ground/AmbientLayer" index="9"]
+position = Vector2(1425, -29)
+color = Color(0.955664, 0.335062, 0.346781, 1)
+energy = 0.7
+range_item_cull_mask = 5
+texture = SubResource("GradientTexture2D_4uwnc")
+
+[node name="PointLight2D周边眼睛打光4" type="PointLight2D" parent="Ground/AmbientLayer" index="10"]
+position = Vector2(1217, -49)
+color = Color(0.955664, 0.335062, 0.346781, 1)
+energy = 0.7
+range_item_cull_mask = 5
+texture = SubResource("GradientTexture2D_4uwnc")
+
+[node name="PointLight2D锅打光" type="PointLight2D" parent="Ground/AmbientLayer" index="11"]
position = Vector2(2447, -69)
range_item_cull_mask = 2
texture = ExtResource("32_dv46s")
texture_scale = 1.5
-[node name="PointLight2D独立打光" type="PointLight2D" parent="Ground/AmbientLayer" index="8"]
+[node name="PointLight2D独立打光" type="PointLight2D" parent="Ground/AmbientLayer" index="12"]
position = Vector2(2440, -45)
color = Color(0.854488, 0.195138, 0.240125, 1)
range_item_cull_mask = 32
texture = ExtResource("32_dv46s")
-[node name="PointLight2D独立打光3" type="PointLight2D" parent="Ground/AmbientLayer" index="9"]
+[node name="PointLight2D独立打光3" type="PointLight2D" parent="Ground/AmbientLayer" index="13"]
position = Vector2(669, -45)
color = Color(0.854488, 0.195138, 0.240125, 1)
energy = 1.9
range_item_cull_mask = 5
texture = ExtResource("32_dv46s")
-[node name="PointLight2D独立打光4" type="PointLight2D" parent="Ground/AmbientLayer" index="10"]
+[node name="PointLight2D独立打光4" type="PointLight2D" parent="Ground/AmbientLayer" index="14"]
position = Vector2(318, -36)
color = Color(0.854488, 0.195138, 0.240125, 1)
energy = 2.5
range_item_cull_mask = 5
texture = ExtResource("32_dv46s")
-[node name="ParticalsAsh" parent="Ground/AmbientLayer" index="11" instance=ExtResource("7_4a1t6")]
+[node name="ParticalsAsh" parent="Ground/AmbientLayer" index="15" instance=ExtResource("7_4a1t6")]
position = Vector2(1091, 1)
-[node name="ParticalsAsh2" parent="Ground/AmbientLayer" index="12" instance=ExtResource("7_4a1t6")]
+[node name="ParticalsAsh2" parent="Ground/AmbientLayer" index="16" instance=ExtResource("7_4a1t6")]
position = Vector2(1715, 5)
-[node name="ParticalsAsh3" parent="Ground/AmbientLayer" index="13" instance=ExtResource("7_4a1t6")]
+[node name="ParticalsAsh3" parent="Ground/AmbientLayer" index="17" instance=ExtResource("7_4a1t6")]
position = Vector2(2622, -9)
-[node name="ParticalsAsh5" parent="Ground/AmbientLayer" index="14" instance=ExtResource("7_4a1t6")]
+[node name="ParticalsAsh5" parent="Ground/AmbientLayer" index="18" instance=ExtResource("7_4a1t6")]
position = Vector2(2782, -7)
-[node name="ParticalsAsh4" parent="Ground/AmbientLayer" index="15" instance=ExtResource("7_4a1t6")]
+[node name="ParticalsAsh4" parent="Ground/AmbientLayer" index="19" instance=ExtResource("7_4a1t6")]
position = Vector2(2987, -12)
[node name="MainPlayer" parent="Ground" index="5"]
@@ -927,7 +967,6 @@ position = Vector2(3421, 25)
points = PackedVector2Array(80, 150, 4500.93, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
-visible = false
energy = 0.7
blend_mode = 1
diff --git a/scene/ground/scene/c02/s12_盒子猫.tscn b/scene/ground/scene/c02/s12_盒子猫.tscn
index 94e9210c..a8a6d282 100644
--- a/scene/ground/scene/c02/s12_盒子猫.tscn
+++ b/scene/ground/scene/c02/s12_盒子猫.tscn
@@ -63,9 +63,14 @@ animation = &"猫钻进盒子"
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(232, 71)
character = "盒子猫"
+player_movement_rect = Rect2(37, -158, 363, 316)
facing_direction = Vector2(1, 0)
[node name="CameraFocusMarker" parent="Ground" index="6"]
+limit_left = 0
+limit_top = -158
+limit_right = 564
+limit_bottom = 158
force_offset = Vector2(-20, 0)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
@@ -75,6 +80,7 @@ position = Vector2(3584, -7)
points = PackedVector2Array(37, 150, 400, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
+energy = 0.7
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("4_vv3sh")]
diff --git a/scene/ground/script/c02/裂缝议论文字.gd b/scene/ground/script/c02/裂缝议论文字.gd
index d6730d7b..95a54b52 100644
--- a/scene/ground/script/c02/裂缝议论文字.gd
+++ b/scene/ground/script/c02/裂缝议论文字.gd
@@ -32,8 +32,7 @@ func _on_area_entered(_body):
var tween = create_tween()
tween.tween_property(label, "position:y", 3.0, 0.6).set_trans(Tween.TRANS_BOUNCE)
tween.tween_property(label, "position:y", 0.0, 0.6).set_trans(Tween.TRANS_BOUNCE)
- tween.set_loops(10)
- create_tween().tween_property(label, "modulate:a", 0.0, 8.0)
+ tween.set_loops(1000)
func _update_text():
label.text = "[pulse ease=2.0 freq=2 color=#000000cf] " + tr(key)
diff --git a/scene/little_game/弹珠游戏/ball.gd b/scene/little_game/弹珠游戏/ball.gd
index dede1c72..e59d2b09 100644
--- a/scene/little_game/弹珠游戏/ball.gd
+++ b/scene/little_game/弹珠游戏/ball.gd
@@ -2,8 +2,8 @@
extends RigidBody2D
-signal hit_ball
-signal hit_ball_callback
+signal hit_ball_touched
+signal hit_ball_finished
signal hit_boundary
@export_enum("1", "2", "3", "4", "5", "6", "7") var id := "1":
@@ -61,6 +61,7 @@ func hide_away():
visible = false
collision_shape.disabled = true
+
func ease_out():
collision_shape.disabled = true
create_tween().tween_property(self, "modulate:a", 0.0, 0.5)
@@ -77,27 +78,39 @@ func _set_up_texture():
sprite2d.texture = texture_dict[id]
-var recycling = false
+var shoot_count := 0
+var shooted_instances = {}
func _on_body_entered(node: Node):
- if GlobalConfig.DEBUG:
- print("[debug] hit node", node.get_path())
- if recycling or not is_shooter:
+ if not is_shooter:
return
- recycling = true
- var tween = create_tween()
+ var tween
if node is StaticBody2D:
- tween.tween_property(self, "modulate:a", 0.0, 1.0)
- tween.tween_callback(hit_boundary.emit)
- tween.tween_callback(queue_free)
+ if shoot_count == 0:
+ tween = create_tween()
+ tween.tween_property(self, "modulate:a", 0.0, 1.0)
+ tween.tween_callback(hit_boundary.emit)
+ tween.tween_callback(queue_free)
return
- hit_ball.emit()
+ # 过滤抖动/重复碰撞
+ var instance_id = node.get_instance_id()
+ if shooted_instances.has(instance_id):
+ return
+ print("[debug] first hit node", node.get_path())
+ shooted_instances[instance_id] = true
+ shoot_count += 1
+ hit_ball_touched.emit()
+ tween = create_tween()
tween.tween_property(self, "modulate:a", 0.0, 1.5)
tween.parallel().tween_property(node, "modulate:a", 0.0, 1.5)
- tween.tween_callback(hit_ball_callback.emit)
+ tween.tween_callback(hit_ball_finished.emit)
tween.tween_callback(node.queue_free)
tween.tween_callback(queue_free)
+ print("[ball] shoot count: ", shoot_count)
+ if shoot_count >= 3:
+ #TODO 连续射中三个成就
+ pass
func _process(_delta: float) -> void:
diff --git a/scene/little_game/弹珠游戏/弹珠游戏.gd b/scene/little_game/弹珠游戏/弹珠游戏.gd
index 782fb3e0..bff2e1fa 100644
--- a/scene/little_game/弹珠游戏/弹珠游戏.gd
+++ b/scene/little_game/弹珠游戏/弹珠游戏.gd
@@ -128,8 +128,8 @@ func reload_hand_ball() -> void:
pivot.move_child(ball, 0)
ball.name = "Ball"
# ball.rand_id()
- ball.hit_ball.connect(_on_hit_ball)
- ball.hit_ball_callback.connect(_on_hit_ball_callback)
+ ball.hit_ball_touched.connect(_on_hit_ball)
+ ball.hit_ball_finished.connect(_on_hit_ball_finished)
ball.hit_boundary.connect(_on_hit_boundary)
@@ -198,7 +198,7 @@ func _on_hit_ball():
sfx_shoot.stop()
-func _on_hit_ball_callback():
+func _on_hit_ball_finished():
reload_hand_ball()
hit_count += 1
if round_id == 0:
diff --git a/scene/main.gd b/scene/main.gd
index 778c26e5..9201e109 100644
--- a/scene/main.gd
+++ b/scene/main.gd
@@ -48,3 +48,6 @@ func tween_vignette(ratio := 0.5, duration := 0.3, color := Color.RED):
vignette_tween.parallel().tween_property(
vignette.material, "shader_parameter/vignette_rgb", color, duration
)
+
+
+