chore: move visual-pinball to f912c04

Build scripts now fetch PinMAME 652249e2; its cited lines only shifted. Music accepts an absolute script path, and PUP packs gain a PUPSOUNDS/ sound bank.
This commit is contained in:
Abdessamad Derraz committed 2026-10-23 15:52:35 +02:00
1 parent 390c4d659e
commit 78b4c9f406
1 file changed
+49 -46
+49 -46
View File
@@ -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-20"
source_commit: "e4a79a5d58df3d543ffb5360ae8458cfdf4cb7bb"
profiled_date: "2026-10-23"
source_commit: "f912c04bcf727a341524f251b600c6bba8f883d8"
core_version: "10.8.1"
display_name: "Visual Pinball X"
cores:
@@ -17,14 +17,14 @@ 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:1538-1541), and a .vpz
program, read through POLE (src/parts/pintable.cpp:1550-1553), 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,
serializer instead (src/parts/pintable.cpp:1459,
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).
(make/CMakeLists_app.txt:558-579,630-640, 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
@@ -56,11 +56,11 @@ notes: |
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:400-433,
src/core/ScriptGlobalTable.cpp:350-379). The
src/core/ScriptGlobalTable.cpp:354-383). 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:633-637). The Windows editor's
src/scripts (make/CMakeLists_app.txt:656-660). 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:2053-2061,
@@ -70,7 +70,7 @@ notes: |
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:381-422, src/core/FileLocator.cpp:251-259).
(src/core/ScriptGlobalTable.cpp:385-426, src/core/FileLocator.cpp:251-259).
In AppPrefData mode user/, music/, cache/<table name>/ 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
@@ -80,26 +80,26 @@ notes: |
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:150,162,174,188,
loaded with no fallback (src/renderer/Renderer.cpp:178-190),
the bumper and kicker textures (src/parts/bumper.cpp:150,162,171,186,
src/parts/kicker.cpp:200-241), the segment display textures
(src/renderer/Renderer.cpp:1503-1521), TableSizes.csv, the table size
(src/renderer/Renderer.cpp:1640-1658), 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 font textboxes
and decals fall back to when neither the table folder, as
<FontName>-<Style>.ttf, nor the table file carries the font, nor on builds
with the Windows SDK an installed font matches
(src/renderer/TextRenderer.cpp:125-196), and which PUP adds after the fonts
of a pack's FONTS folder (plugins/pup/PUPManager.cpp:468-475),
(src/renderer/TextRenderer.cpp:125-198), and which PUP adds after the fonts
of a pack's FONTS folder (plugins/pup/PUPManager.cpp:479-486),
fabian-hrir.sofa, listed below, the editor/ part icons
(src/ui/live/editor/EditorChrome.cpp:200) and four starter tables,
blankTable.vpx, exampleTable.vpx, lightSeqTable.vpx and strippedTable.vpx:
the live editor loads blankTable.vpx when started without a table or when
the requested one fails to load, and its New Table menu loads any of the
four (src/core/AppCommands.cpp:287-293, src/ui/live/EditorUI.cpp:339-358).
four (src/core/AppCommands.cpp:287-293, src/ui/live/EditorUI.cpp:340-359).
OpenGL builds also get shaders-10.8.1/, the .glfx and .fxh sources parsed at
runtime (src/core/FileLocator.cpp:223, src/renderer/Shader.cpp:1803-1804,2207-2210,
make/CMakeLists_app.txt:639-649), and the directory is not copied for the BGFX
runtime (src/core/FileLocator.cpp:223, src/renderer/Shader.cpp:1806-1807,2210-2213,
make/CMakeLists_app.txt:662-672), and the directory is not copied for the BGFX
renderer. Four plugins carry resources of their own: plugins/flexdmd/assets/
holds the bitmap fonts UltraDMD asks for by resource name, the
FlexDMD.Resources. prefix being stripped before the lookup
@@ -122,7 +122,7 @@ notes: |
make/CMakeLists_app.txt:78-80), and assets/web/, vpx.html with its scripts
and style sheets, is served by the web server that only the iOS and Android
library build compiles (lib/src/WebServer.cpp:92-99,
make/CMakeLists_sources.txt:837-845, make/CMakeLists_app.txt:679).
make/CMakeLists_sources.txt:837-845, make/CMakeLists_app.txt:702).
PinMAME is where the emulation happens. Tables that recreate a real solid
state machine hand a ROM name to the controller, which resolves its root as
@@ -132,16 +132,16 @@ notes: |
registry folder settings on Windows
(plugins/pinmame/PinMAMEPlugin.cpp:216,274-294,437-509). libpinmame then hangs
roms, nvram, samples, cfg, hi, inp, memcard and sta off that root
(pinmame src/libpinmame/libpinmame.cpp:85-91,1141-1146) and reads alias.txt
(pinmame src/libpinmame/libpinmame.cpp:86-92,1151-1156) and reads alias.txt
from it, a list that renames a requested game before the driver lookup
(pinmame src/libpinmame/libpinmame.cpp:361-394,400-403). A memmaps folder,
(pinmame src/libpinmame/libpinmame.cpp:362-395,401-404). A memmaps folder,
beside roms/ in the table's pinmame folder, under the PinMAMEPath setting or
shipped in the plugin folder, is scanned for an index.json that maps the ROM
name to an NVRAM memory map, loaded with the platforms/<platform>.json it
names, and a gamedefs folder found the same way supplies
catalog/pinmame.json, which maps the driver to a game definition naming the
machine's inputs and outputs (plugins/pinmame/PinMAMEPlugin.cpp:445-472,
plugins/pinmame/Controller.cpp:184-284).
plugins/pinmame/Controller.cpp:188-288).
A ROM set is one zip per machine, and every ROM is looked up in the game's
zip first, then up its parent chain (pinmame src/common.c:1343-1348).
@@ -161,7 +161,7 @@ notes: |
(pinmame src/common.c:271), the two files that register that option live in
src/windows/config.c and src/unix/sound.c and neither is in the libpinmame
source list, and PinmameSetConfig zeroes the whole options struct
(pinmame src/libpinmame/libpinmame.cpp:1132). Independently, SAMPLESINTERFACE
(pinmame src/libpinmame/libpinmame.cpp:1142). Independently, SAMPLESINTERFACE
is defined in the PinMAME tree (pinmame src/wpc/wpcsam.h:23) and no driver
references it. history.dat and mameinfo.dat (pinmame src/datafile.c:619-623,
649-653) are read only by displayhistory, a page of the MAME on-screen menu
@@ -170,9 +170,9 @@ notes: |
fn_IsKeyPressed, the thirteenth member of PinmameConfig
(plugins/pinmame/PinMAMEPlugin.cpp:411-427, pinmame src/libpinmame/libpinmame.h:451-467),
so osd_is_key_pressed always answers 0
(pinmame src/libpinmame/libpinmame.cpp:576-582) and the menu cannot be opened.
(pinmame src/libpinmame/libpinmame.cpp:577-583) and the menu cannot be opened.
The pinmame observations were read at 5386aa17fbed2cf41470cea252c38ed77eac64e5,
The pinmame observations were read at 652249e2b98903b94cb8c200dd7024e4776fa0db,
the revision the build scripts fetch (platforms/config.sh:11), and the libdof
ones at 4908f45a5bd3b05369885b23f39465d589a32c1f (platforms/config.sh:17).
@@ -363,7 +363,7 @@ files:
category: game_data
required: false
description: "MAME high score memory map database, read once per machine start"
source_ref: "pinmame src/hiscore.c:18, 223-230, pinmame src/cpuexec.c:332-334, 393, 1782, src/core/player.cpp:435-437"
source_ref: "pinmame src/hiscore.c:18, 223-230, pinmame src/cpuexec.c:332-334, 393, 1782, src/core/player.cpp:438-440"
note: >-
hs_open is called unconditionally at the top of cpu_run for every PinMAME
machine, and the whole body sits behind `if (f)`, so an absent file is a
@@ -371,7 +371,7 @@ files:
the player sets to the table's own folder: libpinmame sets paths for eight
file types and FILETYPE_HIGHSCORE_DB is not among them, and the option
table that would supply a default is linked only by the Windows COM build
(pinmame src/libpinmame/libpinmame.cpp:85-91,1141-1146,
(pinmame src/libpinmame/libpinmame.cpp:86-92,1151-1156,
pinmame src/libpinmame/fileio.c:146, pinmame src/win32com/VPinMAMEConfig.cpp:127).
- name: cheat.dat
@@ -379,7 +379,7 @@ files:
category: game_data
required: false
description: "MAME cheat database, read when the PinMAME plugin's Cheat setting is on"
source_ref: "pinmame src/cheat.c:8434,8602-8614, pinmame src/mame.c:590-596, pinmame src/libpinmame/libpinmame.cpp:1205-1208, plugins/pinmame/PinMAMEPlugin.cpp:217,529, plugins/pinmame/Controller.cpp:163"
source_ref: "pinmame src/cheat.c:8434, 8602-8614, pinmame src/mame.c:590-596, pinmame src/libpinmame/libpinmame.cpp:1215-1218, plugins/pinmame/PinMAMEPlugin.cpp:217, 529, plugins/pinmame/Controller.cpp:167"
note: >-
Off by default: PinmameSetConfig zeroes options, and the plugin's Cheat
setting, false unless the user changes it, is handed to PinmameSetCheat
@@ -396,7 +396,7 @@ files:
sha1: "5bf46cfb6472b81f4aa7fb2c87bc79afc23109d7"
md5: "b98b60a050e3c2edfa7a59863c625c61"
description: "FABIAN full-sphere HRIR set, the HRTF of the binaural spatial audio renderer"
source_ref: "src/audio/SpatialAudio.cpp:49-56,344-361, make/CMakeLists_app.txt:633-637"
source_ref: "src/audio/SpatialAudio.cpp:49-56, 344-361, make/CMakeLists_app.txt:656-660"
note: >-
Read from assets/ under the installation folder when libspatialaudio is
built with libmysofa, which every build script does. The headphone and VR
@@ -427,7 +427,7 @@ files:
required: false
bundled: true
description: "NVRAM memory maps, index.json with the maps/ and platforms/ files it names"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:465-472, plugins/pinmame/Controller.cpp:184-242, make/CMakeLists_plugin_PinMAME.txt:115-122, platforms/config.sh:12, platforms/linux-x64/external.sh:252-254,558-559"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:465-472, plugins/pinmame/Controller.cpp:188-246, make/CMakeLists_plugin_PinMAME.txt:115-122, platforms/config.sh:12, platforms/linux-x64/external.sh:252-254, 558-559"
note: >-
From tomlogic/pinball-memory-maps at
68c1b3373ba74cd07f42fba9d56db63ea28212dc, which every platform script
@@ -443,7 +443,7 @@ files:
required: false
bundled: true
description: "PinMAME game definitions, catalog/pinmame.json, the machines/ files it names and the controllers/ files those reference"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:465-472, plugins/pinmame/Controller.cpp:244-284, make/CMakeLists_plugin_PinMAME.txt:115-122, platforms/config.sh:13, platforms/linux-x64/external.sh:256-258,560-561"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:465-472, plugins/pinmame/Controller.cpp:248-288, make/CMakeLists_plugin_PinMAME.txt:115-122, platforms/config.sh:13, platforms/linux-x64/external.sh:256-258, 560-561"
note: >-
From vpinball/pinmame-game-defs at
6eece7e53de9463bf783b9476ce3aeb98e2e7256, which every platform script
@@ -458,17 +458,17 @@ analysis:
Copied into the build output next to the executable and installed as one
unit by every distribution, so they arrive with the emulator rather than
being sourced separately.
source_ref: "make/CMakeLists_app.txt:633-637"
source_ref: "make/CMakeLists_app.txt:656-660"
entries:
- what: "scripts/, the .vbs library tables include"
source_ref: "src/core/FileLocator.cpp:400-433, src/core/ScriptGlobalTable.cpp:350-379, src/ui/win/codeview.cpp:2053-2061"
source_ref: "src/core/FileLocator.cpp:400-433, src/core/ScriptGlobalTable.cpp:354-383, src/ui/win/codeview.cpp:2053-2061"
- what: "assets/, textures, segment display maps, TableSizes.csv, the window icon, the fallback font, the editor icons"
source_ref: "src/renderer/Renderer.cpp:176-188,1503-1521, src/parts/bumper.cpp:150,162,174,188, src/parts/kicker.cpp:200-241, src/core/TableDB.cpp:16, src/renderer/Window.cpp:280, src/renderer/TextRenderer.cpp:184-185, plugins/pup/PUPManager.cpp:472-474, src/ui/live/editor/EditorChrome.cpp:200"
source_ref: "src/renderer/Renderer.cpp:178-190, src/renderer/Renderer.cpp:1640-1658, src/parts/bumper.cpp:150, 162, src/parts/bumper.cpp:171, src/parts/bumper.cpp:186, src/parts/kicker.cpp:200-241, src/core/TableDB.cpp:16, src/renderer/Window.cpp:280, src/renderer/TextRenderer.cpp:186-187, plugins/pup/PUPManager.cpp:483-485, src/ui/live/editor/EditorChrome.cpp:200"
- what: "assets/blankTable.vpx, exampleTable.vpx, lightSeqTable.vpx, strippedTable.vpx"
source_ref: "src/core/AppCommands.cpp:287-293, src/ui/live/EditorUI.cpp:339-358"
source_ref: "src/core/AppCommands.cpp:287-293, src/ui/live/EditorUI.cpp:340-359"
note: "The live editor's default table and its four New Table templates."
- what: "shaders-10.8.1/, .glfx and .fxh parsed at runtime by the OpenGL renderer"
source_ref: "src/core/FileLocator.cpp:223, src/renderer/Shader.cpp:1803-1804, src/renderer/Shader.cpp:2207-2210, make/CMakeLists_app.txt:639-649"
source_ref: "src/core/FileLocator.cpp:223, src/renderer/Shader.cpp:1806-1807, src/renderer/Shader.cpp:2210-2213, make/CMakeLists_app.txt:662-672"
- what: "plugins/<name>/plugin.cfg, the descriptor naming each plugin's library"
source_ref: "src/core/player.cpp:145, plugins/plugins/MsgPluginManager.cpp:425-436"
- what: "plugins/flexdmd/assets/, the bitmap fonts UltraDMD names as FlexDMD.Resources.*"
@@ -494,7 +494,7 @@ analysis:
note: "Copied into the build output but unreachable in the desktop standalone binary"
entries:
- what: "docs/Changelog.txt"
source_ref: "src/ui/win/dialogs/AboutDialog.cpp:34, src/core/stdafx.h:36-40, src/core/AppCommands.cpp:14-18, make/CMakeLists_app.txt:636"
source_ref: "src/ui/win/dialogs/AboutDialog.cpp:34, src/core/stdafx.h:36-40, src/core/AppCommands.cpp:14-18, make/CMakeLists_app.txt:659"
note: "The About dialog belongs to the Windows editor, compiled out of every standalone build."
- what: "assets/web/, vpx.html and the files it pulls"
source_ref: "lib/src/WebServer.cpp:92-99, make/CMakeLists_sources.txt:837-845"
@@ -504,7 +504,7 @@ analysis:
note: "Per table, keyed on the table folder or the ROM name"
entries:
- what: "PinMAME ROM sets, <pinmame root>/roms/<romname>.zip"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:437-509, pinmame src/libpinmame/libpinmame.cpp:86,1141-1143"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:437-509, pinmame src/libpinmame/libpinmame.cpp:87,1151-1153"
note: >-
One zip per machine. The root is the pinmame folder beside the table
when it holds roms/, else the PinMAMEPath setting, else $HOME/.pinmame
@@ -514,15 +514,15 @@ analysis:
rompath, nvram, samples, cfg and hiscore registry settings replace
the default subfolders.
- what: "PinMAME game aliases, <pinmame root>/alias.txt"
source_ref: "pinmame src/libpinmame/libpinmame.cpp:361-394,400-403"
source_ref: "pinmame src/libpinmame/libpinmame.cpp:362-395,401-404"
note: "Optional. Each line pairs a requested game name with the ROM set loaded in its place."
- what: "NVRAM memory maps, memmaps/index.json and the map files it names"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:448,459-460,468-469, plugins/pinmame/Controller.cpp:184-242"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:448, 459-460, 468-469, plugins/pinmame/Controller.cpp:188-246"
note: >-
Optional. index.json maps the ROM name to a map file, whose
_metadata.platform names the platforms/<platform>.json loaded with it.
- what: "game definitions, gamedefs/catalog/pinmame.json and the definition it names"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:449,461-462,470-471, plugins/pinmame/Controller.cpp:244-284"
source_ref: "plugins/pinmame/PinMAMEPlugin.cpp:449, 461-462, 470-471, plugins/pinmame/Controller.cpp:248-288"
note: "Optional. The catalog's drivers array maps the ROM name to a definition file under gamedefs/."
- what: "backglass, <table basename>.directb2s, else <table folder name>.directb2s"
source_ref: "plugins/b2s/B2SServer.cpp:317-323,446-463,487-491, plugins/b2s/B2SPlugin.cpp:76"
@@ -543,6 +543,9 @@ analysis:
- what: "PUP video packs, <table folder>/pupvideos/<rom>, else pupvideos/ under the PUPFolder setting"
source_ref: "plugins/pup/PUPManager.cpp:136-164, plugins/pup/PUPPlugin.cpp:66,298-309"
note: "A namespace folder may sit above the ROM folder."
- what: "PUP pack sounds, every .wav in PUPSOUNDS/ inside the PUP video pack"
source_ref: "plugins/pup/PUPSound.cpp:23-66, plugins/pup/PUPManager.cpp:179"
note: "The pack's PuPSound triggers play these by name. ballroll0.wav to ballroll9.wav loop as ball rolling sounds."
- what: "Nixie layouts, <table basename>.nix, else <table folder name>.nix, else the LayoutFolder setting"
source_ref: "plugins/nixie/NixiePlugin.cpp:23,60-113, plugins/nixie/Nixie.cpp:45-65,104-129"
note: >-
@@ -554,13 +557,13 @@ analysis:
source_ref: "plugins/dof/DOFPlugin.cpp:288-293, libdof src/DOF.cpp:36-45"
note: "The global configuration names the cabinet and table configuration files libdof reads next."
- what: "table music, music/ beside the table"
source_ref: "src/core/ScriptGlobalTable.cpp:120-134, src/core/FileLocator.cpp:267-398"
note: "In the legacy layout, music/ under the installation folder, then the table folder, then the preferences folder."
source_ref: "src/core/ScriptGlobalTable.cpp:120-138, src/core/FileLocator.cpp:267-398"
note: "An absolute path passed by the script is tried first. In the legacy layout, music/ under the installation folder, then the table folder, then the preferences folder."
- what: "textbox and decal fonts, <table folder>/<FontName>-<Style>.ttf"
source_ref: "src/renderer/TextRenderer.cpp:116-153, src/parts/textbox.cpp:602, src/parts/decal.cpp:135"
source_ref: "src/renderer/TextRenderer.cpp:116-155, src/parts/textbox.cpp:603, src/parts/decal.cpp:135"
note: "A font embedded in the table file is tried next."
- what: "table sidecars, the .vbs script override, the per-table .ini and the legacy .pov"
source_ref: "src/parts/pintable.cpp:1495-1511, src/parts/pintable.cpp:1058-1110, src/parts/pintable.h:599-613"
source_ref: "src/parts/pintable.cpp:1507-1523, src/parts/pintable.cpp:1070-1122, src/parts/pintable.h:600-614"
note: >-
The .vbs is searched like a script library under the table's name,
then beside the table under its folder's name. The .ini takes the
@@ -577,10 +580,10 @@ analysis:
Batocera seeds it from the assets/Default_VPinballX.ini its pinned tree
carries and rewrites it before every launch.
- what: "VPReg.ini, values saved by table scripts in the table's user folder, and vpinball.log in the preferences folder"
source_ref: "src/core/ScriptGlobalTable.cpp:525-558, src/utils/Logger.cpp:160-161"
source_ref: "src/core/ScriptGlobalTable.cpp:529-562, src/utils/Logger.cpp:160-161"
- what: "<table>.info, the frontend information file beside the table"
source_ref: "src/parts/pintable.cpp:1113-1124,1190-1215, src/parts/pintable.h:615-616, src/core/player.cpp:985,999"
source_ref: "src/parts/pintable.cpp:1125-1136, src/parts/pintable.cpp:1202-1227, src/parts/pintable.h:616-617, src/core/player.cpp:988, src/core/player.cpp:1002"
note: "Only its VPX section is written, with the run count, the last run date and the play time."
- what: "PinMAME state: nvram/, cfg/, hi/, inp/, memcard/ and sta/"
source_ref: "pinmame src/libpinmame/libpinmame.cpp:87,89-90,1144-1146"
source_ref: "pinmame src/libpinmame/libpinmame.cpp:88,90-91,1154-1156"
note: "Written by PinMAME as the machine runs."