Network Sync to the host needs to also sync the state of logic objects

My notice is specifically for Counter I/O objects at the moment, but I get a feeling it applies to others too.

In short, when a host loads a map, and before an additional player can join it, if the state of a logic object changes, that state is not given to connecting clients, and so the logic cannot be shared.

My example map has a timer that starts on load, does not loop and lasts 1 second. When the timer completes it increments a counter that starts with a value of zero.
The host loads the map, the counter is at zero, and the timer starts. One second later, the counter increments to one, and something else happens based on this.
A new client connects a few seconds after all of this takes place. They load the map, the timer starts, and the counter increments. The host will read the counter as two, but the client will read it as one, meaning the client loaded the counter at zero.
If a third would join, the host would see it go to three, the first client to two, and the third to one.

It would be nice if the state of logic objects would be downloaded from the host. The host already does this for additional metadata with the map, for instance the GameRound that they’re on, and whether sound emitters are playing or not. Also downloading the state saying “<counter_intro> has a value of 2” shouldn’t cause too much overhead.

This feature can allow for various synchronisation of map features. For instance if there’s a game timer or score that’s controlled by by Condo I/O logic objects, and a player joins mid-game, they should be able to get the value of this without it looking like it’s defaulted, or not working.

For me and my map, I have the particular issue that I want a certain sound to only play for the host, and not for late joining clients. I use a counter that increments when players join, and when this counter reaches 1 it plays the sound, and my hopes that when additional clients joined, their instance of the counter would already be set to 1, and so they wouldn’t get that sound when they cause it to increment to 2, and the host wouldn’t hear it again.