wayfarers_wanderer/boot/options_menu.tscn
Jonas Reith 67862a46f3 Add boot flow, save-system skeleton, and Equipment skeleton
boot/: opening_screen (attribution -> title/flavor text placeholder,
explicitly marked TODO for a later real cinematic, skippable by
keypress/click) -> main_menu (Neues Spiel/Fortsetzen/Optionen/Credits/
Beenden, ConfirmationDialog for overwrite-existing-save) -> options_menu
(TabContainer with 4 empty placeholder categories: Grafik/Sound/
Steuerung/Spieloptionen) and credits_screen, both just navigable stubs.
project.godot's run/main_scene now points at boot/opening_screen.tscn
instead of directly at the gameplay scene.

autoload/save_manager.gd: new SaveManager singleton. Deliberately
minimal — persists only a timestamp to user://savegame.json — but a
real, working has_save()/save_game()/load_game()/start_new_game()
round trip, enough to back the menu's Start/Continue/overwrite-confirm
logic without inventing game state that doesn't exist yet.

player/equipment/: Equipment (Node) + EquipmentItem (Resource) stub
classes per the user's explicit ask for a "class diagram skeleton" to
build on later — exported fields and empty TODO methods, no logic.
Wired as a child of world/island.tscn's real Player (not player.tscn,
which is only a debug prototype scene, not the actual game's player).
player.gd's new `equipment` onready var uses get_node_or_null() since
that child only exists on the real player, not every scene reusing
this script.

Verified headless: all new boot scenes load cleanly, a full boot smoke
test via run/main_scene succeeds, and — since button-click navigation
can't be simulated headlessly — SaveManager's actual save/load/
overwrite/cleanup cycle was exercised directly and behaves correctly
(has_save flips true/false correctly, loaded data matches what was
saved). Manual in-editor check of the menu navigation itself is still
needed and not yet done.
2026-08-27 09:21:15 +02:00

75 lines
1.7 KiB
Plaintext

[gd_scene format=3]
[ext_resource type="Script" path="res://boot/options_menu.gd" id="1_options"]
[node name="OptionsMenu" type="Control"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_options")
[node name="TitleLabel" type="Label" parent="."]
offset_left = 40.0
offset_top = 30.0
offset_right = 400.0
offset_bottom = 70.0
text = "Optionen"
[node name="Categories" type="TabContainer" parent="."]
offset_left = 40.0
offset_top = 90.0
offset_right = 1240.0
offset_bottom = 620.0
[node name="Grafik" type="Control" parent="Categories"]
layout_mode = 2
[node name="Label" type="Label" parent="Categories/Grafik"]
offset_left = 20.0
offset_top = 20.0
offset_right = 500.0
offset_bottom = 50.0
text = "TODO: Grafik-Einstellungen"
[node name="Sound" type="Control" parent="Categories"]
visible = false
layout_mode = 2
[node name="Label" type="Label" parent="Categories/Sound"]
offset_left = 20.0
offset_top = 20.0
offset_right = 500.0
offset_bottom = 50.0
text = "TODO: Sound-Einstellungen"
[node name="Steuerung" type="Control" parent="Categories"]
visible = false
layout_mode = 2
[node name="Label" type="Label" parent="Categories/Steuerung"]
offset_left = 20.0
offset_top = 20.0
offset_right = 500.0
offset_bottom = 50.0
text = "TODO: Steuerungs-Einstellungen"
[node name="Spieloptionen" type="Control" parent="Categories"]
visible = false
layout_mode = 2
[node name="Label" type="Label" parent="Categories/Spieloptionen"]
offset_left = 20.0
offset_top = 20.0
offset_right = 500.0
offset_bottom = 50.0
text = "TODO: Spieloptionen"
[node name="BackButton" type="Button" parent="."]
offset_left = 40.0
offset_top = 640.0
offset_right = 160.0
offset_bottom = 675.0
text = "Zurück"