diff --git a/emulators/visual-pinball.yml b/emulators/visual-pinball.yml index 72314b7b..21a725d3 100644 --- a/emulators/visual-pinball.yml +++ b/emulators/visual-pinball.yml @@ -3,8 +3,8 @@ type: standalone core_classification: game_engine source: "https://github.com/vpinball/vpinball" upstream: "https://github.com/vpinball/vpinball" -profiled_date: "2026-10-04" -source_commit: "8a9f36d227a0e71be33c36418e4e3ffc8c5c2723" +profiled_date: "2026-10-20" +source_commit: "e4a79a5d58df3d543ffb5360ae8458cfdf4cb7bb" core_version: "10.8.1" display_name: "Visual Pinball X" cores: @@ -17,14 +17,21 @@ mode: standalone notes: | Pinball table simulator. The table is the content: .vpx and .vpt files are OLE Compound Documents holding the geometry, textures, sounds and a VBScript - program, read through POLE (src/parts/pintable.cpp:1427-1430). Every build - other than the Windows editor compiles the shared source set with - __STANDALONE__ and links libwinevbs, Wine's VBScript engine with its COM and - ATL headers, beside SDL3, SDL3_ttf, FreeImage, hidapi, libspatialaudio and - libmysofa with zlib. PinMAME, AltSound, - DMDUtil, DOF, FlexDMD, B2S, PUP, Serum, VNI and ScoreView are plugins staged - in plugins/ next to the binary (make/CMakeLists_app.txt:533-554,605-615, - make/CMakeLists_sources.txt:811-817, make/CMakeLists_plugins.txt:21-25,39-56). + program, read through POLE (src/parts/pintable.cpp:1538-1541), and a .vpz + pack, a zip or a plain folder of JSON part files, is read through the JSON + serializer instead (src/parts/pintable.cpp:1447, + src/utils/JSONSerializer.cpp:1096-1102). Every build other than the Windows + editor compiles the shared source set with __STANDALONE__ and links + libwinevbs, Wine's VBScript engine with its COM and ATL headers, beside SDL3, + SDL3_ttf, FreeImage, hidapi, libspatialaudio and libmysofa with zlib + (make/CMakeLists_app.txt:535-556,607-617, make/CMakeLists_sources.txt:829-835). + AlphaDMD, AltSound, B2S, DMDUtil, DOF, FlexDMD, HelloScript, HelloWorld, + Inspector, Nixie, PinMAME, PUP, RemoteControl, Serum, UpscaleDMD, VNI and WMP + are plugins staged in plugins/ next to the binary, ../PlugIns on macOS + (make/CMakeLists_plugins.txt:21-25,39-55). The player scans that folder and + loads every subfolder whose plugin.cfg names a library for the running + platform (src/core/player.cpp:145, src/core/FileLocator.cpp:216-222, + plugins/plugins/MsgPluginManager.cpp:425-436). ES-DE finds VPinballX_BGFX or VPinballX_GL and runs ` -play `, Batocera builds the standalone tree at 3ec37c7f9a into /usr/bin/vpinball and runs `VPinballX_GL -PrefPath -Ini @@ -38,7 +45,7 @@ notes: | everything in the application folder, which is the legacy Windows 9x behaviour. Which one applies is decided by where VPinballX.ini is found: in the preferences folder gives AppPrefData, else beside the executable gives - AppOnly, else AppPrefData (src/core/FileLocator.h:11-25,57,63-66, + AppOnly, else AppPrefData (src/core/FileLocator.h:11-25,60,66-69, src/core/FileLocator.cpp:195-206). The preferences folder is the SDL preference path for VPinballX with a major.minor subfolder (src/core/FileLocator.cpp:46-53). Batocera's 001-default-path.patch @@ -48,79 +55,93 @@ notes: | locations in order, each case-insensitively: the table's own folder, then user/ and scripts/ beside it, then the installation folder with user/, scripts/ and tables/ under it, then the preferences folder with user/ and - scripts/ under it (src/core/FileLocator.cpp:379-412, - src/core/ScriptGlobalTable.cpp:352-381). The - scripts/ directory the build ships carries the 71 .vbs files tables include + scripts/ under it (src/core/FileLocator.cpp:400-433, + src/core/ScriptGlobalTable.cpp:350-379). The + scripts/ directory the build ships carries the 73 .vbs files tables include by name, core.vbs and controller.vbs beside the per-manufacturer machine scripts (WPC.vbs, sam.vbs, s11.vbs, zac.vbs and the rest), copied from - src/scripts (make/CMakeLists_app.txt:631-635). The Windows editor's + src/scripts (make/CMakeLists_app.txt:633-637). The Windows editor's completion parser asks for core.vbs through the same search without a table, so in the seven installation and preferences locations, and shows a warning - box when none holds it (src/ui/win/codeview.cpp:2068-2076, + box when none holds it (src/ui/win/codeview.cpp:2053-2061, src/core/FileLocator.cpp:238-245). Table scripts also read four directory properties. UserDirectory is the table's user folder, created on demand, TablesDirectory the system documents folder or the installation folder when SDL reports none, MusicDirectory the table's music folder with an optional subfolder, ScriptsDirectory scripts/ under the installation folder. Each fails when its directory does not exist - (src/core/ScriptGlobalTable.cpp:383-424, src/core/FileLocator.cpp:251-259). - In AppPrefData mode user/, music/, cache/ and autosave/ sit beside the table; - a folder missing there on a read is looked up the AppOnly way, where user/ - hangs off the installation folder and music/ is tried under the installation - folder, the table folder, then the preferences folder - (src/core/FileLocator.cpp:267-377). + (src/core/ScriptGlobalTable.cpp:381-422, src/core/FileLocator.cpp:251-259). + In AppPrefData mode user/, music/, cache// and autosave/ sit + beside the table. A folder missing there on a read is looked up the AppOnly + way, where user/ hangs off the installation folder, the cache sits under + Cache/
in the preferences folder and music/ is tried under the + installation folder, the table folder, then the preferences folder + (src/core/FileLocator.cpp:267-398). The rest of the install tree is read the same way and ships with the binary: assets/ holds BallEnv.exr, AODither.webp and EnvMap.webp, the first two loaded with no fallback (src/renderer/Renderer.cpp:176-188), - the bumper and kicker textures (src/parts/bumper.cpp:148,160,172,186, - src/parts/kicker.cpp:198-239), the segment display textures - (src/renderer/Renderer.cpp:1493-1510), TableSizes.csv, the table size + the bumper and kicker textures (src/parts/bumper.cpp:150,162,174,188, + src/parts/kicker.cpp:200-241), the segment display textures + (src/renderer/Renderer.cpp:1503-1521), TableSizes.csv, the table size database (src/core/TableDB.cpp:16), vpinball.png for the window icon - (src/renderer/Window.cpp:280), LiberationSans-Regular.ttf, the textbox font - used when the table folder holds no -