Godot MultiPlayer Lobby Tutorial Part 1

I want to do a multiplayer games but it is hard to really understand how it works.

I did refer the official tutorial from Godot here. but I still can’t understand it then I read the code example of multiplayer bomber.

From the multi player bomber, I just extracted when a lobby is created by Host and then a Player joins the lobby.

I did this to simplify the GDScript so I can focus on understanding its inner working.

Besides I add additional print() to see which function is called first and understand their sequence. To know the sequence I added timestamp when the function is called.

Example:

I also rearrange the scripts into different folder to reflect its purposes and change gamestate.gd to GameState.gd

Print at Critical Functions To Detect Functions Calling Sequence

scripts/global/GameState.gd

  • print(“game state – connected_ok()”, ” time stamp: “, OS.get_system_time_msecs())
  • print(“game state – player connected(). ID: “, id, ” time stamp: “, OS.get_system_time_msecs())
  • print(“game state – register player() “, id, ” time stamp: “, OS.get_system_time_msecs())

scripts/lobby/lobby.gd

  • print(“game state – register player() “, id, ” time stamp: “, OS.get_system_time_msecs())
  • print(“lobby – refresh_lobby() Players: “, players, ” time stamp: “, OS.get_system_time_msecs())
  • print(“lobby – _on_connect_success()”, ” time stamp: “, OS.get_system_time_msecs())

A Player Joins As Host @ Server

When a player joins as host, below is the print output.

Launch The Application

  • Run the application via command line (I’m using Linux)
  • Then click Host
Godot Multiplayer Lobby - starting game
Godot Multiplayer Lobby – starting game

Host / Server output:

As you can see, no network signals (network_peer_connected & connected_to_server) are emitted during the network server connections.

Godot Multiplayer Lobby - print output
Godot Multiplayer Lobby – print output

A Player Joins as Client

When a player joins as client, below is the print output.

Godot Multiplayer Lobby - starting as player @ client
Godot Multiplayer Lobby – starting as player @ client

Host / Server output:

Godot Multiplayer Lobby - server print output when a player joins as client
Godot Multiplayer Lobby – server print output when a player joins as client

Player / Client output:

Godot Multiplayer Lobby - print output as player @ client
Godot Multiplayer Lobby – print output as player @ client

Print Output Timestamp Sequence

I rearrange the print out timestamp based on which comes first. Below is the result.

Notes:
The timestamp here differs from screenshots as I did this article in few days, hence the difference in timestamps.

Sequence Diagram

From the “Print Output Timestamp Sequence”, I developed the sequence diagram for better visualization.

Godot Multiplayer Lobby Sequence Diagram
Godot Multiplayer Lobby Sequence Diagram

Key Take Aways

  1. A put “remote” if the function is called by rpc_id() or any functions called via rpc
  2. Functions within the same entity e.g Client or Server are executed first.
  3. Function called via rpc() is executed after all functions within same entity is executed.
  4. Even function triggered via emit signal is executed first before rpc()

Resources:

Sample code