Browse Source

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
master
Luna 7 years ago
parent
commit
127c89ee0f
4 changed files with 83 additions and 35 deletions
  1. +4
    -3
      README.md
  2. +56
    -21
      scenes/lobby.tscn
  3. +4
    -4
      scripts/hero_select.gd
  4. +19
    -7
      scripts/lobby.gd

+ 4
- 3
README.md View File

@ -12,7 +12,7 @@ Side mechanics ideas:
- [ ] Maze-like map - [ ] Maze-like map
- [x] After enough movement, player can switch characters (switching is a mechanic, not a meta-game! no one-tricks) - [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: Current heroes:
@ -21,15 +21,16 @@ Current heroes:
- Offensive: - Offensive:
- WallMAKING mfer - WallMAKING mfer
- An ATTRACTIVE mfer - An ATTRACTIVE mfer
- Support:
- Margarine
Ideas for Heroes: Ideas for Heroes:
- More active - More active
- Blink (Tracer) - no cooldown, but loses all speed on hitting walls - Blink (Tracer) - no cooldown, but loses all speed on hitting walls
- Heavy guy - Slow, but very heavy for the see-saw - Heavy guy - Slow, but very heavy for the see-saw
- Flying, of course
- Climb and glide abilities
- More supportive - More supportive
- Merge - combines with someone to boost their speed
- Boost - Area of effect or zarya-like cast, speeds people up - 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??) - Flop - Changes side of see-saw for each team (should it be mechanic instead??)
- Build - Build Zineth-like rails for anyone to use - Build - Build Zineth-like rails for anyone to use


+ 56
- 21
scenes/lobby.tscn View File

@ -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/lobby.gd" type="Script" id=1]
[ext_resource path="res://scripts/hero_select.gd" type="Script" id=2] [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] [sub_resource type="DynamicFontData" id=1]
font_path = "res://assets/DejaVuSansMono.ttf" font_path = "res://assets/DejaVuSansMono.ttf"
@ -16,7 +29,7 @@ use_filter = false
font_data = SubResource( 1 ) font_data = SubResource( 1 )
_sections_unfolded = [ "Font", "Resource", "Settings" ] _sections_unfolded = [ "Font", "Resource", "Settings" ]
[node name="Control" type="Control" index="0"]
[node name="Control" type="Control"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -34,7 +47,29 @@ size_flags_vertical = 1
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "Anchor" ] _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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -58,7 +93,7 @@ text = "Server"
flat = false flat = false
align = 1 align = 1
[node name="ServerStart" type="Button" parent="." index="1"]
[node name="ServerStart" type="Button" parent="." index="2"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -110,7 +145,7 @@ align = 0
selected = 0 selected = 0
items = [ "Platform map", null, false, 0, null, "City-like thing", null, false, 1, null, "Slide", null, false, 2, null ] 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -126,7 +161,7 @@ mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -150,7 +185,7 @@ text = "Client"
flat = false flat = false
align = 1 align = 1
[node name="IPLabel" type="Label" parent="." index="4"]
[node name="IPLabel" type="Label" parent="." index="5"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -171,7 +206,7 @@ lines_skipped = 0
max_lines_visible = -1 max_lines_visible = -1
_sections_unfolded = [ "Visibility" ] _sections_unfolded = [ "Visibility" ]
[node name="IP" type="TextEdit" parent="." index="5"]
[node name="IP" type="TextEdit" parent="." index="6"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -204,7 +239,7 @@ caret_blink = false
caret_blink_speed = 0.65 caret_blink_speed = 0.65
caret_moving_by_right_click = true 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -247,7 +282,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -263,7 +298,7 @@ mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -287,7 +322,7 @@ text = "Singleplayer"
flat = false flat = false
align = 1 align = 1
[node name="VSeparator" type="VSeparator" parent="." index="9"]
[node name="VSeparator" type="VSeparator" parent="." index="10"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -303,7 +338,7 @@ mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -323,7 +358,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -356,7 +391,7 @@ caret_blink = false
caret_blink_speed = 0.65 caret_blink_speed = 0.65
caret_moving_by_right_click = true 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -376,7 +411,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -404,7 +439,7 @@ selected = -1
items = [ ] items = [ ]
script = ExtResource( 2 ) script = ExtResource( 2 )
[node name="TeamLabel" type="Label" parent="." index="14"]
[node name="TeamLabel" type="Label" parent="." index="15"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -424,7 +459,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -443,7 +478,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -459,7 +494,7 @@ mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -479,7 +514,7 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 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_left = 0.5
anchor_top = 0.5 anchor_top = 0.5


+ 4
- 4
scripts/hero_select.gd View File

@ -1,10 +1,10 @@
extends OptionButton extends OptionButton
const hero_names = [ const hero_names = [
"Wallriding mfer",
"WallMAKING mfer",
"an ATTRACTIVE mfer",
"Margarine"
"INDUSTRIA",
"IRA",
"AVARITIA",
"CARITAS"
] ]
func _ready(): func _ready():


+ 19
- 7
scripts/lobby.gd View File

@ -9,6 +9,7 @@ var SERVER_PLAYING = true
var player_info = {} var player_info = {}
var my_info = {} var my_info = {}
var begun = false
func setup_options(): func setup_options():
var opts = Options.new() var opts = Options.new()
@ -142,8 +143,12 @@ remote func register_player(new_peer, info):
rpc_id(old_peer, "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() var assign_right_team = right_team_count * 2 < player_info.size()
rpc("assign_team", new_peer, assign_right_team) 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() 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): sync func unregister_player(peer):
player_info.erase(peer) player_info.erase(peer)
@ -179,6 +184,7 @@ func render_player_list():
get_node("PlayerList").set_text(list) get_node("PlayerList").set_text(list)
sync func start_game(): sync func start_game():
begun = true
var level = get_node("ServerStart/LevelSelect").get_selected_id() var level = get_node("ServerStart/LevelSelect").get_selected_id()
rpc("pre_configure_game", level) rpc("pre_configure_game", level)
@ -188,6 +194,16 @@ remote func done_preconfiguring(who):
if (players_done.size() == player_info.size()): if (players_done.size() == player_info.size()):
rpc("post_configure_game") 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): sync func pre_configure_game(level):
var self_peer_id = get_tree().get_network_unique_id() 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) # Load all players (including self)
for p in player_info: 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) rpc_id(1, "done_preconfiguring", self_peer_id)


Loading…
Cancel
Save