[gd_scene load_steps=3 format=3 uid="uid://bcq14356s3e2i"] [ext_resource type="Script" path="res://scripts/main_menu.gd" id="1_menu"] [ext_resource type="Theme" path="res://themes/cosmic_clash_theme.tres" id="2_theme"] [node name="MainMenu" 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_menu") theme = ExtResource("2_theme") [node name="MarginContainer" type="MarginContainer" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 theme_override_constants/margin_left = 24 theme_override_constants/margin_top = 24 theme_override_constants/margin_right = 24 theme_override_constants/margin_bottom = 24 [node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"] layout_mode = 2 follow_focus = true horizontal_scroll_mode = 0 [node name="CenterContainer" type="CenterContainer" parent="MarginContainer/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer"] custom_minimum_size = Vector2(420, 0) layout_mode = 2 theme_override_constants/separation = 10 [node name="TitleLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 48 text = "Cosmic Clash" horizontal_alignment = 1 [node name="SubtitleLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 16 text = "Physics-based soccer in space" horizontal_alignment = 1 [node name="TitleSpacer" type="Control" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 14) layout_mode = 2 [node name="FreePlayButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 56) layout_mode = 2 text = "Free Play" [node name="FreePlayHint" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "Solo practice — no timer, R resets the ball" horizontal_alignment = 1 [node name="ArenaRow" type="HBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_constants/separation = 10 [node name="ArenaLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/ArenaRow"] layout_mode = 2 text = "Arena" [node name="ArenaDropdown" type="OptionButton" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/ArenaRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 [node name="MatchSeparator" type="HSeparator" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 [node name="MatchHeader" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 22 text = "Match" [node name="MatchHint" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "A 2:30 match — you vs a trained bot" [node name="MatchRow" type="HBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_constants/separation = 10 [node name="DifficultyLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/MatchRow"] layout_mode = 2 text = "Difficulty" [node name="DifficultyDropdown" type="OptionButton" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/MatchRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 [node name="MatchButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 56) layout_mode = 2 text = "Play Match" [node name="MultiplayerSeparator" type="HSeparator" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 [node name="MultiplayerHeader" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 22 text = "Multiplayer" [node name="MultiplayerHint" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "LAN / direct IP — host a match or join one" [node name="FindMatchButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 48) layout_mode = 2 text = "Find Match" [node name="HostButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 48) layout_mode = 2 text = "Host" [node name="JoinRow" type="HBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 theme_override_constants/separation = 10 [node name="JoinAddressEdit" type="LineEdit" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/JoinRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 text = "127.0.0.1" placeholder_text = "IP address" [node name="JoinButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/JoinRow"] custom_minimum_size = Vector2(96, 40) layout_mode = 2 text = "Join" [node name="MultiplayerErrorLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] unique_name_in_owner = true modulate = Color(1, 0.5, 0.5, 1) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "" autowrap_mode = 2 visible = false [node name="SettingsSeparator" type="HSeparator" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] layout_mode = 2 [node name="SettingsButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] custom_minimum_size = Vector2(0, 56) layout_mode = 2 text = "Settings" [node name="DevSection" type="VBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 theme_override_constants/separation = 10 [node name="DevSeparator" type="HSeparator" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 [node name="DevHeader" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 theme_override_font_sizes/font_size = 22 text = "Developer" [node name="DevHint" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "Dev-only — hidden in release builds" [node name="DevOpponentRow" type="HBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 theme_override_constants/separation = 10 [node name="DevOpponentLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/DevOpponentRow"] layout_mode = 2 text = "Opponent override" [node name="DevBotDropdown" type="OptionButton" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/DevOpponentRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 [node name="SpectateSeparator" type="HSeparator" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 [node name="SpectateHeader" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 theme_override_font_sizes/font_size = 22 text = "Spectate" [node name="SpectateHint" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] modulate = Color(1, 1, 1, 0.55) layout_mode = 2 theme_override_font_sizes/font_size = 13 text = "Watch two bots play each other" [node name="SpectateRow" type="HBoxContainer" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] layout_mode = 2 theme_override_constants/separation = 10 [node name="BotADropdown" type="OptionButton" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/SpectateRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 [node name="VsLabel" type="Label" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/SpectateRow"] layout_mode = 2 text = "vs" [node name="BotBDropdown" type="OptionButton" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/SpectateRow"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 40) layout_mode = 2 size_flags_horizontal = 3 [node name="SpectateButton" type="Button" parent="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection"] custom_minimum_size = Vector2(0, 56) layout_mode = 2 text = "Watch Match" [node name="ConnectingOverlay" type="Control" parent="."] 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 mouse_filter = 1 [node name="Backdrop" type="ColorRect" parent="ConnectingOverlay"] 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.7) [node name="CenterContainer" type="CenterContainer" parent="ConnectingOverlay"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 [node name="VBoxContainer" type="VBoxContainer" parent="ConnectingOverlay/CenterContainer"] custom_minimum_size = Vector2(360, 0) layout_mode = 2 theme_override_constants/separation = 14 [node name="ConnectingStatusLabel" type="Label" parent="ConnectingOverlay/CenterContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 theme_override_font_sizes/font_size = 18 text = "Connecting..." horizontal_alignment = 1 autowrap_mode = 2 [node name="ConnectingCancelButton" type="Button" parent="ConnectingOverlay/CenterContainer/VBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 48) layout_mode = 2 text = "Cancel" [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/FreePlayButton" to="." method="_on_free_play_pressed"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/MatchButton" to="." method="_on_match_pressed"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/FindMatchButton" to="." method="_on_find_match_pressed"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/HostButton" to="." method="_on_host_pressed"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/JoinRow/JoinButton" to="." method="_on_join_pressed"] [connection signal="text_submitted" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/JoinRow/JoinAddressEdit" to="." method="_on_join_address_submitted"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/SettingsButton" to="." method="_on_settings_pressed"] [connection signal="pressed" from="MarginContainer/ScrollContainer/CenterContainer/VBoxContainer/DevSection/SpectateButton" to="." method="_on_spectate_pressed"] [connection signal="pressed" from="ConnectingOverlay/CenterContainer/VBoxContainer/ConnectingCancelButton" to="." method="_on_connecting_cancel_pressed"]