完善第二章全流程

This commit is contained in:
cakipaul 2025-08-05 17:38:56 +08:00
parent b38692ed58
commit df47ccd56b
41 changed files with 279 additions and 139 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bjdy0o0qngukl"
path="res://.godot/imported/e_运尸车.png-b127083281dd80f3eacd524cca30cf0d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s00_院子与其他/e_运尸车.png"
dest_files=["res://.godot/imported/e_运尸车.png-b127083281dd80f3eacd524cca30cf0d.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: 2.6 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://3ndu71hc20d4"
path="res://.godot/imported/e_运尸车2.png-93a0d5713c6be3535a894bbcb867240f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://asset/art/scene/c03/s00_院子与其他/e_运尸车2.png"
dest_files=["res://.godot/imported/e_运尸车2.png-93a0d5713c6be3535a894bbcb867240f.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.

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://b08ps5rke143i"
path="res://.godot/imported/amb_灰姑演出.ogg-82eba2dd124b32d60c219b76d37a3150.oggvorbisstr"
[deps]
source_file="res://asset/audio/sfx/交互/第二章/amb_灰姑演出.ogg"
dest_files=["res://.godot/imported/amb_灰姑演出.ogg-82eba2dd124b32d60c219b76d37a3150.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bx2l0xus8u1em"
path="res://.godot/imported/sfx_灰姑出场.ogg-093659c3fdc5195c9b61a35ceff17e4c.oggvorbisstr"
[deps]
source_file="res://asset/audio/sfx/交互/第二章/sfx_灰姑出场.ogg"
dest_files=["res://.godot/imported/sfx_灰姑出场.ogg-093659c3fdc5195c9b61a35ceff17e4c.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://4vhd263cfr2o"
path="res://.godot/imported/sfx瞎子卧室灰姑出场.ogg-5422b62cb38584ac7ba2b89b789359f9.oggvorbisstr"
[deps]
source_file="res://asset/audio/sfx/交互/第二章/sfx瞎子卧室灰姑出场.ogg"
dest_files=["res://.godot/imported/sfx瞎子卧室灰姑出场.ogg-5422b62cb38584ac7ba2b89b789359f9.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dwgmsimffey73"
path="res://.godot/imported/sfx瞎子卧室灰姑氛围.ogg-3ee28d2fddf8bb28120d1047ba19437d.oggvorbisstr"
[deps]
source_file="res://asset/audio/sfx/交互/第二章/sfx瞎子卧室灰姑氛围.ogg"
dest_files=["res://.godot/imported/sfx瞎子卧室灰姑氛围.ogg-3ee28d2fddf8bb28120d1047ba19437d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -62,3 +62,4 @@ c03_肉铺账本6,二十日 卖三〇三三 猪肉一斤,,,,
c03_肉铺账本7,二十五日 新货到 米肉二十斤 自留 米肉五斤,,,,
c03_肉铺账本8,二十六日 赠远山兄 米肉二斤,,,,
c03_肉铺账本9,二十七日 卖三〇一二 米肉一斤,,,,
c03_s04_柜子照片,吾唯一至亲 李二弟,,,,

1 keys zh_CN _character _notes _tags en
62 c03_肉铺账本7 二十五日 新货到 米肉二十斤 自留 米肉五斤
63 c03_肉铺账本8 二十六日 赠远山兄 米肉二斤
64 c03_肉铺账本9 二十七日 卖三〇一二 米肉一斤
65 c03_s04_柜子照片 吾唯一至亲 李二弟

View File

@ -86,3 +86,7 @@
二十六日 赠远山兄 米肉二斤 [ID:c03_肉铺账本8]
二十七日 卖三〇一二 米肉一斤 [ID:c03_肉铺账本9]
=> END
~ c03_其他特写等内容
吾唯一至亲 李二弟 [ID:c03_s04_柜子照片]
=> END

View File

@ -1,6 +1,7 @@
keys,zh_CN,_character,_notes,_tags,zh_SH,en
prop_下半部的舌头,下半部的舌头,,,[#texture=c03/ux_下半部的舌头.png],,
input_麻将游戏_操作规则,依次点击两块麻将可进行交换,,,,,
ui_center_notify_c03纸人求药,给我药,,,,,
index_新游戏,新游戏,,,,,New Game
index_继续游戏,继续游戏,,,,,Continue
index_退出游戏,退出游戏,,,,,Exit Game
@ -53,7 +54,7 @@ input_麻将整理游戏_开始方式,取出「三筒」开启整理,,,,,
input_麻将游戏_交换规则,依次点击两块麻将可进行交换,,,,,
input_麻将游戏_回合开始,回合开始,正确换牌后将自动打出,,,,,
ui_center_notify_c03纸人浆糊舌头,帮我粘舌头,,,,,
ui_center_notify_c03纸人求药,给我药,,,,,
给我药 [ID:],给我药 [ID:],,,,,
ui_center_notify_c03药车缺少物品,缺少药引,,,,,
ui_center_notify_c03药车不能再取药材,同种药材只能取出一份,,,,,
ui_center_notify_c03放到碗中或原处,药材只能放到碗中或原处,,,,,
@ -170,7 +171,7 @@ prop_邀请信_说明,邀请信说明,,,,,
prop_两个麻将,麻将,,,[#texture=c03/两个麻将.png],,
prop_两个麻将_说明,王守义出老千时用的麻将{br}我听说,那会儿赌场由黑帮控制,秩序混乱,赌徒设局被抓后,往往下场凄惨,只有极少数人能够全身而退。,,,,,
prop_符纸,符纸,,,[#texture=c03/符纸纸条.png][#inspect=c03/ux_符纸纸条.png],,
prop_符纸_说明,符纸说明,,,,,
prop_符纸_说明,切记将符纸布于墙面和棺体,等候七日,在水中滴入髫年血,待其于水中凝固,后浇洒于棺体,事成将髫年尸首交于我,方能保你日后平安。,,,,,
prop_沾血的纸条,沾血的纸条,,,[#texture=c03/沾血的纸条.png][#inspect=c03/ux_沾血的纸条.png],,
prop_沾血的纸条_说明,文开,近日几条丘八又上门,娘仍未告诉他们你在何处,如今世道乱,苟活不耻,保命为上,盼望与儿早日重逢。,,,,,
c01_s05_检查院长房间,好像忘记了什么事情,再回去检查一遍吧。,,ID格式 prop_xx_说明,,,I feel like I've forgotten something. Let me go back and check again.

1 keys zh_CN _character _notes _tags zh_SH en
2 prop_下半部的舌头 下半部的舌头 [#texture=c03/ux_下半部的舌头.png]
3 input_麻将游戏_操作规则 依次点击两块麻将可进行交换
4 ui_center_notify_c03纸人求药 给我药
5 index_新游戏 新游戏 New Game
6 index_继续游戏 继续游戏 Continue
7 index_退出游戏 退出游戏 Exit Game
54 input_麻将游戏_交换规则 依次点击两块麻将可进行交换
55 input_麻将游戏_回合开始 回合开始,正确换牌后将自动打出
56 ui_center_notify_c03纸人浆糊舌头 帮我粘舌头
57 ui_center_notify_c03纸人求药 给我药 [ID:] 给我药 给我药 [ID:]
58 ui_center_notify_c03药车缺少物品 缺少药引
59 ui_center_notify_c03药车不能再取药材 同种药材只能取出一份
60 ui_center_notify_c03放到碗中或原处 药材只能放到碗中或原处
171 prop_两个麻将 麻将 [#texture=c03/两个麻将.png]
172 prop_两个麻将_说明 王守义出老千时用的麻将{br}我听说,那会儿赌场由黑帮控制,秩序混乱,赌徒设局被抓后,往往下场凄惨,只有极少数人能够全身而退。
173 prop_符纸 符纸 [#texture=c03/符纸纸条.png][#inspect=c03/ux_符纸纸条.png]
174 prop_符纸_说明 符纸说明 切记将符纸布于墙面和棺体,等候七日,在水中滴入髫年血,待其于水中凝固,后浇洒于棺体,事成将髫年尸首交于我,方能保你日后平安。
175 prop_沾血的纸条 沾血的纸条 [#texture=c03/沾血的纸条.png][#inspect=c03/ux_沾血的纸条.png]
176 prop_沾血的纸条_说明 文开,近日几条丘八又上门,娘仍未告诉他们你在何处,如今世道乱,苟活不耻,保命为上,盼望与儿早日重逢。
177 c01_s05_检查院长房间 好像忘记了什么事情,再回去检查一遍吧。 ID格式: prop_xx_说明 I feel like I've forgotten something. Let me go back and check again.

View File

@ -61,7 +61,7 @@
依次点击两块麻将可进行交换 [ID:input_麻将游戏_交换规则]
回合开始,正确换牌后将自动打出 [ID:input_麻将游戏_回合开始]
帮我粘舌头 [ID:ui_center_notify_c03纸人浆糊舌头]
给我药 [ID:ui_center_notify_c03纸人求药]
给我药 [ID:]
缺少药引 [ID:ui_center_notify_c03药车缺少物品]
同种药材只能取出一份 [ID:ui_center_notify_c03药车不能再取药材]
药材只能放到碗中或原处 [ID:ui_center_notify_c03放到碗中或原处]

View File

@ -14,7 +14,6 @@ class_name Sfx2D extends AudioStreamPlayer2D
@export_tool_button("调试停止") var debug_stop := func():
timer.stop()
stop()
var timer: Timer
var default_db := 0.0
@ -70,12 +69,12 @@ func global_play() -> void:
func easing_kill(duration: float = 2.0) -> Tween:
timer.stop()
if timer:
timer.stop()
if not playing:
return
# stop with easing
var tween = create_tween()
tween.bind_node(self)
if playing:
tween.tween_property(self, "volume_linear", 0.01, duration)
tween.tween_callback(stop)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=100 format=3 uid="uid://djc2uaefhmu7"]
[gd_scene load_steps=101 format=3 uid="uid://djc2uaefhmu7"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_0dylx"]
[ext_resource type="Script" uid="uid://dsp5plrdkrsd7" path="res://scene/ground/scene/c02/s03_院子.gd" id="2_dt5aj"]
@ -74,6 +74,7 @@
[ext_resource type="Script" uid="uid://cphfob11f7atx" path="res://addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.gd" id="67_h2lyo"]
[ext_resource type="Script" uid="uid://cts4fvgir2lur" path="res://scene/ground/script/c02/s03_event_2d第二章结束井边演出.gd" id="72_18q2p"]
[ext_resource type="Script" uid="uid://bkkiyk5jkdw4d" path="res://manager/event_manager/event2d.gd" id="73_lt8c0"]
[ext_resource type="Texture2D" uid="uid://bjdy0o0qngukl" path="res://asset/art/scene/c03/s00_院子与其他/e_运尸车.png" id="74_f5g0l"]
[sub_resource type="Animation" id="Animation_rt2lh"]
length = 0.001
@ -772,6 +773,7 @@ texture = ExtResource("65_rgrem")
texture_scale = 0.3
[node name="药铺老板" type="AnimatedSprite2D" parent="Ground/DeployLayer/Event2D抓药游戏/药车_老板"]
z_index = 6
position = Vector2(1049, 20)
sprite_frames = ExtResource("40_h2lyo")
animation = &"抓药游戏_老板出现"
@ -1170,6 +1172,14 @@ position = Vector2(1771, 39)
title_filter = "c02"
note_key = "c02_柜子可放置区域"
[node name="EventBinder" type="Node" parent="Ground/DeployLayer/Note柜子可放置区域"]
script = ExtResource("12_2b6vx")
updater_event = &"current_chapter_stage"
updater_mode = "shower"
updater_ease_duration = 0.0
updater_stages = Array[int]([1, 2])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="新背景_奠" type="Node2D" parent="Ground/DeployLayer" index="35"]
visible = false
@ -1347,6 +1357,17 @@ updater_stage_mode = "exclude"
updater_stages = Array[int]([0])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="Event2D李氏运尸车" type="Node2D" parent="Ground/DeployLayer" index="40"]
position = Vector2(1858, 24)
script = ExtResource("73_lt8c0")
event_name = &"c03_li_paperwoman"
event_stages = Array[int]([3])
metadata/_custom_type_script = "uid://bkkiyk5jkdw4d"
[node name="运尸车" type="Sprite2D" parent="Ground/DeployLayer/Event2D李氏运尸车"]
position = Vector2(-22, 25)
texture = ExtResource("74_f5g0l")
[node name="PointLight2D" type="PointLight2D" parent="Ground/AmbientLayer" index="0"]
light_mask = 4
position = Vector2(2189, -142)

View File

@ -1,10 +1,9 @@
[gd_scene load_steps=38 format=3 uid="uid://ctwy1ubhm68la"]
[gd_scene load_steps=39 format=3 uid="uid://ctwy1ubhm68la"]
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_jad6f"]
[ext_resource type="Script" uid="uid://tk4wg0i4payx" path="res://scene/ground/scene/c03/s02_瞎子新卧室.gd" id="2_y504i"]
[ext_resource type="AudioStream" uid="uid://6gttowdwmado" path="res://asset/audio/sfx/环境音/第一章/房间内部场景1.ogg" id="3_5cqb4"]
[ext_resource type="Texture2D" uid="uid://vc2hn6t5bedg" path="res://asset/art/scene/c03/s02_瞎子新卧室/bg_瞎子新卧室.png" id="4_hehhg"]
[ext_resource type="AudioStream" uid="uid://d3yc0gbgivrjb" path="res://asset/audio/sfx/交互/第二章/sfx瞎子卧室灰姑.ogg" id="5_5cqb4"]
[ext_resource type="Texture2D" uid="uid://7ay1ttob8qwm" path="res://asset/art/scene/c02/s08_瞎子卧室/e_床板.png" id="5_xifhb"]
[ext_resource type="Texture2D" uid="uid://bgtxwxerl2dxh" path="res://asset/art/scene/c02/s08_瞎子卧室/十字架.png" id="6_hehhg"]
[ext_resource type="PackedScene" uid="uid://61pis75a8fdq" path="res://scene/entity/portal.tscn" id="6_jad6f"]
@ -30,6 +29,8 @@
[ext_resource type="Texture2D" uid="uid://ct02nauw1f5v5" path="res://asset/art/prop/c03/1015钥匙.png" id="24_ac6iq"]
[ext_resource type="SpriteFrames" uid="uid://3nas025c2c5u" path="res://asset/art/gif/c02_杂项/c02_杂项_frames.tres" id="24_oquyy"]
[ext_resource type="Texture2D" uid="uid://cylsq5cvhlp18" path="res://asset/art/tool/point_light.png" id="24_t3gtq"]
[ext_resource type="AudioStream" uid="uid://b08ps5rke143i" path="res://asset/audio/sfx/交互/第二章/amb_灰姑演出.ogg" id="26_kesv8"]
[ext_resource type="AudioStream" uid="uid://bx2l0xus8u1em" path="res://asset/audio/sfx/交互/第二章/sfx_灰姑出场.ogg" id="27_jchds"]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_k01ve"]
@ -181,9 +182,10 @@ position = Vector2(264.5, 69)
texture = ExtResource("5_xifhb")
[node name="portal_left" parent="Ground/DeployLayer" index="0"]
position = Vector2(17, 20)
position = Vector2(16, 20)
target_scene = "c03_s03"
target_portal = "right"
status = "opened"
[node name="portal_right" parent="Ground/DeployLayer" index="1"]
position = Vector2(873, 15)
@ -217,7 +219,7 @@ note_key = "c03_s02_小蝉寻人启事"
[node name="Note带血的手帕" parent="Ground/DeployLayer" index="6" instance=ExtResource("10_v3seo")]
unique_name_in_owner = true
position = Vector2(139, 72)
position = Vector2(221, 72)
texture = ExtResource("11_j2h7r")
sign_mark_offset = Vector2(1, -7)
title_filter = "c03"
@ -330,8 +332,14 @@ sprite_frames = ExtResource("10_2hv3f")
animation = &"姑散开"
autoplay = "姑呼吸帧"
[node name="Sfx灰姑出场" type="AudioStreamPlayer" parent="Ground/DeployLayer/Event2D偷听陆仁对话后"]
stream = ExtResource("5_5cqb4")
[node name="Sfx灰姑amb" type="AudioStreamPlayer" parent="Ground/DeployLayer/Event2D偷听陆仁对话后"]
stream = ExtResource("26_kesv8")
bus = &"game_sfx"
script = ExtResource("23_qq2pn")
metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
[node name="Sfx灰姑sfx" type="AudioStreamPlayer" parent="Ground/DeployLayer/Event2D偷听陆仁对话后"]
stream = ExtResource("27_jchds")
bus = &"game_sfx"
script = ExtResource("23_qq2pn")
metadata/_custom_type_script = "uid://rq6w1vuhuq1m"

View File

@ -54,8 +54,8 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
[node name="Sfx2d癞子呼吸声" parent="Ground/AnimationPlayer" index="1" instance=ExtResource("5_cdaxx")]
position = Vector2(343, 42)
stream = ExtResource("6_xevnq")
volume_db = -4.0
max_distance = 1000.0
volume_db = -7.0
max_distance = 700.0
attenuation = 3.0
loop = true
@ -82,6 +82,7 @@ status = "opened"
position = Vector2(538, 33)
target_scene = "c03_s02"
target_portal = "left"
status = "opened"
[node name="Closeup镜子特写" parent="Ground/DeployLayer" index="2" instance=ExtResource("5_d40x1")]
unique_name_in_owner = true
@ -198,6 +199,8 @@ catty_light_energy = 0.5
player_movement_rect = Rect2(35, -158, 506, 316)
facing_direction = Vector2(1, 0)
[node name="AudioListener2D" type="AudioListener2D" parent="Ground/MainPlayer" index="6"]
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(9, 0)
texture = ExtResource("5_irgvj")

View File

@ -99,11 +99,7 @@ quit_closeup_on_cancel = false
on_display_changed_volumn_db = -20.0
enabled = false
[node name="Pickable胖子钥匙" parent="Ground/DeployLayer" index="5" instance=ExtResource("9_m8bf2")]
position = Vector2(537, 55)
prop_key = "prop_2013钥匙"
[node name="Event李氏纸人相关" type="Node2D" parent="Ground/DeployLayer" index="6"]
[node name="Event李氏纸人相关" type="Node2D" parent="Ground/DeployLayer" index="5"]
script = ExtResource("11_4umel")
event_name = &"c03_li_paperwoman"
event_stages = Array[int]([3])
@ -156,7 +152,7 @@ max_distance = 1000.0
attenuation = 3.0
loop = true
[node name="Closeup李氏纸人" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_dbkw8")]
[node name="Closeup李氏纸人" parent="Ground/DeployLayer" index="6" instance=ExtResource("6_dbkw8")]
unique_name_in_owner = true
position = Vector2(372, 40)
texture = ExtResource("11_7d7lv")
@ -172,7 +168,7 @@ updater_stage_mode = "exclude"
updater_stages = Array[int]([0])
metadata/_custom_type_script = "uid://0wjaho6qkg6s"
[node name="Closeup柜子" parent="Ground/DeployLayer" index="8" instance=ExtResource("6_dbkw8")]
[node name="Closeup柜子" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_dbkw8")]
unique_name_in_owner = true
position = Vector2(64, 45)
packed_scene = ExtResource("23_q7jtk")
@ -184,6 +180,9 @@ catty_light_energy = 0.5
player_movement_rect = Rect2(20, -158, 608, 316)
facing_direction = Vector2(1, 0)
[node name="AudioListener2D" type="AudioListener2D" parent="Ground/MainPlayer" index="6"]
current = true
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_right = 648

View File

@ -64,4 +64,4 @@ func _post_meat_picked() -> void:
$"Sfx门板敲门声".play()
func eavesdrop_plank() -> void:
$"Sfx门板敲门声".easing_kill()
$"Sfx门板敲门声".loop = false

View File

@ -105,7 +105,7 @@ volume_db = -10.0
bus = &"game_sfx"
script = ExtResource("6_trckl")
loop = true
loop_round_time = 0.7
loop_round_time = 0.9
metadata/_custom_type_script = "uid://wapo47a1oddf"
[node name="BGSprite2D" parent="Ground" index="2"]
@ -186,6 +186,9 @@ catty_light_energy = 0.5
player_movement_rect = Rect2(54, -158, 491, 316)
facing_direction = Vector2(1, 0)
[node name="AudioListener2D" type="AudioListener2D" parent="Ground/MainPlayer" index="6"]
current = true
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(-58, 0)
texture = ExtResource("5_l22xv")

View File

@ -28,7 +28,7 @@ func _on_ground_ready() -> void:
# c03_meat_grinder: 0:初始化 1:已装转盘 2:绞肉机演出 3:演出结束
var grinder_stage = EventManager.get_stage("c03_meat_grinder")
if grinder_stage == 1:
_setup_monster()
_transport_to_the_fatty_story()
elif grinder_stage == 2:
# 进入演出
var portal_2_x = $"../DeployLayer/portal_2".global_position.x
@ -39,22 +39,27 @@ func _on_ground_ready() -> void:
func _on_grinder_exited(_arg) -> void:
var stage = EventManager.get_stage("c03_meat_grinder")
if stage == 1:
SceneManager.lock_player()
await Util.wait(1.0)
SceneManager.dizzy_effect(3.0)
SceneManager.player_action(17, true)
Util.timer(1.0, _setup_monster)
await SceneManager.get_player().animation_finished
await Util.wait(3.0)
SceneManager.unlock_player()
SceneManager.get_ground_loader().transition_to_scene("c03_s10", "left")
_transport_to_the_fatty_story()
func _transport_to_the_fatty_story() -> void:
SceneManager.get_camera_marker().shake_camera(3.0)
SceneManager.lock_player()
await Util.wait(1.0)
SceneManager.dizzy_effect(3.0)
SceneManager.player_action(17, true)
Util.timer(1.0, _setup_monster)
await SceneManager.get_player().animation_finished
await Util.wait(2.0)
SceneManager.unlock_player()
SceneManager.get_ground_loader().transition_to_scene("c03_s10", "left")
func _setup_monster() -> void:
var monster = $"../DeployLayer/棺材怪切肉"
monster.show()
monster.play()
func _grinder_show() -> void:
# 胖子从屠宰间桌子左侧的上方掉落,站起看向右侧
@ -64,3 +69,7 @@ func _grinder_show() -> void:
# 小蝉站在绞肉机前,玩家走近后小蝉消失。
# TODO 演出
closeup绞肉机.display()
func _on_monster_chopping_animation_looped() -> void:
SceneManager.get_camera_marker().shake_camera(1.5)

View File

@ -174,6 +174,7 @@ visible = false
energy = 0.8
blend_mode = 1
[connection signal="animation_looped" from="Ground/DeployLayer/棺材怪切肉" to="Ground/AnimationPlayer" method="_on_monster_chopping_animation_looped"]
[connection signal="animation_looped" from="Ground/DeployLayer/棺材怪切肉" to="Ground/DeployLayer/棺材怪切肉/Sfx棺材怪切肉" method="play"]
[editable path="Ground"]

View File

@ -218,7 +218,7 @@ hook_dialogue_title = "c03_s08_囚室偷听"
[node name="Interactable囚室尸体" parent="Ground/DeployLayer" index="7" instance=ExtResource("13_hfnke")]
unique_name_in_owner = true
position = Vector2(205, -6)
position = Vector2(205, -13)
offset = Vector2(0, -50)
first_interact_os_key = "c03_s08_囚室绳子"
interacted_texture = ExtResource("15_jdv4a")

View File

@ -434,8 +434,8 @@ texture = ExtResource("15_rcrkk")
[node name="Sfx2D棺材叫儿" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/Pro棺材怪2"]
position = Vector2(39, 9)
stream = SubResource("AudioStreamInteractive_qkb2a")
max_distance = 500.0
attenuation = 2.5
max_distance = 700.0
attenuation = 2.0
bus = &"game_sfx"
script = ExtResource("10_htuhx")
metadata/_custom_type_script = "uid://wapo47a1oddf"

View File

@ -12,6 +12,7 @@ func _ready() -> void:
if Engine.is_editor_hint():
return
var player: MainPlayer
#region node_reference
var sfx_meat_hill: Sfx
@ -25,6 +26,7 @@ var range_of_stages := PackedVector2Array()
# 读取设置变量名
func _setup_node_reference() -> void:
player = SceneManager.get_player()
sfx_meat_hill = $"Sfx肉山掉落"
chop_timer = $"../DeployLayer/ChopTimer"
meat_hill = $"../DeployLayer/肉山Transform"
@ -42,7 +44,6 @@ func _setup_node_reference() -> void:
func _on_ground_ready() -> void:
_enter_scene()
# 设置相机范围
var player = SceneManager.get_player()
var right_x = player.player_movement_rect.size.x
var rect := Rect2i(0, -158, int(right_x) + 50, 316)
SceneManager.get_camera_marker().apply_limits(rect)
@ -52,13 +53,12 @@ func _on_ground_ready() -> void:
#0: 初始化; 1-3 三关
var current_stage := 0
var aiming_duration := 2.0
var aiming_duration := 1.5
# 1.0s 一次
func _on_chop_timer_timeout() -> void:
# 限制在 range_of_stages 范围内
var s_range = range_of_stages[current_stage - 1]
var player = SceneManager.get_player()
var player_pos = player.global_position
if player_pos.x < s_range.x or player_pos.x > s_range.y:
print("棺材怪 chop out of range, s_range=", s_range, "player_pos.x=", player_pos.x)
@ -69,30 +69,30 @@ func _on_chop_timer_timeout() -> void:
# monster.chop_right(aiming_duration)
elif current_stage == 2:
monster.chop_right(aiming_duration)
var next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(-20.0, 30.0)
var next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(10.0, 50.0)
monster_target.global_position.x = clampf(next_x, s_range.x, s_range.y)
await Util.wait(1.0)
next_x = player_pos.x + player.velocity.x + randf_range(0.0, 100.0)
await Util.wait(0.5)
next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(50.0, 200.0)
monster_target.global_position.x = clampf(next_x, s_range.x, s_range.y)
elif current_stage == 3:
# 越来越快
aiming_duration = clampf(aiming_duration - 0.2, 1.0, 3.0)
aiming_duration = clampf(aiming_duration - 0.1, 1.0, 3.0)
chop_timer.wait_time = aiming_duration + 0.5
monster.chop_right(aiming_duration)
var next_x = player_pos.x + player.velocity.x * aiming_duration
var next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(0.0, 50.0)
monster_target.global_position.x = clampf(next_x, s_range.x, s_range.y)
await Util.wait(1.0)
next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(-30.0, 50.0)
await Util.wait(0.5)
next_x = player_pos.x + player.velocity.x * aiming_duration + randf_range(30.0, 100.0)
monster_target.global_position.x = clampf(next_x, s_range.x, s_range.y)
if GlobalConfig.DEBUG:
print("棺材怪 chop next_x=", monster_target.global_position.x, "s_range=", s_range)
func drop_meat_hill_1() -> void:
monster.hand_mode = 0
var ambush = $"../DeployLayer/Ambush肉山1"
ambush.enabled = false
var x = ambush.global_position.x
_drop_meat_hill(x)
_drop_meat_hill()
current_stage = 1
monster_target.global_position.x = range_of_stages[0].x + 300.0
monster.refresh_position()
@ -102,8 +102,7 @@ func drop_meat_hill_2() -> void:
monster.hand_mode = 1
var ambush = $"../DeployLayer/Ambush肉山2"
ambush.enabled = false
var x = ambush.global_position.x
_drop_meat_hill(x)
_drop_meat_hill()
# 进入第二关: 动态显示砍
monster.mute = false
monster_target.global_position.x = range_of_stages[1].x + 300.0
@ -114,12 +113,12 @@ func drop_meat_hill_2() -> void:
current_stage = 2
)
func drop_meat_hill_3() -> void:
monster.hand_mode = 1
var ambush = $"../DeployLayer/Ambush肉山3"
ambush.enabled = false
var x = ambush.global_position.x
_drop_meat_hill(x)
_drop_meat_hill()
# 进入第三关: 动态隐藏砍
# monster.mute = false
var tween = create_tween()
@ -127,7 +126,7 @@ func drop_meat_hill_3() -> void:
tween.tween_callback(func():
monster_target.global_position.x = range_of_stages[2].x + 300.0
monster.refresh_position()
monster.MOVE_SPEED = 280.0
monster.MOVE_PLUS_SPEED = 800.0
monster.mute = true
current_stage = 3
)
@ -137,15 +136,16 @@ func _on_monster_restart() -> void:
var ambush_node = get_node("../DeployLayer/Ambush肉山" + str(current_stage))
ArchiveManager.archive.player_global_position_x = ambush_node.global_position.x - 50.0
const MEAT_MIN_DISTANCE = 100.0
# 天上掉肉
func _drop_meat_hill(ambush_x: float) -> void:
func _drop_meat_hill() -> void:
var camera = SceneManager.get_camera_marker()
var tween = create_tween()
var start_y = -200.0
var target_y = SceneManager.get_player().global_position.y
meat_hill.global_position = Vector2(ambush_x - 120.0, start_y)
var target_y = player.global_position.y
var x = player.global_position.x - MEAT_MIN_DISTANCE
meat_hill.global_position = Vector2(x, start_y)
# 伪自由落体2.0 s从 start_y tween 到 target_y
tween.tween_method(_drop.bind(start_y, target_y), 0.0, 1.0, 0.8)
tween.tween_callback(sfx_meat_hill.play)
@ -158,17 +158,19 @@ func _drop(progress: float, start_y: float, target_y: float) -> void:
progress = progress * progress * progress
var y = start_y + (target_y - start_y) * progress
meat_hill.global_position.y = y
var max_x = player.global_position.x - MEAT_MIN_DISTANCE
meat_hill.global_position.x = min(max_x, meat_hill.global_position.x)
func _enter_scene() -> void:
var portal_x = $"../DeployLayer/portal_left".global_position.x
var player_x = SceneManager.get_player().global_position.x
var player_x = player.global_position.x
if GlobalConfig.DEBUG and player_x > 100:
return
SceneManager.get_player().global_position.x = portal_x
player.global_position.x = portal_x
SceneManager.lock_player(0, 5, true)
SceneManager.pause_and_hide_player_sprite(1.5)
await SceneManager.get_player().animation_finished
await player.animation_finished
SceneManager.unlock_player()

View File

@ -214,7 +214,7 @@ rotation = 0.0182861
texture = ExtResource("12_jcaoy")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/肉山"]
position = Vector2(-6, -38)
position = Vector2(-19, -38)
shape = SubResource("CircleShape2D_lljm3")
[node name="肉山Transform" type="RemoteTransform2D" parent="Ground/DeployLayer" index="9"]
@ -257,7 +257,7 @@ position = Vector2(4562, -10)
position = Vector2(7820, -14)
[node name="ChopTimer" type="Timer" parent="Ground/DeployLayer" index="19"]
wait_time = 2.0
wait_time = 2.5
autostart = true
[node name="被砍断的文字" type="Label" parent="Ground/DeployLayer" index="20"]

View File

@ -702,7 +702,7 @@ polygon = PackedVector2Array(51.1, 0, 24.5, 0, 6.6, 8, 4.1, 8, 0, 12.9, 0, 25, 3
[node name="LimitPolygon2D" type="Polygon2D" parent="."]
visible = false
polygon = PackedVector2Array(51, 33, 51, 120, 78, 166, 127, 175, 173, 174, 205, 160, 219, 141, 243, 137, 357, 164, 429, 235, 553, 235, 552, 33)
polygon = PackedVector2Array(51, 33, 52, 121, 79, 134, 122, 130, 168, 130, 201, 135, 219, 141, 256, 143, 357, 164, 429, 235, 553, 235, 552, 33)
[node name="Hover完成的药粉" parent="." instance=ExtResource("20_8lx66")]
unique_name_in_owner = true
@ -753,10 +753,6 @@ z_index = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 1.0
offset_top = 17.0
offset_right = 1.0
offset_bottom = 17.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2

View File

@ -44,7 +44,7 @@ func _on_stage_updated():
if stage == 1:
$"../左侧纸人".visible = true
# 显示纸人的时候阻塞通道
$"../portal_left".enabled = false
# $"../portal_left".enabled = false
else:
$"../左侧纸人".visible = false
$"../portal_left".enabled = true
# $"../portal_left".enabled = true

View File

@ -21,8 +21,7 @@ func _ready() -> void:
SceneManager.pop_center_notification("ui_left_mouse_shave")
if exit_on_shaven_fulfilled:
shaven_fulfilled.connect(exit.emit.bind(true))
%"Draggable纸钱".picked.connect(GlobalFunctor.c03_get_paper_coin)
var exiting = false

View File

@ -22,6 +22,8 @@ func _ready() -> void:
func _on_global_stage_updated(e: StringName, s: int):
super._on_global_stage_updated(e, s)
@onready var sfx_amb: Sfx = $"Sfx灰姑amb"
@onready var sfx_sfx: Sfx = $"Sfx灰姑sfx"
func _on_ground_ready(_ground: Ground2D):
# 邀请小蝉晚饭
@ -30,6 +32,7 @@ func _on_ground_ready(_ground: Ground2D):
SceneManager.get_player().set_facing_direction(Vector2.RIGHT)
SceneManager.get_player().global_position.x = 63.0
sfx_amb.play()
# 等待玩家看到画面,再开始对话
await Util.wait(2.5)
# Part1: 上半段对话1&抽烟
@ -41,7 +44,6 @@ func _on_ground_ready(_ground: Ground2D):
# Part2: 下半段对话2&灯忽闪
animation_player.play("light_flipping")
SceneManager.pop_debug_dialog_info("音效", "老鼠叫声+悉悉索索老鼠走路钻洞声")
$"Sfx灰姑出场".play()
DialogueManager.show_dialogue_balloon(c03_dialogue, "c03_s02_邀请小蝉与瞎子对话2")
await DialogueManager.dialogue_ended
# TODO
@ -70,7 +72,7 @@ func light_flipping_darkest_point(darkest_step: int) -> void:
if GlobalConfig.DEBUG:
print("darkest_step: " + str(darkest_step))
if darkest_step == 1:
#TODO
sfx_sfx.play()
SceneManager.pop_debug_dialog_info("音效", "女人诡异吹气声,灰姑的老鼠叫,猫咪害怕的声音响起")
the_blind.hide()
xxdie.hide()
@ -102,6 +104,7 @@ func light_flipping_darkest_point(darkest_step: int) -> void:
await Util.wait(1.0)
# 最后一闪,在最暗时调整场景状态
SceneManager.unlock_player()
sfx_amb.easing_kill()
func player_walk_right() -> void:

View File

@ -69,6 +69,7 @@ func _unhandled_input(event: InputEvent) -> void:
current_stage = 3
EventManager.set_stage_if_greater("c03_li_paperwoman", 3)
EventManager.set_stage_if_greater("c03_pangzi_pull_xchan", 1)
SceneManager.disable_prop_item("prop_药包")
SceneManager.enable_prop_item("prop_2013钥匙")
animation_player.play("RESET")
# 交互完成,退出

View File

@ -21,7 +21,7 @@ func _ready() -> void:
)
# 使用 event binder 控制道具状态
hover_key.interacted.connect(func():
_on_prop_picked("prop_2013钥匙")
_on_prop_picked("prop_3012钥匙")
)
hover_handle.interacted.connect(func():
_on_prop_picked("prop_刀把")
@ -32,7 +32,7 @@ func _on_prop_picked(prop_key: String) -> void:
SceneManager.enable_prop_item(prop_key)
# 当两个道具都拿到时,触发被胖子打晕演出
if (
(prop_key == "prop_2013钥匙" and EventManager.get_stage(&"c03_s06_hole_knife_handle") > 0)
(prop_key == "prop_3012钥匙" and EventManager.get_stage(&"c03_s06_hole_knife_handle") > 0)
or (prop_key == "prop_刀把" and EventManager.get_stage(&"c03_s06_hole_key") > 0)
):
await SceneManager.get_inspector().quit_and_hidden
@ -44,5 +44,7 @@ func _on_prop_picked(prop_key: String) -> void:
# 画面抖动变红,玩家被打晕,画面变黑
$AnimationPlayer.play("bleeding_red")
Util.shake_layer(self, 1.0)
await Util.wait(1.0)
# 拉长黑幕时长
SceneManager.black_transition(2.0, 3.0)
await Util.wait(5.0)
SceneManager.get_ground_loader().transition_to_scene("c03_s08", "1")

View File

@ -83,8 +83,10 @@ func _hold_parent_cancel() -> void:
func _wheel_placed_and_show() -> void:
wheel_sprite.show()
await Util.wait(0.5)
Util.shake_layer(self, 1.5)
await Util.wait(1.5)
SceneManager.get_player().set_facing_direction(Vector2.LEFT)
#演出,结束后传送到胖子游戏
exit.emit()

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=7 format=3 uid="uid://jyi40p8ylsj1"]
[gd_scene load_steps=6 format=3 uid="uid://jyi40p8ylsj1"]
[ext_resource type="Script" uid="uid://daaqd8nn6wfc" path="res://scene/ground/script/c03/s08_closeup符纸.gd" id="1_ubjcd"]
[ext_resource type="Texture2D" uid="uid://cbql1i4hblmt1" path="res://asset/art/ui/遮罩/inspect特写通用遮罩.png" id="2_l0qq8"]
[ext_resource type="Texture2D" uid="uid://dd8c7x4x8xo56" path="res://asset/art/scene/c03/s08_囚室/ux_囚室符纸.png" id="2_ubjcd"]
[ext_resource type="PackedScene" uid="uid://dmysq4sxx8iqh" path="res://scene/entity/ux/content_inspector.tscn" id="3_3foag"]
[ext_resource type="Texture2D" uid="uid://f186lvt5y2ql" path="res://asset/art/ui/遮罩/inspect背景遮罩.png" id="5_eic1e"]
@ -10,6 +9,15 @@
[node name="Closeup符纸" type="CanvasLayer"]
script = ExtResource("1_ubjcd")
[node name="遮罩" type="TextureRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("5_eic1e")
[node name="BG" type="TextureRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
@ -19,15 +27,6 @@ grow_vertical = 2
texture = ExtResource("2_ubjcd")
stretch_mode = 3
[node name="遮罩" type="TextureRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
texture = ExtResource("2_l0qq8")
[node name="ContentInspector" parent="." instance=ExtResource("3_3foag")]
[node name="遮罩" type="TextureRect" parent="ContentInspector"]

View File

@ -2,7 +2,8 @@ extends AnimatedSprite2D
signal before_restart
var MOVE_SPEED := 180.0
# 在玩家移速基础上增加的速度
var MOVE_PLUS_SPEED := 300.0
const RESET_Y := -300.0
@export var mute := false:
@ -25,13 +26,17 @@ const RESET_Y := -300.0
@onready var remote_right_side = $"右侧" as RemoteTransform2D
@onready var remote_left_shadow = $"左落点" as RemoteTransform2D
@onready var remote_right_shadow = $"右落点" as RemoteTransform2D
var player: MainPlayer
var left_hand_x_offset: float
var right_hand_x_offset: float
var chopped_safe_period := false
var finished := false
func _ready() -> void:
await SceneManager.ground_ready
player = SceneManager.get_player()
left_hand_x_offset = remote_left_shadow.position.x
right_hand_x_offset = remote_right_shadow.position.x
left_area.body_entered.connect(_on_player_chopped)
@ -76,7 +81,7 @@ func chop_left(aiming_duration := AIMING_DURATION) -> void:
if aiming_duration > 0.0:
tween.tween_property(remote_left_shadow, "scale", Vector2.ONE, aiming_duration)
tween.tween_callback(left_side_sprite.play)
tween.tween_property(remote_left_side, "position:y", 0.0, 0.2)
tween.tween_property(remote_left_side, "position:y", 0.0, 0.15)
if aiming_duration <= 0.0:
tween.parallel().tween_property(remote_left_shadow, "scale", Vector2.ONE, 0.3)
tween.tween_callback(chop_sfx.play)
@ -84,8 +89,8 @@ func chop_left(aiming_duration := AIMING_DURATION) -> void:
tween.tween_callback(shake)
tween.tween_callback(func(): aiming -= 1)
tween.tween_interval(0.1)
tween.tween_property(remote_left_shadow, "scale", Vector2.ZERO, 0.4)
tween.parallel().tween_property(remote_left_side, "position:y", RESET_Y, 0.5)
tween.tween_property(remote_left_shadow, "scale", Vector2(0.2, 0.2), 0.2)
tween.parallel().tween_property(remote_left_side, "position:y", RESET_Y, 0.4)
tween.tween_callback(toggle_safe_period.bind(false))
@ -99,7 +104,7 @@ func chop_right(aiming_duration := AIMING_DURATION) -> void:
if aiming_duration > 0.0:
tween.tween_property(remote_right_shadow, "scale", Vector2.ONE, aiming_duration)
tween.tween_callback(right_side_sprite.play)
tween.tween_property(remote_right_side, "position:y", 0.0, 0.2)
tween.tween_property(remote_right_side, "position:y", 0.0, 0.15)
if aiming_duration <= 0.0:
tween.parallel().tween_property(remote_right_shadow, "scale", Vector2.ONE, 0.3)
tween.tween_callback(chop_sfx.play)
@ -107,8 +112,8 @@ func chop_right(aiming_duration := AIMING_DURATION) -> void:
tween.tween_callback(shake)
tween.tween_callback(func(): aiming -= 1)
tween.tween_interval(0.1)
tween.tween_property(remote_right_shadow, "scale", Vector2.ZERO, 0.4)
tween.parallel().tween_property(remote_right_side, "position:y", RESET_Y, 0.5)
tween.tween_property(remote_right_shadow, "scale", Vector2(0.2, 0.2), 0.2)
tween.parallel().tween_property(remote_right_side, "position:y", RESET_Y, 0.4)
tween.tween_callback(toggle_safe_period.bind(false))
@ -125,7 +130,7 @@ func shake() -> void:
func _on_player_chopped(_body) -> void:
if chopped_safe_period:
return
if finished:
if finished:
return
finished = true
SceneManager.lock_player()
@ -138,6 +143,8 @@ func _on_player_chopped(_body) -> void:
func _physics_process(delta: float) -> void:
if not player:
return
var target_x = move_target.global_position.x
if hand_mode == 0:
target_x -= left_hand_x_offset
@ -149,9 +156,10 @@ func _physics_process(delta: float) -> void:
if footstep_sfx.playing:
footstep_sfx.stop()
else:
var speed = MOVE_SPEED
# if aiming:
# speed *= 0.6
var speed = MOVE_PLUS_SPEED
speed += abs(player.velocity.x)
if aiming:
speed *= 0.3
global_position.x = move_toward(x, target_x, delta * speed)
# if Time.get_ticks_msec() % 100 == 0:
# prints(x, target_x)
@ -159,6 +167,7 @@ func _physics_process(delta: float) -> void:
footstep_sfx.play()
_checkout_hand_animation()
func _checkout_hand_animation(is_move := true) -> void:
var target_animation = ""
if is_move:

View File

@ -7,7 +7,7 @@ var freezing := true:
for i in range(1, 5):
var node = get_node("kid" + str(i))
# 注意 4 号 kid 的 freeze 状态取决于 c03_s03_papercoin3
if i == 4 and EventManager.get_stage("c03_papercoin3") != 1:
if i == 4 and EventManager.get_stage("c03_s03_papercoin3") < 1:
node.freezing = true
else:
node.freezing = val
@ -25,6 +25,8 @@ var states: Array = [0, 0, 0, 2]:
var success_states: Array = [2, 1, 3, 0]
func _ready() -> void:
EventManager.stage_updated.connect(_on_stage_updated)
$"../Draggable纸钱".picked.connect(GlobalFunctor.c03_get_paper_coin)
$"倒塌/Props/纸舌头".interacted.connect(SceneManager.enable_prop_item.bind("prop_纸舌头"))
$"../刮刮乐".visible = true
@ -49,6 +51,11 @@ func _on_shaven_fulfilled():
freezing = false
func _on_stage_updated(event_name: StringName, stage: int) -> void:
if event_name == "c03_s03_papercoin3":
get_node("kid4").freezing = freezing or stage < 1
var texture_dir = "res://asset/art/scene/c03/s03_瞎子理发店/鬼母子神/"

View File

@ -62,6 +62,7 @@ unique_name_in_owner = true
layout_mode = 2
text = "互动提示"
label_settings = SubResource("LabelSettings_ycsas")
horizontal_alignment = 1
[node name="MarginContainer3" type="MarginContainer" parent="."]
layout_mode = 1

View File

@ -42,6 +42,8 @@ func refresh():
new_text += c + "\n"
msg = new_text
set(property_name, msg)
if GlobalConfig.DEBUG:
print("Translation for %s: %s" % [translation_key, msg])
func _get_tr_content():