summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Characters/Character.gd24
-rw-r--r--Levels/Level.gd50
-rw-r--r--Network/Lobby.gd8
-rw-r--r--Network/Lobby.tscn74
-rw-r--r--Readme.md31
-rw-r--r--UI/Lobby/Player.gd11
-rw-r--r--UI/Lobby/Player.tscn317
7 files changed, 447 insertions, 68 deletions
diff --git a/Characters/Character.gd b/Characters/Character.gd
index c9eaa0a..f8c3a59 100644
--- a/Characters/Character.gd
+++ b/Characters/Character.gd
@@ -18,7 +18,7 @@ var lastWallDirection = Enum.DIRECTION.LEFT
func _ready():
- pass
+ set_up_direction(Vector2.UP)
func _physics_process(delta):
@@ -34,8 +34,6 @@ func _physics_process(delta):
$Sprite2D.flip_h = false
if self.is_running():
velocity.x = RUNSPEED
-
- set_up_direction(Vector2.UP)
if is_on_floor():
if Input.is_action_pressed("DIRECTION_LEFT") or Input.is_action_pressed("DIRECTION_RIGHT"):
@@ -112,6 +110,18 @@ func _physics_process(delta):
move_and_slide()
+ self.updatePuppet()
+
+
+func is_running():
+ return Input.is_action_pressed("RUN") and is_on_floor()
+
+
+func canWallJump():
+ return (is_on_wall() and not is_on_floor()) or not $WalljumpTimer.is_stopped()
+
+
+func updatePuppet():
if Network.player.position != self.position:
Network.player.position = self.position
Network.update_player()
@@ -123,14 +133,6 @@ func _physics_process(delta):
Network.update_player()
-func is_running():
- return Input.is_action_pressed("RUN") and is_on_floor()
-
-
-func canWallJump():
- return (is_on_wall() and not is_on_floor()) or not $WalljumpTimer.is_stopped()
-
-
func check_flag():
# $Sprite.play("dance anim")
print("FLAG CHECKED")
diff --git a/Levels/Level.gd b/Levels/Level.gd
index 40c75ff..9998a4e 100644
--- a/Levels/Level.gd
+++ b/Levels/Level.gd
@@ -19,30 +19,7 @@ func _ready():
character = load("res://Characters/" + Network.player.character + ".tscn").instantiate()
self.set_player(character)
- Network.connect("player_changed", func(id):
- var remote_player = Network.players[id]
-
- var node_name = "%s_%s_%s" % [remote_player.name, remote_player.character, id]
- var puppet = null
- if self.has_node(node_name):
- puppet = self.get_node(node_name)
-
- if remote_player.current_level != self.idx:
- if puppet:
- puppet.queue_free()
- return
-
- if not puppet:
- puppet = load("res://Characters/" + remote_player.character + ".tscn").instantiate()
- puppet.process_mode = PROCESS_MODE_DISABLED
- self.add_child(puppet)
- puppet.name = node_name
- puppet.modulate = Color(1.0, 1.0, 1.0, 0.5)
- else:
- puppet.position = remote_player.position
- puppet.get_node("Sprite2D").play(remote_player.animation)
- puppet.get_node("Sprite2D").flip_h = remote_player.animation_flip_h
- )
+ Network.connect("player_changed", Callable(self, 'update_puppet'))
if has_node("ParallaxBackground"):
$ParallaxBackground/ParallaxLayer.motion_mirroring.x = (
@@ -94,6 +71,31 @@ func respawn_player():
Global.change_scene_to_instance(instance_level)
+func update_puppet(id: int):
+ var remote_player = Network.players[id]
+
+ var node_name = "%s_%s_%s" % [remote_player.name, remote_player.character, id]
+ var puppet = null
+ if self.has_node(node_name):
+ puppet = self.get_node(node_name)
+
+ if remote_player.current_level != self.idx:
+ if puppet:
+ puppet.queue_free()
+ return
+
+ if not puppet:
+ puppet = load("res://Characters/" + remote_player.character + ".tscn").instantiate()
+ puppet.process_mode = PROCESS_MODE_DISABLED
+ self.add_child(puppet)
+ puppet.name = node_name
+ puppet.modulate = Color(1.0, 1.0, 1.0, 0.5)
+ else:
+ puppet.position = remote_player.position
+ puppet.get_node("Sprite2D").play(remote_player.animation)
+ puppet.get_node("Sprite2D").flip_h = remote_player.animation_flip_h
+
+
func end_level():
Global.end_level(self)
diff --git a/Network/Lobby.gd b/Network/Lobby.gd
index 87a3894..4b573cf 100644
--- a/Network/Lobby.gd
+++ b/Network/Lobby.gd
@@ -15,10 +15,10 @@ func _ready():
Network.connect("game_ended", Callable(self, "_on_game_ended"))
$HTTPRequest.connect("request_completed", Callable(self, '_set_remote_ip'))
- ConnectNodeContainer = $CenterContainer
- ConnectNode = $CenterContainer/Connect
- PlayersNodeContainer = $CenterContainer2
- PlayersNode = $CenterContainer2/Players
+ ConnectNodeContainer = $Connect
+ ConnectNode = $Connect/CenterContainer/Connect
+ PlayersNodeContainer = $Players
+ PlayersNode = $Players/CenterContainer/Players
if OS.has_environment("USERNAME"):
ConnectNode.get_node("Name").text = OS.get_environment("USERNAME")
diff --git a/Network/Lobby.tscn b/Network/Lobby.tscn
index 60bf28e..7dccc24 100644
--- a/Network/Lobby.tscn
+++ b/Network/Lobby.tscn
@@ -12,7 +12,7 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1")
-[node name="CenterContainer" type="CenterContainer" parent="."]
+[node name="Connect" type="Control" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -20,11 +20,19 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-[node name="Connect" type="Panel" parent="CenterContainer"]
+[node name="CenterContainer" type="CenterContainer" parent="Connect"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Connect" type="Panel" parent="Connect/CenterContainer"]
custom_minimum_size = Vector2(180, 150)
layout_mode = 2
-[node name="Name" type="LineEdit" parent="CenterContainer/Connect"]
+[node name="Name" type="LineEdit" parent="Connect/CenterContainer/Connect"]
layout_mode = 0
offset_left = 8.0
offset_top = 8.0
@@ -32,7 +40,7 @@ offset_right = 168.0
offset_bottom = 32.0
placeholder_text = "Name"
-[node name="IP" type="LineEdit" parent="CenterContainer/Connect"]
+[node name="IP" type="LineEdit" parent="Connect/CenterContainer/Connect"]
layout_mode = 0
offset_left = 8.0
offset_top = 40.0
@@ -40,7 +48,7 @@ offset_right = 168.0
offset_bottom = 64.0
placeholder_text = "IP"
-[node name="Host" type="Button" parent="CenterContainer/Connect"]
+[node name="Host" type="Button" parent="Connect/CenterContainer/Connect"]
layout_mode = 0
offset_left = 8.0
offset_top = 112.0
@@ -48,7 +56,7 @@ offset_right = 64.0
offset_bottom = 136.0
text = "Host"
-[node name="Join" type="Button" parent="CenterContainer/Connect"]
+[node name="Join" type="Button" parent="Connect/CenterContainer/Connect"]
layout_mode = 0
offset_left = 112.0
offset_top = 112.0
@@ -56,7 +64,7 @@ offset_right = 168.0
offset_bottom = 136.0
text = "Join"
-[node name="Error" type="Label" parent="CenterContainer/Connect"]
+[node name="Error" type="Label" parent="Connect/CenterContainer/Connect"]
layout_mode = 0
offset_left = 8.0
offset_top = 72.0
@@ -64,7 +72,17 @@ offset_right = 168.0
offset_bottom = 104.0
theme_override_colors/font_color = Color(1, 0.137255, 0.137255, 1)
-[node name="CenterContainer2" type="CenterContainer" parent="."]
+[node name="MenuButton" parent="Connect" instance=ExtResource("2")]
+layout_mode = 2
+anchors_preset = 0
+anchor_right = 0.0
+anchor_bottom = 0.0
+offset_left = 6.0
+offset_top = 5.0
+offset_right = 59.0
+offset_bottom = 36.0
+
+[node name="Players" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
@@ -73,11 +91,19 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-[node name="Players" type="Panel" parent="CenterContainer2"]
+[node name="CenterContainer" type="CenterContainer" parent="Players"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Players" type="Panel" parent="Players/CenterContainer"]
custom_minimum_size = Vector2(260, 460)
layout_mode = 2
-[node name="Label" type="Label" parent="CenterContainer2/Players"]
+[node name="Label" type="Label" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 16.0
offset_top = 16.0
@@ -85,7 +111,7 @@ offset_right = 64.0
offset_bottom = 32.0
text = "Lobby"
-[node name="LocalIP" type="Label" parent="CenterContainer2/Players"]
+[node name="LocalIP" type="Label" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 128.0
offset_top = 24.0
@@ -93,7 +119,7 @@ offset_right = 240.0
offset_bottom = 38.0
text = "000.000.000.000"
-[node name="RemoteIP" type="Label" parent="CenterContainer2/Players"]
+[node name="RemoteIP" type="Label" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 128.0
offset_top = 8.0
@@ -101,14 +127,14 @@ offset_right = 240.0
offset_bottom = 22.0
text = "000.000.000.000"
-[node name="List" type="ItemList" parent="CenterContainer2/Players"]
+[node name="List" type="ItemList" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 16.0
offset_top = 48.0
offset_right = 240.0
offset_bottom = 400.0
-[node name="Start" type="Button" parent="CenterContainer2/Players"]
+[node name="Start" type="Button" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 64.0
offset_top = 416.0
@@ -116,7 +142,7 @@ offset_right = 192.0
offset_bottom = 448.0
text = "START!"
-[node name="Back" type="Button" parent="CenterContainer2/Players"]
+[node name="Back" type="Button" parent="Players/CenterContainer/Players"]
layout_mode = 0
offset_left = 16.0
offset_top = 416.0
@@ -126,19 +152,9 @@ text = "<"
[node name="ErrorDialog" type="AcceptDialog" parent="."]
-[node name="MenuButton" parent="." instance=ExtResource("2")]
-layout_mode = 0
-anchors_preset = 0
-anchor_right = 0.0
-anchor_bottom = 0.0
-offset_left = 1.0
-offset_top = 1.0
-offset_right = 54.0
-offset_bottom = 32.0
-
[node name="HTTPRequest" type="HTTPRequest" parent="."]
-[connection signal="pressed" from="CenterContainer/Connect/Host" to="." method="_on_Host_pressed"]
-[connection signal="pressed" from="CenterContainer/Connect/Join" to="." method="_on_Join_pressed"]
-[connection signal="pressed" from="CenterContainer2/Players/Start" to="." method="_on_Start_pressed"]
-[connection signal="pressed" from="CenterContainer2/Players/Back" to="." method="_on_Back_pressed"]
+[connection signal="pressed" from="Connect/CenterContainer/Connect/Host" to="." method="_on_Host_pressed"]
+[connection signal="pressed" from="Connect/CenterContainer/Connect/Join" to="." method="_on_Join_pressed"]
+[connection signal="pressed" from="Players/CenterContainer/Players/Start" to="." method="_on_Start_pressed"]
+[connection signal="pressed" from="Players/CenterContainer/Players/Back" to="." method="_on_Back_pressed"]
diff --git a/Readme.md b/Readme.md
index 6747efa..bb36e6a 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,2 +1,33 @@
- [How to Make Wall Jump & Slide in Godot [Easy in 3 Minutes]](https://youtu.be/vNHIMrTWpt8)
- [How to Create WALL JUMPING & SLIDING in Godot 4](https://youtu.be/5FWzWrK6jLM)
+
+
+## GameOff 2018 Pitch
+
+tic tac tux (bingo?! = more stages) + platformer(/minigames tictactoe+mariopartylol)
+finish the stage and get a cross
+you dont see where your enemy is, just a notification when he finished it. board on the top right to see where is what
+Doch pure Platformer, nicht mini-games:
+Verschiedene Abilities vor Game-Start auswählbar:
+ Wall-Jump
+ Double-Jump
+ Sword/Attack/(sword+upgrade=2abilities) (kann dann auch 2ten Spieler angreifen und ausbremsen)
+Nur gleiche Anzahl an auswählbaren Fähigkeiten für beide Spieler. Also jeder eine oder 2 oder 3.
+Maps bei denen bestimmte Abilities required sind. Tauchen natürlich nur auf, wenn beide Spieler die Abilities haben.
+Möglichkeit als Host Base-Abilities auszuwählen, die jeder zusätzlich oder an sich hat und nicht zum ability count zählen.
+Utility Items findbar um Gegner auszubremsen.
+ Blue-Shell :D
+ Teleport zum Genger
+ Teleport zum Ende der Area
+ Teleport zur nächsten Area..? depends on how Area switch works - so maybe not needed
+ Temp speed increase
+
+Hybrid = different areas/maps with different tilesets. different character art styles. lel.
+
+Stages auf Zeit. Wenn Stage finished dann wird die Zeit dafür recorded.
+Wenn man dann zum Beispiel eine vom Gegner beendete Stage schafft, in einer besseren Zeit, überschreibt man die Stage mit seinem eigenen Mark!
+Zusätzlich existieren dann auch Sanduhr Items die man verwenden kann um am Ende der Stage -X(5)sec zu bekommen. (Sanduhr-Items vll nur dem Spieler zugänglich machen der hinten dran ist)
+
+GameOptions
+SuddenDeath
+SuddenDeathTimer
diff --git a/UI/Lobby/Player.gd b/UI/Lobby/Player.gd
new file mode 100644
index 0000000..a1bbfe7
--- /dev/null
+++ b/UI/Lobby/Player.gd
@@ -0,0 +1,11 @@
+extends Control
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ pass # Replace with function body.
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(delta):
+ pass
diff --git a/UI/Lobby/Player.tscn b/UI/Lobby/Player.tscn
new file mode 100644
index 0000000..9bb5e2b
--- /dev/null
+++ b/UI/Lobby/Player.tscn
@@ -0,0 +1,317 @@
+[gd_scene load_steps=9 format=3 uid="uid://bkice5n440lwj"]
+
+[ext_resource type="Script" path="res://UI/Lobby/Player.gd" id="1_ed5f6"]
+[ext_resource type="Texture2D" uid="uid://fg3wtt3q51ly" path="res://Assets/Characters/Tux/Front.png" id="2_tetw5"]
+[ext_resource type="Texture2D" uid="uid://dibcyc08wpu0a" path="res://Assets/Characters/Duck/Front.png" id="3_nh4rr"]
+[ext_resource type="Texture2D" uid="uid://b2h82tdfbogjx" path="res://Assets/Characters/Dove/Front.png" id="4_ogxut"]
+[ext_resource type="Texture2D" uid="uid://cnuotyqgyqplm" path="res://Assets/Characters/Pidgin/Front.png" id="5_tq24r"]
+[ext_resource type="Texture2D" uid="uid://c338yichhecvr" path="res://Assets/Characters/Monkey/Front.png" id="6_vpjrx"]
+[ext_resource type="Texture2D" uid="uid://bfr2ek0h8rveb" path="res://Assets/Characters/Elephant/Front.png" id="7_0ilrg"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1y22c"]
+bg_color = Color(1, 0.984314, 0.647059, 0)
+
+[node name="Player" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_right = -576.0
+offset_bottom = -324.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_ed5f6")
+
+[node name="Character" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Panel" type="Panel" parent="Character"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MarginContainer" type="MarginContainer" parent="Character/Panel"]
+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 = 10
+theme_override_constants/margin_top = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="Control" type="Control" parent="Character/Panel/MarginContainer"]
+layout_mode = 2
+
+[node name="ScrollContainer" type="ScrollContainer" parent="Character/Panel/MarginContainer/Control"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="GridContainer" type="HFlowContainer" parent="Character/Panel/MarginContainer/Control/ScrollContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="Tux" type="Control" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+
+[node name="Panel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/Tux"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="TextureRect" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/Tux/Panel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -32.0
+offset_top = -32.0
+offset_right = 32.0
+offset_bottom = 32.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("2_tetw5")
+
+[node name="DuckPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="Duck" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/DuckPanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -32.0
+offset_top = -32.0
+offset_right = 32.0
+offset_bottom = 32.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("3_nh4rr")
+
+[node name="DovePanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="Dove" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/DovePanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -32.0
+offset_top = -32.0
+offset_right = 32.0
+offset_bottom = 32.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("4_ogxut")
+
+[node name="PidginPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="Pidgin" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/PidginPanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -16.0
+offset_top = -16.0
+offset_right = 16.0
+offset_bottom = 16.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("5_tq24r")
+
+[node name="MonkeyPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="Monkey" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/MonkeyPanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -16.0
+offset_top = -16.0
+offset_right = 16.0
+offset_bottom = 16.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("6_vpjrx")
+
+[node name="ElephantPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"]
+custom_minimum_size = Vector2(150, 150)
+layout_mode = 2
+theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c")
+
+[node name="Elephant" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/ElephantPanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -32.0
+offset_top = -32.0
+offset_right = 32.0
+offset_bottom = 32.0
+grow_horizontal = 2
+grow_vertical = 2
+texture = ExtResource("7_0ilrg")
+
+[node name="Button" type="Button" parent="Character/Panel/MarginContainer/Control"]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -45.0
+offset_top = -31.0
+grow_horizontal = 0
+grow_vertical = 0
+text = "Next"
+
+[node name="Abilities" type="Control" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Panel" type="Panel" parent="Abilities"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MarginContainer" type="MarginContainer" parent="Abilities/Panel"]
+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 = 10
+theme_override_constants/margin_top = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="Control" type="Control" parent="Abilities/Panel/MarginContainer"]
+layout_mode = 2
+
+[node name="ItemList" type="ItemList" parent="Abilities/Panel/MarginContainer/Control"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+item_count = 4
+item_0/text = "Wall-Jump"
+item_1/text = "Double-Jump"
+item_2/text = "Dash"
+item_3/text = "Float"
+
+[node name="Button" type="Button" parent="Abilities/Panel/MarginContainer/Control"]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -45.0
+offset_top = -31.0
+grow_horizontal = 0
+grow_vertical = 0
+text = "Next"
+
+[node name="Ready" type="Control" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Panel" type="Panel" parent="Ready"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="MarginContainer" type="MarginContainer" parent="Ready/Panel"]
+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 = 10
+theme_override_constants/margin_top = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="Control" type="Control" parent="Ready/Panel/MarginContainer"]
+layout_mode = 2
+
+[node name="Button" type="Button" parent="Ready/Panel/MarginContainer/Control"]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -45.0
+offset_top = -31.0
+grow_horizontal = 0
+grow_vertical = 0
+text = "Set Ready"