WIP: menu main menu overhaul

This commit is contained in:
betalars 2025-10-08 00:33:15 +02:00
parent 9c9ae6ef45
commit 707b1b808f
30 changed files with 874 additions and 819 deletions

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=3 uid="uid://cd63barv73rfx"] [gd_scene load_steps=41 format=3 uid="uid://cd63barv73rfx"]
[ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="1_61qpo"] [ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="1_61qpo"]
[ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="1_t34p3"] [ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="1_t34p3"]
@ -6,6 +6,8 @@
[ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="2_s1yf2"] [ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="2_s1yf2"]
[ext_resource type="Texture2D" uid="uid://buo4ntxw1vofu" path="res://addons/input_prompts/icons/keyboard/w.png" id="4_8e30h"] [ext_resource type="Texture2D" uid="uid://buo4ntxw1vofu" path="res://addons/input_prompts/icons/keyboard/w.png" id="4_8e30h"]
[ext_resource type="Script" uid="uid://bbs1u7ojno7xo" path="res://addons/input_prompts/action_prompt/action_prompt.gd" id="5_6w5b4"] [ext_resource type="Script" uid="uid://bbs1u7ojno7xo" path="res://addons/input_prompts/action_prompt/action_prompt.gd" id="5_6w5b4"]
[ext_resource type="Texture2D" uid="uid://dep3kuio0xnui" path="res://import/interface-elements/lower_corner.png" id="5_b7q2n"]
[ext_resource type="Script" uid="uid://cxton1pffwxk4" path="res://button_themer.gd" id="6_qhf78"]
[ext_resource type="Texture2D" uid="uid://yakqusko3p3h" path="res://addons/input_prompts/icons/keyboard/a.png" id="7_g425y"] [ext_resource type="Texture2D" uid="uid://yakqusko3p3h" path="res://addons/input_prompts/icons/keyboard/a.png" id="7_g425y"]
[ext_resource type="Texture2D" uid="uid://b0kuadlp4jw6j" path="res://addons/input_prompts/icons/keyboard/d.png" id="8_kj67n"] [ext_resource type="Texture2D" uid="uid://b0kuadlp4jw6j" path="res://addons/input_prompts/icons/keyboard/d.png" id="8_kj67n"]
[ext_resource type="Texture2D" uid="uid://bwhf0tx67yj7a" path="res://addons/input_prompts/icons/keyboard/s.png" id="9_xo70c"] [ext_resource type="Texture2D" uid="uid://bwhf0tx67yj7a" path="res://addons/input_prompts/icons/keyboard/s.png" id="9_xo70c"]
@ -21,7 +23,14 @@
[sub_resource type="GDScript" id="GDScript_t34p3"] [sub_resource type="GDScript" id="GDScript_t34p3"]
script/source = "extends Node3D script/source = "extends Node3D
var has_stage = false var has_stage = false:
set(stage):
if stage:
if not is_node_ready():
await ready
await get_tree().process_frame
%PressStart.grab_focus()
has_stage = stage
var room = preload(\"res://base-environments/youth_room/youth_room.tscn\") var room = preload(\"res://base-environments/youth_room/youth_room.tscn\")
var loaded_room: RoomTemplate var loaded_room: RoomTemplate
@ -33,13 +42,13 @@ func _ready() -> void:
State.show_content_notes = false State.show_content_notes = false
State.text_language = 1 State.text_language = 1
State.speech_language = 1 State.speech_language = 1
$Menu/VBoxContainer2/PressStart.grab_focus()
Scenes.sign_up_for_sequence(prepare_transition, Scenes.id.TRANSITION, 0) Scenes.sign_up_for_sequence(prepare_transition, Scenes.id.TRANSITION, 0)
Scenes.sign_up_for_sequence(transition, Scenes.id.TRANSITION, 2) Scenes.sign_up_for_sequence(transition, Scenes.id.TRANSITION, 2)
if OS.get_locale_language() == \"de\": if OS.get_locale_language() == \"de\":
$Menu/VBoxContainer/SpeechButton.select(1) $Menu/VBoxContainer/SpeechButton.select(1)
$Menu/VBoxContainer/SpeechButton.item_selected.emit(1) $Menu/VBoxContainer/SpeechButton.item_selected.emit(1)
func prepare_transition(_id): func prepare_transition(_id):
await get_tree().process_frame await get_tree().process_frame
Scenes.continue_sequence(self) Scenes.continue_sequence(self)
@ -91,9 +100,9 @@ func _on_start_button_pressed():
%Menu.mouse_filter = Control.MouseFilter.MOUSE_FILTER_PASS %Menu.mouse_filter = Control.MouseFilter.MOUSE_FILTER_PASS
loaded_room.start_room() loaded_room.start_room()
func _process(delta: float) -> void: #func _process(_delta: float) -> void:
if Input.is_action_just_pressed(\"reset_demo\"): # if Input.is_action_just_pressed(\"reset_demo\"):
_on_reset() # _on_reset()
func _on_reset(): func _on_reset():
load_room() load_room()
@ -134,7 +143,7 @@ func show_accessibility_settings():
if in_game: if in_game:
%ResumeButton.grab_focus() %ResumeButton.grab_focus()
else: else:
$Menu/VBoxContainer2/PressStart.grab_focus() %PressStart.grab_focus()
func toggle_pause_menu(): func toggle_pause_menu():
if not get_tree().paused: if not get_tree().paused:
@ -215,40 +224,40 @@ fill = 1
fill_from = Vector2(0.538462, 0.491453) fill_from = Vector2(0.538462, 0.491453)
fill_to = Vector2(1.3, -0.3) fill_to = Vector2(1.3, -0.3)
[sub_resource type="InputEventKey" id="InputEventKey_mivr6"] [sub_resource type="InputEventKey" id="InputEventKey_b7q2n"]
device = -1 device = -1
physical_keycode = 87 physical_keycode = 87
unicode = 119 unicode = 119
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_52c3j"] [sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_qhf78"]
device = -1 device = -1
axis = 1 axis = 1
axis_value = -1.0 axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_b7q2n"] [sub_resource type="InputEventKey" id="InputEventKey_gatj6"]
device = -1 device = -1
physical_keycode = 65 physical_keycode = 65
unicode = 97 unicode = 97
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_qhf78"] [sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_ol51q"]
device = -1 device = -1
axis_value = -1.0 axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_gatj6"] [sub_resource type="InputEventKey" id="InputEventKey_2rqk2"]
device = -1 device = -1
physical_keycode = 68 physical_keycode = 68
unicode = 100 unicode = 100
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_ol51q"] [sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_w8m28"]
device = -1 device = -1
axis_value = 1.0 axis_value = 1.0
[sub_resource type="InputEventKey" id="InputEventKey_2rqk2"] [sub_resource type="InputEventKey" id="InputEventKey_kwpdx"]
device = -1 device = -1
physical_keycode = 83 physical_keycode = 83
unicode = 115 unicode = 115
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_w8m28"] [sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_2xua5"]
device = -1 device = -1
axis = 1 axis = 1
axis_value = 1.0 axis_value = 1.0
@ -366,8 +375,6 @@ func _process(_delta):
text = \"%d/%d\" % [Engine.get_frames_per_second(), Engine.max_fps] text = \"%d/%d\" % [Engine.get_frames_per_second(), Engine.max_fps]
" "
[sub_resource type="VideoStreamTheora" id="VideoStreamTheora_kt5p7"]
[node name="DemoMain" type="Node3D"] [node name="DemoMain" type="Node3D"]
process_mode = 3 process_mode = 3
script = SubResource("GDScript_t34p3") script = SubResource("GDScript_t34p3")
@ -437,10 +444,6 @@ text = "*Als Messe-Demo geprüft. Entspricht angestrebtem finalen Rating."
horizontal_alignment = 1 horizontal_alignment = 1
autowrap_mode = 2 autowrap_mode = 2
[node name="Usk12" type="Sprite2D" parent="Menu"]
position = Vector2(229, 224)
texture = ExtResource("2_ncfee")
[node name="VBoxContainer2" type="VBoxContainer" parent="Menu"] [node name="VBoxContainer2" type="VBoxContainer" parent="Menu"]
layout_mode = 1 layout_mode = 1
anchors_preset = 8 anchors_preset = 8
@ -464,9 +467,14 @@ texture = ExtResource("1_61qpo")
expand_mode = 2 expand_mode = 2
[node name="PressStart" type="Button" parent="Menu/VBoxContainer2"] [node name="PressStart" type="Button" parent="Menu/VBoxContainer2"]
unique_name_in_owner = true
clip_contents = true
layout_mode = 2 layout_mode = 2
theme_override_font_sizes/font_size = 45 size_flags_horizontal = 4
theme_type_variation = &"H1Button"
text = "Start the Demo!" text = "Start the Demo!"
script = ExtResource("6_qhf78")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="VBoxContainer" type="VBoxContainer" parent="Menu"] [node name="VBoxContainer" type="VBoxContainer" parent="Menu"]
layout_mode = 1 layout_mode = 1
@ -482,6 +490,14 @@ offset_bottom = -92.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0 grow_vertical = 0
[node name="TextureRect2" type="TextureRect" parent="Menu/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("5_b7q2n")
expand_mode = 1
stretch_mode = 4
[node name="Label" type="Label" parent="Menu/VBoxContainer"] [node name="Label" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderMedium" theme_type_variation = &"HeaderMedium"
@ -554,7 +570,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4") script = ExtResource("5_6w5b4")
action = "player_forwards" action = "player_forwards"
icon = 4 icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_mivr6"), SubResource("InputEventJoypadMotion_52c3j")]) events = Array[InputEvent]([SubResource("InputEventKey_b7q2n"), SubResource("InputEventJoypadMotion_qhf78")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo" metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt2" type="TextureRect" parent="Menu/Control"] [node name="ActionPrompt2" type="TextureRect" parent="Menu/Control"]
@ -569,7 +585,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4") script = ExtResource("5_6w5b4")
action = "player_left" action = "player_left"
icon = 4 icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_b7q2n"), SubResource("InputEventJoypadMotion_qhf78")]) events = Array[InputEvent]([SubResource("InputEventKey_gatj6"), SubResource("InputEventJoypadMotion_ol51q")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo" metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt4" type="TextureRect" parent="Menu/Control"] [node name="ActionPrompt4" type="TextureRect" parent="Menu/Control"]
@ -584,7 +600,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4") script = ExtResource("5_6w5b4")
action = "player_right" action = "player_right"
icon = 4 icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_gatj6"), SubResource("InputEventJoypadMotion_ol51q")]) events = Array[InputEvent]([SubResource("InputEventKey_2rqk2"), SubResource("InputEventJoypadMotion_w8m28")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo" metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt3" type="TextureRect" parent="Menu/Control"] [node name="ActionPrompt3" type="TextureRect" parent="Menu/Control"]
@ -599,7 +615,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4") script = ExtResource("5_6w5b4")
action = "player_backwards" action = "player_backwards"
icon = 4 icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_2rqk2"), SubResource("InputEventJoypadMotion_w8m28")]) events = Array[InputEvent]([SubResource("InputEventKey_kwpdx"), SubResource("InputEventJoypadMotion_2xua5")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo" metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="Label" type="Label" parent="Menu/Control"] [node name="Label" type="Label" parent="Menu/Control"]
@ -760,11 +776,6 @@ offset_right = 40.0
offset_bottom = 35.0 offset_bottom = 35.0
script = SubResource("GDScript_kt5p7") script = SubResource("GDScript_kt5p7")
[node name="VideoStreamPlayer" type="VideoStreamPlayer" parent="."]
offset_right = 40.0
offset_bottom = 40.0
stream = SubResource("VideoStreamTheora_kt5p7")
[connection signal="pressed" from="Menu/VBoxContainer2/PressStart" to="." method="_on_start_button_pressed"] [connection signal="pressed" from="Menu/VBoxContainer2/PressStart" to="." method="_on_start_button_pressed"]
[connection signal="toggled" from="Menu/VBoxContainer/CNBox" to="." method="_on_cn_box_toggled"] [connection signal="toggled" from="Menu/VBoxContainer/CNBox" to="." method="_on_cn_box_toggled"]
[connection signal="toggled" from="Menu/VBoxContainer/MotionBox" to="." method="_on_motion_box_toggled"] [connection signal="toggled" from="Menu/VBoxContainer/MotionBox" to="." method="_on_motion_box_toggled"]

View File

@ -1,8 +1,15 @@
[gd_scene load_steps=7 format=3 uid="uid://6aaxpvoepqrm"] [gd_scene load_steps=20 format=3 uid="uid://6aaxpvoepqrm"]
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_wpq8h"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_wpq8h"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="2_bktn7"] [ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="2_bktn7"]
[ext_resource type="FontFile" uid="uid://cb66e4mqysgf8" path="res://import/fonts/title_handwriting.tres" id="2_rmsdo"] [ext_resource type="Script" uid="uid://dbap0gqox0ty1" path="res://addons/markdownlabel/markdownlabel.gd" id="2_pl7dp"]
[ext_resource type="Script" uid="uid://dcx7crs23nf4" path="res://addons/markdownlabel/header_formats/h1_format.gd" id="3_cyrrf"]
[ext_resource type="Script" uid="uid://d0sin64i4v3op" path="res://addons/markdownlabel/header_formats/h2_format.gd" id="4_n0bfa"]
[ext_resource type="Script" uid="uid://dlok0dv1tq2bf" path="res://addons/markdownlabel/header_formats/h3_format.gd" id="5_vf10x"]
[ext_resource type="Script" uid="uid://bayuh2vafablg" path="res://addons/markdownlabel/header_formats/h4_format.gd" id="6_63x3b"]
[ext_resource type="Script" uid="uid://dfr1w7u3jgni3" path="res://addons/markdownlabel/header_formats/h5_format.gd" id="7_sp2lx"]
[ext_resource type="Script" uid="uid://bsi6dexoofpe6" path="res://addons/markdownlabel/header_formats/h6_format.gd" id="8_bd0uj"]
[ext_resource type="Script" uid="uid://cxton1pffwxk4" path="res://button_themer.gd" id="9_pl7dp"]
[sub_resource type="GDScript" id="GDScript_nkjm2"] [sub_resource type="GDScript" id="GDScript_nkjm2"]
script/source = "extends Panel script/source = "extends Panel
@ -15,23 +22,44 @@ func _ready():
func _on_start_pressed(): func _on_start_pressed():
emit_signal(\"on_read\") emit_signal(\"on_read\")
hide() hide()
mouse_filter = MOUSE_FILTER_PASS
" "
[sub_resource type="GDScript" id="GDScript_tb2ju"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cyrrf"]
script/source = "extends Button content_margin_left = 5.0
content_margin_top = 20.0
content_margin_right = 5.0
content_margin_bottom = 5.0
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kg2u8"]
content_margin_left = 20.0
content_margin_top = 5.0
content_margin_right = 50.0
content_margin_bottom = 5.0
func _pressed(): [sub_resource type="Resource" id="Resource_4n2vh"]
OS.shell_open(\"https://gitlab.com/betalars/frame-of-mind/-/wikis/home\") resource_local_to_scene = true
" script = ExtResource("3_cyrrf")
[sub_resource type="GDScript" id="GDScript_m3ofj"] [sub_resource type="Resource" id="Resource_vhiu8"]
script/source = "extends Button resource_local_to_scene = true
script = ExtResource("4_n0bfa")
[sub_resource type="Resource" id="Resource_sualy"]
resource_local_to_scene = true
script = ExtResource("5_vf10x")
func _pressed(): [sub_resource type="Resource" id="Resource_w3hq6"]
OS.shell_open(\"https://gitlab.com/betalars/frame-of-mind/-/blob/main/design/contributions.md\") resource_local_to_scene = true
" script = ExtResource("6_63x3b")
[sub_resource type="Resource" id="Resource_parnl"]
resource_local_to_scene = true
script = ExtResource("7_sp2lx")
[sub_resource type="Resource" id="Resource_5sp7x"]
resource_local_to_scene = true
script = ExtResource("8_bd0uj")
[node name="Disclaimer" type="Panel"] [node name="Disclaimer" type="Panel"]
anchors_preset = 15 anchors_preset = 15
@ -64,7 +92,7 @@ stretch_mode = 4
[node name="Panel" type="PanelContainer" parent="childhood/PanelContainer/StartFrame"] [node name="Panel" type="PanelContainer" parent="childhood/PanelContainer/StartFrame"]
show_behind_parent = true show_behind_parent = true
layout_mode = 2 layout_mode = 0
offset_left = 199.0 offset_left = 199.0
offset_top = -112.0 offset_top = -112.0
offset_right = 1039.0 offset_right = 1039.0
@ -78,50 +106,52 @@ layout_mode = 2
[node name="Label" type="Label" parent="childhood/PanelContainer/VBoxContainer"] [node name="Label" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderLarge" theme_type_variation = &"HeaderLarge"
text = "Welcome to frame of mind development" theme_override_styles/normal = SubResource("StyleBoxEmpty_cyrrf")
text = "Welcome to the Frame of Mind BETA"
[node name="Label2" type="Label" parent="childhood/PanelContainer/VBoxContainer"] [node name="Label2" type="RichTextLabel" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Thank you for being interested in our game. Here are some disclaimers. size_flags_vertical = 3
theme_override_styles/normal = SubResource("StyleBoxEmpty_kg2u8")
theme_override_styles/focus = SubResource("StyleBoxEmpty_kg2u8")
bbcode_enabled = true
text = "Thanks for participating in the semi-public beta! Access is limited to the amount of feedback we can reasonably process. :)
Right now and acessibility settings and internationalisation do not fully work. While we are close to release and won't be making any groundbreaking changes anymore, you can help push us over the final stretch.
They will be worked on in the upcoming months.
You will also not be able to help Lisa find a better frame of mind, as the second chapter is not yet implemented. Please know that many disruptive thoughts Lisa has in the first chapter were designed to be resolved later in the game.
The game also does not support save games yet.
Frame of Mind uses a Creative Commons Non Commercial Share Alike 4.0 license. You can use the game and it's assets freely, as long as you also contribute back to the creative Commons Community. Feel free to reach out if you need a commercial License. [font_size=28]The most important bits[/font_size]
Twokinds is created by Thomas J. Fischbach, who granted us permission to use it in a Creative Commons Project." [ol]Please fill out the form that opens after you close the game!
autowrap_mode = 3 Also when you stopped playing in the middle.
We are aware of Typos and Placeholder assets in the subway and second room.
Have fun playing![/ol]"
justification_flags = 131 justification_flags = 131
visible_characters_behavior = 1 visible_characters_behavior = 1
script = ExtResource("2_pl7dp")
markdown_text = "Thanks for participating in the semi-public beta! Access is limited to the amount of feedback we can reasonably process. :)
While we are close to release and won't be making any groundbreaking changes anymore, you can help push us over the final stretch.
### The most important bits
1. Please fill out the form that opens after you close the game!
2. Also when you stopped playing in the middle.
3. We are aware of Typos and Placeholder assets in the subway and second room.
4. Have fun playing!"
h1 = SubResource("Resource_4n2vh")
h2 = SubResource("Resource_vhiu8")
h3 = SubResource("Resource_sualy")
h4 = SubResource("Resource_w3hq6")
h5 = SubResource("Resource_parnl")
h6 = SubResource("Resource_5sp7x")
metadata/_custom_type_script = "uid://dbap0gqox0ty1"
[node name="Start" type="Button" parent="childhood/PanelContainer/VBoxContainer"] [node name="Start" type="Button" parent="childhood/PanelContainer/VBoxContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
theme_override_fonts/font = ExtResource("2_rmsdo") theme_type_variation = &"H1Button"
theme_override_font_sizes/font_size = 50 text = "I understand, please start the beta"
text = "I understand, please start the alpha" script = ExtResource("9_pl7dp")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="Label3" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "The following links will take you to gilab.com"
horizontal_alignment = 1
autowrap_mode = 3
visible_characters_behavior = 1
[node name="Button3" type="Button" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
text = "Show me the Wiki"
script = SubResource("GDScript_tb2ju")
[node name="Button2" type="Button" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
text = "Show me Creative Commons Projects,
that are used by the game."
script = SubResource("GDScript_m3ofj")
[node name="StartBottom" type="TextureRect" parent="childhood/PanelContainer/VBoxContainer"] [node name="StartBottom" type="TextureRect" parent="childhood/PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 64) custom_minimum_size = Vector2(0, 64)

File diff suppressed because one or more lines are too long

View File

@ -1,25 +1,9 @@
keys,en,de,es,ja,notes keys,en,de,es,ja,notes
"Accessibility, Disclaimers and Content Notes","Accessibility, Disclaimers and Content Notes",Barrierefreiheit und Erwartungsmanagement,,, "Accessibility, Disclaimers and Content Notes","Accessibility, Disclaimers and Content Notes",Barrierefreiheit und Erwartungsmanagement,,,
Accessibility,Accessibility,Barrierefreiheit,,, menu_okay,Okay,O.K.,,,
reduce motion and flickering,reduce Motion and Flickering,reduziere Animationen und Flackern,,, menu_back,Go Back,Zurück,,,
use Screenreader,Use Screenreader,Screen-Reader aktivieren,,, menu_save_all,Save all,Alles speichern,,,
disable video,Disable Video,Video deaktivieren,,, menu_skip_all,Skip All,Alles Überspringen,,,
(save compute when playing blind,Save Compute When Playing Blind,Spart Rechenleistung beim blind spielen,,,
simplified Controls,simplified Controls,Vereinfachte Steuerung,,,
Show Navigation,Show Navigation,Navigation anzeigen,,,
Font-Style,Font-Style,Schriftart,,,
messy handwriting,Messy Handwriting,Unleserliche Handschrift,,,
easy handwriting,Easy Handwriting,Einfache Handschrift,,,
serif,Serif Font,Serifenschrift,,,
hyperlegible sans,Hyper Legible Font,Extrem lesbar Serifenfrei,,,
system font,System Font,System-Schriftart,,,
subtitles,Subtitles,Untertitel,,,
spoken text,Spoken Text,Gesprochener Text,,,
closed captions,Closed Captions,Untertitel für Hörgeschädigte,,,
UI Scale,UI Scale,UI Skalierung,,,
okay,Okay,O.K.,,,
go back,Go Back,Zurück,,,
skip all,Skip All,Alles Überspringen,,,
Audio and Language,Audio and Language,Sprache und Sound,,, Audio and Language,Audio and Language,Sprache und Sound,,,
mute Soundtrack,Mute Soundtrack,Musik aus,,, mute Soundtrack,Mute Soundtrack,Musik aus,,,
mute Sound-Effects,Mute Sound-Effects,Effekte aus,,, mute Sound-Effects,Mute Sound-Effects,Effekte aus,,,
@ -37,64 +21,65 @@ Find Subtitle Settings in Acessability Settings.,Find Subtitle Settings in Acess
use OS Language,use OS Language,Betriebssystemsprache nutzen,,, use OS Language,use OS Language,Betriebssystemsprache nutzen,,,
English,English,Englisch,,, English,English,Englisch,,,
German,German,Deutsch,,, German,German,Deutsch,,,
This Game deals with Heavy Topics.,This Game deals with Heavy Topics.,In diesem Spiel geht es um schwere Themen.,,, title_content_notes,Content Notes,Sensible Inhalte,,,
I would like to know more.,I would like to know more.,Ich würde gern mehr wissen.,,, menu_cn_enable,Show the topics in advance.,Vorwarnungen zu Themen geben,,,
Is this game for or about me?,Is this game for or about me?,Ist dieses Spiel für oder über mich?,,, menu_cn_enable_tooltip,Content Notes are shown before you pick up a menento. They are an alternative to “Trigger Warnings”,"Content Notes werden angezeigt, bevor du eine Erinnerung einsammelst. Dies ist eine Alternative zu “Triggerwarnungen”.",,,
"[ul] menu_cn_allow_skips,Allow me to decline hearing a story.,Ich möchte Geschichten auslassen können.,,,
This game tells one story about one fictional character. menu_cn_allow_skips_tooltip,You can choose to not hear a memory and not play with the thoughts connected to it. All memories have neutral summaries you can choose to read.,Du kannst dich entscheiden Erinnerungen nicht zu hören und ohne die damit verbundenen Gedanken zu spielen. Alle Erinnerungen haben neutral formulierte Zusammenfassungen.,,,
This character was designed to tell an honest and accessible story about identity and trauma. menu_cn_allow_returns,Allow me to discard thoughts.,Ich möchte Gedanken wegwerfen können.,,,
This is not the game for you if you are looking for escapism. menu_cn_allow_returns_tooltip,You can choose to erase thoughts by returning them to their memento. ,"Du kannst Gedanken los werden, in dem du sie zu ihrem Memento zurückbringst.",,,
This is not therapy. menu_cn_disclaimer,This game deals with heavy topics.,In diesem Spiel geht es um schwere Themen.,,,
You might feel understood if experiences you've had are close to the characters. menu_cn_summary,These options provide accessiblity and allow you to play as you like. Hover on each option to learn more.,"Diese Optionen machen das Spiel zugänglicher, weil du entscheiden kannst, wie du spielen möchtest. Hover to learn more.",,,
It might help you understand a friend. menu_cn_learn_more,I would like to know more.,Ich würde gern mehr wissen.,,,
It will tell you things a group of peers, that reflected about their similar, but specific experiences, want more people to know about. menu_cn_warm_title,I would like some reassuring words.,Ich brauche ermutigende Worte.,,,
This is made by betalars, who has many overlapping experiences with this character. They made sure to consult people, who can speak from their own experiences about subjects, where betalars could not. menu_cn_warm,"This is a game about acceptance and understanding. Some play this game to understand themselves, some play it to understand a friend, some play it to understand this character I wrote and very few play it to understand me. Whatever feels right is up to you.
[/ul]","[ul]
This game tells one story about one fictional character. Please understand also that I know this game might hurt and that I have faith you can grow from it.
This character was designed to tell an honest and accessible story about identity and trauma. And yes, I am being intentually misleading because life is messy and you have the wits to see trough it yourself.","In diesem Spiel geht es um Akzeptanz und Empathie. Manche spielen es um sich selbst zu verstehen, manche spielen es um ein\*e Freund\*in zu verstehen, manche versuchen diesen Charakter zu verstehen, den ich geschrieben habe und sehr wenige versuchen sogar mich zu verstehen. Du musst selbst entscheiden, was davon richtig ist.
This is not the game for you if you are looking for escapism.
This is not therapy. Was du allerdings über mich verstehen solltest ist ich weiß, dass dieses Spiel dir weh tun kann und, dass ich Vertrauen habe, dass du daraus Wachsen kannst.
You might feel understood if experiences you've had are close to the characters.
It might help you understand a friend. Und ja, ich bin teilweise absichtlich verwirrend. Leben ist verwirrend und du hast das Zeug, dass du es selbst entwirrst.",,,leave the [ul] and [/ul] please avoid using gendered words for betalars if possible (they are non-binary)
It will tell you things a group of peers, that reflected about their similar, but specific experiences, want more people to know about. menu_cn_harsh_title,Be frank with me.,Sei einfach dierekt.,,,
This is made by betalars, who has many overlapping experiences with this character. They made sure to consult people, who can speak from their own experiences about subjects, where betalars could not. menu_cn_harsh,"This game has Content Notes for a reason. Its main character has gone trough some shit and has internalized a lot of it. Life did not give them a good hand and they now have to deal with it. That is the point.
[/ul]","[ul]
In diesem Spiel wird eine Geschichte eines fiktionalen Charakters erzählt. This is no escapism and shouldnt be a substitute for therapy.
Der Charakter wurde geschrieben, um eine zugängliche und ehrliche Geschichte über Trauma zu erzählen. It is meant to be a challge in empathy and radical acceptance. And if you are mad at me for the thoughts I gave my character, Im afraid you failed that challenge.
Dieses Spiel bietet keinen Eskapismus.
Dieses Spiel ist keine Therapie. And Ive seen how hard this game can hit at times and I am fine with that because believe me life hits harder.","Das Spiel wirkt zahm, aber es hat nicht ohne Grund content Notes. Dieser Charakter hat ziemliche Scheiße erlebt und hat die Scheiße auch gut internalisiert. Das Leben gibt vielen Leuten einfach eine miese Hand, und sie müssen damit klar kommen. Darum geht es.
Vielleicht fühlst du dich verstanden, wenn deine Erfahrungen dem Charakter ähneln.
Vielleicht hilft es dir, jemand befreundetes zu verstehen. Das Spiel bietet kein Eskarpismus und es sollte auch nicht als Therapie dienen.
Dieses Spiel wurde von einer Gruppe an Leuten geschaffen, die sehr spezifische Erfahrungen, die sie gemeinsam gemacht haben, teilen wollten. Was es bestenfalls ist: eine Übung in Empathie und radikaler Akzeptanz. Und falls du wütend auf mich bist für die Gedanken, die ich meiner Figur gegeben habe, bist du an dieser Übung leider gescheitert.
Dieses Spiel ist von betalars. An vielen Stellen wurde hier aus eigener Erfahrung geschrieben und da, wo keine eigenen Erfahrungen da waren, wurden Betroffene einbezogen.
[/ul]",,,leave the [ul] and [/ul] please avoid using gendered words for betalars if possible (they are non-binary) Und ich habe gesehen, dass dieses Spiel manche ziemlich doll mitnimmt. Aber das Leben haut noch ganz anders rein.",,,
What may be difficult about the premise?,What may be difficult about the premise?,Warum könnte die Prämisse schwierig sein?,,, menu_cn_somber_title,"What is this about?, in neutral words. (Content Notes)",Worum geht es im Spiel (Content Notes),,,
"In this game, you will encounter situations that are problematic and will have a negative impact on the Mental Health of the character you are playing as. This game will establish hurtful assumptions this character develops about themselves and you may not resolve all of them right away. You will have some agency, but it is limited by the games narrative and also chance. You are encouraged and will be able to resolve hurtful assumptions later in the game.","In this game, you will encounter situations that are problematic and will have a negative impact on the Mental Health of the character you are playing as. This game will establish hurtful assumptions this character develops about themselves and you may not resolve all of them right away. You will have some agency, but it is limited by the games narrative and also chance. You are encouraged and will be able to resolve hurtful assumptions later in the game.","Dieses Spiel wird Erfahrungen thematisieren, die sich negativ auf den gespielten Charakter auswirken. Das Spiel wird schädliche Annahmen etablieren, die der Charakter über sich hat und nicht immer sofort auflösen. Du kannst darauf Einfluss nehmen, aber deine Möglichkeiten sind durch Spielmechanik und Narrative beschränkt. Du sollst und kannst vieles später aufarbeiten.",,, menu_cn_somber,"This game tells an honest and acessible story about neurodivergence and trauma. It shares lived experiences of many neurodivergent people, including this games main developer.
What are the game's topics? (Content Notes),What are the game's topics? (Content Notes),Worum geht es im Spiel (Content Warnungen),,,
"This game discusses Mental Health and Sex-Positivity. It also includes a character, who is trans but you will get to know them while they are unaware about their trans identity going by their birthname. Besides social Transistioning, this game also deals with topics including Mysoginy, Sanism, Body Issues, Eating Disorders, Bullying, Martial Arts, Relationships and Rape, but not trough physical violence. Comic violence is mentioned while talking about a fictional franchise in universe.","This game discusses Mental Health and Sex-Positivity. It also includes a character, who is trans but you will get to know them while they are unaware about their trans identity going by their birthname. Besides social Transistioning, this game also deals with topics including Mysoginy, Sanism, Body Issues, Eating Disorders, Bullying, Martial Arts, Relationships and Rape, but not trough physical violence. Comic violence is mentioned while talking about a fictional franchise in universe.","In diesem Spiel geht es um mentale Gesundheit und Sex-Positivität. Es enthält einen trans Charakter, der sich darüber nicht im klaren ist und daher auch zunächst noch keinen eigenen Namen hat. Neben Sozialer Transition thematisiert das Spiel Mysoginie, Diskriminierung wegen mentalen Behinderungen, Probleme mit dem Körperbild, Essstörungen, Mobbing, Kampfkunst, Beziehungen und Vergewaltigungen, jedoch nicht durch körperliche Gewalt. Comic Gewalt wird erwähnt in einer im Spiel fiktionalen Geschichte.",,,"The Rape being discussed in this game is non-consensual sex, but also non-voilent." This game has a lot of toxic thoughts you have to deal with and depending on your choices and also luck, you wont be able to resolve everything. It takes acceptance to complete the game the intended way.
This game discusses bullying, alienation, (internalized) mysoginy, sanisn, body issues (disphoria), birth-names, eating issues, burnout and trauma. The main character will share a memory of non-consensual sex that they blame themselves for. If you want to resolve that blame, dont jump on the first train when moving on.","Dieses Spiel erzählt eine ehrliche und zugängliche Geschichte über Trauma und Aufwachsen als neurodivergente Personen. Es teilt echte Lebensgeschichten, auch die des Developers.
Dieses Spiel hat toxische Gedanken, mit denen du umgehen musst und abhängig von deinen Entscheidungen und von Glück wirst du nicht alles auflösen können. Akzeptanz gehört zu den Fähigkeiten, die das Spiel herausfordern möchte.
In der Geschichte geht es um Mobbing, (internalisierte) Mysogonie, Isolation, Diskriminierung wegen Psyche, Essstörungen, Burnout und Trauma. Das Spiel erzählt auch eine Erinnerung an nicht einvernehmlichen Sex, an dem sich Schuld gegeben wird. Wenn du diese Schuldgefühle auflösen möchtest, nimm nicht die erste Bahn, wenn du fortfährst.",,,"The Rape being discussed in this game is non-consensual sex, but also non-voilent."
Mental Health Accessibility Options,Mental Health Accessibility Options,Barrierefreiheit für psychische Störungen,,, Mental Health Accessibility Options,Mental Health Accessibility Options,Barrierefreiheit für psychische Störungen,,,
"[ul] ,,,,,
You can always Pause using Escape or Spacebar
You can always choose to just get a neutral summary of scenes or skip them entirely
[/ul]","[ul]
You can always pause using escape or spacebar.
You can always choose to just get a neutral summary of scenes or skip them entirely.
[/ul]","[ul]
Du kannst immer mit Pause oder Escape pausieren.
Du kannst dir wünschen, dass du bei schwierige Szenen überspringen kannst und eine neutrale Zusammenfassung davon bekommst.",,,
show content notes during the game,show content notes during the game,Inhaltswarnungen im Spiel anzeigen,,, show content notes during the game,show content notes during the game,Inhaltswarnungen im Spiel anzeigen,,,
allow me to skip scenes,allow me to skip scenes,Überspringen von Szenen ermöglichen,,, allow me to skip scenes,allow me to skip scenes,Überspringen von Szenen ermöglichen,,,
"[center][i]I assure you I did my best, "[center][i]I assure you I did my best,
But I am only human and this is just one game.[/i][/center]","[center][i]I assure you I did my best, But I am only human and this is just one game.[/i][/center]","[center][i]I assure you I did my best,
But I am only human and this is just one game.[/i][/center]","[center][i]Ich verspreche ich habe mein Bestes getan, But I am only human and this is just one game.[/i][/center]","[center][i]Ich verspreche ich habe mein Bestes getan,
Aber ich bin nur ein Mensch und kein Spiel wird je Aber ich bin nur ein Mensch und das ist nur ein Spiel.[/i][/center]",,,"This is intentionally phrased as “only one game” instead of “only a game”, hinting at it being meaningful, but limited in what it can convey on its own."
ein Leben vollumfänglich zeigen können.[/i][/center]",,,"This is intentionally phrased as “only one game” instead of “only a game”, hinting at it being meaningful, but limited in what it can convey on its own." menu_new_game,new Game,neues Spiel,,,
new Game,new Game,neues Spiel,,, menu_continue,continue,weiter spielen,,,
continue,continue,weiter spielen,,, menu_load,load Save,Spiel laden,,,
load,load,Spiel laden,,, menu_open_settings,settings,Einstellungen,,,
settings,settings,Einstellungen,,, menu_title_accessibility,Accessability Settings,Optionen für Barrierefreiheit,,,
Video,Video,Grafik,,,In the context of a settings menu selection menu_title_audio,Audio Configuration,Audioeinstellungen,,,
Gameplay,Gameplay,Spieloptionen,,,In the context of a settings menu selection menu_title_video,Video Settings,Grafik,,,In the context of a settings menu selection
menu_title_gameplay,Gameplay Settings,Spieloptionen,,,In the context of a settings menu selection
menu_save_continue,Save and continue,Speichern und weiter,,,
menu_save,Save,Speichern,,,
Content Notes,Content Notes,Sensible Inhalte,,,In the context of a settings menu selection Content Notes,Content Notes,Sensible Inhalte,,,In the context of a settings menu selection
Video Settings,Video Settings,Grafikeinstellungen,,,In the context of a settings menu selection Video Settings,Video Settings,Grafikeinstellungen,,,In the context of a settings menu selection
General,General,Allgemeines,,,In the context of a video settings menu General,General,Allgemeines,,,In the context of a video settings menu
@ -598,7 +583,25 @@ MementoLabel_Therapy,,,,,
MementoLabel_TherapyCN,,,,, MementoLabel_TherapyCN,,,,,
MementoLabel_Burnout,,,,, MementoLabel_Burnout,,,,,
MementoLabel_BurnoutCN,,,,, MementoLabel_BurnoutCN,,,,,
Menu_A11y_disclaimer,Greyed-out items do not work yet.,Ausgegraute Optionen funktionieren noch nicht.,,, menu_a11y_title,Accessibility,Barrierefreiheit,,,
Menu_A11y_fonts,Font-Style,Schriftart,,, menu_a11y_disclaimer,Greyed-out items do not work yet.,Ausgegraute Optionen funktionieren noch nicht.,,,
Menu_A11y_ subtitles,Subtitles,Untertitel,,, menu_a11y_fonts,Font-Style,Schriftart,,,
Menu_A11y_scale,UI Scale,UI-Skalierung,,, menu_a11y_subtitles,Subtitles,Untertitel,,,
menu_a11y_scale,UI Scale,UI-Skalierung,,,
menu_a11y_motion,reduce Motion and Flickering,reduziere Animationen und Flackern,,,
menu_a11y_screenreader,Use Screenreader (very borked as of now),Screen-Reader aktivieren (derzeit noch ziemlich kaputt),,,
menu_a11y_disable_video,Disable Video,Video deaktivieren,,,
menu_a11y_disable_video_tooltip,In case you are not using your graphics cards anyway.,Falls du deine Grafikkarte eh nicht nutzt.,,,
menu_a11y_hyperacoustics_filter,Reduce audio noise,Geräusche dämpfen,,,
Show Navigation,Show Navigation,Navigation anzeigen,,,
Font-Style,Font-Style,Schriftart,,,
messy handwriting,Messy Handwriting,Unleserliche Handschrift,,,
easy handwriting,Easy Handwriting,Einfache Handschrift,,,
serif,Serif Font,Serifenschrift,,,
hyperlegible sans,Hyper Legible Font,Extrem lesbar Serifenfrei,,,
system font,System Font,System-Schriftart,,,
subtitles,Subtitles,Untertitel,,,
spoken text,Spoken Text,Gesprochener Text,,,
closed captions,Closed Captions,Untertitel für Hörgeschädigte,,,
UI Scale,UI Scale,UI Skalierung,,,
menu_a11y_statement,Open Information on Accessibility,Informationen zu Barrierefreiheit öffnen,,,

1 keys en de es ja notes
2 Accessibility, Disclaimers and Content Notes Accessibility, Disclaimers and Content Notes Barrierefreiheit und Erwartungsmanagement
3 Accessibility menu_okay Accessibility Okay Barrierefreiheit O.K.
4 reduce motion and flickering menu_back reduce Motion and Flickering Go Back reduziere Animationen und Flackern Zurück
5 use Screenreader menu_save_all Use Screenreader Save all Screen-Reader aktivieren Alles speichern
6 disable video menu_skip_all Disable Video Skip All Video deaktivieren Alles Überspringen
(save compute when playing blind Save Compute When Playing Blind Spart Rechenleistung beim blind spielen
simplified Controls simplified Controls Vereinfachte Steuerung
Show Navigation Show Navigation Navigation anzeigen
Font-Style Font-Style Schriftart
messy handwriting Messy Handwriting Unleserliche Handschrift
easy handwriting Easy Handwriting Einfache Handschrift
serif Serif Font Serifenschrift
hyperlegible sans Hyper Legible Font Extrem lesbar Serifenfrei
system font System Font System-Schriftart
subtitles Subtitles Untertitel
spoken text Spoken Text Gesprochener Text
closed captions Closed Captions Untertitel für Hörgeschädigte
UI Scale UI Scale UI Skalierung
okay Okay O.K.
go back Go Back Zurück
skip all Skip All Alles Überspringen
7 Audio and Language Audio and Language Sprache und Sound
8 mute Soundtrack Mute Soundtrack Musik aus
9 mute Sound-Effects Mute Sound-Effects Effekte aus
21 use OS Language use OS Language Betriebssystemsprache nutzen
22 English English Englisch
23 German German Deutsch
24 This Game deals with Heavy Topics. title_content_notes This Game deals with Heavy Topics. Content Notes In diesem Spiel geht es um schwere Themen. Sensible Inhalte
25 I would like to know more. menu_cn_enable I would like to know more. Show the topics in advance. Ich würde gern mehr wissen. Vorwarnungen zu Themen geben
26 Is this game for or about me? menu_cn_enable_tooltip Is this game for or about me? Content Notes are shown before you pick up a menento. They are an alternative to “Trigger Warnings” Ist dieses Spiel für oder über mich? Content Notes werden angezeigt, bevor du eine Erinnerung einsammelst. Dies ist eine Alternative zu “Triggerwarnungen”.
27 [ul] This game tells one story about one fictional character. This character was designed to tell an honest and accessible story about identity and trauma. This is not the game for you if you are looking for escapism. This is not therapy. You might feel understood if experiences you've had are close to the characters. It might help you understand a friend. It will tell you things a group of peers, that reflected about their similar, but specific experiences, want more people to know about. This is made by betalars, who has many overlapping experiences with this character. They made sure to consult people, who can speak from their own experiences about subjects, where betalars could not. [/ul] menu_cn_allow_skips [ul] This game tells one story about one fictional character. This character was designed to tell an honest and accessible story about identity and trauma. This is not the game for you if you are looking for escapism. This is not therapy. You might feel understood if experiences you've had are close to the characters. It might help you understand a friend. It will tell you things a group of peers, that reflected about their similar, but specific experiences, want more people to know about. This is made by betalars, who has many overlapping experiences with this character. They made sure to consult people, who can speak from their own experiences about subjects, where betalars could not. [/ul] Allow me to decline hearing a story. [ul] In diesem Spiel wird eine Geschichte eines fiktionalen Charakters erzählt. Der Charakter wurde geschrieben, um eine zugängliche und ehrliche Geschichte über Trauma zu erzählen. Dieses Spiel bietet keinen Eskapismus. Dieses Spiel ist keine Therapie. Vielleicht fühlst du dich verstanden, wenn deine Erfahrungen dem Charakter ähneln. Vielleicht hilft es dir, jemand befreundetes zu verstehen. Dieses Spiel wurde von einer Gruppe an Leuten geschaffen, die sehr spezifische Erfahrungen, die sie gemeinsam gemacht haben, teilen wollten. Dieses Spiel ist von betalars. An vielen Stellen wurde hier aus eigener Erfahrung geschrieben und da, wo keine eigenen Erfahrungen da waren, wurden Betroffene einbezogen. [/ul] Ich möchte Geschichten auslassen können. leave the [ul] and [/ul] please avoid using gendered words for betalars if possible (they are non-binary)
28 What may be difficult about the premise? menu_cn_allow_skips_tooltip What may be difficult about the premise? You can choose to not hear a memory and not play with the thoughts connected to it. All memories have neutral summaries you can choose to read. Warum könnte die Prämisse schwierig sein? Du kannst dich entscheiden Erinnerungen nicht zu hören und ohne die damit verbundenen Gedanken zu spielen. Alle Erinnerungen haben neutral formulierte Zusammenfassungen.
29 In this game, you will encounter situations that are problematic and will have a negative impact on the Mental Health of the character you are playing as. This game will establish hurtful assumptions this character develops about themselves and you may not resolve all of them right away. You will have some agency, but it is limited by the games narrative and also chance. You are encouraged and will be able to resolve hurtful assumptions later in the game. menu_cn_allow_returns In this game, you will encounter situations that are problematic and will have a negative impact on the Mental Health of the character you are playing as. This game will establish hurtful assumptions this character develops about themselves and you may not resolve all of them right away. You will have some agency, but it is limited by the games narrative and also chance. You are encouraged and will be able to resolve hurtful assumptions later in the game. Allow me to discard thoughts. Dieses Spiel wird Erfahrungen thematisieren, die sich negativ auf den gespielten Charakter auswirken. Das Spiel wird schädliche Annahmen etablieren, die der Charakter über sich hat und nicht immer sofort auflösen. Du kannst darauf Einfluss nehmen, aber deine Möglichkeiten sind durch Spielmechanik und Narrative beschränkt. Du sollst und kannst vieles später aufarbeiten. Ich möchte Gedanken wegwerfen können.
30 What are the game's topics? (Content Notes) menu_cn_allow_returns_tooltip What are the game's topics? (Content Notes) You can choose to erase thoughts by returning them to their memento. Worum geht es im Spiel (Content Warnungen) Du kannst Gedanken los werden, in dem du sie zu ihrem Memento zurückbringst.
31 This game discusses Mental Health and Sex-Positivity. It also includes a character, who is trans but you will get to know them while they are unaware about their trans identity going by their birthname. Besides social Transistioning, this game also deals with topics including Mysoginy, Sanism, Body Issues, Eating Disorders, Bullying, Martial Arts, Relationships and Rape, but not trough physical violence. Comic violence is mentioned while talking about a fictional franchise in universe. menu_cn_disclaimer This game discusses Mental Health and Sex-Positivity. It also includes a character, who is trans but you will get to know them while they are unaware about their trans identity going by their birthname. Besides social Transistioning, this game also deals with topics including Mysoginy, Sanism, Body Issues, Eating Disorders, Bullying, Martial Arts, Relationships and Rape, but not trough physical violence. Comic violence is mentioned while talking about a fictional franchise in universe. This game deals with heavy topics. In diesem Spiel geht es um mentale Gesundheit und Sex-Positivität. Es enthält einen trans Charakter, der sich darüber nicht im klaren ist und daher auch zunächst noch keinen eigenen Namen hat. Neben Sozialer Transition thematisiert das Spiel Mysoginie, Diskriminierung wegen mentalen Behinderungen, Probleme mit dem Körperbild, Essstörungen, Mobbing, Kampfkunst, Beziehungen und Vergewaltigungen, jedoch nicht durch körperliche Gewalt. Comic Gewalt wird erwähnt in einer im Spiel fiktionalen Geschichte. In diesem Spiel geht es um schwere Themen. The Rape being discussed in this game is non-consensual sex, but also non-voilent.
32 Mental Health Accessibility Options menu_cn_summary Mental Health Accessibility Options These options provide accessiblity and allow you to play as you like. Hover on each option to learn more. Barrierefreiheit für psychische Störungen Diese Optionen machen das Spiel zugänglicher, weil du entscheiden kannst, wie du spielen möchtest. Hover to learn more.
33 [ul] You can always Pause using Escape or Spacebar You can always choose to just get a neutral summary of scenes or skip them entirely [/ul] menu_cn_learn_more [ul] You can always pause using escape or spacebar. You can always choose to just get a neutral summary of scenes or skip them entirely. [/ul] I would like to know more. [ul] Du kannst immer mit Pause oder Escape pausieren. Du kannst dir wünschen, dass du bei schwierige Szenen überspringen kannst und eine neutrale Zusammenfassung davon bekommst. Ich würde gern mehr wissen.
34 show content notes during the game menu_cn_warm_title show content notes during the game I would like some reassuring words. Inhaltswarnungen im Spiel anzeigen Ich brauche ermutigende Worte.
35 allow me to skip scenes menu_cn_warm allow me to skip scenes This is a game about acceptance and understanding. Some play this game to understand themselves, some play it to understand a friend, some play it to understand this character I wrote and very few play it to understand me. Whatever feels right is up to you. Please understand also that I know this game might hurt and that I have faith you can grow from it. And yes, I am being intentually misleading because life is messy and you have the wits to see trough it yourself. Überspringen von Szenen ermöglichen In diesem Spiel geht es um Akzeptanz und Empathie. Manche spielen es um sich selbst zu verstehen, manche spielen es um ein\*e Freund\*in zu verstehen, manche versuchen diesen Charakter zu verstehen, den ich geschrieben habe und sehr wenige versuchen sogar mich zu verstehen. Du musst selbst entscheiden, was davon richtig ist. Was du allerdings über mich verstehen solltest ist ich weiß, dass dieses Spiel dir weh tun kann und, dass ich Vertrauen habe, dass du daraus Wachsen kannst. Und ja, ich bin teilweise absichtlich verwirrend. Leben ist verwirrend und du hast das Zeug, dass du es selbst entwirrst. leave the [ul] and [/ul] please avoid using gendered words for betalars if possible (they are non-binary)
36 [center][i]I assure you I did my best, But I am only human and this is just one game.[/i][/center] menu_cn_harsh_title [center][i]I assure you I did my best, But I am only human and this is just one game.[/i][/center] Be frank with me. [center][i]Ich verspreche ich habe mein Bestes getan, Aber ich bin nur ein Mensch und kein Spiel wird je ein Leben vollumfänglich zeigen können.[/i][/center] Sei einfach dierekt. This is intentionally phrased as “only one game” instead of “only a game”, hinting at it being meaningful, but limited in what it can convey on its own.
37 new Game menu_cn_harsh new Game This game has Content Notes for a reason. Its main character has gone trough some shit and has internalized a lot of it. Life did not give them a good hand and they now have to deal with it. That is the point. This is no escapism and shouldn’t be a substitute for therapy. It is meant to be a challge in empathy and radical acceptance. And if you are mad at me for the thoughts I gave my character, I’m afraid you failed that challenge. And I’ve seen how hard this game can hit at times and I am fine with that because believe me life hits harder. neues Spiel Das Spiel wirkt zahm, aber es hat nicht ohne Grund content Notes. Dieser Charakter hat ziemliche Scheiße erlebt und hat die Scheiße auch gut internalisiert. Das Leben gibt vielen Leuten einfach eine miese Hand, und sie müssen damit klar kommen. Darum geht es. Das Spiel bietet kein Eskarpismus und es sollte auch nicht als Therapie dienen. Was es bestenfalls ist: eine Übung in Empathie und radikaler Akzeptanz. Und falls du wütend auf mich bist für die Gedanken, die ich meiner Figur gegeben habe, bist du an dieser Übung leider gescheitert. Und ich habe gesehen, dass dieses Spiel manche ziemlich doll mitnimmt. Aber das Leben haut noch ganz anders rein.
38 continue menu_cn_somber_title continue What is this about?, in neutral words. (Content Notes) weiter spielen Worum geht es im Spiel (Content Notes)
39 load menu_cn_somber load This game tells an honest and acessible story about neurodivergence and trauma. It shares lived experiences of many neurodivergent people, including this games main developer. This game has a lot of toxic thoughts you have to deal with and depending on your choices and also luck, you won’t be able to resolve everything. It takes acceptance to complete the game the intended way. This game discusses bullying, alienation, (internalized) mysoginy, sanisn, body issues (disphoria), birth-names, eating issues, burnout and trauma. The main character will share a memory of non-consensual sex that they blame themselves for. If you want to resolve that blame, don’t jump on the first train when moving on. Spiel laden Dieses Spiel erzählt eine ehrliche und zugängliche Geschichte über Trauma und Aufwachsen als neurodivergente Personen. Es teilt echte Lebensgeschichten, auch die des Developers. Dieses Spiel hat toxische Gedanken, mit denen du umgehen musst und abhängig von deinen Entscheidungen und von Glück wirst du nicht alles auflösen können. Akzeptanz gehört zu den Fähigkeiten, die das Spiel herausfordern möchte. In der Geschichte geht es um Mobbing, (internalisierte) Mysogonie, Isolation, Diskriminierung wegen Psyche, Essstörungen, Burnout und Trauma. Das Spiel erzählt auch eine Erinnerung an nicht einvernehmlichen Sex, an dem sich Schuld gegeben wird. Wenn du diese Schuldgefühle auflösen möchtest, nimm nicht die erste Bahn, wenn du fortfährst. The Rape being discussed in this game is non-consensual sex, but also non-voilent.
40 settings Mental Health Accessibility Options settings Mental Health Accessibility Options Einstellungen Barrierefreiheit für psychische Störungen
41 Video Video Grafik In the context of a settings menu selection
42 Gameplay show content notes during the game Gameplay show content notes during the game Spieloptionen Inhaltswarnungen im Spiel anzeigen In the context of a settings menu selection
43 Content Notes allow me to skip scenes Content Notes allow me to skip scenes Sensible Inhalte Überspringen von Szenen ermöglichen In the context of a settings menu selection
44 Video Settings [center][i]I assure you I did my best, But I am only human and this is just one game.[/i][/center] Video Settings [center][i]I assure you I did my best, But I am only human and this is just one game.[/i][/center] Grafikeinstellungen [center][i]Ich verspreche ich habe mein Bestes getan, Aber ich bin nur ein Mensch und das ist nur ein Spiel.[/i][/center] In the context of a settings menu selection This is intentionally phrased as “only one game” instead of “only a game”, hinting at it being meaningful, but limited in what it can convey on its own.
45 General menu_new_game General new Game Allgemeines neues Spiel In the context of a video settings menu
46 apply preset menu_continue Apply Preset continue Voreinstellungen weiter spielen
47 Performance menu_load Low load Save Niedrig Spiel laden
48 Balanced menu_open_settings Middle settings Mittel Einstellungen
49 Quality menu_title_accessibility High Accessability Settings Hoch Optionen für Barrierefreiheit
50 Fulscreen Mode menu_title_audio Fullscreen Mode Audio Configuration Fenster-Modus Audioeinstellungen
51 Windowed menu_title_video Windowed Video Settings Im Fenster Grafik In the context of a settings menu selection
52 Fullscreen menu_title_gameplay Fullscreen Gameplay Settings Vollbild Spieloptionen In the context of a settings menu selection
53 exclusive Fullscreen menu_save_continue exclusive Fullscreen Save and continue exklusives Vollbild Speichern und weiter
54 Rendering Scale menu_save Rendering Scale Save Skalierung Speichern
55 reset Content Notes reset Content Notes zurücksetzen Sensible Inhalte In the context of a settings menu selection
56 Super Resolution Video Settings Super Resolution Video Settings Super Resolution Grafikeinstellungen In the context of a settings menu selection
57 disabled General Disable General Deaktiviert Allgemeines In the context of a video settings menu
58 limit FPS apply preset Limit FPS Apply Preset FPS begrenzen Voreinstellungen
59 Performance Low Niedrig
60 Balanced Middle Mittel
61 Quality High Hoch
62 Fulscreen Mode Fullscreen Mode Fenster-Modus
63 Windowed Windowed Im Fenster
64 Fullscreen Fullscreen Vollbild
65 Graphic Fidelity exclusive Fullscreen Graphic Fidelity exclusive Fullscreen Graphische Qualität exklusives Vollbild
66 Global Illumination Rendering Scale Global Illumination Rendering Scale Globale Illumination Skalierung
minimum Minimum Minimum
low (SDF Global Illumination) Low (SDF Global Illumination) Niedrig (SDF Illumination)
medium (SDF and Screen Space Global Illumination) Medium (SDF and Screen Space Global Illumination) Mittel (SDF-Beleuchtung und SSGI)
high (SDF and Screen Space Global Illumination) High (SDF and Screen Space Global Illumination) Hoch (SDF-Beleuchtung und SSGI)
Shadow Quality Shadow Quality Schatten Qualität
performance Performance Leistung
balanced Balanced Ausgeglichen
quality Quality Höchste Qualität
67 Texture Filtering reset Texture Filtering reset Texturfilterung zurücksetzen
68 1x (very fast) Super Resolution 1x (very fast) Super Resolution 1x (sehr schnell) Super Resolution
69 2x (fast) disabled 2x (fast) Disable 2x (schnell) Deaktiviert
70 4x (average) limit FPS 4x (average) Limit FPS 4x (medium) FPS begrenzen
71 8x (slow) Graphic Fidelity 8x (slow) Graphic Fidelity 8x (langsam) Graphische Qualität
72 16x (slowest) Global Illumination 16x (slowest) Global Illumination 16x (am langsamsten) Globale Illumination
73 Anti Aliasing minimum Anti Aliasing Minimum Kantenglättung Minimum
74 enabled low (SDF Global Illumination) Enable Low (SDF Global Illumination) Aktiviert Niedrig (SDF Illumination)
75 adaptive medium (SDF and Screen Space Global Illumination) Adaptive Medium (SDF and Screen Space Global Illumination) Adaptiv Mittel (SDF-Beleuchtung und SSGI)
76 Letterbox high (SDF and Screen Space Global Illumination) Letterbox High (SDF and Screen Space Global Illumination) Letterbox Hoch (SDF-Beleuchtung und SSGI)
77 close Shadow Quality Close Shadow Quality Zurück Schatten Qualität
78 discard performance Discard Performance Verwerfen Leistung
79 save and apply balanced Save and Apply Balanced Speichern und Anwenden Ausgeglichen
80 quality Quality Höchste Qualität
81 Texture Filtering Texture Filtering Texturfilterung
82 1x (very fast) 1x (very fast) 1x (sehr schnell)
83 Settings have been modified. Do you really want to leave without saving? 2x (fast) Settings have been modified. Do you really want to leave without saving? 2x (fast) Es gibt nicht gespeicherte Änderungen. Möchtest du wirklich zurück ohne zu speichern? 2x (schnell)
84 leave 4x (average) Leave 4x (average) Wirklich verlassen 4x (medium)
85 save 8x (slow) Save 8x (slow) Speichern 8x (langsam)
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607

View File

@ -0,0 +1,14 @@
shader_type spatial;
render_mode depth_test_disabled;
uniform sampler2D default_texture: hint_default_white;
void vertex() {
// Called for every vertex the material is visible on.
}
void fragment() {
ALBEDO = texture(default_texture, UV).xyz;
ALPHA = texture(default_texture, UV).w;
EMISSION = COLOR.xyz * pow(ALBEDO, vec3(2.2));
}

View File

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

View File

@ -37,24 +37,37 @@ var is_active:bool = false:
func _ready() -> void: func _ready() -> void:
if is_in_beginning: if is_in_beginning:
%SaveButton.text = "save and continue" %SaveButton.text = "menu_save_continue"
back_button.show() back_button.text = ""
else: else:
%SaveButton.text = "save and exit" %SaveButton.text = "menu_save"
back_button.hide() back_button.hide()
update_ui_from_state() update_ui_from_state()
reduce_motion_check.pressed.connect(func(value): State.reduce_motion = value) reduce_motion_check.pressed.connect(func(value): State.reduce_motion = value)
reduce_motion_check.pressed.connect(changed.emit)
screenreader_check.pressed.connect(func(value): State.screen_reader_enabled = value) screenreader_check.pressed.connect(func(value): State.screen_reader_enabled = value)
screenreader_check.pressed.connect(changed.emit)
disable_rendering_check.pressed.connect(func(value): State.rendering_disabled = value) disable_rendering_check.pressed.connect(func(value): State.rendering_disabled = value)
disable_rendering_check.pressed.connect(changed.emit)
simplify_controls_check.pressed.connect(func(value): State.use_simplified_navigation = value) simplify_controls_check.pressed.connect(func(value): State.use_simplified_navigation = value)
simplify_controls_check.pressed.connect(changed.emit)
hyperacoustics_check.pressed.connect(func(value): State.enable_hyperacoustic_filter = value) hyperacoustics_check.pressed.connect(func(value): State.enable_hyperacoustic_filter = value)
hyperacoustics_check.pressed.connect(changed.emit)
font_picker.item_selected.connect(func(value): State.font_style = value) font_picker.item_selected.connect(func(value): State.font_style = value)
font_picker.item_selected.connect(changed.emit)
subtitle_picker.item_selected.connect(func(value): State.subtitles = value) subtitle_picker.item_selected.connect(func(value): State.subtitles = value)
subtitle_picker.item_selected.connect(changed.emit)
scale_slider.drag_ended.connect(_on_scale_slider_dragged) scale_slider.drag_ended.connect(_on_scale_slider_dragged)
scale_slider.drag_ended.connect(changed.emit)
save_button.pressed.connect(_on_save_button_pressed) save_button.pressed.connect(_on_save_button_pressed)
save_button.pressed.connect(changed.emit)
changed.connect(_on_changed)
var has_unsaved_changes
func _on_changed():
has_unsaved_changes = true
func _on_scale_slider_dragged(update:bool): func _on_scale_slider_dragged(update:bool):
if update: if update:
@ -73,6 +86,7 @@ func update_ui_from_state():
func _on_save_button_pressed() -> void: func _on_save_button_pressed() -> void:
is_active = false is_active = false
State.save_settings() State.save_settings()
has_unsaved_changes = false
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel") and is_active: if event.is_action_pressed("ui_cancel") and is_active:

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://b3wlecqvelh22"] [gd_scene load_steps=5 format=3 uid="uid://b3wlecqvelh22"]
[ext_resource type="Script" uid="uid://cbax2lv4pstqk" path="res://logic-scenes/main menu/acessability_settings.gd" id="1_x3lym"] [ext_resource type="Script" uid="uid://cbax2lv4pstqk" path="res://logic-scenes/main menu/acessability_settings.gd" id="1_x3lym"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="2_24dtk"]
[sub_resource type="GDScript" id="GDScript_v567h"] [sub_resource type="GDScript" id="GDScript_v567h"]
script/source = "extends CheckBox script/source = "extends CheckBox
@ -9,6 +10,13 @@ func _ready():
grab_focus() grab_focus()
" "
[sub_resource type="GDScript" id="GDScript_72hl5"]
script/source = "extends Button
func _ready() -> void:
pressed.connect(func(): OS.shell_open(\"https://store.steampowered.com/news/app/2515480/view/534358622649452263\"))
"
[node name="Accessibility" type="VBoxContainer"] [node name="Accessibility" type="VBoxContainer"]
script = ExtResource("1_x3lym") script = ExtResource("1_x3lym")
metadata/_tab_index = 0 metadata/_tab_index = 0
@ -16,11 +24,11 @@ metadata/_tab_index = 0
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderLarge" theme_type_variation = &"HeaderLarge"
text = "Accessibility" text = "menu_a11y_title"
[node name="Label4" type="Label" parent="."] [node name="Label4" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
text = "Menu_A11y_disclaimer" text = "menu_a11y_disclaimer"
[node name="Container2" type="VBoxContainer" parent="."] [node name="Container2" type="VBoxContainer" parent="."]
layout_mode = 2 layout_mode = 2
@ -28,37 +36,34 @@ layout_mode = 2
[node name="ReduceMotion" type="CheckBox" parent="Container2"] [node name="ReduceMotion" type="CheckBox" parent="Container2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "reduce motion and flickering" size_flags_horizontal = 0
text = "menu_a11y_motion"
[node name="Screenreader" type="CheckBox" parent="Container2"] [node name="Screenreader" type="CheckBox" parent="Container2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
disabled = true size_flags_horizontal = 0
text = "use Screenreader" text = "use Screenreader"
script = SubResource("GDScript_v567h") script = SubResource("GDScript_v567h")
[node name="margin2" type="MarginContainer" parent="Container2"] [node name="margin2" type="MarginContainer" parent="Container2"]
visible = false
layout_mode = 2 layout_mode = 2
[node name="DisableRendering" type="CheckBox" parent="Container2/margin2"] [node name="DisableRendering" type="CheckBox" parent="Container2/margin2"]
unique_name_in_owner = true unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 0
disabled = true disabled = true
text = "disable video" text = "disable video"
[node name="SimplyifyControls" type="CheckBox" parent="Container2"] [node name="SimplyifyControls" type="CheckBox" parent="Container2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 0
disabled = true disabled = true
text = "simplified Controls" text = "simplified Controls"
[node name="HyperacusticsFilter" type="CheckBox" parent="Container2"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "Applies an audio filter that removes high pitched noises."
text = "Hyperacoustics Filter"
[node name="margin" type="MarginContainer" parent="Container2"] [node name="margin" type="MarginContainer" parent="Container2"]
visible = false visible = false
layout_mode = 2 layout_mode = 2
@ -69,13 +74,20 @@ layout_mode = 2
disabled = true disabled = true
text = "show Navigation Buttons" text = "show Navigation Buttons"
[node name="HyperacusticsFilter" type="CheckBox" parent="Container2"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 0
tooltip_text = "Applies an audio filter that removes high pitched noises."
text = "menu_a11y_hyperacoustics_filter"
[node name="GridContainer" type="GridContainer" parent="Container2"] [node name="GridContainer" type="GridContainer" parent="Container2"]
layout_mode = 2 layout_mode = 2
columns = 3 columns = 3
[node name="Label" type="Label" parent="Container2/GridContainer"] [node name="Label" type="Label" parent="Container2/GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Menu_A11y_fonts" text = "menu_a11y_fonts"
[node name="VSeparator" type="VSeparator" parent="Container2/GridContainer"] [node name="VSeparator" type="VSeparator" parent="Container2/GridContainer"]
custom_minimum_size = Vector2(30, 0) custom_minimum_size = Vector2(30, 0)
@ -99,7 +111,7 @@ popup/item_3/id = 4
[node name="Label2" type="Label" parent="Container2/GridContainer"] [node name="Label2" type="Label" parent="Container2/GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Menu_A11y_ subtitles" text = "menu_a11y_subtitles"
[node name="VSeparator2" type="VSeparator" parent="Container2/GridContainer"] [node name="VSeparator2" type="VSeparator" parent="Container2/GridContainer"]
custom_minimum_size = Vector2(30, 0) custom_minimum_size = Vector2(30, 0)
@ -120,8 +132,9 @@ popup/item_2/text = "closed captions"
popup/item_2/id = 2 popup/item_2/id = 2
[node name="Label3" type="Label" parent="Container2/GridContainer"] [node name="Label3" type="Label" parent="Container2/GridContainer"]
modulate = Color(0.65012825, 0.6501283, 0.65012825, 1)
layout_mode = 2 layout_mode = 2
text = "Menu_A11y_scale" text = "menu_a11y_scale"
[node name="VSeparator3" type="VSeparator" parent="Container2/GridContainer"] [node name="VSeparator3" type="VSeparator" parent="Container2/GridContainer"]
custom_minimum_size = Vector2(30, 0) custom_minimum_size = Vector2(30, 0)
@ -132,10 +145,15 @@ unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_vertical = 4 size_flags_vertical = 4
min_value = 0.5 min_value = 0.5
max_value = 3.0 max_value = 1.5
step = 0.0 step = 0.0
value = 1.0 value = 1.0
editable = false
[node name="Button" type="Button" parent="Container2"]
layout_mode = 2
size_flags_horizontal = 4
text = "menu_a11y_statement"
script = SubResource("GDScript_72hl5")
[node name="navbuttons" type="HSplitContainer" parent="."] [node name="navbuttons" type="HSplitContainer" parent="."]
layout_mode = 2 layout_mode = 2
@ -153,3 +171,12 @@ text = "go back"
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "save and continue" text = "save and continue"
[node name="card" parent="." instance=ExtResource("2_24dtk")]
process_mode = 4
position = Vector2(837, 159)
rotation = 0.105957024
collision_layer = 0
collision_mask = 0
input_pickable = false
text = "I never put in much effort for Homework"

View File

@ -3,6 +3,8 @@ extends VBoxContainer
signal changed signal changed
signal leave_stage signal leave_stage
var has_unsaved_changes:= false
var has_stage:bool = false: var has_stage:bool = false:
set(stage): set(stage):
has_stage = stage has_stage = stage

View File

@ -1,6 +1,7 @@
extends VBoxContainer extends VBoxContainer
signal changed signal changed
var has_unsaved_changes: bool = false
signal leave_stage signal leave_stage
var has_stage:bool = false: var has_stage:bool = false:
@ -25,7 +26,11 @@ func _ready() -> void:
update_ui_from_state() update_ui_from_state()
content_note_box.pressed.connect(func(value): State.show_content_notes = value) content_note_box.pressed.connect(func(value): State.show_content_notes = value)
content_note_box.pressed.connect(changed.emit)
allow_skip_button.pressed.connect(func(value): State.allow_skipping = value) allow_skip_button.pressed.connect(func(value): State.allow_skipping = value)
allow_skip_button.pressed.connect(changed.emit)
changed.connect(func(): has_unsaved_changes = true)
%SaveButton.pressed.connect(_on_exit_button_pressed) %SaveButton.pressed.connect(_on_exit_button_pressed)
%ExpandButton.pressed.connect( %ExpandButton.pressed.connect(
@ -41,6 +46,7 @@ func update_ui_from_state():
func _on_exit_button_pressed() -> void: func _on_exit_button_pressed() -> void:
leave_stage.emit() leave_stage.emit()
State.save_settings() State.save_settings()
has_unsaved_changes = false
State.leave_stage(self) State.leave_stage(self)
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:

View File

@ -1,6 +1,37 @@
[gd_scene load_steps=9 format=3 uid="uid://chal0ioagspx0"] [gd_scene load_steps=22 format=3 uid="uid://chal0ioagspx0"]
[ext_resource type="Script" uid="uid://wybb38po3pbo" path="res://logic-scenes/main menu/content_settings.gd" id="1_wnuvg"] [ext_resource type="Script" uid="uid://wybb38po3pbo" path="res://logic-scenes/main menu/content_settings.gd" id="1_wnuvg"]
[ext_resource type="Script" uid="uid://dbap0gqox0ty1" path="res://addons/markdownlabel/markdownlabel.gd" id="2_b7ja7"]
[ext_resource type="Script" uid="uid://dcx7crs23nf4" path="res://addons/markdownlabel/header_formats/h1_format.gd" id="3_00t14"]
[ext_resource type="Script" uid="uid://d0sin64i4v3op" path="res://addons/markdownlabel/header_formats/h2_format.gd" id="4_336xo"]
[ext_resource type="Script" uid="uid://dlok0dv1tq2bf" path="res://addons/markdownlabel/header_formats/h3_format.gd" id="5_ltaew"]
[ext_resource type="Script" uid="uid://bayuh2vafablg" path="res://addons/markdownlabel/header_formats/h4_format.gd" id="6_j26fy"]
[ext_resource type="Script" uid="uid://dfr1w7u3jgni3" path="res://addons/markdownlabel/header_formats/h5_format.gd" id="7_1chpl"]
[ext_resource type="Script" uid="uid://bsi6dexoofpe6" path="res://addons/markdownlabel/header_formats/h6_format.gd" id="8_vydfk"]
[sub_resource type="Resource" id="Resource_832w5"]
resource_local_to_scene = true
script = ExtResource("3_00t14")
[sub_resource type="Resource" id="Resource_ar11w"]
resource_local_to_scene = true
script = ExtResource("4_336xo")
[sub_resource type="Resource" id="Resource_r5hak"]
resource_local_to_scene = true
script = ExtResource("5_ltaew")
[sub_resource type="Resource" id="Resource_tpe3b"]
resource_local_to_scene = true
script = ExtResource("6_j26fy")
[sub_resource type="Resource" id="Resource_y1yi1"]
resource_local_to_scene = true
script = ExtResource("7_1chpl")
[sub_resource type="Resource" id="Resource_5g2ol"]
resource_local_to_scene = true
script = ExtResource("8_vydfk")
[sub_resource type="Animation" id="Animation_odolw"] [sub_resource type="Animation" id="Animation_odolw"]
length = 0.001 length = 0.001
@ -41,7 +72,7 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 1), "times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(0.392292, 2.63902), "transitions": PackedFloat32Array(0.392292, 2.63902),
"update": 0, "update": 0,
"values": [Vector2(0, 0), Vector2(0, 400)] "values": [Vector2(0, 0), Vector2(0, 512)]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false tracks/1/imported = false
@ -85,32 +116,70 @@ pressed = true
events = [SubResource("InputEventAction_gy6yb")] events = [SubResource("InputEventAction_gy6yb")]
[node name="Content Notes" type="VBoxContainer"] [node name="Content Notes" type="VBoxContainer"]
custom_minimum_size = Vector2(512, 0) custom_minimum_size = Vector2(800, 0)
script = ExtResource("1_wnuvg") script = ExtResource("1_wnuvg")
metadata/_tab_index = 1 metadata/_tab_index = 1
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderLarge" theme_type_variation = &"HeaderLarge"
text = "Content Notes" text = "title_content_notes"
horizontal_alignment = 1
[node name="Label2" type="Label" parent="."] [node name="Label2" type="Label" parent="."]
layout_mode = 2 layout_mode = 2
text = "This Game deals with Heavy Topics." text = "menu_cn_disclaimer"
horizontal_alignment = 1
[node name="HSplitContainer" type="HSplitContainer" parent="."]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="HSplitContainer"]
layout_mode = 2
size_flags_horizontal = 0
[node name="ContentNoteButton" type="CheckBox" parent="HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "menu_cn_enable_tooltip"
text = "menu_cn_enable"
[node name="AllowSkipButton" type="CheckBox" parent="HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "menu_cn_allow_skips_tooltip"
text = "menu_cn_allow_skips"
[node name="ReturnThoughtsButton" type="CheckBox" parent="HSplitContainer/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "menu_cn_allow_returns_tooltip"
text = "menu_cn_allow_returns"
[node name="RichTextLabel2" type="RichTextLabel" parent="HSplitContainer"]
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
bbcode_enabled = true
text = "menu[i]cn[/i]summary"
fit_content = true
script = ExtResource("2_b7ja7")
markdown_text = "menu_cn_summary"
h1 = SubResource("Resource_832w5")
h2 = SubResource("Resource_ar11w")
h3 = SubResource("Resource_r5hak")
h4 = SubResource("Resource_tpe3b")
h5 = SubResource("Resource_y1yi1")
h6 = SubResource("Resource_5g2ol")
metadata/_custom_type_script = "uid://dbap0gqox0ty1"
[node name="ExpandButton" type="Button" parent="."] [node name="ExpandButton" type="Button" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "I would like to know more." text = "menu_cn_learn_more"
[node name="ScrollContainer" type="ScrollContainer" parent="."] [node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 2 layout_mode = 2
follow_focus = true follow_focus = true
scroll_vertical = 50 scroll_vertical = 50
horizontal_scroll_mode = 0 horizontal_scroll_mode = 0
vertical_scroll_mode = 2
[node name="Reveal" type="AnimationPlayer" parent="ScrollContainer"] [node name="Reveal" type="AnimationPlayer" parent="ScrollContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@ -130,7 +199,7 @@ layout_mode = 2
focus_neighbor_bottom = NodePath("../../../../SaveButton") focus_neighbor_bottom = NodePath("../../../../SaveButton")
toggle_mode = true toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6") button_group = SubResource("ButtonGroup_v7ly6")
text = "Is this game for or about me?" text = "menu_cn_warm_title"
script = SubResource("GDScript_rhtho") script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer1"] [node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer1"]
@ -138,16 +207,7 @@ visible = false
custom_minimum_size = Vector2(512, 0) custom_minimum_size = Vector2(512, 0)
layout_mode = 2 layout_mode = 2
bbcode_enabled = true bbcode_enabled = true
text = "[ul] text = "menu_cn_warm"
This game tells one story about one fictional character.
This character was designed to tell an honest and accessible story about identity and trauma.
This is not the game for you if you are looking for escapism.
This is not therapy.
You might feel understood if experiences you've had are close to the characters.
It might help you understand a friend.
It will tell you things a group of peers, that reflected about their similar, but specific experiences, want more people to know about.
This is made by betalars, who has many overlapping experiences with this character. They made sure to consult people, who can speak from their own experiences about subjects, where betalars could not.
[/ul]"
fit_content = true fit_content = true
[node name="VBoxContainer2" type="VBoxContainer" parent="ScrollContainer/Content Notes"] [node name="VBoxContainer2" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
@ -157,15 +217,14 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
toggle_mode = true toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6") button_group = SubResource("ButtonGroup_v7ly6")
text = "What may be difficult about the premise?" text = "menu_cn_harsh_title"
script = SubResource("GDScript_rhtho") script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer2"] [node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer2"]
visible = false
custom_minimum_size = Vector2(512, 0) custom_minimum_size = Vector2(512, 0)
layout_mode = 2 layout_mode = 2
bbcode_enabled = true bbcode_enabled = true
text = "In this game, you will encounter situations that are problematic and will have a negative impact on the Mental Health of the character you are playing as. This game will establish hurtful assumptions this character develops about themselves and you may not resolve all of them right away. You will have some agency, but it is limited by the games narrative and also chance. You are encouraged and will be able to resolve hurtful assumptions later in the game." text = "menu_cn_harsh"
fit_content = true fit_content = true
[node name="VBoxContainer3" type="VBoxContainer" parent="ScrollContainer/Content Notes"] [node name="VBoxContainer3" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
@ -175,7 +234,7 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
toggle_mode = true toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6") button_group = SubResource("ButtonGroup_v7ly6")
text = "What are the game's topics? (Content Notes)" text = "menu_cn_somber_title"
script = SubResource("GDScript_rhtho") script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer3"] [node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer3"]
@ -183,42 +242,28 @@ visible = false
custom_minimum_size = Vector2(512, 0) custom_minimum_size = Vector2(512, 0)
layout_mode = 2 layout_mode = 2
bbcode_enabled = true bbcode_enabled = true
text = "This game discusses Mental Health and Sex-Positivity. It also includes a character, who is trans but you will get to know them while they are unaware about their trans identity going by their birthname. Besides social Transistioning, this game also deals with topics including Mysoginy, Sanism, Body Issues, Eating Disorders, Bullying, Martial Arts, Relationships and Rape, but not trough physical violence. Comic violence is mentioned while talking about a fictional franchise in universe." text = "menu_cn_somber"
fit_content = true fit_content = true
[node name="VBoxContainer4" type="VBoxContainer" parent="ScrollContainer/Content Notes"] [node name="VBoxContainer4" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
visible = false
layout_mode = 2 layout_mode = 2
[node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer4"] [node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer4"]
layout_mode = 2 layout_mode = 2
toggle_mode = true toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6") button_group = SubResource("ButtonGroup_v7ly6")
text = "Mental Health Accessibility Options" text = "menu_cn_details"
script = SubResource("GDScript_rhtho") script = SubResource("GDScript_rhtho")
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer/Content Notes/VBoxContainer4"] [node name="RichTextLabel2" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer4"]
layout_mode = 2 visible = false
[node name="RichTextLabel2" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer4/VBoxContainer"]
custom_minimum_size = Vector2(512, 0) custom_minimum_size = Vector2(512, 0)
layout_mode = 2 layout_mode = 2
bbcode_enabled = true bbcode_enabled = true
text = "[ul] text = "menu_cn_details"
You can always Pause using Escape or Spacebar
You can always choose to just get a neutral summary of scenes or skip them entirely
[/ul]"
fit_content = true fit_content = true
[node name="ContentNoteButton" type="CheckBox" parent="ScrollContainer/Content Notes/VBoxContainer4/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "show content notes during the game"
[node name="AllowSkipButton" type="CheckBox" parent="ScrollContainer/Content Notes/VBoxContainer4/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "allow me to skip scenes"
[node name="SaveButton" type="Button" parent="."] [node name="SaveButton" type="Button" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2

View File

@ -7,25 +7,29 @@ var has_stage:bool = false:
set(stage): set(stage):
has_stage = stage has_stage = stage
if is_node_ready() and has_stage: if is_node_ready() and has_stage:
y_switch.grab_focus() y_switch_gamepad.grab_focus()
var current_music_decay:float = 0 var current_music_decay:float = 0
@onready var y_switch: CheckBox = %InvertY @onready var y_switch_gamepad: CheckBox = %InvertYGamepad
@onready var y_switch_mouse: CheckBox = %InvertYMouse
@onready var input_sensitivity_slider: HSlider = %InputSensitivitySlider @onready var input_sensitivity_slider: HSlider = %InputSensitivitySlider
@onready var fov_slider: HSlider = %FOVSlider
@onready var stream_overlay_picker: OptionButton = %StreamOverlayPicker @onready var stream_overlay_picker: OptionButton = %StreamOverlayPicker
func _ready() -> void: func _ready() -> void:
update_ui_from_state() update_ui_from_state()
y_switch.toggled.connect(func(value): State.inverty_y_axis = value) y_switch_gamepad.toggled.connect(func(value): State.inverty_y_axis = value)
y_switch_mouse.toggled.connect(func(value): State.inverty_y_mouse = value)
input_sensitivity_slider.value_changed.connect(func(value): State.input_sensitivity = value) input_sensitivity_slider.value_changed.connect(func(value): State.input_sensitivity = value)
stream_overlay_picker.item_selected.connect(func(value): State.stream_overlay = value) stream_overlay_picker.item_selected.connect(func(value): State.stream_overlay = value)
fov_slider.value_changed.connect(func(value): State.input_sensitivity = value)
%SaveButton.pressed.connect(_on_exit_button_pressed) %SaveButton.pressed.connect(_on_exit_button_pressed)
func update_ui_from_state(): func update_ui_from_state():
y_switch.button_pressed = State.inverty_y_axis y_switch_gamepad.button_pressed = State.inverty_y_axis
input_sensitivity_slider.value = State.input_sensitivity input_sensitivity_slider.value = State.input_sensitivity
stream_overlay_picker.select(State.stream_overlay_position) stream_overlay_picker.select(State.stream_overlay_position)

View File

@ -27,11 +27,23 @@ text = "Gameplay Settings"
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2 layout_mode = 2
[node name="InvertY" type="CheckBox" parent="VBoxContainer"] [node name="InvertYGamepad" type="CheckBox" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
tooltip_text = "All Game Music is safe to stream." tooltip_text = "gameplay_invert_y_tooltop"
text = "invert Y (gamepad)" text = "gameplay_invert_y_gamepad"
[node name="InvertYMouse" type="CheckBox" parent="VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "gameplay_invert_y_tooltop"
text = "gameplay_invert_y_mouse"
[node name="SimplifyControls" type="CheckBox" parent="VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "gameplay_simplify_tooltop"
text = "gameplay_simplified"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"] [node name="GridContainer" type="GridContainer" parent="VBoxContainer"]
layout_mode = 2 layout_mode = 2
@ -51,6 +63,21 @@ step = 0.05
value = 0.5 value = 0.5
ticks_on_borders = true ticks_on_borders = true
[node name="Label2" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Field of View"
[node name="FOVSlider" type="HSlider" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
min_value = 40.0
max_value = 110.0
step = 0.05
value = 75.0
ticks_on_borders = true
[node name="Label3" type="Label" parent="VBoxContainer/GridContainer"] [node name="Label3" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Stream Overlay" text = "Stream Overlay"

View File

@ -4,13 +4,24 @@ var has_stage: bool = false:
set(value): set(value):
has_stage = value has_stage = value
if is_node_ready(): if is_node_ready():
if has_stage: new_game_button.grab_focus() if save_game_handle.get_most_recent_save().current_room == 0:
new_game_button.disabled = not has_stage continue_button.visible = false
continue_button.disabled = not has_stage or save_game_handle.get_most_recent_save().current_room == 0 continue_button.disabled = true
load_game_button.disabled = not has_stage or not save_game_handle.has_existing_saves() new_game_button.theme_type_variation = "H1Button"
settings_button.disabled = not has_stage else:
credits_button.disabled = not has_stage continue_button.visible = true
quit_button.disabled = not has_stage continue_button.disabled = not has_stage
new_game_button.theme_type_variation = ""
load_game_button.disabled = not save_game_handle.has_existing_saves()
for child: Control in $PanelContainer.get_children():
child.focus_mode = FOCUS_ALL if has_stage else FOCUS_NONE
child.modulate = Color.WHITE if has_stage else Color.WEB_GRAY
child.mouse_filter = Control.MOUSE_FILTER_STOP if has_stage else Control.MOUSE_FILTER_IGNORE
if has_stage:
if continue_button.visible:
continue_button.grab_focus()
else:
new_game_button.grab_focus()
signal start_game(savegame: SaveGame) signal start_game(savegame: SaveGame)
signal open_settings(new_game: bool) signal open_settings(new_game: bool)
@ -19,7 +30,7 @@ signal roll_credits
@onready var new_game_button: Button = $PanelContainer/NewGameButton @onready var new_game_button: Button = $PanelContainer/NewGameButton
@onready var continue_button: Button = $PanelContainer/ContinueGameButton @onready var continue_button: Button = $PanelContainer/ContinueGameButton
@onready var load_game_button: Button = $PanelContainer/LoadGameButton @onready var load_game_button: Button = $PanelContainer/LoadGameButton
@onready var settings_button: MenuButton = $PanelContainer/SettingsButton @onready var settings_button: Button = $PanelContainer/SettingsButton
@onready var settings_popup: SettingsPopup = %SettingsPopup @onready var settings_popup: SettingsPopup = %SettingsPopup
@onready var credits_button: Button = $PanelContainer/CreditsButton @onready var credits_button: Button = $PanelContainer/CreditsButton
@onready var quit_button: Button = $PanelContainer/QuitButton @onready var quit_button: Button = $PanelContainer/QuitButton
@ -34,12 +45,15 @@ var await_new_game: bool = false
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
save_game_handle.picked.connect(_on_save_picked) save_game_handle.picked.connect(_on_save_picked)
continue_button.disabled = save_game_handle.get_most_recent_save().current_room == 0 if save_game_handle.get_most_recent_save().current_room == 0:
continue_button.disabled = true
continue_button.visible = false
new_game_button.theme_type_variation = "H1Button"
continue_button.pressed.connect(func(): start_game.emit(save_game_handle.get_most_recent_save())) continue_button.pressed.connect(func(): start_game.emit(save_game_handle.get_most_recent_save()))
new_game_button.pressed.connect(func(): save_game_handle.pick_save_slot(true)) new_game_button.pressed.connect(func(): save_game_handle.pick_save_slot(true))
load_game_button.pressed.connect(func(): save_game_handle.pick_save_slot(false)) load_game_button.pressed.connect(func(): save_game_handle.pick_save_slot(false))
load_game_button.disabled = not save_game_handle.has_existing_saves() load_game_button.disabled = not save_game_handle.has_existing_saves()
settings_button.get_popup().index_pressed.connect(settings_popup.show_settings) settings_button.pressed.connect(settings_popup.show_settings)
quit_button.pressed.connect(get_tree().quit) quit_button.pressed.connect(get_tree().quit)
State.take_stage(self) State.take_stage(self)

View File

@ -9,7 +9,6 @@ var has_stage:bool = false:
if has_stage: if has_stage:
steam_optout.grab_focus() steam_optout.grab_focus()
var current_music_decay:float = 0 var current_music_decay:float = 0
@onready var steam_optout: CheckBox = %OptOutSteam @onready var steam_optout: CheckBox = %OptOutSteam

View File

@ -3,6 +3,7 @@ extends VBoxContainer
# This is a hack so values changing to the default to not create a recursion. # This is a hack so values changing to the default to not create a recursion.
signal changed signal changed
signal leave_stage signal leave_stage
var has_unsaved_changes:= false
var has_stage:bool = false: var has_stage:bool = false:
set(stage): set(stage):
@ -49,6 +50,12 @@ var fps_enabled: bool:
@onready var fps_selector: SpinBox = %MaxFps @onready var fps_selector: SpinBox = %MaxFps
@export var enable_hdr: bool = false:
set(value):
enable_hdr = value
if not ignore_changes: changed.emit()
@onready var hdr_selector: SpinBox = %MaxFps
@export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3: @export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3:
set(value): set(value):
lighting_quality = value lighting_quality = value
@ -186,8 +193,11 @@ func _on_exit_button_pressed() -> void:
func _on_confirm_button_pressed() -> void: func _on_confirm_button_pressed() -> void:
ProjectSettings.set_setting("display/window/size/mode", window_mode) ProjectSettings.set_setting("display/window/size/mode", window_mode)
DisplayServer.window_set_mode(window_mode)
ProjectSettings.set_setting("rendering/scaling_3d/scale", render_scale) ProjectSettings.set_setting("rendering/scaling_3d/scale", render_scale)
RenderingServer.viewport_set_scaling_3d_scale(get_tree().root.get_viewport_rid(), render_scale)
ProjectSettings.set_setting("rendering/scaling_3d/mode", upscale_mode) ProjectSettings.set_setting("rendering/scaling_3d/mode", upscale_mode)
RenderingServer.viewport_set_scaling_3d_scale(get_tree().root.get_viewport_rid(), upscale_mode)
ProjectSettings.set_setting("application/run/max_fps", max_fps if fps_enabled else 0) ProjectSettings.set_setting("application/run/max_fps", max_fps if fps_enabled else 0)
match lighting_quality: match lighting_quality:
0: 0:

View File

@ -208,6 +208,25 @@ text = "Graphic Fidelity"
layout_mode = 2 layout_mode = 2
[node name="Label4" type="Label" parent="GridContainer"] [node name="Label4" type="Label" parent="GridContainer"]
visible = false
layout_mode = 2
text = "video_hdr"
[node name="EnableHDR" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
tooltip_text = "hdr_tooltip \"HDR increases the vibrance of colors for a more immersive experience. It is automatically enabled if your device supports it. If you cannot manually HDR, your device may not be supported. You can manually disable HDR if you prefer to play without."
selected = 0
item_count = 3
popup/item_0/text = "hdr_automatic"
popup/item_0/id = 0
popup/item_1/text = "hdr_enabled"
popup/item_1/id = 1
popup/item_2/text = "hdr_disabled"
popup/item_2/id = 2
[node name="Label5" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Lighting Quality" text = "Lighting Quality"

View File

@ -180,6 +180,9 @@ func _handle_rotation(delta:float):
var input_speed = Vector2( Input.get_action_strength("look_right")-Input.get_action_strength("look_left"), Input.get_action_strength("look_up")-Input.get_action_strength("look_down")) * gamepad_response var input_speed = Vector2( Input.get_action_strength("look_right")-Input.get_action_strength("look_left"), Input.get_action_strength("look_up")-Input.get_action_strength("look_down")) * gamepad_response
# secretly, inverted y axis is the default
if not State.inverty_y_axis: input_speed *= Vector2(1, -1)
if current_mouse_rotation.length()>0: if current_mouse_rotation.length()>0:
input_speed = current_mouse_rotation input_speed = current_mouse_rotation
current_mouse_rotation = Vector2.ZERO current_mouse_rotation = Vector2.ZERO
@ -191,8 +194,9 @@ func _handle_rotation(delta:float):
elif rotation_speed.y < 0 and pitch.rotation_degrees.x > 0 : elif rotation_speed.y < 0 and pitch.rotation_degrees.x > 0 :
rotation_speed.y *= 1-pow(pitch.rotation_degrees.x/max_angle, 4) rotation_speed.y *= 1-pow(pitch.rotation_degrees.x/max_angle, 4)
yaw.rotate_y(deg_to_rad(-rotation_speed.x * delta * mouse_sensitivity.x))
pitch.rotate_x(deg_to_rad(-rotation_speed.y * delta * mouse_sensitivity.y)) yaw.rotate_y(deg_to_rad(-rotation_speed.x * delta * mouse_sensitivity.x * State.input_sensitivity))
pitch.rotate_x(deg_to_rad(-rotation_speed.y * delta * mouse_sensitivity.y * State.input_sensitivity))
func _handle_jitter(delta): func _handle_jitter(delta):
loc_noise_spot += Vector3(delta * camera_jitter_speed * location_jitter_speed) loc_noise_spot += Vector3(delta * camera_jitter_speed * location_jitter_speed)

View File

@ -1,14 +1,16 @@
[gd_scene load_steps=9 format=3 uid="uid://gldtxysavetf"] [gd_scene load_steps=7 format=3 uid="uid://gldtxysavetf"]
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_8giso"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_8giso"]
[ext_resource type="Theme" uid="uid://dla4kae5kbwdh" path="res://logic-scenes/themes/system.theme" id="1_ot7jp"] [ext_resource type="Script" uid="uid://0tb763w0vfv7" path="res://tab_container.gd" id="2_lw8rc"]
[ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://logic-scenes/main menu/acessability_settings.tscn" id="3_2p4fc"]
[ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://logic-scenes/main menu/content_settings.tscn" id="3_fso6q"] [ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://logic-scenes/main menu/content_settings.tscn" id="3_fso6q"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_s5ssh"] [ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_s5ssh"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="5_7c77g"]
[sub_resource type="GDScript" id="GDScript_a78qq"] [sub_resource type="GDScript" id="GDScript_a78qq"]
script/source = "extends Panel script/source = "extends Panel
@export var is_in_startup: bool
@onready var show_navigation_buttons = $\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui\" @onready var show_navigation_buttons = $\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui\"
func _ready(): func _ready():
@ -17,7 +19,8 @@ func _ready():
TranslationServer.set_locale(\"de\") TranslationServer.set_locale(\"de\")
func starting(): func starting():
$\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next\".grab_focus() pass
#$\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next\".grab_focus()
func _on_reduce_motion_toggled(toggled_on): func _on_reduce_motion_toggled(toggled_on):
State.reduce_motion = toggled_on State.reduce_motion = toggled_on
@ -104,78 +107,12 @@ func hide():
self.visible = false self.visible = false
" "
[sub_resource type="GDScript" id="GDScript_ia432"]
script/source = "extends TabContainer
var focus_list: Array
#FIXME when accessability setting is implemented properly
@onready var disable_rendering = false
@onready var simplified_controls = false
func _ready():
for child in get_children():
focus_list.append(_find_selectable_in(child))
func _find_selectable_in(parent:Control):
if parent.focus_mode != FOCUS_NONE:
return parent
if parent.get_child_count() == 0:
return self
else:
for child in parent.get_children():
var ret = _find_selectable_in(child)
if not ret == self:
return ret
func _unhandled_input(event):
if event.is_action_type():
if event.is_action_pressed(\"ui_left\"): previous()
elif event.is_action_pressed(\"ui_right\"): next()
func next():
if current_tab < get_tab_count()-1:
if !Input.is_action_just_released(\"mouse_left\"):
if not get_viewport().gui_get_focus_owner() == null:
focus_list[current_tab] = get_viewport().gui_get_focus_owner()
current_tab += 1
focus_list[current_tab].grab_focus()
else:
current_tab += 1
func previous():
if current_tab > 0:
if !Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
if not get_viewport().gui_get_focus_owner() == null:
focus_list[current_tab] = get_viewport().gui_get_focus_owner()
current_tab -= 1
focus_list[current_tab].grab_focus()
else:
current_tab -= 1
func _on_screenreader_toggled(button_pressed):
State.screen_reader = button_pressed # this is how you reach the global state
disable_rendering.disabled = not button_pressed # if screenreader was toggled - disabled = false
simplified_controls.button_pressed = button_pressed
State.simplified_navigation = button_pressed
"
[sub_resource type="GDScript" id="GDScript_v567h"]
script/source = "extends CheckBox
func _ready():
grab_focus()
"
[node name="Startup Menu" type="Panel"] [node name="Startup Menu" type="Panel"]
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme = ExtResource("1_ot7jp")
script = SubResource("GDScript_a78qq") script = SubResource("GDScript_a78qq")
[node name="Label" type="Label" parent="."] [node name="Label" type="Label" parent="."]
@ -188,6 +125,7 @@ offset_top = 23.0
offset_right = 283.5 offset_right = 283.5
offset_bottom = 61.0 offset_bottom = 61.0
grow_horizontal = 2 grow_horizontal = 2
theme_type_variation = &"HeaderLarge"
text = "Accessibility, Disclaimers and Content Notes" text = "Accessibility, Disclaimers and Content Notes"
horizontal_alignment = 1 horizontal_alignment = 1
@ -204,160 +142,27 @@ layout_mode = 2
[node name="StartFrame" type="TextureRect" parent="CenterContainer/PanelContainer"] [node name="StartFrame" type="TextureRect" parent="CenterContainer/PanelContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 8
texture = ExtResource("1_8giso") texture = ExtResource("1_8giso")
expand_mode = 2 expand_mode = 2
stretch_mode = 4 stretch_mode = 4
[node name="Panel" type="PanelContainer" parent="CenterContainer/PanelContainer/StartFrame"]
show_behind_parent = true
layout_mode = 2
offset_left = 199.0
offset_top = -112.0
offset_right = 913.0
offset_bottom = 602.0
rotation = 0.459022
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"] [node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer"]
layout_mode = 2 layout_mode = 2
[node name="TabContainer" type="TabContainer" parent="CenterContainer/PanelContainer/VBoxContainer"] [node name="TabContainer" type="TabContainer" parent="CenterContainer/PanelContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
current_tab = 0 current_tab = 1
tabs_visible = false tabs_visible = false
use_hidden_tabs_for_min_size = true use_hidden_tabs_for_min_size = true
script = SubResource("GDScript_ia432") script = ExtResource("2_lw8rc")
[node name="physical Accessibility" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"] [node name="Accessibility" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer" instance=ExtResource("3_2p4fc")]
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 0 is_in_beginning = true
[node name="Label" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Accessibility"
[node name="Label4" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
text = "Greyed-out items do not work yet."
[node name="Container2" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
[node name="reduce motion" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
text = "reduce motion"
[node name="Screenreader" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
disabled = true
text = "use Screenreader"
script = SubResource("GDScript_v567h")
[node name="margin2" type="MarginContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
[node name="disable rendering" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2"]
layout_mode = 2
disabled = true
text = "disable video"
[node name="simplified controls" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
disabled = true
text = "simplified Controls"
[node name="margin" type="MarginContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
[node name="show nav ui" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin"]
layout_mode = 2
disabled = true
text = "show Navigation Buttons"
[node name="GridContainer" type="GridContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
columns = 3
[node name="Label" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
text = "Font-Style:"
[node name="VSeparator" type="VSeparator" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(30, 60)
layout_mode = 2
[node name="font settings" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
size_flags_vertical = 4
selected = 1
item_count = 5
popup/item_0/text = "messy handwriting"
popup/item_0/id = 0
popup/item_0/disabled = true
popup/item_1/text = "easy handwriting"
popup/item_1/id = 1
popup/item_2/text = "serif"
popup/item_2/id = 2
popup/item_3/text = "hyperlegible sans"
popup/item_3/id = 3
popup/item_4/text = "system font"
popup/item_4/id = 4
[node name="Label2" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
text = "Subtitles:"
[node name="VSeparator2" type="VSeparator" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(30, 60)
layout_mode = 2
[node name="ItemList2" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
size_flags_vertical = 4
disabled = true
selected = 1
item_count = 3
popup/item_0/text = "none"
popup/item_0/id = 0
popup/item_1/text = "spoken text"
popup/item_1/id = 1
popup/item_2/text = "closed captions"
popup/item_2/id = 2
[node name="Label3" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
text = "UI scale:"
[node name="VSeparator3" type="VSeparator" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(30, 60)
layout_mode = 2
[node name="HSlider" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(0, 60)
layout_mode = 2
min_value = 0.5
max_value = 3.0
step = 0.0
value = 1.0
editable = false
[node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 10
dragger_visibility = 1
[node name="Next" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons"]
layout_mode = 2
text = "okay"
[node name="previous" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons"]
layout_mode = 2
disabled = true
text = "go back"
[node name="Content Notes" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer" instance=ExtResource("3_fso6q")] [node name="Content Notes" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer" instance=ExtResource("3_fso6q")]
visible = false
layout_mode = 2 layout_mode = 2
[node name="Managing Expectations" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"] [node name="Managing Expectations" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"]
@ -387,18 +192,18 @@ size_flags_vertical = 10
[node name="Next" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons"] [node name="Next" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons"]
layout_mode = 2 layout_mode = 2
text = "okay" text = "menu_okay"
[node name="previous" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons"] [node name="previous" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons"]
layout_mode = 2 layout_mode = 2
text = "go back" text = "menu_back"
[node name="StartBottom" type="TextureRect" parent="CenterContainer/PanelContainer/VBoxContainer"] [node name="StartBottom" type="TextureRect" parent="CenterContainer/PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 32) custom_minimum_size = Vector2(0, 32)
layout_mode = 2 layout_mode = 2
texture = ExtResource("3_s5ssh") texture = ExtResource("3_s5ssh")
expand_mode = 2 expand_mode = 2
stretch_mode = 4 stretch_mode = 5
[node name="continue" type="Button" parent="."] [node name="continue" type="Button" parent="."]
layout_mode = 1 layout_mode = 1
@ -415,10 +220,9 @@ grow_horizontal = 2
grow_vertical = 0 grow_vertical = 0
size_flags_horizontal = 4 size_flags_horizontal = 4
size_flags_vertical = 8 size_flags_vertical = 8
text = "skip all" text = "menu_skip_all"
[node name="CheckBox" type="CheckBox" parent="continue"] [node name="CheckBox" type="CheckBox" parent="continue"]
visible = false
layout_mode = 1 layout_mode = 1
anchors_preset = 8 anchors_preset = 8
anchor_left = 0.5 anchor_left = 0.5
@ -433,23 +237,6 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
text = "I stream this game, please show content notes." text = "I stream this game, please show content notes."
[node name="card" parent="." instance=ExtResource("5_7c77g")]
process_mode = 4
position = Vector2(1491, 598)
collision_layer = 0
collision_mask = 0
input_pickable = false
text = "I never put in much effort for Homework"
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/reduce motion" to="." method="_on_reduce_motion_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/Screenreader" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="_on_screenreader_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2/disable rendering" to="." method="_on_disable_rendering_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/simplified controls" to="." method="_on_simplified_controls_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui" to="." method="_on_show_nav_ui_toggled"]
[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/font settings" to="." method="_on_font_style_selected"]
[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList2" to="." method="_on_subtitle_option_selected"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/Next" to="." method="hide"] [connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/Next" to="." method="hide"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"] [connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="continue" to="." method="hide"] [connection signal="pressed" from="continue" to="." method="hide"]

View File

@ -41,6 +41,8 @@ func _ready():
currently_loading_room = get_room_path_from_id(main_menu.save_game_handle.get_most_recent_save().current_room) currently_loading_room = get_room_path_from_id(main_menu.save_game_handle.get_most_recent_save().current_room)
main_menu.start_game.connect(load_save) main_menu.start_game.connect(load_save)
get_tree().tree_process_mode_changed.connect(pause_mode_changed) get_tree().tree_process_mode_changed.connect(pause_mode_changed)
await get_tree().process_frame
State.pass_stage_to(main_menu)
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
if currently_loading_room != "": if currently_loading_room != "":

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=67 format=3 uid="uid://befxf8uruwnrl"] [gd_scene load_steps=68 format=3 uid="uid://befxf8uruwnrl"]
[ext_resource type="Script" uid="uid://k8yppfbkq0xv" path="res://main.gd" id="1_rqkns"] [ext_resource type="Script" uid="uid://k8yppfbkq0xv" path="res://main.gd" id="1_rqkns"]
[ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"] [ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"]
@ -11,14 +11,14 @@
[ext_resource type="Script" uid="uid://0h0lrkntx0uh" path="res://logic-scenes/main menu/pause_menu.gd" id="9_ihfph"] [ext_resource type="Script" uid="uid://0h0lrkntx0uh" path="res://logic-scenes/main menu/pause_menu.gd" id="9_ihfph"]
[ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="9_l7v4b"] [ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="9_l7v4b"]
[ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="10_pipov"] [ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="10_pipov"]
[ext_resource type="Script" uid="uid://dr7xhgd53cvmf" path="res://addons/markdownlabel/markdownlabel.gd" id="12_074og"] [ext_resource type="Script" uid="uid://dbap0gqox0ty1" path="res://addons/markdownlabel/markdownlabel.gd" id="12_074og"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="12_cegan"] [ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="12_cegan"]
[ext_resource type="Script" uid="uid://2nt1uho85s8f" path="res://addons/markdownlabel/header_formats/h1_format.gd" id="13_cegan"] [ext_resource type="Script" uid="uid://dcx7crs23nf4" path="res://addons/markdownlabel/header_formats/h1_format.gd" id="14_cegan"]
[ext_resource type="Script" uid="uid://c0sorgri1jvgp" path="res://addons/markdownlabel/header_formats/h2_format.gd" id="14_82xsv"] [ext_resource type="Script" uid="uid://d0sin64i4v3op" path="res://addons/markdownlabel/header_formats/h2_format.gd" id="15_82xsv"]
[ext_resource type="Script" uid="uid://bxp6pmnguqayg" path="res://addons/markdownlabel/header_formats/h3_format.gd" id="15_getpj"] [ext_resource type="Script" uid="uid://dlok0dv1tq2bf" path="res://addons/markdownlabel/header_formats/h3_format.gd" id="16_getpj"]
[ext_resource type="Script" uid="uid://cevgeq5lemi6u" path="res://addons/markdownlabel/header_formats/h4_format.gd" id="16_ryguw"] [ext_resource type="Script" uid="uid://bayuh2vafablg" path="res://addons/markdownlabel/header_formats/h4_format.gd" id="17_ryguw"]
[ext_resource type="Script" uid="uid://be2s7l2uixmfl" path="res://addons/markdownlabel/header_formats/h5_format.gd" id="17_d13ii"] [ext_resource type="Script" uid="uid://dfr1w7u3jgni3" path="res://addons/markdownlabel/header_formats/h5_format.gd" id="18_d13ii"]
[ext_resource type="Script" uid="uid://ladew4bsypon" path="res://addons/markdownlabel/header_formats/h6_format.gd" id="18_1u8w0"] [ext_resource type="Script" uid="uid://bsi6dexoofpe6" path="res://addons/markdownlabel/header_formats/h6_format.gd" id="19_1u8w0"]
[sub_resource type="GDScript" id="GDScript_8sq0u"] [sub_resource type="GDScript" id="GDScript_8sq0u"]
script/source = "extends Label script/source = "extends Label
@ -27,6 +27,33 @@ func _process(_delta):
text = str(Engine.get_frames_per_second()) text = str(Engine.get_frames_per_second())
" "
[sub_resource type="GDScript" id="GDScript_cegan"]
script/source = "extends Label
@export var animation_speed: float = 0.2
var _base_text: String
func _ready() -> void:
_base_text = text
var _accumulate_delta: float = 0
var _frame: int = 0
func _process(delta: float) -> void:
_accumulate_delta += delta
if _accumulate_delta > animation_speed:
_frame += 1
_accumulate_delta = 0
var dots: String
match _frame % 4:
1: dots = \".\"
2: dots = \"..\"
3: dots = \"...\"
_: dots = \"\"
text = \"%s %s\" % [TranslationServer.translate(_base_text), dots]
"
[sub_resource type="Animation" id="Animation_y6s08"] [sub_resource type="Animation" id="Animation_y6s08"]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
@ -233,6 +260,42 @@ tracks/16/keys = {
"update": 0, "update": 0,
"values": [Vector2(0, 220)] "values": [Vector2(0, 220)]
} }
tracks/17/type = "value"
tracks/17/imported = false
tracks/17/enabled = true
tracks/17/path = NodePath("../LoadingLabel:visible")
tracks/17/interp = 1
tracks/17/loop_wrap = true
tracks/17/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/18/type = "value"
tracks/18/imported = false
tracks/18/enabled = true
tracks/18/path = NodePath("../LoadingLabel:modulate")
tracks/18/interp = 1
tracks/18/loop_wrap = true
tracks/18/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/19/type = "value"
tracks/19/imported = false
tracks/19/enabled = true
tracks/19/path = NodePath("../LoadingLabel:position")
tracks/19/interp = 1
tracks/19/loop_wrap = true
tracks/19/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(100, -37)]
}
[sub_resource type="Animation" id="Animation_sfr6l"] [sub_resource type="Animation" id="Animation_sfr6l"]
resource_name = "credits_roll" resource_name = "credits_roll"
@ -504,6 +567,42 @@ tracks/4/keys = {
"update": 1, "update": 1,
"values": [true] "values": [true]
} }
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../LoadingLabel:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../LoadingLabel:modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(1.1666666, 1.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../LoadingLabel:position")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.93333334, 1.5),
"transitions": PackedFloat32Array(1.6788809, 1),
"update": 0,
"values": [Vector2(170, -37), Vector2(100, -37)]
}
[sub_resource type="Animation" id="Animation_em5qx"] [sub_resource type="Animation" id="Animation_em5qx"]
resource_name = "loading_game" resource_name = "loading_game"
@ -593,6 +692,42 @@ tracks/6/keys = {
"update": 1, "update": 1,
"values": [true] "values": [true]
} }
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../LoadingLabel:visible")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../LoadingLabel:modulate")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0.06666672, 1.1666666),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../LoadingLabel:position")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0.93333334),
"transitions": PackedFloat32Array(1.6788809),
"update": 0,
"values": [Vector2(170, -37)]
}
[sub_resource type="Animation" id="Animation_k667j"] [sub_resource type="Animation" id="Animation_k667j"]
resource_name = "loading_menu" resource_name = "loading_menu"
@ -670,6 +805,42 @@ tracks/5/keys = {
"update": 1, "update": 1,
"values": [true] "values": [true]
} }
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../LoadingLabel:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../LoadingLabel:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.06666672, 1.1666666),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../LoadingLabel:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0.93333334),
"transitions": PackedFloat32Array(1.6788809),
"update": 0,
"values": [Vector2(170, -37)]
}
[sub_resource type="Animation" id="Animation_s5m6i"] [sub_resource type="Animation" id="Animation_s5m6i"]
resource_name = "reveal_pause_menu" resource_name = "reveal_pause_menu"
@ -736,7 +907,7 @@ tracks/4/keys = {
[sub_resource type="Animation" id="Animation_q7d2t"] [sub_resource type="Animation" id="Animation_q7d2t"]
resource_name = "start_game" resource_name = "start_game"
length = 0.001 length = 0.5
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
@ -761,6 +932,18 @@ tracks/1/keys = {
"update": 0, "update": 0,
"values": [Color(1, 1, 1, 0)] "values": [Color(1, 1, 1, 0)]
} }
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("%Main Menu:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.5),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_hv4pr"] [sub_resource type="Animation" id="Animation_hv4pr"]
resource_name = "transition_load_game" resource_name = "transition_load_game"
@ -950,7 +1133,7 @@ states/reveal_pause_menu/position = Vector2(783.91, -112.734)
states/start_game/node = SubResource("AnimationNodeAnimation_5umfs") states/start_game/node = SubResource("AnimationNodeAnimation_5umfs")
states/start_game/position = Vector2(698, 32) states/start_game/position = Vector2(698, 32)
transitions = ["Start", "init", SubResource("AnimationNodeStateMachineTransition_dxdg4"), "init", "loading", SubResource("AnimationNodeStateMachineTransition_0hpxy"), "loading", "loading_done", SubResource("AnimationNodeStateMachineTransition_ipapo"), "loading_done", "start_game", SubResource("AnimationNodeStateMachineTransition_0t1lp"), "start_game", "init", SubResource("AnimationNodeStateMachineTransition_66nmg"), "loading_done", "load_savegame", SubResource("AnimationNodeStateMachineTransition_6b86u"), "load_savegame", "loading_game", SubResource("AnimationNodeStateMachineTransition_y626i"), "loading_game", "start_game", SubResource("AnimationNodeStateMachineTransition_52bss"), "start_game", "credits_roll", SubResource("AnimationNodeStateMachineTransition_x8oth"), "credits_roll", "loading_done", SubResource("AnimationNodeStateMachineTransition_5ge3a"), "loading_done", "credits_roll", SubResource("AnimationNodeStateMachineTransition_44pd3"), "start_game", "reveal_pause_menu", SubResource("AnimationNodeStateMachineTransition_pc6pe"), "reveal_pause_menu", "hide_pause_menu", SubResource("AnimationNodeStateMachineTransition_dx61n"), "hide_pause_menu", "start_game", SubResource("AnimationNodeStateMachineTransition_lp1dx"), "hide_pause_menu", "init", SubResource("AnimationNodeStateMachineTransition_mqlnh")] transitions = ["Start", "init", SubResource("AnimationNodeStateMachineTransition_dxdg4"), "init", "loading", SubResource("AnimationNodeStateMachineTransition_0hpxy"), "loading", "loading_done", SubResource("AnimationNodeStateMachineTransition_ipapo"), "loading_done", "start_game", SubResource("AnimationNodeStateMachineTransition_0t1lp"), "start_game", "init", SubResource("AnimationNodeStateMachineTransition_66nmg"), "loading_done", "load_savegame", SubResource("AnimationNodeStateMachineTransition_6b86u"), "load_savegame", "loading_game", SubResource("AnimationNodeStateMachineTransition_y626i"), "loading_game", "start_game", SubResource("AnimationNodeStateMachineTransition_52bss"), "start_game", "credits_roll", SubResource("AnimationNodeStateMachineTransition_x8oth"), "credits_roll", "loading_done", SubResource("AnimationNodeStateMachineTransition_5ge3a"), "loading_done", "credits_roll", SubResource("AnimationNodeStateMachineTransition_44pd3"), "start_game", "reveal_pause_menu", SubResource("AnimationNodeStateMachineTransition_pc6pe"), "reveal_pause_menu", "hide_pause_menu", SubResource("AnimationNodeStateMachineTransition_dx61n"), "hide_pause_menu", "start_game", SubResource("AnimationNodeStateMachineTransition_lp1dx"), "hide_pause_menu", "init", SubResource("AnimationNodeStateMachineTransition_mqlnh")]
graph_offset = Vector2(-596.25, -100.734) graph_offset = Vector2(-524.25, -260.734)
[sub_resource type="Shader" id="Shader_cegan"] [sub_resource type="Shader" id="Shader_cegan"]
code = "shader_type canvas_item; code = "shader_type canvas_item;
@ -1018,63 +1201,27 @@ fill_to = Vector2(1.3, -0.3)
[sub_resource type="Resource" id="Resource_0odxb"] [sub_resource type="Resource" id="Resource_0odxb"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("13_cegan") script = ExtResource("14_cegan")
font_size = 2.285
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[sub_resource type="Resource" id="Resource_lswn8"] [sub_resource type="Resource" id="Resource_lswn8"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("14_82xsv") script = ExtResource("15_82xsv")
font_size = 1.714
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[sub_resource type="Resource" id="Resource_a6jrf"] [sub_resource type="Resource" id="Resource_a6jrf"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("15_getpj") script = ExtResource("16_getpj")
font_size = 1.428
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[sub_resource type="Resource" id="Resource_xuqvo"] [sub_resource type="Resource" id="Resource_xuqvo"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("16_ryguw") script = ExtResource("17_ryguw")
font_size = 1.142
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[sub_resource type="Resource" id="Resource_qsp4k"] [sub_resource type="Resource" id="Resource_qsp4k"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("17_d13ii") script = ExtResource("18_d13ii")
font_size = 1.0
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[sub_resource type="Resource" id="Resource_kq58d"] [sub_resource type="Resource" id="Resource_kq58d"]
resource_local_to_scene = true resource_local_to_scene = true
script = ExtResource("18_1u8w0") script = ExtResource("19_1u8w0")
font_size = 0.857
is_bold = false
is_italic = false
is_underlined = false
override_font_color = false
font_color = Color(1, 1, 1, 1)
[node name="main" type="Node3D"] [node name="main" type="Node3D"]
process_mode = 3 process_mode = 3
@ -1131,6 +1278,16 @@ modulate = Color(1, 1, 1, 0)
rotation = -0.314159 rotation = -0.314159
texture = ExtResource("7_koraw") texture = ExtResource("7_koraw")
[node name="LoadingLabel" type="Label" parent="Control"]
visible = false
layout_mode = 0
offset_left = 100.0
offset_top = -37.0
offset_right = 239.99991
offset_bottom = 9.0
text = "loading"
script = SubResource("GDScript_cegan")
[node name="MenuAnimationPlayer" type="AnimationPlayer" parent="."] [node name="MenuAnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("../Control/mask") root_node = NodePath("../Control/mask")
@ -1142,6 +1299,9 @@ autoplay = "init"
[node name="MenuAnimationTree" type="AnimationTree" parent="MenuAnimationPlayer"] [node name="MenuAnimationTree" type="AnimationTree" parent="MenuAnimationPlayer"]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("%MenuAnimationPlayer/../Control/mask") root_node = NodePath("%MenuAnimationPlayer/../Control/mask")
libraries = {
&"": SubResource("AnimationLibrary_ogbs1")
}
tree_root = SubResource("AnimationNodeStateMachine_uwcb5") tree_root = SubResource("AnimationNodeStateMachine_uwcb5")
anim_player = NodePath("..") anim_player = NodePath("..")
parameters/conditions/load_save = false parameters/conditions/load_save = false
@ -1232,245 +1392,15 @@ visible = false
modulate = Color(1, 1, 1, 0) modulate = Color(1, 1, 1, 0)
offset_top = 220.0 offset_top = 220.0
offset_right = 1926.0 offset_right = 1926.0
offset_bottom = 4392.0 offset_bottom = 5260.0
bbcode_enabled = true bbcode_enabled = true
text = "[center]
[img=512]res://logic-scenes/main menu/logo.png[/img]
[img][/img]
[font_size=27]is[/font_size]
[font_size=36]made by betalars[/font_size]
published by
[font_size=27]Purple Sloth Game Collective[/font_size]
produced with the help of
[font_size=27]Vu Dieu Linh @ polynormal games[/font_size]
[font_size=22]Contributers[/font_size]
[font_size=18]Programming[/font_size]
Adrian Schmid
Nek0
AprilThePink
and somebody that I used to know
[font_size=18]Voice Acting[/font_size]
Jas Arianna
Sarosenna
[font_size=18]Soundtrack[/font_size]
STTLE
[font_size=22]Frame of Mind was created in Godot 4.[/font_size]
[font_size=18]Special thanks to my friends and allies:[/font_size]
caesey, Nase, Jenny, map-c, Svenja, Milo, Francis, Christoph, Johanna, Friedrich Lüder
[font_size=18]Thanks to the Contributers of:[/font_size]
blender
inkscape
ghostwriter
hedgedoc
gitea
Godot Steam
MarkdownLabel
Jovian-NixOS
LibreOffice
[font_size=18]Thanks to these Community Members[/font_size]
Maxi, iFire
[font_size=27]Creative Commons Assets[/font_size]
[font_size=22]3D-Assets[/font_size]
- [url=https://sketchfab.com/3d-models/boy-room-19035fc846034003b76e2914ba6dd7a6]Antique Dresser[/url] by [url=https://sketchfab.com/DarrenMcnerney3D]Darren McNerney 3D[/url] CC-BY
- [url=https://skfb.ly/ow6TJ]Wardrobe - Low poly[/url] by [url=https://sketchfab.com/ixMkc1]ixMkc1[/url] CC-BY
- [url=https://sketchfab.com/3d-models/simple-bean-bag-64d111cec3d842f09cbb8c68b1e49c8d]Simple Bean Bag[/url] by [url=https://sketchfab.com/AleixoAlonso]AleixoAlonso[/url] CC-BY
- [url=https://skfb.ly/ouu9C]Cobwebs[/url] by [url=https://sketchfab.com/bumstrum]DJMaesen[/url] CC-BY
- [url=https://skfb.ly/6RVFt]Laptop[/url] by [url=https://sketchfab.com/Aullwen]Aullwen[/url] CC-BY
- [url=https://skfb.ly/oqZnY]Home Speaker Bar[/url] by [url=https://sketchfab.com/re1monsen]re1monsen[/url] CC-BY
- [url=https://sketchfab.com/3d-models/designer-storage-box-2-db1275e988484908afcf44d0487aed69]Designer Storage Box 2[/url] by [url=https://sketchfab.com/Raffey]Raphael Escamilla[/url] CC-BY
- [url=https://sketchfab.com/3d-models/carpet-fluffy-435d64ef1e36457790000c6b6aa4b8b2]Carpet Fluffy[/url] by [url=https://sketchfab.com/polybean]polybEAN[/url] CC-BY
- [url=https://sketchfab.com/3d-models/backpacks-blockout-homework-e80686790d884b21b52f2308e51af9c6]backpacks blockout homework[/url] by [url=https://sketchfab.com/Fellm]Fellming[/url] CC-BY
- [url=https://sketchfab.com/3d-models/restaurant-kitchen-set-part-1-129dd2f84879477ea261b422d21491f4]Restaurant Kitchen Set[/url] by [url=https://sketchfab.com/soidev]soidev[/url], CC-BY
- [url=https://sketchfab.com/nkilstrup/collections/scandinavian-kitchen-kit-7abc790a7c744579801101d9c3655f37]Scandinavian Kitchen Kit[/url], [url=https://sketchfab.com/3d-models/house-plants-1347ac536bea469281cc07d68e076654]House Plants[/url] and [url=https://sketchfab.com/3d-models/living-room-props-cee72686f7534fdea99ab04d6177df22]Living Room Props[/url] by [url=https://sketchfab.com/nkilstrup]Nicolai Kilstrup[/url], CC-BY
- [url=https://sketchfab.com/3d-models/wooden-kitchen-3c6f8352025540feb8d7019485bf20e4]Wooden kitchen[/url] by [url=https://sketchfab.com/miha.pop12]Mieshu[/url], CC-BY
- [url=https://sketchfab.com/3d-models/baked-goods-d1ae09e3cb8343bc8790b15928452906]Baked Goods[/url] by [url=https://sketchfab.com/rigsters]rigsters[/url], CC-BY
- [url=https://polyhaven.com/a/CoffeeTable_01]Coffee Table 01[/url] by [url=https://polyhaven.com/all?a=Fernando%20Quinn]Fernando Quinn[/url], CC0
- [url=https://polyhaven.com/a/side_table_01]Side Table 01[/url] and [url=https://polyhaven.com/a/wooden_display_shelves_01]Wooden Display Shelves 01[/url] by [url=https://www.artstation.com/jamesray]James Ray Cock[/url], CC0
- [url=https://polyhaven.com/a/throw_pillows_01]Throw Pillows 01[/url] by [url=https://www.artstation.com/serhiikhromov]Serhii Khromov[/url], CC0
- [url=https://polyhaven.com/a/gaming_console]Gaming Console[/url] by [url=https://www.artstation.com/sean_buckley98]Sean Buckley[/url], CC0
- [url=https://polyhaven.com/a/painted_wooden_stool]Painted Wooden Stool[/url] by [url=https://www.artstation.com/k_sannikov]Kirill Sannikov[/url], CC0
[font_size=22]Textures from polyhaven.com[/font_size]
[ul][url=https://polyhaven.com/a/rough_wood]Rough Wood[/url] by [url=https://polyhaven.com/all?a=Rob%20Tuytel]Rob Tuytel[/url] CC-0
[url=https://polyhaven.com/a/brick_wall_001]Brick Wall 001[/url] and [url=https://polyhaven.com/a/smooth_concrete_floor]Smooth Concrete Floor[/url] by [url=https://polyhaven.com/all?a=Dimitrios%20Savva]Dimitrios Savva[/url]
[url=https://polyhaven.com/a/clay_floor_001]Clay Floor 001[/url] by [url=https://polyhaven.com/all?a=Dimitrios%20Savva]Dimitrios Savva[/url] and [url=https://www.artstation.com/rico_b3d]Rico Cilliers[/url]
[/ul]
[font_size=22]Textures from AmbientCG.com[/font_size]
- [url=https://ambientcg.com/view?id=Fabric030]Fabric 030[/url]
- [url=https://ambientcg.com/view?id=WoodSubstance009]Wood Substance 009[/url]
- [url=https://ambientcg.com/view?id=Wicker010B]Wicker 010 B[/url]
- [url=https://ambientcg.com/view?id=Terrazzo019L]Terrazzo 019 L[/url]
[font_size=22]Wikimedia Commons[/font_size]
- [url=https://commons.wikimedia.org/wiki/File:Geb%C3%A4ude_in_Darmstadt.jpg]Gebäude in Darmstadt[/url] by [url=https://commons.wikimedia.org/wiki/User:Neq00]Neq00[/url] CC-BY-SA 4.0
[font_size=22]Illustrations[/font_size]
+ [url=https://www.deviantart.com/fernand0fc/art/Corporate-level-bodyguard-803579124]Corporate level bodyguard[/url], [url=https://www.deviantart.com/fernand0fc/art/Into-the-glowing-sea-834238466]Into the glowing sea[/url] and [url=https://www.deviantart.com/fernand0fc/art/Anti-Hero-555054767]Anti-Hero[/url] by [url=https://www.deviantart.com/fernand0fc]Fernand0FC[/url], CC-BY-3.0
+ [url=https://unknown-horizons.org/]Unknown Horizons[/url] Artwork, provided by a [url=https://github.com/unknown-horizons/unknown-horizons.github.io/blob/source/LICENSE]GPL-2.0 license[/url]
+ [url=https://rich.itch.io/strangeadventures]Strange Adventures in Infinite Space[/url] by [url=https://rich.itch.io]Digital Eel[/url], CC-BY-NC 4.0
+ [url=https://github.com/BlindMindStudios/StarRuler2-Source]Star Ruler 2[/url], CC-BY-NC 2.0
+ [url=https://megaglest.org/]MegaGlest[/url], GPL
+ [url= ]Splash Screen Neo[/url] by [url=https://inkscape.org/de/~MuhamadAliAkbar/]Muhamad Ali Akbar[/url], CC-BY-SA
+ [url=https://ohmygit.org/]Oh My Git[/url] by [url=https://bleeptrack.de/]bleeptrack[/url] and [url=https://morr.cc/]blinry[/url], Blue Oak Model License
+ [url=]Ghostwriter[/url] by kde
[font_size=27]Music[/font_size]
- [url=https://azurestudios.bandcamp.com/album/foundations-i-24bit]Foundations I by Azure Studios[/url], CC-BY 3.0
- Infinite Skies from [url=https://alkakrab.itch.io/free-10-rpg-game-ambient-tracks-music-pack-no-copyright]10 Ambient RPG Tracks[/url] by [url=https://alkakrab.itch.io/]alkakrab[/url] [i]\"Absolutely Free For Commercial use.\"[/i]
[font_size=22]Sounds Effects[/font_size]
- [url=https://freesound.org/people/InspectorJ/sounds/346641/]Rain on Windows, Interior[/url] by [url=https://freesound.org/people/InspectorJ/]InspectorJ[/url] CC-BY 3.0
- [url=https://freesound.org/people/MrAuralization/sounds/241294/]Rain and thunder[/url] by [url=https://freesound.org/people/MrAuralization/]MrAuralization[/url] CC-BY 3.0
- [url=https://freesound.org/people/BlueDelta/sounds/446753/]Heavy Thunder Strike - no Rain - QUADRO[/url] by [url=https://freesound.org/people/BlueDelta/]BlueDelta[/url] CC-BY 3.0
[font_size=27]Fonts all OFL[/font_size]
- Nanum Fonts by [url=https://fonts.google.com/?query=Sandoll]Sandoll[/url]
- Atkinson Hyperlegible by Braille Institute, Applied Design Works, Elliott Scott, Megan Eiswerth, Linus Boman, Theodore Petrosky\""
fit_content = true fit_content = true
script = ExtResource("12_074og") script = ExtResource("12_074og")
markdown_text = "[center]
[img=512]res://logic-scenes/main menu/logo.png[/img]
![This is an image]()
## is
#made by betalars
published by
## Purple Sloth Game Collective
produced with the help of
## Vu Dieu Linh @ polynormal games
### Contributers
#### Programming
Adrian Schmid
Nek0
AprilThePink
and somebody that I used to know
#### Voice Acting
Jas Arianna
Sarosenna
#### Soundtrack
STTLE
### Frame of Mind was created in Godot 4.
#### Special thanks to my friends and allies:
caesey, Nase, Jenny, map-c, Svenja, Milo, Francis, Christoph, Johanna, Friedrich Lüder
#### Thanks to the Contributers of:
blender
inkscape
ghostwriter
hedgedoc
gitea
Godot Steam
MarkdownLabel
Jovian-NixOS
LibreOffice
#### Thanks to these Community Members
Maxi, iFire
## Creative Commons Assets
### 3D-Assets
- [Antique Dresser](https://sketchfab.com/3d-models/boy-room-19035fc846034003b76e2914ba6dd7a6) by [Darren McNerney 3D](https://sketchfab.com/DarrenMcnerney3D) CC-BY
- [Wardrobe - Low poly](https://skfb.ly/ow6TJ) by [ixMkc1](https://sketchfab.com/ixMkc1) CC-BY
- [Simple Bean Bag](https://sketchfab.com/3d-models/simple-bean-bag-64d111cec3d842f09cbb8c68b1e49c8d) by [AleixoAlonso](https://sketchfab.com/AleixoAlonso) CC-BY
- [Cobwebs](https://skfb.ly/ouu9C) by [DJMaesen](https://sketchfab.com/bumstrum) CC-BY
- [Laptop](https://skfb.ly/6RVFt) by [Aullwen](https://sketchfab.com/Aullwen) CC-BY
- [Home Speaker Bar](https://skfb.ly/oqZnY) by [re1monsen](https://sketchfab.com/re1monsen) CC-BY
- [Designer Storage Box 2](https://sketchfab.com/3d-models/designer-storage-box-2-db1275e988484908afcf44d0487aed69) by [Raphael Escamilla](https://sketchfab.com/Raffey) CC-BY
- [Carpet Fluffy](https://sketchfab.com/3d-models/carpet-fluffy-435d64ef1e36457790000c6b6aa4b8b2) by [polybEAN](https://sketchfab.com/polybean) CC-BY
- [backpacks blockout homework](https://sketchfab.com/3d-models/backpacks-blockout-homework-e80686790d884b21b52f2308e51af9c6) by [Fellming](https://sketchfab.com/Fellm) CC-BY
- [Restaurant Kitchen Set](https://sketchfab.com/3d-models/restaurant-kitchen-set-part-1-129dd2f84879477ea261b422d21491f4) by [soidev](https://sketchfab.com/soidev), CC-BY
- [Scandinavian Kitchen Kit](https://sketchfab.com/nkilstrup/collections/scandinavian-kitchen-kit-7abc790a7c744579801101d9c3655f37), [House Plants](https://sketchfab.com/3d-models/house-plants-1347ac536bea469281cc07d68e076654) and [Living Room Props](https://sketchfab.com/3d-models/living-room-props-cee72686f7534fdea99ab04d6177df22) by [Nicolai Kilstrup](https://sketchfab.com/nkilstrup), CC-BY
- [Wooden kitchen](https://sketchfab.com/3d-models/wooden-kitchen-3c6f8352025540feb8d7019485bf20e4) by [Mieshu](https://sketchfab.com/miha.pop12), CC-BY
- [Baked Goods](https://sketchfab.com/3d-models/baked-goods-d1ae09e3cb8343bc8790b15928452906) by [rigsters](https://sketchfab.com/rigsters), CC-BY
- [Coffee Table 01](https://polyhaven.com/a/CoffeeTable_01) by [Fernando Quinn](https://polyhaven.com/all?a=Fernando%20Quinn), CC0
- [Side Table 01](https://polyhaven.com/a/side_table_01) and [Wooden Display Shelves 01](https://polyhaven.com/a/wooden_display_shelves_01) by [James Ray Cock](https://www.artstation.com/jamesray), CC0
- [Throw Pillows 01](https://polyhaven.com/a/throw_pillows_01) by [Serhii Khromov](https://www.artstation.com/serhiikhromov), CC0
- [Gaming Console](https://polyhaven.com/a/gaming_console) by [Sean Buckley](https://www.artstation.com/sean_buckley98), CC0
- [Painted Wooden Stool](https://polyhaven.com/a/painted_wooden_stool) by [Kirill Sannikov](https://www.artstation.com/k_sannikov), CC0
### Textures from polyhaven.com
- [Rough Wood](https://polyhaven.com/a/rough_wood) by [Rob Tuytel](https://polyhaven.com/all?a=Rob%20Tuytel) CC-0
- [Brick Wall 001](https://polyhaven.com/a/brick_wall_001) and [Smooth Concrete Floor](https://polyhaven.com/a/smooth_concrete_floor) by [Dimitrios Savva](https://polyhaven.com/all?a=Dimitrios%20Savva)
- [Clay Floor 001](https://polyhaven.com/a/clay_floor_001) by [Dimitrios Savva](https://polyhaven.com/all?a=Dimitrios%20Savva) and [Rico Cilliers](https://www.artstation.com/rico_b3d)
### Textures from AmbientCG.com
- [Fabric 030](https://ambientcg.com/view?id=Fabric030)
- [Wood Substance 009](https://ambientcg.com/view?id=WoodSubstance009)
- [Wicker 010 B](https://ambientcg.com/view?id=Wicker010B)
- [Terrazzo 019 L](https://ambientcg.com/view?id=Terrazzo019L)
### Wikimedia Commons
- [Gebäude in Darmstadt](https://commons.wikimedia.org/wiki/File:Geb%C3%A4ude_in_Darmstadt.jpg) by [Neq00](https://commons.wikimedia.org/wiki/User:Neq00) CC-BY-SA 4.0
### Illustrations
+ [Corporate level bodyguard](https://www.deviantart.com/fernand0fc/art/Corporate-level-bodyguard-803579124), [Into the glowing sea](https://www.deviantart.com/fernand0fc/art/Into-the-glowing-sea-834238466) and [Anti-Hero](https://www.deviantart.com/fernand0fc/art/Anti-Hero-555054767) by [Fernand0FC](https://www.deviantart.com/fernand0fc), CC-BY-3.0
+ [Unknown Horizons](https://unknown-horizons.org/) Artwork, provided by a [GPL-2.0 license](https://github.com/unknown-horizons/unknown-horizons.github.io/blob/source/LICENSE)
+ [Strange Adventures in Infinite Space](https://rich.itch.io/strangeadventures) by [Digital Eel](https://rich.itch.io), CC-BY-NC 4.0
+ [Star Ruler 2](https://github.com/BlindMindStudios/StarRuler2-Source), CC-BY-NC 2.0
+ [MegaGlest](https://megaglest.org/), GPL
+ [Splash Screen Neo]( ) by [Muhamad Ali Akbar](https://inkscape.org/de/~MuhamadAliAkbar/), CC-BY-SA
+ [Oh My Git](https://ohmygit.org/) by [bleeptrack](https://bleeptrack.de/) and [blinry](https://morr.cc/), Blue Oak Model License
+ [Ghostwriter]() by kde
## Music
- [Foundations I by Azure Studios](https://azurestudios.bandcamp.com/album/foundations-i-24bit), CC-BY 3.0
- Infinite Skies from [10 Ambient RPG Tracks](https://alkakrab.itch.io/free-10-rpg-game-ambient-tracks-music-pack-no-copyright) by [alkakrab](https://alkakrab.itch.io/) *\\\"Absolutely Free For Commercial use.\\\"*
### Sounds Effects
- [Rain on Windows, Interior](https://freesound.org/people/InspectorJ/sounds/346641/) by [InspectorJ](https://freesound.org/people/InspectorJ/) CC-BY 3.0
- [Rain and thunder](https://freesound.org/people/MrAuralization/sounds/241294/) by [MrAuralization](https://freesound.org/people/MrAuralization/) CC-BY 3.0
- [Heavy Thunder Strike - no Rain - QUADRO](https://freesound.org/people/BlueDelta/sounds/446753/) by [BlueDelta](https://freesound.org/people/BlueDelta/) CC-BY 3.0
## Fonts all OFL
- Nanum Fonts by [Sandoll](https://fonts.google.com/?query=Sandoll)
- Atkinson Hyperlegible by Braille Institute, Applied Design Works, Elliott Scott, Megan Eiswerth, Linus Boman, Theodore Petrosky\""
h1 = SubResource("Resource_0odxb") h1 = SubResource("Resource_0odxb")
h2 = SubResource("Resource_lswn8") h2 = SubResource("Resource_lswn8")
h3 = SubResource("Resource_a6jrf") h3 = SubResource("Resource_a6jrf")
h4 = SubResource("Resource_xuqvo") h4 = SubResource("Resource_xuqvo")
h5 = SubResource("Resource_qsp4k") h5 = SubResource("Resource_qsp4k")
h6 = SubResource("Resource_kq58d") h6 = SubResource("Resource_kq58d")
metadata/_custom_type_script = "uid://dr7xhgd53cvmf"
[connection signal="on_read" from="Disclaimer" to="Startup Menu" method="starting"] [connection signal="on_read" from="Disclaimer" to="Startup Menu" method="starting"]

View File

@ -1,14 +1,18 @@
[gd_scene load_steps=18 format=3 uid="uid://b51wdql4mby47"] [gd_scene load_steps=22 format=3 uid="uid://b51wdql4mby47"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/handwriting.theme" id="1_2dg4n"] [ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/handwriting.theme" id="1_2dg4n"]
[ext_resource type="Script" uid="uid://c3o65t2rwpbtn" path="res://logic-scenes/main menu/main_menu.gd" id="2_rm576"] [ext_resource type="Script" uid="uid://c3o65t2rwpbtn" path="res://logic-scenes/main menu/main_menu.gd" id="2_rm576"]
[ext_resource type="Texture2D" uid="uid://dedg31cqac3n0" path="res://import/interface-elements/frame-of-mind-logo.png" id="3_cm266"]
[ext_resource type="PackedScene" uid="uid://gmxenhavh1lp" path="res://logic-scenes/main menu/video_settings.tscn" id="3_f0dcd"] [ext_resource type="PackedScene" uid="uid://gmxenhavh1lp" path="res://logic-scenes/main menu/video_settings.tscn" id="3_f0dcd"]
[ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="3_xb2np"] [ext_resource type="Texture2D" uid="uid://bu6o68w763512" path="res://import/interface-elements/game-of-thoughts.png" id="4_g8g3n"]
[ext_resource type="Script" uid="uid://cxton1pffwxk4" path="res://button_themer.gd" id="4_iotk1"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="4_j5v2v"] [ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="4_j5v2v"]
[ext_resource type="Script" uid="uid://byiih47fi6740" path="res://dev-util/settings_popup.gd" id="4_k8jo0"] [ext_resource type="Script" uid="uid://byiih47fi6740" path="res://dev-util/settings_popup.gd" id="4_k8jo0"]
[ext_resource type="PackedScene" uid="uid://dfhkfocy8axb8" path="res://logic-scenes/main menu/audio_settings.tscn" id="4_o07mg"] [ext_resource type="PackedScene" uid="uid://dfhkfocy8axb8" path="res://logic-scenes/main menu/audio_settings.tscn" id="4_o07mg"]
[ext_resource type="Script" uid="uid://dqq0wq3dvbnjs" path="res://dev-util/i18n_texture_rect.gd" id="5_8u0te"]
[ext_resource type="Script" uid="uid://0tb763w0vfv7" path="res://tab_container.gd" id="5_lhfti"] [ext_resource type="Script" uid="uid://0tb763w0vfv7" path="res://tab_container.gd" id="5_lhfti"]
[ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://logic-scenes/main menu/acessability_settings.tscn" id="6_875a3"] [ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://logic-scenes/main menu/acessability_settings.tscn" id="6_875a3"]
[ext_resource type="Texture2D" uid="uid://bv1o2xo71wvp6" path="res://import/interface-elements/gedanken-spiel.png" id="6_g8g3n"]
[ext_resource type="PackedScene" uid="uid://dxwqkxq6qjk7i" path="res://logic-scenes/main menu/gameplay_settings.tscn" id="6_p7ypt"] [ext_resource type="PackedScene" uid="uid://dxwqkxq6qjk7i" path="res://logic-scenes/main menu/gameplay_settings.tscn" id="6_p7ypt"]
[ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://logic-scenes/main menu/content_settings.tscn" id="7_pnd48"] [ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://logic-scenes/main menu/content_settings.tscn" id="7_pnd48"]
[ext_resource type="Script" uid="uid://dugfwcvp7i01k" path="res://logic-scenes/main menu/save_game_list.gd" id="8_o0cpj"] [ext_resource type="Script" uid="uid://dugfwcvp7i01k" path="res://logic-scenes/main menu/save_game_list.gd" id="8_o0cpj"]
@ -261,19 +265,36 @@ script = ExtResource("2_rm576")
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1 layout_mode = 1
anchors_preset = -1 anchors_preset = 1
anchor_left = 1.0 anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 offset_left = -371.0
offset_left = -437.0 offset_top = -49.0
offset_top = -434.0 offset_right = 653.0
offset_right = 587.0 offset_bottom = 975.0
offset_bottom = 590.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0
scale = Vector2(0.4, 0.4) scale = Vector2(0.4, 0.4)
texture = ExtResource("3_xb2np") texture = ExtResource("3_cm266")
[node name="TextureRect2" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -658.0
offset_top = 31.0
offset_right = 97.0
offset_bottom = 420.99997
grow_horizontal = 0
scale = Vector2(0.4, 0.4)
texture = ExtResource("4_g8g3n")
expand_mode = 2
stretch_mode = 4
script = ExtResource("5_8u0te")
textures = Dictionary[String, Texture]({
"de": ExtResource("6_g8g3n"),
"en": ExtResource("4_g8g3n")
})
[node name="PanelContainer" type="VBoxContainer" parent="."] [node name="PanelContainer" type="VBoxContainer" parent="."]
layout_mode = 1 layout_mode = 1
@ -282,83 +303,94 @@ offset_top = 70.0
offset_right = 319.0 offset_right = 319.0
offset_bottom = 270.0 offset_bottom = 270.0
[node name="NewGameButton" type="Button" parent="PanelContainer"]
layout_mode = 2
text = "new Game"
[node name="ContinueGameButton" type="Button" parent="PanelContainer"] [node name="ContinueGameButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
text = "continue" size_flags_horizontal = 0
theme_type_variation = &"H1Button"
text = "menu_continue"
script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="NewGameButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2
text = "menu_new_game"
alignment = 0
script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="LoadGameButton" type="Button" parent="PanelContainer"] [node name="LoadGameButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
text = "load" text = "menu_load"
alignment = 0
script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="SettingsButton" type="MenuButton" parent="PanelContainer"] [node name="SettingsButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
text = "settings" text = "menu_open_settings"
flat = false alignment = 0
item_count = 5 script = ExtResource("4_iotk1")
popup/item_0/text = "Accessibility" metadata/_custom_type_script = "uid://cxton1pffwxk4"
popup/item_0/id = 0
popup/item_1/text = "Video"
popup/item_1/id = 1
popup/item_2/text = "Audio"
popup/item_2/id = 2
popup/item_3/text = "Gameplay"
popup/item_3/id = 3
popup/item_4/text = "Content Notes"
popup/item_4/id = 4
[node name="CreditsButton" type="Button" parent="PanelContainer"] [node name="CreditsButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
tooltip_text = "Plays the Game Credits" tooltip_text = "Plays the Game Credits"
text = "Attribution" text = "Attribution"
alignment = 0
script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="BugButton" type="Button" parent="PanelContainer"] [node name="BugButton" type="Button" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
text = "BugButton" text = "BugButton"
alignment = 0
script = ExtResource("4_j5v2v") script = ExtResource("4_j5v2v")
metadata/_custom_type_script = "uid://sa15wakvpj2e" metadata/_custom_type_script = "uid://sa15wakvpj2e"
[node name="QuitButton" type="Button" parent="PanelContainer"] [node name="QuitButton" type="Button" parent="PanelContainer"]
clip_contents = true
layout_mode = 2 layout_mode = 2
text = "quit" text = "quit"
alignment = 0
script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="SettingsPopup" type="PanelContainer" parent="."] [node name="CenterContainer2" type="CenterContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="SettingsPopup" type="PanelContainer" parent="CenterContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
self_modulate = Color(1, 1, 1, 0) self_modulate = Color(1, 1, 1, 0)
layout_mode = 1 layout_mode = 2
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -474.0
offset_top = -438.0
offset_right = 293.0
offset_bottom = 335.0
grow_horizontal = 2
grow_vertical = 2
scale = Vector2(1, 0.57)
script = ExtResource("4_k8jo0") script = ExtResource("4_k8jo0")
[node name="AnimationPlayer" type="AnimationPlayer" parent="SettingsPopup"] [node name="AnimationPlayer" type="AnimationPlayer" parent="CenterContainer2/SettingsPopup"]
root_node = NodePath("../TabContainer/Video Settings") root_node = NodePath("../TabContainer/Video Settings")
libraries = { libraries = {
&"": SubResource("AnimationLibrary_lmxul") &"": SubResource("AnimationLibrary_lmxul")
} }
autoplay = "RESET" autoplay = "RESET"
[node name="Decoration" type="Control" parent="SettingsPopup"] [node name="Decoration" type="Control" parent="CenterContainer2/SettingsPopup"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
size_flags_vertical = 4 size_flags_vertical = 4
[node name="decoration" type="PanelContainer" parent="SettingsPopup/Decoration"] [node name="decoration" type="PanelContainer" parent="CenterContainer2/SettingsPopup/Decoration"]
modulate = Color(1, 1, 1, 0) modulate = Color(1, 1, 1, 0)
layout_mode = 2 layout_mode = 0
offset_left = -374.0 offset_left = -374.0
offset_top = -378.5 offset_top = -378.5
offset_right = 365.0 offset_right = 365.0
@ -368,41 +400,77 @@ grow_vertical = 2
rotation = 1.26885 rotation = 1.26885
pivot_offset = Vector2(374, 378.5) pivot_offset = Vector2(374, 378.5)
[node name="TabContainer" type="TabContainer" parent="SettingsPopup"] [node name="TabContainer" type="TabContainer" parent="CenterContainer2/SettingsPopup"]
modulate = Color(1, 1, 1, 0) modulate = Color(1, 1, 1, 0)
layout_mode = 2 layout_mode = 2
current_tab = 2 current_tab = 4
use_hidden_tabs_for_min_size = true use_hidden_tabs_for_min_size = true
script = ExtResource("5_lhfti") script = ExtResource("5_lhfti")
[node name="Accessibility" parent="SettingsPopup/TabContainer" instance=ExtResource("6_875a3")] [node name="Accessibility" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("6_875a3")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
layout_mode = 2 layout_mode = 2
[node name="Video Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("3_f0dcd")] [node name="Video Settings" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("3_f0dcd")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 1 metadata/_tab_index = 1
[node name="Audio Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("4_o07mg")] [node name="Audio Settings" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("4_o07mg")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 2 metadata/_tab_index = 2
[node name="Gameplay Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")] [node name="Gameplay Settings" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 3 metadata/_tab_index = 3
[node name="Content Notes" parent="SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")] [node name="Content Notes" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 4 metadata/_tab_index = 4
[node name="Popup" type="Popup" parent="CenterContainer2"]
oversampling_override = 1.0
initial_position = 2
size = Vector2i(879, 132)
visible = true
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer2/Popup"]
offset_left = 113.0
offset_right = 153.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="CenterContainer2/Popup/VBoxContainer"]
layout_mode = 2
text = "Settings have been modified.
Do you really want to leave without saving?"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer2/Popup/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="ConfirmExit" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "leave"
[node name="ConfirmSave" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "save"
[node name="ConfirmAbort" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "abort"
[node name="SaveGameHandle" type="CenterContainer" parent="."] [node name="SaveGameHandle" type="CenterContainer" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false

View File

@ -11,7 +11,7 @@ config_version=5
[application] [application]
config/name="Frame of Mind" config/name="Frame of Mind"
run/main_scene="uid://cd63barv73rfx" run/main_scene="uid://befxf8uruwnrl"
config/use_custom_user_dir=true config/use_custom_user_dir=true
config/features=PackedStringArray("4.5", "Forward Plus") config/features=PackedStringArray("4.5", "Forward Plus")
boot_splash/bg_color=Color(0.0313726, 0.0117647, 0.129412, 1) boot_splash/bg_color=Color(0.0313726, 0.0117647, 0.129412, 1)

View File

@ -19,6 +19,7 @@ var settings_initialised
screen_reader_enabled = value screen_reader_enabled = value
if settings_initialised: if settings_initialised:
settings_changed.emit() settings_changed.emit()
@export var rendering_disabled: bool = false: @export var rendering_disabled: bool = false:
set(value): set(value):
rendering_disabled = value rendering_disabled = value
@ -54,7 +55,8 @@ var settings_initialised
@export var ui_scaling: float = 1: @export var ui_scaling: float = 1:
set(value): set(value):
ui_scaling = value ui_scaling = value
ProjectSettings.set_setting("gui/theme/default_theme_scale", value) ProjectSettings.set_setting("display/window/stretch/scale", value)
get_tree().root.content_scale_factor = value
@export var show_content_notes: bool = false: @export var show_content_notes: bool = false:
set(value): set(value):
show_content_notes = value show_content_notes = value
@ -128,8 +130,10 @@ var current_main_theme:Theme = preload("res://logic-scenes/themes/handwriting.th
speech_language = value speech_language = value
@export_group("Gameplay Settings") @export_group("Gameplay Settings")
@export var input_sensitivity: float @export var input_sensitivity: float = 1.0
@export var inverty_y_axis: bool @export var fov: float = 35.0
@export var inverty_y_axis: bool = false
@export var inverty_y_mouse: bool = false
@export_enum("off", "top_left", "top_right", "bottom_left", "bottom_right") var stream_overlay_position: int @export_enum("off", "top_left", "top_right", "bottom_left", "bottom_right") var stream_overlay_position: int
# for passing VFX settings not contained by project settings to scene environemnt # for passing VFX settings not contained by project settings to scene environemnt
@ -200,6 +204,8 @@ func save_settings():
"gameplay": { "gameplay": {
"input_sensitivity": input_sensitivity, "input_sensitivity": input_sensitivity,
"inverty_y_axis": inverty_y_axis, "inverty_y_axis": inverty_y_axis,
"inverty_y_mouse": inverty_y_mouse,
"fov": fov,
"stream_overlay_position": stream_overlay_position "stream_overlay_position": stream_overlay_position
}, },
"privacy": { "privacy": {

View File

@ -5,7 +5,7 @@ var pass_to_actor
func _ready() -> void: func _ready() -> void:
for child in get_children(): for child in get_children():
if "leave_stage" in child: if "leave_stage" in child:
child.leave_stage.connect(get_parent().vanish) child.leave_stage.connect(_on_stage_left)
tab_changed.connect(_on_tab_changed) tab_changed.connect(_on_tab_changed)
pass_to_actor = get_child(current_tab) pass_to_actor = get_child(current_tab)
@ -19,3 +19,15 @@ func _on_tab_changed(tab_id: int):
State.pass_stage_to(get_child(tab_id)) State.pass_stage_to(get_child(tab_id))
pass_to_actor = get_child(tab_id) pass_to_actor = get_child(tab_id)
func _on_stage_left():
await get_tree().process_frame
if not pass_to_actor.has_stage:
var unsaved := false
for child in get_children():
if child.has_unsaved_changes:
unsaved = true
if unsaved:
get_parent().vanish()
else:
get_parent().ask_confirmation()