[Request] C++ multiplayer tutorial

The current multi-player tutorial is all done using flowgraph. It would be extremely helpful to have more resources that show some multiplayer features and implementation in C++.

I saw a few requests for this. In the meantime, you can also check out how the flowgraph nodes are implemented in C++ and then use that code in your own game. I show an example of how to do that over here:

https://www.youtube.com/watch?v=XoYVb8Q42Ec&feature=youtu.be&t=61

Hope that helps a bit.

I watched your video and I have used that technique for back-tracing nodes before, it’s a good one. Certainly there is enough in the provided level to get you started but I’m hoping they do a best practices style tutorial that shows a proper and full implementation through c++ in the preferred way.

Excuse me, could you tell me where is the “multiplayer tutorial” you talk about? I’ve read all 1.1 tutorials and guides and I couldn’t find a comprehensive tutorial about developing a multiplayer game (with flow graph or C++). All I’ve found is some simple (very simple) guide on how to create an (empty) multiplayer project or to upload the provided MultiplayerProject sample to GameLift (where there are some little citations about FlowGraph).Thanks in advance.

Hello @ekcell,

Thanks for this feedback. As others have mentioned, this is a popular request that we’re aware of and have written this feedback down on or list.

One thing that would be very useful to us, is if you could supply us with a bullet list of the topics that you think are important to cover in a tutorial series like this one.

Thanks!

At this point I am really wondering the capability of lumberyard to do multiplayer battle royal type of game:
Fabio send one that makes sense:
fabiodasoghe

About the multiplayer tutorial series, I would love to have these steps/subjects covered:

  1. create a multiplayer project from scratch, adding support for authoritative server (multiplayer gem? where is the component named GridMate? currently is not clear from the docs), integration with AWS (Cloud Canvas) and GameLift.
  2. create a simple level with some environment element and the player avatar
  3. add the multiplayer support (with Flow Graph? C++ API?), ideally to support different multiplay scenarios:
  4. private game lobby peer to peer
  5. private game lobby with remote authoritative server
  6. open game lobby (mmo?) with remote authoritative server (with open game lobby I mean a different approach to multiplayer session where we don’t use the game lobby facilities seen in other tutorials to let the user choose the room to join: we implement the association user <-> session server side - the tutorial should show what apis to use in order to achieve this)
  7. how to test the private game lobby peer to peer in LAN
  8. how to test the private game lobby with dedicated server in LAN (showing how the movements are server-authoritative)
  9. how to test the open game lobby in LAN (showing how the network connections work, components/api involved, etc. - what should I do if, for example, I wanted to make it work between two remote computers)
  10. upload the dedicated server on GameLift and test it (private and open lobby)
  11. add a bit of sandboxing spice: explain how the 3D environment works, how I can modify the environment programmatically (and/or with Flow Graph), implementing a user command with which the avatar put an item (for example, a tree) on the ground
  12. use Cloud Canvas to save the user-created item (type, position, other game attributes) in the cloud (DynamoDB seems to me the best bet)
  13. use Cloud Canvas to retrieve, at launch time, the terrain status from the cloud (i.e. all trees position, rotation, size, etc.) and sync it with local state (rebuild trees in the local level).

Thanks for reaching out. I’ve been reaching out on the Discord server and your sentiments are reflected there as well. This is a top 2 requested topic on the official tutorials channel right next to making a beautiful environment showing shaders, lighting, vegetation, a skybox, etc.

At a quick glance, I hope to encompass step 1-10 listed above to start.

My exploration is starting now and will take some time. I don’t have a good guess for a time to complete, but please know it’s a priority for the community that I’ve added to the top of our backlog. I hope to have this available before the end of the year.

FYI: I cover points 1-9 (but without any GameLift topics) in my book, chapter 18-19 on basics and on more complex networking topics - chapters 39-42 here:


Samples are available for free here: https://github.com/Aristo7/LYBook_1.20/tree/ch18_gridmate_intro

It’s for 1.20 but GridMate public API has not changed since then.

1 Like

hmm sounds like the best ressource so far. Is it still relevant to version 1.25? Can you elaborate on the type of game? Could you point to a gameplay screenshot?

I’m going to run off into a little cave with this and see how far I can get.

1 Like

I didn’t build an actual game there. But I had a simple jack robot run around with clients/server and even shooting some balls around. It’s enough to show GridMate networking features, but it’s not a game demo like MultiplayerSample.

You can see the networking features in this branch: https://github.com/Aristo7/LYBook_1.20/tree/ch41_gridmate_emotionfx

After reading the table of content, I was convince I bought-it!-)

1 Like

Hi MrOleksandr,
I am using lumberyard 1.26.00 and vs 2019.
I am trying the StartingMapSystemComponent, I am able to set starting map using the project configurator, but the resulting Bin64vc142.Debug.Dedicated\MyProjectLauncher_Server.exe and client launcher doesn’t load the map. after debugging the code I can see that:
StartingMapSystemComponent::Activate()
is never called so it doesn’t connect to the SystemTickBus

Any clues?

It sounds like that component was not registered as a proper system component. Do you have something like this?

    AZ::ComponentTypeList GetRequiredSystemComponents() const override
    {
        AZ::ComponentTypeList requiredComponents;

        requiredComponents = 
        {
            azrtti_typeid<StartingMapSystemComponent>(),
        };

        return requiredComponents;
    }
1 Like

You got-it, thanks a lot.