straywild/ui/save_slots_page.tscn
Voyager 3b84bfe3a0 feat: expand progression and multiplayer systems
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.
2026-08-23 20:49:54 -04:00

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"