Switching "game modes" within the same level in a multiplayer game


We’re currently working on a multiplayer strategy game involving both exploration and combat. The current plan is to keep using the world map in combat, both to avoid loading times and to make the level layout relevant both for strategy and tactics. Unfortunately, the controls are going to be radically different between the two modes because there are actions that can only be performed in either combat or exploration mode, the camera controls are different, and so on.

If we were using separate maps for combat and exploration, this could be handed by different GameMode classes, but that won’t be possible if the map is not supposed to change. Same for using different PlayerControllers. I haven’t yet entirely understood how the GameState is supposed to be used, but that also looks like the wrong approach.

Our current ideas include:

  • Define both combat and exploration logic in the same GameMode/PlayerController and switch between them using an enum. (Disadvantage: extremely messy code)
  • Split all the logic that would be specific to combat or exploration into separate manager classes and use these instead of the GameMode whenever necessary. (Though that might work, it sounds like it would run counter to the engine setup.)
  • Anything else?

The game is going to be implemented using both C++ and Blueprint, but we haven’t decided yet for which aspects of the game we’re going to use C++ and for which Blueprint.

Help would be greatly appreciated.

Thanks in advance,

Any ideas?