部署c01与c02场景草稿;完善门的开锁状态转换;

This commit is contained in:
cakipaul 2025-01-30 12:50:52 +08:00
parent b2fe64c433
commit 4bf519aa1d
47 changed files with 1035 additions and 101 deletions

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://ddcburr57lb75" uid="uid://ddcburr57lb75"
path="res://.godot/imported/ux_衔接阴影.png-f9d8dfbf375ec0d6a0c01c639e85132c.ctex" path="res://.godot/imported/bg_衔接阴影.png-fd65f8c37c929ec1095b02c4814d8e4c.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://asset/art/scene/c02/s12_1014诡异版/ux_衔接阴影.png" source_file="res://asset/art/scene/c02/s12_1014诡异版/bg_衔接阴影.png"
dest_files=["res://.godot/imported/ux_衔接阴影.png-f9d8dfbf375ec0d6a0c01c639e85132c.ctex"] dest_files=["res://.godot/imported/bg_衔接阴影.png-fd65f8c37c929ec1095b02c4814d8e4c.ctex"]
[params] [params]

View File

@ -42,6 +42,7 @@ input_拼凑信件,按 E 旋转,方向键移动,,,,
ui_获得,获得,,,, ui_获得,获得,,,,
ui_退出,退出,Exit,,, ui_退出,退出,Exit,,,
ui_阅读,阅读,Read,,, ui_阅读,阅读,Read,,,
ui_检阅,检阅,,,,
ui_收起,收起,Hold,,, ui_收起,收起,Hold,,,
ui_夜行船1,百岁光阴一梦蝶。,,,, ui_夜行船1,百岁光阴一梦蝶。,,,,
ui_夜行船2,重回⾸往事堪嗟。,,,, ui_夜行船2,重回⾸往事堪嗟。,,,,
@ -76,14 +77,14 @@ c01_倾斜的洋相片,洋相片,,,,
c01_摆正的洋相片,是院长的女儿吗,,,, c01_摆正的洋相片,是院长的女儿吗,,,,
c01_s06_院长房间,这是院长的房间,,,, c01_s06_院长房间,这是院长的房间,,,,
c01_s06_小朋友房间,这是其他小朋友的房间,,,, c01_s06_小朋友房间,这是其他小朋友的房间,,,,
c02_绳子剪刀,绳子和剪刀,,,,
c02_寻人启事,"似乎是一张寻人启事 c02_寻人启事,"似乎是一张寻人启事
脸的部分被撕掉了,看不清",,,, 脸的部分被撕掉了,看不清",,,,
c02_玩具缺脑袋,这个玩具缺了个脑袋,,,,
c02_卫生宣传画,几张卫生宣传画,,,, c02_卫生宣传画,几张卫生宣传画,,,,
c02_老鼠洞,"一个老鼠洞 c02_老鼠洞,"一个老鼠洞
在这种楼里挺常见的",,,, 在这种楼里挺常见的",,,,
c02_十几年前的报纸,十几年前的报纸,,,, c02_十几年前的报纸,十几年前的报纸,,,,
c02_绳子剪刀,绳子和剪刀,,,,
c02_玩具缺脑袋,这个玩具缺了个脑袋,,,,
c02_又是寻人启示,又是那张寻人启示,,,, c02_又是寻人启示,又是那张寻人启示,,,,
c02_墙上的海报被撕掉了,墙上的海报被撕掉了,,,, c02_墙上的海报被撕掉了,墙上的海报被撕掉了,,,,
c02_井臭,井里有一股臭味,,,, c02_井臭,井里有一股臭味,,,,

1 keys zh_CN en _character _notes _tags
42 ui_获得 获得
43 ui_退出 退出 Exit
44 ui_阅读 阅读 Read
45 ui_检阅 检阅
46 ui_收起 收起 Hold
47 ui_夜行船1 百岁光阴一梦蝶。
48 ui_夜行船2 重回⾸往事堪嗟。
77 c01_s06_院长房间 这是院长的房间
78 c01_s06_小朋友房间 这是其他小朋友的房间
79 c02_绳子剪刀 c02_寻人启事 绳子和剪刀 似乎是一张寻人启事 脸的部分被撕掉了,看不清
c02_寻人启事 似乎是一张寻人启事 脸的部分被撕掉了,看不清
80 c02_玩具缺脑袋 c02_卫生宣传画 这个玩具缺了个脑袋 几张卫生宣传画
81 c02_卫生宣传画 c02_老鼠洞 几张卫生宣传画 一个老鼠洞 在这种楼里挺常见的
c02_老鼠洞 一个老鼠洞 在这种楼里挺常见的
82 c02_十几年前的报纸 十几年前的报纸
83 c02_又是寻人启示 c02_绳子剪刀 又是那张寻人启示 绳子和剪刀
84 c02_墙上的海报被撕掉了 c02_玩具缺脑袋 墙上的海报被撕掉了 这个玩具缺了个脑袋
85 c02_井臭 c02_又是寻人启示 井里有一股臭味 又是那张寻人启示
86 c02_墙上的海报被撕掉了 墙上的海报被撕掉了
87 c02_井臭 井里有一股臭味
88 c02_中药材 车上放了一些中药材
89 c02_排队 排队的人堵住了上楼的路
90 c02_不要出去 最好还是先不要出去

View File

@ -27,8 +27,10 @@
获得 [ID:ui_获得] 获得 [ID:ui_获得]
退出 [ID:ui_退出] 退出 [ID:ui_退出]
阅读 [ID:ui_阅读] 阅读 [ID:ui_阅读]
检阅 [ID:ui_检阅]
收起 [ID:ui_收起] 收起 [ID:ui_收起]
百岁光阴一梦蝶。 [ID:ui_夜行船1] 百岁光阴一梦蝶。 [ID:ui_夜行船1]
重回⾸往事堪嗟。 [ID:ui_夜行船2] 重回⾸往事堪嗟。 [ID:ui_夜行船2]
今⽇春来。明朝花谢。 [ID:ui_夜行船3] 今⽇春来。明朝花谢。 [ID:ui_夜行船3]
@ -76,12 +78,15 @@
这是其他小朋友的房间 [ID:c01_s06_小朋友房间] 这是其他小朋友的房间 [ID:c01_s06_小朋友房间]
# c02 # c02
绳子和剪刀 [ID:c02_绳子剪刀] # c02-s01 街道
似乎是一张寻人启事\n脸的部分被撕掉了看不清 [ID:c02_寻人启事] 似乎是一张寻人启事\n脸的部分被撕掉了看不清 [ID:c02_寻人启事]
这个玩具缺了个脑袋 [ID:c02_玩具缺脑袋] # c02-s02 走道
几张卫生宣传画 [ID:c02_卫生宣传画] 几张卫生宣传画 [ID:c02_卫生宣传画]
一个老鼠洞\n在这种楼里挺常见的 [ID:c02_老鼠洞] 一个老鼠洞\n在这种楼里挺常见的 [ID:c02_老鼠洞]
十几年前的报纸 [ID:c02_十几年前的报纸] 十几年前的报纸 [ID:c02_十几年前的报纸]
绳子和剪刀 [ID:c02_绳子剪刀]
这个玩具缺了个脑袋 [ID:c02_玩具缺脑袋]
又是那张寻人启示 [ID:c02_又是寻人启示] 又是那张寻人启示 [ID:c02_又是寻人启示]
墙上的海报被撕掉了 [ID:c02_墙上的海报被撕掉了] 墙上的海报被撕掉了 [ID:c02_墙上的海报被撕掉了]
井里有一股臭味 [ID:c02_井臭] 井里有一股臭味 [ID:c02_井臭]

View File

@ -108,7 +108,7 @@
[ext_resource type="Texture2D" uid="uid://bjvungu3tb155" path="res://asset/art/scene/c02/s12_1014诡异版/fg_1014前景.png" id="106_2h1ja"] [ext_resource type="Texture2D" uid="uid://bjvungu3tb155" path="res://asset/art/scene/c02/s12_1014诡异版/fg_1014前景.png" id="106_2h1ja"]
[ext_resource type="Texture2D" uid="uid://dcy3tf4td481s" path="res://asset/art/scene/c02/s12_1014诡异版/ux_恐怖幻境纸条1.png" id="107_lwdop"] [ext_resource type="Texture2D" uid="uid://dcy3tf4td481s" path="res://asset/art/scene/c02/s12_1014诡异版/ux_恐怖幻境纸条1.png" id="107_lwdop"]
[ext_resource type="Texture2D" uid="uid://ctswav7aw2vvb" path="res://asset/art/scene/c02/s12_1014诡异版/ux_恐怖幻境纸条2.png" id="108_1bjaj"] [ext_resource type="Texture2D" uid="uid://ctswav7aw2vvb" path="res://asset/art/scene/c02/s12_1014诡异版/ux_恐怖幻境纸条2.png" id="108_1bjaj"]
[ext_resource type="Texture2D" uid="uid://ddcburr57lb75" path="res://asset/art/scene/c02/s12_1014诡异版/ux_衔接阴影.png" id="109_xkscu"] [ext_resource type="Texture2D" uid="uid://ddcburr57lb75" path="res://asset/art/scene/c02/s12_1014诡异版/bg_衔接阴影.png" id="109_xkscu"]
[ext_resource type="Texture2D" uid="uid://da3v7s68728af" path="res://asset/art/scene/c02/s13_院子诡异版/bg_院子1楼(黑).png" id="110_1h1mj"] [ext_resource type="Texture2D" uid="uid://da3v7s68728af" path="res://asset/art/scene/c02/s13_院子诡异版/bg_院子1楼(黑).png" id="110_1h1mj"]
[ext_resource type="Texture2D" uid="uid://bgflt8ivx1fmp" path="res://asset/art/scene/c02/s13_院子诡异版/e_1014门锁.png" id="111_tgctv"] [ext_resource type="Texture2D" uid="uid://bgflt8ivx1fmp" path="res://asset/art/scene/c02/s13_院子诡异版/e_1014门锁.png" id="111_tgctv"]
[ext_resource type="Texture2D" uid="uid://dec0rudexctcs" path="res://asset/art/scene/c02/s13_院子诡异版/e_掉着小猫的绳子.png" id="112_lw5wp"] [ext_resource type="Texture2D" uid="uid://dec0rudexctcs" path="res://asset/art/scene/c02/s13_院子诡异版/e_掉着小猫的绳子.png" id="112_lw5wp"]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=10 format=3 uid="uid://73jm5qjy52vq"] [gd_scene load_steps=10 format=3 uid="uid://cb4s8y1y600og"]
[ext_resource type="Script" path="res://scene/dialog/balloon.gd" id="1_36de5"] [ext_resource type="Script" path="res://scene/dialog/balloon.gd" id="1_36de5"]
[ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_a8ve6"] [ext_resource type="PackedScene" uid="uid://ckvgyvclnwggo" path="res://addons/dialogue_manager/dialogue_label.tscn" id="2_a8ve6"]

View File

@ -64,6 +64,11 @@ var played: bool:
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
# setup default value
ground_archive = ArchiveManager.archive.ground_archive()
played = ground_archive.get_value(name, "played", false)
played_time = 0.0
sign_mark.enabled = enabled
_check_sign_display() _check_sign_display()
if Engine.is_editor_hint(): if Engine.is_editor_hint():
var animation_player = _get_animation_player() var animation_player = _get_animation_player()
@ -73,23 +78,20 @@ func _ready() -> void:
return return
if played: if played:
if GlobalConfig.DEBUG: if GlobalConfig.DEBUG:
print("Ambush has played, name=", name) print("Ambush has played, name=", name, " one_shot=", one_shot)
return if one_shot:
return
if on_first_enter_tree: if on_first_enter_tree:
_entered(null) _entered(null)
sign_mark.interacted.connect(_interacted) sign_mark.interacted.connect(_interacted)
area.body_entered.connect(_entered) area.body_entered.connect(_entered)
area.area_entered.connect(_area_entered) area.area_entered.connect(_area_entered)
sign_mark.enabled = enabled
# setup default value
ground_archive = ArchiveManager.archive.ground_archive()
played = ground_archive.get_value(name, "played", false)
played_time = 0.0
func _check_sign_display(): func _check_sign_display():
sign_mark.display_sign = trigger_mode == "interact" and (not one_shot or not played) sign_mark.display_sign = trigger_mode == "interact" and (not one_shot or not played)
if one_shot and played:
sign_mark.enabled = false
func _get_animation_player() -> AnimationPlayer: func _get_animation_player() -> AnimationPlayer:
var node = get_parent() var node = get_parent()

View File

@ -28,7 +28,8 @@ var content_key: String = ""
@onready var content_label = %ContentLabel as Label @onready var content_label = %ContentLabel as Label
@onready var tip_label = %TipLabel as Label @onready var tip_label = %TipLabel as Label
var tip_cover = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读") var tip_cover_hide_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读")
var tip_cover_without_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_检阅")
var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起") var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起")
static var content_dialogue = ( static var content_dialogue = (
@ -43,7 +44,7 @@ func _ready() -> void:
$InspectLayer.layer = GlobalConfig.CANVAS_LAYER_PROP_INSPECTOR $InspectLayer.layer = GlobalConfig.CANVAS_LAYER_PROP_INSPECTOR
container.modulate.a = 0.0 container.modulate.a = 0.0
content_label.text = _get_tr_content() content_label.text = _get_tr_content()
tip_label.text = tip_cover tip_label.text = tip_cover_hide_notes
cover_rect.texture = texture_cover cover_rect.texture = texture_cover
if Engine.is_editor_hint(): if Engine.is_editor_hint():
return return
@ -79,7 +80,10 @@ func _on_interacted() -> void:
sign_mark.display_sign = false sign_mark.display_sign = false
SceneManager.freeze_player(0.0, PlayerAnimationConfig.ACTION_LOOKUP_WALL) SceneManager.freeze_player(0.0, PlayerAnimationConfig.ACTION_LOOKUP_WALL)
cover_rect.texture = texture_cover cover_rect.texture = texture_cover
tip_label.text = tip_cover if content_key == "":
tip_label.text = tip_cover_without_notes
else:
tip_label.text = tip_cover_hide_notes
_blink_label(true) _blink_label(true)
start_inspecting.emit() start_inspecting.emit()
elif status == STATUS_INSPECTING_COVER: elif status == STATUS_INSPECTING_COVER:
@ -90,7 +94,10 @@ func _on_interacted() -> void:
elif status == STATUS_INSPECTING_NOTES: elif status == STATUS_INSPECTING_NOTES:
sfx.play() sfx.play()
status = STATUS_INSPECTING_COVER status = STATUS_INSPECTING_COVER
tip_label.text = tip_cover if content_key == "":
tip_label.text = tip_cover_without_notes
else:
tip_label.text = tip_cover_hide_notes
create_tween().tween_property(container, "modulate:a", 0.0, 0.15) create_tween().tween_property(container, "modulate:a", 0.0, 0.15)

View File

@ -21,13 +21,13 @@ curve = SubResource("Curve_sbmii")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_44bc2"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_44bc2"]
particle_flag_disable_z = true particle_flag_disable_z = true
emission_shape = 3 emission_shape = 3
emission_box_extents = Vector3(-5, 100, 1) emission_box_extents = Vector3(-100, 200, 1)
direction = Vector3(-50, -2, 0) direction = Vector3(-100, 0, 0)
spread = 35.0 spread = 10.0
initial_velocity_min = 5.0 initial_velocity_min = 10.0
initial_velocity_max = 10.0 initial_velocity_max = 20.0
angular_velocity_min = -10.0 angular_velocity_min = -10.0
angular_velocity_max = 20.0 angular_velocity_max = 9.99998
angular_velocity_curve = SubResource("CurveTexture_uoprq") angular_velocity_curve = SubResource("CurveTexture_uoprq")
gravity = Vector3(0, 0, 0) gravity = Vector3(0, 0, 0)
scale_min = 0.1 scale_min = 0.1
@ -112,9 +112,10 @@ color_ramp = SubResource("GradientTexture1D_5cty7")
amount = 150 amount = 150
process_material = SubResource("ParticleProcessMaterial_44bc2") process_material = SubResource("ParticleProcessMaterial_44bc2")
texture = ExtResource("1_lv5jb") texture = ExtResource("1_lv5jb")
lifetime = 100.0 lifetime = 200.0
preprocess = 50.0 preprocess = 100.0
visibility_rect = Rect2(0, -130, -1500, 260) speed_scale = 2.0
visibility_rect = Rect2(0, -130, -5000, 260)
trail_sections = 16 trail_sections = 16
metadata/_edit_vertical_guides_ = [-721.0] metadata/_edit_vertical_guides_ = [-721.0]
@ -122,18 +123,19 @@ metadata/_edit_vertical_guides_ = [-721.0]
amount = 200 amount = 200
process_material = SubResource("ParticleProcessMaterial_3xiox") process_material = SubResource("ParticleProcessMaterial_3xiox")
texture = ExtResource("2_wgqpb") texture = ExtResource("2_wgqpb")
lifetime = 100.0 lifetime = 200.0
preprocess = 51.0 preprocess = 100.0
speed_scale = 1.2 speed_scale = 2.0
visibility_rect = Rect2(0, -130, -1500, 260) visibility_rect = Rect2(0, -130, -5000, 260)
trail_sections = 16 trail_sections = 16
[node name="black" type="GPUParticles2D" parent="."] [node name="black" type="GPUParticles2D" parent="."]
amount = 180 amount = 180
process_material = SubResource("ParticleProcessMaterial_wa8gc") process_material = SubResource("ParticleProcessMaterial_wa8gc")
texture = ExtResource("3_abc1v") texture = ExtResource("3_abc1v")
lifetime = 100.0 lifetime = 200.0
preprocess = 52.0 preprocess = 100.0
visibility_rect = Rect2(0, -130, -1500, 260) speed_scale = 2.0
visibility_rect = Rect2(0, -130, -5000, 260)
trail_enabled = true trail_enabled = true
trail_sections = 16 trail_sections = 16

View File

@ -1,10 +1,11 @@
@tool @tool
class_name Portal2D extends Sprite2D class_name Portal2D extends Sprite2D
@export_multiline var debug_note: String = ""
@export var enabled := true: @export var enabled := true:
set(val): set(val):
enabled = val enabled = val
_check_sign_mark() _check_sign_mark_and_texture()
@export var immediately := true @export var immediately := true
@export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9") var portal_name := "left": @export_enum("left", "right", "1", "2", "3", "4", "5", "6", "7", "8", "9") var portal_name := "left":
set(value): set(value):
@ -18,58 +19,125 @@ class_name Portal2D extends Sprite2D
var target_portal := "none": var target_portal := "none":
set(value): set(value):
target_portal = value target_portal = value
_check_sign_mark() _check_sign_mark_and_texture()
@export_enum("default", "locked", "opened") var status := "default":
set(value):
status = value
# 只在编辑器模式下检查
if is_node_ready() and Engine.is_editor_hint():
_check_sign_mark_and_texture()
@export var default_texture: Texture2D @export var default_texture: Texture2D
@export var opened_texture: Texture2D @export var opened_texture: Texture2D
@export var opened := false: @export var default_sign_texture: Texture2D
set(new_val): @export var opened_sign_texture: Texture2D
opened = new_val @export var matched_sign_texture: Texture2D
_checkout_texture() @export var closed_sign_texture: Texture2D
var prop_key := ""
@export var disable_key_after_used := true
@onready var sfx = %Sfx as Sfx # 穿过通道的音效
@onready var sfx_default = %SfxDefault as Sfx
# 开锁的音效
@onready var sfx_open = %SfxOpen as Sfx
# 进门的音效
@onready var sfx_enter = %SfxEnter as Sfx
# 门被锁定,无法打开的音效
@onready var sfx_locked = %SfxLocked as Sfx
@onready var sign_mark = %Sign as Sign @onready var sign_mark = %Sign as Sign
@onready var area2d = %Area2D as Area2D @onready var area2d = %Area2D as Area2D
var activated := false var activated := false
var action_times := 0
static var item_config_res = preload("res://asset/dialogue/item_description.dialogue")
var items: PackedStringArray
var ground_archive: GroundArchive
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
name = "portal_" + portal_name name = "portal_" + portal_name
_checkout_texture()
_check_sign_mark()
if Engine.is_editor_hint(): if Engine.is_editor_hint():
_check_sign_mark_and_texture()
_reload_items()
return return
ground_archive = ArchiveManager.archive.ground_archive()
status = ground_archive.get_value(name, "status", status)
if GlobalConfig.DEBUG:
print("Portal read status [", name, "] status=", status)
_check_sign_mark_and_texture()
area2d.body_entered.connect(_reset) area2d.body_entered.connect(_reset)
area2d.body_exited.connect(_on_cancel) area2d.body_exited.connect(_on_cancel)
sign_mark.interacted.connect(_on_interacted) sign_mark.interacted.connect(_on_interacted)
sign_mark.cancel.connect(_on_cancel) sign_mark.cancel.connect(_on_cancel)
# if GlobalConfig.DEBUG:
# var label = Label.new()
# label.text = portal_name
# label.name = "Label"
# add_child(label)
func _checkout_texture():
if opened and opened_texture:
texture = opened_texture
else:
texture = default_texture
func _check_sign_mark(): func _reload_items() -> void:
items.clear()
var id = item_config_res.titles["PropItems"]
var current_line = item_config_res.lines[id]
while current_line:
if current_line.has("translation_key"):
items.append(current_line.translation_key)
if not current_line.has("next_id") or current_line.next_id == "end":
break
current_line = item_config_res.lines[current_line.next_id]
notify_property_list_changed()
func _check_sign_mark_and_texture():
if not is_node_ready(): if not is_node_ready():
return return
if status == "opened" and opened_texture:
texture = opened_texture
elif default_texture:
texture = default_texture
match status:
"locked":
sign_mark.sprite2d.texture = closed_sign_texture
"opened":
sign_mark.sprite2d.texture = opened_sign_texture
"default":
sign_mark.sprite2d.texture = default_sign_texture
if target_portal == "none" or not enabled: if target_portal == "none" or not enabled:
sign_mark.enabled = false sign_mark.enabled = false
else: else:
sign_mark.enabled = true sign_mark.enabled = true
var interact_mutex = Mutex.new()
func _on_interacted() -> void: func _on_interacted() -> void:
if target_portal == "none": if target_portal == "none" or not enabled:
return
interact_mutex.lock()
if status == "locked":
# 检查是否有钥匙,尝试打开
var key = SceneManager.get_current_prop(false)
if prop_key and key == prop_key:
sfx_open.global_play()
status = "opened"
ground_archive.set_pair(name, "status", status)
if disable_key_after_used:
SceneManager.disable_prop_item(key)
else:
sfx_locked.global_play()
sign_mark.invalid_shake()
_check_sign_mark_and_texture()
interact_mutex.unlock()
# 开锁尝试后,哪怕开锁成功,也需要下次操作再进入,而不是立即传送
return return
# 传送queue free 导致 sfx 无法播放,使用全局声源 # 传送queue free 导致 sfx 无法播放,使用全局声源
sfx.global_play() if status == "default":
sfx_default.global_play()
elif status == "opened":
sfx_enter.global_play()
else:
sfx_locked.global_play()
interact_mutex.unlock()
return
interact_mutex.unlock()
if GlobalConfig.DEBUG: if GlobalConfig.DEBUG:
print("传送前往", target_scene, target_portal, " immediately=", immediately) print("传送前往", target_scene, target_portal, " immediately=", immediately)
var ground_loader = SceneManager.get_ground_loader() as GroundLoader var ground_loader = SceneManager.get_ground_loader() as GroundLoader
@ -79,12 +147,34 @@ func _on_interacted() -> void:
func _on_cancel(_body = null): func _on_cancel(_body = null):
activated = false activated = false
# disconnect signal
var prop_hud = SceneManager.get_prop_hud() as PropHud
if prop_hud and prop_hud.current_item_changed.is_connected(_set_sign_texture_to_prop):
prop_hud.current_item_changed.disconnect(_set_sign_texture_to_prop)
func _reset(_body): func _reset(_body):
_check_sign_mark_and_texture()
activated = true activated = true
if status == "locked":
var key = SceneManager.get_current_prop(false)
if key:
_set_sign_texture_to_prop(key)
var prop_hud = SceneManager.get_prop_hud() as PropHud
if not prop_hud.current_item_changed.is_connected(_set_sign_texture_to_prop):
prop_hud.current_item_changed.connect(_set_sign_texture_to_prop)
# 根据当前 prop调整 sign 所显示的 texture
func _set_sign_texture_to_prop(key):
if not prop_key or prop_key == key:
sign_mark.sprite2d.texture = matched_sign_texture
else:
sign_mark.sprite2d.texture = closed_sign_texture
# 暂时不启用自动传送 # 暂时不启用自动传送
# var action_times := 0
# func _input(event: InputEvent) -> void: # func _input(event: InputEvent) -> void:
# # 长按自动传送 # # 长按自动传送
# if activated: # if activated:
@ -108,3 +198,27 @@ func _reset(_body):
# action_times = 0 # action_times = 0
# %Sfx.play() # %Sfx.play()
# _on_interacted() # _on_interacted()
func _get_property_list() -> Array[Dictionary]:
return [
{
"name": "prop_key",
"type": TYPE_STRING,
"hint": PROPERTY_HINT_ENUM_SUGGESTION,
"hint_string": ",".join(items),
}
]
func _get(property: StringName) -> Variant:
if property == "prop_key":
return prop_key
return null
func _set(property: StringName, value: Variant) -> bool:
if property == "prop_key":
prop_key = value
return true
return false

View File

@ -1,10 +1,30 @@
[gd_scene load_steps=7 format=3 uid="uid://61pis75a8fdq"] [gd_scene load_steps=15 format=3 uid="uid://61pis75a8fdq"]
[ext_resource type="Script" path="res://scene/entity/portal.gd" id="1_jyh6v"] [ext_resource type="Script" path="res://scene/entity/portal.gd" id="1_jyh6v"]
[ext_resource type="Texture2D" uid="uid://bc4lpa8aao60n" path="res://asset/art/ui/action_mark/传送.png" id="2_ay30q"] [ext_resource type="Texture2D" uid="uid://bc4lpa8aao60n" path="res://asset/art/ui/action_mark/传送.png" id="2_ay30q"]
[ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="3_6khux"] [ext_resource type="PackedScene" uid="uid://c85t6stvytvjn" path="res://scene/entity/general/sfx.tscn" id="3_6khux"]
[ext_resource type="AudioStream" uid="uid://bqh3at8fbi75s" path="res://asset/audio/sfx/ui/页面转换声.wav" id="3_lluer"] [ext_resource type="AudioStream" uid="uid://bqh3at8fbi75s" path="res://asset/audio/sfx/ui/页面转换声.wav" id="3_lluer"]
[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_ty1ds"] [ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_ty1ds"]
[ext_resource type="Texture2D" uid="uid://b343nvvbtpglb" path="res://asset/art/ui/互动提示符/ui 像素版_纯白.png" id="5_3s5wu"]
[ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/ui/开锁声.mp3" id="5_l48hy"]
[ext_resource type="AudioStream" uid="uid://c7k1gohcfiyg3" path="res://asset/audio/sfx/ui/开门.mp3" id="6_icbmu"]
[ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/ui/门锁互动.mp3" id="7_bjcty"]
[sub_resource type="AtlasTexture" id="AtlasTexture_20tmu"]
atlas = ExtResource("5_3s5wu")
region = Rect2(495, 84, 39, 39)
[sub_resource type="AtlasTexture" id="AtlasTexture_nnhgo"]
atlas = ExtResource("5_3s5wu")
region = Rect2(495, 267, 39, 39)
[sub_resource type="AtlasTexture" id="AtlasTexture_l8twy"]
atlas = ExtResource("5_3s5wu")
region = Rect2(480, 468, 63, 63)
[sub_resource type="AtlasTexture" id="AtlasTexture_lxo3t"]
atlas = ExtResource("5_3s5wu")
region = Rect2(762, 468, 63, 63)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_munml"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_munml"]
resource_local_to_scene = true resource_local_to_scene = true
@ -12,22 +32,43 @@ size = Vector2(25, 130)
[node name="portal_left" type="Sprite2D"] [node name="portal_left" type="Sprite2D"]
script = ExtResource("1_jyh6v") script = ExtResource("1_jyh6v")
default_sign_texture = SubResource("AtlasTexture_20tmu")
opened_sign_texture = SubResource("AtlasTexture_nnhgo")
matched_sign_texture = SubResource("AtlasTexture_l8twy")
closed_sign_texture = SubResource("AtlasTexture_lxo3t")
prop_key = ""
[node name="Sfx" parent="." instance=ExtResource("3_6khux")] [node name="SfxDefault" parent="." instance=ExtResource("3_6khux")]
unique_name_in_owner = true unique_name_in_owner = true
stream = ExtResource("3_lluer") stream = ExtResource("3_lluer")
file = "页面转换声.wav" file = "页面转换声.wav"
[node name="SfxOpen" parent="." instance=ExtResource("3_6khux")]
unique_name_in_owner = true
stream = ExtResource("5_l48hy")
file = "开锁声.mp3"
[node name="SfxEnter" parent="." instance=ExtResource("3_6khux")]
unique_name_in_owner = true
stream = ExtResource("6_icbmu")
file = "开门.mp3"
[node name="SfxLocked" parent="." instance=ExtResource("3_6khux")]
unique_name_in_owner = true
stream = ExtResource("7_bjcty")
file = "门锁互动.mp3"
[node name="Sign" parent="." instance=ExtResource("4_ty1ds")] [node name="Sign" parent="." instance=ExtResource("4_ty1ds")]
unique_name_in_owner = true unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
offset_top = -47.0 offset_top = -47.0
offset_right = 347.0 offset_right = 347.0
offset_bottom = 287.0 offset_bottom = 287.0
scale = Vector2(0.05, 0.05) enabled = false
[node name="Sprite2D" parent="Sign/TextureContainer" index="0"] [node name="Sprite2D" parent="Sign/TextureContainer" index="0"]
position = Vector2(0, 10) position = Vector2(0, 10)
texture = ExtResource("2_ay30q") texture = SubResource("AtlasTexture_20tmu")
[node name="PointLight2D" type="PointLight2D" parent="."] [node name="PointLight2D" type="PointLight2D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

View File

@ -21,7 +21,6 @@ var default_portal := "left"
replace_player_to_portal = false replace_player_to_portal = false
if is_node_ready(): if is_node_ready():
move_player_to_portal(default_portal) move_player_to_portal(default_portal)
_reset_player_y()
@export_group("Sound") @export_group("Sound")
@export_enum("none", "ghost", "walking", "running", "crawling", "concrete") @export_enum("none", "ghost", "walking", "running", "crawling", "concrete")
var footstep_type: String = "concrete": var footstep_type: String = "concrete":
@ -30,6 +29,7 @@ var footstep_type: String = "concrete":
if is_node_ready(): if is_node_ready():
_load_footstep_audio() _load_footstep_audio()
@onready var player_line = %PlayerLine2D as Line2D
@onready var player = %MainPlayer as MainPlayer @onready var player = %MainPlayer as MainPlayer
@onready var directional_light := %DirectionalLight2D as DirectionalLight2D @onready var directional_light := %DirectionalLight2D as DirectionalLight2D
@onready var bg_sprite = %BGSprite2D as Sprite2D @onready var bg_sprite = %BGSprite2D as Sprite2D
@ -56,6 +56,13 @@ func _ready() -> void:
if GlobalConfig.DEBUG and (not Engine.is_editor_hint()) and (not get_parent() is GroundLoader): if GlobalConfig.DEBUG and (not Engine.is_editor_hint()) and (not get_parent() is GroundLoader):
call_deferred("_restart_from_main") call_deferred("_restart_from_main")
return return
# bg layer 位置,在编辑器中显示在正后方
if Engine.is_editor_hint():
$BGLayer.offset.y = -159
else:
$BGLayer.offset.y = 0
# 隐藏 player_line
player_line.visible = false
# 检查 scene_name 是否合法 # 检查 scene_name 是否合法
scene_name = scene_name.strip_edges() scene_name = scene_name.strip_edges()
if get_parent().name.begins_with("S") and (not scene_name or scene_name.length() != 7): if get_parent().name.begins_with("S") and (not scene_name or scene_name.length() != 7):
@ -99,21 +106,23 @@ func _reset_player_y():
func _set_camera_and_player_boundary(): func _set_camera_and_player_boundary():
# set current_boarder by bg size # set current_boarder by bg size
var camera_rect = Rect2(0, -158, 564, 316)
var player_rect = Rect2(0, -158, 564, 316)
if bg_sprite.texture and not Engine.is_editor_hint(): if bg_sprite.texture and not Engine.is_editor_hint():
var size = bg_sprite.texture.get_size() * bg_sprite.scale var size = bg_sprite.texture.get_size() * bg_sprite.scale
# camera rect # camera rect
var camera_size = Vector2(max(564.0, size.x), max(size.y, 316.0)) var camera_size = size
camera_size.x += bg_sprite.position.x
camera_size = Vector2(max(564.0, camera_size.x), max(camera_size.y, 316.0))
var camera_upleft = Vector2(0, -camera_size.y / 2.0) var camera_upleft = Vector2(0, -camera_size.y / 2.0)
var camera_rect = Rect2(camera_upleft, camera_size) camera_rect = Rect2(camera_upleft, camera_size)
# player rect should be set centered, with 30px x padding # player rect should be set centered, with 30px x padding
var up_left = Vector2(0, -size.y / 2.0) player_rect.position.x = player_line.get_point_position(0).x
size.x -= 36.0 player_rect.size.x = player_line.get_point_position(1).x - player_rect.position.x
up_left.x = bg_sprite.position.x + 18.0 SceneManager.set_camera_boundary(camera_rect)
var player_rect = Rect2(up_left, size) SceneManager.set_player_boundary(player_rect)
SceneManager.set_camera_boundary(camera_rect) if GlobalConfig.DEBUG:
SceneManager.set_player_boundary(player_rect) print("_set_camera_and_player_boundary:", camera_rect, player_rect)
if GlobalConfig.DEBUG:
print("_set_camera_and_player_boundary:", camera_rect, player_rect)
func _load_footstep_audio(): func _load_footstep_audio():
@ -133,6 +142,11 @@ func move_player_to_portal(portal_name: String) -> void:
var portal_node = get_node_or_null("DeployLayer/portal_" + portal_name) as Node2D var portal_node = get_node_or_null("DeployLayer/portal_" + portal_name) as Node2D
if portal_node: if portal_node:
player.global_position.x = portal_node.global_position.x player.global_position.x = portal_node.global_position.x
if portal_name == "left":
player.set_facing_direction(Vector2.RIGHT)
elif portal_name == "right":
player.set_facing_direction(Vector2.LEFT)
_reset_player_y()
if GlobalConfig.DEBUG: if GlobalConfig.DEBUG:
print("move player to portal:", portal_name, portal_node.global_position) print("move player to portal:", portal_name, portal_node.global_position)
else: else:

View File

@ -19,12 +19,12 @@ script = ExtResource("1_0vrlo")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
[node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="BGLayer" type="CanvasLayer" parent="."]
layer = -1 layer = -1
offset = Vector2(0, -159) offset = Vector2(0, -159)
transform = Transform2D(1, 0, 0, 1, 0, -159) transform = Transform2D(1, 0, 0, 1, 0, -159)
[node name="BGColorRect" type="ColorRect" parent="CanvasLayer"] [node name="BGColorRect" type="ColorRect" parent="BGLayer"]
z_index = -10 z_index = -10
custom_minimum_size = Vector2(664, 318) custom_minimum_size = Vector2(664, 318)
anchors_preset = 4 anchors_preset = 4
@ -48,17 +48,17 @@ offset = Vector2(0, -120)
unique_name_in_owner = true unique_name_in_owner = true
[node name="portal_left" parent="DeployLayer" instance=ExtResource("3_t73yw")] [node name="portal_left" parent="DeployLayer" instance=ExtResource("3_t73yw")]
position = Vector2(26, -1) position = Vector2(41, 6)
[node name="portal_right" parent="DeployLayer" instance=ExtResource("3_t73yw")] [node name="portal_right" parent="DeployLayer" instance=ExtResource("3_t73yw")]
position = Vector2(530, 0) position = Vector2(518, 6)
portal_name = "right" portal_name = "right"
[node name="AmbientLayer" type="Node2D" parent="."] [node name="AmbientLayer" type="Node2D" parent="."]
[node name="MainPlayer" parent="." node_paths=PackedStringArray("camera_marker") instance=ExtResource("3_atha7")] [node name="MainPlayer" parent="." node_paths=PackedStringArray("camera_marker") instance=ExtResource("3_atha7")]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2(26, 88) position = Vector2(41, 88)
camera_marker = NodePath("../CameraFocusMarker") camera_marker = NodePath("../CameraFocusMarker")
[node name="CameraFocusMarker" parent="." node_paths=PackedStringArray("focusing_node") instance=ExtResource("4_mgk0a")] [node name="CameraFocusMarker" parent="." node_paths=PackedStringArray("focusing_node") instance=ExtResource("4_mgk0a")]
@ -77,9 +77,13 @@ motion_scale = Vector2(1.1, 1.1)
[node name="FGSprite2D" type="Sprite2D" parent="ParallaxForeground/FGParallaxLayer"] [node name="FGSprite2D" type="Sprite2D" parent="ParallaxForeground/FGParallaxLayer"]
unique_name_in_owner = true unique_name_in_owner = true
position = Vector2(-34, -118)
texture = ExtResource("5_i5hii") texture = ExtResource("5_i5hii")
centered = false centered = false
offset = Vector2(0, -120)
[node name="PlayerLine2D" type="Line2D" parent="ParallaxForeground"]
unique_name_in_owner = true
points = PackedVector2Array(37, 150, 519, 150)
[node name="SubViewportContainer" type="SubViewportContainer" parent="."] [node name="SubViewportContainer" type="SubViewportContainer" parent="."]
offset_right = 2256.0 offset_right = 2256.0

View File

@ -724,11 +724,13 @@ texture_scale = 0.33
height = 50.0 height = 50.0
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(26, 88)
character = "小小蝶" character = "小小蝶"
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(21, 39) position = Vector2(21, 39)
texture = ExtResource("3_vmr0f") texture = ExtResource("3_vmr0f")
offset = Vector2(0, 0)
[node name="SubViewportContainer" parent="Ground" index="8"] [node name="SubViewportContainer" parent="Ground" index="8"]
offset_top = -2.0 offset_top = -2.0

View File

@ -423,6 +423,7 @@ sprite_frames = ExtResource("2_l4axy")
animation = &"院长呼吸" animation = &"院长呼吸"
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
visible = false
texture = null texture = null
[node name="动态前景" parent="Ground/ParallaxForeground/FGParallaxLayer" index="1" instance=ExtResource("8_ouldg")] [node name="动态前景" parent="Ground/ParallaxForeground/FGParallaxLayer" index="1" instance=ExtResource("8_ouldg")]
@ -433,6 +434,9 @@ animation = &"fg_花圃"
centered = false centered = false
offset = Vector2(0, -159) offset = Vector2(0, -159)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 3200, 150)
[node name="DirectionalLight2D" parent="Ground" index="9"] [node name="DirectionalLight2D" parent="Ground" index="9"]
visible = false visible = false

View File

@ -13,6 +13,7 @@ scene_name = "c01_s08"
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_0lque") script = ExtResource("2_0lque")
oneshot_animation = ""
[node name="portal_right" parent="Ground/DeployLayer" index="1"] [node name="portal_right" parent="Ground/DeployLayer" index="1"]
immediately = false immediately = false

View File

@ -14,6 +14,7 @@ scene_name = "c01_s09"
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_u053j") script = ExtResource("2_u053j")
oneshot_animation = ""
[node name="portal_right" parent="Ground/DeployLayer" index="1"] [node name="portal_right" parent="Ground/DeployLayer" index="1"]
immediately = false immediately = false

View File

@ -13,6 +13,7 @@ scene_name = "c01_s10"
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_4kx83") script = ExtResource("2_4kx83")
oneshot_animation = ""
[node name="portal_right" parent="Ground/DeployLayer" index="1"] [node name="portal_right" parent="Ground/DeployLayer" index="1"]
immediately = false immediately = false

View File

@ -224,7 +224,7 @@ position = Vector2(2549, 60)
texture = ExtResource("4_vaqc6") texture = ExtResource("4_vaqc6")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(871, -143) position = Vector2(871, 0)
scale = Vector2(1.18, 1.18) scale = Vector2(1.18, 1.18)
texture = ExtResource("3_fduds") texture = ExtResource("3_fduds")
@ -241,4 +241,7 @@ position = Vector2(6924, 31)
texture = ExtResource("5_rbgqg") texture = ExtResource("5_rbgqg")
centered = false centered = false
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 10050, 150)
[editable path="Ground"] [editable path="Ground"]

View File

@ -1,15 +1,15 @@
[gd_scene load_steps=6 format=3 uid="uid://bbs7yy5aofw1v"] [gd_scene load_steps=5 format=3 uid="uid://bbs7yy5aofw1v"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_gdcov"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_gdcov"]
[ext_resource type="Texture2D" uid="uid://dibfvlmarlkg6" path="res://asset/art/scene/c02/s01_街道/bg_公寓入口.png" id="2_ni1a4"] [ext_resource type="Texture2D" uid="uid://dibfvlmarlkg6" path="res://asset/art/scene/c02/s01_街道/bg_公寓入口.png" id="2_ni1a4"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s01_animation.gd" id="2_uuwn3"] [ext_resource type="Script" path="res://scene/ground/scene/c02/s01_animation.gd" id="2_uuwn3"]
[ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_6lnxd"] [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_6lnxd"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_vgxa0"]
[node name="S01" type="Node2D"] [node name="S01" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_gdcov")] [node name="Ground" parent="." instance=ExtResource("1_gdcov")]
scene_name = "c02_s01" scene_name = "c02_s01"
player_y = 55
[node name="AnimationPlayer" parent="Ground" index="0"] [node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_uuwn3") script = ExtResource("2_uuwn3")
@ -30,23 +30,25 @@ position = Vector2(392, 2)
target_scene = "c02_s02" target_scene = "c02_s02"
target_portal = "left" target_portal = "left"
[node name="Note" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_6lnxd")] [node name="Note寻人启事" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_6lnxd")]
position = Vector2(250, -22) position = Vector2(250, -22)
mode = null title_filter = "c02"
note_key = "c02_寻人启事"
[node name="Note门口" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6lnxd")] [node name="Note门口" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6lnxd")]
position = Vector2(311, -27) position = Vector2(311, -27)
mode = "ballon" mode = "ballon"
dialogue = "c02" dialogue = "c02"
title_filter = "c02"
[node name="Ambush" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_vgxa0")] note_key = "c02_s01_门口"
position = Vector2(135, 56)
hook_method = null
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(78, 88) position = Vector2(78, 103)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 720, 150)
[editable path="Ground"] [editable path="Ground"]

View File

@ -22,9 +22,12 @@ func _on_ground_ready() -> void:
paper_man = $"../DeployLayer/Ambush纸人" paper_man = $"../DeployLayer/Ambush纸人"
paper_man.enabled = data.display_paper_man paper_man.enabled = data.display_paper_man
paper_man.visible = data.display_paper_man paper_man.visible = data.display_paper_man
paper_man.get_node("wall/CollisionShape2D").disabled = !data.display_paper_man
func _oneshot_wind(): func _oneshot_wind():
SceneManager.get_player().global_position.x = 53
SceneManager.get_player().set_facing_direction(Vector2.RIGHT)
SceneManager.freeze_player(0) SceneManager.freeze_player(0)
%MainPlayer.visible = false %MainPlayer.visible = false
wind_blows.visible = true wind_blows.visible = true
@ -43,17 +46,18 @@ func _on_dialogue_ended(_res):
SceneManager.release_player() SceneManager.release_player()
func lumber_interacted():
SceneManager.pop_debug_dialog_info("美术", "杂物堆⾥有眼睛瞟向玩家/眨动,然后消失(动画)")
_display_paper_man()
func _display_paper_man(): func _display_paper_man():
data.display_paper_man = true set_data("display_paper_man", true)
paper_man.enabled = true
paper_man.visible = true paper_man.visible = true
paper_man.enabled = true
paper_man.get_node("Sfx").play() paper_man.get_node("Sfx").play()
paper_man.get_node("wall/CollisionShape2D").disabled = false
func paper_man_interacted(): func paper_man_interacted():
SceneManager.enable_prop_item("prop_1012钥匙") SceneManager.enable_prop_item("prop_1012钥匙")
func lumber_interacted():
SceneManager.pop_debug_dialog_info("美术", "杂物堆⾥有眼睛瞟向玩家/眨动,然后消失(动画)")
_display_paper_man()

View File

@ -62,6 +62,7 @@ data = {
oneshot_animation = "oneshot_天冷" oneshot_animation = "oneshot_天冷"
[node name="BGSprite2D" parent="Ground" index="2"] [node name="BGSprite2D" parent="Ground" index="2"]
position = Vector2(-1, 0)
texture = ExtResource("2_cn1s8") texture = ExtResource("2_cn1s8")
[node name="portal_left" parent="Ground/DeployLayer" index="0"] [node name="portal_left" parent="Ground/DeployLayer" index="0"]
@ -87,7 +88,6 @@ note_key = "c02_卫生宣传画"
[node name="鼠疫海报" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")] [node name="鼠疫海报" parent="Ground/DeployLayer" index="4" instance=ExtResource("12_0fckv")]
position = Vector2(439, -18) position = Vector2(439, -18)
texture_cover = ExtResource("7_wdwbi") texture_cover = ExtResource("7_wdwbi")
content_key = "c02_鼠疫海报"
[node name="Ambush纸人" parent="Ground/DeployLayer" index="5" instance=ExtResource("8_52as8")] [node name="Ambush纸人" parent="Ground/DeployLayer" index="5" instance=ExtResource("8_52as8")]
position = Vector2(198, 48) position = Vector2(198, 48)
@ -138,11 +138,19 @@ offset_bottom = 22.0
text = "杂物堆 text = "杂物堆
" "
[node name="Note老鼠洞" parent="Ground/DeployLayer" index="8" instance=ExtResource("3_fy0o1")]
position = Vector2(510, 60)
title_filter = "c02"
note_key = "c02_老鼠洞"
[node name="MainPlayer" parent="Ground" index="5"] [node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(53, 98) position = Vector2(53, 98)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 670, 150)
[editable path="Ground"] [editable path="Ground"]
[editable path="Ground/DeployLayer/Ambush纸人"] [editable path="Ground/DeployLayer/Ambush纸人"]

View File

@ -85,9 +85,12 @@ scale = Vector2(1.05, 1.05)
texture = ExtResource("7_icddm") texture = ExtResource("7_icddm")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(-12, -143) position = Vector2(0, -7)
scale = Vector2(1.08, 1.08) scale = Vector2(1.08, 1.08)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 2350, 150)
[node name="DirectionalLight2D" parent="Ground" index="9"] [node name="DirectionalLight2D" parent="Ground" index="9"]
color = Color(0.688281, 0.748391, 0.96674, 1) color = Color(0.688281, 0.748391, 0.96674, 1)

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,57 @@
[gd_scene load_steps=8 format=3 uid="uid://cp8d3ag5nbjq0"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_2jej0"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s04_animation.gd" id="2_jyere"]
[ext_resource type="Texture2D" uid="uid://wrxhnk7enk2f" path="res://asset/art/scene/c02/s04_院子现实版/bg_院子1楼(黄昏无人).png" id="3_gmxu4"]
[ext_resource type="Texture2D" uid="uid://b72loyn1of7tb" path="res://asset/art/scene/c02/s04_院子现实版/fg_楼梯.png" id="4_uey0g"]
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_xw32r"]
[ext_resource type="Texture2D" uid="uid://dcnlkhicejjqk" path="res://asset/art/scene/c02/s04_院子现实版/e_铁门.png" id="5_8n1mf"]
[ext_resource type="Texture2D" uid="uid://bvkwihmpu718g" path="res://asset/art/scene/c02/s04_院子现实版/fg_前景.png" id="6_ll57k"]
[node name="S04" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_2jej0")]
scene_name = "c02_s04"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_jyere")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_gmxu4")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
disable_key_after_used = null
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
disable_key_after_used = null
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_xw32r")]
position = Vector2(194, 10)
debug_note = "通往 1012 房间"
portal_name = "1"
target_scene = "c02_s05"
target_portal = "right"
status = "locked"
disable_key_after_used = null
prop_key = "prop_1012钥匙"
[node name="楼梯" type="Sprite2D" parent="Ground/DeployLayer" index="3"]
z_index = 7
position = Vector2(1259, -3)
texture = ExtResource("4_uey0g")
[node name="铁门" type="Sprite2D" parent="Ground/DeployLayer" index="4"]
z_index = 7
position = Vector2(1089, 22)
texture = ExtResource("5_8n1mf")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(0, -6)
scale = Vector2(1.08, 1.08)
texture = ExtResource("6_ll57k")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 2350, 150)
[editable path="Ground"]

View File

@ -0,0 +1,42 @@
[gd_scene load_steps=5 format=3 uid="uid://bivc5cdap370p"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_2713m"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s05_animation.gd" id="2_3v8iu"]
[ext_resource type="Texture2D" uid="uid://cl8no405v4hsk" path="res://asset/art/scene/c02/s05_1012外间现实版/bg_1012外间.png" id="3_8jr2p"]
[ext_resource type="Texture2D" uid="uid://d04bppjl5h3vo" path="res://asset/art/scene/c02/s05_1012外间现实版/fg_1012外间.png" id="4_quka7"]
[node name="S05" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_2713m")]
scene_name = "c02_s05"
default_portal = "right"
player_y = 55
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_3v8iu")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
position = Vector2(74, 2)
texture = ExtResource("3_8jr2p")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(138, 18)
disable_key_after_used = null
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(447, 26)
disable_key_after_used = null
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(447, 103)
facing_direction = Vector2(-1, 0)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(75, -15)
texture = ExtResource("4_quka7")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(95, 150, 470, 150)
[editable path="Ground"]

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,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,37 @@
[gd_scene load_steps=6 format=3 uid="uid://cootarwb44vvh"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_1kelt"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s06_animation.gd" id="2_d64eu"]
[ext_resource type="Texture2D" uid="uid://d1cmto7bvap2g" path="res://asset/art/scene/c02/s06_院子回忆版/bg_院子1楼(黄昏有人).png" id="3_4fobb"]
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="4_1mes0"]
[ext_resource type="Texture2D" uid="uid://wge8cr5h5p78" path="res://asset/art/scene/c02/s06_院子回忆版/fg_楼梯2.png" id="6_5nv2j"]
[node name="S06" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_1kelt")]
scene_name = "c02_s06"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_d64eu")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_4fobb")
[node name="portal_1" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_1mes0")]
position = Vector2(1739, 9)
portal_name = "1"
[node name="楼梯" type="Sprite2D" parent="Ground/DeployLayer" index="3"]
z_index = 7
position = Vector2(1264, -3)
texture = ExtResource("6_5nv2j")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(0, -5)
scale = Vector2(1.1, 1.1)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 2350, 150)
[editable path="Ground"]

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,25 @@
[gd_scene load_steps=4 format=3 uid="uid://t4xjt774ngwh"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_ayofl"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s07_animation.gd" id="2_bfclu"]
[ext_resource type="Texture2D" uid="uid://cgue0x46x47nt" path="res://asset/art/scene/c02/s07_过道回忆版/bg_过道(回忆版).png" id="3_ga8ji"]
[node name="S07" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_ayofl")]
scene_name = "c02_s07"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_bfclu")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_ga8ji")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 670, 150)
[editable path="Ground"]

View File

@ -0,0 +1,40 @@
[gd_scene load_steps=5 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" path="res://scene/ground/scene/c02/s08_animation.gd" id="2_m4uw8"]
[ext_resource type="Texture2D" uid="uid://blaox0jqpnku8" path="res://asset/art/scene/c02/s08_1012外间回忆版/bg_1012外间(回忆版).png" id="3_auuqw"]
[ext_resource type="Texture2D" uid="uid://cipr4k0ydx4ll" path="res://asset/art/scene/c02/s08_1012外间回忆版/fg_前景.png" id="4_ogg5x"]
[node name="S08" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_judx3")]
scene_name = "c02_s08"
default_portal = "right"
player_y = 55
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_m4uw8")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
position = Vector2(77, 1)
texture = ExtResource("3_auuqw")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(141, 18)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(448, 16)
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(448, 103)
facing_direction = Vector2(-1, 0)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(78, -14)
texture = ExtResource("4_ogg5x")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(95, 150, 475, 150)
[editable path="Ground"]

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,31 @@
[gd_scene load_steps=4 format=3 uid="uid://ryups1dnwdto"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_0jub8"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s09_animation.gd" id="2_s3fe0"]
[ext_resource type="Texture2D" uid="uid://d3x6sl377cy4" path="res://asset/art/scene/c02/s09_1014现实版/bg_1014房间-回忆版.png" id="3_8r0fe"]
[node name="S09" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_0jub8")]
scene_name = "c02_s09"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_s3fe0")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_8r0fe")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(62, 16)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(522, 16)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 620, 150)
[editable path="Ground"]

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,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,47 @@
[gd_scene load_steps=5 format=3 uid="uid://dny21yhtuteap"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_w7j0m"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s10_animation.gd" id="2_egtqi"]
[ext_resource type="Texture2D" uid="uid://bo30bcswcstre" path="res://asset/art/scene/c02/s10_裂缝通道/bg_裂缝通道.png" id="3_cckdm"]
[ext_resource type="Texture2D" uid="uid://dpmf4w76ln2uo" path="res://asset/art/scene/c02/s10_裂缝通道/fg_裂缝通道.png" id="4_8gxkr"]
[node name="S10" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_w7j0m")]
scale = Vector2(1, 1.01426)
scene_name = "c02_s10"
player_y = 90
footstep_type = "crawling"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_egtqi")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_cckdm")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(249, 14)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(667, 20)
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(249, 68)
character = "吕萍爬行"
facing_direction = Vector2(1, 0)
[node name="Sprite2D" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
position = Vector2(441, -17)
scale = Vector2(0.998846, 1.00216)
texture = ExtResource("4_8gxkr")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
visible = false
position = Vector2(193, 0)
texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(230, 150, 650, 150)
[editable path="Ground"]

View File

@ -0,0 +1,49 @@
[gd_scene load_steps=8 format=3 uid="uid://dq41rvwl5hyrk"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_j6dox"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s11_animation.gd" id="2_dbjgm"]
[ext_resource type="Texture2D" uid="uid://dacmld3f2y74j" path="res://asset/art/scene/c02/s11_3014回忆版/bg_3014里间与墙内空间.png" id="3_s8if0"]
[ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="4_wd2v1"]
[ext_resource type="Texture2D" uid="uid://c73bxg5jnciy8" path="res://asset/art/scene/c02/s11_3014回忆版/e_书桌组.png" id="5_683gr"]
[ext_resource type="Texture2D" uid="uid://b6u0mok6ofk4a" path="res://asset/art/scene/c02/s11_3014回忆版/e_墙壁.png" id="6_hbkki"]
[ext_resource type="Texture2D" uid="uid://cm1rkmeyor7hy" path="res://asset/art/scene/c02/s11_3014回忆版/fg_前景.png" id="6_jqffo"]
[node name="S11" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_j6dox")]
scene_name = "c02_s11"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_dbjgm")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_s8if0")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(70, 5)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(625, 33)
[node name="Ambush" parent="Ground/DeployLayer" index="2" instance=ExtResource("4_wd2v1")]
position = Vector2(354, 29)
texture = ExtResource("5_683gr")
trigger_mode = "interact"
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(70, 88)
facing_direction = Vector2(1, 0)
[node name="墙壁" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
position = Vector2(658, 0)
texture = ExtResource("6_hbkki")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(0, -14)
texture = ExtResource("6_jqffo")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 625, 150)
[editable path="Ground"]

View File

@ -0,0 +1,30 @@
@tool
extends AnimationRoot
# 覆盖该方法
func _default_data() -> Dictionary:
return {}
func _ready() -> void:
super._ready()
if Engine.is_editor_hint():
return
var camera_original_right = 0
func _on_ground_ready() -> void:
# 暂时限制观看墙右侧
camera_original_right = SceneManager.get_camera_marker().limit_right
SceneManager.get_camera_marker().limit_right = camera_original_right - 200
# _tween_show_right_side()
func _tween_show_right_side() -> void:
var tween = create_tween()
tween.tween_property(
SceneManager.get_camera_marker(), "limit_right", camera_original_right, 1.5
)

View File

@ -0,0 +1,58 @@
[gd_scene load_steps=9 format=3 uid="uid://da4cuf2i3nwpj"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_ngo77"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s12_animation.gd" id="2_7ah3n"]
[ext_resource type="Texture2D" uid="uid://bnvrbjxo3duu2" path="res://asset/art/scene/c02/s12_1014诡异版/bg_1014诡异幻境背景.png" id="3_dyuvy"]
[ext_resource type="Texture2D" uid="uid://ddcburr57lb75" path="res://asset/art/scene/c02/s12_1014诡异版/bg_衔接阴影.png" id="4_y77d6"]
[ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="4_yfs7q"]
[ext_resource type="Texture2D" uid="uid://ct12wdsm57eyy" path="res://asset/art/scene/c02/s12_1014诡异版/e_床上物品组.png" id="5_irgk5"]
[ext_resource type="PackedScene" uid="uid://b8ncf4d0jda8r" path="res://scene/entity/partical/particals_ash.tscn" id="5_q2aoh"]
[ext_resource type="Texture2D" uid="uid://bjvungu3tb155" path="res://asset/art/scene/c02/s12_1014诡异版/fg_1014前景.png" id="6_yct81"]
[node name="S12" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_ngo77")]
scene_name = "c02_s12"
default_portal = "right"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_7ah3n")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_dyuvy")
[node name="衔接阴影" type="Sprite2D" parent="Ground/BGSprite2D" index="0"]
position = Vector2(2827, -9)
texture = ExtResource("4_y77d6")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(332, 27)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(3691, 13)
[node name="ParticalsAsh" parent="Ground/DeployLayer" index="2" instance=ExtResource("5_q2aoh")]
z_index = 4
position = Vector2(2666, 0)
[node name="ParticalsAsh2" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_q2aoh")]
z_index = 4
position = Vector2(1725, 2)
[node name="ParticalsAsh3" parent="Ground/DeployLayer" index="4" instance=ExtResource("5_q2aoh")]
z_index = 4
position = Vector2(925, 1)
[node name="Interactable床" parent="Ground/DeployLayer" index="5" instance=ExtResource("4_yfs7q")]
position = Vector2(333, 76)
texture = ExtResource("5_irgk5")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(3584, -7)
texture = ExtResource("6_yct81")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 4200, 150)
[editable path="Ground"]

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,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,36 @@
[gd_scene load_steps=6 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" path="res://scene/ground/scene/c02/s13_animation.gd" id="2_w5nqu"]
[ext_resource type="Texture2D" uid="uid://da3v7s68728af" path="res://asset/art/scene/c02/s13_院子诡异版/bg_院子1楼(黑).png" id="3_efmyf"]
[ext_resource type="Texture2D" uid="uid://b3ootg88b63rb" path="res://asset/art/scene/c02/s13_院子诡异版/fg_楼梯调色后.png" id="4_4adgb"]
[ext_resource type="Texture2D" uid="uid://d3o8gxjbl8734" path="res://asset/art/scene/c02/s13_院子诡异版/e_排队纸人调色.png" id="4_7ckhl"]
[node name="S13" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_71lma")]
scene_name = "c02_s13"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_w5nqu")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_efmyf")
[node name="排队纸人" type="Sprite2D" parent="Ground/DeployLayer" index="2"]
position = Vector2(1520, 17)
texture = ExtResource("4_7ckhl")
[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)
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 2350, 150)
[editable path="Ground"]

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,38 @@
[gd_scene load_steps=8 format=3 uid="uid://d0p4x5st2r315"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_om431"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s14_animation.gd" id="2_b41rh"]
[ext_resource type="Texture2D" uid="uid://diipofcj57pif" path="res://asset/art/scene/c02/s14_过道诡异版/bg_过道(诡异版).png" id="3_p0pkx"]
[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="5_h38op"]
[ext_resource type="Texture2D" uid="uid://cyue3suixb3eo" path="res://asset/art/scene/c02/s14_过道诡异版/e_碗和蜡烛.png" id="5_pbhsu"]
[ext_resource type="Texture2D" uid="uid://cn35kih5akphr" path="res://asset/art/scene/c02/s14_过道诡异版/e_欢迎小蝶回家横幅.png" id="6_tud2a"]
[ext_resource type="Texture2D" uid="uid://dt24lj1gw1xht" path="res://asset/art/scene/c02/s14_过道诡异版/ux_过道蜡烛碗特写.png" id="7_miqdc"]
[node name="S14" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_om431")]
scene_name = "c02_s14"
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_b41rh")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_p0pkx")
[node name="横幅" type="Sprite2D" parent="Ground/DeployLayer" index="2"]
position = Vector2(320, -21)
texture = ExtResource("6_tud2a")
[node name="LocalInspectable祭祀碗" parent="Ground/DeployLayer" index="3" instance=ExtResource("5_h38op")]
position = Vector2(331, 88)
texture = ExtResource("5_pbhsu")
texture_cover = ExtResource("7_miqdc")
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
texture = null
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 660, 150)
[editable path="Ground"]

View File

@ -0,0 +1,38 @@
[gd_scene load_steps=5 format=3 uid="uid://b21p53g42j2nt"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_2gio2"]
[ext_resource type="Script" path="res://scene/ground/scene/c02/s15_animation.gd" id="2_vo24h"]
[ext_resource type="Texture2D" uid="uid://imywljabomc7" path="res://asset/art/scene/c02/s15_1014家具版/bg_1014房间-家具版.png" id="3_khabk"]
[ext_resource type="Texture2D" uid="uid://byyfo8n2vhk6e" path="res://asset/art/scene/c02/s15_1014家具版/fg_前景.png" id="4_rar4n"]
[node name="S15" type="Node2D"]
[node name="Ground" parent="." instance=ExtResource("1_2gio2")]
scene_name = "c02_s15"
player_y = 60
[node name="AnimationPlayer" parent="Ground" index="0"]
script = ExtResource("2_vo24h")
oneshot_animation = ""
[node name="BGSprite2D" parent="Ground" index="2"]
texture = ExtResource("3_khabk")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(64, 13)
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(521, 15)
[node name="MainPlayer" parent="Ground" index="5"]
position = Vector2(64, 98)
facing_direction = Vector2(1, 0)
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(-1, -15)
texture = ExtResource("4_rar4n")
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(37, 150, 600, 150)
[editable path="Ground"]

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