diff --git a/#Scenes/License.tscn b/#Scenes/License.tscn new file mode 100644 index 00000000..ad531a43 --- /dev/null +++ b/#Scenes/License.tscn @@ -0,0 +1,102 @@ +[gd_scene load_steps=4 format=3 uid="uid://be5a748kcls0f"] + +[ext_resource type="Script" path="res://#Scenes/SceneScripts/license.gd" id="1_qwpco"] + +[sub_resource type="Gradient" id="Gradient_w1cvb"] +colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_crixh"] +gradient = SubResource("Gradient_w1cvb") + +[node name="Control" 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_qwpco") + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture2D_crixh") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 0 +offset_left = 55.0 +offset_right = 372.0 +offset_bottom = 121.0 + +[node name="Godot Engine" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "Godot Engine" + +[node name="Dialogue Manager" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "Dialogue Manager" + +[node name="Smooth scroll" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "Smooth scroll" + +[node name="Free type" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "Free type" + +[node name="ENet" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "ENet" + +[node name="mbed TLS" type="Button" parent="VBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "mbed TLS" + +[node name="License label" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -1447.0 +offset_top = -1044.0 +offset_right = -47.0 +offset_bottom = -34.0 +grow_horizontal = 0 +grow_vertical = 0 +theme_override_font_sizes/font_size = 30 +text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam cursus ex at vulputate tincidunt. Praesent convallis augue ac nisi sollicitudin consectetur. Sed consequat consectetur vestibulum. Nulla elementum ex at neque porttitor, ut volutpat est lobortis. Suspendisse eget finibus lacus. Duis est neque, placerat sit amet odio et, placerat vehicula nisl. Praesent eu egestas leo. Maecenas quis sapien ullamcorper, aliquet ex sed, vestibulum libero. Nam in eros finibus, sagittis dui et, laoreet odio. Proin eros neque, ultricies et sagittis in, mattis in arcu. Morbi volutpat orci dui, eget tincidunt libero tempor quis. Quisque at arcu euismod purus blandit vehicula eget vitae mi. Morbi vel vehicula eros. " +autowrap_mode = 2 + +[node name="GoBack" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_left = 33.0 +offset_top = -241.0 +offset_right = 408.0 +offset_bottom = -19.0 +grow_vertical = 0 +theme_override_font_sizes/font_size = 60 +text = "Go back to +main menu" + +[connection signal="pressed" from="VBoxContainer/Godot Engine" to="." method="_on_godot_engine_pressed"] +[connection signal="pressed" from="VBoxContainer/Dialogue Manager" to="." method="_on_dialogue_manager_pressed"] +[connection signal="pressed" from="VBoxContainer/Smooth scroll" to="." method="_on_smooth_scroll_pressed"] +[connection signal="pressed" from="VBoxContainer/Free type" to="." method="_on_free_type_pressed"] +[connection signal="pressed" from="VBoxContainer/ENet" to="." method="_on_e_net_pressed"] +[connection signal="pressed" from="VBoxContainer/mbed TLS" to="." method="_on_mbed_tls_pressed"] +[connection signal="pressed" from="GoBack" to="." method="_on_go_back_pressed"] diff --git a/#Scenes/MainMenu.tscn b/#Scenes/MainMenu.tscn index dc2a83ce..91735d15 100644 --- a/#Scenes/MainMenu.tscn +++ b/#Scenes/MainMenu.tscn @@ -96,7 +96,6 @@ layout_mode = 2 size_flags_vertical = 3 focus_neighbor_top = NodePath("../Options") focus_neighbor_bottom = NodePath("../Quit") -disabled = true texture_normal = ExtResource("9_70yof") texture_hover = ExtResource("10_vce0e") texture_focused = ExtResource("10_vce0e") @@ -126,5 +125,6 @@ cancel_button_text = "No" [connection signal="pressed" from="Menu buttons/Continue" to="." method="_on_continue_pressed"] [connection signal="pressed" from="Menu buttons/New game" to="." method="_on_start_pressed"] [connection signal="pressed" from="Menu buttons/Options" to="." method="_on_options_pressed"] +[connection signal="pressed" from="Menu buttons/Credits" to="." method="_on_credits_pressed"] [connection signal="pressed" from="Menu buttons/Quit" to="." method="_on_quit_pressed"] [connection signal="confirmed" from="StartNewGameDialog" to="." method="_on_start_new_game_dialog_confirmed"] diff --git a/#Scenes/OptionsMenu.tscn b/#Scenes/OptionsMenu.tscn index 7f2d400e..4dcfc039 100644 --- a/#Scenes/OptionsMenu.tscn +++ b/#Scenes/OptionsMenu.tscn @@ -34,4 +34,21 @@ grow_horizontal = 2 grow_vertical = 2 icon = ExtResource("1_a6abe") +[node name="License" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -423.0 +offset_top = -141.0 +offset_right = -70.0 +offset_bottom = -52.0 +grow_horizontal = 0 +grow_vertical = 0 +theme_override_font_sizes/font_size = 50 +text = "License" + [connection signal="pressed" from="Back" to="." method="_on_back_pressed"] +[connection signal="pressed" from="License" to="." method="_on_license_pressed"] diff --git a/#Scenes/SceneScripts/MainMenu.gd b/#Scenes/SceneScripts/MainMenu.gd index 28e21abe..6b324e45 100644 --- a/#Scenes/SceneScripts/MainMenu.gd +++ b/#Scenes/SceneScripts/MainMenu.gd @@ -48,6 +48,10 @@ func _on_quit_pressed() -> void: get_tree().quit() +## Go to the credits +func _on_credits_pressed() -> void: + SceneManager.goto_scene("res://#Scenes/credits.tscn") + func _on_start_new_game_dialog_confirmed() -> void: SaveManager.clear_data() _init_managers() diff --git a/#Scenes/SceneScripts/OptionsMenu.gd b/#Scenes/SceneScripts/OptionsMenu.gd index 9391c572..5028bc61 100644 --- a/#Scenes/SceneScripts/OptionsMenu.gd +++ b/#Scenes/SceneScripts/OptionsMenu.gd @@ -5,3 +5,7 @@ extends Control func _on_back_pressed() -> void: SceneManager.goto_scene("res://#Scenes/MainMenu.tscn") + + +func _on_license_pressed() -> void: + SceneManager.goto_scene("res://#Scenes/License.tscn") diff --git a/#Scenes/SceneScripts/credits.gd b/#Scenes/SceneScripts/credits.gd new file mode 100644 index 00000000..c9f7ecd6 --- /dev/null +++ b/#Scenes/SceneScripts/credits.gd @@ -0,0 +1,323 @@ +extends Node2D + +@onready var anim_in: AnimationPlayer = $AnimationPlayerIn +@onready var anim_out: AnimationPlayer = $AnimationPlayerOut +@onready var name_role_label: Label = $Background/CenterContainer/Label +@onready var black_overlay: TextureRect = $BlackOverlay + +const CENTER_SCREEN_TIME: float = 2 +const TEXT_FADE_IN_DURATION: float = 0.2 +const TEXT_FADE_OUT_DURATION: float = 0.2 +const COLOR_FADE_OUT: Color = Color(0,0,0,0) +const COLOR_FADE_IN: Color = Color(0,0,0,1) +const TIME_SCALING_TEXT_LENGTH: float = 0.05 + +signal animation_ended + +## All the possible team roles +enum Roles { + Art, + Design, + Music, + Programming, + Testing, + Writing, + Special_thanks, + Team_lead_design, + Team_lead_music, + Team_lead_programming, + Team_lead_writing, + Project_lead, +} + +## Re-export of the global enum variable to type a shorter name +const sapling_type: GlobalEnums.SaplingType = GlobalEnums.SaplingType + +## All the team members, their roles and their avatar +const TEAM_MEMBERS: Dictionary = { + "Adrian": [[Roles.Team_lead_music], sapling_type.Old], + "Ago": [[Roles.Art], sapling_type.Maid], + "Akatsukin": [[Roles.Design], sapling_type.Nerd], + "Amamii": [[Roles.Art], sapling_type.Maid], + "Arkhand": [[Roles.Music], sapling_type.Nerd], + "Atmama": [[Roles.Art], sapling_type.None], + "Biosquid": [[Roles.Programming], sapling_type.None], + "Bishop": [[Roles.Programming], sapling_type.None], + "Cheesyfrycook": [[Roles.Programming], sapling_type.None], + "Dat": [[Roles.Art], sapling_type.None], + "Dio": [[Roles.Art], sapling_type.Sleepy], + "EndyStarBoy": [[Roles.Art], sapling_type.Milf], + "Hakase": [[Roles.Art], sapling_type.None], + "Jimance": [[Roles.Team_lead_writing, Roles.Design], sapling_type.Old], + "Jona": [[Roles.Programming], sapling_type.Gamer], + "Jusagi": [[Roles.Art], sapling_type.Cool], + "Kebbie": [[Roles.Special_thanks], sapling_type.None], + "Kotoschneep": [[Roles.Art], sapling_type.None], + "Lann": [[Roles.Programming], sapling_type.Nerd], + "Lunar": [[Roles.Art], sapling_type.Gamer], + "Mikotey": [[Roles.Design], sapling_type.Maid], + "Minik": [[Roles.Design], sapling_type.Emo], + "Multi-arm": [[Roles.Programming], sapling_type.None], + "nára": [[Roles.Art], sapling_type.Emo], + "Palenque": [[Roles.Design], sapling_type.Nerd], + "Papier": [[Roles.Programming], sapling_type.Milf], + "Pterion": [[Roles.Art, Roles.Design], sapling_type.Maid], + "ROBBERGON": [[Roles.Team_lead_design], sapling_type.Snow], + "Saphu": [[Roles.Art, Roles.Design], sapling_type.Sleepy], + "Sappysque": [[Roles.Art], sapling_type.Emo], + "Tomzkk": [[Roles.Programming, Roles.Design], sapling_type.Old], + "Tradgore": [[Roles.Writing, Roles.Design], sapling_type.Sleepy], + "Turtyo": [[Roles.Project_lead, Roles.Team_lead_programming, Roles.Design], sapling_type.Gamer], + "TyTy": [[Roles.Programming], sapling_type.Old], + "Vyto (Vytonium)": [[Roles.Music], sapling_type.Old], + "Walles": [[Roles.Design], sapling_type.Sleepy], + "Zannmaster": [[Roles.Design], sapling_type.Milf], +} + +## The time needed for an animation to reach the center of the screen [br] +## This is especially useful for animations that are very fast and we need to delay them [br] +## This lets the previous animation time to get out of the screen center +const ANIMATION_TIME_TO_SCREEN_CENTER: Dictionary = { + "In/cool_in_1": 2.3, + "In/emo_in_1": 0, #enters by the left, will need to wait for previous out animation to completely finish + "In/gamer_in_1": 1.5, + "In/maid_in_1": 0.7, + "In/milf_in_1": 2.6, + "In/nerd_in_1": 1.7, + "In/old_in_1": 1.5, + "In/sleepy_in_1": 0.4, + "In/snow_in_1": 0.4, +} + +## Time needed for an animation to free the space at the center of the screen [br] +## Delay the previous animation by this duration if the time it takes to reach the center is smaller +## than the time it takes the "out" animation to free the screen center +const ANIMATION_TIME_OUT_SCREEN_CENTER: Dictionary = { + "Out/cool_out_1": 1, + "Out/emo_out_1": 2.1, + "Out/gamer_out_1": 1.3, + "Out/maid_out_1": 0.5, + "Out/milf_out_1": 0.6, + "Out/nerd_out_1": 0.7, + "Out/old_out_1": 0.9, + "Out/sleepy_out_1": 2.2, + "Out/snow_out_1": 1.1, +} + +## Launch the loop of the scene +func _ready() -> void: + # start by setting up various things + black_overlay.modulate.a = 0 + name_role_label.text = "" + name_role_label.add_theme_color_override("font_color", COLOR_FADE_OUT) + _animation_loop() + + await animation_ended + + # fade to black and go to next scene + var tween: Tween = get_tree().create_tween() + tween.tween_property(black_overlay, "modulate:a", 1, 3) + + await tween.finished + + SceneManager.goto_scene("res://#Scenes/credits_extra.tscn") + + + +## The main animation loop, controls the entry timing of all the saplings [br] +## This is done by controling the two animation player of the scene +func _animation_loop() -> void: + # a little timer to start the scene + var timer: SceneTreeTimer = get_tree().create_timer(1) + var team_members_names: Array = _choose_member_order() + + await timer.timeout + + # play first animation with animation player in + # this is needed since the loop also plays the out animation of the previous avatar + # but there is no previous avatar before the first one + var first_member_name: String = team_members_names[0] + var roles_and_avatar: Array = TEAM_MEMBERS[first_member_name] + var roles: Array = roles_and_avatar[0] + var roles_string: String = _role_array_to_string(roles) + var previous_avatar: GlobalEnums.SaplingType = roles_and_avatar[1] + # randomly select an avatar type for those that don't have one + # change to defaulting to MILF later + if previous_avatar == sapling_type.None : + previous_avatar = _default_avatar() + var animation_name: String = _choose_animation(previous_avatar, true) + anim_in.play(animation_name) + await anim_in.animation_finished + # member is now at the center of the screen, display their name + roles with a fade in of the text + name_role_label.text = first_member_name + "\n" + roles_string + var text_time_on_screen: float = _get_text_time_on_screen(name_role_label.text) + var tween: Tween = get_tree().create_tween() + tween.tween_property(name_role_label, "theme_override_colors/font_color", COLOR_FADE_IN, TEXT_FADE_IN_DURATION) + await get_tree().create_timer(text_time_on_screen).timeout + + var out_animation: String + + # now loop on all the remaining members + for member_name: String in team_members_names.slice(1): + out_animation = _choose_animation(previous_avatar, false) + var in_tween: Tween = get_tree().create_tween() + # fade out the text above avatar head + in_tween.tween_property(name_role_label, "theme_override_colors/font_color", COLOR_FADE_OUT, TEXT_FADE_OUT_DURATION) + await in_tween.finished + anim_out.play(out_animation) + name_role_label.text = "" + # reset position of the IN avatar + # the sprite for the out animation is different from the sprite of the IN + # when starting the out animation, if we don't reset the IN sprite it would stay at the center of the screen + anim_in.play("RESET") + # prepare for the next member to go in + roles_and_avatar = TEAM_MEMBERS[member_name] + var new_roles: Array = roles_and_avatar[0] + var new_avatar: GlobalEnums.SaplingType = roles_and_avatar[1] + var new_roles_string: String = _role_array_to_string(new_roles) + if new_avatar == sapling_type.None : + new_avatar = _default_avatar() + var in_animation: String = _choose_animation(new_avatar, true) + # the signal to wait before launching the next IN animation + # depends on the type of the previous / next avatar + var in_signal: Signal + # special rule for the emo sapling since it enters from the left + # so we need to wait for the out animation to finish + if new_avatar == sapling_type.Emo or previous_avatar == sapling_type.Emo: + in_signal = anim_out.animation_finished + else: + # the time it takes for the sprite in the center of the screen to leave it + var time_center_out: float = ANIMATION_TIME_OUT_SCREEN_CENTER[out_animation] + # the time it takes for the animation going in to reach the center of the screen + var time_center_in: float = ANIMATION_TIME_TO_SCREEN_CENTER[in_animation] + # calculate the time to leave between entry and exit to prevent sprites going into each other + # if the animation going in is slower than the animation going out, it can start directly (thus 0) + var time_difference: float = max (0, time_center_out - time_center_in) + in_signal = get_tree().create_timer(time_difference).timeout + await in_signal + anim_in.play(in_animation) + + await anim_in.animation_finished + # display the name + roles of the sprite that just got to the center of the screen + var out_tween: Tween = get_tree().create_tween() + name_role_label.text = member_name + "\n" + new_roles_string + text_time_on_screen = _get_text_time_on_screen(name_role_label.text) + out_tween.tween_property(name_role_label, "theme_override_colors/font_color", COLOR_FADE_IN, TEXT_FADE_IN_DURATION) + await get_tree().create_timer(text_time_on_screen).timeout + # the one at the center of the screen is now the one going out for the next loop (thus becoming the previous_avatar) + previous_avatar = new_avatar + + # play the last out animation separately (since unlike the loop, there is no other IN to play after) + out_animation = _choose_animation(previous_avatar, false) + var last_tween: Tween = get_tree().create_tween() + last_tween.tween_property(name_role_label, "theme_override_colors/font_color", COLOR_FADE_OUT, TEXT_FADE_OUT_DURATION) + await last_tween.finished + name_role_label.text = "" + anim_out.play(out_animation) + # put back the sprite for the animation going in, out of the screen + anim_in.play("RESET") + + await anim_out.animation_finished + animation_ended.emit() + + + +## What to give the people that don't have an avatar +func _default_avatar() -> GlobalEnums.SaplingType: + #var avatar: GlobalEnums.SaplingType + #var sapling_type_values: Array = GlobalEnums.SaplingType.values() + #while avatar == sapling_type.None : + #avatar = sapling_type_values[randi() % sapling_type_values.size()] + return GlobalEnums.SaplingType.Milf + + +## Choose the order in which the members should appear [br] +## The order is the following: [br] +## - each category in alphabetical order [br] +## - order inside a given category is random +func _choose_member_order() -> Array: + var team_members_names: Array = TEAM_MEMBERS.keys() + var teams: Dictionary = { + Roles.Art: [], + Roles.Design: [], + Roles.Music: [], + Roles.Programming: [], + Roles.Testing: [], + Roles.Writing: [], + Roles.Special_thanks: [], + } + for member_name: String in team_members_names: + var member_roles: Array = TEAM_MEMBERS[member_name][0] + + var team_to_add: Roles + # check if each role is one of the member role + # doing it this way instead of iterating over member roles ensures that the order for roles is always the same + # even if the order is different for individual members + for role: Roles in Roles.values(): + if role in member_roles: + match role: + Roles.Design: + # only add to team Design if it's the only role + if member_roles.size() == 1: + team_to_add = role + break + Roles.Team_lead_design: + team_to_add = Roles.Design + break + Roles.Team_lead_music: + team_to_add = Roles.Music + break + Roles.Team_lead_programming: + team_to_add = Roles.Programming + break + Roles.Team_lead_writing: + team_to_add = Roles.Writing + break + _: + # for everyone else, their respective roles + team_to_add = role + break + teams[team_to_add].append(member_name) + # shuffle inside each team + for team: Roles in teams: + teams[team].shuffle() + var final_list: Array = [] + for sub_team: Array in teams.values(): + final_list.append_array(sub_team) + return final_list + +## Choose the animation for a given sapling type [br] +## Mainly useful if there are multiple possible animations +func _choose_animation(avatar: GlobalEnums.SaplingType, is_in: bool) -> String: + var avatar_name: String = GlobalEnums.SaplingType.keys()[avatar].to_lower() + var animations_list: Array + if is_in: + animations_list = ANIMATION_TIME_TO_SCREEN_CENTER.keys() + else: + animations_list = ANIMATION_TIME_OUT_SCREEN_CENTER.keys() + var animation_for_avatar: Array = animations_list.filter( + func(list_name: String) -> bool: + return avatar_name in list_name + ) + var chosen_animation: String = animation_for_avatar[randi() % animation_for_avatar.size()] + return chosen_animation + +## Convert the list of roles of a member to the screen to be displayed for those roles +func _role_array_to_string(roles: Array) -> String: + var all_roles_string: PackedStringArray = [] + for role: Roles in roles: + all_roles_string.append(_role_to_string(role)) + if roles.size() <= 2: + return ", ".join(all_roles_string) + else: + return ", ".join(all_roles_string.slice(0, 2)) + "\n" + ", ".join(all_roles_string.slice(2)) + + +## Convert a role to a string +func _role_to_string(role: Roles) -> String: + return Roles.keys()[role].replace("_", " ") + + +## Calculate the time a string should be displayed on screen +func _get_text_time_on_screen(text: String) -> float: + return CENTER_SCREEN_TIME + text.length() * TIME_SCALING_TEXT_LENGTH diff --git a/#Scenes/SceneScripts/credits_extra.gd b/#Scenes/SceneScripts/credits_extra.gd new file mode 100644 index 00000000..7b1a52b2 --- /dev/null +++ b/#Scenes/SceneScripts/credits_extra.gd @@ -0,0 +1,13 @@ +extends TextureRect + +func _ready() -> void: + self.modulate.a = 1 + var tween: Tween = get_tree().create_tween() + tween.tween_property(self, "modulate:a", 0, 1) + await get_tree().create_timer(10).timeout + var out_tween: Tween = get_tree().create_tween() + out_tween.tween_property(self, "modulate:a", 1, 2) + await get_tree().create_timer(3).timeout + SceneManager.goto_scene("res://#Scenes/MainMenu.tscn") + + diff --git a/#Scenes/SceneScripts/license.gd b/#Scenes/SceneScripts/license.gd new file mode 100644 index 00000000..ac658a30 --- /dev/null +++ b/#Scenes/SceneScripts/license.gd @@ -0,0 +1,57 @@ +extends Control + +@onready var license_label: Label = $"License label" + +const MIT_LICENSE_TEXT: String = '\nMIT License + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +' + +func _ready() -> void: + license_label.text = '' + +func _on_godot_engine_pressed() -> void: + license_label.text = ' + + This game uses Godot Engine, available under the following license: + + Copyright (c) 2014-present Godot Engine contributors. Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. + ' + + license_label.text += MIT_LICENSE_TEXT + + +func _on_dialogue_manager_pressed() -> void: + license_label.text = "Dialogue System by Nathan Hoad: https://github.com/nathanhoad/godot_dialogue_manager\n" + license_label.text += "Copyright (c) 2022-present Nathan Hoad and Dialogue Manager contributors.\n" + license_label.text += MIT_LICENSE_TEXT + + +func _on_smooth_scroll_pressed() -> void: + license_label.text = "Smooth Scroll by SpyrexDE: https://github.com/SpyrexDE/SmoothScroll\n" + license_label.text += "Copyright (c) 2022 Fabian Keßler\n" + license_label.text += MIT_LICENSE_TEXT + + +func _on_free_type_pressed() -> void: + license_label.text = "Portions of this software are copyright © 2023 The FreeType Project (www.freetype.org). All rights reserved. +" + + +# Final version of the game should use a template without ENet +func _on_e_net_pressed() -> void: + license_label.text = "Copyright (c) 2002-2024 Lee Salzman.\n" + license_label.text += MIT_LICENSE_TEXT + + +func _on_mbed_tls_pressed() -> void: + license_label.text = "Copyright The Mbed TLS Contributors\n\n" + license_label.text += Engine.get_license_info()["Apache-2.0"] + + +func _on_go_back_pressed() -> void: + SceneManager.goto_scene("res://#Scenes/MainMenu.tscn") diff --git a/#Scenes/credits.tscn b/#Scenes/credits.tscn index 843c2836..d9a50058 100644 --- a/#Scenes/credits.tscn +++ b/#Scenes/credits.tscn @@ -1,3 +1,547 @@ -[gd_scene format=3 uid="uid://cx0koj0qbu3k3"] +[gd_scene load_steps=20 format=3 uid="uid://ch8qid26mt5fs"] -[node name="Credits" type="Node2D"] +[ext_resource type="Texture2D" uid="uid://dxkon0ylsye4v" path="res://Art/Background/0-1.credits.png" id="1_4ctv3"] +[ext_resource type="Script" path="res://#Scenes/SceneScripts/credits.gd" id="1_km20a"] +[ext_resource type="Texture2D" uid="uid://cbg6dn7qw5pfy" path="res://Art/NPC/rescued_saplings_comfy_sleepy-static.png" id="2_y4lop"] +[ext_resource type="Texture2D" uid="uid://dk4m7alds0v51" path="res://Art/NPC/rescued_saplings_cool-static.png" id="3_ij6vd"] +[ext_resource type="Texture2D" uid="uid://dkcbfi6iaeeir" path="res://Art/NPC/rescued_saplings_emo-static.png" id="4_bi1w0"] +[ext_resource type="Texture2D" uid="uid://b6lam85b6kin7" path="res://Art/NPC/rescued_saplings_gamer-static.png" id="5_po57g"] +[ext_resource type="Texture2D" uid="uid://cwqwgrrwq5phb" path="res://Art/NPC/rescued_saplings_maid-static.png" id="6_en7ht"] +[ext_resource type="Texture2D" uid="uid://dq8xrca05abuq" path="res://Art/NPC/rescued_saplings_milf-static.png" id="7_h4sv1"] +[ext_resource type="Texture2D" uid="uid://bvolhkcto8xef" path="res://Art/NPC/rescued_saplings_nerd-static.png" id="8_xvqp0"] +[ext_resource type="Texture2D" uid="uid://dhi45aff4o0ia" path="res://Art/NPC/rescued_saplings_old-static.png" id="9_n610m"] +[ext_resource type="Texture2D" uid="uid://b2648vdvobbt" path="res://Art/NPC/rescued_saplings_snow-static.png" id="10_unw81"] +[ext_resource type="AnimationLibrary" uid="uid://dfkng08hfjpdv" path="res://Art/Animation/credits/In.res" id="11_xdj82"] +[ext_resource type="AnimationLibrary" uid="uid://jlt8btc7fx2j" path="res://Art/Animation/credits/Out.res" id="12_8iix6"] + +[sub_resource type="Gradient" id="Gradient_78fca"] + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_1cbhb"] +gradient = SubResource("Gradient_78fca") + +[sub_resource type="Animation" id="Animation_2v08l"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RescuedSaplingsSnowIn:position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(3678, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("RescuedSaplingsSnowIn:position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(823, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("RescuedSaplingsSnowIn:rotation") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.0817433, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("RescuedSaplingsSnowIn:scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.3, 0.23597)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("RescuedSaplingsOldIn:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("RescuedSaplingsOldIn:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2949, 809)] +} +tracks/6/type = "bezier" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("RescuedSaplingsNerdIn:position:x") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(3689, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/7/type = "bezier" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("RescuedSaplingsNerdIn:position:y") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1144, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("RescuedSaplingsNerdIn:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.3, 0.3)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("RescuedSaplingsMilfIn:scale") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.3, 0.3)] +} +tracks/10/type = "bezier" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("RescuedSaplingsMilfIn:position:x") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(3278, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/11/type = "bezier" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("RescuedSaplingsMilfIn:position:y") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1136, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/12/type = "bezier" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("RescuedSaplingsMaidIn:position:x") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(3706, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/13/type = "bezier" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("RescuedSaplingsMaidIn:position:y") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1423, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/14/type = "bezier" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("RescuedSaplingsEmoIn:position:x") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(2914, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/15/type = "bezier" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("RescuedSaplingsEmoIn:position:y") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1455, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("RescuedSaplingsEmoIn:scale") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.3, 0.3)] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("RescuedSaplingsGamerIn:position") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(2938, 1154)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("RescuedSaplingsGamerIn:rotation") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("RescuedSaplingsCoolIn:position") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3261, 806)] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("RescuedSaplingsCoolIn:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0.3, 0.3)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("RescuedSaplingsSleepyIn:position") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3280, 1459)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ovav8"] +_data = { +"RESET": SubResource("Animation_2v08l") +} + +[sub_resource type="Animation" id="Animation_3w5yu"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("RescuedSaplingsCoolOut:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1306, 777)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("RescuedSaplingsSnowOut:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-924, 831)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("RescuedSaplingsOldOut:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1653, 817)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("RescuedSaplingsNerdOut:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-913, 1152)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("RescuedSaplingsMilfOut:position") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1324, 1144)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("RescuedSaplingsGamerOut:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1664, 1162)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("RescuedSaplingsEmoOut:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1688, 1463)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("RescuedSaplingsSleepyOut:position") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-1322, 1467)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("RescuedSaplingsMaidOut:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(-896, 1431)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_hn5re"] +_data = { +"RESET": SubResource("Animation_3w5yu") +} + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_km20a") + +[node name="Background" type="TextureRect" parent="."] +offset_right = 40.0 +offset_bottom = 40.0 +texture = ExtResource("1_4ctv3") + +[node name="CenterContainer" type="CenterContainer" parent="Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -907.5 +offset_top = -310.0 +offset_right = 907.5 +offset_bottom = 247.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Label" type="Label" parent="Background/CenterContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 100 +text = "Name +Role 1, Role 2 +Role 3 + +" +horizontal_alignment = 1 + +[node name="BlackOverlay" type="TextureRect" parent="."] +modulate = Color(0, 0, 0, 1) +custom_minimum_size = Vector2(1920, 1080) +offset_right = 1920.0 +offset_bottom = 1080.0 +texture = SubResource("GradientTexture2D_1cbhb") + +[node name="RescuedSaplingsCoolIn" type="Sprite2D" parent="."] +position = Vector2(3261, 806) +scale = Vector2(0.3, 0.3) +texture = ExtResource("3_ij6vd") + +[node name="RescuedSaplingsEmoIn" type="Sprite2D" parent="."] +position = Vector2(2914, 1455) +scale = Vector2(0.3, 0.3) +texture = ExtResource("4_bi1w0") + +[node name="RescuedSaplingsGamerIn" type="Sprite2D" parent="."] +position = Vector2(2938, 1154) +scale = Vector2(0.3, 0.3) +texture = ExtResource("5_po57g") + +[node name="RescuedSaplingsMaidIn" type="Sprite2D" parent="."] +position = Vector2(3706, 1423) +scale = Vector2(0.3, 0.3) +texture = ExtResource("6_en7ht") + +[node name="RescuedSaplingsMilfIn" type="Sprite2D" parent="."] +position = Vector2(3278, 1136) +scale = Vector2(0.3, 0.3) +texture = ExtResource("7_h4sv1") + +[node name="RescuedSaplingsNerdIn" type="Sprite2D" parent="."] +position = Vector2(3689, 1144) +scale = Vector2(0.3, 0.3) +texture = ExtResource("8_xvqp0") + +[node name="RescuedSaplingsOldIn" type="Sprite2D" parent="."] +position = Vector2(2949, 809) +scale = Vector2(0.3, 0.3) +texture = ExtResource("9_n610m") + +[node name="RescuedSaplingsSleepyIn" type="Sprite2D" parent="."] +position = Vector2(3280, 1459) +scale = Vector2(0.3, 0.3) +texture = ExtResource("2_y4lop") + +[node name="RescuedSaplingsSnowIn" type="Sprite2D" parent="."] +position = Vector2(3678, 823) +rotation = 0.0817433 +scale = Vector2(0.3, 0.23597) +texture = ExtResource("10_unw81") + +[node name="AnimationPlayerIn" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_ovav8"), +"In": ExtResource("11_xdj82"), +"Out": ExtResource("12_8iix6") +} +speed_scale = 1.5 + +[node name="AnimationPlayerOut" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_hn5re"), +"Out": ExtResource("12_8iix6") +} +speed_scale = 2.0 + +[node name="RescuedSaplingsCoolOut" type="Sprite2D" parent="."] +position = Vector2(-1306, 777) +scale = Vector2(0.3, 0.3) +texture = ExtResource("3_ij6vd") + +[node name="RescuedSaplingsEmoOut" type="Sprite2D" parent="."] +position = Vector2(-1688, 1463) +scale = Vector2(0.3, 0.3) +texture = ExtResource("4_bi1w0") + +[node name="RescuedSaplingsGamerOut" type="Sprite2D" parent="."] +position = Vector2(-1664, 1162) +rotation = 2.03914 +scale = Vector2(0.3, 0.3) +texture = ExtResource("5_po57g") + +[node name="RescuedSaplingsMaidOut" type="Sprite2D" parent="."] +position = Vector2(-896, 1431) +scale = Vector2(0.3, 0.3) +texture = ExtResource("6_en7ht") + +[node name="RescuedSaplingsMilfOut" type="Sprite2D" parent="."] +position = Vector2(-1324, 1144) +scale = Vector2(0.3, 0.3) +texture = ExtResource("7_h4sv1") + +[node name="RescuedSaplingsNerdOut" type="Sprite2D" parent="."] +position = Vector2(-913, 1152) +scale = Vector2(0.3, 0.3) +texture = ExtResource("8_xvqp0") + +[node name="RescuedSaplingsOldOut" type="Sprite2D" parent="."] +position = Vector2(-1653, 817) +rotation = -12.5664 +scale = Vector2(0.3, 0.3) +texture = ExtResource("9_n610m") + +[node name="RescuedSaplingsSleepyOut" type="Sprite2D" parent="."] +position = Vector2(-1322, 1467) +scale = Vector2(0.227, 0.35) +texture = ExtResource("2_y4lop") + +[node name="RescuedSaplingsSnowOut" type="Sprite2D" parent="."] +position = Vector2(-924, 831) +rotation = 0.0934342 +scale = Vector2(0.3, 0.289995) +texture = ExtResource("10_unw81") diff --git a/#Scenes/credits_extra.tscn b/#Scenes/credits_extra.tscn new file mode 100644 index 00000000..009291de --- /dev/null +++ b/#Scenes/credits_extra.tscn @@ -0,0 +1,80 @@ +[gd_scene load_steps=7 format=3 uid="uid://coqwtdslsey32"] + +[ext_resource type="Texture2D" uid="uid://rxkwjoukig2y" path="res://icon.svg" id="2_v1h4t"] +[ext_resource type="Script" path="res://#Scenes/SceneScripts/credits_extra.gd" id="2_xvyvg"] + +[sub_resource type="Gradient" id="Gradient_l2aw6"] +colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_62dj5"] +gradient = SubResource("Gradient_l2aw6") + +[sub_resource type="Gradient" id="Gradient_fubce"] +colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_8fmwg"] +gradient = SubResource("Gradient_fubce") + +[node name="Node2D" type="Node2D"] + +[node name="TextureRect" type="TextureRect" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 1920.0 +offset_bottom = 1080.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture1D_62dj5") + +[node name="Icon" type="Sprite2D" parent="."] +position = Vector2(960, 305) +scale = Vector2(0.26123, 0.26123) +texture = ExtResource("2_v1h4t") + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="GodotEngine" type="Label" parent="Control"] +custom_minimum_size = Vector2(1920, 0) +layout_mode = 2 +offset_right = 1920.0 +offset_bottom = 83.0 +size_flags_vertical = 0 +theme_override_font_sizes/font_size = 80 +text = "Made using Godot Engine" +horizontal_alignment = 1 + +[node name="Addons" type="Label" parent="Control"] +custom_minimum_size = Vector2(1920, 0) +layout_mode = 2 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = 487.0 +offset_right = 1880.0 +offset_bottom = 1000.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 8 +theme_override_font_sizes/font_size = 60 +text = "Addons: +Dialogue System by Nathan Hoad +Smooth Scroll by SpyrexDE + +For more information about licenses and copyrights, see the options +" +horizontal_alignment = 1 +autowrap_mode = 2 + +[node name="TextureRect2" type="TextureRect" parent="."] +custom_minimum_size = Vector2(1920, 1080) +offset_right = 40.0 +offset_bottom = 40.0 +texture = SubResource("GradientTexture2D_8fmwg") +script = ExtResource("2_xvyvg") diff --git a/Art/Animation/credits/In.res b/Art/Animation/credits/In.res new file mode 100644 index 00000000..ae8c7c75 Binary files /dev/null and b/Art/Animation/credits/In.res differ diff --git a/Art/Animation/credits/Out.res b/Art/Animation/credits/Out.res new file mode 100644 index 00000000..cef07c5d Binary files /dev/null and b/Art/Animation/credits/Out.res differ diff --git a/Art/Background/0-1.credits.png b/Art/Background/0-1.credits.png new file mode 100644 index 00000000..d00d6b51 Binary files /dev/null and b/Art/Background/0-1.credits.png differ diff --git a/Art/NPC/rescued_saplings_nerd-1.test.png.import b/Art/Background/0-1.credits.png.import similarity index 64% rename from Art/NPC/rescued_saplings_nerd-1.test.png.import rename to Art/Background/0-1.credits.png.import index c6cdcfe1..99de683f 100644 --- a/Art/NPC/rescued_saplings_nerd-1.test.png.import +++ b/Art/Background/0-1.credits.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cnnelgrlm6grx" -path="res://.godot/imported/rescued_saplings_nerd-1.test.png-aed7cd7ec416325aa101246a37df79b7.ctex" +uid="uid://dxkon0ylsye4v" +path="res://.godot/imported/0-1.credits.png-34b244dd017ffc70f42419386e47676a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Art/NPC/rescued_saplings_nerd-1.test.png" -dest_files=["res://.godot/imported/rescued_saplings_nerd-1.test.png-aed7cd7ec416325aa101246a37df79b7.ctex"] +source_file="res://Art/Background/0-1.credits.png" +dest_files=["res://.godot/imported/0-1.credits.png-34b244dd017ffc70f42419386e47676a.ctex"] [params] diff --git a/Art/Background/0-1.credits.png~ b/Art/Background/0-1.credits.png~ new file mode 100644 index 00000000..25bd64b4 Binary files /dev/null and b/Art/Background/0-1.credits.png~ differ diff --git a/Art/NPC/rescued_saplings_comfy_sleepy-1.test.png b/Art/NPC/rescued_saplings_comfy_sleepy-static.png similarity index 100% rename from Art/NPC/rescued_saplings_comfy_sleepy-1.test.png rename to Art/NPC/rescued_saplings_comfy_sleepy-static.png diff --git a/Art/NPC/rescued_saplings_comfy_sleepy-1.test.png.import b/Art/NPC/rescued_saplings_comfy_sleepy-static.png.import similarity index 70% rename from Art/NPC/rescued_saplings_comfy_sleepy-1.test.png.import rename to Art/NPC/rescued_saplings_comfy_sleepy-static.png.import index e255d494..59e7d9f3 100644 --- a/Art/NPC/rescued_saplings_comfy_sleepy-1.test.png.import +++ b/Art/NPC/rescued_saplings_comfy_sleepy-static.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://jdd721vyn4lp" -path="res://.godot/imported/rescued_saplings_comfy_sleepy-1.test.png-f63d28d050934f744e0f15ef547d215e.ctex" +uid="uid://cbg6dn7qw5pfy" +path="res://.godot/imported/rescued_saplings_comfy_sleepy-static.png-bad8a42fd88f5dd7ea08be60110e7e5a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Art/NPC/rescued_saplings_comfy_sleepy-1.test.png" -dest_files=["res://.godot/imported/rescued_saplings_comfy_sleepy-1.test.png-f63d28d050934f744e0f15ef547d215e.ctex"] +source_file="res://Art/NPC/rescued_saplings_comfy_sleepy-static.png" +dest_files=["res://.godot/imported/rescued_saplings_comfy_sleepy-static.png-bad8a42fd88f5dd7ea08be60110e7e5a.ctex"] [params] diff --git a/Art/NPC/rescued_saplings_cool-static.png b/Art/NPC/rescued_saplings_cool-static.png new file mode 100644 index 00000000..c1dba546 Binary files /dev/null and b/Art/NPC/rescued_saplings_cool-static.png differ diff --git a/Art/NPC/rescued_saplings_cool-static.png.import b/Art/NPC/rescued_saplings_cool-static.png.import new file mode 100644 index 00000000..fda96827 --- /dev/null +++ b/Art/NPC/rescued_saplings_cool-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk4m7alds0v51" +path="res://.godot/imported/rescued_saplings_cool-static.png-d5c60a2d80adb5975289405c259feda2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_cool-static.png" +dest_files=["res://.godot/imported/rescued_saplings_cool-static.png-d5c60a2d80adb5975289405c259feda2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_emo-static.png b/Art/NPC/rescued_saplings_emo-static.png new file mode 100644 index 00000000..7d9b94b7 Binary files /dev/null and b/Art/NPC/rescued_saplings_emo-static.png differ diff --git a/Art/NPC/rescued_saplings_emo-static.png.import b/Art/NPC/rescued_saplings_emo-static.png.import new file mode 100644 index 00000000..0e3c283e --- /dev/null +++ b/Art/NPC/rescued_saplings_emo-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dkcbfi6iaeeir" +path="res://.godot/imported/rescued_saplings_emo-static.png-45b6111d28eb2dad77d1d56a699415cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_emo-static.png" +dest_files=["res://.godot/imported/rescued_saplings_emo-static.png-45b6111d28eb2dad77d1d56a699415cf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_gamer-static.png b/Art/NPC/rescued_saplings_gamer-static.png new file mode 100644 index 00000000..413ef701 Binary files /dev/null and b/Art/NPC/rescued_saplings_gamer-static.png differ diff --git a/Art/NPC/rescued_saplings_gamer-static.png.import b/Art/NPC/rescued_saplings_gamer-static.png.import new file mode 100644 index 00000000..2a798f66 --- /dev/null +++ b/Art/NPC/rescued_saplings_gamer-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6lam85b6kin7" +path="res://.godot/imported/rescued_saplings_gamer-static.png-e100ef6d1a7a9a04f4040e950373097a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_gamer-static.png" +dest_files=["res://.godot/imported/rescued_saplings_gamer-static.png-e100ef6d1a7a9a04f4040e950373097a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_maid-static.png b/Art/NPC/rescued_saplings_maid-static.png new file mode 100644 index 00000000..0de560cb Binary files /dev/null and b/Art/NPC/rescued_saplings_maid-static.png differ diff --git a/Art/NPC/rescued_saplings_maid-static.png.import b/Art/NPC/rescued_saplings_maid-static.png.import new file mode 100644 index 00000000..5a3df218 --- /dev/null +++ b/Art/NPC/rescued_saplings_maid-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cwqwgrrwq5phb" +path="res://.godot/imported/rescued_saplings_maid-static.png-0fb5adb9af20e179c507c5c4e63a2b55.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_maid-static.png" +dest_files=["res://.godot/imported/rescued_saplings_maid-static.png-0fb5adb9af20e179c507c5c4e63a2b55.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_milf-static.png b/Art/NPC/rescued_saplings_milf-static.png new file mode 100644 index 00000000..fbb2824f Binary files /dev/null and b/Art/NPC/rescued_saplings_milf-static.png differ diff --git a/Art/NPC/rescued_saplings_milf-static.png.import b/Art/NPC/rescued_saplings_milf-static.png.import new file mode 100644 index 00000000..110802bf --- /dev/null +++ b/Art/NPC/rescued_saplings_milf-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dq8xrca05abuq" +path="res://.godot/imported/rescued_saplings_milf-static.png-e9bc1de942e1bd861c77947229ee7fea.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_milf-static.png" +dest_files=["res://.godot/imported/rescued_saplings_milf-static.png-e9bc1de942e1bd861c77947229ee7fea.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_nerd-1.test.png b/Art/NPC/rescued_saplings_nerd-static.png similarity index 100% rename from Art/NPC/rescued_saplings_nerd-1.test.png rename to Art/NPC/rescued_saplings_nerd-static.png diff --git a/Art/NPC/rescued_saplings_nerd-static.png.import b/Art/NPC/rescued_saplings_nerd-static.png.import new file mode 100644 index 00000000..473e87a5 --- /dev/null +++ b/Art/NPC/rescued_saplings_nerd-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bvolhkcto8xef" +path="res://.godot/imported/rescued_saplings_nerd-static.png-a64f87f4b665240421c6785d8440483f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_nerd-static.png" +dest_files=["res://.godot/imported/rescued_saplings_nerd-static.png-a64f87f4b665240421c6785d8440483f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_old-static.png b/Art/NPC/rescued_saplings_old-static.png new file mode 100644 index 00000000..126f0a74 Binary files /dev/null and b/Art/NPC/rescued_saplings_old-static.png differ diff --git a/Art/NPC/rescued_saplings_old-static.png.import b/Art/NPC/rescued_saplings_old-static.png.import new file mode 100644 index 00000000..600997a3 --- /dev/null +++ b/Art/NPC/rescued_saplings_old-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhi45aff4o0ia" +path="res://.godot/imported/rescued_saplings_old-static.png-cd319e14f7a55e17a7b58b2cdc11b6a0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_old-static.png" +dest_files=["res://.godot/imported/rescued_saplings_old-static.png-cd319e14f7a55e17a7b58b2cdc11b6a0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Art/NPC/rescued_saplings_snow-static.png b/Art/NPC/rescued_saplings_snow-static.png new file mode 100644 index 00000000..78c824c5 Binary files /dev/null and b/Art/NPC/rescued_saplings_snow-static.png differ diff --git a/Art/NPC/rescued_saplings_snow-static.png.import b/Art/NPC/rescued_saplings_snow-static.png.import new file mode 100644 index 00000000..9a5b2496 --- /dev/null +++ b/Art/NPC/rescued_saplings_snow-static.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2648vdvobbt" +path="res://.godot/imported/rescued_saplings_snow-static.png-ae4ae985ed47329612f493edb7570930.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Art/NPC/rescued_saplings_snow-static.png" +dest_files=["res://.godot/imported/rescued_saplings_snow-static.png-ae4ae985ed47329612f493edb7570930.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Global/Global_Enums.gd b/Global/Global_Enums.gd index 353d37d2..3d7e2f4c 100644 --- a/Global/Global_Enums.gd +++ b/Global/Global_Enums.gd @@ -101,6 +101,20 @@ enum EventType { Dialogue, } + +enum SaplingType { + Sleepy, + Cool, + Emo, + Gamer, + Maid, + Milf, + Nerd, + Old, + Snow, + None, +} + ## Helper function that returns the Event resource depending on the given EventType static func choose_event_from_type(event_type: EventType) -> EventBase: match event_type: