added audio subtitle system and menus and more
This commit is contained in:
BIN
assets/audio/voicelines/anouncer_intro_01.ogg
Normal file
BIN
assets/audio/voicelines/anouncer_intro_01.ogg
Normal file
Binary file not shown.
19
assets/audio/voicelines/anouncer_intro_01.ogg.import
Normal file
19
assets/audio/voicelines/anouncer_intro_01.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://d3741vrmaeci5"
|
||||
path="res://.godot/imported/anouncer_intro_01.ogg-9a0df70f3e7b723063bbb4dcdac08629.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/audio/voicelines/anouncer_intro_01.ogg"
|
||||
dest_files=["res://.godot/imported/anouncer_intro_01.ogg-9a0df70f3e7b723063bbb4dcdac08629.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
BIN
assets/audio/voicelines/anouncer_intro_02.ogg
Normal file
BIN
assets/audio/voicelines/anouncer_intro_02.ogg
Normal file
Binary file not shown.
19
assets/audio/voicelines/anouncer_intro_02.ogg.import
Normal file
19
assets/audio/voicelines/anouncer_intro_02.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bi1rf1hi2fm2r"
|
||||
path="res://.godot/imported/anouncer_intro_02.ogg-b42c3b52801bb95dcb4838d1d12078dd.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/audio/voicelines/anouncer_intro_02.ogg"
|
||||
dest_files=["res://.godot/imported/anouncer_intro_02.ogg-b42c3b52801bb95dcb4838d1d12078dd.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
BIN
assets/audio/voicelines/anouncer_intro_03.ogg
Normal file
BIN
assets/audio/voicelines/anouncer_intro_03.ogg
Normal file
Binary file not shown.
19
assets/audio/voicelines/anouncer_intro_03.ogg.import
Normal file
19
assets/audio/voicelines/anouncer_intro_03.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://bji3bx3umohnw"
|
||||
path="res://.godot/imported/anouncer_intro_03.ogg-be17b7b167ecc2046136bd22ae88ffd9.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/audio/voicelines/anouncer_intro_03.ogg"
|
||||
dest_files=["res://.godot/imported/anouncer_intro_03.ogg-be17b7b167ecc2046136bd22ae88ffd9.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
BIN
assets/audio/voicelines/anouncer_intro_04.ogg
Normal file
BIN
assets/audio/voicelines/anouncer_intro_04.ogg
Normal file
Binary file not shown.
19
assets/audio/voicelines/anouncer_intro_04.ogg.import
Normal file
19
assets/audio/voicelines/anouncer_intro_04.ogg.import
Normal file
@@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://ddpvabd43s3p4"
|
||||
path="res://.godot/imported/anouncer_intro_04.ogg-34d18a44a309e70c5c50c706a27eff8e.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/audio/voicelines/anouncer_intro_04.ogg"
|
||||
dest_files=["res://.godot/imported/anouncer_intro_04.ogg-34d18a44a309e70c5c50c706a27eff8e.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
62
export_presets.cfg
Normal file
62
export_presets.cfg
Normal file
@@ -0,0 +1,62 @@
|
||||
[preset.0]
|
||||
|
||||
name="Windows Desktop"
|
||||
platform="Windows Desktop"
|
||||
runnable=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="C:/Users/yanni/Desktop/exports lol/project-thought-experiment.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
codesign/description=""
|
||||
codesign/custom_options=PackedStringArray()
|
||||
application/modify_resources=true
|
||||
application/icon=""
|
||||
application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version=""
|
||||
application/product_version=""
|
||||
application/company_name=""
|
||||
application/product_name=""
|
||||
application/file_description=""
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
application/export_angle=0
|
||||
ssh_remote_deploy/enabled=false
|
||||
ssh_remote_deploy/host="user@host_ip"
|
||||
ssh_remote_deploy/port="22"
|
||||
ssh_remote_deploy/extra_args_ssh=""
|
||||
ssh_remote_deploy/extra_args_scp=""
|
||||
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
|
||||
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
|
||||
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
|
||||
$settings = New-ScheduledTaskSettingsSet
|
||||
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
|
||||
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
|
||||
Start-ScheduledTask -TaskName godot_remote_debug
|
||||
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
@@ -10,18 +10,22 @@ config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Bitmaze Adventure"
|
||||
run/main_scene="res://scenes/levels/debug.tscn"
|
||||
config/name="Project Thought Experiment"
|
||||
run/main_scene="res://scenes/levels/lvl_1.tscn"
|
||||
config/auto_accept_quit=false
|
||||
config/features=PackedStringArray("4.2", "Forward Plus")
|
||||
boot_splash/bg_color=Color(0, 0, 0, 1)
|
||||
boot_splash/show_image=false
|
||||
config/icon="res://icon.svg"
|
||||
config/auto_accept_quit.release=false
|
||||
boot_splash/show_image.editor=true
|
||||
|
||||
[autoload]
|
||||
|
||||
WindowManager="*res://scripts/autoloads/window_manager.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/stretch/mode="canvas_items"
|
||||
window/size/mode.release=4
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
@@ -40,6 +44,10 @@ folder_colors={
|
||||
"res://shaders/": "orange"
|
||||
}
|
||||
|
||||
[gui]
|
||||
|
||||
theme/custom="res://resources/main_theme.tres"
|
||||
|
||||
[input]
|
||||
|
||||
move_left={
|
||||
|
3
resources/main_theme.tres
Normal file
3
resources/main_theme.tres
Normal file
@@ -0,0 +1,3 @@
|
||||
[gd_resource type="Theme" format=3 uid="uid://yba31lyxnmib"]
|
||||
|
||||
[resource]
|
55
scenes/audio_subtitle_system.tscn
Normal file
55
scenes/audio_subtitle_system.tscn
Normal file
@@ -0,0 +1,55 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://ce8nemacxi67m"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/audio_subtitle_system.gd" id="1_5vtxu"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_eoq1n"]
|
||||
content_margin_left = 20.0
|
||||
content_margin_top = 20.0
|
||||
content_margin_right = 20.0
|
||||
content_margin_bottom = 20.0
|
||||
bg_color = Color(0, 0, 0, 0.376471)
|
||||
corner_radius_top_left = 25
|
||||
corner_radius_top_right = 25
|
||||
corner_radius_bottom_right = 25
|
||||
corner_radius_bottom_left = 25
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_em1c1"]
|
||||
size = Vector3(11, 5, 3)
|
||||
|
||||
[node name="AudioSubtitleSystem" type="AudioStreamPlayer3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.27434, 0)
|
||||
script = ExtResource("1_5vtxu")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
layer = 3
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="CanvasLayer"]
|
||||
visible = false
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -338.0
|
||||
offset_top = -121.0
|
||||
offset_right = 338.0
|
||||
offset_bottom = -7.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_eoq1n")
|
||||
|
||||
[node name="RichTextLabel" type="RichTextLabel" parent="CanvasLayer/PanelContainer"]
|
||||
self_modulate = Color(1, 1, 1, 0.47451)
|
||||
layout_mode = 2
|
||||
bbcode_enabled = true
|
||||
scroll_active = false
|
||||
scroll_following = true
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -4, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
shape = SubResource("BoxShape3D_em1c1")
|
||||
|
||||
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
|
18
scenes/close_game_confirmation.tscn
Normal file
18
scenes/close_game_confirmation.tscn
Normal file
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dvb7rkyyyllkc"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/close_game_confirmation.gd" id="1_qqjao"]
|
||||
|
||||
[node name="CloseGameConfirmation" type="ConfirmationDialog"]
|
||||
title = "Beenden"
|
||||
initial_position = 2
|
||||
size = Vector2i(267, 132)
|
||||
ok_button_text = "Zum Hauptmenü"
|
||||
dialog_text = "Möchtest du das Spiel beenden
|
||||
und zurrück zum Hauptmenü
|
||||
oder zurrück zum Desktop?"
|
||||
dialog_close_on_escape = false
|
||||
cancel_button_text = "Zum Desktop"
|
||||
script = ExtResource("1_qqjao")
|
||||
|
||||
[connection signal="canceled" from="." to="." method="_on_canceled"]
|
||||
[connection signal="confirmed" from="." to="." method="_on_confirmed"]
|
38
scenes/gui/menus/pause_menu.tscn
Normal file
38
scenes/gui/menus/pause_menu.tscn
Normal file
@@ -0,0 +1,38 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://1hja6jk0k310"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/menus/pause_menu.gd" id="1_e70hy"]
|
||||
|
||||
[node name="PauseMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_e70hy")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Continue" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Weiter spielen"
|
||||
|
||||
[node name="RestartLevel" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Level neu starten"
|
||||
|
||||
[node name="CloseLevel" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Beenden"
|
@@ -1,126 +0,0 @@
|
||||
[gd_scene load_steps=20 format=3 uid="uid://ckad8stc13n83"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://gg5ph541e4p3" path="res://scenes/player.tscn" id="1_2585i"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddwkhfly2xyyt" path="res://assets/models/interior.obj" id="1_lphcl"]
|
||||
[ext_resource type="Texture2D" uid="uid://bu7e43m8dswwk" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_col.png" id="2_irc8l"]
|
||||
[ext_resource type="Texture2D" uid="uid://dkggxcnlqd2rb" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_ao.png" id="3_465hc"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqy8bqf1chm8c" path="res://scenes/objects/interactables/button_stand.tscn" id="4_cruoa"]
|
||||
[ext_resource type="Texture2D" uid="uid://bsklw2r406fc7" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_metalness.png" id="4_sn3wt"]
|
||||
[ext_resource type="PackedScene" uid="uid://22blfybi6n4q" path="res://scenes/completion_counter.tscn" id="5_lo1l3"]
|
||||
[ext_resource type="Texture2D" uid="uid://cet7gsgfgw1m2" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_nrm.png" id="5_pffg3"]
|
||||
[ext_resource type="PackedScene" uid="uid://cy0x2nliyw8gw" path="res://scenes/door.tscn" id="6_853p2"]
|
||||
[ext_resource type="Texture2D" uid="uid://48js50w57wk4" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_roughness.png" id="6_vrqt2"]
|
||||
[ext_resource type="Texture2D" uid="uid://c72iofq6gmfaa" path="res://assets/textures/material/tiles_white/tiles_white_color.png" id="7_qai4q"]
|
||||
[ext_resource type="Texture2D" uid="uid://bs0qseslb0ilu" path="res://assets/textures/material/tiles_white/tiles_white_ambientocclusion.png" id="8_wcubh"]
|
||||
[ext_resource type="Texture2D" uid="uid://cpw4myruauqs6" path="res://assets/textures/material/tiles_white/tiles_white_normal.png" id="9_xs8gx"]
|
||||
[ext_resource type="Texture2D" uid="uid://uy7vdufb7mhc" path="res://assets/textures/material/tiles_white/tiles_white_roughness.png" id="10_mli04"]
|
||||
[ext_resource type="PackedScene" uid="uid://ced2w03t8er5k" path="res://scenes/objects/cube.tscn" id="15_h1ivu"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dkjw0"]
|
||||
albedo_texture = ExtResource("2_irc8l")
|
||||
metallic = 1.0
|
||||
metallic_texture = ExtResource("4_sn3wt")
|
||||
roughness_texture = ExtResource("6_vrqt2")
|
||||
normal_enabled = true
|
||||
normal_texture = ExtResource("5_pffg3")
|
||||
ao_enabled = true
|
||||
ao_texture = ExtResource("3_465hc")
|
||||
uv1_scale = Vector3(35, 35, 35)
|
||||
uv1_triplanar_sharpness = 0.148651
|
||||
uv1_world_triplanar = true
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cl8ik"]
|
||||
albedo_texture = ExtResource("7_qai4q")
|
||||
roughness_texture = ExtResource("10_mli04")
|
||||
normal_enabled = true
|
||||
normal_scale = 1.5
|
||||
normal_texture = ExtResource("9_xs8gx")
|
||||
ao_enabled = true
|
||||
ao_texture = ExtResource("8_wcubh")
|
||||
uv1_scale = Vector3(8, 30, 8)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_wyr1d"]
|
||||
size = Vector3(4, 0.2, 5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lygjd"]
|
||||
size = Vector3(4, 0.2, 5)
|
||||
|
||||
[node name="Debug" type="Node3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.707107, -0.707107, 0, 0.5, 0.5, 0.707107, -0.5, -0.5, 0.707107, 0, 0, 0)
|
||||
directional_shadow_blend_splits = true
|
||||
sky_mode = 1
|
||||
|
||||
[node name="interior" parent="." instance=ExtResource("1_lphcl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
|
||||
|
||||
[node name="Hallway" parent="interior" index="0"]
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_dkjw0")
|
||||
|
||||
[node name="StaticBody3D" parent="interior/Hallway" index="0"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
|
||||
[node name="Cube" parent="interior" index="1"]
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_cl8ik")
|
||||
|
||||
[node name="StaticBody3D" parent="interior/Cube" index="0"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
collision_priority = 2000.0
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("1_2585i")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 5.23956)
|
||||
|
||||
[node name="CompletionCounter" parent="." node_paths=PackedStringArray("nodes_needed") instance=ExtResource("5_lo1l3")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0617981, 3.05379, 6.24098)
|
||||
nodes_needed = [NodePath("../ButtonStand2"), NodePath("../ButtonStand3")]
|
||||
|
||||
[node name="Door" parent="." instance=ExtResource("6_853p2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, 1.58488, 6.64)
|
||||
|
||||
[node name="ButtonStand2" parent="." instance=ExtResource("4_cruoa")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.03802, 0.7, 4)
|
||||
|
||||
[node name="ButtonStand3" parent="." instance=ExtResource("4_cruoa")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 4.7, 1)
|
||||
|
||||
[node name="Cube" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube2" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, 0)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube3" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube4" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 1, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube5" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube6" parent="." instance=ExtResource("15_h1ivu")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="DebugPlane" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.9, 3.9, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="DebugPlane"]
|
||||
mesh = SubResource("BoxMesh_wyr1d")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="DebugPlane"]
|
||||
shape = SubResource("BoxShape3D_lygjd")
|
||||
|
||||
[connection signal="lock" from="CompletionCounter" to="Door" method="close"]
|
||||
[connection signal="unlock" from="CompletionCounter" to="Door" method="open"]
|
||||
|
||||
[editable path="interior"]
|
158
scenes/levels/lvl_1.tscn
Normal file
158
scenes/levels/lvl_1.tscn
Normal file
@@ -0,0 +1,158 @@
|
||||
[gd_scene load_steps=30 format=3 uid="uid://ckad8stc13n83"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://ddwkhfly2xyyt" path="res://assets/models/interior.obj" id="1_xs30l"]
|
||||
[ext_resource type="Texture2D" uid="uid://bu7e43m8dswwk" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_col.png" id="2_afued"]
|
||||
[ext_resource type="Texture2D" uid="uid://dkggxcnlqd2rb" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_ao.png" id="3_4uy3l"]
|
||||
[ext_resource type="Texture2D" uid="uid://bsklw2r406fc7" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_metalness.png" id="4_vi1ta"]
|
||||
[ext_resource type="Texture2D" uid="uid://cet7gsgfgw1m2" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_nrm.png" id="5_sjo1j"]
|
||||
[ext_resource type="Texture2D" uid="uid://48js50w57wk4" path="res://assets/textures/material/tilesslatesquare/tilesslatesquare_roughness.png" id="6_os40o"]
|
||||
[ext_resource type="Texture2D" uid="uid://c72iofq6gmfaa" path="res://assets/textures/material/tiles_white/tiles_white_color.png" id="7_gqmq7"]
|
||||
[ext_resource type="Texture2D" uid="uid://bs0qseslb0ilu" path="res://assets/textures/material/tiles_white/tiles_white_ambientocclusion.png" id="8_54t4l"]
|
||||
[ext_resource type="Texture2D" uid="uid://cpw4myruauqs6" path="res://assets/textures/material/tiles_white/tiles_white_normal.png" id="9_5dnm4"]
|
||||
[ext_resource type="Texture2D" uid="uid://uy7vdufb7mhc" path="res://assets/textures/material/tiles_white/tiles_white_roughness.png" id="10_208rc"]
|
||||
[ext_resource type="PackedScene" uid="uid://gg5ph541e4p3" path="res://scenes/player.tscn" id="11_lls6p"]
|
||||
[ext_resource type="PackedScene" uid="uid://22blfybi6n4q" path="res://scenes/objects/completion_counter.tscn" id="12_vn8j0"]
|
||||
[ext_resource type="PackedScene" uid="uid://cy0x2nliyw8gw" path="res://scenes/objects/door.tscn" id="13_fhdru"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqy8bqf1chm8c" path="res://scenes/objects/interactables/button_stand.tscn" id="14_mpdbg"]
|
||||
[ext_resource type="PackedScene" uid="uid://ced2w03t8er5k" path="res://scenes/objects/cube.tscn" id="15_40os8"]
|
||||
[ext_resource type="PackedScene" uid="uid://ce8nemacxi67m" path="res://scenes/audio_subtitle_system.tscn" id="16_2wrmg"]
|
||||
[ext_resource type="AudioStream" uid="uid://d3741vrmaeci5" path="res://assets/audio/voicelines/anouncer_intro_01.ogg" id="17_1a448"]
|
||||
[ext_resource type="Script" path="res://scripts/voiceline_resource.gd" id="18_jxpoe"]
|
||||
[ext_resource type="AudioStream" uid="uid://bi1rf1hi2fm2r" path="res://assets/audio/voicelines/anouncer_intro_02.ogg" id="19_2roq0"]
|
||||
[ext_resource type="AudioStream" uid="uid://bji3bx3umohnw" path="res://assets/audio/voicelines/anouncer_intro_03.ogg" id="20_dqpxk"]
|
||||
[ext_resource type="AudioStream" uid="uid://ddpvabd43s3p4" path="res://assets/audio/voicelines/anouncer_intro_04.ogg" id="21_n11nj"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dkjw0"]
|
||||
albedo_texture = ExtResource("2_afued")
|
||||
metallic = 1.0
|
||||
metallic_texture = ExtResource("4_vi1ta")
|
||||
roughness_texture = ExtResource("6_os40o")
|
||||
normal_enabled = true
|
||||
normal_texture = ExtResource("5_sjo1j")
|
||||
ao_enabled = true
|
||||
ao_texture = ExtResource("3_4uy3l")
|
||||
uv1_scale = Vector3(35, 35, 35)
|
||||
uv1_triplanar_sharpness = 0.148651
|
||||
uv1_world_triplanar = true
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cl8ik"]
|
||||
albedo_texture = ExtResource("7_gqmq7")
|
||||
roughness_texture = ExtResource("10_208rc")
|
||||
normal_enabled = true
|
||||
normal_scale = 1.5
|
||||
normal_texture = ExtResource("9_5dnm4")
|
||||
ao_enabled = true
|
||||
ao_texture = ExtResource("8_54t4l")
|
||||
uv1_scale = Vector3(8, 30, 8)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_wyr1d"]
|
||||
size = Vector3(4, 0.2, 5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lygjd"]
|
||||
size = Vector3(4, 0.2, 5)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_u3j5u"]
|
||||
script = ExtResource("18_jxpoe")
|
||||
audio = ExtResource("17_1a448")
|
||||
text = "Hallo!"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_3g4yn"]
|
||||
script = ExtResource("18_jxpoe")
|
||||
audio = ExtResource("19_2roq0")
|
||||
text = "Und willkommen zur Gehirn Test Simulation „Project Thought Experiment“."
|
||||
|
||||
[sub_resource type="Resource" id="Resource_6wqks"]
|
||||
script = ExtResource("18_jxpoe")
|
||||
audio = ExtResource("20_dqpxk")
|
||||
text = "Falls Sie sich nicht erinnern: Sie haben uns, der „Neura-Förderkooperation“, Ihren gesamten Körper gespendet. "
|
||||
|
||||
[sub_resource type="Resource" id="Resource_im7qv"]
|
||||
script = ExtResource("18_jxpoe")
|
||||
audio = ExtResource("21_n11nj")
|
||||
text = "Jetzt werden Sie einige Tests durchführen, um sicherzustellen, dass Sie [rainbow][wave]keinen Hirnschaden[/wave][/rainbow] haben oder ein [rainbow][wave]kompletter Idiot[/wave][/rainbow] sind, da es jetzt vollständig in unser digitales Simulationssystem integriert ist."
|
||||
|
||||
[node name="LVL1" type="Node3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.707107, -0.707107, 0, 0.5, 0.5, 0.707107, -0.5, -0.5, 0.707107, 0, 0, 0)
|
||||
directional_shadow_blend_splits = true
|
||||
sky_mode = 1
|
||||
|
||||
[node name="interior" parent="." instance=ExtResource("1_xs30l")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
|
||||
|
||||
[node name="Hallway" parent="interior" index="0"]
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_dkjw0")
|
||||
|
||||
[node name="StaticBody3D" parent="interior/Hallway" index="0"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
|
||||
[node name="Cube" parent="interior" index="1"]
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_cl8ik")
|
||||
|
||||
[node name="StaticBody3D" parent="interior/Cube" index="0"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
collision_priority = 2000.0
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("11_lls6p")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 5.23956)
|
||||
|
||||
[node name="CompletionCounter" parent="." node_paths=PackedStringArray("nodes_needed") instance=ExtResource("12_vn8j0")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0617981, 3.05379, 6.24098)
|
||||
nodes_needed = [NodePath("../ButtonStand2"), NodePath("../ButtonStand3")]
|
||||
|
||||
[node name="Door" parent="." instance=ExtResource("13_fhdru")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, 1.58488, 6.64)
|
||||
|
||||
[node name="ButtonStand2" parent="." instance=ExtResource("14_mpdbg")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.03802, 0.7, 4)
|
||||
|
||||
[node name="ButtonStand3" parent="." instance=ExtResource("14_mpdbg")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 4.7, 0.0433838)
|
||||
|
||||
[node name="Cube" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.51, 0)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube2" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.51, 0)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube3" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.51, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube4" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.51, -3.93867)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube5" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.51, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="Cube6" parent="." instance=ExtResource("15_40os8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.96977, 0.51, -2)
|
||||
collision_priority = 2.0
|
||||
|
||||
[node name="DebugPlane" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.9, 3.9, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="DebugPlane"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 0)
|
||||
mesh = SubResource("BoxMesh_wyr1d")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="DebugPlane"]
|
||||
shape = SubResource("BoxShape3D_lygjd")
|
||||
|
||||
[node name="AudioSubtitleSystem" parent="." instance=ExtResource("16_2wrmg")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.27434, 3)
|
||||
voice_lines = Array[ExtResource("18_jxpoe")]([SubResource("Resource_u3j5u"), SubResource("Resource_3g4yn"), SubResource("Resource_6wqks"), SubResource("Resource_im7qv")])
|
||||
|
||||
[connection signal="lock" from="CompletionCounter" to="Door" method="close"]
|
||||
[connection signal="unlock" from="CompletionCounter" to="Door" method="open"]
|
||||
|
||||
[editable path="interior"]
|
||||
[editable path="AudioSubtitleSystem"]
|
@@ -11,7 +11,6 @@ absorbent = true
|
||||
[node name="Cube" type="RigidBody3D" groups=["pushables"]]
|
||||
mass = 1.5
|
||||
physics_material_override = SubResource("PhysicsMaterial_b2i4c")
|
||||
lock_rotation = true
|
||||
continuous_cd = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://dqy8bqf1chm8c"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dm8l36ephydnl" path="res://scenes/interaction_area.tscn" id="1_0okd0"]
|
||||
[ext_resource type="PackedScene" uid="uid://dm8l36ephydnl" path="res://scenes/objects/interaction_area.tscn" id="1_0okd0"]
|
||||
[ext_resource type="Script" path="res://scripts/interactables/completer/button_stand.gd" id="1_gkcm2"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jpuiw"]
|
||||
|
@@ -1,33 +0,0 @@
|
||||
[gd_scene format=3 uid="uid://cfk83h5xyhmor"]
|
||||
|
||||
[node name="DebugScreen" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 1, 0.517647, 1)
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -22.0
|
||||
offset_top = -15.5
|
||||
offset_right = 22.0
|
||||
offset_bottom = 15.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "TEST"
|
@@ -1,54 +0,0 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://b8bvidqu7tmfs"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cfk83h5xyhmor" path="res://scenes/objects/interactables/screens/debug_screen.tscn" id="1_q1qkj"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_sh78v"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_t4f0s"]
|
||||
|
||||
[sub_resource type="PrismMesh" id="PrismMesh_law6y"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_l2fsg"]
|
||||
viewport_path = NodePath("ScreenMesh/SubViewport")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_ckudb"]
|
||||
viewport_path = NodePath("ScreenMesh/SubViewport")
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_01tli"]
|
||||
viewport_path = NodePath("ScreenMesh/SubViewport")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7alnb"]
|
||||
resource_local_to_scene = true
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = SubResource("ViewportTexture_l2fsg")
|
||||
rim_tint = 1.0
|
||||
rim_texture = SubResource("ViewportTexture_01tli")
|
||||
backlight_enabled = true
|
||||
backlight_texture = SubResource("ViewportTexture_ckudb")
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_hekp8"]
|
||||
resource_local_to_scene = true
|
||||
material = SubResource("StandardMaterial3D_7alnb")
|
||||
size = Vector2(1, 1)
|
||||
|
||||
[node name="TaskTerminal" type="StaticBody3D"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_sh78v")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_t4f0s")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
mesh = SubResource("PrismMesh_law6y")
|
||||
|
||||
[node name="ScreenMesh" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-4.37114e-08, 0.891007, 0.453991, 0, 0.453991, -0.891007, -1, -3.89471e-08, -1.98446e-08, 0.255, 1, 0)
|
||||
mesh = SubResource("PlaneMesh_hekp8")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="ScreenMesh"]
|
||||
size_2d_override = Vector2i(512, 512)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="DebugScreen" parent="ScreenMesh/SubViewport" instance=ExtResource("1_q1qkj")]
|
@@ -13,7 +13,7 @@ render_priority = 0
|
||||
shader = ExtResource("2_rpqdy")
|
||||
shader_parameter/ray_position = null
|
||||
shader_parameter/blur_strength = 3
|
||||
shader_parameter/blur_falloff = 7.0
|
||||
shader_parameter/blur_falloff = 2.0
|
||||
shader_parameter/blur_near = 20.0
|
||||
shader_parameter/blur_far = 200.0
|
||||
|
||||
@@ -53,6 +53,9 @@ transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -8.113
|
||||
target_position = Vector3(0, 0, -10)
|
||||
debug_shape_custom_color = Color(0, 0, 0, 0)
|
||||
|
||||
[node name="AudioListener3D" type="AudioListener3D" parent="Camera3D"]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0)
|
||||
|
||||
[node name="GravityGunLayer" parent="." node_paths=PackedStringArray("player") instance=ExtResource("2_ahuce")]
|
||||
player = NodePath("..")
|
||||
|
||||
|
21
scripts/audio_subtitle_system.gd
Normal file
21
scripts/audio_subtitle_system.gd
Normal file
@@ -0,0 +1,21 @@
|
||||
extends AudioStreamPlayer3D
|
||||
|
||||
@export var voice_lines: Array[VoiceLine]
|
||||
|
||||
@onready var textbox: RichTextLabel = $CanvasLayer/PanelContainer/RichTextLabel
|
||||
|
||||
var played: bool
|
||||
|
||||
func _on_area_3d_body_entered(body: Node3D) -> void:
|
||||
if !played && body is Player:
|
||||
start_audio_sequence()
|
||||
played = true
|
||||
|
||||
func start_audio_sequence():
|
||||
$CanvasLayer/PanelContainer.show()
|
||||
for line in voice_lines:
|
||||
textbox.text = line.text
|
||||
stream = line.audio
|
||||
play()
|
||||
await finished
|
||||
$CanvasLayer/PanelContainer.hide()
|
12
scripts/autoloads/window_manager.gd
Normal file
12
scripts/autoloads/window_manager.gd
Normal file
@@ -0,0 +1,12 @@
|
||||
extends Node
|
||||
|
||||
var close_request_window: ConfirmationDialog
|
||||
|
||||
func _ready() -> void:
|
||||
close_request_window = preload("res://scenes/close_game_confirmation.tscn").instantiate()
|
||||
add_child(close_request_window)
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_WM_CLOSE_REQUEST:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
close_request_window.popup()
|
7
scripts/close_game_confirmation.gd
Normal file
7
scripts/close_game_confirmation.gd
Normal file
@@ -0,0 +1,7 @@
|
||||
extends ConfirmationDialog
|
||||
|
||||
func _on_confirmed() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
func _on_canceled() -> void:
|
||||
get_tree().quit()
|
@@ -24,6 +24,7 @@ func _physics_process(_delta):
|
||||
collider.global_position = player.goal.global_position
|
||||
elif player.raycast.get_collider() is RigidBody3D:
|
||||
collider = player.raycast.get_collider()
|
||||
collider.lock_rotation = true
|
||||
if Input.is_action_pressed("gravity_push") || Input.is_action_just_pressed("gravity_push"):
|
||||
player.spring_arm.spring_length += .5
|
||||
if Input.is_action_pressed("gravity_pull") || Input.is_action_just_pressed("gravity_pull"):
|
||||
@@ -31,5 +32,7 @@ func _physics_process(_delta):
|
||||
player.spring_arm.spring_length = clamp(player.spring_arm.spring_length,2,spring_length_cap)
|
||||
else:
|
||||
gravity_particles.visible = false
|
||||
if collider:
|
||||
collider.lock_rotation = false
|
||||
collider = null
|
||||
|
||||
|
3
scripts/menus/pause_menu.gd
Normal file
3
scripts/menus/pause_menu.gd
Normal file
@@ -0,0 +1,3 @@
|
||||
extends Control
|
||||
|
||||
|
@@ -51,7 +51,7 @@ func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion && Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
rotate_y(-event.relative.x * camera_senitivity * 0.0025)
|
||||
camera.rotate_x(-event.relative.y * camera_senitivity * 0.0015)
|
||||
camera.rotation_degrees.x = clamp(camera.rotation_degrees.x, -40, 80)
|
||||
camera.rotation_degrees.x = clamp(camera.rotation_degrees.x, -80, 80)
|
||||
if event.is_action_pressed("pause"):
|
||||
capture(false)
|
||||
if event.is_action_pressed("mouse_capture"):
|
||||
|
5
scripts/voiceline_resource.gd
Normal file
5
scripts/voiceline_resource.gd
Normal file
@@ -0,0 +1,5 @@
|
||||
extends Resource
|
||||
class_name VoiceLine
|
||||
|
||||
@export var audio: AudioStreamOggVorbis
|
||||
@export_multiline var text: String
|
Reference in New Issue
Block a user