WIP: main menu overhaul, introducing settings

This commit is contained in:
betalars 2024-10-02 01:32:59 +02:00
parent a992558c77
commit a666ab61c8
17 changed files with 1091 additions and 252 deletions

View File

@ -22,7 +22,7 @@ bus/3/name = &"music"
bus/3/solo = false bus/3/solo = false
bus/3/mute = false bus/3/mute = false
bus/3/bypass_fx = false bus/3/bypass_fx = false
bus/3/volume_db = -9.63278 bus/3/volume_db = -7.9588
bus/3/send = &"New Bus 3" bus/3/send = &"New Bus 3"
bus/4/name = &"outside-rain" bus/4/name = &"outside-rain"
bus/4/solo = false bus/4/solo = false

BIN
src/import/interface-elements/empty_save_slot.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bk5ja14r7r6i4"
path="res://.godot/imported/empty_save_slot.png-32c1c54cf3151b5dba169b400fa6408f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://import/interface-elements/empty_save_slot.png"
dest_files=["res://.godot/imported/empty_save_slot.png-32c1c54cf3151b5dba169b400fa6408f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -1,4 +1,4 @@
extends TabBar extends VBoxContainer
signal changed signal changed

View File

@ -88,6 +88,7 @@ text = "mute Sound-Effects"
[node name="AdjustmentLabel" type="Label" parent="VBoxContainer"] [node name="AdjustmentLabel" type="Label" parent="VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Volume Adjustment" text = "Volume Adjustment"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"] [node name="GridContainer" type="GridContainer" parent="VBoxContainer"]

View File

@ -0,0 +1,41 @@
extends VBoxContainer
signal changed
var has_stage:bool = false:
set(stage):
has_stage = stage
visible = has_stage
@export var is_in_beginning: bool = false
var current_music_decay:float = 0
@onready var expand_button: Button = %ExpandButton
@onready var content_note_box: CheckBox = %ContentNoteButton
@onready var allow_skip_button: CheckBox = %AllowSkipButton
func _ready() -> void:
if is_in_beginning:
%SaveButton.text = "save and continue"
else:
%SaveButton.text = "save and exit"
update_ui_from_state()
content_note_box.pressed.connect(func(value): State.show_content_notes = value)
allow_skip_button.pressed.connect(func(value): State.allow_skipping = value)
%SaveButton.pressed.connect(_on_exit_button_pressed)
%ExpandButton.pressed.connect(
func():
%Reveal.play("reveal")
%ExpandButton.disabled = true
)
func update_ui_from_state():
content_note_box.button_pressed = State.show_content_notes
allow_skip_button.button_pressed = State.allow_skipping
func _on_exit_button_pressed() -> void:
State.save_settings()
State.leave_stage(self)

View File

@ -0,0 +1,225 @@
[gd_scene load_steps=9 format=3 uid="uid://chal0ioagspx0"]
[ext_resource type="Script" path="res://logic-scenes/main menu/content_settings.gd" id="1_wnuvg"]
[sub_resource type="Animation" id="Animation_odolw"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:custom_minimum_size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scroll_vertical")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [50]
}
[sub_resource type="Animation" id="Animation_wthlp"]
resource_name = "reveal"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:custom_minimum_size")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(0.392292, 2.63902),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, 400)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:scroll_vertical")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.566667),
"transitions": PackedFloat32Array(0.63728, 0.482968),
"update": 0,
"values": [200, 0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_x5rp4"]
_data = {
"RESET": SubResource("Animation_odolw"),
"reveal": SubResource("Animation_wthlp")
}
[sub_resource type="ButtonGroup" id="ButtonGroup_v7ly6"]
[sub_resource type="GDScript" id="GDScript_rhtho"]
script/source = "extends Button
func _ready():
self.connect(\"toggled\", Callable(self, \"_on_toggled\"))
func _on_toggled(was_button_pressed: bool):
if get_parent().get_child(1).visible == false:
get_parent().get_child(1).visible = was_button_pressed
else:
get_parent().get_child(1).visible = false
"
[sub_resource type="InputEventAction" id="InputEventAction_gy6yb"]
action = &"ui_cancel"
pressed = true
[sub_resource type="Shortcut" id="Shortcut_df462"]
events = [SubResource("InputEventAction_gy6yb")]
[node name="Content Notes" type="VBoxContainer"]
custom_minimum_size = Vector2(512, 0)
script = ExtResource("1_wnuvg")
metadata/_tab_index = 1
[node name="Label" type="Label" parent="."]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Content Notes"
horizontal_alignment = 1
[node name="Label2" type="Label" parent="."]
layout_mode = 2
text = "This Game deals with Heavy Topics."
horizontal_alignment = 1
[node name="ExpandButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 2
text = "I would like to know more."
[node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 2
follow_focus = true
scroll_vertical = 50
horizontal_scroll_mode = 0
vertical_scroll_mode = 2
[node name="Reveal" type="AnimationPlayer" parent="ScrollContainer"]
unique_name_in_owner = true
libraries = {
"": SubResource("AnimationLibrary_x5rp4")
}
[node name="Content Notes" type="VBoxContainer" parent="ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="VBoxContainer1" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer1"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "Is this game for or about me?"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer1"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
bbcode_enabled = true
text = "[ul]
This game tells one story about one fictional character.
This character was desiged to tell an honest and acsssible 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 exeriences 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 exerpiences about subjects, where betalars could not.
[/ul]"
fit_content = true
[node name="VBoxContainer2" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer2"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "What may be difficult about the premise?"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer2"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
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."
fit_content = true
[node name="VBoxContainer3" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer3"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "What are the game's topics? (Content Notes)"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer3"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
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."
fit_content = true
[node name="VBoxContainer4" type="VBoxContainer" parent="ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer4"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "Mental Health Acessibility Options"
script = SubResource("GDScript_rhtho")
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer/Content Notes/VBoxContainer4"]
layout_mode = 2
[node name="RichTextLabel2" type="RichTextLabel" parent="ScrollContainer/Content Notes/VBoxContainer4/VBoxContainer"]
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
bbcode_enabled = true
text = "[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]"
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="."]
unique_name_in_owner = true
layout_mode = 2
shortcut = SubResource("Shortcut_df462")
text = "save and exit"

View File

@ -0,0 +1,32 @@
extends VBoxContainer
signal changed
var has_stage:bool = false:
set(stage):
has_stage = stage
visible = has_stage
var current_music_decay:float = 0
@onready var y_switch: CheckBox = %InvertY
@onready var input_sensitivity_slider: HSlider = %InputSensitivitySlider
@onready var stream_overlay_picker: OptionButton = %StreamOverlayPicker
func _ready() -> void:
update_ui_from_state()
y_switch.toggled.connect(func(value): State.inverty_y_axis = 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)
%SaveButton.pressed.connect(_on_exit_button_pressed)
func update_ui_from_state():
y_switch.button_pressed = State.inverty_y_axis
input_sensitivity_slider.value = State.input_sensitivity
stream_overlay_picker.select(State.stream_overlay_position)
func _on_exit_button_pressed() -> void:
State.save_settings()
State.leave_stage(self)

View File

@ -0,0 +1,81 @@
[gd_scene load_steps=4 format=3 uid="uid://dxwqkxq6qjk7i"]
[ext_resource type="Script" path="res://logic-scenes/main menu/gameplay_settings.gd" id="1_aurh1"]
[sub_resource type="InputEventAction" id="InputEventAction_gy6yb"]
action = &"ui_cancel"
pressed = true
[sub_resource type="Shortcut" id="Shortcut_0peu0"]
events = [SubResource("InputEventAction_gy6yb")]
[node name="Gameplay Settings" type="VBoxContainer"]
script = ExtResource("1_aurh1")
metadata/_tab_index = 1
[node name="Label" type="Label" parent="."]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Gameplay Settings"
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2
[node name="InvertY" type="CheckBox" parent="VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "All Game Music is safe to stream."
text = "invert Y (gamepad)"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"]
layout_mode = 2
columns = 2
[node name="Label" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Input Sensitivity"
[node name="InputSensitivitySlider" type="HSlider" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
max_value = 1.0
step = 0.05
value = 0.5
ticks_on_borders = true
[node name="Label3" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Stream Overlay"
[node name="StreamOverlayPicker" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "Displays content note and currently playing music at a corner of the screen."
selected = 0
item_count = 5
popup/item_0/text = "none"
popup/item_1/text = "Top Left"
popup/item_1/id = 2
popup/item_2/text = "Top Right"
popup/item_2/id = 3
popup/item_3/text = "Bottom Left"
popup/item_3/id = 5
popup/item_4/text = "Bottom Right"
popup/item_4/id = 6
[node name="Audio Sliders" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
[node name="Labels" type="VBoxContainer" parent="VBoxContainer/Audio Sliders"]
layout_mode = 2
[node name="Sliders" type="VBoxContainer" parent="VBoxContainer/Audio Sliders"]
layout_mode = 2
[node name="SaveButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 2
shortcut = SubResource("Shortcut_0peu0")
text = "save and exit"

View File

@ -0,0 +1,27 @@
extends Panel
signal load_scene(id: int)
signal start_game(savegame: SaveGame)
signal open_settings(new_game: bool)
@onready var new_game_button: Button = $PanelContainer/NewGameButton
@onready var continue_button: Button = $PanelContainer/ContinueGameButton
@onready var load_game_button: Button = $PanelContainer/LoadGameButton
@onready var settings_button: Button = $PanelContainer/SettingsButton
@onready var quit_button: Button = $PanelContainer/QuitButton
@onready var save_game_handle: Control = %SaveGameHandle
@export var save_game_exists: bool = false:
set(value):
save_game_exists = value
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
new_game_button.pressed.connect(func():
save_game_handle.show()
)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View File

@ -0,0 +1,86 @@
class_name SaveGameDisplay extends Button
func _init(save: SaveGame, id: int) -> void:
var base_container:= HBoxContainer.new()
base_container.alignment = BoxContainer.ALIGNMENT_CENTER
add_child(base_container)
var texture:= TextureRect.new()
texture.texture = save.thumbnail
texture.size_flags_vertical = Control.SIZE_SHRINK_CENTER
base_container.add_child(texture)
var heading_split:= HSplitContainer.new()
var heading:= Label.new()
heading.text = "Slot %d" % id
heading.theme_type_variation = "HeaderLarge"
var localised_date_time: String
var localised_weekday: PackedStringArray
match TranslationServer.get_locale():
"de":
localised_weekday = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
localised_date_time = "%s, %d.%d.%d um %d:%02d" % [localised_weekday[save.last_saved["weekday"]],
save.last_saved["day"],
save.last_saved["month"],
save.last_saved["year"],
save.last_saved["hour"],
save.last_saved["minute"]
]
_:
localised_weekday = ["Monday", "Tuseday", "Wensday", "Thursday", "Friday", "Saturday", "Sunday"]
localised_date_time = "%s, %d/%d/%d - %d:%02d (%s)" % [localised_weekday[save.last_saved["weekday"]],
save.last_saved["day"],
save.last_saved["month"],
save.last_saved["year"],
save.last_saved["hour"] % 12 if save.last_saved["hour"] % 12 > 1 else 12 if save.last_saved["hour"] == 12 or save.last_saved["minute"] == 0 else 0,
save.last_saved["minute"],
"AM" if save.last_saved["hour"] < 12 else "PM"]
var time:= Label.new()
time.text = localised_date_time if not save.current_room == 0 else "Start new game."
var info:= VBoxContainer.new()
base_container.add_child(info)
info.add_child(heading_split)
heading_split.add_child(heading)
heading_split.add_child(time)
var room:= Label.new()
room.theme_type_variation = "HeaderMedium"
match save.current_room:
State.rooms.MENU:
room.text = "Empty Slot"
State.rooms.DRAVEN:
room.text = "Intro Sequence"
State.rooms.YOUTH:
room.text = "Inside youth room."
State.rooms.TRANSITION_VOL:
room.text = "Transitioning to voluntary year."
State.rooms.VOLUNTARY:
room.text = "Exploring social service year."
State.rooms.TRANSITION_UNI:
room.text = "Transitioning to university."
State.rooms.UNIVERSITY:
room.text = "Exploring dorm room."
State.rooms.ENDING:
room.text = "Ending"
var state: = Label.new()
state.text = ("""
Mementos collected: 1/4
Connections found: 1/8
Secrets found: 1/4
""").strip_edges()
info.add_child(room)
info.add_child(state)
info.size_flags_vertical = Control.SIZE_SHRINK_CENTER
custom_minimum_size = base_container.get_combined_minimum_size() + Vector2(64, 32)
theme_type_variation = "SaveButton"

View File

@ -0,0 +1,25 @@
@tool
extends CenterContainer
@export var new_game: bool = false:
set(value):
new_game = value
@export var save_1: SaveGame = SaveGame.new()
@export var save_2: SaveGame = SaveGame.new()
@export var save_3: SaveGame = SaveGame.new()
@export var update_display: bool:
set(value):
display()
func _ready() -> void:
display()
func display():
for child in get_children():
child.free()
add_child(SaveGameDisplay.new(save_1, 1))
add_child(SaveGameDisplay.new(save_2, 2))
add_child(SaveGameDisplay.new(save_3, 3))

View File

@ -1,4 +1,4 @@
extends TabBar extends VBoxContainer
signal changed signal changed

View File

@ -77,7 +77,7 @@ func _on_focus_exit():
get_line_edit().remove_theme_stylebox_override(\"normal\") get_line_edit().remove_theme_stylebox_override(\"normal\")
" "
[node name="Video Settings" type="TabBar"] [node name="Video Settings" type="VBoxContainer"]
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
@ -85,58 +85,50 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_sii8g") script = ExtResource("1_sii8g")
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderLarge" theme_type_variation = &"HeaderLarge"
text = "Video Settings" text = "Video Settings"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"] [node name="GridContainer" type="GridContainer" parent="."]
layout_mode = 2 layout_mode = 2
columns = 2 columns = 2
[node name="General" type="Label" parent="VBoxContainer/GridContainer"] [node name="General" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderMedium" theme_type_variation = &"HeaderMedium"
text = "General" text = "General"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/GridContainer"] [node name="HSeparator" type="HSeparator" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
[node name="Preset" type="Label" parent="VBoxContainer/GridContainer"] [node name="Preset" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "apply preset" text = "apply preset"
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/GridContainer"] [node name="HBoxContainer2" type="HBoxContainer" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
[node name="PerformancePreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"] [node name="PerformancePreset" type="Button" parent="GridContainer/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "Performance" text = "Performance"
[node name="BalancedPreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"] [node name="BalancedPreset" type="Button" parent="GridContainer/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "Balanced" text = "Balanced"
[node name="QualityPreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"] [node name="QualityPreset" type="Button" parent="GridContainer/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "Quality" text = "Quality"
[node name="Label" type="Label" parent="VBoxContainer/GridContainer"] [node name="Label" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Fulscreen Mode" text = "Fulscreen Mode"
[node name="FullscreenMode" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="FullscreenMode" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
@ -147,18 +139,18 @@ popup/item_1/id = 1
popup/item_2/text = "exclusive Fullscreen" popup/item_2/text = "exclusive Fullscreen"
popup/item_2/id = 2 popup/item_2/id = 2
[node name="Scale_Label" type="Label" parent="VBoxContainer/GridContainer"] [node name="Scale_Label" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Rendering Scale" text = "Rendering Scale"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/GridContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
[node name="Button" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer"] [node name="Button" type="Button" parent="GridContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "reset" text = "reset"
[node name="RenderScale" type="SpinBox" parent="VBoxContainer/GridContainer/HBoxContainer"] [node name="RenderScale" type="SpinBox" parent="GridContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
focus_mode = 2 focus_mode = 2
@ -172,27 +164,27 @@ custom_arrow_step = 0.25
select_all_on_focus = true select_all_on_focus = true
script = SubResource("GDScript_24hb5") script = SubResource("GDScript_24hb5")
[node name="Label3" type="Label" parent="VBoxContainer/GridContainer"] [node name="Label3" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Super Resolution" text = "Super Resolution"
[node name="SuperResolution" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="SuperResolution" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 0 selected = 0
item_count = 3 item_count = 3
popup/item_0/text = "disabled" popup/item_0/text = "disabled"
popup/item_1/text = "FSR 1.0" popup/item_1/text = " "
popup/item_1/id = 1 popup/item_1/id = 1
popup/item_2/text = "FSR 2.2" popup/item_2/text = "FSR 2.2"
popup/item_2/id = 2 popup/item_2/id = 2
[node name="EnableFps" type="CheckBox" parent="VBoxContainer/GridContainer"] [node name="EnableFps" type="CheckBox" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "limit FPS" text = "limit FPS"
[node name="MaxFps" type="SpinBox" parent="VBoxContainer/GridContainer"] [node name="MaxFps" type="SpinBox" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
focus_mode = 2 focus_mode = 2
@ -204,36 +196,36 @@ suffix = " "
script = SubResource("GDScript_24hb5") script = SubResource("GDScript_24hb5")
repeat_multiplier = 5 repeat_multiplier = 5
[node name="Rendering" type="Label" parent="VBoxContainer/GridContainer"] [node name="Rendering" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
theme_type_variation = &"HeaderMedium" theme_type_variation = &"HeaderMedium"
text = "Rendering" text = "Graphic Fidelity"
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer/GridContainer"] [node name="HSeparator2" type="HSeparator" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
[node name="Label4" type="Label" parent="VBoxContainer/GridContainer"] [node name="Label4" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Lighting Quality" text = "Lighting Quality"
[node name="LightingQuality" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="LightingQuality" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
item_count = 4 item_count = 4
popup/item_0/text = "minimum" popup/item_0/text = "minimum"
popup/item_1/text = "low SDGI" popup/item_1/text = "low (SDF Global Illumination)"
popup/item_1/id = 1 popup/item_1/id = 1
popup/item_2/text = "medium SDGI and SI" popup/item_2/text = "medium (SDF and Screen Space Global Illumination)"
popup/item_2/id = 2 popup/item_2/id = 2
popup/item_3/text = "high SDGI and SI" popup/item_3/text = "high (SDF and Screen Space Global Illumination)"
popup/item_3/id = 3 popup/item_3/id = 3
[node name="ShadowLabel" type="Label" parent="VBoxContainer/GridContainer"] [node name="ShadowLabel" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Shadow Quality" text = "Shadow Quality"
[node name="ShadowQuality" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="ShadowQuality" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
@ -244,11 +236,11 @@ popup/item_1/id = 1
popup/item_2/text = "quality" popup/item_2/text = "quality"
popup/item_2/id = 2 popup/item_2/id = 2
[node name="FilterLabel" type="Label" parent="VBoxContainer/GridContainer"] [node name="FilterLabel" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Texture Filtering" text = "Texture Filtering"
[node name="TextureFiltering" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="TextureFiltering" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
@ -265,11 +257,11 @@ popup/item_4/id = 4
popup/item_5/text = "16x (slowest)" popup/item_5/text = "16x (slowest)"
popup/item_5/id = 5 popup/item_5/id = 5
[node name="AlaisingLabel" type="Label" parent="VBoxContainer/GridContainer"] [node name="AlaisingLabel" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "Anti Aliasing" text = "Anti Aliasing"
[node name="AntiAlaising" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="AntiAlaising" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
@ -282,11 +274,11 @@ popup/item_2/id = 2
popup/item_3/text = "8x MSAA" popup/item_3/text = "8x MSAA"
popup/item_3/id = 3 popup/item_3/id = 3
[node name="SyncLabel" type="Label" parent="VBoxContainer/GridContainer"] [node name="SyncLabel" type="Label" parent="GridContainer"]
layout_mode = 2 layout_mode = 2
text = "v-Sync" text = "v-Sync"
[node name="vSync" type="OptionButton" parent="VBoxContainer/GridContainer"] [node name="vSync" type="OptionButton" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
selected = 1 selected = 1
@ -299,54 +291,48 @@ popup/item_2/id = 2
popup/item_3/text = "Letterbox" popup/item_3/text = "Letterbox"
popup/item_3/id = 3 popup/item_3/id = 3
[node name="ExitButton" type="Button" parent="VBoxContainer/GridContainer"] [node name="ExitButton" type="Button" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "close" text = "close"
[node name="ConfirmButton" type="Button" parent="VBoxContainer/GridContainer"] [node name="ConfirmButton" type="Button" parent="GridContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "save and apply" text = "save and apply"
[node name="Popup" type="Popup" parent="."] [node name="Popup" type="Popup" parent="GridContainer/ConfirmButton"]
scaling_3d_scale = 0.6
initial_position = 2 initial_position = 2
size = Vector2i(546, 123) size = Vector2i(546, 123)
[node name="VBoxContainer" type="VBoxContainer" parent="Popup"] [node name="VBoxContainer" type="VBoxContainer" parent="GridContainer/ConfirmButton/Popup"]
offset_left = 113.0 offset_left = 113.0
offset_right = 153.0 offset_right = 153.0
offset_bottom = 40.0 offset_bottom = 40.0
[node name="Label" type="Label" parent="Popup/VBoxContainer"] [node name="Label" type="Label" parent="GridContainer/ConfirmButton/Popup/VBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Settings have been modified. text = "Settings have been modified.
Do you really want to leave without saving?" Do you really want to leave without saving?"
horizontal_alignment = 1 horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Popup/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="GridContainer/ConfirmButton/Popup/VBoxContainer"]
layout_mode = 2 layout_mode = 2
alignment = 1 alignment = 1
[node name="ConfirmExit" type="Button" parent="Popup/VBoxContainer/HBoxContainer"] [node name="ConfirmExit" type="Button" parent="GridContainer/ConfirmButton/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "leave" text = "leave"
[node name="ConfirmSave" type="Button" parent="Popup/VBoxContainer/HBoxContainer"] [node name="ConfirmSave" type="Button" parent="GridContainer/ConfirmButton/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "save" text = "save"
[node name="ConfirmAbort" type="Button" parent="Popup/VBoxContainer/HBoxContainer"] [node name="ConfirmAbort" type="Button" parent="GridContainer/ConfirmButton/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "abort" text = "abort"
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/PerformancePreset" to="." method="_on_performance_preset_pressed"] [connection signal="pressed" from="GridContainer/HBoxContainer/Button" to="GridContainer/HBoxContainer/RenderScale" method="reset"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/BalancedPreset" to="." method="_on_balanced_preset_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/QualityPreset" to="." method="_on_quality_preset_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer/Button" to="VBoxContainer/GridContainer/HBoxContainer/RenderScale" method="reset"]
[connection signal="pressed" from="VBoxContainer/GridContainer/ExitButton" to="." method="_on_exit_button_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/ConfirmButton" to="." method="_on_confirm_button_pressed"]

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=10 format=3 uid="uid://gldtxysavetf"] [gd_scene load_steps=9 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="Theme" uid="uid://dla4kae5kbwdh" path="res://logic-scenes/themes/system.theme" id="1_ot7jp"]
[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"] [ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="5_7c77g"]
@ -169,21 +170,6 @@ func _ready():
grab_focus() grab_focus()
" "
[sub_resource type="ButtonGroup" id="ButtonGroup_v7ly6"]
[sub_resource type="GDScript" id="GDScript_rhtho"]
script/source = "extends Button
func _ready():
self.connect(\"toggled\", Callable(self, \"_on_toggled\"))
func _on_toggled(was_button_pressed: bool):
if get_parent().get_child(1).visible == false:
get_parent().get_child(1).visible = was_button_pressed
else:
get_parent().get_child(1).visible = false
"
[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
@ -237,12 +223,13 @@ 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 = 2
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 = SubResource("GDScript_ia432")
[node name="physical Accessibility" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"] [node name="physical Accessibility" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"]
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 0 metadata/_tab_index = 0
@ -369,141 +356,11 @@ layout_mode = 2
disabled = true disabled = true
text = "go back" text = "go back"
[node name="Content Notes" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"] [node name="Content Notes" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer" instance=ExtResource("3_fso6q")]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
metadata/_tab_index = 1
[node name="Label" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"]
layout_mode = 2
text = "This Game deals with Heavy Topics."
horizontal_alignment = 1
[node name="show content Notes" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"]
layout_mode = 2
text = "I would like to know more."
[node name="ScrollContainer" type="ScrollContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"]
custom_minimum_size = Vector2(0, 400)
layout_mode = 2
follow_focus = true
horizontal_scroll_mode = 0
[node name="Content Notes" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer"]
visible = false visible = false
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3
[node name="VBoxContainer2" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer2"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "Is this game for or about me?"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer2"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
bbcode_enabled = true
text = "[ul]
This game tells one story about one fictional character.
This character was desiged to tell an honest and acsssible 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 exeriences 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 exerpiences about subjects, where betalars could not.
[/ul]"
fit_content = true
[node name="VBoxContainer3" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer3"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "What may be difficult about the premise?"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer3"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
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."
fit_content = true
[node name="VBoxContainer4" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer4"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "What are the game's topics? (Content Notes)"
script = SubResource("GDScript_rhtho")
[node name="RichTextLabel" type="RichTextLabel" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer4"]
visible = false
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
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."
fit_content = true
[node name="VBoxContainer5" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes"]
layout_mode = 2
[node name="Button" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5"]
layout_mode = 2
toggle_mode = true
button_group = SubResource("ButtonGroup_v7ly6")
text = "Mental Health Acessibility Options"
script = SubResource("GDScript_rhtho")
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5"]
layout_mode = 2
[node name="RichTextLabel2" type="RichTextLabel" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
custom_minimum_size = Vector2(512, 0)
layout_mode = 2
bbcode_enabled = true
text = "[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]"
fit_content = true
[node name="content_notes" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
layout_mode = 2
text = "show content notes during the game"
[node name="allow_skipping" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
layout_mode = 2
text = "allow me to skip scenes"
[node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 10
[node name="Next" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/navbuttons"]
layout_mode = 2
text = "okay"
[node name="previous" type="Button" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/navbuttons"]
layout_mode = 2
text = "go back"
[node name="Managing Expectations" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"] [node name="Managing Expectations" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer"]
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 2 metadata/_tab_index = 2
@ -588,12 +445,6 @@ text = "I never put in much effort for Homework"
[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList2" to="." method="_on_subtitle_option_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/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/physical Accessibility/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes" method="show"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" method="set_disabled" binds= [true]]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer/content_notes" to="." method="_on_content_notes_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer/allow_skipping" to="." method="_on_provide_summaries_toggled"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/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

@ -1,11 +1,300 @@
[gd_scene load_steps=5 format=3 uid="uid://b51wdql4mby47"] [gd_scene load_steps=19 format=3 uid="uid://b51wdql4mby47"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/easy-handwriting.theme" id="1_2dg4n"] [ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/easy-handwriting.theme" id="1_2dg4n"]
[ext_resource type="Script" path="res://logic-scenes/main menu/main_menu.gd" id="2_rm576"]
[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://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="3_xb2np"]
[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://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="Script" path="res://logic-scenes/main menu/save_game_list.gd" id="8_o0cpj"]
[ext_resource type="Script" path="res://dev-util/savegame.gd" id="9_hb671"]
[ext_resource type="Texture2D" uid="uid://bk5ja14r7r6i4" path="res://import/interface-elements/empty_save_slot.png" id="10_v8xkt"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_njt06"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_njt06"]
[sub_resource type="Animation" id="Animation_3pjwp"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Control/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Control/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.26885]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 0.57)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_i4c5w"]
resource_name = "reveal"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Control/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.4, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Control/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333333, 1.76667),
"transitions": PackedFloat32Array(0.353554, 1),
"update": 0,
"values": [0.610865, 0.347321]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.266667, 0.533333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.866667),
"transitions": PackedFloat32Array(0.277392, 1),
"update": 0,
"values": [Vector2(1, 0.57), Vector2(1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_a3iyq"]
resource_name = "vanish"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../..:self_modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.333333, 0.633333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../..:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../Control/decoration:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.133333, 1.46667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../../Control/decoration:rotation")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.266667, 1.43333),
"transitions": PackedFloat32Array(1, 2.21914, 1),
"update": 0,
"values": [0.347507, 0.174533, 1.03847]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("..:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.1, 0.433333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 1.5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lmxul"]
_data = {
"RESET": SubResource("Animation_3pjwp"),
"reveal": SubResource("Animation_i4c5w"),
"vanish": SubResource("Animation_a3iyq")
}
[sub_resource type="Resource" id="Resource_7b5jk"]
script = ExtResource("9_hb671")
current_room = 0
mementos_complete = 0
thumbnail = ExtResource("10_v8xkt")
last_saved = {
"day": 30,
"dst": true,
"hour": 17,
"minute": 17,
"month": 9,
"second": 48,
"weekday": 1,
"year": 2024
}
[sub_resource type="Resource" id="Resource_ew63c"]
script = ExtResource("9_hb671")
current_room = 0
mementos_complete = 0
thumbnail = ExtResource("10_v8xkt")
last_saved = {
"day": 30,
"dst": true,
"hour": 17,
"minute": 17,
"month": 9,
"second": 48,
"weekday": 1,
"year": 2024
}
[sub_resource type="Resource" id="Resource_nnc2y"]
script = ExtResource("9_hb671")
current_room = 0
mementos_complete = 0
thumbnail = ExtResource("10_v8xkt")
last_saved = {
"day": 30,
"dst": true,
"hour": 17,
"minute": 17,
"month": 9,
"second": 48,
"weekday": 1,
"year": 2024
}
[node name="Main Menu" type="Panel"] [node name="Main Menu" type="Panel"]
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@ -14,6 +303,7 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
theme = ExtResource("1_2dg4n") theme = ExtResource("1_2dg4n")
theme_override_styles/panel = SubResource("StyleBoxEmpty_njt06") theme_override_styles/panel = SubResource("StyleBoxEmpty_njt06")
script = ExtResource("2_rm576")
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1 layout_mode = 1
@ -38,30 +328,38 @@ offset_top = 70.0
offset_right = 319.0 offset_right = 319.0
offset_bottom = 270.0 offset_bottom = 270.0
[node name="new_game" type="Button" parent="PanelContainer"] [node name="NewGameButton" type="Button" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
text = "new Game" text = "new Game"
[node name="continue" type="Button" parent="PanelContainer"] [node name="ContinueGameButton" type="Button" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
text = "continue" text = "continue"
[node name="load" type="Button" parent="PanelContainer"] [node name="LoadGameButton" type="Button" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
text = "load" text = "load"
[node name="settings" type="MenuButton" parent="PanelContainer"] [node name="SettingsButton" type="MenuButton" parent="PanelContainer"]
layout_mode = 2 layout_mode = 2
text = "Settings" text = "settings"
flat = false flat = false
item_count = 3 item_count = 4
popup/item_0/text = "Video" popup/item_0/text = "Video"
popup/item_1/text = "Accessibility" popup/item_1/text = "Accessibility"
popup/item_1/id = 1 popup/item_1/id = 1
popup/item_2/text = "Gameplay" popup/item_2/text = "Gameplay"
popup/item_2/id = 2 popup/item_2/id = 2
popup/item_3/text = "Content Notes"
popup/item_3/id = 3
[node name="PanelContainer2" type="PanelContainer" parent="."] [node name="QuitButton" type="Button" parent="PanelContainer"]
layout_mode = 2
text = "quit"
[node name="SettingsPopup" type="PanelContainer" parent="."]
visible = false
self_modulate = Color(1, 1, 1, 0)
layout_mode = 1 layout_mode = 1
anchors_preset = 8 anchors_preset = 8
anchor_left = 0.5 anchor_left = 0.5
@ -69,19 +367,70 @@ anchor_top = 0.5
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
offset_left = -474.0 offset_left = -474.0
offset_top = -420.0 offset_top = -438.0
offset_right = 295.0 offset_right = 293.0
offset_bottom = 316.0 offset_bottom = 335.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
scale = Vector2(1, 0.57)
[node name="TabContainer" type="TabContainer" parent="PanelContainer2"] [node name="AnimationPlayer" type="AnimationPlayer" parent="SettingsPopup"]
root_node = NodePath("../TabContainer/Video Settings")
libraries = {
"": SubResource("AnimationLibrary_lmxul")
}
autoplay = "RESET"
[node name="Control" type="Control" parent="SettingsPopup"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="decoration" type="PanelContainer" parent="SettingsPopup/Control"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
offset_left = -374.0
offset_top = -378.5
offset_right = 365.0
offset_bottom = 374.5
grow_horizontal = 2
grow_vertical = 2
rotation = 1.26885
pivot_offset = Vector2(374, 378.5)
[node name="TabContainer" type="TabContainer" parent="SettingsPopup"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2 layout_mode = 2
current_tab = 0 current_tab = 0
use_hidden_tabs_for_min_size = true use_hidden_tabs_for_min_size = true
[node name="Video Settings" parent="PanelContainer2/TabContainer" instance=ExtResource("3_f0dcd")] [node name="Video Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("3_f0dcd")]
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 0 metadata/_tab_index = 0
[connection signal="pressed" from="PanelContainer/new_game" to="." method="hide"] [node name="Audio Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("4_o07mg")]
visible = false
layout_mode = 2
[node name="Gameplay Settings" parent="SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")]
visible = false
layout_mode = 2
metadata/_tab_index = 2
[node name="Content Notes" parent="SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")]
visible = false
layout_mode = 2
metadata/_tab_index = 3
[node name="SaveGameHandle" type="CenterContainer" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("8_o0cpj")
save_1 = SubResource("Resource_7b5jk")
save_2 = SubResource("Resource_ew63c")
save_3 = SubResource("Resource_nnc2y")

View File

@ -1,17 +1,50 @@
@tool @tool
extends Node extends Node
# For Startup Scene:
var screen_reader:bool = false # Screenreader #region configuration
var disable_rendering: bool = false # show nav button @export_file var user_settings_path:String = "usr://user_settings.json"
var simplified_navigation:bool = false # simplified controls
var show_navigation_buttons: bool = false # show nav ui @export_group("Acessability")
var enable_subtitles: bool = false # ItemList2 @export var screen_reader_enabled:bool = false
var enable_closed_caption: bool = false # ItemList2 @export var rendering_disabled: bool = false
var reduce_motion: bool = false # ? @export var use_simplified_navigation:bool = false
var streaming_content_notes: bool = false # continue/CheckBox @export var show_navigation_buttons: bool = false
var show_content_notes: bool = false # ContentNotes/.../Checkbox @export_enum("disabled", "text", "cc") var subtitles: int = false
var provide_summaries: bool = false # ContentNotes/.../Checkbox2 @export var reduce_motion: bool = false
var allow_skipping: bool = false @export var show_content_notes: bool = false
@export var provide_summaries: bool = false
@export var allow_skipping: bool = false
@export_group("AudioSettings")
@export var main_volume:float = 1:
set(volume):
main_volume = volume
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear_to_db(volume))
@export var sfx_muted:bool = false:
set(mute):
sfx_muted = mute
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("sfx"), linear_to_db(mute))
@export var sfx_volume:float = 1:
set(volume):
sfx_volume = volume
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("sfx"), linear_to_db(volume/2))
@export var music_muted:bool = false:
set(mute):
sfx_muted = mute
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("sfx"), linear_to_db(mute))
@export var music_volume:float = 1:
set(volume):
music_volume = volume
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("music"), linear_to_db(volume/2.5))
@export var speech_volume: float = 1:
set(volume):
speech_volume = volume
AudioServer.set_bus_volume_db(AudioServer.get_bus_index("text"), linear_to_db(volume))
@export_group("Gameplay Settings")
@export var input_sensitivity: float
@export var inverty_y_axis: bool
@export_enum("off", "top_left", "top_right", "bottom_left", "bottom_right") var stream_overlay_position: int
var ssil_enable:bool = false: var ssil_enable:bool = false:
set(value): set(value):
@ -33,12 +66,68 @@ var current_main_theme:Theme = preload("res://logic-scenes/themes/easy-handwriti
current_main_theme = theme current_main_theme = theme
emit_signal("theme_changed", theme) emit_signal("theme_changed", theme)
func load_user_settings():
if FileAccess.file_exists(user_settings_path):
var file = FileAccess.open(user_settings_path, FileAccess.READ)
var raw_json = FileAccess.get_file_as_string(user_settings_path)
file.close()
var parsed: Dictionary = JSON.parse_string(raw_json)
print(parsed)
for kategory in parsed.keys():
for key in parsed[kategory].keys():
set(key, parsed[key])
else:
if OS.has_feature("macos"):
var out: Array
OS.execute("defaults", ["read", "/Users/$loggedInUser/Library/Preferences/com.apple.universalaccess.plist", "reduceMotion"], out)
if out[0] == "reduce":
reduce_motion = true
func save_settings():
var out_dict = {
"accessability": {
"screen_reader_enabled": screen_reader_enabled,
"rendering_disabled": rendering_disabled,
"use_simplified_navigation": use_simplified_navigation,
"show_navigation_buttons": show_navigation_buttons,
"subtitles": subtitles,
"reduce_motion:": reduce_motion,
"show_content_notes:": show_content_notes,
"provide_summaries:": provide_summaries,
"allow_skipping:": allow_skipping
},
"audio": {
"main_volume": main_volume,
"sfx_muted": sfx_muted,
"sfx_volume": sfx_volume,
"music_muted": music_muted,
"music_volume": music_volume,
"speech_volume": speech_volume
},
"gameplay": {
"input_sensitivity": input_sensitivity,
"inverty_y_axis": inverty_y_axis,
"stream_overlay_position": stream_overlay_position
}
}
var file = FileAccess.open(user_settings_path, FileAccess.WRITE)
file.store_string(JSON.stringify(out_dict))
file.close()
#endregion
func _ready(): func _ready():
for child in get_parent().get_children(): for child in get_parent().get_children():
if "has_stage" in child: if "has_stage" in child:
pass_stage_to(child) pass_stage_to(child)
music_volume = music_volume
# Meta: due to conflicting names with the internal focus handling of godot, a "stage-based" Metaphor is being used to refer to focus handling. #region focus handling (called staging to avoid name colisions)
# Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused. # Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused.
func take_stage(actor: Object, reclaim: bool = false) -> bool: func take_stage(actor: Object, reclaim: bool = false) -> bool:
@ -109,10 +198,19 @@ func transition_stage_to(thief: Object, lock_focus = false):
func queue_for_stage(target: Object, index: int = 1): func queue_for_stage(target: Object, index: int = 1):
stage_list.insert(index, target) stage_list.insert(index, target)
func print_settings(): #endregion
print_debug("Screenreader: ", screen_reader, " / ",
"Disable rendering: ", disable_rendering, " / ", #region play state
"Simplified controls: ", simplified_navigation, " / ",
"Show navigation buttons: ", show_navigation_buttons, " / ", enum rooms {
"Enable subtitles: ", enable_subtitles, " / ", MENU,
"Enable CC: ", enable_closed_caption, " / ") DRAVEN,
YOUTH,
TRANSITION_VOL,
VOLUNTARY,
TRANSITION_UNI,
UNIVERSITY,
ENDING
}
var current_room = rooms.MENU