Do I need GameLift for a non-session based Multiplayer Sandbox game?

Hello all,

I am new to Lumberyard and AWS. I am developing a sandbox multiplayer PC game where the host may be a dedicated server or one of the game clients, similar to ARK Survival Evolved, Minecraft, Arma 3, and other such games. There will be no instancing.

After reading up on AWS GameLift, it seems that service is for instanced based games, like Rainbow Six Siege, Mechwarrior Online, and other such games where clients connect to a matchmaking service or are instanced in, and I quote,

Q. What types of game genres are recommended for use with Amazon GameLift?
Amazon GameLift works best with multiplayer games that have game sessions that begin and end within a specified time period. Typically, these are multiplayer games in genres like first person shooters, MOBAs, fighting, racing, or sports.
I also read that Lumberyard requires you to use AWS services to host games which require a dedicated server unless I own and operate my own servers. Again, I quote,
Q. Do I have to run my game on AWS?
No. If you own and operate your own private servers, you do not need to use AWS. You also don’t need to use AWS if your game does not use any servers. For example, if you release a free-standing single-player or local-only multiplayer game, you pay us nothing.
Q. Is it okay for me to use my own servers?
Yes. You can use hardware you own and operate for your game.

I’m not sure if that applies to games such as mine where a dedicated server can be set up on a game server hosting business for people to use to host the client game like with Minecraft, Ark, ARMA, etc, or if it means that ANY dedicated server, I the developer, do not personally own, must use AWS GameLift, even though GameLift is an instancing service and not built for non-session based multiplayer games.

So my question is, do I need to go through AWS (GameLift) or some other AWS service to host all dedicated servers even when the client can also serve as a host or run a separate PC as a dedicated host?

To clarify, I had planned on making the dedicated server available for anyone to be able to host their own dedicated server for clients to play on. Obviously, for most people that usually means renting a server from a game hosting company which is where I become confused, do I need to become the exclusive game hosting company and provide all dedicated servers through AWS and GameLift? Or am I misunderstanding the concept of “privately owned servers”? Can I sell the dedicated server to a person who then hosts the game on their privately owned server(s)?

The thing is, I do not want to become a game hosting company, making sure I have servers for people to play on. I would probably put up a few “Official” servers using AWS, but I don’t want to have to be the ONLY provider for dedicated servers. Games like Rainbow Six Siege and For Honor are session based instanced games that go exclusively through one company, Ubisoft, but I am looking to make a game that can be played like Minecraft, where the server can be dedicated or hosted on someone’s private machine in a client/server setting.

Any help would be appreciated because I am confused. Thanks.

Hey @3Gi, great question! Sorry for the confusion - I’ve sent a note to our team to provide some clarification on this topic :slight_smile: Stay tuned!

thank you Aman

Hey @3Gi, I’ve bumped this internally. Sorry for the delay.

any update?

Any update??

Hey @3Gi — very sorry for the delayed responses. I’ve pinged the team for an expedited answer :slight_smile:

Hello there -

Apologies for the delay on our part. We’ve reached out to specialists on our end who are familiar with our terms of use and are waiting to hear back from them. I will post an update hopefully soon for you. Thanks again for hanging in there.

Here is an update:

It’s ok for you to use your own servers for your Lumberyard game, or for your players to use their own servers. But it’s not ok to use server hosting services under our terms, because those would count as alternate web services that are similar to or act as substitutes for AWS EC2/Amazon GameLift. More info here: .

GameLift instances currently do not save state between reboots. If instances are rebooted, scaled down/up again, any local state is lost.

Could you describe what state you would like to persist and retrieve? Would it be possible to architect your game server to retrieve state whenever it launches and save it just before it terminates?

Ok, thank you, that’s what I needed to know. Now I have a follow up question for you, does GameLift allow for configuring the servers to be persistent? or are they strictly session-based? I need the data to persist on the server even if the server is rebooted.

Yes, I guess where I am now confused is with instancing. If I upload a game server to GameLift and it launches 50 instances of that server, and I have 24 players on each instance playing a game, what your saying is, there is no way for GameLift to save each individual instance/server state say if the same 24 players want to keep playing on the same server. I’m talking in terms of ARK, Minecraft, and other such games where the world can be changed by the players. Obviously, you can’t change the world in an instance, you have to change it in a persistent server which
GameLift is not. My best option seems to be to save player states separately from the server state, and regardless of which server players join, their progression is saved but the server would not have persistence. Or is there a way to have the instance load a server save?

Hey 3Gi, GameLift won’t save server state for you, you would need to implement that part on your own, perhaps by writing a save state file to S3 every 5 minutes or so.

You would also need to write the logic to load a previously saved state in your game server.

In the CreateGameSession API call, you can pass your game server extra information. If you had functionality to load a previous state, you could pass instructions to the game server to load a previous save rather than creating a new world.

The gameSessionData parameter is what would allow you to pass extra information to the server:

Ah gotcha, thank you very much for the replies, I now understand what I need to do.