When an event starts, it puts its commands into an "event interpreter". This interpreter converts the commands into their proper game effects, with the correct delays etc.
Autorun, Event Touch, Player Touch, and Action Button triggers all run in the main interpreter (defined on the map), so you can only have 1 of these events run at any time. If such an event is already running when it changes page or is deleted (e.g. by changing map), the event's commands will still continue to be processed because the interpreter remains intact. As mentioned, these event types also block standard player input: movement & menu access.
Parallel events run in an interpreter defined on the event itself, which causes some differences:
- They can run even when the main interpreter is busy, e.g. during fade-in from Transfer Player.
- They will stop immediately if the event changes page, or is deleted (e.g. by changing map). Common events are refreshed on map change, so they are affected by this as well.
Some event commands require
shared resources, e.g. Show Text needs to use the message window. If that window is currently in use, then Show Text from another event cannot be processed until the first event is finished with it.
By default, the updates go like this (CE = common event):
- Process running events (
Game_Map#update
): main interpreter, parallel map events, parallel CEs.
- Then start new events (
Game_Map#setupStartingEvent
): reserved CE, map event, autorun CE.
Parallel events start automatically during the "process" check, if they're active and not already running. When an event is triggered, it is marked as "starting", which basically queues it for the "start new event" check.