完成盒子猫游戏+瞎子卧室流程

This commit is contained in:
cakipaul 2025-06-20 19:36:00 +08:00
parent 034dd4dbb1
commit b87dea61c3
38 changed files with 904 additions and 218 deletions

View File

@ -213,33 +213,33 @@ animations = [{
"speed": 30.0
}, {
"frames": [{
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("25_ty3yp")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("26_x3isd")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("27_hwoj5")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("28_n6lou")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("29_6p0ya")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("30_uxs1n")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("31_rdknj")
}, {
"duration": 6.0,
"duration": 1.0,
"texture": ExtResource("32_c28wc")
}],
"loop": false,
"loop": true,
"name": &"猪头怪走路",
"speed": 30.0
"speed": 5.0
}, {
"frames": [{
"duration": 6.0,

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://v6q6ao6fiqm1"
path="res://.godot/imported/e_老鼠画像横板.png-8a76220ba2bd471be83a15a7a523bd66.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s04_保卫科/e_老鼠画像横板.png"
dest_files=["res://.godot/imported/e_老鼠画像横板.png-8a76220ba2bd471be83a15a7a523bd66.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d1xr7g5huv5or"
path="res://.godot/imported/ux_老鼠画像特写.png-2cde5d57d18ad26389a54b7fa4b7cebc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s04_保卫科/ux_老鼠画像特写.png"
dest_files=["res://.godot/imported/ux_老鼠画像特写.png-2cde5d57d18ad26389a54b7fa4b7cebc.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8sv81cw7mcn4"
path="res://.godot/imported/e_墙上纸张_blood.png-a16cd8e2f7a6f90b4ea7789b6f8f87bb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s08_瞎子卧室/e_墙上纸张_blood.png"
dest_files=["res://.godot/imported/e_墙上纸张_blood.png-a16cd8e2f7a6f90b4ea7789b6f8f87bb.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://efhwoqtn21d8"
path="res://.godot/imported/e_墙上纸张_boxcat.png-5eb6f77c7e1c91b16a3b24d04acd8491.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s08_瞎子卧室/e_墙上纸张_boxcat.png"
dest_files=["res://.godot/imported/e_墙上纸张_boxcat.png-5eb6f77c7e1c91b16a3b24d04acd8491.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ttocw3erg8jv"
path="res://.godot/imported/bg_一楼楼道粉笔画.png-38d0deade9dcb0ce3adead29afdf6eb3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_一楼楼道粉笔画.png"
dest_files=["res://.godot/imported/bg_一楼楼道粉笔画.png-38d0deade9dcb0ce3adead29afdf6eb3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -5,6 +5,7 @@ keys,zh_CN,_character,_notes,_tags,zh_SH,en
3,3,,,,,
4,4,,,,,
c02_杂物堆,杂物堵住了,,,,,
prop_新鲜的肉,新鲜的肉,,,[#texture=c02/新鲜的肉.png],,
index_新游戏,新游戏,,,,,New Game
index_继续游戏,继续游戏,,,,,Resume
index_退出游戏,退出游戏,,,,,Exit
@ -28,6 +29,7 @@ ui_use_prop,按 E 使用道具,,,,,Press E to use prop
ui_important_item_update,重要物品已更新(按 B 打开背包),,,,,
ui_switch_prop,点击图标可切换道具(或按 Z/C,,,,,
ui_press_shift,按住 Shift 奔跑,,,,,
ui_boxcat_press_s,按住 S 躲藏,,,,,
input_拼凑信件,点击选择信件碎片,方向键移动,按 E 旋转,,,,,
ui_获得,获得,,,,,
ui_退出,退出,,,,,
@ -61,7 +63,6 @@ prop_锡箔元宝,锡箔元宝,,,[#texture=c02/锡箔元宝.png],,
prop_小鞋子1,小鞋子1,,,[#texture=c02/小鞋子.png],,
prop_小鞋子2,小鞋子2,,,[#texture=c02/小鞋子.png],,
prop_麻将,麻将,,,[#texture=c02/麻将.png],,
prop_新鲜的肉,新鲜的肉,,,[#texture=c02/新鲜的肉.png],,
prop_奇怪的肉,奇怪的肉,,,[#texture=c02/奇怪的肉.png],,
prop_弹珠,弹珠,,,[#texture=c02/弹珠.png],,
prop_木头人偶,木头人偶,,,[#texture=c02/小蝉人偶.png],,
@ -116,9 +117,11 @@ c02_卫生宣传画,几张卫生宣传画,,,,,
c02_老鼠洞,一个老鼠洞<br>在这种楼里挺常见的,,,,,
c02_十几年前的报纸,十几年前的报纸,,,,,
c02_院子_算命摊位,算命的摊位?,,,,,
c02_院子_要下雨,好像要下雨了?,,,,,
c02_保卫科花名册os,芦昌公寓居民登记簿,黄国栋记。,,,,,
c02_一楼楼道被挡住,被挡住了,,,,,
c02_瞎子卧室_八卦图,「乾三连,坤六断;震仰盂,艮覆碗;离中虚,坎中满;兑上缺,巽下断」<br>咦,这口诀是谁教我的来着...,,,,,
c02_瞎子卧室_血脚印,这画上的脚印和刚刚看到的一样。,,,,,
c02_瞎子卧室_十字架,院长房间里也有一个类似的十字架。,,,,,
c02_火灾等待准备,还没准备好点火呢,,,,,
小猫玩具发光,嗯?玩具在发光,,,,,

1 keys zh_CN _character _notes _tags zh_SH en
5 3 3
6 4 4
7 c02_杂物堆 杂物堵住了
8 prop_新鲜的肉 新鲜的肉 [#texture=c02/新鲜的肉.png]
9 index_新游戏 新游戏 New Game
10 index_继续游戏 继续游戏 Resume
11 index_退出游戏 退出游戏 Exit
29 ui_important_item_update 重要物品已更新(按 B 打开背包)
30 ui_switch_prop 点击图标可切换道具(或按 Z/C)
31 ui_press_shift 按住 Shift 奔跑
32 ui_boxcat_press_s 按住 S 躲藏
33 input_拼凑信件 点击选择信件碎片,方向键移动,按 E 旋转
34 ui_获得 获得
35 ui_退出 退出
63 prop_小鞋子1 小鞋子1 [#texture=c02/小鞋子.png]
64 prop_小鞋子2 小鞋子2 [#texture=c02/小鞋子.png]
65 prop_麻将 麻将 [#texture=c02/麻将.png]
prop_新鲜的肉 新鲜的肉 [#texture=c02/新鲜的肉.png]
66 prop_奇怪的肉 奇怪的肉 [#texture=c02/奇怪的肉.png]
67 prop_弹珠 弹珠 [#texture=c02/弹珠.png]
68 prop_木头人偶 木头人偶 [#texture=c02/小蝉人偶.png]
117 c02_老鼠洞 一个老鼠洞<br>在这种楼里挺常见的
118 c02_十几年前的报纸 十几年前的报纸
119 c02_院子_算命摊位 算命的摊位?
120 c02_院子_要下雨 好像要下雨了?
121 c02_保卫科花名册os 芦昌公寓居民登记簿,黄国栋记。
122 c02_一楼楼道被挡住 被挡住了
123 c02_瞎子卧室_八卦图 「乾三连,坤六断;震仰盂,艮覆碗;离中虚,坎中满;兑上缺,巽下断」<br>咦,这口诀是谁教我的来着...
124 c02_瞎子卧室_血脚印 这画上的脚印和刚刚看到的一样。
125 c02_瞎子卧室_十字架 院长房间里也有一个类似的十字架。
126 c02_火灾等待准备 还没准备好点火呢
127 小猫玩具发光 嗯?玩具在发光

View File

@ -26,6 +26,7 @@
重要物品已更新(按 B 打开背包) [ID:ui_important_item_update]
点击图标可切换道具(或按 Z/C [ID:ui_switch_prop]
按住 Shift 奔跑 [ID:ui_press_shift]
按住 S 躲藏 [ID:ui_boxcat_press_s]
点击选择信件碎片,方向键移动,按 E 旋转 [ID:input_拼凑信件]
获得 [ID:ui_获得]
@ -159,17 +160,18 @@
十几年前的报纸 [ID:c02_十几年前的报纸]
# c02 院子
算命的摊位? [ID:c02_院子_算命摊位]
好像要下雨了? [ID:c02_院子_要下雨]
# c02 保卫科
芦昌公寓居民登记簿,黄国栋记。 [ID:c02_保卫科花名册os]
# c02 内侧楼道
被挡住了 [ID:c02_一楼楼道被挡住]
# 瞎子卧室
「乾三连,坤六断;震仰盂,艮覆碗;离中虚,坎中满;兑上缺,巽下断」<br>咦,这口诀是谁教我的来着... [ID:c02_瞎子卧室_八卦图]
这画上的脚印和刚刚看到的一样。 [ID:c02_瞎子卧室_血脚印]
院长房间里也有一个类似的十字架。[ID:c02_瞎子卧室_十字架]
# c02 火灾
还没准备好点火呢 [ID:c02_火灾等待准备]
嗯?玩具在发光 [ID:小猫玩具发光]
没时间浪费了!想想办法救出小蝉... [ID:c02_点火前阻止右移]
# c02
=> END

View File

@ -1,4 +1,4 @@
[gd_resource type="SpriteFrames" load_steps=810 format=3 uid="uid://b7fhheih1hbvf"]
[gd_resource type="SpriteFrames" load_steps=806 format=3 uid="uid://b7fhheih1hbvf"]
[ext_resource type="Texture2D" uid="uid://bpqrd6vo3j17m" path="res://asset/art/animation/c00_吕萍_记笔记_right/吕萍-拿本子记录1.png" id="1_6sdvl"]
[ext_resource type="Texture2D" uid="uid://dvq64espa37lx" path="res://asset/art/animation/c00_吕萍_idle_left/zhhx1.png" id="1_ekv0l"]
@ -755,9 +755,7 @@
[ext_resource type="Texture2D" uid="uid://iqgnednnykdr" path="res://asset/art/animation/c02_吕萍_钻出/0.png" id="605_v8kdt"]
[ext_resource type="Texture2D" uid="uid://cgnn3ohqr52uf" path="res://asset/art/gif/c02_盒子猫/盒子猫呼吸/0.png" id="720_u1ns1"]
[ext_resource type="Texture2D" uid="uid://bn1v0rbsayjuf" path="res://asset/art/gif/c02_盒子猫/盒子猫呼吸/1.png" id="721_i6nr0"]
[ext_resource type="Texture2D" uid="uid://cgft6wepygo84" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_l/0.png" id="722_143ox"]
[ext_resource type="Texture2D" uid="uid://55rmstkju630" path="res://asset/art/gif/c02_盒子猫/盒子猫走路/0.png" id="722_kk2bf"]
[ext_resource type="Texture2D" uid="uid://bdbp0kc0v4gbw" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_l/1.png" id="723_2vft2"]
[ext_resource type="Texture2D" uid="uid://b2dt0032711li" path="res://asset/art/gif/c02_盒子猫/盒子猫走路/1.png" id="723_7otbe"]
[ext_resource type="Texture2D" uid="uid://b7ewg60u7s2d" path="res://asset/art/gif/c02_盒子猫/盒子猫走路/2.png" id="724_pq372"]
[ext_resource type="Texture2D" uid="uid://ca00x7jqj8fjy" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_l/2.png" id="724_pwc7e"]
@ -773,8 +771,6 @@
[ext_resource type="Texture2D" uid="uid://f8nq6xbuwiw0" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_l/7.png" id="729_h6bhr"]
[ext_resource type="Texture2D" uid="uid://csj5jede3wryh" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_l/8.png" id="730_dlxoy"]
[ext_resource type="Texture2D" uid="uid://cand6orv3g28w" path="res://asset/art/gif/c02_盒子猫/盒子猫停止躲藏/盒子猫出盒子2.png" id="730_karh2"]
[ext_resource type="Texture2D" uid="uid://b3piexlfdu7cc" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_r/0.png" id="731_oibw0"]
[ext_resource type="Texture2D" uid="uid://bedsecuscfsu7" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_r/1.png" id="732_cmym6"]
[ext_resource type="Texture2D" uid="uid://1mtlgg1y5530" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_r/2.png" id="733_4rlhx"]
[ext_resource type="Texture2D" uid="uid://dqmjk8do1yyao" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_r/3.png" id="734_chy64"]
[ext_resource type="Texture2D" uid="uid://dnfn5wd7wxem7" path="res://asset/art/gif/c02_盒子猫/盒子猫敲门_r/4.png" id="735_mliv3"]
@ -3486,12 +3482,6 @@ animations = [{
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("722_143ox")
}, {
"duration": 1.0,
"texture": ExtResource("723_2vft2")
}, {
"duration": 1.0,
"texture": ExtResource("724_pwc7e")
}, {
"duration": 1.0,
@ -3518,12 +3508,6 @@ animations = [{
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("731_oibw0")
}, {
"duration": 1.0,
"texture": ExtResource("732_cmym6")
}, {
"duration": 1.0,
"texture": ExtResource("733_4rlhx")
}, {
"duration": 1.0,

View File

@ -48,6 +48,7 @@ static var GROUND_SCENE_PATH_DICT = {
"c02_s15": "res://scene/ground/scene/c02/s15_盒子猫一楼内侧.tscn",
"c02_s16": "res://scene/ground/scene/c02/s16_盒子猫三楼内侧.tscn",
"c02_s17": "res://scene/ground/scene/c02/s17_盒子猫三楼.tscn",
"c02_s18": "res://scene/ground/scene/c02/s18_盒子猫一楼.tscn",
}
func _ready() -> void:

View File

@ -128,8 +128,28 @@ func _on_gate_interacted() -> void:
func shocking_lighting() -> void:
var root = $"../DeployLayer/闷雷_纸人闪现" as Node2D
var normal_ppl = root.get_node("排队常人") as Sprite2D
var paper_ppl = root.get_node("排队纸人") as Sprite2D
var light = root.get_node("PointLight2D") as PointLight2D
root.visible = true
normal_ppl.modulate.a = 0
paper_ppl.modulate.a = 0
light.energy = 0
var sfx = $"Sfx闷雷"
var tween = create_tween()
tween.tween_property(light, "energy", 7.0, 0.1)
tween.tween_property(light, "energy", 4.0, 0.02)
tween.parallel().tween_property(normal_ppl, "modulate:a", 1.0, 0.03)
tween.tween_property(light, "energy", 8.0, 0.01)
tween.tween_property(light, "energy", 3.0, 0.02)
tween.tween_property(light, "energy", 7.0, 0.01)
tween.parallel().tween_property(paper_ppl, "modulate:a", 1.0, 0.03)
tween.tween_property(light, "energy", 0.0, 0.1)
tween.tween_callback(root.hide)
# 纸人闪现 惊悚闪电 闷雷声缓缓而来
$"Sfx闷雷".play()
tween.tween_interval(2.0)
tween.tween_callback(sfx.play)
# TODO

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=74 format=3 uid="uid://djc2uaefhmu7"]
[gd_scene load_steps=76 format=3 uid="uid://djc2uaefhmu7"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_0dylx"]
[ext_resource type="Script" uid="uid://dsp5plrdkrsd7" path="res://scene/ground/scene/c02/s03_animation.gd" id="2_dt5aj"]
@ -246,6 +246,15 @@ fill = 1
fill_from = Vector2(0.5, 0.465812)
fill_to = Vector2(1, 1)
[sub_resource type="Gradient" id="Gradient_vddfx"]
offsets = PackedFloat32Array(0.00475436, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_3nako"]
gradient = SubResource("Gradient_vddfx")
width = 1000
height = 300
[sub_resource type="RectangleShape2D" id="RectangleShape2D_er6ob"]
resource_local_to_scene = true
size = Vector2(40, 70)
@ -372,11 +381,6 @@ sprite_frames = ExtResource("4_gd6xp")
animation = &"小婵晃脚掉鞋"
autoplay = "一楼二楼外侧楼道拼接-晃脚动画"
[node name="楼梯" type="Sprite2D" parent="Ground/BGSprite2D" index="1"]
z_index = 10
position = Vector2(1388, 1)
texture = ExtResource("10_ud2jg")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(25, 11)
target_scene = "c02_s02"
@ -502,29 +506,42 @@ z_index = 15
position = Vector2(1964, -209)
[node name="闷雷_纸人闪现" type="Node2D" parent="Ground/DeployLayer" index="8"]
visible = false
[node name="Ambush闷雷纸人" parent="Ground/DeployLayer/闷雷_纸人闪现" instance=ExtResource("25_iyaiw")]
position = Vector2(1353, 33)
hook_method = "shocking_lighting"
[node name="排队常人" type="Sprite2D" parent="Ground/DeployLayer/闷雷_纸人闪现"]
z_index = 20
light_mask = 5
z_index = 30
position = Vector2(1227.5, -119)
texture = ExtResource("18_crgo6")
centered = false
[node name="排队纸人" type="Sprite2D" parent="Ground/DeployLayer/闷雷_纸人闪现"]
z_index = 20
light_mask = 5
z_index = 30
position = Vector2(1227.5, -119)
texture = ExtResource("19_vddfx")
centered = false
[node name="火灾背景" type="Sprite2D" parent="Ground/DeployLayer" index="9"]
[node name="PointLight2D" type="PointLight2D" parent="Ground/DeployLayer/闷雷_纸人闪现"]
position = Vector2(1411, 12)
range_layer_max = 2
range_item_cull_mask = 4
texture = SubResource("GradientTexture2D_3nako")
[node name="Ambush要下雨了" parent="Ground/DeployLayer" index="9" instance=ExtResource("25_iyaiw")]
position = Vector2(1611, 46)
hook_os_key = "c02_院子_要下雨"
[node name="火灾背景" type="Sprite2D" parent="Ground/DeployLayer" index="10"]
modulate = Color(1, 1, 1, 0)
position = Vector2(1189, 0)
texture = ExtResource("6_d7h4s")
[node name="Pickable小鞋子" parent="Ground/DeployLayer" index="10" instance=ExtResource("7_em2ma")]
[node name="Pickable小鞋子" parent="Ground/DeployLayer" index="11" instance=ExtResource("7_em2ma")]
position = Vector2(809, 75)
sign_mark_offset = Vector2(0, -16.88)
enabled = false
@ -535,8 +552,9 @@ position = Vector2(0, -7)
scale = Vector2(0.15, 0.15)
texture = ExtResource("8_plfv5")
[node name="Interactable铁门" parent="Ground/DeployLayer" index="11" instance=ExtResource("8_xt8j0")]
position = Vector2(1212, 28)
[node name="Interactable铁门" parent="Ground/DeployLayer" index="12" instance=ExtResource("8_xt8j0")]
light_mask = 5
position = Vector2(1222, 28)
texture = ExtResource("7_gd6xp")
interacted_texture = ExtResource("9_liq0c")
prop_key = "prop_老虎钳"
@ -552,7 +570,7 @@ collision_mask = 0
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/Interactable铁门/Wall"]
shape = SubResource("RectangleShape2D_mdix7")
[node name="Note算命摊位" parent="Ground/DeployLayer" index="12" instance=ExtResource("6_t48d1")]
[node name="Note算命摊位" parent="Ground/DeployLayer" index="13" instance=ExtResource("6_t48d1")]
position = Vector2(725, 45)
note_key = "c02_院子_算命摊位"
@ -560,13 +578,13 @@ note_key = "c02_院子_算命摊位"
position = Vector2(0, 18)
texture = ExtResource("6_1tart")
[node name="煤油灯" parent="Ground/DeployLayer" index="13" instance=ExtResource("10_jme4f")]
[node name="煤油灯" parent="Ground/DeployLayer" index="14" instance=ExtResource("10_jme4f")]
position = Vector2(290, 1)
gaslight_energy = 1.5
gaslight_ground_energy = 0.7
mute_when_interacted = false
[node name="煤油灯2" parent="Ground/DeployLayer" index="14" instance=ExtResource("10_jme4f")]
[node name="煤油灯2" parent="Ground/DeployLayer" index="15" instance=ExtResource("10_jme4f")]
position = Vector2(610, 1)
gaslight_texture = ExtResource("11_g0qhj")
ground_light_texture = ExtResource("12_ni5ro")
@ -574,7 +592,7 @@ gaslight_energy = 1.5
gaslight_ground_energy = 0.7
mute_when_interacted = false
[node name="煤油灯3" parent="Ground/DeployLayer" index="15" instance=ExtResource("10_jme4f")]
[node name="煤油灯3" parent="Ground/DeployLayer" index="16" instance=ExtResource("10_jme4f")]
position = Vector2(857, 1)
gaslight_texture = ExtResource("13_hw832")
ground_light_texture = ExtResource("14_7pq5y")
@ -582,44 +600,45 @@ gaslight_energy = 1.5
gaslight_ground_energy = 0.7
mute_when_interacted = false
[node name="井" type="Sprite2D" parent="Ground/DeployLayer" index="16"]
[node name="井" type="Sprite2D" parent="Ground/DeployLayer" index="17"]
self_modulate = Color(0.739288, 0.739288, 0.739288, 1)
light_mask = 5
z_index = 10
position = Vector2(2062, 60)
texture = ExtResource("21_4n8vm")
[node name="药车" type="Sprite2D" parent="Ground/DeployLayer" index="17"]
[node name="药车" type="Sprite2D" parent="Ground/DeployLayer" index="18"]
light_mask = 5
z_index = 10
position = Vector2(1025, 27)
texture = ExtResource("22_3y5s5")
[node name="Closeup敲门游戏" parent="Ground/DeployLayer" index="18" instance=ExtResource("23_81juy")]
[node name="Closeup敲门游戏" parent="Ground/DeployLayer" index="19" instance=ExtResource("23_81juy")]
position = Vector2(466, 3)
packed_scene = ExtResource("24_0o4rt")
[node name="Closeup井" parent="Ground/DeployLayer" index="19" instance=ExtResource("23_81juy")]
[node name="Closeup井" parent="Ground/DeployLayer" index="20" instance=ExtResource("23_81juy")]
z_index = 6
position = Vector2(2063, 50)
packed_scene = ExtResource("26_yy4fp")
[node name="Ambush惊悚闪电" parent="Ground/DeployLayer" index="20" instance=ExtResource("25_iyaiw")]
[node name="Ambush惊悚闪电" parent="Ground/DeployLayer" index="21" instance=ExtResource("25_iyaiw")]
position = Vector2(1319, 40)
hook_method = "shocking_lighting"
[node name="Ambush偷听对话" parent="Ground/DeployLayer" index="21" instance=ExtResource("25_iyaiw")]
position = Vector2(1791, 8)
[node name="Ambush偷听对话" parent="Ground/DeployLayer" index="22" instance=ExtResource("25_iyaiw")]
position = Vector2(1836, 7)
trigger_mode = "interact"
one_shot = false
hook_method = "eavesdrop"
[node name="李氏赖子房间人影" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="22"]
[node name="李氏赖子房间人影" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="23"]
position = Vector2(1835, -16)
sprite_frames = SubResource("SpriteFrames_0o4rt")
autoplay = "default"
frame_progress = 0.643855
[node name="Npc井边疯子" parent="Ground/DeployLayer" index="23" instance=ExtResource("35_plfv5")]
[node name="Npc井边疯子" parent="Ground/DeployLayer" index="24" instance=ExtResource("35_plfv5")]
z_index = 10
position = Vector2(2037, 67)
sprite_frames = SubResource("SpriteFrames_kyfht")
@ -645,7 +664,7 @@ position = Vector2(-11, -3)
shape = SubResource("RectangleShape2D_bbhbr")
disabled = true
[node name="霸凌" type="Node2D" parent="Ground/DeployLayer" index="24"]
[node name="霸凌" type="Node2D" parent="Ground/DeployLayer" index="25"]
visible = false
position = Vector2(2154, 60)
@ -710,7 +729,7 @@ collision_mask = 0
shape = SubResource("RectangleShape2D_d7h4s")
disabled = true
[node name="火灾" type="Node2D" parent="Ground/DeployLayer" index="25"]
[node name="火灾" type="Node2D" parent="Ground/DeployLayer" index="26"]
visible = false
[node name="右窗" type="AnimatedSprite2D" parent="Ground/DeployLayer/火灾"]
@ -881,7 +900,7 @@ offset_bottom = -23.0
[node name="CollisionShape2D" parent="Ground/DeployLayer/火灾/Ambush等待的小蝉/Area2D" index="0"]
shape = SubResource("RectangleShape2D_em2ma")
[node name="Interactable柜子" parent="Ground/DeployLayer" index="26" instance=ExtResource("8_xt8j0")]
[node name="Interactable柜子" parent="Ground/DeployLayer" index="27" instance=ExtResource("8_xt8j0")]
visible = false
position = Vector2(1772, 48)
texture = ExtResource("32_cpifc")
@ -897,7 +916,7 @@ animation = &"箱子着火"
autoplay = "箱子着火"
frame_progress = 0.453645
[node name="最终跑路" type="RigidBody2D" parent="Ground/DeployLayer" index="27"]
[node name="最终跑路" type="RigidBody2D" parent="Ground/DeployLayer" index="28"]
visible = false
position = Vector2(2150, 30)
collision_layer = 4
@ -922,11 +941,17 @@ range_item_cull_mask = 4
texture = SubResource("GradientTexture2D_plfv5")
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(407, 93)
position = Vector2(1384, 101)
[node name="BGParallaxLayer" parent="Ground/ParallaxForeground" index="0"]
use_parent_material = true
[node name="楼梯" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
light_mask = 5
z_index = 20
position = Vector2(1393.5, 0)
texture = ExtResource("10_ud2jg")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(-88, -7)
scale = Vector2(1.08, 1.08)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=3 uid="uid://bivc5cdap370p"]
[gd_scene load_steps=20 format=3 uid="uid://bivc5cdap370p"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_2jej0"]
[ext_resource type="Script" uid="uid://dmhh4g47bdxxy" path="res://scene/ground/scene/c02/s04_animation.gd" id="2_jyere"]
@ -17,6 +17,7 @@
[ext_resource type="Texture2D" uid="uid://ch6uf4qi1i0h2" path="res://asset/art/scene/c02/s03_公寓一楼院子/光晕/光晕3.png" id="9_a43aq"]
[ext_resource type="PackedScene" uid="uid://xovlfee503a4" path="res://scene/ground/script/c02/小手讨东西.tscn" id="10_a43aq"]
[ext_resource type="Texture2D" uid="uid://dtmd13ktss5hk" path="res://asset/art/scene/c02/s03_公寓一楼院子/地面物品反光/地反光5.png" id="10_svuj3"]
[ext_resource type="Texture2D" uid="uid://v6q6ao6fiqm1" path="res://asset/art/scene/c02/s04_保卫科/e_老鼠画像横板.png" id="11_ffvrp"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_gk1h4"]
resource_local_to_scene = true
@ -82,7 +83,8 @@ position = Vector2(189, 15)
packed_scene = ExtResource("7_fvlg0")
[node name="Closeup老鼠精" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_66gue")]
position = Vector2(208, -32)
position = Vector2(207.5, -40.5)
texture = ExtResource("11_ffvrp")
packed_scene = ExtResource("8_cm3g6")
[node name="Closeup花名册" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_66gue")]

View File

@ -15,11 +15,17 @@ func _ready() -> void:
var color_mask: ColorRect
var ambush_eavesdrop: Ambush2D
var ambush_lookback: Ambush2D
var gaslight: Gaslight
var boxcat_portal: Portal2D
func _on_ground_ready() -> void:
color_mask = $"../BGSprite2D/ColorMask"
ambush_eavesdrop = $"../DeployLayer/Ambush偷听"
ambush_lookback = $"../DeployLayer/Ambush回看洞口"
gaslight = $"../DeployLayer/灯座Sprite2D/煤油灯"
boxcat_portal = $"../DeployLayer/portal_1"
# 0默认 1拿了麻将 2偷听结束 3已爬出
if data.hole_interacted_times >= 3:
setup_rect_after_entered()
@ -27,9 +33,25 @@ func _on_ground_ready() -> void:
color_mask.color.a = 1.0
# # 如果没有出隧道,则设置镜头右侧 limit + 500
# SceneManager.get_camera_marker().limit_right += 500
if ArchiveManager.get_global_value("c02_the_blind_room_unlocked"):
var looked_back = ambush_lookback.played
var boxcat_played = ArchiveManager.get_global_value("c02_the_blind_room_unlocked")
if gaslight.interacted_times > 0:
ambush_lookback.enabled = true
else:
gaslight.interacted.connect(func(): ambush_lookback.enabled = true)
if looked_back:
gaslight.enabled = false
gaslight.visible = false
if not boxcat_played:
boxcat_portal.enabled = true
boxcat_portal.get_node("PointLight2D2").enabled = true
boxcat_portal.get_node("Sprite2D").texture = preload("uid://efhwoqtn21d8") # e_墙上纸张_boxcat
$"../DeployLayer/Closeup画".enabled = false
if boxcat_played:
$"../DeployLayer/portal_left".status = "opened"
# 玩过小猫游戏,画框内容更新 禁止再进入
boxcat_portal.get_node("Sprite2D").texture = preload("uid://b8sv81cw7mcn4") # e_墙上纸张_blood
$"../DeployLayer/Note画上脚印".enabled = true
var interacting = false:
@ -86,9 +108,8 @@ var room_camera_r_limit = 550
# 钻出隧道,进入房间
func enter_room() -> void:
var look_back_ambush = $"../DeployLayer/Ambush回看洞口"
# 防止过程中 look back
look_back_ambush.enabled = false
ambush_lookback.enabled = false
var player = SceneManager.get_player() as MainPlayer
var player_x = 513.0
SceneManager.freeze_player(0)
@ -112,7 +133,6 @@ func enter_room() -> void:
player.hide_sprite = false
SceneManager.release_player()
interacting = false
look_back_ambush.enabled = true
func setup_rect_after_entered() -> void:
@ -153,6 +173,18 @@ func _on_shocked():
$"Sfx癞子对视惊吓".play()
SceneManager.freeze_player(0, 11, true)
SceneManager.get_player().animation_finished.connect(_on_shocked_finished, CONNECT_ONE_SHOT)
await create_tween().tween_interval(1.1).finished
# 熄火
gaslight.enabled = false
gaslight.visible = false
# 启用 boxcat_portal
boxcat_portal.enabled = true
var light = boxcat_portal.get_node("PointLight2D2") as PointLight2D
boxcat_portal.get_node("Sprite2D").texture = preload("uid://efhwoqtn21d8") # e_墙上纸张_boxcat
light.enabled = true
light.energy = 0
create_tween().tween_property(light, "energy", 0.6, 1.5)
$"../DeployLayer/Closeup画".enabled = false
func _on_shocked_finished():

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=28 format=3 uid="uid://ce2vyyg2reg52"]
[gd_scene load_steps=34 format=3 uid="uid://ce2vyyg2reg52"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_judx3"]
[ext_resource type="Script" uid="uid://hbbgymjs5xte" path="res://scene/ground/scene/c02/s08_animation.gd" id="2_m4uw8"]
@ -10,10 +10,15 @@
[ext_resource type="Texture2D" uid="uid://b5pwb4fm46sad" path="res://asset/art/scene/c02/s08_瞎子卧室/e_墙上纸张.png" id="5_f6mma"]
[ext_resource type="Texture2D" uid="uid://7ay1ttob8qwm" path="res://asset/art/scene/c02/s08_瞎子卧室/e_床板.png" id="5_vjjde"]
[ext_resource type="SpriteFrames" uid="uid://3nas025c2c5u" path="res://asset/art/gif/c02_杂项/c02_杂项_frames.tres" id="7_j6ltr"]
[ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="8_dkqw0"]
[ext_resource type="PackedScene" uid="uid://dqkxiqbq83cmq" path="res://scene/entity/closeup.tscn" id="10_a48k2"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="10_f6mma"]
[ext_resource type="Texture2D" uid="uid://brdo2cpu6vcqd" path="res://asset/art/scene/c02/杂物/煤油灯 开灯.png" id="10_vjjde"]
[ext_resource type="PackedScene" uid="uid://cxw5rovg5mu1a" path="res://scene/ground/script/c02/s00_煤油灯.tscn" id="11_7w12o"]
[ext_resource type="Texture2D" uid="uid://b7gyapghy3tsy" path="res://asset/art/neutral_point_light.png" id="11_kwj7c"]
[ext_resource type="PackedScene" uid="uid://dd8dfoik0ig3y" path="res://scene/ground/script/c02/s08_画特写.tscn" id="11_mc126"]
[ext_resource type="Texture2D" uid="uid://bgtxwxerl2dxh" path="res://asset/art/scene/c02/s08_瞎子卧室/十字架.png" id="11_t3h08"]
[ext_resource type="Texture2D" uid="uid://bcqcvohj7jy40" path="res://asset/art/scene/c02/杂物/煤油灯 关灯.png" id="11_u4psw"]
[ext_resource type="Texture2D" uid="uid://bmid3iu2ch35o" path="res://asset/art/scene/c02/s08_瞎子卧室/八卦图.png" id="12_1ws4i"]
[ext_resource type="SpriteFrames" uid="uid://b7fhheih1hbvf" path="res://config/animation/entity_sprite_frames.tres" id="13_t3h08"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="14_1ws4i"]
@ -64,6 +69,10 @@ _data = {
&"RESET": SubResource("Animation_f6mma")
}
[sub_resource type="RectangleShape2D" id="RectangleShape2D_a48k2"]
resource_local_to_scene = true
size = Vector2(5, 70)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_kwj7c"]
resource_local_to_scene = true
size = Vector2(10, 70)
@ -153,20 +162,66 @@ position = Vector2(676, 63)
matched_sign_texture = null
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_1ws4i")]
position = Vector2(193, 34)
position = Vector2(214, 31)
debug_note = "墙画:盒子猫"
enabled = false
portal_name = "1"
target_scene = "c02_s12"
target_portal = "left"
status = "opened"
default_sign_texture = ExtResource("8_dkqw0")
opened_sign_texture = ExtResource("8_dkqw0")
matched_sign_texture = null
[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/portal_1"]
show_behind_parent = true
light_mask = 33
position = Vector2(0, -47)
texture = ExtResource("5_f6mma")
[node name="瞎子小蝉对话" type="Node2D" parent="Ground/DeployLayer" index="3"]
[node name="PointLight2D2" type="PointLight2D" parent="Ground/DeployLayer/portal_1"]
light_mask = 33
position = Vector2(0, -47)
enabled = false
energy = 0.6
range_item_cull_mask = 32
texture = ExtResource("11_kwj7c")
texture_scale = 0.15
[node name="Closeup画" parent="Ground/DeployLayer" index="3" instance=ExtResource("10_a48k2")]
position = Vector2(214, -19)
packed_scene = ExtResource("11_mc126")
[node name="Note画上脚印" parent="Ground/DeployLayer" index="4" instance=ExtResource("14_1ws4i")]
position = Vector2(214, -19)
enabled = false
title_filter = "c02"
note_key = "c02_瞎子卧室_血脚印"
[node name="灯座Sprite2D" type="Sprite2D" parent="Ground/DeployLayer" index="5"]
position = Vector2(169, 18)
texture = ExtResource("11_u4psw")
[node name="煤油灯" parent="Ground/DeployLayer/灯座Sprite2D" instance=ExtResource("11_7w12o")]
position = Vector2(0, 15)
animation_low_mode = true
hide_texture = true
gaslight_energy = 2.0
[node name="CollisionShape2D" parent="Ground/DeployLayer/灯座Sprite2D/煤油灯/Area2D" index="0"]
shape = SubResource("RectangleShape2D_a48k2")
[node name="PointLight2D" parent="Ground/DeployLayer/灯座Sprite2D/煤油灯" index="3"]
energy = 2.0
[node name="灯座" parent="Ground/DeployLayer/灯座Sprite2D/煤油灯" index="6"]
visible = false
[node name="Sign" parent="Ground/DeployLayer/灯座Sprite2D/煤油灯" index="7"]
offset_top = -18.0
offset_bottom = -18.0
[node name="瞎子小蝉对话" type="Node2D" parent="Ground/DeployLayer" index="6"]
visible = false
[node name="瞎子谈话" type="AnimatedSprite2D" parent="Ground/DeployLayer/瞎子小蝉对话"]
@ -193,7 +248,7 @@ energy = 1.5
texture = ExtResource("11_kwj7c")
texture_scale = 1.5
[node name="Ambush偷听" parent="Ground/DeployLayer" index="4" instance=ExtResource("10_f6mma")]
[node name="Ambush偷听" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_f6mma")]
position = Vector2(571, 28)
trigger_mode = "interact"
one_shot = false
@ -208,7 +263,7 @@ offset_bottom = 5.0
[node name="CollisionShape2D" parent="Ground/DeployLayer/Ambush偷听/Area2D" index="0"]
shape = SubResource("RectangleShape2D_kwj7c")
[node name="吕萍钻出" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="5"]
[node name="吕萍钻出" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="8"]
visible = false
position = Vector2(534, 0)
sprite_frames = ExtResource("13_t3h08")
@ -216,33 +271,44 @@ animation = &"c02_吕萍_钻出"
frame = 6
frame_progress = 1.0
[node name="癞子偷窥" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="6"]
[node name="癞子偷窥" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="9"]
visible = false
position = Vector2(569, 56)
sprite_frames = ExtResource("13_t3h08")
animation = &"c02_王癞子_蹲着呼吸"
autoplay = "c02_王癞子_蹲着呼吸"
[node name="Ambush回看洞口" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_f6mma")]
[node name="Ambush回看洞口" parent="Ground/DeployLayer" index="10" instance=ExtResource("10_f6mma")]
position = Vector2(522, 31)
enabled = false
trigger_mode = "interact"
hook_method = "look_back_hole"
[node name="Note十字架" parent="Ground/DeployLayer" index="8" instance=ExtResource("14_1ws4i")]
position = Vector2(322, -10)
texture = ExtResource("11_t3h08")
[node name="Note十字架" parent="Ground/DeployLayer" index="11" instance=ExtResource("14_1ws4i")]
position = Vector2(329, -3)
sign_mark_offset = Vector2(0, -13.89)
title_filter = "c02"
note_key = "c02_瞎子卧室_十字架"
[node name="Note八卦图" parent="Ground/DeployLayer" index="9" instance=ExtResource("14_1ws4i")]
[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Note十字架"]
show_behind_parent = true
position = Vector2(0, -3)
scale = Vector2(0.5, 0.5)
texture = ExtResource("11_t3h08")
[node name="Note八卦图" parent="Ground/DeployLayer" index="12" instance=ExtResource("14_1ws4i")]
position = Vector2(144, -14)
texture = ExtResource("12_1ws4i")
sign_mark_offset = Vector2(0, -10.86)
title_filter = "c02"
note_key = "c02_瞎子卧室_八卦图"
[node name="Pickable粘鼠板" parent="Ground/DeployLayer" index="10" instance=ExtResource("17_5fx68")]
[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Note八卦图"]
show_behind_parent = true
position = Vector2(0, -2)
scale = Vector2(0.5, 0.5)
texture = ExtResource("12_1ws4i")
[node name="Pickable粘鼠板" parent="Ground/DeployLayer" index="13" instance=ExtResource("17_5fx68")]
position = Vector2(105, 70)
texture = ExtResource("18_dkqw0")
sign_mark_offset = Vector2(0, -9.34)
@ -292,4 +358,5 @@ energy = 0.9
blend_mode = 1
[editable path="Ground"]
[editable path="Ground/DeployLayer/灯座Sprite2D/煤油灯"]
[editable path="Ground/DeployLayer/Ambush偷听"]

View File

@ -18,19 +18,24 @@ func _on_ground_ready() -> void:
func _intro():
SceneManager.freeze_player(0)
SceneManager.lock_player()
# var player = SceneManager.get_player() as MainPlayer
var player = %MainPlayer as MainPlayer
player.hide_sprite = true
player.position.x = 231.0
player.set_facing_direction(Vector2.RIGHT)
var duration = $"../盒子猫CanvasLayer".show_cat_duration
await get_tree().create_timer(duration).timeout
var anim = $"../DeployLayer/小猫初始动画" as AnimatedSprite2D
if not ArchiveManager.get_global_value("c02_boxcat_skip_intro"):
var layer = $"../盒子猫CanvasLayer"
layer.disable_crawl = true
var duration = layer.show_cat_duration
await get_tree().create_timer(duration).timeout
anim.play()
var camera = SceneManager.get_camera_marker()
create_tween().tween_property(camera, "force_offset", Vector2.ZERO, 1.0)
await anim.animation_finished
layer.disable_crawl = false
anim.visible = false
player.hide_sprite = false
SceneManager.release_player()
SceneManager.unlock_player()
SceneManager.pop_center_notification(tr("ui_boxcat_press_s"))

View File

@ -10,6 +10,7 @@
[node name="Ground" parent="." instance=ExtResource("1_ngo77")]
scene_name = "c02_s12"
display_hud = false
player_y = 87
footstep_type = "盒子猫"
@ -19,7 +20,7 @@ oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="1"]
texture = ExtResource("3_oskpk")
offset = Vector2(0, -102)
offset = Vector2(0, -103.7)
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(152, 56)

View File

@ -17,9 +17,40 @@ func _on_ground_ready() -> void:
pass
func final_show():
func knock_light_door():
var knock_stream = preload("uid://7of24bqow07e")
var player = SceneManager.get_player()
# 一直循环下去
for _i in range(100):
SceneManager.freeze_player(0, 6)
await get_tree().create_timer(0.6).timeout
# 被抓时打断
if not player.visible or player.hide_sprite:
_outtro_show()
break
AudioManager.play_sfx(knock_stream)
await get_tree().create_timer(0.2).timeout
# 被抓时打断
if not player.visible or player.hide_sprite:
_outtro_show()
break
AudioManager.play_sfx(knock_stream)
await get_tree().create_timer(0.2).timeout
# 被抓时打断
if not player.visible or player.hide_sprite:
_outtro_show()
break
# 收尾演出
func _outtro_show():
$"../DeployLayer/Ambush终点光芒互动".enabled = false
# 禁止猪头怪动画播放结束后重开游戏
$"../DeployLayer/追猫猪头怪_传送".allow_restart_game = false
$"Sfx结尾演出".play()
await get_tree().create_timer(8.0).timeout
$"../盒子猫CanvasLayer".show_footprint()
# 盒子猫逃脱成功/被抓走,游戏结束,解锁瞎子卧室门
$"Sfx开锁声".play()
await get_tree().create_timer(10.0).timeout
ArchiveManager.set_global_entry("c02_the_blind_room_unlocked", true)
await get_tree().create_timer(1.0).timeout
SceneManager.get_ground_loader().transition_to_scene("c02_s08", "1")

View File

@ -1,14 +1,12 @@
[gd_scene load_steps=13 format=3 uid="uid://bvjutch6jex0v"]
[gd_scene load_steps=11 format=3 uid="uid://bvjutch6jex0v"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_71lma"]
[ext_resource type="Script" uid="uid://28ujp27cbdh2" path="res://scene/ground/scene/c02/s13_animation.gd" id="2_w5nqu"]
[ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/UI/开锁声.mp3" id="3_g6cxj"]
[ext_resource type="Texture2D" uid="uid://dweafdywxenu6" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_二楼楼道.png" id="3_miykx"]
[ext_resource type="Texture2D" uid="uid://b3ootg88b63rb" path="res://asset/art/scene/c02/旧版/s13_院子诡异版/fg_楼梯调色后.png" id="4_4adgb"]
[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_yywsi"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="5_gge8e"]
[ext_resource type="Texture2D" uid="uid://csrfyvaufo1wb" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/l_瞎子理发店光.png" id="6_gge8e"]
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="7_g6cxj"]
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="6_yywsi"]
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="7_u2fv1"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="9_yywsi"]
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="10_kmk38"]
@ -17,6 +15,7 @@
[node name="Ground" parent="." instance=ExtResource("1_71lma")]
scene_name = "c02_s13"
display_hud = false
player_y = 85
footstep_type = "盒子猫"
@ -24,7 +23,7 @@ footstep_type = "盒子猫"
script = ExtResource("2_w5nqu")
oneshot_animation = ""
[node name="Sfx开锁声" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"]
[node name="Sfx结尾演出" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"]
stream = ExtResource("3_g6cxj")
bus = &"game_sfx"
script = ExtResource("4_yywsi")
@ -40,55 +39,62 @@ target_scene = "c02_s14"
target_portal = "left"
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(776, 55)
position = Vector2(853, 56)
target_scene = "c02_s18"
target_portal = "right"
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("6_yywsi")]
position = Vector2(779, 56)
portal_name = "1"
target_scene = "c02_s17"
target_portal = "right"
[node name="NotePortal" parent="Ground/DeployLayer" index="2" instance=ExtResource("5_gge8e")]
position = Vector2(853, 6)
note_sign_texture = ExtResource("7_g6cxj")
note_key = "notes_无法通过"
[node name="终点光芒" type="Sprite2D" parent="Ground/DeployLayer" index="3"]
modulate = Color(1, 1, 1, 0.34902)
position = Vector2(226, 11)
position = Vector2(226, 14)
texture = ExtResource("6_gge8e")
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="4" instance=ExtResource("9_yywsi")]
[node name="Ambush终点光芒互动" parent="Ground/DeployLayer" index="4" instance=ExtResource("9_yywsi")]
position = Vector2(214, 11)
trigger_mode = "interact"
one_shot = false
hook_method = "knock_light_door"
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="5" instance=ExtResource("9_yywsi")]
position = Vector2(103, 6)
trigger_mode = "interact"
one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="Ambush猫咪敲门互动2" parent="Ground/DeployLayer" index="5" instance=ExtResource("9_yywsi")]
[node name="Ambush猫咪敲门互动2" parent="Ground/DeployLayer" index="6" instance=ExtResource("9_yywsi")]
position = Vector2(539, 6)
trigger_mode = "interact"
one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="Ambush猫咪敲门互动3" parent="Ground/DeployLayer" index="6" instance=ExtResource("9_yywsi")]
[node name="Ambush猫咪敲门互动3" parent="Ground/DeployLayer" index="7" instance=ExtResource("9_yywsi")]
position = Vector2(663, 5)
trigger_mode = "interact"
one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_kmk38")]
position = Vector2(642, 17)
[node name="追猫猪头怪_左侧" parent="Ground/DeployLayer" index="8" instance=ExtResource("10_kmk38")]
position = Vector2(269, 88)
transfer_mode = false
[node name="追猫猪头怪2" parent="Ground/DeployLayer" index="8" instance=ExtResource("10_kmk38")]
position = Vector2(154, 18)
[node name="追猫猪头怪_右侧" parent="Ground/DeployLayer" index="9" instance=ExtResource("10_kmk38")]
position = Vector2(608, 82)
transfer_mode = false
[node name="追猫猪头怪_传送" parent="Ground/DeployLayer" index="10" instance=ExtResource("10_kmk38")]
position = Vector2(984, 76)
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(41, 73)
character = "盒子猫"
[node name="楼梯" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
position = Vector2(1267, -4)
texture = ExtResource("4_4adgb")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(-1, -16)
scale = Vector2(1.05, 1.05)
@ -96,6 +102,9 @@ scale = Vector2(1.05, 1.05)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 870, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("7_u2fv1")]
visible = false

View File

@ -1,15 +1,17 @@
[gd_scene load_steps=6 format=3 uid="uid://d0p4x5st2r315"]
[gd_scene load_steps=7 format=3 uid="uid://d0p4x5st2r315"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_cr1hi"]
[ext_resource type="Script" uid="uid://bjisuntcem2lv" path="res://scene/ground/scene/c02/s14_animation.gd" id="2_o47bv"]
[ext_resource type="Texture2D" uid="uid://y0e47513ca22" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_二楼内侧楼道粉笔画.png" id="3_cr1hi"]
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_o47bv"]
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_cr1hi"]
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="5_o47bv"]
[node name="S14" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_cr1hi")]
scene_name = "c02_s14"
display_hud = false
player_y = 85
footstep_type = "盒子猫"
@ -37,6 +39,9 @@ portal_name = "1"
target_scene = "c02_s16"
target_portal = "right"
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_o47bv")]
position = Vector2(193, 79)
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(41, 73)
character = "盒子猫"
@ -44,6 +49,9 @@ character = "盒子猫"
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(101, 150, 660, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_cr1hi")]
visible = false

View File

@ -1,16 +1,16 @@
[gd_scene load_steps=7 format=3 uid="uid://b21p53g42j2nt"]
[gd_scene load_steps=6 format=3 uid="uid://b21p53g42j2nt"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qxg0l"]
[ext_resource type="Script" uid="uid://ebaq235h32fd" path="res://scene/ground/scene/c02/s15_animation.gd" id="2_etqjj"]
[ext_resource type="Texture2D" uid="uid://c4eb71kdnqy3y" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_一楼内侧楼道粉笔画.png" id="3_qxg0l"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="4_etqjj"]
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_isic3"]
[ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="5_qxg0l"]
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="6_etqjj"]
[node name="S15" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_qxg0l")]
scene_name = "c02_s15"
display_hud = false
player_y = 85
footstep_type = "盒子猫"
@ -23,17 +23,17 @@ texture = ExtResource("3_qxg0l")
offset = Vector2(0, -102)
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(160, 57)
position = Vector2(367, 58)
target_scene = "c02_s18"
target_portal = "left"
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(496, 57)
target_scene = "c02_s14"
target_portal = "right"
[node name="NotePortal" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_etqjj")]
position = Vector2(366, 10)
note_sign_texture = ExtResource("5_qxg0l")
note_key = "notes_无法通过"
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="2" instance=ExtResource("6_etqjj")]
position = Vector2(76, 85)
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(64, 73)
@ -46,6 +46,9 @@ position = Vector2(-1, -15)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(125, 150, 660, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_isic3")]
visible = false

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=7 format=3 uid="uid://22hc3oe8t0id"]
[gd_scene load_steps=8 format=3 uid="uid://22hc3oe8t0id"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_umyae"]
[ext_resource type="Script" uid="uid://dx2w5v1erjyls" path="res://scene/ground/scene/c02/s16_animation.gd" id="2_tmnwc"]
@ -6,6 +6,7 @@
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_qkv3g"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="5_qkv3g"]
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="5_tmnwc"]
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="6_fjtlb"]
[node name="S16" type="Node2D"]
@ -44,6 +45,8 @@ one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_fjtlb")]
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(235, 73)
character = "盒子猫"
@ -55,6 +58,9 @@ position = Vector2(3584, -7)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 655, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("5_tmnwc")]
visible = false

View File

@ -12,6 +12,7 @@
[node name="Ground" parent="." instance=ExtResource("1_e436a")]
scene_name = "c02_s17"
display_hud = false
player_y = 85
footstep_type = "盒子猫"
@ -29,9 +30,9 @@ target_scene = "c02_s16"
target_portal = "1"
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(853, 56)
position = Vector2(852, 57)
target_scene = "c02_s13"
target_portal = "right"
target_portal = "1"
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_e436a")]
position = Vector2(662, 57)
@ -66,6 +67,9 @@ position = Vector2(3584, -7)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 860, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("4_n3bxc")]
visible = false

View File

@ -0,0 +1,17 @@
@tool
extends AnimationRoot
# 覆盖该方法
func _default_data() -> Dictionary:
return {}
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
func _on_ground_ready() -> void:
pass

View File

@ -0,0 +1 @@
uid://b3mak700k2qwt

View File

@ -0,0 +1,70 @@
[gd_scene load_steps=7 format=3 uid="uid://d27gv3pbkn4b8"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_4bsvj"]
[ext_resource type="Script" uid="uid://b3mak700k2qwt" path="res://scene/ground/scene/c02/s18_animation.gd" id="2_4bsvj"]
[ext_resource type="Texture2D" uid="uid://ttocw3erg8jv" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/bg_一楼楼道粉笔画.png" id="3_owpnf"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="5_emyx1"]
[ext_resource type="PackedScene" uid="uid://dewbg4phd8c17" path="res://scene/ground/script/c02/追猫猪头怪.tscn" id="6_xoyld"]
[ext_resource type="PackedScene" uid="uid://khwxm5qbfj3k" path="res://scene/ground/script/c02/盒子猫canvas_layer.tscn" id="7_8eo7o"]
[node name="S18" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_4bsvj")]
scene_name = "c02_s18"
display_hud = false
player_y = 85
footstep_type = "盒子猫"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_4bsvj")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="1"]
texture = ExtResource("3_owpnf")
offset = Vector2(0, -102)
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(32, 56)
target_scene = "c02_s15"
target_portal = "left"
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(776, 55)
target_scene = "c02_s13"
target_portal = "right"
[node name="Ambush猫咪敲门互动" parent="Ground/DeployLayer" index="2" instance=ExtResource("5_emyx1")]
position = Vector2(661, 6)
trigger_mode = "interact"
one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="Ambush猫咪敲门互动2" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_emyx1")]
position = Vector2(104, 6)
trigger_mode = "interact"
one_shot = false
freeze_time = 1.5
global_method = "c02_cat_play_with_door"
[node name="追猫猪头怪" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_xoyld")]
position = Vector2(-18, 74)
[node name="MainPlayer" parent="Ground" index="4"]
position = Vector2(235, 73)
character = "盒子猫"
facing_direction = Vector2(1, 0)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(3584, -7)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 860, 150)
[node name="DirectionalLight2D" parent="Ground" index="8"]
blend_mode = 1
[node name="盒子猫CanvasLayer" parent="Ground" instance=ExtResource("7_8eo7o")]
visible = false
[editable path="Ground"]

View File

@ -0,0 +1,20 @@
[gd_scene load_steps=4 format=3 uid="uid://dd8dfoik0ig3y"]
[ext_resource type="Script" uid="uid://dnrql1t0j6v8i" path="res://scene/ground/script/c02/通用特写脚本.gd" id="1_jgyts"]
[ext_resource type="Texture2D" uid="uid://d1seskftkw08q" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/ux_特写.png" id="2_jo6o1"]
[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/prop/特写通用遮罩.png" id="3_myoho"]
[node name="s08_画特写" type="CanvasLayer"]
script = ExtResource("1_jgyts")
[node name="TextureRect" type="TextureRect" parent="."]
offset_right = 40.0
offset_bottom = 40.0
texture = ExtResource("2_jo6o1")
[node name="遮罩" type="TextureRect" parent="."]
offset_left = -35.0
offset_top = -3.0
offset_right = 585.0
offset_bottom = 313.0
texture = ExtResource("3_myoho")

View File

@ -1,9 +1,14 @@
extends CanvasLayer
@export var disable_crawl := false:
set(val):
disable_crawl = val
if disable_crawl and is_node_ready():
down_pressing = false
@export var show_cat := false
@export var show_cat_duration := 3.0
@export var show_cat_duration := 6.0
@onready var cat := $TextureCat as TextureRect
@onready var cat_fg := $TextureCat as TextureRect
func _ready():
@ -14,10 +19,15 @@ func _ready():
var camera = SceneManager.get_camera_marker()
camera.limit_left -= 100
camera.limit_right += 100
if show_cat:
create_tween().tween_property(cat, "modulate:a", 0.0, show_cat_duration)
camera.limit_top -= 50
# camera.limit_bottom += 50
if show_cat and not ArchiveManager.get_global_value("c02_boxcat_skip_intro"):
cat_fg.visible = true
var tween = create_tween()
tween.tween_interval(2.5)
tween.tween_property(cat_fg, "modulate:a", 0.0, show_cat_duration - 3)
else:
cat.visible = false
cat_fg.visible = false
var down_pressing = false:
@ -26,6 +36,7 @@ var down_pressing = false:
down_pressing = val
_try_toggle_crawl()
# 用来判断盒子猫是否在下蹲状态
var crawling = false:
set(val):
crawling = val
@ -57,7 +68,23 @@ func _try_toggle_crawl():
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("down") and not down_pressing:
if disable_crawl:
return
if event.is_action_pressed("down"):
get_viewport().set_input_as_handled()
if not down_pressing:
down_pressing = true
elif event.is_action_released("down") and down_pressing:
elif event.is_action_released("down"):
get_viewport().set_input_as_handled()
if down_pressing:
down_pressing = false
func show_footprint():
$TextureFootprint.show()
var frame = $TextureFrame
frame.modulate.a = 0.0
frame.visible = true
var tween = create_tween()
tween.tween_interval(2.0)
tween.tween_property(frame, "modulate:a", 1.0, 4.0)

View File

@ -1,8 +1,13 @@
[gd_scene load_steps=4 format=3 uid="uid://khwxm5qbfj3k"]
[gd_scene load_steps=9 format=3 uid="uid://khwxm5qbfj3k"]
[ext_resource type="Texture2D" uid="uid://xhksp8eu3jqy" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/ux_镂空.png" id="1_tgkyo"]
[ext_resource type="Script" uid="uid://ngb7wh7mqo0c" path="res://scene/ground/script/c02/盒子猫canvas_layer.gd" id="1_ygosu"]
[ext_resource type="Texture2D" uid="uid://d3es8r30qvxdl" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/ux_盒子猫初始特写.png" id="3_ygosu"]
[ext_resource type="Texture2D" uid="uid://tcjm158n8hnw" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/小脚脚印.png" id="4_bc5tk"]
[ext_resource type="Texture2D" uid="uid://ccfbubistf0ov" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/ux_镂空_纸.png" id="5_l6g3a"]
[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/prop/特写通用遮罩.png" id="6_aeggu"]
[ext_resource type="Texture2D" uid="uid://cylsq5cvhlp18" path="res://asset/art/tool/point_light.png" id="6_qw0v6"]
[ext_resource type="Texture2D" uid="uid://dx3i8mchgux1d" path="res://asset/art/scene/c02/s12_to_s17_盒子猫/ux_纸张.png" id="6_rxlkc"]
[node name="盒子猫CanvasLayer" type="CanvasLayer"]
layer = 0
@ -19,6 +24,8 @@ texture = ExtResource("1_tgkyo")
stretch_mode = 4
[node name="TextureCat" type="TextureRect" parent="."]
visible = false
light_mask = 17
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
@ -26,3 +33,77 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("3_ygosu")
[node name="遮罩" type="TextureRect" parent="TextureCat"]
layout_mode = 0
offset_left = -35.0
offset_top = -3.0
offset_right = 585.0
offset_bottom = 313.0
texture = ExtResource("6_aeggu")
[node name="TextureFrame" type="TextureRect" parent="."]
visible = false
light_mask = 17
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -50.5
offset_top = -68.5
offset_right = 50.5
offset_bottom = 68.5
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("5_l6g3a")
[node name="TexturePaper" type="TextureRect" parent="TextureFrame"]
modulate = Color(1, 1, 1, 0.329412)
light_mask = 17
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -171.0
offset_top = -98.0
offset_right = 153.0
offset_bottom = 105.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("6_rxlkc")
[node name="遮罩" type="TextureRect" parent="TextureFrame"]
layout_mode = 0
offset_left = -35.0
offset_top = -3.0
offset_right = 585.0
offset_bottom = 313.0
texture = ExtResource("6_aeggu")
[node name="TextureFootprint" type="TextureRect" parent="."]
visible = false
light_mask = 49
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -50.5
offset_top = -68.5
offset_right = 50.5
offset_bottom = 68.5
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("4_bc5tk")
[node name="PointLight2D" type="PointLight2D" parent="TextureFootprint"]
light_mask = 33
position = Vector2(45.5, 72.5)
range_item_cull_mask = 32
texture = ExtResource("6_qw0v6")

View File

@ -1,8 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://cdf2qe8l7323i"]
[gd_scene load_steps=3 format=3 uid="uid://cdf2qe8l7323i"]
[ext_resource type="Script" uid="uid://dnrql1t0j6v8i" path="res://scene/ground/script/c02/通用特写脚本.gd" id="1_lpmq3"]
[ext_resource type="Texture2D" uid="uid://cypvxj1vsl5yk" path="res://asset/art/scene/c02/s04_保卫科/花名册/bg_花名册桌面.png" id="2_l77sh"]
[ext_resource type="Texture2D" uid="uid://sx3i3lkt2vfd" path="res://asset/art/scene/c02/s04_保卫科/花名册/花名册封皮.png" id="3_sdpps"]
[ext_resource type="Texture2D" uid="uid://d1xr7g5huv5or" path="res://asset/art/scene/c02/s04_保卫科/ux_老鼠画像特写.png" id="2_eyynm"]
[node name="老鼠精画像" type="CanvasLayer"]
script = ExtResource("1_lpmq3")
@ -13,27 +12,4 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_l77sh")
[node name="TextureButton" type="TextureButton" parent="."]
visible = false
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -62.5
offset_top = -81.5
offset_right = 62.5
offset_bottom = 81.5
grow_horizontal = 2
grow_vertical = 2
texture_normal = ExtResource("3_sdpps")
[node name="Label" type="Label" parent="."]
offset_left = 225.0
offset_top = 149.0
offset_right = 345.0
offset_bottom = 179.0
theme_override_font_sizes/font_size = 24
text = "老鼠精画像"
texture = ExtResource("2_eyynm")

View File

@ -1,35 +1,113 @@
extends Node2D
@export var enabled := true
# 追击开始距离
@export var start_distance := 400
# 追击开始方位(左/右)
@export var from_left := true
# 追击速度
@export var speed := 30
# transfer_mode 意味着检测 portal_key然后显示
@export var transfer_mode := true
# 脚步声周期时间
@export var footstep_wait_time := 0.7
@export var footstep_wait_time := 0.5
# 追击速度
@export var speed := 50
# 转身范围,超过这个范围/在这个范围内不 hidden 都会转身
@export var trun_back_detact_x := 150
# 抓取范围,优先 catch_front 播放 猪头怪抓盒子猫
# 其次 catch_nearby 播放 猪头怪抓盒子猫后段
@export var catch_front_x_range := Vector2(55 - 3, 55 + 3)
@export var catch_nearby_x_range := Vector2(-10, 55)
# 观测范围,在观测范围内进入盒子仍旧会被抓
@export var watching_x := 180
@onready var sfx_footstep = $SfxFootstep as Sfx
# 允许被抓后重开游戏
var allow_restart_game := true
var footstep_timer
@onready var sfx_footstep = $SfxFootstep as Sfx2D
@onready var sprite2d = $AnimatedSprite2D as AnimatedSprite2D
# 检测到猫钻进盒子的过程
var cat_hiding_detacted = false
var footstep_timer := Timer.new()
var player
var camera
var catty_canvas_layer
# 运动&检测, 初始为 false
var move_and_detact = false:
set(val):
move_and_detact = val
toggle_footstep_sfx(move_and_detact)
if val and is_node_ready():
sprite2d.play("猪头怪走路")
# 启用的瞬间先执行检测
_physics_process(0.0)
func _ready() -> void:
var player = SceneManager.get_player()
# 高度对齐
SceneManager.get_ground().ready.connect(_on_ground_ready)
# 抓盒子猫后,传送回初始场景,跳过其 intro 过程(从纸面逐渐进入黑板粉笔空间)
ArchiveManager.archive.set_global_entry("c02_boxcat_skip_intro", true)
func _on_ground_ready():
player = SceneManager.get_player()
camera = SceneManager.get_camera_marker()
catty_canvas_layer = SceneManager.get_ground().get_node("盒子猫CanvasLayer")
var archive = ArchiveManager.archive as AssembledArchive
var portal = archive.entrance_portal
var chasing_started = ArchiveManager.get_global_value("c02_boxcat_chasing_started", false)
if archive.current_scene == "c02_s13":
# 开始追逐后,禁用二楼两只
if chasing_started and not transfer_mode:
queue_free()
return
elif not chasing_started:
if transfer_mode:
queue_free()
return
if portal == "left" and name != &"追猫猪头怪_左侧":
queue_free()
return
if portal != "left" and name != &"追猫猪头怪_右侧":
queue_free()
return
# c02_s13 开始追逐; call_deferred 延时设置
ArchiveManager.archive.set_global_entry.call_deferred(
"c02_boxcat_chasing_started", true
)
elif not chasing_started:
# 如果没有开始追逐,且不是 13 号场景(二楼),则销毁
queue_free()
return
# TODO 高度对齐
position.y = player.position.y
# 脚步声 timer
footstep_timer = Timer.new()
footstep_timer.one_shot = false
footstep_timer.autostart = false
footstep_timer.wait_time = footstep_wait_time
add_child(footstep_timer)
footstep_timer.timeout.connect(_on_footstep_timer_timeout)
add_child(footstep_timer)
if transfer_mode:
visible = false
var portal_node = (
SceneManager.get_ground().get_node("DeployLayer/portal_" + portal) as Portal2D
)
global_position.x = portal_node.global_position.x
# 禁用传送过来的 portal 3s
_disable_portal_a_few_seconds(portal_node)
# 3 秒后传送
get_tree().create_timer(1.0).timeout.connect(_do_transfer)
if GlobalConfig.DEBUG:
print("猪头怪 Transfer to: " + portal)
else:
move_and_detact = true
var footstep_count := 0
func _on_footstep_timer_timeout() -> void:
sfx_footstep.play()
footstep_count += 1
if footstep_count % 2 == 0:
# shake camera
camera.shake_camera(4.0, 5.0)
# 启用/禁用脚步声
@ -40,57 +118,102 @@ func toggle_footstep_sfx(play := true):
footstep_timer.stop()
var move_tween: Tween
# 禁用传送过来的 portal 3s
func _disable_portal_a_few_seconds(portal_node: Portal2D):
portal_node.enabled = false
await create_tween().tween_interval(3.0).finished
portal_node.enabled = true
# 开始追击
func start_chasing() -> void:
toggle_footstep_sfx(true)
# 初始位置与方向
# 停止追击
func stop_chasing() -> void:
toggle_footstep_sfx(false)
func _do_transfer():
if player.global_position.x > global_position.x:
_toggle_flip_h()
modulate.a = 0.0
visible = true
var tween = create_tween()
tween.tween_property(self, "modulate:a", 1.0, 2.0)
await tween.finished
move_and_detact = true
# 转身追击
func turn_back():
move_and_detact = false
# 呼吸一帧,然后转身
pass
sprite2d.play("猪头怪呼吸")
await sprite2d.animation_looped
_toggle_flip_h()
move_and_detact = true
# 正在抓取
var catching = false
# 检测到猫钻进盒子的过程
var cat_hiding_detacted = false
var catch_x_range = Vector2(5, 10)
func _toggle_flip_h():
sprite2d.flip_h = !sprite2d.flip_h
sprite2d.offset.x = -sprite2d.offset.x
func detact_pos(player_pos: Vector2):
if catching:
# 抓小猫
func do_catch(front: bool):
move_and_detact = false
SceneManager.freeze_player(0)
# 抓小猫时 lock palyer
SceneManager.lock_player()
# 呼吸一帧,然后抓取
sprite2d.play("猪头怪呼吸")
await sprite2d.animation_looped
player.hide_sprite = true
if front:
# 优先 catch_front 播放 猪头怪抓盒子猫
sprite2d.play("猪头怪抓盒子猫")
else:
# 其次 catch_nearby 播放 猪头怪抓盒子猫后段
sprite2d.play("猪头怪抓盒子猫后段")
# TODO 音效
SceneManager.pop_debug_dialog_info("音效", "抓取过程。 从捡小猫开始=" + str(front))
await sprite2d.animation_finished
# 等待动画播放后秒,再检查是否允许重开游戏
if allow_restart_game:
SceneManager.get_ground_loader().transition_to_scene("c02_s12", "left")
func _physics_process(delta: float) -> void:
if not move_and_detact:
return
var signed_x_diff = (player_pos.x - position.x) * sign(position.x)
var player_pos = player.global_position
# 检查是否需要转身
# 玩家到猪头怪面前的距离(有符号)
var signed_x_diff = player_pos.x - global_position.x
# 默认向左, flip_h 后向右
if not sprite2d.flip_h:
signed_x_diff *= -1
# 检查盒子猫状态
cat_hiding_detacted = true
# 如果离开一定范围,重置 catch_box_cat
# 猫是否在盒子里
var is_cat_hideen = catty_canvas_layer.crawling
# 检查隐藏小猫,在观测范围内进入盒子仍旧会被抓
if signed_x_diff < 0 or signed_x_diff > watching_x:
# 如果离开一定范围,重置 cat_hiding_detacted
cat_hiding_detacted = false
else:
cat_hiding_detacted = cat_hiding_detacted or not is_cat_hideen
# 检查是否抓取
if cat_hiding_detacted and is_in_range(signed_x_diff, catch_x_range):
catching = true
if not catching:
if cat_hiding_detacted or not is_cat_hideen:
if signed_x_diff > catch_front_x_range.x and signed_x_diff < catch_front_x_range.y:
# 优先 catch_front 播放 猪头怪抓盒子猫
do_catch(true)
return
elif signed_x_diff > catch_nearby_x_range.x and signed_x_diff < catch_nearby_x_range.y:
# 其次 catch_nearby 播放 猪头怪抓盒子猫后段
do_catch(false)
return
# 如果距离近,先走到对应位置,然后使用 猪头怪抓盒子猫
# 距离近,使用 猪头怪抓盒子猫后段 直接抓取
# 检查是否需要转身,超过这个范围/在这个范围内不 hidden 都会转身
if signed_x_diff < 0 and trun_back_detact_x < -signed_x_diff:
turn_back()
return
func is_in_range(x: float, x_range: Vector2) -> bool:
return x > x_range.x and x < x_range.y
# 更新追击位置
var mov_delta = speed * delta
if not sprite2d.flip_h:
mov_delta *= -1
global_position.x += mov_delta

View File

@ -19,12 +19,10 @@ max_distance = 600.0
attenuation = 1.7411
bus = &"game_sfx"
script = ExtResource("2_35vtd")
loop_round_time = null
debug_play = null
metadata/_custom_type_script = "uid://wapo47a1oddf"
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
z_index = 20
sprite_frames = ExtResource("4_3sbui")
animation = &"猪头怪呼吸"
autoplay = "猪头怪呼吸"
offset = Vector2(-29, -68)