Can this work for Godot 4+ games with multiplayer and open world chunks?
Opened this issue · 8 comments
Test chunks link: WithinAmnesia/ARPG#15
I'm trying to find a way to seamless load and unload chunks for a 2D multiplayer game project to make an open world with a working server using Godot 4.2.1.NET.
How can this work for multiplayer and what is needed for this to potentially work? What options can be used for chunk loading and unloading seamlessly in Godot 4.2.1.NET? Please give feedback.
I made this is an afternoon and haven't had time to test it more thoroughly. Some people have left me hate mail describing some of its downfalls.
This is a client-side type of thing, though. It may be able to work with your multiplayer infrastructure.
Here is an update since I last posted.
https://jonathaneeckhout.itch.io/jdungeon For the goal right now it is easy to play this but imagine it has seamless chunk loading and unloading. As instead of the black world boundary a new chunk loads in seamlessly. What are your suggestions and thoughts?
Update: https://github.com/WithinAmnesia/ARPG/tree/ARPG-Infinite-Worlds Here is the 128x128 with 32x32 pixel tile chunk to test.
My initial testing seems to feel even faster combat with the 128x128 chunk. This 128x128 chunk has the same amount of entities as the 256x256 chunk. For I moved all of the entities over into the 128x128 chunk. This 128x128 chunk is a good test for using the Infinite-Worlds using the BinarySerializer for Godot 4.2+ from Theraot: https://gist.github.com/theraot/31515e28e2d8bfea33f6c6d5bcd852f6 . There needs to be some testing how to make the chunks seamlessly load and unload. https://gamedev.stackexchange.com/questions/209002/looking-for-help-godot-4-multiplayer-seamless-open-world-chunks
I made this is an afternoon and haven't had time to test it more thoroughly. Some people have left me hate mail describing some of its downfalls. This is a client-side type of thing, though. It may be able to work with your multiplayer infrastructure.
Well I'll be nice. I'm not very good at lots of scripting types myself and like I'm just looking for some help with this challenging thing. Any help and insights would be greatly appreciated. I am trying to use this big script given by Theraot but I'm not sure how to use it well and what else should be needed? Any thoughts and questions are welcome. Please give feedback.
Sorry for the late reply, I have been on vacation.
I am unfamiliar with your codebase and exact situation, but here's how I would approach a multiplayer infinitely-generating world. Keep in mind that Chunx is not designed for this purpose.
- I would handle all terrain generation on the server side. The server would store and generate chunks of however many tiles, and the Client would request chunks from the server.
- The terrain should be generated in such a way where it is 1) deterministic, meaning that given the same set of inputs, it would create the same result, and 2) generated in such a way where 2 chunks generated next to eachother blend with eachother. This sounds harder than it is: It can be as simple as sampling 2 adjacent regions of a perlin noise map, for example.
The process could look something like this:
- The player steps into a new chunk. To render the surrounding area, the client asks the server for the surrounding chunks.
- For each chunk requested, the server checks to see if that chunk has been created already; if so, it sends it to the client. If not, it generates a new chunk, then sends it to a the client.
- The client receives this information, and uses it to display the new chunk, enemies, etc. Keep in mind that pretty much all multiplayer games have all game logic like collision, damage, etc. done on the server, for security reasons. The client is just a pretty picture.
I am trying to use this big script given by Theraot but I'm not sure how to use it well and what else should be needed?
The big script appears to be a way of serializing a chunk's data to send over the network. This will not help you create chunks, but it could be useful for the networking side of things.
By the way, my project Skelerealms will almost certainly not help you create an ARPG, Infinitely generated or otherwise. It is made for Bethesda-Style RPGs, like Skyrim, with heavily authored content. It is also not made with multiplayer architecture in mind, although with some modification it should be able to translate to multiplayer.
Update!
WithinAmnesia/ARPG#16
"I am doing a from scratch build now for the multiplayer chunk system. What should I do for the server and the data and chunk storage?
I have a few leads and some more thoughts and resources can be found here:
WithinAmnesia/ARPG#16 <Start fresh thread.
WithinAmnesia/ARPG#15 <Previous start thread.
It was suggested I build a from scratch Multiplayer seamless chunk system that eventually be put together where it can handle 2K-16K+ players on the same server. What should be done for a web deployment to also run on a browser? I was suggested to try and do a chunk storage system similar to Minecraft or Terraria where each chunk is stored individually and accessed by the server in communication with the player clients. What should be done to solve this chunk puzzle? All feedback is welcome."
Sorry for the late reply, I have been on vacation.
I am unfamiliar with your codebase and exact situation, but here's how I would approach a multiplayer infinitely-generating world. Keep in mind that Chunx is not designed for this purpose.
* I would handle all terrain generation on the server side. The server would store and generate chunks of however many tiles, and the Client would request chunks from the server. * The terrain should be generated in such a way where it is 1) deterministic, meaning that given the same set of inputs, it would create the same result, and 2) generated in such a way where 2 chunks generated next to eachother blend with eachother. This sounds harder than it is: It can be as simple as sampling 2 adjacent regions of a perlin noise map, for example.
The process could look something like this:
1. The player steps into a new chunk. To render the surrounding area, the client asks the server for the surrounding chunks. 2. For each chunk requested, the server checks to see if that chunk has been created already; if so, it sends it to the client. If not, it generates a new chunk, then sends it to a the client. 3. The client receives this information, and uses it to display the new chunk, enemies, etc. Keep in mind that pretty much all multiplayer games have all game logic like collision, damage, etc. done on the _server_, for security reasons. The client is just a pretty picture.
I am trying to use this big script given by Theraot but I'm not sure how to use it well and what else should be needed?
The big script appears to be a way of serializing a chunk's data to send over the network. This will not help you create chunks, but it could be useful for the networking side of things.By the way, my project Skelerealms will almost certainly not help you create an ARPG, Infinitely generated or otherwise. It is made for Bethesda-Style RPGs, like Skyrim, with heavily authored content. It is also not made with multiplayer architecture in mind, although with some modification it should be able to translate to multiplayer.
I have been on the hunt for solutions to learn from to make a ground up solution and so far I have found some promising leads for data and chunk storage for multiplayer in Godot 4.2.1.NET "Leads and Suggestions:
Solicey/minecraft-made-with-godot#1 (Multiplayer Minecraft clone written in C# with Godot 4.2.1.NET)
...
xellu/xelcraft#6 (Multiplayer Planned Minecraft clone written in C# with Godot 4.2.1.NET)
...
hakanero/minecraft-clone#1 (Minecraft clone written in C# and GDscript with Godot 4.2.1.NET)
...
pvini07BR/mijocraft#2 (GDScript Multiplayer Minecraft in Godot 3.XX)
...
fanherbaty/crustycraft#1 (2D Minecraft with cave levels in Godot 4.2.1.NET+)
...
https://www.youtube.com/watch?v=LEZGrHyWNmQ + https://astruggletosurvivedevblog.blogspot.com/ (C# software engineer seamless large tile / chunk map that can possibly do multiplayer and browser support game)
...
sirarandor/lux-terra#1 (Multiplayer expanding tile / chunk game with fog of war)"
What are your thoughts and and suggestions? What should I do next? All feedback is welcome.
I've already given my thoughts on the technical side. However, I think you're overthinking thins. Focus on making a fun ARPG first.
I've already given my thoughts on the technical side. However, I think you're overthinking thins. Focus on making a fun ARPG first.
I am making big game examples that needs big game system that work from the start to empower people to make big game in Godot 4+. Game can be fun if the are designed well but I think every game must work to have the the chance to be fun. I wish things were simple but with one big charge and big successes the foundation can be made for big games for the creative community and open source and forever free; big games need big working big game systems and then everything fun can be created.