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

Main Path Quests in Multiplayer #544

Open
GabeHasWon opened this issue Dec 10, 2024 · 2 comments
Open

Main Path Quests in Multiplayer #544

GabeHasWon opened this issue Dec 10, 2024 · 2 comments
Labels
question Further information is requested

Comments

@GabeHasWon
Copy link
Contributor

Summary

Insofar, we've not really approached how to make the main quests in multiplayer work.
At the moment, many quests check some one-time conditions - as they're meant to be breakable paths to boss fights, more or less, and the quests are designed to be the one-time way to get access to the otherwise infinitely repeatable " Map".

As such, a quest like the Frigid Beast (Deerclops boss domain quest) - which requires getting one item from a standalone pre-built structure - would be impossible if I complete it before my friend does.

As such, how would we want to approach this? My thoughts are:

Step-Synced

That boss domain quests are, when activated, activated for everyone (including people who just join, aside from people without the first class quest done). The quest is still updated individually, but reaching the next step updates it for everyone else. This should be fairly simple to do.
For example, if I start Frigid Beast, talk to Rhine, get the Antlers and give them to Rhine, a person who just joins would be on the same "Talk to Elara" step alongside myself.

This could be done in many ways; at the moment, I'm thinking just a simple "SyncedQuest" set or attribute that determines if a quest should be synced, and a simple packet to update quests on incoming & pre-existing clients. Only concern is managing subworlds in multiplayer.

Finish-Synced

Alternatively, the quests would still be entirely local, my accepting a quest does not affect any other player, but completing any of these needs-sync quests would autocomplete it on other clients. This would still allow non-participants to finish the quest and get required loot, and reduce backend work. It might be substantially more confusing for players, though, and potentially make them feel like the game cannot work if they don't understand this system.

Individually Reproducible

Quests are completely unsynced in every way, but are designed to be played individually. For example, instead of me breaking the antlers in the Deerclops quest, I'd right click them to get the item, and then be forever unable to right click it again. That would still allow my friend to join and do the same thing individually; though this'd be a little annoying with certain things.

Any input? I'd personally probably go with Step-Synced as it makes for the smoothest experience, but I can't say that either other option is terrible either.

Reasonings

Making sure the mod is designed to work cohesively in multiplayer.

@GabeHasWon GabeHasWon added the question Further information is requested label Dec 10, 2024
@CollinHerber
Copy link
Collaborator

I think the best path forward is a step-synced. I do want to challenge us moving forward to think about how this would effect the "Hosted Servers" idea I had a bit back. We are a LONG way from that but just something to keep at the back of the mind, so if we do ever end up doing that we don't have to backtrack a ton of work.

I also am interested to see how subworlds will effect this

@GabeHasWon
Copy link
Contributor Author

I know you can send packets between subworlds (i.e. to main world from a subworld), so it shouldn't be too bad, just a new thing to handle. A wrapper around this and it should be clean and a nonissue.

And yeah, I'm trying to keep the - more or less - MMO style concept in mind. Multiplayer is, while always important, even more important here if we want to hit the ideals of the project.

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

No branches or pull requests

2 participants