VPin Studio Server Status Updates - syd711/vpin-studio GitHub Wiki
In order to support features like the Pause Menu, the Event Log or the automatic highscore card generation, the VPin Studio server needs to stay informed about the status of the frontend (e.g. PinUP Popper). Also, for features like the dashboard overlay -which can be shown on startup of the frontend- to work, this event must somehow be communicated to the VPin Studio server too. The following events can be triggered from the frontends:
- Frontend launch
- Frontend exit
- Table launch
- Table exit
The Frontend launch event is used to show the dashboard overlay if the user has configured the dashboard to be shown on startup. If the VPin Studio server is launched after the frontend, it checks if a corresponding process already exists and notifies the listeners for this event, e.g. shows the dashboard.
The Table launch and Table exit events are required to start and finish the writing of the table's Event Log. These events are also used to remember the active table so that the Pause Menu knows for which table to be opened. The exit event is also used to trigger the automatic highscore generation (a few seconds after the table has been exited) and to trigger notifications. All events of the frontend are communicated to the VPin Studio server via curl commands.
curl commands: curl is a command line tool which executes http calls. Since the VPin Studio server is nothing else than a HTTP server, this tool (which is part of every Windows installation) is used to notify the server about status updates of tables or the frontend.
VPin Studio automatically adds the curl commands to the frontend. Each frontend has it's own way of executing these curl commands. The specific locations where these curl commands are added for each frontend are explained in more detail below.
The VPin Studio server automatically adds a curl call into the StartUP script of PinUP Popper, so the server knows when the frontend has been started. You can lookup this call e.g. in the Global Settings of PinUP Popper.

To communicate the table launch and exit events to the VPin Studio server, the game launch and exit scripts of the frontend are automatically written. If this has not happened, make sure to add the line
curl -X POST --data-urlencode "table=[GAMEFULLNAME]" --data-urlencode "emu=[DIREMU]" http://localhost:8089/service/gameLaunch
at the end of the emulators launch script and
curl -X POST --data-urlencode "table=[GAMEFULLNAME]" --data-urlencode "emu=[DIREMU]" http://localhost:8089/service/gameExit
at the end of the game exit script. The result should look like the screenshot below.
If your pause menu or the automatic highscore card generation does not work, please revisit the emulator script changes that are shown above. Both curl calls must be part of the scripts in order for these features to work.
Also make sure that the curl command can actually be executed. E.g. it may happen that another command before the exit curl command call block the execution of the remaining exit script. You can try to move the curl call up in the script in that case.
The "Run program on startup" section under "Startup settings" is configured as follows:
- Startup Program Enabled: Yes
- Working Path: <VPin studio path>/resources/scripts
- Executable: frontend-launch.bat
The "Launch before" and "Launch after" sections under "Visual Pinball" are configured as follows:
Launch Before section:
- Enable Launch Before: Yes
- Launch Before Path: <VPin studio path>/resources/scripts
- Launch Before Executable: emulator-launch.bat
- Launch Before Parameters: "[TABLEPATH]\[TABLEFILE]"
Launch after section:
- Enable Launch After: Yes
- Launch Before Path: <VPin studio path>/resources/scripts
- Launch Before Executable: emulator-exit.bat
- Launch Before Parameters: "[TABLEPATH]\[TABLEFILE]"
At this time, these events are not supported by PinballY (this will be addressed in a future update)
To communicate the table launch and exit events to the VPin Studio server, the "Run before (2)" and "Run after (1)" fields of Visual Pinball systems in PinballY are automatically written.

The "Run before (2)" line should contain:
[NOWAIT HIDE]curl -X POST http://localhost:8089/service/gameLaunch --data-urlencode "table=[TABLEPATH]\[TABLEFILE]" --data-urlencode "emu=<system name>" & :: Added by VPin Studio
The "Run after (1)" line should contain:
[NOWAIT HIDE]curl -X POST http://localhost:8089/service/gameExit --data-urlencode "table=[TABLEPATH]\[TABLEFILE]" --data-urlencode "emu=<system name>" & :: Added by VPin Studio
Note that in emu=<system name>
, is replaced by the exact text from the "System name" field at the top of the system screen
If there is any text in the "Run before (2)" or "Run after (1)" field not added by VPin Studio, the fields will not be updated automatically. If your pause menu or the automatic highscore card generation does not work, remove any text from the "Run before (2)" and "Run after (1)" fields of all Visual Pinball systems and these will be automatically added again by VPin Studio Server.