How to manage minigames on a single map?

Our team is trying to create a multiplayer game (4 players) with many small (but distinct) activities on a single map/level. Similar to Stardew Valley but each activity (fishing, cooking, etc.) uses a unique set of game logic.

A player will freely be able to travel to other streamed sublevels and participate in an activity while other players are in another area. Since each persistent level can only have one ‘Game Mode’ and ‘Game State’ and the entire game takes place on one level/map; we need a smart way to organize the logic. We’re trying to avoid creating a single giant ‘Game State’ with logic for every event.

Here are the requirements (as I see it):

  • Multiplayer
  • One Level/Map (with sublevels)
  • Able to accommodate any number of unique activities/gameplay events in tandem
  • Each player must be able to participate in an activity without interrupting current activities that other players are participating in
  • A player can join another player’s in-progress activity. A wave defense activity, for example. If Player One was on wave 3, Player Two would also be on wave 3 when they enter the area.

I’m looking for any idea or suggestions on a good clean way to manage all this -we’re stumped.

We’ve once faced similar case, but in local game. The approach was rather simple: each MiniGame - Actor with corresponding UI elements and input hooks, that are activated on start and deactivated on end. For Multiplayer each MiniGame should know how to sync itself. So the only one GameState can just store synced binary data. It’s not canonical solution, rather just experience

Thanks for the suggestion! It sounds like a good idea. I hadn’t thought about storing all of it on separate actors like that.