AnimationPlayer 增加便捷重置存档功能;空房间增加互动头套特写环节

This commit is contained in:
cakipaul 2025-07-01 22:32:30 +08:00
parent ee0eae7452
commit 08698bc983
21 changed files with 259 additions and 44 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -231,7 +231,9 @@ func load_config() -> void:
func load_archive() -> void: func load_archive() -> void:
_check_dirs_and_archives() _check_dirs_and_archives()
var selected_id = GlobalConfigManager.config.current_selected_archive_id var selected_id = 0
if GlobalConfigManager.config:
selected_id = GlobalConfigManager.config.current_selected_archive_id
# if archive and selected_id == archive.archive_id: # if archive and selected_id == archive.archive_id:
# return # return
print("load_archive ", selected_id) print("load_archive ", selected_id)

View File

@ -155,6 +155,7 @@ func _set_camera_and_player_boundary():
# set_player_boundary # set_player_boundary
get_player().player_movement_rect = player_rect get_player().player_movement_rect = player_rect
func _load_footstep_audio(): func _load_footstep_audio():
# foot step sound # foot step sound
footstep_audio.audio_collections.clear() footstep_audio.audio_collections.clear()

View File

@ -1,4 +1,4 @@
# @tool @tool
class_name AnimationRoot extends AnimationPlayer class_name AnimationRoot extends AnimationPlayer
# 在继承 AnimationRoot 的各场景内的脚本中,可以直接调用 DialogueResource # 在继承 AnimationRoot 的各场景内的脚本中,可以直接调用 DialogueResource
@ -13,6 +13,15 @@ var dialogue_c06 := preload("res://asset/dialogue/c06.dialogue") as DialogueReso
# 首次进入场景时触发 # 首次进入场景时触发
"oneshot_animation_played": false "oneshot_animation_played": false
} }
# event 也混合其中
@export var debug_global_data: Dictionary[String, Variant] = {
"enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"],
}
@export var debug_ground_data: Dictionary[String, Variant] = {}
@export var auto_reset_on_debug_restarting := true
@export_tool_button("reset 存档") var reset_archive = _reset_archive
var oneshot_animation := "" var oneshot_animation := ""
var ground_archive: GroundArchive var ground_archive: GroundArchive
var ground: Ground2D var ground: Ground2D
@ -30,6 +39,9 @@ func _ready() -> void:
printerr("ground not found") printerr("ground not found")
return return
if ground.restarting: if ground.restarting:
print("auto reset archive=", auto_reset_on_debug_restarting)
if auto_reset_on_debug_restarting:
_reset_archive()
print("restarting: skip animation root _ready()") print("restarting: skip animation root _ready()")
return return
data.merge(_default_data(), true) data.merge(_default_data(), true)
@ -52,6 +64,92 @@ func _ready() -> void:
ready.connect(_on_ready) ready.connect(_on_ready)
func _reset_archive() -> void:
var archive = (
ResourceLoader.load("user://data/archives/save000.tres", "AssembledArchive")
as AssembledArchive
)
# 重置全局变量
var prop_arr = archive.prop_inventory.default_enabled_items
if get_node("../MainPlayer").character.begins_with("吕萍"):
prop_arr = archive.prop_inventory.xdie_enabled_items
elif get_node("../MainPlayer").character.begins_with("小小蝶"):
prop_arr = archive.prop_inventory.xxdie_enabled_items
elif get_node("../MainPlayer").character.begins_with("小小小蝶"):
prop_arr = archive.prop_inventory.xxxdie_enabled_items
for prop in debug_global_data["enabled_items"]:
if not prop_arr.has(prop):
prop_arr.append(prop)
# 从 code 中找到 set_global_entry/get_global_value 方法中第一个 property
var code = get_script().source_code
# set_global_entry(property: StringName, value)
# get_global_value(property: StringName, default = null)
var setter_regx = RegEx.create_from_string(r'set_global_entry\(.?"(.+)"') as RegEx
var getter_regx = RegEx.create_from_string(r'get_global_value\(.?"(.+)"') as RegEx
var properties = {}
for setter_match in setter_regx.search_all(code):
properties[(setter_match as RegExMatch).get_string(1)] = true
for getter_match in getter_regx.search_all(code):
properties[(getter_match as RegExMatch).get_string(1)] = true
for p in properties.keys():
if debug_global_data.get(p) == null:
debug_global_data[p] = 0
# archive.set_global_entry(p, new_data[p])
archive.global_data_dict[p] = debug_global_data[p]
# 重置 ground_archive
if not archive.ground_archives.has(ground.scene_name):
archive.ground_archives[ground.scene_name] = GroundArchive.new()
archive.ground_archives[ground.scene_name].scene_name = ground.scene_name
# setup
_setup_ground_data(debug_ground_data, ground)
archive.ground_archives[ground.scene_name].data = debug_ground_data
# 重置 event 状态
# EventManager.set_stage(&"c02_burning_end", 2)
# EventManager.set_stage_if_greater("handnote_stage", 5)
var event_setter_regx = RegEx.create_from_string(r'EventManager.set_stage\(.?"(.+)"') as RegEx
var event_getter_regx = RegEx.create_from_string(r'EventManager.get_stage\(.?"(.+)"') as RegEx
var event_set_greater_regx = (
RegEx.create_from_string(r'set_stage_if_greater\(.?"(.+)"') as RegEx
)
var events = {}
for event_match in event_setter_regx.search_all(code):
events[(event_match as RegExMatch).get_string(1)] = true
for event_match in event_set_greater_regx.search_all(code):
events[(event_match as RegExMatch).get_string(1)] = true
for event_match in event_getter_regx.search_all(code):
events[(event_match as RegExMatch).get_string(1)] = true
# 遍历 ".." 下所有节点,找到属于 Event2D 的节点
_find_event2d(events, ground)
for e in events.keys():
if debug_global_data.get(e) == null:
debug_global_data[e] = 0
archive.event_stage[e] = debug_global_data[e]
print("reset archive data success")
ResourceSaver.save(archive)
notify_property_list_changed()
func _setup_ground_data(g_data: Dictionary[String, Variant], node: Node):
if not node:
return
for child in node.get_children():
if child is Ambush2D and not g_data.has(child.name):
g_data[child.name] = {"played": false}
elif child is Interactable2D and not g_data.has(child.name):
g_data[child.name] = {"interacted_times": 0}
elif child is Pickable2D and not g_data.has(child.name):
g_data[child.name] = {"picked": false}
_setup_ground_data(g_data, child)
func _find_event2d(events: Dictionary, node: Node) -> void:
if not node:
return
for child in node.get_children():
if child is Event2D:
events[child.event] = true
_find_event2d(events, child)
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
pass pass
@ -84,11 +182,11 @@ func set_data(property: StringName, value: Variant) -> bool:
func set_global_entry(property: StringName, value: Variant) -> void: func set_global_entry(property: StringName, value: Variant) -> void:
ArchiveManager.archive.set_global_entry(property, value) ArchiveManager.set_global_entry(property, value)
func get_global_value(property: StringName, default_value = null) -> Variant: func get_global_value(property: StringName, default_value = null) -> Variant:
var val = ArchiveManager.archive.get_global_value(property) var val = ArchiveManager.get_global_value(property)
if val == null: if val == null:
return default_value return default_value
return val return val

View File

@ -52,7 +52,7 @@ func _on_ground_ready() -> void:
counter.interacted.connect(assign_tasks, CONNECT_ONE_SHOT) counter.interacted.connect(assign_tasks, CONNECT_ONE_SHOT)
ladder.enabled = false ladder.enabled = false
envolope_table.enabled = false envolope_table.enabled = false
envelope_game_success = ArchiveManager.archive.get_global_value(&"envelope_game_success") envelope_game_success = ArchiveManager.get_global_value(&"envelope_game_success")
if envelope_game_success: if envelope_game_success:
envolope_table.enabled = false envolope_table.enabled = false
else: else:
@ -62,7 +62,7 @@ func _on_ground_ready() -> void:
envolope_table.prop_key2 = "" envolope_table.prop_key2 = ""
envolope_table.interacted.connect(_on_envolope_table_interacted) envolope_table.interacted.connect(_on_envolope_table_interacted)
# 书架工作 # 书架工作
shelf_game_success = ArchiveManager.archive.get_global_value(&"c01_shelf_game_success") shelf_game_success = ArchiveManager.get_global_value(&"c01_shelf_game_success")
if shelf_game_success: if shelf_game_success:
_setup_weird_bookstore() _setup_weird_bookstore()
else: else:
@ -131,7 +131,7 @@ var fall_off
func _on_shelf_game_success() -> void: func _on_shelf_game_success() -> void:
ArchiveManager.archive.set_global_entry(&"c01_shelf_game_success", true) ArchiveManager.set_global_entry(&"c01_shelf_game_success", true)
shelf_game_success = true shelf_game_success = true
_setup_weird_bookstore() _setup_weird_bookstore()
var player = SceneManager.get_player() as MainPlayer var player = SceneManager.get_player() as MainPlayer
@ -197,7 +197,7 @@ func _on_envelope_game_success() -> void:
SceneManager.release_player() SceneManager.release_player()
envolope_table.enabled = false envolope_table.enabled = false
create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0) create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0)
ArchiveManager.archive.set_global_entry(&"envelope_game_success", true) ArchiveManager.set_global_entry(&"envelope_game_success", true)
envelope_game_success = true envelope_game_success = true
_check_portal() _check_portal()

View File

@ -128,7 +128,7 @@ func check_if_show_shoes():
# 不论是否推出,都需要 enable 调整为 false # 不论是否推出,都需要 enable 调整为 false
$"../DeployLayer/Ambush推小鞋子".enabled = false $"../DeployLayer/Ambush推小鞋子".enabled = false
# 检查是否显示鞋子 # 检查是否显示鞋子
if not ArchiveManager.get_global_value(&"c02_s02_mouse_push_shoe1", false): if not ArchiveManager.get_global_value(&"c02_s02_mouse_push_shoe", false):
return return
var interactable = $"../DeployLayer/Interactable小鞋子" var interactable = $"../DeployLayer/Interactable小鞋子"
if interactable.interacted_times > 0: if interactable.interacted_times > 0:

View File

@ -88,7 +88,7 @@ func _on_mice_hole_interacted():
if mice_hole.interacted_times >= 2: if mice_hole.interacted_times >= 2:
# 触发疯子撞墙,疯子在一楼内侧过道中消失 # 触发疯子撞墙,疯子在一楼内侧过道中消失
ArchiveManager.set_global_entry(&"c02_madman_hitwall", true) ArchiveManager.set_global_entry(&"c02_madman_hitwall", true)
ArchiveManager.set_global_entry(&"c02_s02_mouse_push_shoe1", true) ArchiveManager.set_global_entry(&"c02_s02_mouse_push_shoe", true)
# 老鼠散开并不再跟随 # 老鼠散开并不再跟随
ArchiveManager.set_global_entry(&"c02_mouse_follow_player", false) ArchiveManager.set_global_entry(&"c02_mouse_follow_player", false)

View File

@ -846,10 +846,44 @@ libraries = {
&"": SubResource("AnimationLibrary_k01ve") &"": SubResource("AnimationLibrary_k01ve")
} }
script = ExtResource("2_4dg6u") script = ExtResource("2_4dg6u")
data = { debug_global_data = Dictionary[String, Variant]({
"c02_final_show": false, "c02_ball_game_stage": 1,
"oneshot_animation_played": false "c02_burning": true,
"c02_burning_end": 1,
"c02_madman_hitwall": false,
"c02_mouse_follow_player": false,
"c02_pliers_to_ball": false,
"c02_s02_mouse_push_shoe": false,
"c02_the_blind_room_unlocked": true,
"enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"],
"handnote_stage": 0
})
debug_ground_data = Dictionary[String, Variant]({
"Ambush三男孩": {
"played": false
},
"Ambush小蝉偷看": {
"played": true
},
"Closeup弹珠游戏": {
"interacted_times": 0
},
"Closeup水盆": {
"interacted_times": 0
},
"Closeup谢幕演出": {
"interacted_times": 0
},
"Interactable老鼠洞": {
"interacted_times": 0
},
"煤油灯": {
"interacted_times": 0
},
"煤油灯2": {
"interacted_times": 0
} }
})
oneshot_animation = "" oneshot_animation = ""
[node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"] [node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"]

View File

@ -20,6 +20,7 @@ const default_counter_x := 364.0
# player x=315.0 counter x=364.0 # player x=315.0 counter x=364.0
const player_pull_offset_x := 49.0 const player_pull_offset_x := 49.0
var head_cover_closeup: Closeup2D
var xiao_chan_sprite: AnimatedSprite2D var xiao_chan_sprite: AnimatedSprite2D
var xiao_chan_interactable: Interactable2D var xiao_chan_interactable: Interactable2D
var counter: Interactable2D var counter: Interactable2D
@ -50,11 +51,24 @@ func _on_ground_ready() -> void:
catty_head.triggered.connect(_on_pick_catty_head) catty_head.triggered.connect(_on_pick_catty_head)
if not $"../DeployLayer/Ambush首次进入血脚印".played: $"../DeployLayer/血脚印".frame = 8 if $"../DeployLayer/Ambush首次进入血脚印".played else 0
xiao_chan_sprite.modulate.a = 0
$"../DeployLayer/血脚印".frame = 0 # 先设置 closeup再设置 xiaochan sprite 与 interactable
head_cover_closeup = $"../DeployLayer/Closeup头套"
if head_cover_closeup.interacted_times > 0:
head_cover_closeup.hide()
head_cover_closeup.enabled = false
xiao_chan_sprite.visible = true
else: else:
$"../DeployLayer/血脚印".frame = 8 xiao_chan_interactable.enabled = false
xiao_chan_sprite.visible = false
head_cover_closeup.exit.connect(func():
head_cover_closeup.hide()
head_cover_closeup.enabled = false
xiao_chan_interactable.enabled = true
xiao_chan_sprite.visible = true
)
if xiao_chan_interactable.interacted_times > 0: if xiao_chan_interactable.interacted_times > 0:
xiao_chan_sprite.visible = false xiao_chan_sprite.visible = false
counter.enabled = true counter.enabled = true

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=30 format=3 uid="uid://dny21yhtuteap"] [gd_scene load_steps=33 format=3 uid="uid://dny21yhtuteap"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_w7j0m"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_w7j0m"]
[ext_resource type="Script" uid="uid://dkkey7qillk15" path="res://scene/ground/scene/c02/s10_空房间.gd" id="2_egtqi"] [ext_resource type="Script" uid="uid://dkkey7qillk15" path="res://scene/ground/scene/c02/s10_空房间.gd" id="2_egtqi"]
@ -21,6 +21,9 @@
[ext_resource type="SpriteFrames" uid="uid://cwes55ajc3rd4" path="res://asset/art/gif/c02_空房间/c02_空房间_frames.tres" id="15_2j5dr"] [ext_resource type="SpriteFrames" uid="uid://cwes55ajc3rd4" path="res://asset/art/gif/c02_空房间/c02_空房间_frames.tres" id="15_2j5dr"]
[ext_resource type="Texture2D" uid="uid://cylsq5cvhlp18" path="res://asset/art/tool/point_light.png" id="15_e24j0"] [ext_resource type="Texture2D" uid="uid://cylsq5cvhlp18" path="res://asset/art/tool/point_light.png" id="15_e24j0"]
[ext_resource type="Texture2D" uid="uid://bp84w8keuelyj" path="res://asset/art/scene/c02/s10_空房间/e_蜡烛-sheet.png" id="15_kqj5r"] [ext_resource type="Texture2D" uid="uid://bp84w8keuelyj" path="res://asset/art/scene/c02/s10_空房间/e_蜡烛-sheet.png" id="15_kqj5r"]
[ext_resource type="Texture2D" uid="uid://ce3kclg1i81l3" path="res://asset/art/scene/c02/s02_大门过道/e_头套场景中.png" id="17_6uftv"]
[ext_resource type="PackedScene" uid="uid://bffqprfmpt0bx" path="res://scene/ground/script/c02/空房间小蝉头套.tscn" id="18_5t4pt"]
[ext_resource type="PackedScene" uid="uid://dqkxiqbq83cmq" path="res://scene/entity/closeup.tscn" id="18_8cwaw"]
[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_apn51"] [sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_apn51"]
stream_count = 2 stream_count = 2
@ -99,7 +102,6 @@ autoplay_group = &"c02_房间里1"
metadata/_custom_type_script = "uid://cpejxlfni6n52" metadata/_custom_type_script = "uid://cpejxlfni6n52"
[node name="Sfx小蝉出现" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] [node name="Sfx小蝉出现" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"]
process_mode = 1
stream = SubResource("AudioStreamSynchronized_apn51") stream = SubResource("AudioStreamSynchronized_apn51")
volume_db = 12.0 volume_db = 12.0
bus = &"game_sfx" bus = &"game_sfx"
@ -107,7 +109,6 @@ script = ExtResource("6_6uftv")
metadata/_custom_type_script = "uid://rq6w1vuhuq1m" metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
[node name="Sfx脚印出现" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="2"] [node name="Sfx脚印出现" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="2"]
process_mode = 1
stream = ExtResource("7_5t4pt") stream = ExtResource("7_5t4pt")
volume_db = 10.0 volume_db = 10.0
bus = &"game_sfx" bus = &"game_sfx"
@ -168,7 +169,13 @@ rotation = -1.51912
scale = Vector2(0.34, 0.34) scale = Vector2(0.34, 0.34)
texture = ExtResource("8_3ftnp") texture = ExtResource("8_3ftnp")
[node name="Interactable柜子" parent="Ground/DeployLayer" index="7" instance=ExtResource("5_ylhfc")] [node name="Closeup头套" parent="Ground/DeployLayer" index="7" instance=ExtResource("18_8cwaw")]
position = Vector2(344, -39)
texture = ExtResource("17_6uftv")
packed_scene = ExtResource("18_5t4pt")
sign_mark_offset = Vector2(4.37, 46.38)
[node name="Interactable柜子" parent="Ground/DeployLayer" index="8" instance=ExtResource("5_ylhfc")]
position = Vector2(364, 55) position = Vector2(364, 55)
texture = ExtResource("6_mty8e") texture = ExtResource("6_mty8e")
enabled = false enabled = false
@ -176,20 +183,20 @@ enable_snapper = false
mute_when_interacted = true mute_when_interacted = true
one_shot = false one_shot = false
[node name="大头小蝉" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="8"] [node name="大头小蝉" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="9"]
self_modulate = Color(0.80687, 0.80687, 0.80687, 1) self_modulate = Color(0.80687, 0.80687, 0.80687, 1)
position = Vector2(351, 29.5782) position = Vector2(351, 29.5782)
scale = Vector2(0.9, 0.9) scale = Vector2(0.9, 0.9)
sprite_frames = ExtResource("15_2j5dr") sprite_frames = ExtResource("15_2j5dr")
animation = &"坐箱子小婵丢人偶" animation = &"坐箱子小婵丢人偶"
[node name="Interactable小蝉" parent="Ground/DeployLayer" index="9" instance=ExtResource("5_ylhfc")] [node name="Interactable小蝉" parent="Ground/DeployLayer" index="10" instance=ExtResource("5_ylhfc")]
position = Vector2(350, 15.7751) position = Vector2(350, 15.7751)
mute_when_interacted = true mute_when_interacted = true
disable_prop_after_interacted = true disable_prop_after_interacted = true
prop_key = "prop_木头人偶" prop_key = "prop_木头人偶"
[node name="Pickable木头人偶" parent="Ground/DeployLayer" index="10" instance=ExtResource("6_27dvh")] [node name="Pickable木头人偶" parent="Ground/DeployLayer" index="11" instance=ExtResource("6_27dvh")]
z_index = 7 z_index = 7
position = Vector2(423, 97.6081) position = Vector2(423, 97.6081)
sign_mark_offset = Vector2(0, -7.09) sign_mark_offset = Vector2(0, -7.09)
@ -202,13 +209,13 @@ rotation = -1.19178
scale = Vector2(0.25, 0.25) scale = Vector2(0.25, 0.25)
texture = ExtResource("12_27dvh") texture = ExtResource("12_27dvh")
[node name="煤油灯" parent="Ground/DeployLayer" index="11" instance=ExtResource("13_27dvh")] [node name="煤油灯" parent="Ground/DeployLayer" index="12" instance=ExtResource("13_27dvh")]
position = Vector2(373, -13.8031) position = Vector2(373, -13.8031)
gaslight_energy = 2.0 gaslight_energy = 2.0
gaslight_ground_energy = 2.0 gaslight_ground_energy = 2.0
mute_when_interacted = false mute_when_interacted = false
[node name="拼接小猫玩具" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="12"] [node name="拼接小猫玩具" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="13"]
visible = false visible = false
light_mask = 32 light_mask = 32
z_index = 10 z_index = 10
@ -237,7 +244,7 @@ position = Vector2(3, -0.98594)
range_item_cull_mask = 32 range_item_cull_mask = 32
texture = ExtResource("15_e24j0") texture = ExtResource("15_e24j0")
[node name="Ambush首次进入血脚印" parent="Ground/DeployLayer" index="13" instance=ExtResource("14_3ftnp")] [node name="Ambush首次进入血脚印" parent="Ground/DeployLayer" index="14" instance=ExtResource("14_3ftnp")]
position = Vector2(192, 38.4517) position = Vector2(192, 38.4517)
cooldown_time = 0.1 cooldown_time = 0.1
hook_method = "first_enter_ambush" hook_method = "first_enter_ambush"

View File

@ -38,4 +38,4 @@ func _on_ground_ready() -> void:
print("[盒子猫] intro end") print("[盒子猫] intro end")
anim.visible = false anim.visible = false
SceneManager.pop_center_notification(tr("ui_boxcat_press_s")) SceneManager.pop_center_notification(tr("ui_boxcat_press_s"))
ArchiveManager.archive.set_global_entry(&"c02_boxcat_skip_intro", true) ArchiveManager.set_global_entry(&"c02_boxcat_skip_intro", true)

View File

@ -119,10 +119,6 @@ libraries = {
&"": SubResource("AnimationLibrary_k01ve") &"": SubResource("AnimationLibrary_k01ve")
} }
script = ExtResource("2_jxanq") script = ExtResource("2_jxanq")
data = {
"c02_final_show": false,
"oneshot_animation_played": false
}
oneshot_animation = "" oneshot_animation = ""
[node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"] [node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"]

View File

@ -0,0 +1,5 @@
extends CanvasLayer
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME

View File

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

View File

@ -0,0 +1,57 @@
[gd_scene load_steps=5 format=3 uid="uid://bffqprfmpt0bx"]
[ext_resource type="Script" uid="uid://criy10vfyc262" path="res://scene/ground/script/c02/空房间小蝉头套.gd" id="1_yumf6"]
[ext_resource type="Texture2D" uid="uid://ce3kclg1i81l3" path="res://asset/art/scene/c02/s02_大门过道/e_头套场景中.png" id="2_4w5ks"]
[ext_resource type="PackedScene" uid="uid://dmysq4sxx8iqh" path="res://scene/entity/ux/content_inspector.tscn" id="3_64wgd"]
[ext_resource type="Texture2D" uid="uid://f186lvt5y2ql" path="res://asset/art/ui/inspect/inspect背景遮罩.png" id="4_v60v3"]
[node name="老鼠精画像" type="CanvasLayer"]
script = ExtResource("1_yumf6")
[node name="TextureRect" type="TextureRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -1143.0
offset_top = -1012.0
offset_right = -1143.0
offset_bottom = -1012.0
grow_horizontal = 2
grow_vertical = 2
scale = Vector2(5, 5)
texture = ExtResource("2_4w5ks")
expand_mode = 1
stretch_mode = 5
[node name="ContentInspector" parent="." instance=ExtResource("3_64wgd")]
[node name="遮罩" type="TextureRect" parent="ContentInspector"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("4_v60v3")
expand_mode = 5
stretch_mode = 5
[node name="Label" type="Label" parent="ContentInspector/遮罩"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -50.0
offset_top = -7.0
offset_right = 50.0
offset_bottom = 7.0
grow_horizontal = 2
grow_vertical = 2
text = "???"
horizontal_alignment = 1
autowrap_mode = 3

View File

@ -66,7 +66,7 @@ func _on_ground_ready():
queue_free() queue_free()
return return
# c02_s13 开始追逐; call_deferred 延时设置 # c02_s13 开始追逐; call_deferred 延时设置
ArchiveManager.archive.set_global_entry.call_deferred( ArchiveManager.set_global_entry.call_deferred(
"c02_boxcat_chasing_started", true "c02_boxcat_chasing_started", true
) )
elif not chasing_started: elif not chasing_started:

View File

@ -199,7 +199,6 @@ position = Vector2(2.99999, -33.5)
polygon = PackedVector2Array(123, -48, -102, -48, -102, -45.8, -104.8, -43, -106.3, -43, -147.3, 42, -149.3, 42, -139, 110.3, -139, 112.5, -135, 119.4, -135, 120, 155.1, 120, 157.4, 114, 158.7, 114, 167.7, 55, 169, 55, 169, 43.5, 123, -45.6) polygon = PackedVector2Array(123, -48, -102, -48, -102, -45.8, -104.8, -43, -106.3, -43, -147.3, 42, -149.3, 42, -139, 110.3, -139, 112.5, -135, 119.4, -135, 120, 155.1, 120, 157.4, 114, 158.7, 114, 167.7, 55, 169, 55, 169, 43.5, 123, -45.6)
[node name="OpenedBox" type="Sprite2D" parent="All"] [node name="OpenedBox" type="Sprite2D" parent="All"]
visible = false
position = Vector2(-48, 38) position = Vector2(-48, 38)
texture = ExtResource("16_dtoml") texture = ExtResource("16_dtoml")
centered = false centered = false
@ -296,6 +295,7 @@ position = Vector2(6.4373e-06, -9.53674e-07)
polygon = PackedVector2Array(31.5, -37.5, 29.7, -38, 18.4, -38, -19.7, -28.9, -26, -32, -30.7, -32, -32.5, -28.4, -32.5, -23.2, -24.5, -15.2, -24.5, -9.6, -20.5, -8.3, -20.5, 4.5, -17.7, 10, -14.5, 30.3, -14.5, 32, -10.5, 35, -10.5, 37, 3.3, 37, 4.5, 26.1, 6.2, 25, 9.3, 25, 7.5, 19.6, 10.6, 14, 13.1, 14, 10.5, 4, 10.5, 3.2, 21, -2, 23.6, -2, 31.6, -14, 32.5, -14, 32.5, -22.4, 31.5, -28.3) polygon = PackedVector2Array(31.5, -37.5, 29.7, -38, 18.4, -38, -19.7, -28.9, -26, -32, -30.7, -32, -32.5, -28.4, -32.5, -23.2, -24.5, -15.2, -24.5, -9.6, -20.5, -8.3, -20.5, 4.5, -17.7, 10, -14.5, 30.3, -14.5, 32, -10.5, 35, -10.5, 37, 3.3, 37, 4.5, 26.1, 6.2, 25, 9.3, 25, 7.5, 19.6, 10.6, 14, 13.1, 14, 10.5, 4, 10.5, 3.2, 21, -2, 23.6, -2, 31.6, -14, 32.5, -14, 32.5, -22.4, 31.5, -28.3)
[node name="Drawer" type="Node2D" parent="All"] [node name="Drawer" type="Node2D" parent="All"]
visible = false
position = Vector2(20.5, 0) position = Vector2(20.5, 0)
[node name="BoxDrawer" type="Sprite2D" parent="All/Drawer"] [node name="BoxDrawer" type="Sprite2D" parent="All/Drawer"]

View File

@ -14,24 +14,24 @@ signal current_item_changed(prop_key: String)
else: else:
current_item_changed.emit("") current_item_changed.emit("")
# 重要物品,不可丢弃,在背包可见 # 重要物品,不可丢弃,在背包可见
@export var important_items := [] @export var important_items := [] as Array[String]
# 未查看的重要物品,红点效果 # 未查看的重要物品,红点效果
@export var unviewed_important_items := [] @export var unviewed_important_items := [] as Array[String]
@export var default_enabled_items := [] @export var default_enabled_items := [] as Array[String]
@export var xdie_enabled_items := [] @export var xdie_enabled_items := [] as Array[String]
@export var xxdie_enabled_items := [] @export var xxdie_enabled_items := [] as Array[String]
@export var xxxdie_enabled_items := [] @export var xxxdie_enabled_items := [] as Array[String]
var enabled_items := [] var enabled_items := [] as Array[String]
func checkout(character: String): func checkout(character: String):
# @export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "小小蝶", "盒子猫", "小小小蝶") var character := "吕萍": # @export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "小小蝶", "盒子猫", "小小小蝶") var character := "吕萍":
if character == "小小蝶": if character.begins_with("小小小蝶"):
enabled_items = xxdie_enabled_items enabled_items = xxdie_enabled_items
elif character == "小小小蝶": elif character.begins_with("小小蝶"):
enabled_items = xxxdie_enabled_items enabled_items = xxxdie_enabled_items
elif character.substr(0, 2) == "吕萍": elif character.begins_with("吕萍"):
enabled_items = xdie_enabled_items enabled_items = xdie_enabled_items
else: else:
enabled_items = default_enabled_items enabled_items = default_enabled_items