Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can this work for Godot 4+ games with multiplayer and open world chunks? #2

Open
WithinAmnesia opened this issue Feb 16, 2024 · 100 comments

Comments

@WithinAmnesia
Copy link

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.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 16, 2024

This project was made in Godot 3, so it would need to be upgraded first. It doesn't use Godot's multiplayer system, but a custom one. There is a support for loading/unloading instances (rooms), but it's rather simple and easy to replicate.

IIRC the PDF explains the inner workings: https://github.com/KoBeWi/The-Soulhunter/blob/master/Paper/The%20Paper%20Eng.pdf

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

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

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

I can't run the project, nor open it in the editor. Getting some error spam about tiles.

If you want seamless loading, if you make your chunk be size of the screen, you should be loading 3x3 grid of chunks, because when going between chunks, you will see multiple of them at once. As for unloading, in my project I had a timeout (I think 1 minute?). If no player was in the room for that time, it was unloaded. Though if the player is moving fast between chunks, the timeout could adjust dynamically to unload far chunks.

@WithinAmnesia
Copy link
Author

This project was made in Godot 3, so it would need to be upgraded first. It doesn't use Godot's multiplayer system, but a custom one. There is a support for loading/unloading instances (rooms), but it's rather simple and easy to replicate.

IIRC the PDF explains the inner workings: https://github.com/KoBeWi/The-Soulhunter/blob/master/Paper/The%20Paper%20Eng.pdf

Oh excellent. What are your thoughts and feeling and ideas for what should be done for seamless chunk loading and unloading now with this update and promising code from Theraot? I hope you can read this code better than I can Oh 1 sec.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

I can't run the project, nor open it in the editor. Getting some error spam about tiles.

If you want seamless loading, if you make your chunk be size of the screen, you should be loading 3x3 grid of chunks, because when going between chunks, you will see multiple of them at once. As for unloading, in my project I had a timeout (I think 1 minute?). If no player was in the room for that time, it was unloaded. Though if the player is moving fast between chunks, the timeout could adjust dynamically to unload far chunks.

error spam? What does this look like? I had to re-import stuff lots and there has been unable to write / lack permissions before but it has also been an issue of too long directory. So try a short directory path too, it might help? What system and stuff are you using I might be able to help get it running? All feedback is good.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

powershell_zF6ApB7oHo.mp4

This, forever. (the tile errors begin a bit later)

@WithinAmnesia
Copy link
Author

powershell_zF6ApB7oHo.mp4

This, forever. (the tile errors begin a bit later)

Interesting. oh! https://github.com/jonathaneeckhout/jdungeon/tree/d941345fd187e51d7d51d24027838baae3ba4b78 this is the JDungeon main branch with the in sync version that the ARPG demo is based from its like 99% the same minus its 256x256 and the test is 128x128.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

Did I corrupt the ARPG 128x128 version? Hmmm. I uploaded it and downloaded it from its own github branch and tested it and it worked? But its supposed to work on not just my pc so I wonder what the issue is. Can you run the regular JDungeon from that link? If so it must be an issue with my 128x128 version. Maybe the .godot/imported section hmm.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

What Godot version exactly?

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

What Godot version exactly?

Godot 4.2.1.NET https://godotengine.org/download/windows/ or linux / mac .etc

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

Ok I managed to run it, but only the server (the client couldn't log in for some reason).

Looks like your chunks are very big (I mean compared to the screen size). Not sure how a 3x3 grid would behave, maybe a better option is loading chunks when a player gets close to the border. There is space for that.

Also for chunked maps I'd suggest creating some specialized editor, because editing them separately is going to be a hassle if they are supposed to link seamlessly.

So what do you expect from me exactly? I already described the state of this project. I can give some general advice, but I'm not a networking expert. I didn't make any multiplayer game since I abandoned the current Soulhunter.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

I updated the main page with start instructions now.
WithinAmnesia/ARPG#15
How to start: Run 3-4 instances in the debug -> run multiple instances. Then run the first instance as Gateway. The second instance should run as Server. The third instance as Client. Make an account then log in. The fourth and more instances can be for client multi-boxing testing and work the same as the third instance.

Ok I managed to run it, but only the server (the client couldn't log in for some reason).

Looks like your chunks are very big (I mean compared to the screen size). Not sure how a 3x3 grid would behave, maybe a better option is loading chunks when a player gets close to the border. There is space for that.

Also for chunked maps I'd suggest creating some specialized editor, because editing them separately is going to be a hassle if they are supposed to link seamlessly.

So what do you expect from me exactly? I already described the state of this project. I can give some general advice, but I'm not a networking expert. I didn't make any multiplayer game since I abandoned the current Soulhunter.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

Ok I managed to run it, but only the server (the client couldn't log in for some reason).

Looks like your chunks are very big (I mean compared to the screen size). Not sure how a 3x3 grid would behave, maybe a better option is loading chunks when a player gets close to the border. There is space for that.

Also for chunked maps I'd suggest creating some specialized editor, because editing them separately is going to be a hassle if they are supposed to link seamlessly.

So what do you expect from me exactly? I already described the state of this project. I can give some general advice, but I'm not a networking expert. I didn't make any multiplayer game since I abandoned the current Soulhunter.

Oh well I just need some advice and like thoughts and what should be pursued? this is a complex issue and I will make a lot of errors so like if any help and or guidance can be give n that would be great.

I just need need like testing and what to do next for I'm not really goo at this but if eel with the right people we can find the solutions together. Once we find what works then everyone can benefit too. So it is important for myself be open minded and like I just need some ideas and knowledge and like any suggestions help too. Its really hard to find propel who are good at this stuff so any advice would help. Any thoughts and questions and insight and like what would make sense to do next with this big puzzle would be so helpful. I'll try to find people who can help too where maybe this puzzle needs a community to solve? Any feedback is welcome.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

I didn't look at the internals, but your gateway shouldn't be a Godot app, because it creates unnecessary overhead. Also perfectly the server shouldn't be a Godot instance either, or at least it should be as light as possible. In my project I couldn't work around that, but yours seem to be simpler though, because it doesn't really require physics. That's the advice I can give after seeing the demo.

That said, I don't really have time to provide any serious help. Seems like this is an open-source project? You'll need to find many people if you want to succeed, especially when you aren't experienced yourself, so good luck with that.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

I didn't look at the internals, but your gateway shouldn't be a Godot app, because it creates unnecessary overhead. Also perfectly the server shouldn't be a Godot instance either, or at least it should be as light as possible. In my project I couldn't work around that, but yours seem to be simpler though, because it doesn't really require physics. That's the advice I can give after seeing the demo.

That said, I don't really have time to provide any serious help. Seems like this is an open-source project? You'll need to find many people if you want to succeed, especially when you aren't experienced yourself, so good luck with that.

Okay I am back again sorry for the long reply times. Yeah the server being together is a simplicity thing. It was originally separate but it was hard to start and a lot of people struggled so it was made simpler and all together. Pros and cons you are right its better to have it separate but its more simpler to have it together.

I wonder what to do here then:
"I didn't look at the internals, but your gateway shouldn't be a Godot app, because it creates unnecessary overhead."
"Also perfectly the server shouldn't be a Godot instance either, or at least it should be as light as possible."

How do we get these simple yet work good together? That is a puzzle too.

"In my project I couldn't work around that, but yours seem to be simpler though, because it doesn't really require physics. That's the advice I can give after seeing the demo."
You could maybe use some stuff from the JDungeon stuff its open source and like the license is really good too like how MIT works practically.

"That said, I don't really have time to provide any serious help. Seems like this is an open-source project? You'll need to find many people if you want to succeed, especially when you aren't experienced yourself, so good luck with that."
yeah its going to need a open minded community for sure to solve but hey once its solved like the whole community can win and we can have this amazing community resource forever to build massive multiplayer games with. We just need a start and bit by bit we can find solutions.

You are right I'm not the bets at this but like I think if I try hard enough and we find solutions together and like it'll take a bunch of people like you say in the community to come together and solve this big puzzle and once its solved everyone benefits. Also we can stop using Unity and Unreal and other for profit game engine that could like on a whim ruin everything by being too greedy like Unity. Unreal is owned by Tencent in China so like that just one back update away from being like Unity then what? All we have Godot then and that's all we need for its open source forever free.

Once we solve this 20+ year old critical massive multiplayer player infrastructure puzzle we can start building massive multiplayer games across the entire community for the foundation would be there forever free for everyone. I'll be around just I'll try to get the community together too and rally behind this multiplayer seamless chunk loading and unloading system and try and solve this puzzle by by bit.

@WithinAmnesia
Copy link
Author

https://github.com/KoBeWi/The-Soulhunter how do we get the game going? It is Godot 3.XX and the server .zip is in a strange website that won't allow the download?

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

The link was dead, I updated it.

@WithinAmnesia
Copy link
Author

Do you want to make this into Godot 4+? Your game could use a Godot 4+ update to work now? Godot is using 4+ now and its not backwards compatible. Yes there is so long term 3.XX support but 99/100 new projects are using Godot+ and the dev team is focusing on Godot 4+ and eventually wants everyone to use Godot 4+. I really hope so for there are very few really talented people like yourself.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

Well as I said, the project is no longer developed, so I have no interest in updating it. The source is available if someone wants to upgrade it (there isn't much code to change).

@WithinAmnesia
Copy link
Author

What code needs to be updated to Godot 4 and what would that look like? What are you doing now?

@WithinAmnesia
Copy link
Author

How do you get past the hue part logging into the game? i go to make an account i have both the server and client.exe running and when I type in like username 'test' password 'test' set hue to default red it like stops after pressing enter? What should be done to get the game to work? I let it go past the windows firewall too so its a mystery

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

Did you run the database? You need to run database, then server, then start game, register account and login. I just tested and it still works.

What code needs to be updated to Godot 4 and what would that look like?

Run the project and fix all errors. Lots of stuff was renamed, so the methods need to be updated to new names etc.

What are you doing now?

My current main project is Voice of Flowers. I had big plans for The Soulhunter, but making a MMORPG is too much hassle. I might revise the project in a different form one day.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 17, 2024

Did you run the database? You need to run database, then server, then start game, register account and login. I just tested and it still works.

What code needs to be updated to Godot 4 and what would that look like?

Run the project and fix all errors. Lots of stuff was renamed, so the methods need to be updated to new names etc.

What are you doing now?

My current main project is Voice of Flowers. I had big plans for The Soulhunter, but making a MMORPG is too much hassle. I might revise the project in a different form one day.

"Run run_database.bat (requires mongodb installed)" in 'how to run'. is the other one Polish? I worked on Polish tank history before lol.

"I had big plans for The Soulhunter, but making a MMORPG is too much hassle. I might revise the project in a different form one day." Awwwwwwwe. You should do the MMORPG one too i know its hard but its worth it. I got booted from the JDungeon people cus the server drove them crazy they like Matthew not one more server question reee 'but how does the chunk talk to the server?' -thats it delete the questions and ban. I Asked too many questions too quickly overstressed the poor devs lol. They did there best but they having a hard time with errors too. MMORPGS are hard too. I think we are still friends with the JDungeon people its just servers are hard to expand lol. You know people like yourself are really hard to find. I try to keep track of people and treat them really good. Do you have any plans to get the MMO stuff and running? Its hard not a lot of positive stuff too or what happened last time, maybe it'll be better now? Any feedback is welcome.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 17, 2024

Yep, when you run the bat file you should see this:

image

If you don't it means mongodb is not available in your PATH.

is the other one Polish?

Yes.

@WithinAmnesia
Copy link
Author

How do get the "mongodb installed"? Also I made the comment bigger above.

@WithinAmnesia
Copy link
Author

Yep, when you run the bat file you should see this:

image

If you don't it means mongodb is not available in your PATH.

is the other one Polish?

Yes.

run_database.bat uh is the command prompt? there is a technical way to do this. I ran .bat files before (my memory is fuzzy).

@WithinAmnesia
Copy link
Author

image
okay I need the mongodb hmm

@WithinAmnesia
Copy link
Author

https://www.mongodb.com/atlas/database mate you gotta buy mongodb like why use godot then? Hmmm I'll keep searching.

@WithinAmnesia
Copy link
Author

MongoDB Community Server is the free and open-source version of the NoSQL database system.
MongoDB Atlas is the paid and fully managed version of MongoDB that integrates natively with major cloud providers, including Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP). hmmmmmm
https://www.cloudzero.com/blog/mongodb-pricing/ Amazon cloud i see a lot too for dedicated servers.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 18, 2024

How do get the "mongodb installed"?

Download and install: https://www.mongodb.com/try/download/community

Do you have any plans to get the MMO stuff and running?

No, as I said, too much hassle. I spent a few months developing it and it's lagging as hell. I didn't even solve basic problems. Adding content is a nightmare when you need to consider all the networking stuff and with MMOs you want the server to be fully authoritative.

@WithinAmnesia
Copy link
Author

Requirements: A hand made and dynamic main over world map 100 areas combined with 1,024 x 1,024 tile map for an at least tile map size of 104,857,600 tiles with 16 x 16 pixel tiles at least. Perhaps double that with subterranean and interiors included to the total amount of tiles for a multiplayer seamless chunk system. The intended client / player / population / server size is to be ~2K to ~16K+ clients on one server. How can we convert the Blockygame multiplayer seamless chunk system for this forever free open source forever free goal?

My first thoughts are to get just to the basics and start from a stripped down 2D array. Yet I have to do this properly to keep the dynamic multiplayer seamless chunk system intact and future proof for 2.5D and 3D games; when they are ready to be made in subsequent order. I must seek guidance to do this properly and make a beautiful work for the community to be empowered with too for making massive multiplayer games. I call this whole open source forever free community dynamic multiplayer seamless chunk system Infinite Worlds.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 21, 2024

Important question: is your chunks supposed to be modifiable or will they stay mostly intact? If the players have no way to modify chunks, but only do some basic interactions (like idk, kill monsters, open doors etc.), you don't need to keep everything in database. You could even use Godot scenes and simply load them as needed.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 21, 2024

Important question: is your chunks supposed to be modifiable or will they stay mostly intact? If the players have no way to modify chunks, but only do some basic interactions (like idk, kill monsters, open doors etc.), you don't need to keep everything in database. You could even use Godot scenes and simply load them as needed.

Dynamic. It will be dynamic but by design more stable so it has aspects of a static M.M.O.R.P.G. as World of Warcraft or Old School RuneScape but it will be able to change the chunks and save to the server chunk data. Even if it's like Wurm Online where the world is technically dynamic but it is very slow to do so. In that the world stays close to world creation but can be changed by the players; gradually with sufficent effort / organizing / kinda likeWurm's mountain tunnel but hopefully more full of life and wonder. Yet hopefully not like Wurm where its creepy and more like WoW and OSRS. Where people play them but technically its like Minecraft with just more traditional western video game design values. So when people are allowed to run the world like in Dragonrealms it naturally kinda is like D&D where the world is fairly difficult to change but can be fully mastered by the player-base with sufficient effort and organization of division of labour like in real life history. I do not intend to have the world be easily massacred like in 2B2T's spawn area but looks and acts intact but these are design choices and not engine capabilities. You can take Minecraft and make all the tools weak and the blocks strong and you end up with this more or less with just some design tweaks. The engine needs to work first though as a fondation for all this though lol. Also I have a mostly handmade world with some procedural generation for helping in larger areas / get it to simulate earths natural terraforming / planet systems. So as for more immersion / connection to real life experiences / world immersion / good for the natural human experience. So the world feels like another version of real life but with magic and spiritual stuff and cool stuff added so its the best of a bunch of things all put together as one.

What are your thoughts and suggestions? What should be done for this 2D Blockygame system conversion so we get this general use multiplayer dynamic open-world seamless chunk system in Godot 4.2.1.NET? All feedback is welcome.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 21, 2024

Well I don't get one thing. You keep bringing Minecraft and voxels and stuff, but the game is supposed to be 2D. Do you have some early screenshot of how it would even look? Mockups? Maybe videos?

@WithinAmnesia
Copy link
Author

The data and the chunk system from the multiplayer Minecraft system are really the key. The voxels can be 2D technically its just the data storage and management for multiplayer which is the key. how they are rendered is more client side and its still important but everything relies on the chunk system working in multiplayer. I have some rough rafts yes but its more like I made a bunch of pathfinding prototypes. A lot of my work can be found here but its not the same format but a general idea. https://www.deviantart.com/withinamnesia/gallery/all + https://www.deviantart.com/withinamnesia/gallery/64014697/agabal-r-p-g-project + https://www.deviantart.com/withinamnesia/art/Mage-Afar-Province-Approximate-Rainfall-Range-896982600 + https://www.deviantart.com/withinamnesia/art/AGABAL-World-Map-The-Burning-Emerald-with-Earth-896834630

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Feb 22, 2024

I just got the Godot_Voxel with BlockyGame to generate a flat world for testing in multiplayer: WithinAmnesia/ARPG#16 (comment) The code for the flat world generator makes ~3 layers of grass (instead of just 1) and it might be a bit buggy but it works although I should have a simpler one like fill all with grass for example but I was not sure how to code that so i just made iterations and slowly got it to work for multiplayer). Each chunk is 16x16x16 blocks so I have to optimize that into 2D better. It works, it's just now I'm trying to figure out how to make it 2D and not 3D but its progress. I'm not sure how to start the 2D. There are some examples of minecraft in 2D with 2D arrays but I'm not sure how to get the 2D mode going and how to keep the chunk system together. It took a while to get the blocks to be flat and the code was a case of trial and error switching things on and off and adjusting values testing in multiplayer.

I am trying to not be bound to the special Godot_Voxel engine module / the special Godot Voxel engine so this solution can be used in regular Godot Engine 4.2.1.NET+ editors.

The big thing now is trying to get the 3D chunks into 2D chunks and then test in Compatibility mode. I have some examples that might help for a start but I'm not sure its super amazing at everything but they might help a bit to get a foothold of what to do next:
pvini07BR/mijocraft#2 (2D GDScript Multiplayer Minecraft in Godot 3.XX)
pvini07BR/mijocraft#3
pvini07BR/mijocraft#4
...
sirarandor/lux-terra#1 (2D Multiplayer expanding tile / chunk game with fog of war)
...
#2 (2D Godot 3.XX multiplayer chunk game)[Your game project]
...
fanherbaty/crustycraft#1 (2D Minecraft with cave levels in Godot 4.2.1.NET+)

What should the next step go? What are your thoughts and suggestions? Should I just keep tinkering away with the 4 2D multiplayer godot game demos and keep trying new things until something works with the 2D port of the multiplayer chunk system with Godot_Voxel? All feedback is welcome.

@WithinAmnesia
Copy link
Author

Zylann/voxelgame#101 (comment) Big 2D/3D hybrid progress update!

@WithinAmnesia
Copy link
Author

Zylann/voxelgame#103 How can entities and player storage work for this demo? Are there any examples or prototypes?
Goal: Minecraft style entity and player storage system. Bonus account system.

How can entities and storage system like chests stored in chunk data like minecraft? Bonus for account linked storage like M.M.O. player inventory and banks / minecraft player account inventory with shulker boxes.

@KoBeWi
Copy link
Owner

KoBeWi commented Feb 23, 2024

AFAIK Minecraft world specifications are mostly open, so you can look up how they did it.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Mar 1, 2024

Do you have any free time to look at the code for this RPG Inventory from scratch tutorial and see how it can be translated / implemented with the Blockygame multiplayer demonstration? What should be done? What are your thoughts and suggestions? All feedback is welcome.
devloglogan/MultiplayerFPSTutorial#13
https://github.com/WithinAmnesia/ARPG/blob/ARPG-Infinite-Worlds/DevLogLogan%20RPG%20Inventory.zip
Here is the Blockygame demo too it needs the Godot_Voxel engine module to work: https://github.com/WithinAmnesia/ARPG/blob/ARPG-Infinite-Worlds/Infinite_Worlds_V.000.006.1.zip

@KoBeWi
Copy link
Owner

KoBeWi commented Mar 1, 2024

I don't really have time to look into it, but inventory systems are not that complicated. For multiplayer it would be more or less the same, but when you do some actions on the items (rearrange, use, drop etc.), you also send this information to the server and server validates that action. When you open inventory, it needs to pull data from the server. If the action you performed is invalid, it should also force updating the inventory to server state.

@WithinAmnesia
Copy link
Author

Authority control for the server is that right or however it is said? I wonder if there are any working examples to learn from to see how to code this in Godot 4? What should be done and what is the proper way to do this?

@KoBeWi
Copy link
Owner

KoBeWi commented Mar 1, 2024

Well my game has some basic inventory, but you can only pick and equip items.

@WithinAmnesia
Copy link
Author

Hey again lol. So I got a teleporting mystery thing going on with Godot 4+ multiplayer and I remember I think you solved this multiplayer travel thing I think already?
https://godotforums.org/d/40502-how-to-teleport-travel-to-another-scene-with-godot-4-multiplayer/10
So I remembered testing / tinkering with The Soulhunter MMORPG 2D Godot 3 demo and it has working scene to scene travel I think right / correct?

Are you familiar with JDungeon? https://github.com/jonathaneeckhout/jdungeon + https://godotforums.org/d/40502-how-to-teleport-travel-to-another-scene-with-godot-4-multiplayer

I am trying / working on getting a Community Godot 4+ M.M.O.R.P.G. working with documentation. The JDungeon demo is like ~9/10 close to fully working enough for a public demo made with documentation to help people learn how to make MMORPGs in Godot 4+; even if it is a smaller scale game it still helps. 2D is great to get started with for the asset creation and available CC0 2D art is ~8-10+ more easy to get / abundant than CC0 / public domain 3D assets of decent quality.

Anyway I found a big part where myself and lots of devs are stuck with not being able to get scene to scene multiplayer map travel working. That JDungeon Godot forum post has screenshots that show the JDungeon portals but they do not work for scene to scene travel. What should be done to help solve this community wide mystery for Godot 4+ multiplayer scene to scene travel? This is like the one big feature needed across many many Godot 4+ community demos and if this can be made possible and available to the community so many cool games can be made with the community.

How are you doing also? It's been a while; I hope things have been going well and you have been doing more cool stuff. I forgot how busy things can get too. I hope you are doing well.

Anything I can help with / any links / demos / tutorials too? Is there a way to get your Godot 3 MMORPG ported to Godot 4+ and also reverse engineer the travel mechanics to help JDungeon and like 20+ / a class of Godot devs all stuck on this zone to zone multiplayer travel feature? It's a big mystery for the community. Bit by bit eventually things can always get better.

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

I'm not familiar with Godot's built-in multiplayer feature. I think it requires all players to be in the same scene. So if you want players in different scenes, you need to load all of them and separate with viewports (that's more or less how The Soulhunter works).

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Jun 19, 2024

I'm not familiar with Godot's built-in multiplayer feature. I think it requires all players to be in the same scene. So if you want players in different scenes, you need to load all of them and separate with viewports (that's more or less how The Soulhunter works).

I think I heard of that before. I wish I knew more about this. Is Soulhunter not complete Godot multiplayer (my memory is fuzzy)? Hmm I've heard of this before the view port thing.

Today with the discord of: https://www.youtube.com/watch?v=lnFN6YabFKg&list=PLZ-54sd-DMAKU8Neo5KsVmq8KtoDkfi4s This person said called SlayHorizon said:
"...In my 2D MMO prototype, where you reach certain areas (checked by server aswell) such as a door to enter in a house for example, the server will make the player unload the current scene and wont receive any more RPC call from this scene then it will ask it to load a specific scene and it will make him sync with all the entities from this instance once the scene is ready.

To be able to handle multiple instances in the same server, I use viewport to simulate different "world physisc" as in my game there are server-side physics calculations and checks.

Or maybe if you got one big map, you might be more interested in an interest management system where you could only see part of map around you and receive only RPC calls from entities around you. Or even both, that's what I'am trying to do before open sourcing it but the code is very dirty."

Also on the Godot forum there was a 3D thing but it was different but similar. https://godotforums.org/d/40012-synchronizing-multiplayer-3d-cameras-and-items-fail/8

I have found this seamless tile loading and unloading system for multiplayer in Godot voxel blockygame demo (it is very complex and very difficult to make into 2D): https://github.com/Zylann/voxelgame + https://github.com/Zylann/godot_voxel .

It's not easy to keep track of this multiplayer zone / chunk loading and unloading but I'm wondering how to do this in 2D with Godot 4+?

Also I wish I knew how to properly do this from kuligs2
"Not sure about where to find the warp thing but like I mentioned it earlier, you just need to unload scene and load the next one.. Set up a area3D to sniff for when someone enters it, then connect that signal that gets emmitted when somebody enters it to a function that unloads and loads next scene. Experiment and you will find out how to do it .🙂

Check out my own conclusion here https://godotforums.org/d/40012-synchronizing-multiplayer-3d-cameras-and-items-fail/5 "
https://godotforums.org/d/40502-how-to-teleport-travel-to-another-scene-with-godot-4-multiplayer/6

"I think it requires all players to be in the same scene. So if you want players in different scenes, you need to load all of them and separate with viewports."
+
"...Just need to unload scene and load the next one.. Set up a area3D to sniff for when someone enters it, then connect that signal that gets emmitted when somebody enters it to a function that unloads and loads next scene."
+
"The server will make the player unload the current scene and wont receive any more RPC call from this scene then it will ask it to load a specific scene and it will make him sync with all the entities from this instance once the scene is ready.

To be able to handle multiple instances in the same server, I use viewport to simulate different "world physisc" as in my game there are server-side physics calculations and checks.

Or maybe if you got one big map, you might be more interested in an interest management system where you could only see part of map around you and receive only RPC calls from entities around you. Or even both..."

I'm starting to see a common thread here with loading and unloading and viewports and RPC and server communication. I wish I could see this in action to learn and tinker with working examples.

Does The Soulhunter have a similar thing going on or as in what should be done to get these things to work for ~same scene / separate view port / load and unload scenes / chunks / tiles and sync and instances etc all described above? If one working Godot 4+ multiplayer demo can do this in MIT forever free it can free the community and great games can be made. What should I look at / how should be made to work? Its a big mystery and I think with decent work / community help it can be solved and help many people and grow the community.

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

The Soulhunter uses a completely custom multiplayer implementation, it doesn't use the one provided by Godot. The server has multiple Viewport nodes, where each viewport is a separate room, but on client-side the players only load the room they are in. The server tells the client which room it should load.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Jun 19, 2024

Hmm is Godot multiplayer kinda bad? It looks like it was easier for you to make something from scratch avoid Godot and make what you needed. I have experienced many bad / incomplete examples with Godot multiplayer. Is it better to just do what you did and risk the weird not Godot systems complications or can something like what you did be made within Godot and be easy for most people to operate like JDungeon / Blocky Game's all in one built in multiplayer that runs within Godot 4+?

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

I implemented a custom solution, because I followed a tutorial that was possible to replicate only by manually sending packets. I'm not familiar with the Godot's multiplayer system to say whether it can be used for this task or not, but it would work differently from my game.

To reasonably implement what you want, the Godot's multiplayer has to support partial scene replication, i.e. you have a "master scene" where you can find every room of your game, but clients only receive their specific room. If this is not possible, then you need a custom solution.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Jun 19, 2024

I feel that it should be in Godot but I don't have any working examples. I searched ~377+ github Godot rpg / multiplayer repos and none have this feature and yours does not use Godot multiplayer sorta so its scambled eggs trying to put this together. It's better if its all in Godot. Yet but if Godot just sucks wayyy too much then It might be forced to use what you did but then its extra complicated for most people to learn 2 systems. Yet but if that works and Godot is busted then that maybe be the only real viable way forward. Perhaps maybe no one made a working multiplayer because godot just just sucks wayyy too much / no engine devs made good examples. Godot 4+ can do the servers yet there needs to be a working community example and there is yet to be one found that completely solves this mystery.

So now we have like 4-6 branches:

2D:

  • Godot 2D Multiplayer (with no webport) and separate server / multiplayer systems
  • Godot 2D Multiplayer (with webport) and separate server / multiplayer systems
  • Godot 2D Multiplayer (with no webport) and Godot server / multiplayer systems
  • Godot 2D Multiplayer (with webport) and Godot server / multiplayer systems

3D:

  • Godot 3D Multiplayer (with no webport) and separate server / multiplayer systems
  • Godot 3D Multiplayer (with no webport) and Godot server / multiplayer systems

Then it seems I must choose / focus first my efforts upon something to get working:

  • Godot 2D Multiplayer (with no webport) and separate server / multiplayer systems
    vs.
  • Godot 2D Multiplayer (with no webport) and Godot server / multiplayer systems

Its like I gotta pick one to start and I'd like the Godot servers to keep it all together but if that's just not a reality / no working examples then there needs to be something that works.

What is needed to get Godot 2D ARPG with separate maps / areas in multiplayer to work like The Soul Hunter but top down and sorta like Zelda / Diablo? Should a new RPG be made from scratch that is built beside the Soul Hunter that learns from other Godot ARPG projects like:

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

Well most of all it needs lots of work to do it, so you need someone (preferably a team) knowledgeable and dedicated enough to carry such project.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Jun 19, 2024

Well most of all it needs lots of work to do it, so you need someone (preferably a team) knowledgeable and dedicated enough to carry such project.

Would The Soulhunter made in 2D top down and in Godot 4+ work as a good starting point? I might have to make it from scratch but if I know that the BIG mystery of zone to zone travel in multiplayer can be solved day 1 starting the project. That would be wayyy better than starting another 1 map no travel multiplayer tutorial.

Also if the BIG mystery is solved like with The Soulhunter then other nice rpg features can be added. Such as like UI inventory mechanics etc... The Big thing is networking and zone to zone travel to get something working. Everquest classic / Project 1999 and Ultima Online and Diablo 1 and Diablo 2 and Baldur's Gate 1 and Baldur's Gate 2 have zone to to zone travel by teleporting to different maps with multiplayer.

Should I refocus on remaking something like the Soulhunter engine / dev kit but top down and in Godot 4+ and use your working multiplayer server set up to get something started? I think if done right and polished up and working smoothly with proper documentation that a top down 2D Godot 4+ multiplayer ~M.M.O.R.P.G. MIT forever free community dev kit like The Soulhunter would be great success for the community and so much work can be built upon it like legos as well. What should happen to start this / what are your thoughts and feedback / suggestions?

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

Would The Soulhunter made in 2D top down and in Godot 4+ work as a good starting point?

Eh, maybe? Soulhunter is not a great piece of software. It kinda works, but every part could use some improvement. I remember adding new content and features was a chore, so I'm not sure if it would work well if you plan to expand the game a lot. Maybe this can be fixed or maybe it's broken fundamentally.

@WithinAmnesia
Copy link
Author

WithinAmnesia commented Jun 19, 2024

Would The Soulhunter made in 2D top down and in Godot 4+ work as a good starting point?

Eh, maybe? Soulhunter is not a great piece of software. It kinda works, but every part could use some improvement. I remember adding new content and features was a chore, so I'm not sure if it would work well if you plan to expand the game a lot. Maybe this can be fixed or maybe it's broken fundamentally.

Well right now every other Godot multiplayer example on github / tutorials (to my knowledge) does not have working zone to zone travel. So even if the Soulhunter is a bit buggy / strange to work on. It still works / gets more features working than more fancy demos with less fundamental features.

I'd rather something that has potential to grow and can be fixed than a shiny system that cannot like run properly / is stuck to one map.

I've been meaning make a from scratch build but I should probably look into how to get The Soulhunter topdown and work from there. Also one should be using CC0 / public domain asset such as: Foozle - CC0 Multiplayer ARPG: https://foozlecc.itch.io/lucifer-exterior-tileset and then get help with the UI / inventory with potentially: Wyvern Shield Triggers + Box Inventory: https://github.com/don-tnowe/godot-wyvernshield-triggers + https://github.com/don-tnowe/godot-wyvernbox-inventory . then look at any funky features with networking rpg features / odds and ends with JDungeon: https://github.com/jonathaneeckhout/jdungeon . Then look at some of the stat / mechanic tutorials for advanced rpg system like character creation and deeper rpg mechanics like Diablo / Zelda / Baldur's Gate stuff from Flare Engine: https://github.com/flareteam/flare-engine +
GemRB: https://github.com/gemrb/gemrb + Game Development Center - Dedicated Multiplayer ARPG: https://www.youtube.com/watch?v=lnFN6YabFKg&list=PLZ-54sd-DMAKU8Neo5KsVmq8KtoDkfi4s

So I guess the struggle now would be to get The Soulhunter topdown and using CC0 2D assets as step one I think? What do you think are the first steps towards this community 2D MMORPG MIT Godot 4+ dev kit? All thoughts, feedback and suggestions are welcome.

@KoBeWi
Copy link
Owner

KoBeWi commented Jun 19, 2024

https://github.com/loudsmilestudios/TetraForce is a top-down multiplayer game and it's open source, you could check it out.

@WithinAmnesia
Copy link
Author

https://github.com/loudsmilestudios/TetraForce (How did I nor find this before hmm lol?). Do you figure this is a better start? I Should look into this hmmmmmm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants