From 127c89ee0fb834900ce26ac0e717424d82f12bdb Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 4 Feb 2018 01:50:03 -0500 Subject: [PATCH] Add names for game and heroes! Also allows subsequent connections, but it's broken. Don't tell the git gods that this commit is a lie --- README.md | 7 +++-- scenes/lobby.tscn | 77 ++++++++++++++++++++++++++++++++++++-------------- scripts/hero_select.gd | 8 +++--- scripts/lobby.gd | 26 ++++++++++++----- 4 files changed, 83 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 4af7575..eca20e1 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Side mechanics ideas: - [ ] Maze-like map - [x] After enough movement, player can switch characters (switching is a mechanic, not a meta-game! no one-tricks) -- [ ] Speed up slowly over time. Reset on switch +- [x] Speed up slowly over time. Reset on switch Current heroes: @@ -21,15 +21,16 @@ Current heroes: - Offensive: - WallMAKING mfer - An ATTRACTIVE mfer +- Support: + - Margarine Ideas for Heroes: - More active - Blink (Tracer) - no cooldown, but loses all speed on hitting walls - Heavy guy - Slow, but very heavy for the see-saw - - Flying, of course + - Climb and glide abilities - More supportive - - Merge - combines with someone to boost their speed - Boost - Area of effect or zarya-like cast, speeds people up - Flop - Changes side of see-saw for each team (should it be mechanic instead??) - Build - Build Zineth-like rails for anyone to use diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn index 0974d40..9cc4729 100644 --- a/scenes/lobby.tscn +++ b/scenes/lobby.tscn @@ -1,8 +1,21 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://scripts/lobby.gd" type="Script" id=1] [ext_resource path="res://scripts/hero_select.gd" type="Script" id=2] +[sub_resource type="DynamicFontData" id=3] + +font_path = "res://assets/DejaVuSansMono.ttf" +_sections_unfolded = [ "Resource" ] + +[sub_resource type="DynamicFont" id=4] + +size = 30 +use_mipmaps = false +use_filter = false +font_data = SubResource( 3 ) +_sections_unfolded = [ "Extra Spacing", "Font", "Resource", "Settings" ] + [sub_resource type="DynamicFontData" id=1] font_path = "res://assets/DejaVuSansMono.ttf" @@ -16,7 +29,7 @@ use_filter = false font_data = SubResource( 1 ) _sections_unfolded = [ "Font", "Resource", "Settings" ] -[node name="Control" type="Control" index="0"] +[node name="Control" type="Control"] anchor_left = 0.0 anchor_top = 0.0 @@ -34,7 +47,29 @@ size_flags_vertical = 1 script = ExtResource( 1 ) _sections_unfolded = [ "Anchor" ] -[node name="Server" type="Button" parent="." index="0"] +[node name="Title" type="Label" parent="." index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 7.0 +margin_top = -72.0 +margin_right = 195.0 +margin_bottom = -32.0 +rect_pivot_offset = Vector2( 0, 0 ) +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +custom_fonts/font = SubResource( 4 ) +text = "VANAGLORIA" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "custom_fonts" ] + +[node name="Server" type="Button" parent="." index="1"] anchor_left = 0.0 anchor_top = 0.0 @@ -58,7 +93,7 @@ text = "Server" flat = false align = 1 -[node name="ServerStart" type="Button" parent="." index="1"] +[node name="ServerStart" type="Button" parent="." index="2"] anchor_left = 0.0 anchor_top = 0.0 @@ -110,7 +145,7 @@ align = 0 selected = 0 items = [ "Platform map", null, false, 0, null, "City-like thing", null, false, 1, null, "Slide", null, false, 2, null ] -[node name="HSeparator" type="HSeparator" parent="." index="2"] +[node name="HSeparator" type="HSeparator" parent="." index="3"] anchor_left = 0.0 anchor_top = 0.0 @@ -126,7 +161,7 @@ mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -[node name="Client" type="Button" parent="." index="3"] +[node name="Client" type="Button" parent="." index="4"] anchor_left = 0.0 anchor_top = 0.0 @@ -150,7 +185,7 @@ text = "Client" flat = false align = 1 -[node name="IPLabel" type="Label" parent="." index="4"] +[node name="IPLabel" type="Label" parent="." index="5"] anchor_left = 0.0 anchor_top = 0.0 @@ -171,7 +206,7 @@ lines_skipped = 0 max_lines_visible = -1 _sections_unfolded = [ "Visibility" ] -[node name="IP" type="TextEdit" parent="." index="5"] +[node name="IP" type="TextEdit" parent="." index="6"] anchor_left = 0.0 anchor_top = 0.0 @@ -204,7 +239,7 @@ caret_blink = false caret_blink_speed = 0.65 caret_moving_by_right_click = true -[node name="ForceStart" type="CheckBox" parent="." index="6"] +[node name="ForceStart" type="CheckBox" parent="." index="7"] anchor_left = 0.0 anchor_top = 0.0 @@ -247,7 +282,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="HSeparator2" type="HSeparator" parent="." index="7"] +[node name="HSeparator2" type="HSeparator" parent="." index="8"] anchor_left = 0.0 anchor_top = 0.0 @@ -263,7 +298,7 @@ mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -[node name="Singleplayer" type="Button" parent="." index="8"] +[node name="Singleplayer" type="Button" parent="." index="9"] anchor_left = 0.0 anchor_top = 0.0 @@ -287,7 +322,7 @@ text = "Singleplayer" flat = false align = 1 -[node name="VSeparator" type="VSeparator" parent="." index="9"] +[node name="VSeparator" type="VSeparator" parent="." index="10"] anchor_left = 0.0 anchor_top = 0.0 @@ -303,7 +338,7 @@ mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -[node name="Label" type="Label" parent="." index="10"] +[node name="Label" type="Label" parent="." index="11"] anchor_left = 0.0 anchor_top = 0.0 @@ -323,7 +358,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="Username" type="TextEdit" parent="." index="11"] +[node name="Username" type="TextEdit" parent="." index="12"] anchor_left = 0.0 anchor_top = 0.0 @@ -356,7 +391,7 @@ caret_blink = false caret_blink_speed = 0.65 caret_moving_by_right_click = true -[node name="HeroSelectLabel" type="Label" parent="." index="12"] +[node name="HeroSelectLabel" type="Label" parent="." index="13"] anchor_left = 0.0 anchor_top = 0.0 @@ -376,7 +411,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="HeroSelect" type="OptionButton" parent="." index="13"] +[node name="HeroSelect" type="OptionButton" parent="." index="14"] anchor_left = 0.0 anchor_top = 0.0 @@ -404,7 +439,7 @@ selected = -1 items = [ ] script = ExtResource( 2 ) -[node name="TeamLabel" type="Label" parent="." index="14"] +[node name="TeamLabel" type="Label" parent="." index="15"] anchor_left = 0.0 anchor_top = 0.0 @@ -424,7 +459,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="Team" type="Label" parent="." index="15"] +[node name="Team" type="Label" parent="." index="16"] anchor_left = 0.0 anchor_top = 0.0 @@ -443,7 +478,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="HSeparator3" type="HSeparator" parent="." index="16"] +[node name="HSeparator3" type="HSeparator" parent="." index="17"] anchor_left = 0.0 anchor_top = 0.0 @@ -459,7 +494,7 @@ mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -[node name="PlayerListLabel" type="Label" parent="." index="17"] +[node name="PlayerListLabel" type="Label" parent="." index="18"] anchor_left = 0.0 anchor_top = 0.0 @@ -479,7 +514,7 @@ percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 -[node name="PlayerList" type="Label" parent="." index="18"] +[node name="PlayerList" type="Label" parent="." index="19"] anchor_left = 0.5 anchor_top = 0.5 diff --git a/scripts/hero_select.gd b/scripts/hero_select.gd index 03de2aa..b3effa5 100644 --- a/scripts/hero_select.gd +++ b/scripts/hero_select.gd @@ -1,10 +1,10 @@ extends OptionButton const hero_names = [ - "Wallriding mfer", - "WallMAKING mfer", - "an ATTRACTIVE mfer", - "Margarine" + "INDUSTRIA", + "IRA", + "AVARITIA", + "CARITAS" ] func _ready(): diff --git a/scripts/lobby.gd b/scripts/lobby.gd index 5cc285a..975bbd5 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -9,6 +9,7 @@ var SERVER_PLAYING = true var player_info = {} var my_info = {} +var begun = false func setup_options(): var opts = Options.new() @@ -142,8 +143,12 @@ remote func register_player(new_peer, info): rpc_id(old_peer, "register_player", new_peer, info) var assign_right_team = right_team_count * 2 < player_info.size() rpc("assign_team", new_peer, assign_right_team) - if (player_info.size() == MAX_PLAYERS): + if not begun and player_info.size() == MAX_PLAYERS: start_game() + if begun: + var level = get_node("ServerStart/LevelSelect").get_selected_id() + rpc_id(new_peer, "pre_configure_game", level) + rpc("spawn_player", new_peer) sync func unregister_player(peer): player_info.erase(peer) @@ -179,6 +184,7 @@ func render_player_list(): get_node("PlayerList").set_text(list) sync func start_game(): + begun = true var level = get_node("ServerStart/LevelSelect").get_selected_id() rpc("pre_configure_game", level) @@ -188,6 +194,16 @@ remote func done_preconfiguring(who): if (players_done.size() == player_info.size()): rpc("post_configure_game") +sync func spawn_player(p): + var hero = player_info[p].hero + var player = load("res://scenes/heroes/" + str(hero) + ".tscn").instance() + if "is_ai" in player_info[p] and player_info[p].is_ai: + player = load("res://scenes/ai/heroes/" + str(hero) + ".tscn").instance() + player.set_name(str(p)) + player.set_network_master(p) + player.player_info = player_info[p] + get_node("/root/Level/Players").call_deferred("add_child", player) + sync func pre_configure_game(level): var self_peer_id = get_tree().get_network_unique_id() @@ -201,12 +217,8 @@ sync func pre_configure_game(level): # Load all players (including self) for p in player_info: - var hero = player_info[p].hero - var player = load("res://scenes/heroes/" + str(hero) + ".tscn").instance() - player.set_name(str(p)) - player.set_network_master(p) - player.player_info = player_info[p] - get_node("/root/Level/Players").call_deferred("add_child", player) + player_info[p].level = level + spawn_player(p) rpc_id(1, "done_preconfiguring", self_peer_id)