流程铺设:第二章瞎子卧室

This commit is contained in:
cakipaul 2025-07-06 20:44:06 +08:00
parent 93c27074db
commit 3fac160a99
22 changed files with 399 additions and 18 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkn0cytl435yw"
path="res://.godot/imported/刀.png-ea51e291b52e41810a58ef723d8b650a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/刀.png"
dest_files=["res://.godot/imported/刀.png-ea51e291b52e41810a58ef723d8b650a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhdo8nxthe0et"
path="res://.godot/imported/刀把.png-fc8d9d9e1ab035d9dabca2fe2ce625af.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/刀把.png"
dest_files=["res://.godot/imported/刀把.png-fc8d9d9e1ab035d9dabca2fe2ce625af.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ush0d2g8uj08"
path="res://.godot/imported/带血的纸条.png-8a4505ea7f70d9d0dc10043d473e173a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/带血的纸条.png"
dest_files=["res://.godot/imported/带血的纸条.png-8a4505ea7f70d9d0dc10043d473e173a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d03ja5ujdmyce"
path="res://.godot/imported/棺材特写.png-e199bb1f4e0372402ac9f4908397a75c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/棺材特写.png"
dest_files=["res://.godot/imported/棺材特写.png-e199bb1f4e0372402ac9f4908397a75c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bihf4gpj0r1jj"
path="res://.godot/imported/棺材纸条.png-14053e1063edb6915b1aea539be6699a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/棺材纸条.png"
dest_files=["res://.godot/imported/棺材纸条.png-14053e1063edb6915b1aea539be6699a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crj86tnkc03nk"
path="res://.godot/imported/特写遮罩.png-676888c92a7dc46e8f45cad0f0bb4653.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/特写遮罩.png"
dest_files=["res://.godot/imported/特写遮罩.png-676888c92a7dc46e8f45cad0f0bb4653.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cd76oamv0msug"
path="res://.godot/imported/胶水.png-fca93c835a170d6ecb26e96a9f9d7be5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s09_棺材房/棺材互动/胶水.png"
dest_files=["res://.godot/imported/胶水.png-fca93c835a170d6ecb26e96a9f9d7be5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -8,6 +8,11 @@ c02_musicbox_stage
c02_madman_interacted_stage
# 0:默认 1:寻找弹珠_老虎钳可以换弹珠 2:给出弹珠 3:游戏结束_小猫纸片 4:游戏结束_小猫离开
c02_ball_game_stage
# c03 第二章
# 0未开始 1邀请 2完成
c03_invite_xchan_supper
=> END
~ ArchiveStage

View File

@ -3,7 +3,7 @@ class_name GlobalConfig extends Resource
#const DEBUG = true
static var DEBUG = false
# 影响事件的 release_stage # 0demo 1release
const RELEASE_STAGE := 1
const RELEASE_STAGE := 0
# 与 Editor 编辑器有 Debugger 连接

View File

@ -3,11 +3,33 @@ extends Node2D
class_name Event2D
# 当前事件
@export var event: StringName
@export var hide_if_on_stage: Array[int] = []
@export var event: StringName:
set(val):
if event != val:
event = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export var hide_if_on_stage: Array[int] = []:
set(val):
if hide_if_on_stage != val:
hide_if_on_stage = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
# 前置依赖事件,为空时意味着无前置事件
@export var pre_event: StringName
@export var hide_if_pre_on_stage: Array[int] = []
@export var pre_event: StringName:
set(val):
if pre_event != val:
pre_event = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export var hide_if_pre_on_stage: Array[int] = []:
set(val):
if hide_if_pre_on_stage != val:
hide_if_pre_on_stage = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_multiline var event_memo := ""
@export_tool_button("auto memo") var auto_memo = _auto_memo
@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
@ -113,3 +135,25 @@ func _copy_getter():
var text = 'EventManager.get_stage(&"%s")' % event
DisplayServer.clipboard_set(text)
print("Copied event getter: %s" % text)
func _auto_memo() -> void:
var memo_str = "HideIfOnStage:\n"
if event != "" and hide_if_on_stage:
memo_str += event
memo_str += "="
memo_str += "|".join(hide_if_on_stage)
memo_str += "\n"
if pre_event != "" and hide_if_pre_on_stage:
memo_str += pre_event
memo_str += "="
memo_str += "|".join(hide_if_pre_on_stage)
var existing_lines = event_memo.split("\n")
# 保留 # 开头的 line
var kept_lines = []
for line in existing_lines:
if line.begins_with("#"):
kept_lines.append(line)
event_memo = "\n".join(kept_lines)
event_memo += "\n" if kept_lines else ""
event_memo += memo_str

View File

@ -1,26 +1,75 @@
@tool
class_name EventBinder extends Node
@export_tool_button("auto memo") var auto_memo = _auto_memo
@export_multiline var memo := ""
@export_group("Updater", "updater")
@export var updater_event := &""
@export_enum("enabler", "shower") var updater_mode := "enabler"
@export var updater_event := &"":
set(val):
if updater_event != val:
updater_event = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_enum("enabler", "shower") var updater_mode := "enabler":
set(val):
if updater_mode != val:
updater_mode = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
# 仅对 canvas item 生效; <=0 时无 ease
@export var updater_ease_duration := 1.0
@export_enum("include", "exclude") var updater_stage_mode := "include"
@export var updater_stages: Array[int] = [1]
@export var updater_ease_duration := 1.0:
set(val):
if updater_ease_duration != val:
updater_ease_duration = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_enum("include", "exclude") var updater_stage_mode := "include":
set(val):
if updater_stage_mode != val:
updater_stage_mode = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export var updater_stages: Array[int] = [1]:
set(val):
if updater_stages != val:
updater_stages = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_group("Trigger", "trigger")
@export var trigger_event := &""
@export var trigger_event := &"":
set(val):
if trigger_event != val:
trigger_event = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_tool_button("AutoDetectMode") var trigger_auto_detect_mode := _auto_detect_mode
@export_enum("none", "interacted", "triggered", "played") var trigger_mode := "none"
@export_range(0, 10000, 1) var trigger_stage := 1
@export var trigger_set_stage_if_greater := true
@export_enum("none", "interacted", "triggered", "played") var trigger_mode := "none":
set(val):
if trigger_mode != val:
trigger_mode = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export_range(0, 10000, 1) var trigger_stage := 1:
set(val):
if trigger_stage != val:
trigger_stage = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
@export var trigger_set_stage_if_greater := true:
set(val):
if trigger_set_stage_if_greater != val:
trigger_set_stage_if_greater = val
if is_node_ready() and Engine.is_editor_hint():
_auto_memo()
var _local_enable_event_stage := 0
func _ready() -> void:
if Engine.is_editor_hint():
_auto_memo()
return
var parent = get_parent()
if not updater_event.is_empty():
@ -102,3 +151,37 @@ func _auto_detect_mode():
trigger_mode = "played"
else:
printerr("[EventBinder] _auto_detect_mode cannot detect trigger mode. path:", get_path())
#### TOOL BUTTON
func _auto_memo() -> void:
# updater release_stage[(!)=0|1] 时[显示|启用][parent.name.replace("Closeup", "")]
# trigger [parent] [picked|played...] 时 release_stage=1(greater|any)
var parent_name = get_parent().name.to_lower()
# replace english letters
var matcher = RegEx.create_from_string("^[a-z]*(.*)$")
var parent_name_match = matcher.search(parent_name).get_string(1)
if parent_name_match != "":
parent_name = parent_name_match
var memo_str = ""
if updater_event != "":
memo_str = updater_event
memo_str += "=" if updater_stage_mode == "include" else "!="
memo_str += "|".join(updater_stages) + ""
memo_str += "显示" if updater_mode == "shower" else "启用"
memo_str += " [" + parent_name + "]\n"
if trigger_event != "" and trigger_mode != "none":
memo_str += "[" + parent_name + "] " + trigger_mode + ""
memo_str += trigger_event + "=" + str(trigger_stage)
memo_str += "(greater)" if trigger_set_stage_if_greater else "(any)"
var existing_lines = memo.split("\n")
# 保留 # 开头的 line
var kept_lines = []
for line in existing_lines:
if line.begins_with("#"):
kept_lines.append(line)
memo = "\n".join(kept_lines)
memo += "\n" if kept_lines else ""
memo += memo_str

View File

@ -216,6 +216,7 @@ prop_key = "prop_奇怪的肉"
[node name="EventBinder" type="Node" parent="Ground/DeployLayer/Interactable放肉处"]
script = ExtResource("6_yaa68")
memo = "[放肉处] interacted时c03_s01_meat_put=1(greater)"
trigger_event = &"c03_s01_meat_put"
trigger_mode = "interacted"
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
@ -224,6 +225,7 @@ metadata/_custom_type_script = "uid://0wjaho6qkg6s"
script = ExtResource("7_obrgj")
event = &"c03_s01_meat_put"
hide_if_on_stage = Array[int]([0, 2])
event_memo = "c03_s01_meat_put=0|2"
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
[node name="窗口闪动" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D放肉后"]
@ -245,6 +247,8 @@ packed_scene = ExtResource("7_d27sg")
[node name="EventBinder" type="Node" parent="Ground/DeployLayer/Event2D放肉后/CloseupDemo公告"]
script = ExtResource("6_yaa68")
memo = "release_stage=0 时显示 [公告]
"
updater_event = &"release_stage"
updater_mode = "shower"
updater_stages = Array[int]([0])
@ -354,6 +358,8 @@ hook_method = "eavesdrop_luren"
[node name="EventBinder" type="Node" parent="Ground/DeployLayer/Ambush偷听陆仁"]
script = ExtResource("6_yaa68")
memo = "c03_s01_meat_put=1 时启用 [偷听陆仁]
"
updater_event = &"c03_s01_meat_put"
metadata/_custom_type_script = "uid://0wjaho6qkg6s"

View File

@ -169,13 +169,16 @@ position = Vector2(0, -2)
scale = Vector2(0.5, 0.5)
texture = ExtResource("7_u55tr")
[node name="Event2D偷听陆仁小蝶对话后" type="Node2D" parent="Ground/DeployLayer" index="4"]
[node name="Event2D偷听陆仁对话后" type="Node2D" parent="Ground/DeployLayer" index="4"]
script = ExtResource("8_pixqd")
event = &"c03_invite_xchan_supper"
pre_event = &"c03_eavesdrop_luren"
hide_if_pre_on_stage = Array[int]([0])
event_memo = "HideIfOnStage:
c03_eavesdrop_luren=0"
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Event2D偷听陆仁小蝶对话后"]
[node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Event2D偷听陆仁对话后"]
position = Vector2(200, -14)
texture = ExtResource("9_wdjh5")

View File

@ -220,7 +220,7 @@
},
"handnote_c02_map_2": 0,
"handnote_c02_shoe_giveToMouce": 0,
"player_x": 30.0
"player_x": 600.0
},
"ground": {
&"Ambush三男孩": {

View File

@ -15,7 +15,9 @@ func _on_global_stage_updated(e: StringName, s: int):
func _on_ground_ready(ground: Ground2D):
pass
if stage == 0:
# 邀请小蝉晚饭
EventManager.set_stage(event, 1)
func _on_pre_stage_updated():