Code reorganizing

This commit is contained in:
Maurane
2026-02-24 18:01:23 +01:00
parent 450d372775
commit a9698155fa
52 changed files with 1458 additions and 679 deletions
+76
View File
@@ -0,0 +1,76 @@
[gd_scene load_steps=3 format=3 uid="uid://c0kyheol06kes"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="1_6ucym"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jjq8m"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0.629675, 0.629675, 0.629674, 1)
[node name="ConfirmationDialog" type="CanvasLayer"]
layer = 128
[node name="ConfirmationDialog" type="PanelContainer" parent="."]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -75.0
offset_right = 300.0
offset_bottom = 85.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_jjq8m")
[node name="Background" type="ColorRect" parent="ConfirmationDialog"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="ConfirmationDialog"]
layout_mode = 2
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer" type="VBoxContainer" parent="ConfirmationDialog/MarginContainer"]
layout_mode = 2
[node name="ConfirmationText" type="RichTextLabel" parent="ConfirmationDialog/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 3.0
theme_override_fonts/normal_font = ExtResource("1_6ucym")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "Are you sure you want to make this choice ?"
horizontal_alignment = 1
vertical_alignment = 1
[node name="MarginContainer" type="MarginContainer" parent="ConfirmationDialog/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/margin_left = 70
theme_override_constants/margin_right = 70
[node name="HBoxContainer" type="HBoxContainer" parent="ConfirmationDialog/MarginContainer/VBoxContainer/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 70
[node name="YesButton" type="Button" parent="ConfirmationDialog/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = ExtResource("1_6ucym")
theme_override_font_sizes/font_size = 20
text = "YES"
[node name="NoButton" type="Button" parent="ConfirmationDialog/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = ExtResource("1_6ucym")
theme_override_font_sizes/font_size = 20
text = "NO"
+324
View File
@@ -0,0 +1,324 @@
extends CanvasLayer
@onready var next = $UI/SkipContainer/NextButton
@onready var confirmation_mask = $ConfirmationMask
#Signals for progressing through slides
signal next_request
signal next_slide
#Signals for saving and loading
signal save_slot_pressed(save_slot_number: int)
signal load_slot_pressed(load_slot_number: int)
#Signal for going back to main menu
signal main_menu_pressed
#Preloading Confirmation dialog
var confirmation_dialog = preload("res://Scenes/UI/confirmation_dialog.tscn")
#Text settings UI nodes
@export var text_slider: Node
@export var auto_slider: Node
@export var text_counter: Node
@export var auto_counter: Node
@export var autoplay: Node
@export var auto_mask: ColorRect
#Vars and signals for handling text settings
var text_speed: float
var auto_speed: float
var is_auto = false
signal text_value_changed
signal auto_value_changed
#Screen settings UI nodes
@export var display_button: Node
@export var resolution_button: Node
var screen_size = DisplayServer.screen_get_size(DisplayServer.window_get_current_screen()) #Computer screen size
var resolution_size = DisplayServer.screen_get_size(DisplayServer.window_get_current_screen()) #Used for changing screen resolution
var resolution_list: Dictionary = {
0: Vector2i(800,600),
1: Vector2i(1024,768),
2: Vector2i(1280,720),
3: Vector2i(1366,768),
4: Vector2i(1440,900),
5: Vector2i(1600,900),
6: Vector2i(1680,1050),
7: Vector2i(1920,1080)
}
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Connecting signals
#Next Signals
next.pressed.connect(_on_next_pressed)
self.connect("next_request", _on_next_request)
#Menu Signals
$UI/UpperContainer/Menu.pressed.connect(_on_menu_pressed)
$UI/Menu/MarginContainer/VBoxContainer/Resume.pressed.connect(_on_resume_pressed)
$UI/Menu/MarginContainer/VBoxContainer/Save.pressed.connect(_on_save_pressed)
$UI/Menu/MarginContainer/VBoxContainer/Load.pressed.connect(_on_load_pressed)
$UI/Menu/MarginContainer/VBoxContainer/Settings.pressed.connect(_on_settings_pressed)
$UI/Menu/MarginContainer/VBoxContainer/MainMenu.pressed.connect(_on_main_menu_pressed)
$UI/Menu/MarginContainer/VBoxContainer/Quit.pressed.connect(_on_quit_game_pressed)
$UI/Save/MarginContainer/VBoxContainer/Back.pressed.connect(_on_back_pressed)
$UI/Load/MarginContainer/VBoxContainer/Control/Back.pressed.connect(_on_back_pressed)
$UI/Load/MarginContainer/VBoxContainer/Control/BackTitle.pressed.connect(_on_back_title_pressed)
$UI/Settings/MarginContainer/VBoxContainer/Control/Back.pressed.connect(_on_back_pressed)
$UI/Settings/MarginContainer/VBoxContainer/Control/BackTitle.pressed.connect(_on_back_title_pressed)
#Save Slots Signals
$UI/Save/MarginContainer/VBoxContainer/SaveSlot1.pressed.connect(func(): _on_save_slot_pressed(1))
$UI/Save/MarginContainer/VBoxContainer/SaveSlot2.pressed.connect(func(): _on_save_slot_pressed(2))
$UI/Save/MarginContainer/VBoxContainer/SaveSlot3.pressed.connect(func(): _on_save_slot_pressed(3))
$UI/Save/MarginContainer/VBoxContainer/SaveSlot4.pressed.connect(func(): _on_save_slot_pressed(4))
#Load Slots Signals
$UI/Load/MarginContainer/VBoxContainer/LoadSlot1.pressed.connect(func(): _on_load_slot_pressed(1))
$UI/Load/MarginContainer/VBoxContainer/LoadSlot2.pressed.connect(func(): _on_load_slot_pressed(2))
$UI/Load/MarginContainer/VBoxContainer/LoadSlot3.pressed.connect(func(): _on_load_slot_pressed(3))
$UI/Load/MarginContainer/VBoxContainer/LoadSlot4.pressed.connect(func(): _on_load_slot_pressed(4))
#Text settings signals
text_slider.value_changed.connect(_on_text_value_changed)
auto_slider.value_changed.connect(_on_auto_value_changed)
autoplay.pressed.connect(_on_autoplay_pressed)
text_speed = 0.1 / text_slider.value
auto_speed = 0.4 * auto_slider.value
text_counter.text = "[center]" + str(snapped((text_speed * 1000), 1)) + " ms/letter[/center]"
auto_counter.text = "[center]" + str(snapped(auto_speed, 0.01)) + " s delay[/center]"
#Initializes the auto-advance to false
autoplay.button_pressed = false
auto_mask.visible = true
#Screen settings signals and initialization
display_button.item_selected.connect(_on_display_selected)
resolution_button.item_selected.connect(_on_resolution_selected)
for index in resolution_list:
var item_text = str(resolution_list[index].x) + "x" + str(resolution_list[index].y)
resolution_button.add_item(item_text, index)
resolution_button.select(resolution_list.find_key(screen_size)) #Selects the computer resolution as initial screen resolution
#Hiding everything at start
for node in $UI.get_children():
node.hide()
confirmation_mask.visible = false
#Brings up a Confirmation Dialog
func ask_confirmation(function_yes: Callable, function_no: Callable, choice_text: String):
var choice_dialog = confirmation_dialog.instantiate()
add_child(choice_dialog)
var choice_text_label = choice_dialog.get_node("ConfirmationDialog/MarginContainer/VBoxContainer/ConfirmationText")
var choice_yes = choice_dialog.get_node("ConfirmationDialog/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/YesButton")
var choice_no = choice_dialog.get_node("ConfirmationDialog/MarginContainer/VBoxContainer/MarginContainer/HBoxContainer/NoButton")
#Clears the Confirmation Dialog and Remove the Mask no matter what choice is made
choice_yes.pressed.connect(func(): confirmation_mask.visible = false)
choice_yes.pressed.connect(func(): choice_dialog.queue_free())
choice_no.pressed.connect(func(): confirmation_mask.visible = false)
choice_no.pressed.connect(func(): choice_dialog.queue_free())
choice_yes.text = ("YES")
choice_no.text = ("NO")
choice_text_label.text = choice_text
#Connects Choices to their Functions
choice_yes.pressed.connect(function_yes, CONNECT_ONE_SHOT)
if function_no.is_valid():
choice_no.pressed.connect(function_no, CONNECT_ONE_SHOT)
choice_dialog.show()
confirmation_mask.visible = true
#Requests next when the Next Button is pressed
func _on_next_pressed():
next_request.emit()
#Requests next when the space key is pressed
func _input(event):
if event is InputEventKey and event.is_action_released("ui_accept"):
next_request.emit()
#Makes sure fading transitions are done before approving a next request
func _on_next_request():
if Globals.is_transitioning == false:
next_slide.emit()
func _on_menu_pressed():
TransitionScreen.mask.visible = true
$UI/Menu.show()
#Back to the game
func _on_resume_pressed():
TransitionScreen.mask.visible = false
$UI/Menu.hide()
#Shows Save Slots
func _on_save_pressed():
$UI/Menu.hide()
$UI/Save.show()
#Shows Load Slots
func _on_load_pressed():
$UI/Menu.hide()
$UI/Load.show()
$UI/Load/MarginContainer/VBoxContainer/Control/BackTitle.hide()
$UI/Load/MarginContainer/VBoxContainer/Control/Back.show()
#Goes back to Menu
func _on_back_pressed():
$UI/Save.hide()
$UI/Load.hide()
$UI/Settings.hide()
$UI/Menu.show()
#Goes back to title screen
func _on_back_title_pressed():
$UI/Load.hide()
$UI/Settings.hide()
TransitionScreen.mask.visible = false
#Shows Settings Menu
func _on_settings_pressed():
$UI/Menu.hide()
$UI/Settings.show()
$UI/Settings/MarginContainer/VBoxContainer/Control/BackTitle.hide()
$UI/Settings/MarginContainer/VBoxContainer/Control/Back.show()
#Goes back to the main menu
func _on_main_menu_pressed():
#Asking for confirmation
var lambda = func(): main_menu_pressed.emit()
var choice_text = "[center]Go back to main menu ? Unsaved changes will be lost.[/center]"
ask_confirmation(lambda, Callable(), choice_text)
#Quits the game
func _on_quit_game_pressed():
get_tree().quit()
#Emits save_slot signal
func _on_save_slot_pressed(save_slot_number: int):
var save_slot_path = "UI/Save/MarginContainer/VBoxContainer/SaveSlot" + str(save_slot_number)
var save_slot = UI.get_node(save_slot_path)
#Asking for confirmation if replacing existing save
if save_slot.text != "EMPTY":
var lambda = func(): save_slot_pressed.emit(save_slot_number)
var choice_text = "[center]Replace existing save ?[/center]"
ask_confirmation(lambda, Callable(), choice_text)
else:
save_slot_pressed.emit(save_slot_number)
#Emits load_slot signal
func _on_load_slot_pressed(load_slot_number: int):
var load_slot_path = "UI/Load/MarginContainer/VBoxContainer/LoadSlot" + str(load_slot_number)
var load_slot = UI.get_node(load_slot_path)
#Asking for confirmation before loading
if load_slot.text != "EMPTY":
var lambda = func(): load_slot_pressed.emit(load_slot_number)
var choice_text = "[center]Load save ? Any unsaved games will be lost.[/center]"
ask_confirmation(lambda, Callable(), choice_text)
else:
pass
#Changes text_speed value
func _on_text_value_changed(new_value: float):
text_speed = 0.1 / new_value
text_counter.text = "[center]" + str(snapped((text_speed * 1000), 1)) + " ms/letter[/center]"
text_value_changed.emit()
#Changes auto_speed value
func _on_auto_value_changed(new_value: float):
auto_speed = 0.4 * new_value
auto_counter.text = "[center]" + str(snapped(auto_speed, 0.01)) + " s delay[/center]"
auto_value_changed.emit()
#Toggles auto-advance
func _on_autoplay_pressed():
if autoplay.button_pressed:
is_auto = true
auto_mask.visible = false
else:
is_auto = false
auto_mask.visible = true
#Shows selected display
func _on_display_selected(index: int):
match index:
0:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
#Puts the windowed screen in the center of the computer's screen
var screen_center = screen_size / 2
var top_left = screen_center - (resolution_size / 2)
DisplayServer.window_set_size(resolution_size)
await get_tree().process_frame #Waits process_frame to avoid bugs
DisplayServer.window_set_position(top_left)
1:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_MAXIMIZED)
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true)
2:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
print("window setting changed")
#Shows selected resolution
func _on_resolution_selected(index: int):
resolution_size = resolution_list.get(index)
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
#Puts the windowed screen in the center of the computer's screen
var screen_center = screen_size / 2
var top_left = screen_center - (resolution_size / 2)
DisplayServer.window_set_size(resolution_size)
await get_tree().process_frame #Waits process_frame to avoid bugs
DisplayServer.window_set_position(top_left)
+1
View File
@@ -0,0 +1 @@
uid://c0q67t6m1i4dl
+691
View File
@@ -0,0 +1,691 @@
[gd_scene load_steps=7 format=3 uid="uid://dy40jygog8t3k"]
[ext_resource type="Script" uid="uid://c0q67t6m1i4dl" path="res://Scenes/UI/ui.gd" id="1_mg12k"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="2_vb7na"]
[ext_resource type="Texture2D" uid="uid://l7786mlmvet8" path="res://Art/UI/menu_gear.png" id="3_ibj64"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fo2i3"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
[sub_resource type="Theme" id="Theme_27bfm"]
default_font_size = 18
OptionButton/fonts/font = null
[sub_resource type="Theme" id="Theme_k8uqd"]
default_font = ExtResource("2_vb7na")
default_font_size = 16
OptionButton/fonts/font = ExtResource("2_vb7na")
[node name="UILayer" type="CanvasLayer" node_paths=PackedStringArray("text_slider", "auto_slider", "text_counter", "auto_counter", "autoplay", "auto_mask", "display_button", "resolution_button")]
layer = 127
script = ExtResource("1_mg12k")
text_slider = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed/TextSlider")
auto_slider = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed/AutoSlider")
text_counter = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed/TextCounter")
auto_counter = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed/AutoCounter")
autoplay = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay/AutoPlayCheckBox")
auto_mask = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoMask")
display_button = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display/DisplayButton")
resolution_button = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution/ResolutionButton")
[node name="UI" type="Control" parent="."]
z_index = 12
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="Menu" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -125.0
offset_top = -200.0
offset_right = 125.0
offset_bottom = 200.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Menu"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Menu"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 25
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 25
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Menu/MarginContainer"]
layout_mode = 2
[node name="Resume" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "RESUME"
[node name="Save" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "SAVE"
[node name="Load" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "LOAD"
[node name="Settings" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "SETTINGS"
[node name="MainMenu" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "MAIN MENU"
[node name="Quit" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "QUIT GAME"
[node name="Save" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Save"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Save"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 0
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Save/MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 30
bbcode_enabled = true
text = "
[center]SAVE GAME[/center]"
[node name="SaveSlot1" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot2" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot3" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot4" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="Back" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="Load" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Load"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Load"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 0
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Load/MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 30
bbcode_enabled = true
text = "
[center]LOAD GAME[/center]"
[node name="LoadSlot1" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot2" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot3" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot4" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="Control" type="Control" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.7
[node name="Back" type="Button" parent="UI/Load/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="BackTitle" type="Button" parent="UI/Load/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="Settings" type="PanelContainer" parent="UI"]
visible = false
custom_minimum_size = Vector2(1600, 600)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Settings"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Settings"]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 50
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 40
[node name="Settings" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 35
bbcode_enabled = true
text = "[center]SETTINGS[/center]"
[node name="GridContainer" type="GridContainer" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 5.0
columns = 3
[node name="DialogueContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer"]
layout_mode = 2
[node name="DialogueOptions" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]DIALOGUE[/center]"
[node name="TextSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(160, 28)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "TYPING SPEED"
[node name="TextSlider" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="TextCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="Control" type="Control" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="AutoSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
custom_minimum_size = Vector2(160, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "AUTO DELAY"
[node name="AutoSlider" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="AutoCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="AutoMask" type="ColorRect" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.784314)
[node name="AutoPlay" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_constants/separation = 10
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay"]
custom_minimum_size = Vector2(160, 25)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "AUTOPLAY"
[node name="AutoPlayCheckBox" type="CheckBox" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay"]
layout_mode = 2
size_flags_vertical = 4
[node name="ScreenContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer"]
layout_mode = 2
[node name="ScreenSettings" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]SCREEN[/center]"
[node name="Display" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "DISPLAY"
[node name="DisplayButton" type="OptionButton" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
theme = SubResource("Theme_27bfm")
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 16
selected = 2
item_count = 3
popup/item_0/text = "WINDOWED"
popup/item_0/id = 0
popup/item_1/text = "WINDOWED FULLSCREEN"
popup/item_1/id = 1
popup/item_2/text = "FULLSCREEN"
popup/item_2/id = 2
[node name="Resolution" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "RESOLUTION"
[node name="ResolutionButton" type="OptionButton" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
theme = SubResource("Theme_k8uqd")
[node name="SoundContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer"]
layout_mode = 2
[node name="DialogueOptions" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]AUDIO[/center]"
[node name="TextSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "MASTER"
[node name="MasterVolume" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="MasterCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="Control" type="Control" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.7
[node name="Back" type="Button" parent="UI/Settings/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="BackTitle" type="Button" parent="UI/Settings/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="UpperContainer" type="HBoxContainer" parent="UI"]
layout_mode = 0
offset_right = 1849.0
offset_bottom = 85.0
[node name="Menu" type="Button" parent="UI/UpperContainer"]
custom_minimum_size = Vector2(0, 80)
layout_mode = 2
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 30
theme_override_icons/icon = ExtResource("3_ibj64")
[node name="SkipContainer" type="HBoxContainer" parent="UI"]
visible = false
layout_mode = 0
offset_left = 1565.0
offset_top = 997.0
offset_right = 1895.0
offset_bottom = 1059.0
[node name="NextButton" type="Button" parent="UI/SkipContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = " Press Space to Next "
[node name="ConfirmationMask" type="ColorRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_force_pass_scroll_events = false
color = Color(0, 0, 0, 0.784314)
+691
View File
@@ -0,0 +1,691 @@
[gd_scene load_steps=7 format=3 uid="uid://dy40jygog8t3k"]
[ext_resource type="Script" uid="uid://c0q67t6m1i4dl" path="res://Scenes/UI/ui.gd" id="1_mg12k"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="2_vb7na"]
[ext_resource type="Texture2D" uid="uid://l7786mlmvet8" path="res://Art/UI/menu_gear.png" id="3_ibj64"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fo2i3"]
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
[sub_resource type="Theme" id="Theme_27bfm"]
default_font_size = 18
OptionButton/fonts/font = null
[sub_resource type="Theme" id="Theme_k8uqd"]
default_font = ExtResource("2_vb7na")
default_font_size = 16
OptionButton/fonts/font = ExtResource("2_vb7na")
[node name="UILayer" type="CanvasLayer" node_paths=PackedStringArray("text_slider", "auto_slider", "text_counter", "auto_counter", "autoplay", "auto_mask", "display_button", "resolution_button")]
layer = 127
script = ExtResource("1_mg12k")
text_slider = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed/TextSlider")
auto_slider = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed/AutoSlider")
text_counter = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed/TextCounter")
auto_counter = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed/AutoCounter")
autoplay = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay/AutoPlayCheckBox")
auto_mask = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoMask")
display_button = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display/DisplayButton")
resolution_button = NodePath("UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution/ResolutionButton")
[node name="UI" type="Control" parent="."]
z_index = 12
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="Menu" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -125.0
offset_top = -200.0
offset_right = 125.0
offset_bottom = 200.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Menu"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Menu"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 25
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 25
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Menu/MarginContainer"]
layout_mode = 2
[node name="Resume" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "RESUME"
[node name="Save" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "SAVE"
[node name="Load" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "LOAD"
[node name="Settings" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "SETTINGS"
[node name="MainMenu" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "MAIN MENU"
[node name="Quit" type="Button" parent="UI/Menu/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "QUIT GAME"
[node name="Save" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Save"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Save"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 0
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Save/MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 30
bbcode_enabled = true
text = "
[center]SAVE GAME[/center]"
[node name="SaveSlot1" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot2" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot3" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="SaveSlot4" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="Back" type="Button" parent="UI/Save/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="Load" type="PanelContainer" parent="UI"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Load"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Load"]
layout_mode = 2
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 25
theme_override_constants/margin_bottom = 0
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Load/MarginContainer"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 30
bbcode_enabled = true
text = "
[center]LOAD GAME[/center]"
[node name="LoadSlot1" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot2" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot3" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="LoadSlot4" type="Button" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 27
text = "EMPTY"
[node name="Control" type="Control" parent="UI/Load/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.7
[node name="Back" type="Button" parent="UI/Load/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="BackTitle" type="Button" parent="UI/Load/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="Settings" type="PanelContainer" parent="UI"]
visible = false
custom_minimum_size = Vector2(1600, 600)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -300.0
offset_right = 200.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_fo2i3")
[node name="Background" type="ColorRect" parent="UI/Settings"]
layout_mode = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="UI/Settings"]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 50
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 50
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 40
[node name="Settings" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 35
bbcode_enabled = true
text = "[center]SETTINGS[/center]"
[node name="GridContainer" type="GridContainer" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 5.0
columns = 3
[node name="DialogueContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer"]
layout_mode = 2
[node name="DialogueOptions" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]DIALOGUE[/center]"
[node name="TextSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(160, 28)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "TYPING SPEED"
[node name="TextSlider" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="TextCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="Control" type="Control" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="AutoSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
custom_minimum_size = Vector2(160, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "AUTO DELAY"
[node name="AutoSlider" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="AutoCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control/AutoSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="AutoMask" type="ColorRect" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/Control"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.784314)
[node name="AutoPlay" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_constants/separation = 10
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay"]
custom_minimum_size = Vector2(160, 25)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "AUTOPLAY"
[node name="AutoPlayCheckBox" type="CheckBox" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/DialogueContainer/VBoxContainer2/DialogueOptions/VBoxContainer/AutoPlay"]
layout_mode = 2
size_flags_vertical = 4
[node name="ScreenContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer"]
layout_mode = 2
[node name="ScreenSettings" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]SCREEN[/center]"
[node name="Display" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "DISPLAY"
[node name="DisplayButton" type="OptionButton" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Display"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
theme = SubResource("Theme_27bfm")
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 16
selected = 2
item_count = 3
popup/item_0/text = "WINDOWED"
popup/item_0/id = 0
popup/item_1/text = "WINDOWED FULLSCREEN"
popup/item_1/id = 1
popup/item_2/text = "FULLSCREEN"
popup/item_2/id = 2
[node name="Resolution" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "RESOLUTION"
[node name="ResolutionButton" type="OptionButton" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/ScreenContainer/VBoxContainer2/ScreenSettings/VBoxContainer/Resolution"]
custom_minimum_size = Vector2(250, 0)
layout_mode = 2
theme = SubResource("Theme_k8uqd")
[node name="SoundContainer" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer2" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer"]
layout_mode = 2
[node name="DialogueOptions" type="MarginContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2"]
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions"]
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 25
bbcode_enabled = true
text = "[center]AUDIO[/center]"
[node name="TextSpeed" type="HBoxContainer" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer"]
custom_minimum_size = Vector2(0, 50)
layout_mode = 2
[node name="RichTextLabel" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(140, 28)
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "MASTER"
[node name="MasterVolume" type="HSlider" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
size_flags_stretch_ratio = 4.0
min_value = 1.0
max_value = 10.0
value = 5.0
tick_count = 10
ticks_on_borders = true
[node name="MasterCounter" type="RichTextLabel" parent="UI/Settings/MarginContainer/VBoxContainer/GridContainer/SoundContainer/VBoxContainer2/DialogueOptions/VBoxContainer/TextSpeed"]
custom_minimum_size = Vector2(150, 25)
layout_mode = 2
size_flags_vertical = 4
theme_override_fonts/normal_font = ExtResource("2_vb7na")
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
[node name="Control" type="Control" parent="UI/Settings/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.7
[node name="Back" type="Button" parent="UI/Settings/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="BackTitle" type="Button" parent="UI/Settings/MarginContainer/VBoxContainer/Control"]
custom_minimum_size = Vector2(80, 40)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 6
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = "BACK"
[node name="UpperContainer" type="HBoxContainer" parent="UI"]
layout_mode = 0
offset_right = 1849.0
offset_bottom = 85.0
[node name="Menu" type="Button" parent="UI/UpperContainer"]
custom_minimum_size = Vector2(0, 80)
layout_mode = 2
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 30
theme_override_icons/icon = ExtResource("3_ibj64")
[node name="SkipContainer" type="HBoxContainer" parent="UI"]
visible = false
layout_mode = 0
offset_left = 1565.0
offset_top = 997.0
offset_right = 1895.0
offset_bottom = 1059.0
[node name="NextButton" type="Button" parent="UI/SkipContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("2_vb7na")
theme_override_font_sizes/font_size = 20
text = " Press Space to Next "
[node name="ConfirmationMask" type="ColorRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_force_pass_scroll_events = false
color = Color(0, 0, 0, 0.784314)
+18
View File
@@ -0,0 +1,18 @@
[gd_scene load_steps=5 format=3 uid="uid://buoev4bra11fe"]
[ext_resource type="Script" uid="uid://c6kqjqj6cs4wa" path="res://Scenes/main/main.gd" id="1_xvxb3"]
[ext_resource type="PackedScene" uid="uid://cahspuhi43bx7" path="res://Scenes/title_screen/title_screen.tscn" id="2_uea07"]
[ext_resource type="PackedScene" uid="uid://chytk2cctjk3x" path="res://Scenes/screening_desk/screening_desk.tscn" id="3_2vfcy"]
[ext_resource type="PackedScene" uid="uid://igkl2384rxt1" path="res://Scenes/text_screen/text_screens.tscn" id="4_vno88"]
[node name="MainHub" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_xvxb3")
TitleScreen = ExtResource("2_uea07")
ScreeningDesk = ExtResource("3_2vfcy")
TextScreens = ExtResource("4_vno88")
+62
View File
@@ -0,0 +1,62 @@
extends Node
var is_transitioning : bool = false
var day_count : int = 1
var floor_count : int = -1
var patient_count : int = 1
var diagnoses_quota : int = 1
var daily_patient_limit : int = 3
var patient_list = ["42", "43", "44", "45", "46", "47", "48", "49", "50", "51"]
var patients_seen: Array[String]
var patient_id
var interfloor_dialogue = load("res://Dialogues/interfloor.dialogue")
var directives = "\n[center][font_size=22]INSTRUCTIONS[/font_size][/center]
\n\n[font_size=18][color=forest_green]RELEASE[/color] HUMANS, [color=red]TERMINATE[/color] ABNORMALS
\n\nIF A SUBJECT HAS [color=dark_orange]SYMPTOMS[/color] IT SHOULDN'T HAVE,
\n [color=red]IT IS NOT HUMAN[/color]
\n\nREFER TO THE [color=royal_blue]MANUAL[/color] FOR [color=dark_orange]SYMPTOMS[/color] DETAILS
\n\nMAKE ENOUGH [color=green_yellow]ACCURATE DIAGNOSES[/color] IN A ROW
\nTO GET TO THE NEXT FLOOR[/font_size]"
var release_messages: Array[String]
var terminate_messages: Array[String]
var buttons_activated: bool = true
#Signals for screening desk
signal console_message
signal response_chosen(DialogueResponse)
signal clear_patient
signal color_change
signal character_label_color_change
signal start_balloon
signal release_display
signal terminate_display
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
release_messages.resize(3)
terminate_messages.resize(3)
release_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING RELEASE PROTOCOL... -", "green_yellow")
release_messages[1] = Globals.colorize("- RELEASING SUBJECT -", "green_yellow")
release_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("HUMAN", "green") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING RELEASE SEQUENCE", "green_yellow")
terminate_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING TERMINATION PROTOCOL... -", "orange_red")
terminate_messages[1] = Globals.colorize("- TERMINATING SUBJECT -", "orange_red")
terminate_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("ABNORMAL", "red") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING TERMINATION SEQUENCE", "orange_red")
pass
#Gets the current time and day of the year
func get_save_date() -> String:
var dt = Time.get_datetime_dict_from_system()
return "%02d/%02d/%04d, %02d:%02d" % [
dt.month, dt.day, dt.year,
dt.hour, dt.minute
]
#Colorizes a message in BBCode
func colorize(message:String, color: String) -> String:
var colorized_message : String
colorized_message = "[color=" + color + "]" + message + "[/color]"
return colorized_message
+1
View File
@@ -0,0 +1 @@
uid://ea5lvcj6nhqg
+311
View File
@@ -0,0 +1,311 @@
extends Control
@export var TitleScreen: PackedScene
@export var ScreeningDesk: PackedScene
@export var TextScreens: PackedScene
var balloon: Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Adding Scenes
var title_screen = TitleScreen.instantiate()
var screening_desk = ScreeningDesk.instantiate()
var text_screens = TextScreens.instantiate()
add_child(title_screen)
add_child(screening_desk)
add_child(text_screens)
#Naming Scenes
title_screen.name = "TitleScreen"
screening_desk.name = "ScreeningDesk"
text_screens.name = "TextScreens"
#Showing TitleScreen
title_screen.show()
#Connecting Signals
title_screen.connect("new_game_pressed", self._on_new_game_pressed)
UI.connect("save_slot_pressed", self._on_save_slot_pressed)
UI.connect("load_slot_pressed", self._on_load_slot_pressed)
UI.connect("main_menu_pressed", self._on_main_menu_pressed)
UI.connect("text_value_changed", self._on_text_value_changed)
UI.connect("auto_value_changed", self._on_auto_value_changed)
Globals.character_label_color_change.connect(self._on_character_label_color_change)
Globals.start_balloon.connect(self.start_balloon)
#Updating Save/Load Slots Information based on Existing Saves
update_slots()
#Sorting patients by floor
Patient.sort_patients()
# Starts a new game
func _on_new_game_pressed():
#Setting/Resetting game parameters
Globals.day_count = 1
Globals.floor_count = -1
Globals.patient_count = 0
Globals.diagnoses_quota = 1
Globals.daily_patient_limit = 6
Globals.patients_seen.clear()
$ScreeningDesk.journal_layer.update_journal(-1)
# DISABLED FOR NOW SINCE THERE'S NO INTRO ANYMORE
#Offering to skip the introduction
#var choice_text = "Do you wish to skip the introduction ?"
#UI.ask_confirmation(start_day, play_intro, choice_text)
start_day()
#Plays the entire introduction
func play_intro():
#PART IN PROGRESS
#Starting the day
start_day()
#Starts the day
func start_day():
#Hiding Menu for cinematic impact
UI.get_node("UI/UpperContainer").hide()
#Transitioning to day screen
$TextScreens/Day.text = "[center]DAY " + str(Globals.day_count) + "[/center]"
var scenes_to_hide: Array[Node] = [$TitleScreen]
var scenes_to_show: Array[Node] = [$TextScreens, $TextScreens/Day]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
await get_tree().create_timer(1.0).timeout
#Setting up new patient
$ScreeningDesk.accurate_diagnoses = 0 #Resetting accurate_diagnoses value at the day's beginning
$ScreeningDesk.middle_screen.update(Globals.day_count, Globals.floor_count, $ScreeningDesk.accurate_diagnoses, Globals.diagnoses_quota)
#Transitioning to the screening desk
scenes_to_hide = scenes_to_show
scenes_to_show = [$ScreeningDesk, UI, UI.get_node("UI/UpperContainer")]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
#Supervisor Dialogue
$ScreeningDesk.supervisor.dialogue("interfloor_" + str(-Globals.floor_count-1))
await $ScreeningDesk.supervisor.dialogue_finished
$ScreeningDesk.console_screen.display(Globals.directives)
$ScreeningDesk.new_patient()
#Saves game state on the selected save slot
func save_game(save_slot_number:int):
#Setting up save data
var save_data = {
"day_count": Globals.day_count,
"floor_count": Globals.floor_count,
"patient_count": Globals.patient_count,
"diagnoses_quota": Globals.diagnoses_quota,
"daily_patient_limit": Globals.daily_patient_limit,
"patient_list": Globals.patient_list,
"patient_id": Globals.patient_id,
"patients_seen": Globals.patients_seen,
"save_date": Globals.get_save_date()
}
#Creating save file
var file = FileAccess.open("res://Saves/save_" + str(save_slot_number) + ".json", FileAccess.WRITE)
if file:
var json_string = JSON.stringify(save_data)
print(json_string)
file.store_string(json_string)
file.close()
print("Game saved successfully!")
else:
print("Failed to open file for saving.")
#Updating save/load slots information
var save_slot_path = "UI/Save/MarginContainer/VBoxContainer/SaveSlot" + str(save_slot_number)
var load_slot_path = "UI/Load/MarginContainer/VBoxContainer/LoadSlot" + str(save_slot_number)
var save_slot = UI.get_node(save_slot_path)
var load_slot = UI.get_node(load_slot_path)
save_slot.text = "DAY " + str(save_data["day_count"]) + ", PATIENT " + str(save_data["patient_count"]) + "\nSAVE DATE : " + str(save_data["save_date"])
load_slot.text = save_slot.text
#Loads save file from the selected load slot
func load_game(load_slot_number:int):
#CLearing balloon
clear_balloon()
#Hiding loading menus and masks
TransitionScreen.mask.visible = false
UI.get_node("UI/Menu").hide()
UI.get_node("UI/UpperContainer").hide()
UI.get_node("UI/Load").hide()
#Opening save file
var file = FileAccess.open("res://Saves/save_" + str(load_slot_number) + ".json", FileAccess.READ)
if file:
var json_string = file.get_as_text()
file.close()
var load_data = JSON.parse_string(json_string)
if typeof(load_data) == 27: #Checks if loaded data is a Dictionary
print(load_data)
Globals.day_count = load_data["day_count"]
Globals.patient_count = load_data["patient_count"]
Globals.diagnoses_quota = load_data["diagnoses_quota"]
Globals.daily_patient_limit = load_data["daily_patient_limit"]
Globals.patient_list = load_data["patient_list"]
Globals.patient_id = load_data["patient_id"]
Globals.patients_seen = load_data["patients_seen"]
else:
print("Failed to parse Loading Data.")
#Transitioning to loaded Save
var scenes_to_hide = [$TitleScreen, $Bedroom, $TextScreens, $TextScreens/Day, $ScreeningDesk.patient_controls, $ScreeningDesk.end_of_day_controls, $ScreeningDesk.patient_texture, $ScreeningDesk.panel_container, $ScreeningDesk.face_zoom] + $ScreeningDesk.margin_container.get_children()
var scenes_to_show = [$ScreeningDesk, $ScreeningDesk.alone_controls, UI.get_node("UI/UpperContainer")]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
$ScreeningDesk.new_patient()
func _on_save_slot_pressed(save_slot):
save_game(save_slot)
func _on_load_slot_pressed(load_slot):
load_game(load_slot)
func _on_main_menu_pressed():
#Removing mask
TransitionScreen.mask.visible = false
#Clearing balloon
clear_balloon()
#Hiding menus
UI.get_node("UI/Menu").hide()
UI.get_node("UI/UpperContainer").hide()
#Going back to main menu
var scenes_to_hide = [$ScreeningDesk, $TextScreens, $TextScreens/Day]
var scenes_to_show = [$TitleScreen]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
#Updates Save/Load Slots based on Existing Saves
func update_slots():
#Loops over the 4 save/load slots
for save_number in range(1, 5):
#Retrieves save and load slots
var save_slot_path = "UI/Save/MarginContainer/VBoxContainer/SaveSlot" + str(save_number)
var load_slot_path = "UI/Load/MarginContainer/VBoxContainer/LoadSlot" + str(save_number)
var save_slot = UI.get_node(save_slot_path)
var load_slot = UI.get_node(load_slot_path)
#Retrieves save path
var save_path = "res://Saves/save_" + str(save_number) + ".json"
if FileAccess.file_exists(save_path):
var file = FileAccess.open(save_path, FileAccess.READ) #Loads the save if it exists
var json_string = file.get_as_text()
file.close()
var load_data = JSON.parse_string(json_string)
if typeof(load_data) == 27: #Checks if loaded data is a Dictionary
#Updates save and load slots texts
print(load_data)
save_slot.text = "DAY " + str(load_data["day_count"]) + ", PATIENT " + str(load_data["patient_count"]) + "\nSAVE DATE : " + str(load_data["save_date"])
load_slot.text = save_slot.text
else:
print("Failed to parse Loading Data.")
#Starts a balloon dialogue
func start_balloon(balloon_type:String, patient_type:String, dialogue_resource: Resource, start_title: String):
#Clearing previous balloon
clear_balloon()
#Instantiating a custom balloon
var Balloon: Resource = load("res://Dialogues/balloon_" + balloon_type + ".tscn")
balloon = Balloon.instantiate()
get_tree().current_scene.add_child(balloon)
#Connects emotion signals if needed
match patient_type:
"patient":
DialogueManager.got_dialogue.connect($ScreeningDesk.patient._change_emotion)
DialogueManager.got_dialogue.connect($ScreeningDesk.computer._recording_text)
"supervisor":
DialogueManager.got_dialogue.connect($ScreeningDesk.supervisor._change_emotion)
#Applies text settings to the balloon
balloon.dialogue_label.seconds_per_step = UI.text_speed
#balloon.dialogue_line.time = UI.auto_speed
#Starts dialogue
balloon.start(dialogue_resource, start_title)
#Clearing balloon
func clear_balloon():
#Clearing Previous Balloon
if is_instance_valid(balloon):
balloon.queue_free()
#Disconnecting emotion signals
for function in [$ScreeningDesk.patient._change_emotion,
$ScreeningDesk.computer._recording_text,
$ScreeningDesk.supervisor._change_emotion]:
if DialogueManager.is_connected("got_dialogue", function):
DialogueManager.disconnect("got_dialogue", function)
#Changes text_speed value
func _on_text_value_changed():
if is_instance_valid(balloon):
balloon.dialogue_label.seconds_per_step = UI.text_speed
#Changes auto_speed value
func _on_auto_value_changed():
if is_instance_valid(balloon):
#balloon.dialogue_line.time = UI.auto_speed
pass
#Changes CharacterLabel color
func _on_character_label_color_change(color: Color):
var label = balloon.get_node("Balloon/Panel/Dialogue/VBoxContainer/CharacterLabel")
label.add_theme_color_override("default_color", color)
+1
View File
@@ -0,0 +1 @@
uid://c6kqjqj6cs4wa
+79
View File
@@ -0,0 +1,79 @@
extends Control
@onready var tab_patient_file = $Margin/ComputerScreen/Tabs/PatientFile
@onready var tab_rules = $Margin/ComputerScreen/Tabs/Rules
@onready var tab_recording = $Margin/ComputerScreen/Tabs/Recording
@onready var patient_file = $Margin/ComputerScreen/ComputerTabs/FileContainer/PatientFile
@onready var rules = $Margin/ComputerScreen/ComputerTabs/Rules
@onready var recording = $Margin/ComputerScreen/ComputerTabs/Recording
@onready var screen = $Margin/ComputerScreen2
@onready var next_patient_button = $Margin/NextPatient/CallNextPatient
var tab_list
var screen_list
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
tab_list = [tab_patient_file, tab_rules, tab_recording]
screen_list = [patient_file, rules, recording]
#Connecting signals
tab_patient_file.pressed.connect(self._on_tab_patient_file_pressed)
tab_rules.pressed.connect(self._on_tab_rules_pressed)
tab_recording.pressed.connect(self._on_tab_recording_pressed)
Globals.response_chosen.connect(self._on_response_chosen)
#Hiding everything
for node in tab_list + screen_list + [screen, next_patient_button]:
node.hide()
#Displays a message on the computer screen
func display(message):
var text = message.replace("\\n", "\n") #Replaces litteral backslashes by actual newlines (necessary because of Dialogue Manager)
screen.text = text
screen.show()
#Shows the patient file tab
func _on_tab_patient_file_pressed():
tab_switch(tab_patient_file, patient_file)
#Shows the rules tab
func _on_tab_rules_pressed():
tab_switch(tab_rules, rules)
#Shows the recording tab
func _on_tab_recording_pressed():
tab_switch(tab_recording, recording)
#Shows the correct screen according to the pressed tab
func tab_switch(pressed_tab, tab_screen):
#Highlights pressed tab and unpress the others
for tab in tab_list:
tab.set_pressed(false)
tab.set_mouse_filter(Control.MOUSE_FILTER_STOP)
pressed_tab.set_pressed(true)
pressed_tab.set_mouse_filter(Control.MOUSE_FILTER_IGNORE)
#Showing desired screen and hiding the others
for node in screen_list:
node.hide()
tab_screen.show()
func _recording_text(dialogue_line): #Records the dialogues
recording.append_text("\n\n")
recording.append_text("[color=red]" + dialogue_line.character + "[/color]" + "\n")
recording.append_text(dialogue_line.text)
func _on_response_chosen(response): #Adds protagonist responses to the recording tab
recording.append_text("\n\n")
recording.append_text("[color=green]You[/color]" + "\n")
recording.append_text(response.text)
+1
View File
@@ -0,0 +1 @@
uid://chhh7v5iwiqw2
+15
View File
@@ -0,0 +1,15 @@
extends RichTextLabel
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Globals.console_message.connect(self.display)
hide()
#Displays a message on the console screen
func display(message):
var text_to_display = message
text_to_display = text_to_display.replace("\\n", "\n") #Replaces litteral backslashes by actual newlines (necessary because of Dialogue Manager)
text = text_to_display
show()
@@ -0,0 +1 @@
uid://cyennu12fufbt
+14
View File
@@ -0,0 +1,14 @@
extends TextureButton
signal decision_made
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
self.pressed.connect(self._on_green_button_pressed)
set_disabled(true)
func _on_green_button_pressed():
if Globals.buttons_activated:
decision_made.emit("release")
set_toggle_mode(true)
set_pressed_no_signal(true)
@@ -0,0 +1 @@
uid://nj1oo2nh44dh
+44
View File
@@ -0,0 +1,44 @@
extends CanvasLayer
@onready var journal_symptoms = $JournalOpen/JournalMargin/PageArea/RightPage/Symptoms
#Journal Settings
var symptoms_detailed: Array[Array] = [
["SUICIDAL IDEATIONS\nPersistent thoughts about ending one's own life",
"PERSECUTORY DELUSIONS\nFalse conviction of being targeted or harmed",
"UNNATURAL BEHAVIOUR\nSigns or marks of non-human nature",
"AUDITORY HALLUCINATIONS\nFalse perceptions of external sound"],
["MEGALOMANIAC DELUSIONS\nFalse exaggeration of self-importance or power",
"SOMATIC HALLUCINATIONS\nFalse sensations, from inside the body or on the skin"],
["MYSTICAL DELUSIONS\nFalse certainty of spiritual, divine connection",
"MANIA\nExcessively elevated mood and increased energy"],
["CHEMOSENSORY HALLUCINATIONS\nFalse perceptions of smell or taste",
"SELF-MUTILATION\nDeliberate self-injury"],
["HETERO-AGRESSIVE BEHAVIOUR\nExcessive hostility, verbal agression, threats",
"VISUAL HALLUCINATIONS\nFalse perceptions of visual stimuli"]
]
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
$JournalOpen/JournalMargin/PageArea/LeftPage/CloseManual.pressed.connect(self._on_close_manual_pressed)
hide()
func _on_close_manual_pressed():
hide()
func _on_journal_pressed():
show()
func update_journal(floor_count:int):
var symptoms_page : String = ""
for i in range(-floor_count):
for symptom in symptoms_detailed[i]:
symptoms_page += "\n\n" + symptom
journal_symptoms.text = symptoms_page
@@ -0,0 +1 @@
uid://dcax2vggaexnr
+15
View File
@@ -0,0 +1,15 @@
extends RichTextLabel
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
#Updates Middle Screen Info
func update(day_count, floor_count, diagnoses_count, diagnoses_quota):
var day = Globals.colorize(str(day_count), "dark_orange")
var floor = Globals.colorize(str(floor_count), "dark_orange")
var diagnoses = Globals.colorize(str(diagnoses_count) + "/" + str(diagnoses_quota), "dark_orange")
text = "DAY: " + day + "\n\nFLOOR: " + floor + "\n\nACCURATE DIAGNOSES: " + diagnoses
@@ -0,0 +1 @@
uid://p3a2y1dqk63c
+18
View File
@@ -0,0 +1,18 @@
extends TextureRect
func _ready() -> void:
#Hiding
hide()
#Change emotions following dialogue tags
func _change_emotion(dialogue_line) -> void:
var line_tag = dialogue_line.tags
print("Patient marker value: " + str(Patient.marker[0]))
if line_tag.is_empty() == false:
var new_emotion = line_tag[0]
texture = Patient.emotions[String(new_emotion)]
print("Patient emotion changed to ", new_emotion)
+1
View File
@@ -0,0 +1 @@
uid://vjvnh47s4akq
+213
View File
@@ -0,0 +1,213 @@
extends Node
#Dialogue variables
var dialog_tree: Dictionary
var marker: Array[int]
var dialogue_resource: Resource
#Patient attributes
var texture := TextureRect.new()
var image : Texture2D
var original_color: Color
var emotions : Dictionary
var abnormal: bool
#Patient file
var file_text : String
#Patient symptoms ordered from floor to floor
var symptoms_arrays: Array[Array] = [
["SUICIDAL IDEATIONS", "PERSECUTORY DELUSIONS", "UNNATURAL BEHAVIOUR", "AUDITORY HALLUCINATIONS"],
["SOMATIC HALLUCINATIONS", "MEGALOMANIAC DELUSIONS"],
["MYSTICAL DELUSIONS", "MANIA"],
["CHEMOSENSORY HALLUCINATIONS", "SELF-MUTILATION"],
["VISUAL HALLUCINATIONS", "HETERO-AGRESSIVE BEHAVIOUR"]
]
#Lists of possible patients sorted by floor
var patient_list : Array[Dictionary]
#Supervisor file path
var supervisor_name = "loeveth"
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Setting up dialogue marker
marker.resize(100)
marker.fill(0)
#Setting up patient list
patient_list.resize(len(symptoms_arrays))
original_color = texture.modulate #Saving original modulation color to reset it after modification
func build_dialog_tree(tree_model: Array[int]) -> Dictionary: #Builds the dialog tree for each dialogue
var branch : Dictionary
var tree : Dictionary
for branch_id in tree_model:
branch = {branch_id: "not_asked"}
tree.merge(branch)
return tree
func new_patient(patient_id):
var file_path: String
#Loading Patient Files
var config := ConfigFile.new()
file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg"
config.load(file_path)
#Setting up Patient File
var patient_name = config.get_value("", "name")
var age = config.get_value("", "age")
var profession = config.get_value("", "profession")
var psychiatric_assessment = config.get_value("", "psychiatric_assessment")
file_text = "NAME: " + patient_name + "\nAGE: " + age + "\n\nPROFESSION: " + profession + "\n\nPRE-SCREENING PSYCHIATRIC ASSESSMENT:\n\n" + "[color=orange_red]" + psychiatric_assessment + "[/color]"
file_path = "res://Art/Patients/patient_" + patient_id + "/patient_" + patient_id + "_"
load_emotions(config, file_path)
#Loading Dialogue Resource
file_path = "res://Dialogues/Patients/patient_" + patient_id + ".dialogue"
dialogue_resource = load(file_path)
#Randomizing abnormal status if required
var status = config.get_value("", "status")
match status:
"random":
abnormal = randf() < 0.5 #50/50 abnormal/normal
print("Abnormal value: " + str(abnormal))
"normal":
abnormal = false
"abnormal":
abnormal = true
func load_emotions(config, patient_path):
#Loading Patient Initial Face
var initial_emotion = config.get_value("", "initial_emotion")
var file_path = patient_path + initial_emotion + ".png"
image = load(file_path)
#Loading Face Emotions
var face: Resource
var emotion_branch: Dictionary
var emotion_list = ["neutral", "peaceful", "praying", "puzzled", "suspicious",
"sadsmiling", "crazysmiling", "shockedcrying", "smiling",
"laughing", "happy", "elated", "maniac", "ecstatic",
"irritated", "angry",
"sad", "depressed", "crying", "surprised",
"worried", "scared", "shocked", "panicked", "terrified",
"abnormal", "abnormal1", "abnormal2", "abnormal3", "special"]
emotions.clear() #Clearing previous patient emotions
for emotion in emotion_list:
file_path = patient_path + emotion + ".png"
face = load(file_path)
if face != null:
emotion_branch = {emotion: face}
emotions.merge(emotion_branch)
#Sorts the patients to determine who can appear on what floor depending on the symptoms unlocked
func sort_patients():
var config := ConfigFile.new()
var file_path : String
var patient_symptoms: Array
var symptom_matched : bool
var symptom_list: Array
for patient_id in Globals.patient_list:
#Loads symptoms for each patient
patient_symptoms.clear()
file_path = "res://Dialogues/Patients/patient_" + patient_id + "_file.cfg"
config.load(file_path)
symptom_list = config.get_value("", "psychiatric_assessment").split("\n", false)
patient_symptoms = symptom_list
symptom_list = config.get_value("", "abnormal_symptoms").split("\n", false)
patient_symptoms.append_array(symptom_list)
print("Patient #" + patient_id + " symptom list: " + str(patient_symptoms))
#Goes through the symptoms_arrays from the last to the first,
#If a symptom matches with the patient symptoms,
#Add that patient to the floors from that floor to the last one
for j in range(len(symptoms_arrays)-1, -1, -1):
for symptom in patient_symptoms:
if symptoms_arrays[j].has(symptom):
symptom_matched = true
print("Symptom matched: " + str(symptoms_arrays[j]) + " and " + str(symptom))
break
if symptom_matched:
for k in range(j, symptoms_arrays.size()):
patient_list[k].merge({patient_id: j+1}) # Adds the patient to every floor compatible
symptom_matched = false
break
for i in range(len(patient_list)):
print("Floor " + str(i) + " possible patients: " + str(patient_list[i]))
#Weighted random selection from an Array
func weighted_random(patients: Dictionary):
#Calculating total weight
var total_weight : int
for weight in patients.values():
total_weight += weight
print("Total weight: " + str(total_weight))
var r = randf() * total_weight
print("r :" + str(r))
var weight_sum : int
for patient_id in patients:
weight_sum += patients[patient_id]
if weight_sum >= r:
print("Patient selected: " + patient_id + ", Weight: " + str(patients[patient_id]))
return patient_id
return null
func generate_patient_id() -> String: #Generates a patient ID
#Generating patient_id
var floor_index = -Globals.floor_count -1
print("Floor Index: " + str(floor_index))
var patient_id = weighted_random(patient_list[floor_index]) #Picks a random patient depending on floor, with weighted odds
for j in range(len(patient_list)):
if len(patient_list[j]) > 1:
patient_list[j].erase(patient_id) #Removes picked patient from unseen patients list
print("Updated Floor " + str(j) + " list: " + str(patient_list[j]))
return patient_id
func next_patient() -> String: #Decides next patient ID
var next_patient_id: String
match Globals.floor_count:
-2:
if Globals.patient_count == 0:
next_patient_id = "it_that_smiles"
else:
next_patient_id = generate_patient_id()
_:
next_patient_id = generate_patient_id()
return next_patient_id
@@ -0,0 +1 @@
uid://by4i7c1foffu3
+14
View File
@@ -0,0 +1,14 @@
extends TextureButton
signal decision_made
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
self.pressed.connect(self._on_green_button_pressed)
set_disabled(true)
func _on_green_button_pressed():
if Globals.buttons_activated:
decision_made.emit("terminate")
set_toggle_mode(true)
set_pressed_no_signal(true)
+1
View File
@@ -0,0 +1 @@
uid://cmbmtqoh5iytr
+11
View File
@@ -0,0 +1,11 @@
extends RichTextLabel
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Globals.release_display.connect(self._on_release_display)
text = Globals.colorize("RELEASE", "web_gray")
func _on_release_display(message:String):
text = message
+1
View File
@@ -0,0 +1 @@
uid://bvi3qtmbubkck
+249
View File
@@ -0,0 +1,249 @@
extends Control
#DeskAssets
@onready var patient = $UpperHalf/ControlGlass/Patient
@onready var supervisor = $UpperHalf/ControlGlass/Supervisor
@onready var green_button = $LowerHalf/GreenButton
@onready var red_button = $LowerHalf/RedButton
@onready var journal = $LowerHalf/Journal/JournalButton
@onready var journal_layer = $JournalLayer
@onready var release = $LowerHalf/DecisionScreen/MarginContainer/HBoxContainer/Release
@onready var terminate = $LowerHalf/DecisionScreen/MarginContainer/HBoxContainer/Terminate
@onready var patient_color: Color
@onready var computer = $LowerHalf/Computer
@onready var middle_screen = $LowerHalf/MiddleScreen/MarginContainer/MiddleScreen
@onready var console_screen = $LowerHalf/Console/Margin/ConsoleScreen
#RoomAssets
@onready var cell_top = $RoomAssets/CellTop
@onready var cell_bot = $RoomAssets/CellBot
@onready var cell_animation = $RoomAssets/CellAnimation
@onready var cell_wall = $RoomAssets/CellWall
@onready var backwall_animation = $RoomAssets/Backwall/BackwallAnimation
#DialogueAssets
@onready var patient_dialogue_resource: Resource
@onready var balloon: Node
@onready var patient_emotions : Dictionary
@onready var message_array: Array[String]
var main: Node
var accurate_diagnoses = 0
func _ready() -> void:
#Referencing main node
main = get_parent()
#Connecting signals
computer.next_patient_button.pressed.connect(self._on_call_next_patient_pressed)
red_button.decision_made.connect(self._on_decision_made)
green_button.decision_made.connect(self._on_decision_made)
journal.pressed.connect(journal_layer._on_journal_pressed)
Globals.clear_patient.connect(self._on_clear_patient)
Globals.color_change.connect(self._on_color_change)
#Hiding and showing appropriate RoomAssets
for room_asset in [cell_top, cell_bot, cell_wall]:
room_asset.hide()
for room_asset in [$RoomAssets/Glass, $RoomAssets/Room, $RoomAssets/Backwall]:
room_asset.show()
#$RoomAssets/Backwall.position = Vector2(0, -2700)
hide() #Hiding ScreeningDesk
message_array.resize(3) #Setting up message array
func new_patient():
var new_id = Patient.next_patient()
#Patient.new_patient("it_that_smiles") #Line for testing purposes
Patient.new_patient(new_id) #Line for generating new patient
computer.patient_file.text = Patient.file_text
computer.recording.text = ""
patient.texture = Patient.image
#Setting up UI
computer.next_patient_button.show()
console_screen.display(Globals.directives)
func _on_call_next_patient_pressed(): #Brings in next patient and sets up the desk controls
#Hiding the next_patient button
var scenes_to_hide = [computer.next_patient_button, supervisor]
for scenes in scenes_to_hide:
scenes.hide()
# Shows transition messages on computer and console
var message : String
message = Globals.colorize("COMPUTING CELL TRANSLATION...", "orange_red")
computer.display(message)
message = Globals.colorize("- BRINGING IN NEXT PATIENT -", "dark_orange")
console_screen.display(message)
#Shutters entry animation
cell_animation.play("incoming")
cell_top.show()
cell_bot.show()
await cell_animation.animation_finished
#Showing the Patient and the Backroom
var scenes_to_show = [patient, cell_wall]
for scene in scenes_to_show:
scene.show()
#Opening Shutters
cell_animation.play("open")
await cell_animation.animation_finished
#Activating Buttons
green_button.set_disabled(false)
red_button.set_disabled(false)
#Coloring Release and Terminate
release.text = Globals.colorize("RELEASE", "dark_green")
terminate.text = Globals.colorize("TERMINATE", "dark_red")
#Starting Dialogue and hiding console screen
computer.screen.hide()
console_screen.hide()
main.start_balloon("screening", "patient", Patient.dialogue_resource, "start")
#Showing Computer Tabs and showing Patient File Screen by default
for tab in computer.tab_list:
tab.show()
tab.set_mouse_filter(Control.MOUSE_FILTER_STOP)
computer.patient_file.show()
#Updating patient_count
Globals.patient_count += 1
#Starts release or termination protocols when the corresponding button is pressed
func _on_decision_made(choice: String):
#Hiding computer tabs screen
for node in computer.tab_list + computer.screen_list:
node.hide()
#Setting up console and computer displays
if choice == "release":
release.text = Globals.colorize("RELEASE", "green") #Highlighting the decision
message_array = Globals.release_messages
elif choice == "terminate":
terminate.text = Globals.colorize("TERMINATE", "red") #Highlighting the decision
message_array = Globals.terminate_messages
console_screen.display(message_array[0])
computer.display(message_array[2])
#Disabling Buttons
green_button.set_mouse_filter(Control.MOUSE_FILTER_IGNORE)
red_button.set_mouse_filter(Control.MOUSE_FILTER_IGNORE)
#Final Patient Dialogue
main.start_balloon("screening", "patient", Patient.dialogue_resource, choice)
#Clears patient and transitions towards next patient or end of day
func _on_clear_patient(choice:String):
# Updating middle screen info and accurate_diagnoses value
if (Patient.abnormal == true and choice == "terminate") or (Patient.abnormal == false and choice == "release"):
accurate_diagnoses += 1
else:
accurate_diagnoses = 0 # Resetting to 0 if the player makes a wrong diagnosis
middle_screen.update(Globals.day_count, Globals.floor_count, accurate_diagnoses, Globals.diagnoses_quota)
#Showing second console message
console_screen.display(message_array[1])
#Closing Shutters
cell_animation.play("close")
await cell_animation.animation_finished
#Hiding the cell and restoring the backroom and patient's original colors
for scene in [patient, cell_wall]:
scene.hide()
patient.modulate = Patient.original_color
cell_wall.modulate = Patient.original_color
#Hiding Computer screen and resetting Console screen once the animation is done
cell_animation.play(choice)
await cell_animation.animation_finished
computer.screen.hide()
console_screen.hide()
#Reenabling mouse filter and resetting buttons
for button in [green_button, red_button]:
button.set_mouse_filter(Control.MOUSE_FILTER_STOP)
button.set_pressed(false)
button.set_toggle_mode(false)
button.set_disabled(true)
#Resetting decision screen
release.text = Globals.colorize("RELEASE", "web_gray")
terminate.text = Globals.colorize("TERMINATE", "web_gray")
#Descending Floor if diagnoses_quota reached
if accurate_diagnoses == Globals.diagnoses_quota:
descend_floor()
else:
new_patient()
func _on_color_change(color: String): #Modulating backroom and patient colors
var new_color: Color
match color:
"red":
new_color = Color(1,0.1,0.1,1)
"green":
new_color = Color(0.5,1,0.5,1)
patient.modulate = new_color
cell_wall.modulate = new_color
print("Color changed to: " + str(new_color))
func descend_floor(): #Descends to next floor
#Displaying information on screens
var message : String
message = Globals.colorize("DIAGNOSES QUOTA REACHED", "green_yellow") + "\n\n" + "SECURITY CLEARANCE UPDATED" + "\n\n" + Globals.colorize("ACCESS TO NEXT FLOOR AUTHORIZED", "green")
computer.display(message)
message = Globals.colorize("- DESCENT PROTOCOL INITIATED -\n\n- TRANSLATING TO NEXT FLOOR -", "dark_orange")
console_screen.display(message)
#Descending animation
backwall_animation.play("going_down_1")
await backwall_animation.animation_finished
backwall_animation.play("going_down_2")
await backwall_animation.animation_finished
#Updating middle screen info
Globals.floor_count -= 1
accurate_diagnoses = 0
Globals.diagnoses_quota += 1
middle_screen.update(Globals.day_count, Globals.floor_count, accurate_diagnoses, Globals.diagnoses_quota)
#Resetting patient_count
Globals.patient_count = 0
#Updating journal symptoms
journal_layer.update_journal(Globals.floor_count)
#Hiding screen messages
computer.screen.hide()
console_screen.hide()
#Interfloor dialogue
supervisor.dialogue("interfloor_" + str(-Globals.floor_count-1))
await supervisor.dialogue_finished
#Setting up new patient
new_patient()
@@ -0,0 +1 @@
uid://b3ms0imu0umn8
File diff suppressed because it is too large Load Diff
+103
View File
@@ -0,0 +1,103 @@
extends TextureRect
@onready var mat := material as ShaderMaterial
signal reveal_done
signal hide_done
signal dialogue_finished
func _ready():
#Hiding
hide()
#Setting up shader
randomize()
#Noise setup
var noise := FastNoiseLite.new()
noise.noise_type = FastNoiseLite.TYPE_SIMPLEX
noise.frequency = 20.0
noise.seed = randi()
var noise_tex := NoiseTexture2D.new()
noise_tex.noise = noise
noise_tex.width = 512
noise_tex.height = 512
noise_tex.seamless = true
mat.set_shader_parameter("noise_tex", noise_tex)
#Revealing supervisor in a noise spray
func reveal_spray():
mat.set_shader_parameter("progress", 0.0)
var tween = create_tween()
tween.tween_method(set_progress, 0.0, 1.0, 3.0) \
.set_trans(Tween.TRANS_SINE) \
.set_ease(Tween.EASE_OUT)
await tween.finished
reveal_done.emit()
#hiding supervisor in a hiding spray
func hide_spray():
mat.set_shader_parameter("progress", 1.0)
var tween = create_tween()
tween.tween_method(set_progress, 1.0, 0.0, 3.0) \
.set_trans(Tween.TRANS_SINE) \
.set_ease(Tween.EASE_OUT)
await tween.finished
hide_done.emit()
#Progressing the reveal/hide
func set_progress(value: float):
mat.set_shader_parameter("progress", value)
#Supervisor dialogue, mainly between floors
func dialogue(dialogue_start):
#Loading supervisor data
var config := ConfigFile.new()
var file_path = "res://Dialogues/Patients/prime_supervisor_" + Patient.supervisor_name + "_file.cfg"
config.load(file_path)
file_path = "res://Art/Patients/prime_supervisor_" + Patient.supervisor_name + "/prime_supervisor_" + Patient.supervisor_name + "_"
Patient.load_emotions(config, file_path)
#Showing the supervisor
texture = Patient.image
show()
reveal_spray()
await reveal_done
#Dialogue
var dialogue_resource = load("res://Dialogues/Patients/prime_supervisor_" + Patient.supervisor_name + ".dialogue")
Globals.start_balloon.emit("screening", "supervisor", dialogue_resource, dialogue_start)
await DialogueManager.dialogue_ended
#Hiding the supervisor
hide_spray()
await hide_done
hide()
dialogue_finished.emit()
#Change emotions following dialogue tags
func _change_emotion(dialogue_line) -> void:
var line_tag = dialogue_line.tags
print("Supervisor marker value: " + str(Patient.marker[0]))
if line_tag.is_empty() == false:
var new_emotion = line_tag[0]
texture = Patient.emotions[String(new_emotion)]
print("Supervisor emotion changed to ", new_emotion)
+1
View File
@@ -0,0 +1 @@
uid://cdkbyikbjqlsh
+12
View File
@@ -0,0 +1,12 @@
shader_type canvas_item;
uniform sampler2D noise_tex;
uniform float progress : hint_range(0.0, 1.0) = 0.0;
uniform float softness : hint_range(0.001, 0.2) = 0.05;
void fragment() {
vec4 img = texture(TEXTURE, UV);
float noise = texture(noise_tex, UV).r;
float alpha = 1.0 - smoothstep(progress - softness, progress + softness, noise);
COLOR = vec4(img.rgb, img.a * alpha);
}
@@ -0,0 +1 @@
uid://dwepb0lm1veje
+11
View File
@@ -0,0 +1,11 @@
extends RichTextLabel
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Globals.terminate_display.connect(self._on_terminate_display)
text = Globals.colorize("TERMINATE", "web_gray")
func _on_terminate_display(message:String):
text = message
+1
View File
@@ -0,0 +1 @@
uid://dcjfpyxp3hqg8
+15
View File
@@ -0,0 +1,15 @@
extends CanvasLayer
@onready var intro_text_container = $MarginContainer/IntroBoxContainer/TextContainer
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Hiding everything
self.hide()
for node in intro_text_container.get_children():
node.hide()
$MarginContainer/IntroBoxContainer/Header.hide()
$Day.hide()
+1
View File
@@ -0,0 +1 @@
uid://t5hihricayvb
+190
View File
@@ -0,0 +1,190 @@
[gd_scene load_steps=3 format=3 uid="uid://igkl2384rxt1"]
[ext_resource type="Script" uid="uid://t5hihricayvb" path="res://Scenes/text_screen/text_screens.gd" id="1_16laq"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="4_fhc1y"]
[node name="TextScreens" type="CanvasLayer"]
layer = 0
script = ExtResource("1_16laq")
[node name="Background" type="ColorRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="MarginContainer" type="MarginContainer" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 100
theme_override_constants/margin_top = 100
theme_override_constants/margin_right = 100
theme_override_constants/margin_bottom = 100
[node name="IntroBoxContainer" type="BoxContainer" parent="MarginContainer"]
layout_mode = 2
vertical = true
[node name="Header" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
text = "French Republic, Paris, October 12th 2053
78 days since the Abnormality"
tab_size = 8
[node name="Separator" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
size_flags_stretch_ratio = 0.2
[node name="TextContainer" type="MarginContainer" parent="MarginContainer/IntroBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="TextIntro1" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer/TextContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
text = "It's been almost 3 months already since it all began.
We thought it as a mere pandemic, yet another crisis amongst the dozens we had to bear for the past decade.
A few hundred thousand deaths, twice the governmental lies, thrice the social media memes.
Add in a pinch of conspiracy, season abundantly with senseless blaming, and the media would eventually move on to the next money-grabbing controversy.
How i wish we still lived in those times."
tab_size = 8
[node name="TextIntro2" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer/TextContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
bbcode_enabled = true
text = "The nightmares came first. Whispers from afar, soft, humming, comforting even. Slowly seeping into one's mind.
And then, the unexplainable. Things that the mind cannot comprehend, cannot write nor speak.
The [i]Abnormal[/i].
Those with severe mental illnesses were the most vulnerable to It.
Every trained psychiatrist from Saigon to Paris swiftly waltzed to the afterlife last month, murdered by the very patients they were trying to help.
Deaths unbearable to witness, corpses disfigured beyond any rationality.
10 days ago, it started happening to the sane.
"
tab_size = 8
[node name="TextIntro3" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer/TextContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
bbcode_enabled = true
text = "Military curfew all around the globe.
Containment attempts by the governments, even though It seems to propagate regardless of any safety measure.
Mass executions.
I don't watch the news anymore.
Disinformation was a delicacy in times of boredom, now it tastes somewhere between bitter resentment and sour resignation.
Maybe science can save us. Probably not, but we have to believe. I have to believe. What other choice is there ?
"
tab_size = 8
[node name="TextIntro4" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer/TextContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
bbcode_enabled = true
text = "I applied to help with psychiatric research, in a perhaps futile attempt to help.
Since every senior psychiatrist teleported to the afterlife, all we were given was a 2-weeks crash course before getting hurled to the frontlines.
I am to screen the patients. Separate the Abnormals from the normally insane.
Filter the acceptably unhinged from the anomalously disturbed.
So we may dissect the ones for research, and execute the others for safety."
tab_size = 8
[node name="TextIntro5" type="RichTextLabel" parent="MarginContainer/IntroBoxContainer/TextContainer"]
clip_contents = false
custom_minimum_size = Vector2(10, 0)
layout_mode = 2
theme_override_font_sizes/normal_font_size = 30
theme_override_font_sizes/bold_font_size = 30
theme_override_font_sizes/bold_italics_font_size = 30
theme_override_font_sizes/italics_font_size = 30
theme_override_font_sizes/mono_font_size = 30
bbcode_enabled = true
text = "I am not qualified.
I do not belong.
And yet I have to try.
For in these times of strife, I finally get to [i]matter[/i]."
tab_size = 8
[node name="Day" type="RichTextLabel" parent="."]
visible = false
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -240.0
offset_top = -105.5
offset_right = 240.0
offset_bottom = 105.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/normal_font = ExtResource("4_fhc1y")
theme_override_font_sizes/normal_font_size = 100
bbcode_enabled = true
+42
View File
@@ -0,0 +1,42 @@
extends CanvasLayer
signal new_game_pressed
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Connecting signals
$TitleScreen/MenuContainer/NewGame.pressed.connect(_on_new_game_pressed)
$TitleScreen/MenuContainer/Load.pressed.connect(_on_load_pressed)
$TitleScreen/MenuContainer/Settings.pressed.connect(_on_settings_pressed)
$TitleScreen/MenuContainer/QuitGame.pressed.connect(_on_quit_game_pressed)
#Hiding everything
self.hide()
func _on_new_game_pressed() -> void:
new_game_pressed.emit()
func _on_load_pressed():
UI.get_node("UI/Load").show()
UI.get_node("UI/Load/MarginContainer/VBoxContainer/Control/Back").hide()
UI.get_node("UI/Load/MarginContainer/VBoxContainer/Control/BackTitle").show()
TransitionScreen.mask.visible = true
func _on_settings_pressed() -> void:
UI.get_node("UI/Settings").show()
UI.get_node("UI/Settings/MarginContainer/VBoxContainer/Control/Back").hide()
UI.get_node("UI/Settings/MarginContainer/VBoxContainer/Control/BackTitle").show()
TransitionScreen.mask.visible = true
func _on_quit_game_pressed():
get_tree().quit()
+1
View File
@@ -0,0 +1 @@
uid://bkd300wbk2f8a
+86
View File
@@ -0,0 +1,86 @@
[gd_scene load_steps=4 format=3 uid="uid://cahspuhi43bx7"]
[ext_resource type="Texture2D" uid="uid://c3je4gir1qlot" path="res://Art/BlackScreen.png" id="1_3k8ub"]
[ext_resource type="Script" uid="uid://bkd300wbk2f8a" path="res://Scenes/title_screen/title_screen.gd" id="1_ejdst"]
[ext_resource type="FontFile" uid="uid://dv8ppra5tgn1t" path="res://Art/Fonts/PixelatedEleganceRegular-ovyAA.ttf" id="3_vprse"]
[node name="TitleScreenLayer" type="CanvasLayer"]
script = ExtResource("1_ejdst")
[node name="TitleScreen" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Background" type="TextureRect" parent="TitleScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_3k8ub")
[node name="MenuContainer" type="VBoxContainer" parent="TitleScreen"]
layout_mode = 0
offset_left = 200.0
offset_top = 370.0
offset_right = 883.0
offset_bottom = 854.0
[node name="NewGame" type="Button" parent="TitleScreen/MenuContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("3_vprse")
theme_override_font_sizes/font_size = 50
text = "NEW GAME"
[node name="Load" type="Button" parent="TitleScreen/MenuContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("3_vprse")
theme_override_font_sizes/font_size = 50
text = "LOAD"
[node name="Settings" type="Button" parent="TitleScreen/MenuContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("3_vprse")
theme_override_font_sizes/font_size = 50
text = "SETTINGS"
[node name="QuitGame" type="Button" parent="TitleScreen/MenuContainer"]
layout_mode = 2
size_flags_vertical = 3
theme_override_fonts/font = ExtResource("3_vprse")
theme_override_font_sizes/font_size = 50
text = "QUIT GAME"
[node name="GameTitle" type="Label" parent="TitleScreen"]
layout_mode = 0
offset_left = 31.0
offset_top = 96.0
offset_right = 858.0
offset_bottom = 277.0
theme_type_variation = &"HeaderLarge"
theme_override_font_sizes/font_size = 100
horizontal_alignment = 1
vertical_alignment = 1
[node name="RichTextLabel" type="RichTextLabel" parent="TitleScreen/GameTitle"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -11.0
offset_top = 27.0
offset_right = 248.0
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/normal_font = ExtResource("3_vprse")
theme_override_font_sizes/normal_font_size = 100
bbcode_enabled = true
text = "[center]I AM NOT SICK"
@@ -0,0 +1,71 @@
extends CanvasLayer
signal fading_finished
signal transition_finished
@onready var big_fading = $BigFading
@onready var small_fading = $SmallFading
@onready var big_animation = $BigFading/BigFadingAnimation
@onready var small_animation = $SmallFading/SmallFadingAnimation
@onready var mask = $Mask
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Hiding masks
big_fading.visible = false
small_fading.visible = false
mask.visible = false
#Connecting signals
big_animation.connect("animation_finished", _on_animation_finished)
small_animation.connect("animation_finished", _on_animation_finished)
func _on_animation_finished(anim_name):
#Fades back to normal when fade_to_black is done
if anim_name == "fade_to_black":
fading_finished.emit()
big_animation.play("fade_to_normal")
small_animation.play("fade_to_normal")
#Resets everything when fading_to_normal is done
elif anim_name == "fade_to_normal":
transition_finished.emit()
Globals.is_transitioning = false
big_fading.visible = false
small_fading.visible = false
#Handles fading transitions
func fading(size):
Globals.is_transitioning = true
if size == "big":
big_fading.visible = true
big_animation.play("fade_to_black")
elif size == "small":
small_fading.visible = true
small_animation.play("fade_to_black")
#Transitions the scenes
func transition(fading_screen_size, scenes_to_hide, scenes_to_show):
#Fade in and out
fading(fading_screen_size)
await self.fading_finished
#When the screen is black from fading, change the shown scenes before it fades back to normal
for scene in scenes_to_hide:
scene.hide()
for scene in scenes_to_show:
scene.show()
@@ -0,0 +1 @@
uid://dywfa5vbgtrkb
@@ -0,0 +1,148 @@
[gd_scene load_steps=10 format=3 uid="uid://drk1l7ijo4xq5"]
[ext_resource type="Script" uid="uid://dywfa5vbgtrkb" path="res://Scenes/transition_screen/transition_screen.gd" id="1_hbjtk"]
[sub_resource type="Animation" id="Animation_n85x3"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("BigFading:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(0, 0, 0, 0)]
}
[sub_resource type="Animation" id="Animation_20bx3"]
resource_name = "fade_to_black"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("BigFading:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)]
}
[sub_resource type="Animation" id="Animation_in743"]
resource_name = "fade_to_normal"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("BigFading:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_5yx4m"]
_data = {
&"RESET": SubResource("Animation_n85x3"),
&"fade_to_black": SubResource("Animation_20bx3"),
&"fade_to_normal": SubResource("Animation_in743")
}
[sub_resource type="Animation" id="Animation_igu58"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".: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, 1)]
}
[sub_resource type="Animation" id="Animation_3ahpb"]
resource_name = "fade_to_black"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)]
}
[sub_resource type="Animation" id="Animation_do6sc"]
resource_name = "fade_to_normal"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_h2xbl"]
_data = {
&"RESET": SubResource("Animation_igu58"),
&"fade_to_black": SubResource("Animation_3ahpb"),
&"fade_to_normal": SubResource("Animation_do6sc")
}
[node name="transition_screen" type="CanvasLayer"]
layer = 110
script = ExtResource("1_hbjtk")
[node name="BigFading" type="ColorRect" parent="."]
modulate = Color(0, 0, 0, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="BigFadingAnimation" type="AnimationPlayer" parent="BigFading"]
root_node = NodePath("../..")
libraries = {
&"": SubResource("AnimationLibrary_5yx4m")
}
[node name="SmallFading" type="ColorRect" parent="."]
offset_top = 244.0
offset_right = 1923.0
offset_bottom = 899.0
color = Color(0, 0, 0, 1)
[node name="SmallFadingAnimation" type="AnimationPlayer" parent="SmallFading"]
libraries = {
&"": SubResource("AnimationLibrary_h2xbl")
}
[node name="Mask" type="ColorRect" parent="."]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_force_pass_scroll_events = false
color = Color(0, 0, 0, 0.470588)