配置线索笔记第一章内容

This commit is contained in:
cakipaul 2025-07-02 19:58:36 +08:00
parent aeef06d7c8
commit dc60f7c0a3
53 changed files with 972 additions and 178 deletions

View File

@ -0,0 +1,72 @@
extends Node2D
@export var export_dir_root := "res://asset/art/ui/note/"
@export var json: JSON # can be a JSONParseResult or a Dictionary
@export var texture: Texture2D
func _ready() -> void:
_run()
var export_dir
func _run() -> void:
if not json or not texture:
printerr("JSON 或 texture 未设置")
return
if not export_dir_root:
push_error("导出目录未设置")
return
export_dir = export_dir_root + ("" if export_dir_root.ends_with("/") else "/")
export_dir = export_dir + json.resource_path.get_file().split(".")[0] + "/"
print("导出目录: ", export_dir)
# 确保导出目录存在
DirAccess.make_dir_recursive_absolute(export_dir)
# 解析 JSON 数据
var data: Dictionary
if json:
data = json.data
# 检查 meta.slices
if not data.has("meta") or not data.meta.has("slices"):
push_error("JSON 中缺少 meta.slices")
return
for slice_dict in data.meta.slices:
var slice_name = slice_dict.get("name", "")
var keys = slice_dict.get("keys", [])
if slice_name == "" or keys.is_empty():
continue
var key = keys[0]
var bounds = key.get("bounds", null)
if typeof(bounds) != TYPE_DICTIONARY:
continue
var rect := Rect2(
bounds.get("x", 0), bounds.get("y", 0), bounds.get("w", 0), bounds.get("h", 0)
)
_create_and_save_atlas(slice_name, rect)
print("已导出 Atlas: ", slice_name, " at ", export_dir)
get_tree().quit.call_deferred()
func _create_and_save_atlas(atlas_name: String, region: Rect2) -> void:
var path = export_dir + atlas_name + ".tres"
var atlas_res: AtlasTexture
if FileAccess.file_exists(path):
atlas_res = load(path)
print_rich("[color=cyan]加载已有的 Atlas: ", path)
if not atlas_res:
atlas_res = AtlasTexture.new()
atlas_res.resource_path = path
print_rich("[color=green]创建新的 Atlas: ", path)
atlas_res.atlas = texture
atlas_res.filter_clip = true
atlas_res.region = region # 修正了原来拼写错误的 regoin
ResourceSaver.save(atlas_res, path)

View File

@ -0,0 +1 @@
uid://16itkrecgwtm

View File

@ -0,0 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://ccws15temu1l7"]
[ext_resource type="Script" uid="uid://16itkrecgwtm" path="res://asset/art/ui/note/aseprite_slice_to_atlas.gd" id="1_74cad"]
[ext_resource type="JSON" path="res://asset/art/ui/note/c02_slices.json" id="2_rv6as"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="3_5ej8b"]
[node name="AsepriteSliceToAtlas" type="Node2D"]
script = ExtResource("1_74cad")
json = ExtResource("2_rv6as")
texture = ExtResource("3_5ej8b")

View File

@ -0,0 +1,292 @@
{
"frames": {
"笔记线索_第一章.png": {
"frame": {
"x": 0.0,
"y": 0.0,
"w": 1790.0,
"h": 1136.0
},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {
"x": 0.0,
"y": 0.0,
"w": 1790.0,
"h": 1136.0
},
"sourceSize": {
"w": 1790.0,
"h": 1136.0
},
"duration": 100.0
}
},
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-arm64",
"format": "RGBA8888",
"size": {
"w": 1790.0,
"h": 1136.0
},
"scale": "1",
"slices": [
{
"name": "c02_meat_knockDoor",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 226.0,
"y": 253.0,
"w": 101.0,
"h": 53.0
}
}
]
},
{
"name": "c02_hand_exchange",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 49.0,
"y": 184.0,
"w": 163.0,
"h": 116.0
}
}
]
},
{
"name": "c02_musicbox_needPuppet",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 86.0,
"y": 317.0,
"w": 102.0,
"h": 58.0
}
}
]
},
{
"name": "c02_gate_chain",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 426.0,
"y": 333.0,
"w": 89.0,
"h": 70.0
}
}
]
},
{
"name": "c02_split_illusionSpace",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 482.0,
"y": 170.0,
"w": 199.0,
"h": 89.0
}
}
]
},
{
"name": "c02_meat_stopMouse",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 364.0,
"y": 77.0,
"w": 108.0,
"h": 59.0
}
}
]
},
{
"name": "c02_map_1Left",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 872.0,
"y": 88.0,
"w": 517.0,
"h": 383.0
}
}
]
},
{
"name": "c02_map_1Right",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1440.0,
"y": 278.0,
"w": 283.0,
"h": 195.0
}
}
]
},
{
"name": "c02_map_2",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1324.0,
"y": 714.0,
"w": 437.0,
"h": 371.0
}
}
]
},
{
"name": "c02_shoe_giveToMouce",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1186.0,
"y": 780.0,
"w": 121.0,
"h": 79.0
}
}
]
},
{
"name": "c02_hand_requireCoin",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1185.0,
"y": 867.0,
"w": 112.0,
"h": 75.0
}
}
]
},
{
"name": "c02_xchan_sheKnowsMe",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 882.0,
"y": 571.0,
"w": 462.0,
"h": 93.0
}
}
]
},
{
"name": "c02_road_address",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1381.0,
"y": 563.0,
"w": 391.0,
"h": 97.0
}
}
]
},
{
"name": "c02_xchan_giveHerPuppet",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 1466.0,
"y": 166.0,
"w": 168.0,
"h": 49.0
}
}
]
},
{
"name": "c02_list_namesAndGoal",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 55.0,
"y": 548.0,
"w": 615.0,
"h": 283.0
}
}
]
},
{
"name": "c02_xchan_isSheGohst",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 93.0,
"y": 916.0,
"w": 200.0,
"h": 127.0
}
}
]
},
{
"name": "c02_blotOut",
"color": "#0000ffff",
"keys": [
{
"frame": 0.0,
"bounds": {
"x": 378.0,
"y": 931.0,
"w": 97.0,
"h": 74.0
}
}
]
}
]
}
}

View File

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://drijblepnhhsw" uid="uid://drijblepnhhsw"
path="res://.godot/imported/笔记线索_第一章.png-5a92d0c0d981e032650977ec75646448.ctex" path="res://.godot/imported/c02_slices.png-b481c314b20ea9e0c9dc0ca54e51f66b.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://asset/art/ui/note/笔记线索_第一章.png" source_file="res://asset/art/ui/note/c02_slices.png"
dest_files=["res://.godot/imported/笔记线索_第一章.png-5a92d0c0d981e032650977ec75646448.ctex"] dest_files=["res://.godot/imported/c02_slices.png-b481c314b20ea9e0c9dc0ca54e51f66b.ctex"]
[params] [params]

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://c30s0pieywjpa"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_yfw6c"]
[resource]
atlas = ExtResource("1_yfw6c")
region = Rect2(378, 931, 97, 74)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://viyauy3w72bv"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_r8xbd"]
[resource]
atlas = ExtResource("1_r8xbd")
region = Rect2(426, 333, 89, 70)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://fnbysuck5nj2"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_036bj"]
[resource]
atlas = ExtResource("1_036bj")
region = Rect2(49, 184, 163, 116)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cfrr5118wx6f"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_bal72"]
[resource]
atlas = ExtResource("1_bal72")
region = Rect2(1185, 867, 112, 75)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bg1rnxsr5of7v"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_4di5c"]
[resource]
atlas = ExtResource("1_4di5c")
region = Rect2(55, 548, 615, 283)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dvjqumfy4invx"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_xc11y"]
[resource]
atlas = ExtResource("1_xc11y")
region = Rect2(872, 88, 517, 383)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://cdygjqy3a0ugw"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_lupqk"]
[resource]
atlas = ExtResource("1_lupqk")
region = Rect2(1440, 278, 283, 195)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ddbjvbjpd6nsr"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_m0mgu"]
[resource]
atlas = ExtResource("1_m0mgu")
region = Rect2(1324, 714, 437, 371)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bds1oni7dlapf"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_5rkoq"]
[resource]
atlas = ExtResource("1_5rkoq")
region = Rect2(226, 253, 101, 53)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://kiyw03vc3w12"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_4wotv"]
[resource]
atlas = ExtResource("1_4wotv")
region = Rect2(364, 77, 108, 59)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://clxnk1kujhg3t"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_01jll"]
[resource]
atlas = ExtResource("1_01jll")
region = Rect2(86, 317, 102, 58)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://b87majbgamcqt"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_hneqy"]
[resource]
atlas = ExtResource("1_hneqy")
region = Rect2(1381, 563, 391, 97)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bvdpo5k83tb6s"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_hjq36"]
[resource]
atlas = ExtResource("1_hjq36")
region = Rect2(1186, 780, 121, 79)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bjn4oo0fieim6"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_cu3l7"]
[resource]
atlas = ExtResource("1_cu3l7")
region = Rect2(482, 170, 199, 89)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ccm0eg5apjro0"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_7ebxh"]
[resource]
atlas = ExtResource("1_7ebxh")
region = Rect2(1466, 166, 168, 49)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bs2aus63tgwv1"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_jin8p"]
[resource]
atlas = ExtResource("1_jin8p")
region = Rect2(93, 916, 200, 127)
filter_clip = true

View File

@ -0,0 +1,8 @@
[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://dqg5ha6sg60ti"]
[ext_resource type="Texture2D" uid="uid://drijblepnhhsw" path="res://asset/art/ui/note/c02_slices.png" id="1_a3qry"]
[resource]
atlas = ExtResource("1_a3qry")
region = Rect2(882, 571, 462, 93)
filter_clip = true

View File

@ -1,37 +0,0 @@
{ "frames": {
"笔记线索_第一章.png": {
"frame": { "x": 0, "y": 0, "w": 1790, "h": 1136 },
"rotated": false,
"trimmed": false,
"spriteSourceSize": { "x": 0, "y": 0, "w": 1790, "h": 1136 },
"sourceSize": { "w": 1790, "h": 1136 },
"duration": 100
}
},
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-arm64",
"format": "RGBA8888",
"size": { "w": 1790, "h": 1136 },
"scale": "1",
"slices": [
{ "name": "c02_meat_knockDoor", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 226, "y": 253, "w": 101, "h": 53 } }] },
{ "name": "c02_hand_exchange", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 49, "y": 184, "w": 163, "h": 116 } }] },
{ "name": "c02_musicbox_needPuppet", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 86, "y": 317, "w": 102, "h": 58 } }] },
{ "name": "c02_gate_chain", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 426, "y": 333, "w": 89, "h": 70 } }] },
{ "name": "c02_split_illusionSpace", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 482, "y": 170, "w": 199, "h": 89 } }] },
{ "name": "c02_meat_stopMouse", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 364, "y": 77, "w": 108, "h": 59 } }] },
{ "name": "c02_map_1Left", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 872, "y": 88, "w": 517, "h": 383 } }] },
{ "name": "c02_map_1Right", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1440, "y": 278, "w": 283, "h": 195 } }] },
{ "name": "c02_map_2", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1324, "y": 714, "w": 437, "h": 371 } }] },
{ "name": "c02_shoe_giveToMouce", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1186, "y": 780, "w": 121, "h": 79 } }] },
{ "name": "c02_hand_requireCoin", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1185, "y": 867, "w": 112, "h": 75 } }] },
{ "name": "c02_xchan_sheKnowsMe", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 882, "y": 571, "w": 462, "h": 93 } }] },
{ "name": "c02_road_address", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1381, "y": 563, "w": 391, "h": 97 } }] },
{ "name": "c02_xchan_giveHerPuppet", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 1466, "y": 166, "w": 168, "h": 49 } }] },
{ "name": "c02_list_namesAndGoal", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 55, "y": 548, "w": 615, "h": 283 } }] },
{ "name": "c02_xchan_isSheGohst", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 93, "y": 916, "w": 200, "h": 127 } }] },
{ "name": "c02_blotOut", "color": "#0000ffff", "keys": [{ "frame": 0, "bounds": {"x": 378, "y": 931, "w": 97, "h": 74 } }] }
]
}
}

View File

@ -77,4 +77,6 @@ func set_chapter_if_greater(c : int) -> void:
if current_chapter >= c: if current_chapter >= c:
return return
print("[AssembledArchive] set_chapter_if_greater: " + str(c)) print("[AssembledArchive] set_chapter_if_greater: " + str(c))
current_chapter = c current_chapter = c
# 笔记也进入下一章
EventManager.set_stage_if_greater("handnote_chapter_stage", c)

View File

@ -8,13 +8,18 @@ class_name Event2D
# 前置依赖事件,为空时意味着无前置事件 # 前置依赖事件,为空时意味着无前置事件
@export var pre_event: StringName @export var pre_event: StringName
@export var hide_if_pre_on_stage: Array[int] = [] @export var hide_if_pre_on_stage: Array[int] = []
@export_tool_button("创建脚本") var create_script := _create_script @export_tool_button("创建脚本") var create_script = _create_script
@export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter
@export_tool_button("复制 setter") var copy_setter = _copy_setter
@export_tool_button("复制 getter") var copy_getter = _copy_getter
var prev_stage := 0 var prev_stage := 0
var stage := 0 var stage := 0
func _ready() -> void: func _ready() -> void:
if event != &"":
name = "Event_" + event
if Engine.is_editor_hint(): if Engine.is_editor_hint():
return return
if event == &"": if event == &"":
@ -87,3 +92,20 @@ func _create_script():
ResourceSaver.save(script, path) ResourceSaver.save(script, path)
set_script(load(path)) set_script(load(path))
print("[Event2D] Script created: %s" % path) print("[Event2D] Script created: %s" % path)
func _copy_greater_setter():
var text = 'EventManager.set_stage_if_greater(&"%s", 1)' % event
DisplayServer.clipboard_set(text)
print("Copied event greater setter: %s" % text)
func _copy_setter():
var text = 'EventManager.set_stage(&"%s", 1)' % event
DisplayServer.clipboard_set(text)
print("Copied event setter: %s" % text)
func _copy_getter():
var text = 'EventManager.get_stage(&"%s")' % event
DisplayServer.clipboard_set(text)
print("Copied event getter: %s" % text)

View File

@ -20,10 +20,16 @@ func set_stage(event_name: StringName, stage := 1) -> void:
# print before emit # print before emit
print("[EventManager] Stage updated: %s, stage: %s" % [event_name, stage]) print("[EventManager] Stage updated: %s, stage: %s" % [event_name, stage])
stage_updated.emit(event_name, stage) stage_updated.emit(event_name, stage)
# 如果是 handnote_stage玩家进行记笔记动作 # 如果是 handnote_ 事件,玩家进行记笔记动作
if event_name == "handnote_stage" and SceneManager.get_player().character.begins_with("吕萍"): if (
SceneManager.lock_player(3.0, 16, true) event_name.begins_with("handnote_")
if stage == 1: and SceneManager.get_player().character.begins_with("吕萍")
):
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
if stage == 1 or stage == 2:
SceneManager.lock_player(3.0, 16, true)
# 第一次记笔记,提示查看笔记
if event_name == &"handnote_c02_road_address":
SceneManager.pop_center_notification(tr("ui_check_note")) SceneManager.pop_center_notification(tr("ui_check_note"))

View File

@ -224,7 +224,7 @@ func pop_os_with_str(translation_key: String) -> void:
if player: if player:
var msg = tr(translation_key).replace("<br>", "\n") var msg = tr(translation_key).replace("<br>", "\n")
var lines = await Util.generate_lines(msg) var lines = await Util.generate_lines(msg)
player.pop_os(lines) await player.pop_os(lines)
else: else:
printerr("Player node not found") printerr("Player node not found")

View File

@ -117,8 +117,7 @@ func _on_interacted() -> void:
return return
if icount == 0 and first_interact_os_key: if icount == 0 and first_interact_os_key:
sign_mark.display_sign = false sign_mark.display_sign = false
SceneManager.pop_os_with_str(first_interact_os_key) await SceneManager.pop_os_with_str(first_interact_os_key)
await SceneManager.get_player().os_finished
sign_mark.display_sign = true sign_mark.display_sign = true
_do_action() _do_action()

View File

@ -154,8 +154,7 @@ func _pre_interacted() -> void:
SceneManager.lock_player(0, action_key) SceneManager.lock_player(0, action_key)
if icount == 0 and first_interact_os_key: if icount == 0 and first_interact_os_key:
sign_mark.display_sign = false sign_mark.display_sign = false
SceneManager.pop_os_with_str(first_interact_os_key) await SceneManager.pop_os_with_str(first_interact_os_key)
await SceneManager.get_player().os_finished
sign_mark.display_sign = true sign_mark.display_sign = true
_on_interacted() _on_interacted()
SceneManager.unlock_player() SceneManager.unlock_player()

View File

@ -180,8 +180,8 @@ func _reset_archive() -> void:
_setup_ground_data(debug_ground_data, ground) _setup_ground_data(debug_ground_data, ground)
archive.ground_archives[ground.scene_name].data = debug_ground_data archive.ground_archives[ground.scene_name].data = debug_ground_data
# 重置 event 状态 # 重置 event 状态
# EventManager.set_stage(&"c02_burning_end_stage", 2) # EventManager.set_stage(&"xxx", 2)
# EventManager.set_stage_if_greater("handnote_stage", 5) # EventManager.set_stage_if_greater(&"xxx", 5)
var event_setter_regx = RegEx.create_from_string(r'EventManager.set_stage\(.?"(.+)"') as RegEx 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_getter_regx = RegEx.create_from_string(r'EventManager.get_stage\(.?"(.+)"') as RegEx
var event_set_greater_regx = ( var event_set_greater_regx = (
@ -276,8 +276,8 @@ func _auto_setup_node_reference():
script.source_code = "\n".join(code_lines) script.source_code = "\n".join(code_lines)
ResourceSaver.save(script) ResourceSaver.save(script)
print("auto reference done.") print("auto reference done.")
print("skipped existing_vars:", existing_vars.size(), existing_vars) print_rich("skipped existing_vars:[color=cyan]", existing_vars.size(), existing_vars)
print("created_vars:", created_vars.size(), created_vars) print_rich("created_vars:[color=green]", created_vars.size(), created_vars)
func _read_existing_vars(code_lines: PackedStringArray) -> Dictionary: func _read_existing_vars(code_lines: PackedStringArray) -> Dictionary:

View File

@ -91,8 +91,7 @@ func seller_interacted():
SceneManager.enable_prop_item_silently("prop_信碎片2") SceneManager.enable_prop_item_silently("prop_信碎片2")
await Util.wait(1.5) await Util.wait(1.5)
$"报童音效".play() $"报童音效".play()
SceneManager.pop_os_with_str("c01_s07_获得报纸") await SceneManager.pop_os_with_str("c01_s07_获得报纸")
await SceneManager.get_player().os_finished
# 播放获得动画 # 播放获得动画
SceneManager.enable_prop_item("prop_信碎片2") SceneManager.enable_prop_item("prop_信碎片2")
SceneManager.release_player() SceneManager.release_player()

View File

@ -20,10 +20,8 @@ func _ready() -> void:
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
SceneManager.pop_os_with_str("c02_s01_下黄包车") await SceneManager.pop_os_with_str("c02_s01_下黄包车")
await SceneManager.get_player().os_finished EventManager.set_stage_if_greater(&"handnote_c02_road_address", 1)
EventManager.set_stage_if_greater("handnote_stage", 1)
# func _give_letter() -> void: # func _give_letter() -> void:
# set_data("received_letter", true) # set_data("received_letter", true)
# SceneManager.enable_prop_item("prop_令牌") # SceneManager.enable_prop_item("prop_令牌")

View File

@ -108,6 +108,9 @@ func _on_blink_finished(blink_sprite):
func _on_music_box_exited(_arg): func _on_music_box_exited(_arg):
EventManager.set_stage_if_greater(&"handnote_c02_musicbox_needPuppet", 1)
if 2 <= EventManager.get_stage(&"c02_musicbox_stage"):
EventManager.set_stage_if_greater(&"handnote_c02_musicbox_needPuppet", 2)
if 4 <= EventManager.get_stage(&"c02_musicbox_stage"): if 4 <= EventManager.get_stage(&"c02_musicbox_stage"):
_display_paper_man(false) _display_paper_man(false)
# _display_paper_man(true) # _display_paper_man(true)

View File

@ -110,7 +110,6 @@ debug_ground_data = Dictionary[String, Variant]({
"interacted_times": 0 "interacted_times": 0
} }
}) })
auto_ref_type = PackedStringArray("Ambush2D", "Inspectable2D", "Closeup2D", "Note2D", "Interactable2D", "Pickable2D", "Event2D", "Sprite2D", "ProAnimatedSprite2D", "AnimatedSprite2D", "Sfx", "Sfx2D", "VibeSfx", "PointLight2D", "Area2D", "MainPlayer", "CameraFocusMarker")
oneshot_animation = "" oneshot_animation = ""
[node name="冷飕飕Sfx" parent="Ground/AnimationPlayer" index="0" instance=ExtResource("3_fvldj")] [node name="冷飕飕Sfx" parent="Ground/AnimationPlayer" index="0" instance=ExtResource("3_fvldj")]

View File

@ -129,6 +129,7 @@ func cg_end() -> void:
func _on_gate_failed() -> void: func _on_gate_failed() -> void:
EventManager.set_stage_if_greater(&"handnote_c02_gate_chain", 1)
if not ArchiveManager.get_global_value(&"c02_open_gate_first_failed"): if not ArchiveManager.get_global_value(&"c02_open_gate_first_failed"):
ArchiveManager.set_global_entry(&"c02_open_gate_first_failed", true) ArchiveManager.set_global_entry(&"c02_open_gate_first_failed", true)
SceneManager.pop_os_with_str("c02_s03_铁门") SceneManager.pop_os_with_str("c02_s03_铁门")
@ -136,7 +137,8 @@ func _on_gate_failed() -> void:
func _on_gate_interacted() -> void: func _on_gate_interacted() -> void:
gate.get_node("Wall/CollisionShape2D").disabled = true gate.get_node("Wall/CollisionShape2D").disabled = true
EventManager.set_stage_if_greater("handnote_stage", 3) EventManager.set_stage_if_greater(&"handnote_c02_gate_chain", 2)
EventManager.set_stage_if_greater(&"handnote_c02_map_1Right", 1)
func _on_knock_exit(arg): func _on_knock_exit(arg):
@ -185,7 +187,8 @@ func eavesdrop() -> void:
SceneManager.player_action(14, true) SceneManager.player_action(14, true)
ArchiveManager.set_global_entry(&"c02_eavesdrop_finished", true) ArchiveManager.set_global_entry(&"c02_eavesdrop_finished", true)
await Util.wait(1.5) await Util.wait(1.5)
SceneManager.pop_os_with_str("c02_偷听李癞对话后") await SceneManager.pop_os_with_str("c02_偷听李癞对话后")
EventManager.set_stage_if_greater(&"handnote_c02_meat_knockDoor", 1)
SceneManager.unlock_player() SceneManager.unlock_player()

View File

@ -298,7 +298,6 @@ debug_global_data = Dictionary[String, Variant]({
"c02_the_blind_room_unlocked": false, "c02_the_blind_room_unlocked": false,
"c02_watched_the_well": false, "c02_watched_the_well": false,
"enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"], "enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"],
"handnote_stage": 0,
"player_x": 2030.0 "player_x": 2030.0
}) })
debug_ground_data = Dictionary[String, Variant]({ debug_ground_data = Dictionary[String, Variant]({
@ -355,7 +354,6 @@ debug_ground_data = Dictionary[String, Variant]({
"interacted_times": 0 "interacted_times": 0
} }
}) })
auto_ref_type = PackedStringArray("Ambush2D", "Inspectable2D", "Closeup2D", "Note2D", "Interactable2D", "Pickable2D", "Event2D", "Sprite2D", "ProAnimatedSprite2D", "AnimatedSprite2D", "Sfx", "Sfx2D", "VibeSfx", "PointLight2D", "Area2D", "MainPlayer", "CameraFocusMarker")
oneshot_animation = "" oneshot_animation = ""
[node name="Sfx闷雷" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"] [node name="Sfx闷雷" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"]

View File

@ -58,10 +58,9 @@ func _on_closeup_tin_coin_exited(arg = null):
await Util.wait(0.5) await Util.wait(0.5)
SceneManager.enable_prop_item("prop_锡箔元宝") SceneManager.enable_prop_item("prop_锡箔元宝")
func _on_first_read(_arg) -> void: func _on_first_read(_arg) -> void:
SceneManager.pop_os_with_str("c02_保卫科花名册首次互动结束") await SceneManager.pop_os_with_str("c02_保卫科花名册首次互动结束")
EventManager.set_stage(&"handnote_c02_list_namesAndGoal", 1)
func xiaochan_disappear(): func xiaochan_disappear():
#TODO #TODO

View File

@ -47,9 +47,14 @@ data = {
} }
debug_global_data = Dictionary[String, Variant]({ debug_global_data = Dictionary[String, Variant]({
"c02_tin_coin_taken": 0, "c02_tin_coin_taken": 0,
"enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"] "enabled_items": ["prop_火柴", "prop_院长的信", "prop_银元"],
"handnote_c02_list_namesAndGoal": 0,
"player_x": 30.0
}) })
debug_ground_data = Dictionary[String, Variant]({ debug_ground_data = Dictionary[String, Variant]({
"Ambush进门看到小蝉": {
"played": false
},
"AnimationPlayer": { "AnimationPlayer": {
"oneshot_animation_played": false, "oneshot_animation_played": false,
"tin_coin_collected": false "tin_coin_collected": false

View File

@ -14,6 +14,7 @@ func _ready() -> void:
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
EventManager.set_stage_if_greater(&"handnote_c02_map_1Left", 1)
# 粘鼠游戏 # 粘鼠游戏
if ArchiveManager.get_global_value(&"c02_meat_dropping"): if ArchiveManager.get_global_value(&"c02_meat_dropping"):
# 肉掉落,检查粘鼠板是否启用 # 肉掉落,检查粘鼠板是否启用
@ -54,7 +55,8 @@ func mouse_pick_meat() -> void:
var sprite = $"../DeployLayer/老鼠叼肉" var sprite = $"../DeployLayer/老鼠叼肉"
sprite.play() sprite.play()
await sprite.animation_finished await sprite.animation_finished
SceneManager.pop_os_with_str("c02_敲门_老鼠叼肉") await SceneManager.pop_os_with_str("c02_敲门_老鼠叼肉")
EventManager.set_stage_if_greater(&"handnote_c02_meat_stopMouse", 1)
func _on_madman_interacted() -> void: func _on_madman_interacted() -> void:
@ -90,8 +92,11 @@ func wood_puppet() -> void:
closeup.display() closeup.display()
SceneManager.unlock_player() SceneManager.unlock_player()
await closeup.exit await closeup.exit
EventManager.set_stage_if_greater(&"handnote_c02_xchan_sheKnowsMe", 1)
$"Sfx记忆闪回音效".easing_kill() $"Sfx记忆闪回音效".easing_kill()
func bucket_meat() -> void: func bucket_meat() -> void:
SceneManager.enable_prop_item("prop_新鲜的肉") SceneManager.enable_prop_item("prop_新鲜的肉")
EventManager.set_stage_if_greater(&"handnote_c02_meat_stopMouse", 2)
EventManager.set_stage_if_greater(&"handnote_c02_meat_knockDoor", 2)

View File

@ -151,7 +151,6 @@ debug_ground_data = Dictionary[String, Variant]({
"picked": false "picked": false
} }
}) })
auto_ref_type = PackedStringArray("Ambush2D", "Inspectable2D", "Closeup2D", "Note2D", "Interactable2D", "Pickable2D", "Event2D", "Sprite2D", "ProAnimatedSprite2D", "AnimatedSprite2D", "Sfx", "Sfx2D", "VibeSfx", "PointLight2D", "Area2D", "MainPlayer", "CameraFocusMarker")
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 @@ var c02_final_layer
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
EventManager.set_stage_if_greater(&"handnote_c02_map_2", 1)
c02_final_layer = $"../DeployLayer/c02_final" c02_final_layer = $"../DeployLayer/c02_final"
if ( if (
@ -46,9 +47,9 @@ func _on_ground_ready() -> void:
mice_hole.enabled = false mice_hole.enabled = false
gas_light_upon_hole.lighted.connect(func(): gas_light_upon_hole.lighted.connect(func():
mice_hole.enabled = true mice_hole.enabled = true
Util.timer(1.5, await Util.wait(1.5)
SceneManager.pop_os_with_str.bind("c02_二楼血脚印") await SceneManager.pop_os_with_str("c02_二楼血脚印")
) EventManager.set_stage_if_greater(&"handnote_c02_shoe_giveToMouce", 1)
) )
closeup_ball = $"../DeployLayer/Closeup弹珠游戏" as Closeup2D closeup_ball = $"../DeployLayer/Closeup弹珠游戏" as Closeup2D
@ -86,6 +87,7 @@ func _on_mice_hole_interacted():
SceneManager.unlock_player() SceneManager.unlock_player()
if mice_hole.interacted_times >= 2: if mice_hole.interacted_times >= 2:
EventManager.set_stage_if_greater(&"handnote_c02_shoe_giveToMouce", 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_shoe", true) ArchiveManager.set_global_entry(&"c02_s02_mouse_push_shoe", true)
@ -176,6 +178,5 @@ func _on_exit_final_show(_arg):
SceneManager.release_player() SceneManager.release_player()
# 1: 牵手跑结束; 2: 谢幕演出结束 # 1: 牵手跑结束; 2: 谢幕演出结束
EventManager.set_stage(&"c02_burning_end_stage", 2) EventManager.set_stage(&"c02_burning_end_stage", 2)
EventManager.set_stage_if_greater("handnote_stage", 5)
# TODO 小蝉上楼后开启第二章 # TODO 小蝉上楼后开启第二章
ArchiveManager.archive.set_chapter_if_greater(3) ArchiveManager.archive.set_chapter_if_greater(3)

View File

@ -858,7 +858,6 @@ debug_global_data = Dictionary[String, Variant]({
"c02_s02_mouse_push_shoe": false, "c02_s02_mouse_push_shoe": false,
"c02_the_blind_room_unlocked": true, "c02_the_blind_room_unlocked": true,
"enabled_items": ["prop_火柴", "prop_院长的信", "prop_弹珠"], "enabled_items": ["prop_火柴", "prop_院长的信", "prop_弹珠"],
"handnote_stage": 0,
"player_x": 30.0 "player_x": 30.0
}) })
debug_ground_data = Dictionary[String, Variant]({ debug_ground_data = Dictionary[String, Variant]({
@ -893,7 +892,6 @@ debug_ground_data = Dictionary[String, Variant]({
"interacted_times": 0 "interacted_times": 0
} }
}) })
auto_ref_type = PackedStringArray("Ambush2D", "Inspectable2D", "Closeup2D", "Note2D", "Interactable2D", "Pickable2D", "Event2D", "Sprite2D", "ProAnimatedSprite2D", "AnimatedSprite2D", "Sfx", "Sfx2D", "VibeSfx", "PointLight2D", "Area2D", "MainPlayer", "CameraFocusMarker")
oneshot_animation = "" oneshot_animation = ""
[node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"] [node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"]
@ -1186,20 +1184,20 @@ texture = ExtResource("37_osg51")
collision_width_and_x = Vector2(150, 0) collision_width_and_x = Vector2(150, 0)
hook_method = "glimpse_hide_out" hook_method = "glimpse_hide_out"
[node name="Event2D叼纸小猫" type="Node2D" parent="Ground/DeployLayer" index="19"] [node name="Event_c02_ball_game_stage" type="Node2D" parent="Ground/DeployLayer" index="19"]
position = Vector2(164, 42) position = Vector2(164, 42)
script = ExtResource("35_h3h1a") script = ExtResource("35_h3h1a")
event = &"c02_ball_game_stage" event = &"c02_ball_game_stage"
hide_if_on_stage = Array[int]([0, 1, 2, 4]) hide_if_on_stage = Array[int]([0, 1, 2, 4])
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D叼纸小猫"] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event_c02_ball_game_stage"]
position = Vector2(0, 15) position = Vector2(0, 15)
sprite_frames = ExtResource("10_och2w") sprite_frames = ExtResource("10_och2w")
animation = &"叼纸小猫坐着呼吸" animation = &"叼纸小猫坐着呼吸"
autoplay = "叼纸小猫坐着呼吸" autoplay = "叼纸小猫坐着呼吸"
[node name="Pickable小猫纸条" parent="Ground/DeployLayer/Event2D叼纸小猫" instance=ExtResource("36_3u30v")] [node name="Pickable小猫纸条" parent="Ground/DeployLayer/Event_c02_ball_game_stage" instance=ExtResource("36_3u30v")]
position = Vector2(-3, 2) position = Vector2(-3, 2)
prop_key = "prop_小猫纸条" prop_key = "prop_小猫纸条"

View File

@ -28,7 +28,6 @@ func _on_flyer_exit(arg):
if arg: if arg:
set_data("flyer_shaven", true) set_data("flyer_shaven", true)
take_off_flyer() take_off_flyer()
EventManager.set_stage_if_greater("handnote_stage", 2)
func take_off_flyer(immediatelly = false): func take_off_flyer(immediatelly = false):
@ -39,6 +38,7 @@ func take_off_flyer(immediatelly = false):
var tween = create_tween() var tween = create_tween()
tween.tween_property(flyer, "modulate:a", 0.0, 1.0) tween.tween_property(flyer, "modulate:a", 0.0, 1.0)
await tween.finished await tween.finished
EventManager.set_stage_if_greater(&"handnote_c02_hand_requireCoin", 1)
else: else:
flyer.visible = false flyer.visible = false
var hand = $"../DeployLayer/小手讨东西" var hand = $"../DeployLayer/小手讨东西"

View File

@ -24,6 +24,7 @@ var boxcat_portal: Portal2D
func _on_ground_ready() -> void: func _on_ground_ready() -> void:
EventManager.set_stage_if_greater(&"handnote_c02_split_illusionSpace", 1)
color_mask = $"../BGSprite2D/ColorMask" color_mask = $"../BGSprite2D/ColorMask"
ambush_eavesdrop = $"../DeployLayer/Ambush偷听" ambush_eavesdrop = $"../DeployLayer/Ambush偷听"
ambush_lookback = $"../DeployLayer/Ambush回看洞口" ambush_lookback = $"../DeployLayer/Ambush回看洞口"

View File

@ -63,6 +63,7 @@ func _on_ground_ready() -> void:
xiao_chan_interactable.enabled = false xiao_chan_interactable.enabled = false
xiao_chan_sprite.visible = false xiao_chan_sprite.visible = false
head_cover_closeup.exit.connect(func(_arg): head_cover_closeup.exit.connect(func(_arg):
EventManager.set_stage_if_greater(&"handnote_c02_xchan_giveHerPuppet", 1)
head_cover_closeup.hide() head_cover_closeup.hide()
head_cover_closeup.enabled = false head_cover_closeup.enabled = false
xiao_chan_interactable.enabled = true xiao_chan_interactable.enabled = true
@ -122,6 +123,8 @@ func _on_xiao_chan_interacted() -> void:
xiao_chan_sprite.animation_finished.connect(func(): xiao_chan_sprite.animation_finished.connect(func():
create_tween().tween_property(xiao_chan_sprite, "modulate:a", 0.0, 1.0) create_tween().tween_property(xiao_chan_sprite, "modulate:a", 0.0, 1.0)
counter.enabled = true counter.enabled = true
EventManager.set_stage_if_greater(&"handnote_c02_xchan_sheKnowsMe", 2)
EventManager.set_stage_if_greater(&"handnote_c02_xchan_giveHerPuppet", 2)
) )
@ -144,6 +147,7 @@ var pushing_counter = false:
var counter_pushed_out = false var counter_pushed_out = false
var walking = false var walking = false
func _on_counter_interacted(): func _on_counter_interacted():
var player = SceneManager.get_player() as MainPlayer var player = SceneManager.get_player() as MainPlayer
if pushing_counter: if pushing_counter:

View File

@ -122,7 +122,6 @@ debug_ground_data = Dictionary[String, Variant]({
"interacted_times": 1 "interacted_times": 1
} }
}) })
auto_ref_type = PackedStringArray("Ambush2D", "Inspectable2D", "Closeup2D", "Note2D", "Interactable2D", "Pickable2D", "Event2D", "Sprite2D", "ProAnimatedSprite2D", "AnimatedSprite2D", "Sfx", "Sfx2D", "VibeSfx", "PointLight2D", "Area2D", "MainPlayer", "CameraFocusMarker")
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

@ -66,7 +66,7 @@ var icount: int:
# 9 小手交互,吓摔倒 # 9 小手交互,吓摔倒
SceneManager.lock_player(0, 9, true) SceneManager.lock_player(0, 9, true)
SceneManager.pop_os_with_str("c02_小手出现摔倒") SceneManager.pop_os_with_str("c02_小手出现摔倒")
Util.timer(1.5, $"Sfx摔倒".play) Util.timer(1.5, $"Sfx摔倒".play)
await SceneManager.get_player().animation_finished await SceneManager.get_player().animation_finished
SceneManager.pop_os_with_str("c02_小手是什么鬼") SceneManager.pop_os_with_str("c02_小手是什么鬼")
SceneManager.unlock_player() SceneManager.unlock_player()
@ -144,6 +144,7 @@ var interacting := false:
var communicating = false var communicating = false
func _on_interacted() -> void: func _on_interacted() -> void:
if interacting: if interacting:
print("小手 interacting 锁定中") print("小手 interacting 锁定中")
@ -199,7 +200,8 @@ func _on_interacted() -> void:
# 稍等片刻再给小鞋子 # 稍等片刻再给小鞋子
SceneManager.enable_prop_item("prop_小鞋子1") SceneManager.enable_prop_item("prop_小鞋子1")
await SceneManager.get_inspector().quit_and_hidden await SceneManager.get_inspector().quit_and_hidden
SceneManager.pop_os_with_str("c02_锡箔换小鞋子") await SceneManager.pop_os_with_str("c02_锡箔换小鞋子")
EventManager.set_stage_if_greater(&"handnote_c02_hand_requireCoin", 2)
var node = get_node("../自动跟随的老鼠") as Node2D var node = get_node("../自动跟随的老鼠") as Node2D
if node: if node:
node.visible = true node.visible = true
@ -227,7 +229,8 @@ func _on_interacted() -> void:
SceneManager.pop_debug_dialog_info("美术", "小手_老虎钳_hide + 小手_弹珠_show + 小手_弹珠_idle") SceneManager.pop_debug_dialog_info("美术", "小手_老虎钳_hide + 小手_弹珠_show + 小手_弹珠_idle")
await Util.wait(1.5) await Util.wait(1.5)
holding_prop = "prop_弹珠" holding_prop = "prop_弹珠"
EventManager.set_stage_if_greater("handnote_stage", 4) # 换回弹珠后完全结束
EventManager.set_stage_if_greater(&"handnote_c02_hand_exchange", 2)
elif id == 0 and key == "prop_弹珠" and not pliers_to_ball: elif id == 0 and key == "prop_弹珠" and not pliers_to_ball:
interacted_success = true interacted_success = true
sfx_success.play() sfx_success.play()
@ -244,3 +247,5 @@ func _on_interacted() -> void:
sign_mark.invalid_shake(matched_sign_texture, unmatched_sign_texture) sign_mark.invalid_shake(matched_sign_texture, unmatched_sign_texture)
SceneManager.unlock_player() SceneManager.unlock_player()
interacting = false interacting = false
if id == 0:
EventManager.set_stage_if_greater(&"handnote_c02_hand_exchange", 1)

View File

@ -0,0 +1,54 @@
@tool
class_name HandnoteEvent2D
extends Sprite2D
# 当前事件
@export var event: StringName
@export var hide_if_on_stage: Array[int] = []
@export_tool_button("复制 greater setter") var copy_greater_setter = _copy_greater_setter
@export_tool_button("复制 setter") var copy_setter = _copy_setter
@export_tool_button("复制 getter") var copy_getter = _copy_getter
var stage := 0
func _ready() -> void:
if event != &"":
name = "Event_" + event
if Engine.is_editor_hint():
return
stage = EventManager.get_stage(event)
if event == &"":
printerr("[HandnoteEvent2D] event is not set. continue processing...")
refresh_visibility()
var blot_out_node = get_node_or_null("BlotOut")
if blot_out_node:
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
blot_out_node.visible = Engine.is_editor_hint() or stage == 2
func refresh_visibility() -> void:
var should_show = not stage in hide_if_on_stage
if visible != should_show:
visible = should_show
###### TOOL BUTTON
func _copy_greater_setter():
var text = 'EventManager.set_stage_if_greater(&"%s", 1)' % event
DisplayServer.clipboard_set(text)
print("Copied event greater setter: %s" % text)
func _copy_setter():
var text = 'EventManager.set_stage(&"%s", 1)' % event
DisplayServer.clipboard_set(text)
print("Copied event setter: %s" % text)
func _copy_getter():
var text = 'EventManager.get_stage(&"%s")' % event
DisplayServer.clipboard_set(text)
print("Copied event getter: %s" % text)

View File

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

View File

@ -0,0 +1,49 @@
@tool
extends HandnoteEvent2D
@export_range(0, 5) var chapter := 1
@export_tool_button("同步") var sync_nodes = _sync_nodes
@export var slices_path = "res://asset/art/ui/note/c02_slices/"
# 0 初始化隐藏1 开始显示2 划掉3 结束隐藏
@export var ignore_stages: Array[int] = [0, 3]
func _ready() -> void:
if Engine.is_editor_hint():
return
super._ready()
visible = stage == chapter
func _sync_nodes() -> void:
if not DirAccess.dir_exists_absolute(slices_path):
printerr("目录不存在: ", slices_path)
return
var existed_events = []
_travase_existed_nodes(get_tree().edited_scene_root, existed_events)
for s in DirAccess.get_files_at(slices_path):
var evt = &"handnote_" + s.split(".")[0]
if existed_events.has(evt):
continue
print("[color=green]创建事件节点: ", evt)
var event_node = HandnoteEvent2D.new() as HandnoteEvent2D
event_node.texture = load(slices_path + s)
event_node = event_node
event_node.event = evt
event_node.hide_if_on_stage = ignore_stages.duplicate()
add_child(event_node)
event_node.owner = get_tree().edited_scene_root
func _travase_existed_nodes(node, existed_events: Array):
if not node:
return
if node is HandnoteEvent2D:
existed_events.append(node.event)
print("配置已存在的事件节点: ", node.event)
if len(node.hide_if_on_stage) == 0:
print_rich("[color=green]设置 hide_if_on_stage: ", ignore_stages)
node.hide_if_on_stage = ignore_stages.duplicate()
else:
print_rich("[color=cyan]已存在 hide_if_on_stage跳过设置: ", node.hide_if_on_stage)
for c in node.get_children():
_travase_existed_nodes(c, existed_events)

View File

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

View File

@ -1,46 +1,32 @@
[gd_scene load_steps=13 format=3 uid="uid://cy7wrrsm8e04f"] [gd_scene load_steps=26 format=3 uid="uid://cy7wrrsm8e04f"]
[ext_resource type="Script" uid="uid://bkyg34xfhe60p" path="res://scene/ux/note/ux_note.gd" id="1_e61yw"] [ext_resource type="Script" uid="uid://bkyg34xfhe60p" path="res://scene/ux/note/ux_note.gd" id="1_e61yw"]
[ext_resource type="Texture2D" uid="uid://bi7l47cit2xs" path="res://asset/art/ui/ux_panel/完整背景.png" id="2_1ka1m"] [ext_resource type="Texture2D" uid="uid://bi7l47cit2xs" path="res://asset/art/ui/ux_panel/完整背景.png" id="2_1ka1m"]
[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="3_nk0pj"] [ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="3_nk0pj"]
[ext_resource type="PackedScene" uid="uid://ut4a5gwb4naq" path="res://scene/ux/tabs.tscn" id="4_7vpan"] [ext_resource type="PackedScene" uid="uid://ut4a5gwb4naq" path="res://scene/ux/tabs.tscn" id="4_7vpan"]
[ext_resource type="Texture2D" uid="uid://dsj3l0baqg1g7" path="res://asset/art/ui/ux_panel/小蝶笔记.png" id="5_d1cia"] [ext_resource type="Texture2D" uid="uid://dsj3l0baqg1g7" path="res://asset/art/ui/ux_panel/小蝶笔记.png" id="5_d1cia"]
[ext_resource type="Texture2D" uid="uid://bv57eyqs03k4y" path="res://asset/art/ui/note/线索笔记内容-29.png" id="6_7vpan"] [ext_resource type="Script" uid="uid://dm8aeml8ndctg" path="res://scene/ux/note/sync_slices.gd" id="5_nk0pj"]
[ext_resource type="Texture2D" uid="uid://blub5hsn6iqit" path="res://asset/art/ui/note/线索笔记内容-30.png" id="6_n8isc"] [ext_resource type="Texture2D" uid="uid://b87majbgamcqt" path="res://asset/art/ui/note/c02_slices/c02_road_address.tres" id="6_dohnv"]
[ext_resource type="Texture2D" uid="uid://beltvxcu7pumi" path="res://asset/art/ui/note/线索笔记内容-31.png" id="7_8rh03"] [ext_resource type="Script" uid="uid://c5woj7mivdxrh" path="res://scene/ux/note/note_event.gd" id="7_nfxph"]
[ext_resource type="Texture2D" uid="uid://ldh387gluo1t" path="res://asset/art/ui/note/线索笔记内容-34.png" id="7_d1cia"] [ext_resource type="Texture2D" uid="uid://bg1rnxsr5of7v" path="res://asset/art/ui/note/c02_slices/c02_list_namesAndGoal.tres" id="8_nfxph"]
[ext_resource type="Texture2D" uid="uid://db1k1t1lc34ut" path="res://asset/art/ui/note/线索笔记内容-32.png" id="8_kiw8q"] [ext_resource type="Texture2D" uid="uid://dvjqumfy4invx" path="res://asset/art/ui/note/c02_slices/c02_map_1Left.tres" id="9_kv812"]
[ext_resource type="Texture2D" uid="uid://fnbysuck5nj2" path="res://asset/art/ui/note/c02_slices/c02_hand_exchange.tres" id="10_1efbh"]
[ext_resource type="Texture2D" uid="uid://c30s0pieywjpa" path="res://asset/art/ui/note/c02_slices/c02_blotOut.tres" id="11_dohnv"]
[ext_resource type="Texture2D" uid="uid://clxnk1kujhg3t" path="res://asset/art/ui/note/c02_slices/c02_musicbox_needPuppet.tres" id="11_vv1f8"]
[ext_resource type="Texture2D" uid="uid://bds1oni7dlapf" path="res://asset/art/ui/note/c02_slices/c02_meat_knockDoor.tres" id="13_iiemy"]
[ext_resource type="Texture2D" uid="uid://kiyw03vc3w12" path="res://asset/art/ui/note/c02_slices/c02_meat_stopMouse.tres" id="14_cd76s"]
[ext_resource type="Texture2D" uid="uid://bvdpo5k83tb6s" path="res://asset/art/ui/note/c02_slices/c02_shoe_giveToMouce.tres" id="15_60qdw"]
[ext_resource type="Texture2D" uid="uid://viyauy3w72bv" path="res://asset/art/ui/note/c02_slices/c02_gate_chain.tres" id="16_c71vy"]
[ext_resource type="Texture2D" uid="uid://cdygjqy3a0ugw" path="res://asset/art/ui/note/c02_slices/c02_map_1Right.tres" id="17_gmufd"]
[ext_resource type="Texture2D" uid="uid://bjn4oo0fieim6" path="res://asset/art/ui/note/c02_slices/c02_split_illusionSpace.tres" id="18_en7n8"]
[ext_resource type="Texture2D" uid="uid://ccm0eg5apjro0" path="res://asset/art/ui/note/c02_slices/c02_xchan_giveHerPuppet.tres" id="19_16oeu"]
[ext_resource type="Texture2D" uid="uid://ddbjvbjpd6nsr" path="res://asset/art/ui/note/c02_slices/c02_map_2.tres" id="20_0me01"]
[ext_resource type="Texture2D" uid="uid://cfrr5118wx6f" path="res://asset/art/ui/note/c02_slices/c02_hand_requireCoin.tres" id="21_x45ak"]
[ext_resource type="Texture2D" uid="uid://dqg5ha6sg60ti" path="res://asset/art/ui/note/c02_slices/c02_xchan_sheKnowsMe.tres" id="22_rkppt"]
[ext_resource type="Texture2D" uid="uid://bs2aus63tgwv1" path="res://asset/art/ui/note/c02_slices/c02_xchan_isSheGohst.tres" id="23_njh4q"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_j3kdg"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_j3kdg"]
[sub_resource type="GDScript" id="GDScript_7vpan"]
script/source = "extends Event2D
# var prev_stage := 0
# var stage := 0
func _ready() -> void:
super._ready()
if stage > 0:
get_node(\"../TextureRect\" + str(stage)).visible = true
func _on_global_stage_updated(e: StringName, s: int):
super._on_global_stage_updated(e, s)
func _on_ground_ready(ground: Ground2D):
pass
func _on_pre_stage_updated():
pass
func _on_stage_updated():
pass
"
[node name="Note" type="CanvasLayer"] [node name="Note" type="CanvasLayer"]
process_mode = 3 process_mode = 3
script = ExtResource("1_e61yw") script = ExtResource("1_e61yw")
@ -89,69 +75,254 @@ texture = ExtResource("5_d1cia")
expand_mode = 5 expand_mode = 5
stretch_mode = 5 stretch_mode = 5
[node name="TextureRect1" type="TextureRect" parent="Bag/Book"] [node name="Event_handnote_chapter_stage" type="Sprite2D" parent="Bag/Book"]
visible = false position = Vector2(340, 137)
layout_mode = 1 scale = Vector2(0.3, 0.3)
anchors_preset = 15 script = ExtResource("5_nk0pj")
anchor_right = 1.0 event = &"handnote_chapter_stage"
anchor_bottom = 1.0 metadata/_custom_type_script = "uid://c5woj7mivdxrh"
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("6_7vpan")
expand_mode = 1
[node name="TextureRect2" type="TextureRect" parent="Bag/Book"] [node name="Event_handnote_c02_road_address" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
visible = false position = Vector2(-493.333, -276.667)
layout_mode = 1 texture = ExtResource("6_dohnv")
anchors_preset = 15 script = ExtResource("7_nfxph")
anchor_right = 1.0 event = &"handnote_c02_road_address"
anchor_bottom = 1.0 hide_if_on_stage = Array[int]([0, 3])
grow_horizontal = 2 metadata/_custom_type_script = "uid://c5woj7mivdxrh"
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("6_n8isc")
expand_mode = 1
[node name="TextureRect3" type="TextureRect" parent="Bag/Book"] [node name="Event_handnote_c02_list_namesAndGoal" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
visible = false position = Vector2(-566.667, -163.333)
layout_mode = 1 texture = ExtResource("8_nfxph")
anchors_preset = 15 script = ExtResource("7_nfxph")
anchor_right = 1.0 event = &"handnote_c02_list_namesAndGoal"
anchor_bottom = 1.0 hide_if_on_stage = Array[int]([0, 3])
grow_horizontal = 2 metadata/_custom_type_script = "uid://c5woj7mivdxrh"
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("7_8rh03")
expand_mode = 1
[node name="TextureRect4" type="TextureRect" parent="Bag/Book"] [node name="Event_handnote_c02_map_1Left" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
visible = false position = Vector2(-660, 250)
layout_mode = 1 texture = ExtResource("9_kv812")
anchors_preset = 15 script = ExtResource("7_nfxph")
anchor_right = 1.0 event = &"handnote_c02_map_1Left"
anchor_bottom = 1.0 hide_if_on_stage = Array[int]([0, 3])
grow_horizontal = 2 metadata/_custom_type_script = "uid://c5woj7mivdxrh"
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("8_kiw8q")
expand_mode = 1
[node name="TextureRect5" type="TextureRect" parent="Bag/Book"] [node name="Event_handnote_c02_hand_exchange" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left"]
visible = false position = Vector2(-186.667, 16.6667)
layout_mode = 1 texture = ExtResource("10_1efbh")
anchors_preset = 15 script = ExtResource("7_nfxph")
anchor_right = 1.0 event = &"handnote_c02_hand_exchange"
anchor_bottom = 1.0 hide_if_on_stage = Array[int]([0, 3])
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("7_d1cia")
expand_mode = 1
[node name="Event2D" type="Node2D" parent="Bag/Book"] [node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left/Event_handnote_c02_hand_exchange"]
script = SubResource("GDScript_7vpan") position = Vector2(-16.6663, -20.0001)
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d" scale = Vector2(1.64321, 1.62157)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_musicbox_needPuppet" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left"]
position = Vector2(-153.333, 140)
texture = ExtResource("11_vv1f8")
script = ExtResource("7_nfxph")
event = &"handnote_c02_musicbox_needPuppet"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left/Event_handnote_c02_musicbox_needPuppet"]
position = Vector2(3.33337, 3.05176e-05)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_meat_knockDoor" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left"]
position = Vector2(-40, 53.3333)
texture = ExtResource("13_iiemy")
script = ExtResource("7_nfxph")
event = &"handnote_c02_meat_knockDoor"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left/Event_handnote_c02_meat_knockDoor"]
position = Vector2(3.33786e-05, 3.05176e-05)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_meat_stopMouse" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left"]
position = Vector2(160, -80)
texture = ExtResource("14_cd76s")
script = ExtResource("7_nfxph")
event = &"handnote_c02_meat_stopMouse"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left/Event_handnote_c02_meat_stopMouse"]
position = Vector2(3.33337, 3.05176e-05)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_gate_chain" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left"]
position = Vector2(143.333, 136.667)
texture = ExtResource("16_c71vy")
script = ExtResource("7_nfxph")
event = &"handnote_c02_gate_chain"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Left/Event_handnote_c02_gate_chain"]
position = Vector2(0.000396729, 3.33299)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_map_1Right" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
position = Vector2(-363.333, 340)
texture = ExtResource("17_gmufd")
script = ExtResource("7_nfxph")
event = &"handnote_c02_map_1Right"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_split_illusionSpace" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Right"]
position = Vector2(-33.3334, -80)
texture = ExtResource("18_en7n8")
script = ExtResource("7_nfxph")
event = &"handnote_c02_split_illusionSpace"
hide_if_on_stage = Array[int]([0, 3])
[node name="Event_handnote_c02_xchan_giveHerPuppet" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Right"]
position = Vector2(50, -56.6666)
texture = ExtResource("19_16oeu")
script = ExtResource("7_nfxph")
event = &"handnote_c02_xchan_giveHerPuppet"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_1Right/Event_handnote_c02_xchan_giveHerPuppet"]
position = Vector2(-0.000321865, -3.3334)
rotation = -0.261797
scale = Vector2(2, 1.2)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_map_2" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
position = Vector2(313.333, -143.333)
texture = ExtResource("20_0me01")
script = ExtResource("7_nfxph")
event = &"handnote_c02_map_2"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_hand_requireCoin" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_2"]
position = Vector2(146.667, -3.33331)
texture = ExtResource("21_x45ak")
script = ExtResource("7_nfxph")
event = &"handnote_c02_hand_requireCoin"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_2/Event_handnote_c02_hand_requireCoin"]
position = Vector2(3.33337, 3.33298)
scale = Vector2(1.35575, 1.86951)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_shoe_giveToMouce" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_2"]
position = Vector2(-46.6666, -10)
texture = ExtResource("15_60qdw")
script = ExtResource("7_nfxph")
event = &"handnote_c02_shoe_giveToMouce"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_map_2/Event_handnote_c02_shoe_giveToMouce"]
position = Vector2(0.000236511, 3.33301)
scale = Vector2(1.35575, 1.86951)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_xchan_sheKnowsMe" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage"]
position = Vector2(-443.333, -10)
texture = ExtResource("22_rkppt")
script = ExtResource("7_nfxph")
event = &"handnote_c02_xchan_sheKnowsMe"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage/Event_handnote_c02_xchan_sheKnowsMe"]
position = Vector2(96.6663, 26.6666)
texture = ExtResource("23_njh4q")
[node name="Event_handnote_chapter_stage2" type="Sprite2D" parent="Bag/Book"]
visible = false
position = Vector2(340, 137)
scale = Vector2(0.3, 0.3)
script = ExtResource("5_nk0pj")
chapter = 2
slices_path = "res://asset/art/ui/note/c03_slices/"
event = &"handnote_chapter_stage"
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_road_address" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(-493.333, -276.667)
texture = ExtResource("6_dohnv")
script = ExtResource("7_nfxph")
event = &"handnote_c02_road_address"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_list_namesAndGoal" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(-566.667, -163.333)
texture = ExtResource("8_nfxph")
script = ExtResource("7_nfxph")
event = &"handnote_c02_list_namesAndGoal"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_map_1Left" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(-660, 250)
texture = ExtResource("9_kv812")
script = ExtResource("7_nfxph")
event = &"handnote_c02_map_1Left"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_meat_knockDoor" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2/Event_handnote_c02_map_1Left"]
position = Vector2(-40, 53.3333)
texture = ExtResource("13_iiemy")
script = ExtResource("7_nfxph")
event = &"handnote_c02_meat_knockDoor"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2/Event_handnote_c02_map_1Left/Event_handnote_c02_meat_knockDoor"]
position = Vector2(3.33786e-05, 3.05176e-05)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_meat_stopMouse" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2/Event_handnote_c02_map_1Left"]
position = Vector2(160, -80)
texture = ExtResource("14_cd76s")
script = ExtResource("7_nfxph")
event = &"handnote_c02_meat_stopMouse"
hide_if_on_stage = Array[int]([0, 3])
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2/Event_handnote_c02_map_1Left/Event_handnote_c02_meat_stopMouse"]
position = Vector2(3.33337, 3.05176e-05)
scale = Vector2(1.5, 1.5)
texture = ExtResource("11_dohnv")
[node name="Event_handnote_c02_map_1Right" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(-363.333, 340)
texture = ExtResource("17_gmufd")
script = ExtResource("7_nfxph")
event = &"handnote_c02_map_1Right"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_map_2" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(313.333, -143.333)
texture = ExtResource("20_0me01")
script = ExtResource("7_nfxph")
event = &"handnote_c02_map_2"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="Event_handnote_c02_xchan_sheKnowsMe" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2"]
position = Vector2(-443.333, -10)
texture = ExtResource("22_rkppt")
script = ExtResource("7_nfxph")
event = &"handnote_c02_xchan_sheKnowsMe"
hide_if_on_stage = Array[int]([0, 3])
metadata/_custom_type_script = "uid://c5woj7mivdxrh"
[node name="BlotOut" type="Sprite2D" parent="Bag/Book/Event_handnote_chapter_stage2/Event_handnote_c02_xchan_sheKnowsMe"]
position = Vector2(96.6663, 26.6666)
texture = ExtResource("23_njh4q")
[node name="Tabs" parent="Bag" node_paths=PackedStringArray("root") instance=ExtResource("4_7vpan")] [node name="Tabs" parent="Bag" node_paths=PackedStringArray("root") instance=ExtResource("4_7vpan")]
unique_name_in_owner = true unique_name_in_owner = true