Add named save slots, progression import/export, and a unified play flow. Add live friend requests, presence, invitations, and relationship controls without durable discovery-server social storage. Advance the network protocol with isolated channels, movement reconciliation, late-join recovery, fishing replication, and animation synchronization. Preserve per-species catch totals, refine generated-world startup and water recovery, and complete the related input and interface improvements.
350 lines
12 KiB
Text
350 lines
12 KiB
Text
[gd_scene load_steps=4 format=3]
|
|
|
|
[ext_resource type="Script" path="res://ui/save_slots_page.gd" id="1_script"]
|
|
[ext_resource type="Theme" path="res://ui/game_theme.tres" id="2_theme"]
|
|
[ext_resource type="Script" path="res://ui/components/organizer_tab.gd" id="3_tab"]
|
|
|
|
[node name="SaveSlotsPage" type="Control"]
|
|
visible = false
|
|
layout_mode = 3
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme = ExtResource("2_theme")
|
|
script = ExtResource("1_script")
|
|
|
|
[node name="MainPanel" type="PanelContainer" parent="."]
|
|
unique_name_in_owner = true
|
|
layout_mode = 1
|
|
anchors_preset = 8
|
|
anchor_left = 0.5
|
|
anchor_top = 0.5
|
|
anchor_right = 0.5
|
|
anchor_bottom = 0.5
|
|
offset_left = -440.0
|
|
offset_top = -330.0
|
|
offset_right = 440.0
|
|
offset_bottom = 330.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
|
|
[node name="OuterMargin" type="MarginContainer" parent="MainPanel"]
|
|
layout_mode = 2
|
|
theme_override_constants/margin_left = 24
|
|
theme_override_constants/margin_top = 18
|
|
theme_override_constants/margin_right = 24
|
|
theme_override_constants/margin_bottom = 18
|
|
|
|
[node name="Layout" type="VBoxContainer" parent="MainPanel/OuterMargin"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = -26
|
|
|
|
[node name="Heading" type="Label" parent="MainPanel/OuterMargin/Layout"]
|
|
custom_minimum_size = Vector2(0, 66)
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 30
|
|
text = "play"
|
|
horizontal_alignment = 1
|
|
|
|
[node name="TabBar" type="HBoxContainer" parent="MainPanel/OuterMargin/Layout"]
|
|
custom_minimum_size = Vector2(0, 52)
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 8
|
|
alignment = 1
|
|
|
|
[node name="SavesTab" type="Button" parent="MainPanel/OuterMargin/Layout/TabBar"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(180, 52)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
text = "save slots"
|
|
script = ExtResource("3_tab")
|
|
|
|
[node name="NewSlotTab" type="Button" parent="MainPanel/OuterMargin/Layout/TabBar"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(180, 52)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
text = "new slot"
|
|
script = ExtResource("3_tab")
|
|
palette_index = 1
|
|
|
|
[node name="ContentPanel" type="PanelContainer" parent="MainPanel/OuterMargin/Layout"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 474)
|
|
layout_mode = 2
|
|
size_flags_vertical = 3
|
|
|
|
[node name="ContentMargin" type="MarginContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel"]
|
|
layout_mode = 2
|
|
theme_override_constants/margin_left = 28
|
|
theme_override_constants/margin_top = 20
|
|
theme_override_constants/margin_right = 28
|
|
theme_override_constants/margin_bottom = 20
|
|
|
|
[node name="PageStack" type="Control" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin"]
|
|
layout_mode = 2
|
|
|
|
[node name="SavesPage" type="HBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme_override_constants/separation = 20
|
|
|
|
[node name="SlotsColumn" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage"]
|
|
custom_minimum_size = Vector2(340, 0)
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 10
|
|
|
|
[node name="Title" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/SlotsColumn"]
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 20
|
|
text = "save slots"
|
|
|
|
[node name="SlotScroll" type="ScrollContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/SlotsColumn"]
|
|
layout_mode = 2
|
|
size_flags_vertical = 3
|
|
horizontal_scroll_mode = 0
|
|
follow_focus = true
|
|
|
|
[node name="SlotList" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/SlotsColumn/SlotScroll"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="EmptySlotsLabel" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/SlotsColumn/SlotScroll/SlotList"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 100)
|
|
layout_mode = 2
|
|
text = "no save slots yet"
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
|
|
[node name="ImportSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/SlotsColumn"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
text = "import save"
|
|
|
|
[node name="Divider" type="VSeparator" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage"]
|
|
layout_mode = 2
|
|
|
|
[node name="DetailsColumn" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage"]
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
theme_override_constants/separation = 10
|
|
|
|
[node name="Title" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn"]
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 20
|
|
text = "selected slot"
|
|
|
|
[node name="SelectedSlotName" type="LineEdit" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
placeholder_text = "save slot name"
|
|
max_length = 32
|
|
|
|
[node name="SlotSummary" type="RichTextLabel" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_vertical = 3
|
|
bbcode_enabled = true
|
|
fit_content = true
|
|
scroll_active = false
|
|
autowrap_mode = 2
|
|
vertical_alignment = 1
|
|
|
|
[node name="Actions" type="GridContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn"]
|
|
layout_mode = 2
|
|
theme_override_constants/h_separation = 10
|
|
theme_override_constants/v_separation = 10
|
|
columns = 2
|
|
|
|
[node name="PlaySlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn/Actions"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
focus_mode = 2
|
|
text = "play"
|
|
|
|
[node name="RenameSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn/Actions"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
focus_mode = 2
|
|
text = "rename"
|
|
|
|
[node name="DuplicateSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn/Actions"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
focus_mode = 2
|
|
text = "duplicate"
|
|
|
|
[node name="ExportSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn/Actions"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
focus_mode = 2
|
|
text = "export"
|
|
|
|
[node name="DeleteSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/SavesPage/DetailsColumn/Actions"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 46)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
focus_mode = 2
|
|
text = "delete"
|
|
|
|
[node name="NewSlotPage" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack"]
|
|
unique_name_in_owner = true
|
|
visible = false
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme_override_constants/separation = 9
|
|
|
|
[node name="NewSlotHeading" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 20
|
|
text = "new progression"
|
|
horizontal_alignment = 1
|
|
|
|
[node name="NewSlotName" type="LineEdit" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 44)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
placeholder_text = "save slot name"
|
|
alignment = 1
|
|
max_length = 32
|
|
|
|
[node name="WorldButtons" type="HBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 14
|
|
alignment = 1
|
|
|
|
[node name="GeneratedButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/WorldButtons"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(230, 48)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
toggle_mode = true
|
|
text = "generate a world"
|
|
|
|
[node name="StarterButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/WorldButtons"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(230, 48)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
toggle_mode = true
|
|
text = "starter island"
|
|
|
|
[node name="WorldDescription" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 42)
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 15
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
autowrap_mode = 2
|
|
|
|
[node name="SeedSection" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 7
|
|
|
|
[node name="SeedModes" type="HBoxContainer" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/SeedSection"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 14
|
|
alignment = 1
|
|
|
|
[node name="RandomSeedButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/SeedSection/SeedModes"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(190, 44)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
toggle_mode = true
|
|
text = "random seed"
|
|
|
|
[node name="CustomSeedButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/SeedSection/SeedModes"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(190, 44)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
toggle_mode = true
|
|
text = "enter a seed"
|
|
|
|
[node name="SeedEdit" type="LineEdit" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/SeedSection"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 42)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
placeholder_text = "number or words"
|
|
alignment = 1
|
|
max_length = 64
|
|
|
|
[node name="SeedHelp" type="Label" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage/SeedSection"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 24)
|
|
layout_mode = 2
|
|
theme_override_font_sizes/font_size = 13
|
|
horizontal_alignment = 1
|
|
|
|
[node name="Spacer" type="Control" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
layout_mode = 2
|
|
size_flags_vertical = 3
|
|
|
|
[node name="CreateSlotButton" type="Button" parent="MainPanel/OuterMargin/Layout/ContentPanel/ContentMargin/PageStack/NewSlotPage"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(260, 48)
|
|
layout_mode = 2
|
|
size_flags_horizontal = 4
|
|
focus_mode = 2
|
|
text = "create and play"
|
|
|
|
[node name="FooterGroup" type="MarginContainer" parent="MainPanel/OuterMargin/Layout"]
|
|
layout_mode = 2
|
|
theme_override_constants/margin_top = 34
|
|
|
|
[node name="FooterLayout" type="VBoxContainer" parent="MainPanel/OuterMargin/Layout/FooterGroup"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="Status" type="Label" parent="MainPanel/OuterMargin/Layout/FooterGroup/FooterLayout"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 24)
|
|
layout_mode = 2
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
text_overrun_behavior = 3
|
|
|
|
[node name="Footer" type="HBoxContainer" parent="MainPanel/OuterMargin/Layout/FooterGroup/FooterLayout"]
|
|
layout_mode = 2
|
|
alignment = 2
|
|
|
|
[node name="BackButton" type="Button" parent="MainPanel/OuterMargin/Layout/FooterGroup/FooterLayout/Footer"]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(150, 46)
|
|
layout_mode = 2
|
|
focus_mode = 2
|
|
text = "back"
|