mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-24 12:49:03 -05:00
emulator: carried the file stem on 67 profiles, so site links read like ids. Each now takes the project's own name (libretro .info corename, README title, window title or site title). tests/test_profile_names.py allows the stem only on a commented list: lowercase project names, test cores, aliases and the template.
590 lines
33 KiB
YAML
590 lines
33 KiB
YAML
emulator: "Visual Pinball X"
|
|
type: standalone
|
|
core_classification: game_engine
|
|
source: "https://github.com/vpinball/vpinball"
|
|
upstream: "https://github.com/vpinball/vpinball"
|
|
profiled_date: "2026-10-23"
|
|
source_commit: "f912c04bcf727a341524f251b600c6bba8f883d8"
|
|
core_version: "10.8.1"
|
|
display_name: "Visual Pinball X"
|
|
cores:
|
|
- vpinball
|
|
- visual-pinball
|
|
systems:
|
|
- vpinball
|
|
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: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: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: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
|
|
(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 `<binary> -play <rom>`, Batocera builds the standalone tree at
|
|
3ec37c7f9a into /usr/bin/vpinball and runs `VPinballX_GL -PrefPath <dir> -Ini
|
|
<dir>/VPinballX.ini -Play <rom>`, RetroBat drives the Windows build with its
|
|
registered VPinMAME COM server.
|
|
|
|
File location sits in one class. FileLocator holds m_appPath, the
|
|
read-only installation folder, and m_prefPath, the preferences folder that
|
|
-PrefPath overrides, and it works in one of two layout modes: AppPrefData
|
|
splits static data, settings and table files across the three, AppOnly keeps
|
|
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,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
|
|
redirects the PinMAME root from $HOME/.pinmame to <prefpath>/pinmame.
|
|
|
|
Table scripts pull their libraries through SearchScript, which walks ten
|
|
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:400-433,
|
|
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: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,
|
|
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: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
|
|
Cache/<table name> 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: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: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-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: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: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
|
|
(plugins/flexdmd/UltraDMD.cpp:20-24,32-34,
|
|
plugins/flexdmd/resources/AssetManager.cpp:103-109,260-280),
|
|
plugins/nixie/layouts/ the default .nix layouts and the glass textures they
|
|
name (plugins/nixie/NixiePlugin.cpp:96-110, plugins/nixie/Nixie.cpp:45-65,104-129),
|
|
plugins/inspector/assets/ the pages of the inspector's web server
|
|
(plugins/inspector/InspectorPlugin.cpp:618-626), and plugins/pinmame/ the
|
|
memmaps/ and gamedefs/ trees the platform scripts fetch from
|
|
tomlogic/pinball-memory-maps at 68c1b33 and vpinball/pinmame-game-defs at
|
|
6eece7e (make/CMakeLists_plugin_PinMAME.txt:115-122, platforms/config.sh:12-13,
|
|
platforms/linux-x64/external.sh:252-258,558-561).
|
|
|
|
Two parts of that tree ship without a reader on the desktop targets.
|
|
docs/Changelog.txt is read by the About dialog
|
|
(src/ui/win/dialogs/AboutDialog.cpp:34), which only the Windows editor
|
|
build reaches, the editor being compiled out of every __STANDALONE__ build
|
|
(src/core/stdafx.h:36-40, src/core/AppCommands.cpp:14-18,
|
|
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: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
|
|
the pinmame folder beside the table when that folder holds roms/, else the
|
|
PinMAMEPath setting, else $HOME/.pinmame on Linux and macOS, <prefpath>/pinmame
|
|
on iOS and Android, and the registered Visual PinMAME install folder with its
|
|
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: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: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: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).
|
|
PinMAME carries neither GAME_IS_BIOS_ROOT nor ROM_SYSTEM_BIOS. What it has
|
|
are nine container sets flagged NOT_A_DRIVER, gts1, gts1s, gts80, gts80s,
|
|
gts80a, gts80as, allied, gp_110 and recel, each the parent of its family's
|
|
games and holding the family's system ROMs. A game declares its system ROMs
|
|
in its own set as well, so they are read from the game zip when it carries
|
|
them and from the container zip otherwise. The Allied Leisure and Game Plan
|
|
110 games declare nothing else. The nine are listed below.
|
|
|
|
Two shared data files sit outside that ROM content and are listed below as
|
|
well. Two more that the MAME lineage would suggest are unreachable here. The
|
|
mechanical sample set named by pinmame_sample_names, "*pinmame" followed by
|
|
eighteen .wav members (pinmame src/wpc/wpcsam.c:31-57), is dead twice over:
|
|
readsamples returns before opening anything unless options.use_samples is set
|
|
(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: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
|
|
(pinmame src/usrintrf.c:2846-2851), and by the listing path in
|
|
pinmame src/info.c:820 which libpinmame never calls. VPX passes NULL for
|
|
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:577-583) and the menu cannot be opened.
|
|
|
|
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).
|
|
|
|
files:
|
|
|
|
- name: gts1.zip
|
|
path: "pinmame/roms/gts1.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 1 system ROMs"
|
|
source_ref: "pinmame src/wpc/gts1games.c:15-22,33-34, pinmame src/wpc/gts1.h:229-233, pinmame src/common.c:1343-1348, pinmame src/fileio.c:953-966"
|
|
note: >-
|
|
Container set, parent of every System 1 game. The path is the layout
|
|
beside a table, and roms/ sits the same way under the PinMAMEPath setting or
|
|
$HOME/.pinmame. Each game declares the same two ROMs and reads them from
|
|
its own zip first, so this archive is only reached when the game zip
|
|
lacks them. A member is matched by name, then by checksum.
|
|
contents:
|
|
- name: A1752CF.bin
|
|
size: 2048
|
|
crc32: "614a3bd9"
|
|
sha1: "febca18fb6f96037ca82e515dd161dfcb0e4c776"
|
|
- name: A1753CE.bin
|
|
size: 2048
|
|
crc32: "4cd312dd"
|
|
sha1: "31245daa9972ef8652caee69986585bb8239e86e"
|
|
|
|
- name: gts1s.zip
|
|
path: "pinmame/roms/gts1s.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 1 with sound board, system ROMs"
|
|
source_ref: "pinmame src/wpc/gts1games.c:24-31,36-37, pinmame src/wpc/gts1.h:229-233"
|
|
note: "Container set, clone of gts1 with the same two ROMs, so gts1.zip answers for it."
|
|
contents:
|
|
- name: A1752CF.bin
|
|
size: 2048
|
|
crc32: "614a3bd9"
|
|
sha1: "febca18fb6f96037ca82e515dd161dfcb0e4c776"
|
|
- name: A1753CE.bin
|
|
size: 2048
|
|
crc32: "4cd312dd"
|
|
sha1: "31245daa9972ef8652caee69986585bb8239e86e"
|
|
|
|
- name: gts80.zip
|
|
path: "pinmame/roms/gts80.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 80 with speech board, system ROMs"
|
|
source_ref: "pinmame src/wpc/gts80games.c:48-60,62-74,90-91"
|
|
note: >-
|
|
Container set, parent of the System 80 games, which declare the same two
|
|
ROMs themselves. The 7-digit conversions declare u2g807dc.bin and
|
|
u3g807dc.bin in their place, which this set does not hold.
|
|
contents:
|
|
- name: u2_80.bin
|
|
size: 4096
|
|
crc32: "4f0bc7b1"
|
|
sha1: "612cbacdca5cfa6ad23940796df3b7c385be79fe"
|
|
- name: u3_80.bin
|
|
size: 4096
|
|
crc32: "1e69f9d0"
|
|
sha1: "ad738cac2555830257b531e5e533b15362f624b9"
|
|
|
|
- name: gts80s.zip
|
|
path: "pinmame/roms/gts80s.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 80, system ROMs"
|
|
source_ref: "pinmame src/wpc/gts80games.c:48-60,92-93"
|
|
note: "Container set, clone of gts80 with the same two ROMs, so gts80.zip answers for it."
|
|
contents:
|
|
- name: u2_80.bin
|
|
size: 4096
|
|
crc32: "4f0bc7b1"
|
|
sha1: "612cbacdca5cfa6ad23940796df3b7c385be79fe"
|
|
- name: u3_80.bin
|
|
size: 4096
|
|
crc32: "1e69f9d0"
|
|
sha1: "ad738cac2555830257b531e5e533b15362f624b9"
|
|
|
|
- name: gts80a.zip
|
|
path: "pinmame/roms/gts80a.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 80A with speech board, system ROMs"
|
|
source_ref: "pinmame src/wpc/gts80games.c:76-88,95-96"
|
|
note: "Container set, parent of the System 80A games, which declare the same two ROMs themselves."
|
|
contents:
|
|
- name: u2_80a.bin
|
|
size: 4096
|
|
crc32: "241de1d4"
|
|
sha1: "9d5942704cbdec6565d6335e33e9f7e4c60a41ac"
|
|
- name: u3_80a.bin
|
|
size: 4096
|
|
crc32: "2d77ccdc"
|
|
sha1: "47241ccd365e8d74d5aa5b775acf6445cc95b8a8"
|
|
|
|
- name: gts80as.zip
|
|
path: "pinmame/roms/gts80as.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Gottlieb System 80A, system ROMs"
|
|
source_ref: "pinmame src/wpc/gts80games.c:76-88,97-98"
|
|
note: "Container set, clone of gts80a with the same two ROMs, so gts80a.zip answers for it."
|
|
contents:
|
|
- name: u2_80a.bin
|
|
size: 4096
|
|
crc32: "241de1d4"
|
|
sha1: "9d5942704cbdec6565d6335e33e9f7e4c60a41ac"
|
|
- name: u3_80a.bin
|
|
size: 4096
|
|
crc32: "2d77ccdc"
|
|
sha1: "47241ccd365e8d74d5aa5b775acf6445cc95b8a8"
|
|
|
|
- name: allied.zip
|
|
path: "pinmame/roms/allied.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Allied Leisure system ROMs"
|
|
source_ref: "pinmame src/wpc/allied.c:872-879"
|
|
note: >-
|
|
Container set, parent of the Allied Leisure games. Those games declare
|
|
these three ROMs and no other, so each one runs from its own zip or from
|
|
this one.
|
|
contents:
|
|
- name: alliedu5.bin
|
|
size: 1024
|
|
crc32: "e4fb64fb"
|
|
sha1: "a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20"
|
|
- name: alliedu6.bin
|
|
size: 1024
|
|
crc32: "dca980dd"
|
|
sha1: "3817d75413854d889fc1ce4fd6a51d820d1e0534"
|
|
- name: alliedu3.bin
|
|
size: 1024
|
|
crc32: "13f42789"
|
|
sha1: "baa0f73fda08a3c5d6f1423fb329e4febb07ef97"
|
|
|
|
- name: gp_110.zip
|
|
path: "pinmame/roms/gp_110.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Game Plan Model 110 system ROMs"
|
|
source_ref: "pinmame src/wpc/gpgames.c:68-74, pinmame src/wpc/gp.h:201-205"
|
|
note: >-
|
|
Container set, parent of the Game Plan cocktail games. Those games declare
|
|
these two ROMs and no other, so each one runs from its own zip or from
|
|
this one.
|
|
contents:
|
|
- name: a-110.u12
|
|
size: 2048
|
|
crc32: "ed0d518b"
|
|
sha1: "8f3ca8792ad907c660d9149a1aa3a3528c7573e3"
|
|
- name: b1-110.u13
|
|
size: 2048
|
|
crc32: "a223f2e8"
|
|
sha1: "767e15e19e11399935c890c1d1034dccf1ad7f92"
|
|
|
|
- name: recel.zip
|
|
path: "pinmame/roms/recel.zip"
|
|
system: vpinball
|
|
category: bios_zip
|
|
required: false
|
|
description: "Recel System III shared program"
|
|
source_ref: "pinmame src/wpc/recelgames.c:72-75, pinmame src/wpc/recel.h:120-131"
|
|
note: "Container set, parent of the Recel games, which declare the same two ROMs beside their own game PROM."
|
|
contents:
|
|
- name: a2361.b1
|
|
size: 2048
|
|
crc32: "d0c4695d"
|
|
sha1: "4846adb3f6c292626840ba5255ffc5e788a69301"
|
|
- name: a2362.b2
|
|
size: 2048
|
|
crc32: "39a70611"
|
|
sha1: "8545e168a5f256150bcff12d1e6d8efffd08c3cd"
|
|
|
|
- name: hiscore.dat
|
|
system: vpinball
|
|
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: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
|
|
no-op. It resolves to a bare filename against the working directory, which
|
|
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:86-92,1151-1156,
|
|
pinmame src/libpinmame/fileio.c:146, pinmame src/win32com/VPinMAMEConfig.cpp:127).
|
|
|
|
- name: cheat.dat
|
|
system: vpinball
|
|
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: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
|
|
before each run. With it on, InitCheat loads the database and an
|
|
absent file leaves the menu showing "cheat database not found"
|
|
(pinmame src/cheat.c:2463). Same bare-filename resolution as hiscore.dat.
|
|
|
|
- name: fabian-hrir.sofa
|
|
path: "assets/fabian-hrir.sofa"
|
|
system: vpinball
|
|
required: false
|
|
bundled: true
|
|
size: 1766147
|
|
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: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
|
|
binauralizer then runs second order ambisonics on it. A missing or
|
|
unreadable file logs "Failed to load the binaural HRTF" and audio falls
|
|
back to loudspeaker decoding. The file sits in src/assets, which the build
|
|
copies beside the binary.
|
|
|
|
- name: "plugins/nixie/layouts/"
|
|
type: directory
|
|
path: "plugins/nixie/layouts/"
|
|
system: vpinball
|
|
required: false
|
|
bundled: true
|
|
description: "Nixie default score display layouts, twelve .nix files and the four glass textures they name"
|
|
source_ref: "plugins/nixie/NixiePlugin.cpp:96-110, plugins/nixie/Nixie.cpp:45-65,104-129, make/CMakeLists_plugin_Nixie.txt:92-95"
|
|
note: >-
|
|
Copied from plugins/nixie/layouts in vpinball at e4a79a5. It is the last
|
|
source each Nixie window falls back to, after the table's own .nix and
|
|
the LayoutFolder setting. Every .nix file in the folder is parsed, and
|
|
glass images are read relative to the layout that names them. Without
|
|
the folder the windows get no default layout.
|
|
|
|
- name: "plugins/pinmame/memmaps/"
|
|
type: directory
|
|
path: "plugins/pinmame/memmaps/"
|
|
system: vpinball
|
|
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: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
|
|
fetches and copies as index.json, maps/ and platforms/. The plugin falls
|
|
back to this folder when neither the table's pinmame folder nor the
|
|
PinMAMEPath setting holds a memmaps folder. Without one no memory map is
|
|
loaded and the machine still runs.
|
|
|
|
- name: "plugins/pinmame/gamedefs/"
|
|
type: directory
|
|
path: "plugins/pinmame/gamedefs/"
|
|
system: vpinball
|
|
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: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
|
|
fetches and copies as catalog/, machines/ and controllers/. The plugin
|
|
falls back to this folder the same way as memmaps. Without
|
|
catalog/pinmame.json PinMAME receives an empty game definition and the
|
|
machine still runs.
|
|
|
|
analysis:
|
|
shipped_with_the_binary:
|
|
note: >-
|
|
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:656-660"
|
|
entries:
|
|
- what: "scripts/, the .vbs library tables include"
|
|
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: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: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: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.*"
|
|
source_ref: "plugins/flexdmd/UltraDMD.cpp:20-24,32-34, plugins/flexdmd/resources/AssetManager.cpp:103-109,260-280, make/CMakeLists_plugin_FlexDMD.txt:179-182"
|
|
- what: "plugins/nixie/layouts/, the default .nix score display layouts and their glass textures"
|
|
source_ref: "plugins/nixie/NixiePlugin.cpp:96-110, plugins/nixie/Nixie.cpp:45-65,104-129, make/CMakeLists_plugin_Nixie.txt:92-95"
|
|
note: >-
|
|
The last source each of the backglass, score view and topper windows
|
|
falls back to. Every .nix file in the folder is parsed, and a file is
|
|
kept only when it parses completely.
|
|
- what: "plugins/inspector/assets/, the inspector web pages"
|
|
source_ref: "plugins/inspector/InspectorPlugin.cpp:618-626, make/CMakeLists_plugin_Inspector.txt:96"
|
|
- what: "plugins/pinmame/memmaps/ and plugins/pinmame/gamedefs/, the NVRAM memory maps and game definitions"
|
|
source_ref: "make/CMakeLists_plugin_PinMAME.txt:115-122, plugins/pinmame/PinMAMEPlugin.cpp:465-472, platforms/config.sh:12-13, platforms/linux-x64/external.sh:252-258,558-561"
|
|
note: >-
|
|
Copied only when the platform script has fetched them into
|
|
third-party/: index.json, maps/ and platforms/ from
|
|
tomlogic/pinball-memory-maps, catalog/, machines/ and controllers/
|
|
from vpinball/pinmame-game-defs. A table's own pinmame folder or the
|
|
PinMAMEPath setting takes precedence.
|
|
|
|
shipped_without_a_reader:
|
|
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: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"
|
|
note: "The web server is compiled into the iOS and Android library build only."
|
|
|
|
user_supplied_paths:
|
|
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: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
|
|
on Linux and macOS and <prefpath>/pinmame on iOS and Android.
|
|
Batocera patches the Linux fallback to <prefpath>/pinmame. On Windows
|
|
the last resort is the registered Visual PinMAME install folder, whose
|
|
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: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: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: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"
|
|
note: >-
|
|
Looked up in the table folder, or in the WorkingDir a table script
|
|
sets. Edits made in the plugin's backglass editor are written back to
|
|
the file through a temporary file renamed over it
|
|
(plugins/b2s/B2SServer.cpp:107-109).
|
|
- what: "Serum colorizations, <table folder>/serum/<rom>/<rom>.cROMc or .cRZ, else the SerumPath setting"
|
|
source_ref: "plugins/serum/serum.cpp:51,727-771"
|
|
note: "A namespace folder may sit above the ROM folder, and PinMAME games are also looked up in <table folder>/pinmame/altcolor."
|
|
- what: "VNI colorizations, <table folder>/vni/<rom>/<rom>.pal with an optional .vni, else the VniPath setting"
|
|
source_ref: "plugins/vni/vni.cpp:39,326-376"
|
|
note: "pin2dmd.pal and pin2dmd.vni are accepted in the same folder, and PinMAME games are also looked up in <table folder>/pinmame/altcolor."
|
|
- what: "alternative sound packages, <table folder>/altsound/<rom>, else <table folder>/pinmame/altsound/<rom>, else the plugin's Folder setting"
|
|
source_ref: "plugins/altsound/AltSoundPlugin.cpp:28,114-151"
|
|
note: "The library appends altsound/<rom> to the parent of the folder found, so that folder must be named altsound with this exact case."
|
|
- 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: >-
|
|
The setting names one .nix file or a folder of them. Each window walks
|
|
the chain on its own and stops at the first source with a layout
|
|
targeting it. Glass and picture images are read relative to the
|
|
layout file.
|
|
- what: "DOF configuration, <prefpath>/directoutputconfig/GlobalConfig_B2SServer.xml, else ./directoutputconfig/ under the working directory"
|
|
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-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-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: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
|
|
table's name, then its folder's name, a settings profile variant of
|
|
each being tried first. The .pov is imported only when no .ini
|
|
exists, else autopov.pov when present.
|
|
|
|
generated_files:
|
|
- what: "VPinballX.ini, the settings file"
|
|
source_ref: "src/core/VPApp.cpp:293-307, src/core/AppCommands.cpp:543-549"
|
|
note: >-
|
|
Looked up in the preferences folder, then beside the binary. When
|
|
neither holds one the preferences path is kept. -Ini names another file.
|
|
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:529-562, src/utils/Logger.cpp:160-161"
|
|
- what: "<table>.info, the frontend information file beside the table"
|
|
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:88,90-91,1154-1156"
|
|
note: "Written by PinMAME as the machine runs."
|