Forget about limits - there are no limits on anything that would be exclusive to online games. 400x400 array of scalar type like fixed (aka real) is nothing. Whether you actually need this array to achieve what you need is another thing, but let's not focus on this.
I am assuming that global variables are only running in one spot (host? battlenet? Who handles trigger execution logic?
It seems like you just don't get how SC2 works. It's based on so called deterministic synchrous game engine.. I'd recommend you to read this [1] to get better understanding.
To answer your question in short - everyone.. that is every client/player connected to the game. Not the battlenet server though. When your friend drops a nuke, he has to process the action on the same terms as you do (over the wire there are transmitted only inputs/commands from each client). Thus both of you use the same global variables to get the same result. Perhaps this is what you've missed, when implementing triggers (I didn't try to analyze them).
and that triggers are not multi-threaded (i.e., an infinite loop will freeze the game; the game allows as many CPU cycles to finish trigger loops as those loops require, it does not save pause long loops and resume them later).
There is multi-threading.. but no the one you'd expect - threads cannot run in parallel. And executions happen in cycles. I'll just link the wiki again, because it explains it better than I would be able to:
In case of SC2 context switch can be initiated by Wait function. When supplied with 0.0 it guarantees the thread will be resumed in next game frame. And yes, there's a limit of actions VM can perform during one frame. I don't recall exact limit, but you can indeed freeze the game for few secs, before timeout occurs.
Another thing that makes this hard is the lack of any debugger (that I know of).
There's one.. kinda obscure, but does the job. In testmode you can open it by typing "TrigDebug". Also it requires game to be in windowed mode. If you want to have it at start of the game then head over to editor preferences -> test document.
Is there any way at all to open some kind of debug message window DURING MULTIPLAYER and see if the map is generating errors?
You can setup TriggerDebugMessage to save to log file. Log file will be written anytime you play the game or watch the replay.
But, you can also relaunch SC2 with "-development" flag, that will enable test mode for replays. Including access to debugger. If you launch SC2 from Battle.net client, then in its options there's somewhere a field to type additional cli params. For testing purposes that would be "-development -windowed -trigdebug".
When testing offline it's also good too add additional dummy players, that have the control shared to you. And simulate what would happen in actual online game.
Forget about limits - there are no limits on anything that would be exclusive to online games. 400x400 array of scalar type like fixed (aka real) is nothing. Whether you actually need this array to achieve what you need is another thing, but let's not focus on this.
It seems like you just don't get how SC2 works. It's based on so called deterministic synchrous game engine.. I'd recommend you to read this [1] to get better understanding.
To answer your question in short - everyone.. that is every client/player connected to the game. Not the battlenet server though. When your friend drops a nuke, he has to process the action on the same terms as you do (over the wire there are transmitted only inputs/commands from each client). Thus both of you use the same global variables to get the same result.
Perhaps this is what you've missed, when implementing triggers (I didn't try to analyze them).
[1] https://blog.forrestthewoods.com/synchronous-rts-engines-and-a-tale-of-desyncs-9d8c3e48b2be
There is multi-threading.. but no the one you'd expect - threads cannot run in parallel. And executions happen in cycles. I'll just link the wiki again, because it explains it better than I would be able to:
https://en.wikipedia.org/wiki/Cooperative_multitasking
In case of SC2 context switch can be initiated by Wait function. When supplied with 0.0 it guarantees the thread will be resumed in next game frame.
And yes, there's a limit of actions VM can perform during one frame. I don't recall exact limit, but you can indeed freeze the game for few secs, before timeout occurs.
There's one.. kinda obscure, but does the job. In testmode you can open it by typing "TrigDebug". Also it requires game to be in windowed mode. If you want to have it at start of the game then head over to editor preferences -> test document.
You can setup TriggerDebugMessage to save to log file. Log file will be written anytime you play the game or watch the replay.
But, you can also relaunch SC2 with "-development" flag, that will enable test mode for replays. Including access to debugger.
If you launch SC2 from Battle.net client, then in its options there's somewhere a field to type additional cli params. For testing purposes that would be "-development -windowed -trigdebug".
When testing offline it's also good too add additional dummy players, that have the control shared to you. And simulate what would happen in actual online game.
Previously known as: SomeoneTookMyNameTT