Files
libretro/emulators/future-pinball-fploader.yml
T
Abdessamad Derraz cb24094078 chore: four refs onto lines that carry the claim
fluid.soundfont, the fake SDL switch, the mt32.romdir assignment: each
was cited a few lines past itself. future-pinball-fploader's PuPVideo
part carried no artefact, so it read as a path.
2026-09-05 09:24:35 +02:00

888 lines
31 KiB
YAML

emulator: future-pinball-fploader
type: standalone
core_classification: enhanced_fork
source: "https://github.com/ravarcade/BAM_FPloader"
upstream: "https://www.ravarcade.pl/"
profiled_date: "2026-08-11"
source_commit: "e13007994011ae57dd9d9f48674c1f774183914b"
core_version: "1.5-408"
display_name: "Future Pinball (BAM)"
cores:
- future-pinball-fploader
- bam
systems:
- fpinball
mode: standalone
notes: |
BAM, Better Arcade Mode, by Rafal Janicki. FPLoader.exe starts
Future Pinball.exe suspended, writes the BAM.dll path into the new process
with VirtualAllocEx and WriteProcessMemory, runs LoadLibraryA on it through
CreateRemoteThread, waits for that thread and resumes the main one. Everything
else lives in BAM.dll, which detours the running program. The loader is
published as source; the shipped FPLoader.exe carries the same .text and
.rdata as the build committed to that repository and differs only by an
Authenticode blob, 9472 bytes against 5384.
ref: BAM_FPloader FPLoader.cpp:259-305, FPLoader.exe .text sha1
d5ca74154fe97002, PE timestamp 2016-04-25 19:17:12
BAM.dll is searched in the loader's own directory first, then in
C:\Games\Future Pinball\BAM\. Both missing puts up "Couldn't locate BAM.dll."
and returns -1. Future Pinball.exe comes from /FPEXE if that switch names an
existing file, otherwise from one level above the loader, then from the
loader's directory, then from C:\Games\Future Pinball\; the same failure path
reports "Couldn't locate Future Pinball.exe.". Before the process is created
the loader prepends its own directory to %PATH% so the system resolves
renderingengine.dll from there while the working directory is the game
directory. /STAYINRAM keeps the loader alive until the game thread ends; the
rest of the command line is handed to Future Pinball untouched, which is how
/Open, /Play, /Exit and /ArcadeRender reach it.
ref: BAM_FPloader FPLoader.cpp:40-48, 87-111, 166-240, 249-257
BAM.dll is closed source. Its version resource reads 1.5.408 and its debug
tags name BAM.cpp, dllmain.cpp, BallManager.cpp, RenderEngine.cpp,
plugin.cpp, pbo.cpp, stereo3d.cpp and debug.cpp. Twenty five entry points are
detoured in one pass: CreateFileA, CreateFileW, ReadFile, WriteFile,
CloseHandle, GetFileSize, DeleteFileA, FindResourceA, LoadResource,
LockResource, SizeofResource, CoCreateInstance, StgOpenStorage,
GetOpenFileNameA, ChooseColorA, GetDlgItem, SendMessageA, ShowWindow,
SwapBuffers, ChoosePixelFormat, SetPixelFormat, wglCreateContext,
wglDeleteContext, wglMakeCurrent and wglGetProcAddress, with glFrustum,
glTexImage2D and wglChoosePixelFormatARB taken separately. That is how BAM
sees the program's own resource and file traffic and can answer it. Newton is
reached through GetModuleHandleA on the copy Future Pinball already imported
followed by GetProcAddress on 83 entry points; no second copy is loaded.
ref: BAM.dll 1.5-408 .text:0x10082a75-0x10082f3d, 0x100831b3-0x100831d9,
0x1002ab92-0x1002abeb, .rsrc version, debug tags Routed_glTexImage2D and
Routed_wglChoosePixelFormatARB
Every path BAM builds hangs off the directory holding BAM.dll. The module
handle saved at load time goes through GetModuleFileNameA, the result is cut
at the last separator, and one of two format strings finishes the job:
"%s\%s.%s" for a name and an extension, "%s\%s" for the cfg subdirectory.
Settings for a table are cfg\<table>.cfg and cfg\<table>.seq, with default.cfg
and default.seq as the fallbacks.
ref: BAM.dll 1.5-408 .text:0x10025e40-0x1002605a, 0x100319a0-0x10031d48,
0x10032bdb-0x10032f23
Keys are the one text file. bam.cfg is read with fopen_s and parsed as
"%s = %s" lines over the names Menu, Menu2, Left, Right, Up, Down, Enter,
Snapshot, 3DSwitch, SaveXML, SnapShotPath, SnapShotBackboxPath, HeadTracking,
ForceArcadeMode, SwitchToNextBall, SwitchToPrevBall, RoomOnOff, Cam, Overlay,
BallShadows and OverlayAspectFix. A Keyboard.cfg found beside it is renamed to
bam.cfg first. RetroBat rewrites the two SnapShotPath lines before launching.
ref: BAM.dll 1.5-408 .text:0x100c3960-0x100c3a97, .rdata:0x10654208-0x10654324,
retrobat emulatorLauncher/Generators/Fpinball.Generator.cs:183-209
A ball or a room is a zip of BMP/<id>.bmp entries named for the resource ids
Future Pinball itself uses: the program carries 29 resources of type BMP and
every id the shipped packs contain is one of them, 452 being the ball.
balls\*.zip is walked with FindFirstFileA and each hit becomes a choice in the
menu; default.zip in the BAM directory is applied without being chosen. The
routed FindResourceA answers the nine SHADERS resources the same way, while
the single XML resource, id 464, is read straight from the program by the save
path and is what the presets under XML\ are edited copies of. The 83 GLSL
programs BAM renders with are
resources of type TEXT inside BAM.dll, so no shader file is read from disk.
ref: BAM.dll 1.5-408 .text:0x1002d4f3-0x1002d52d, 0x100ae8ec-0x100ae990,
0x10037130-0x100371de, 0x1007e83b-0x1007e896, .rsrc TEXT,
Future Pinball.exe 1.9.1.20101231 .rsrc BMP, SHADERS, XML
Plugins are loaded by changing the working directory to plugins\, walking
*.dll with FindFirstFileA, calling LoadLibraryA on each and binding
BAM_PluginStart and BAM_PluginStop. A plugin keeps its settings by writing a
raw structure to <its own name>.cfg in that working directory, which is why
the cfg files beside the plugins carry no text.
ref: BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c,
BAM_Plugins Common/BAM.h:116-157
renderingengine.dll is bound in BAM.dll's import directory through
FindProgram, SetModuleWithResources, LoadFileToMemory and SaveFileFromMemory,
so the loader resolves it before any BAM code runs. It carries Assimp, zlib,
libpng and libjpeg, reads the zip packs and writes the per table shadow cache
under Cache\.
ref: BAM.dll 1.5-408 import directory, .text:0x10105c18-0x1010697f
ES-DE declares the emulator as FUTURE-PINBALL-FPLOADER for Windows only,
finding FPLoader.exe under BAM\, BAM-OpenVR\ or BAM-OpenVR-OC\, and invokes it
with /Exit /Play /Open in the background. RetroBat reaches the same binary
under the emulator or core key bam, through the generator it shares with
Future Pinball. Two distributions are served: bam-setup.exe carries the
loader, the mod, the renderer, the tools, the plugins, the ball packs and the
physics presets, while BAM-OpenVR.zip carries the OpenVR plugin and the
settings files the other package leaves for the first save to create.
ref: es-de resources/systems/windows/es_find_rules.xml:448-461,
es-de resources/systems/windows/es_systems.xml:764,
retrobat emulatorLauncher/Generators/Fpinball.Generator.cs:131-135
files:
# -- The chain FPLoader needs before it can inject anything --
- name: BAM.dll
system: fpinball
required: true
bundled: true
size: 8266240
description: "The mod, injected into Future Pinball and holding every feature"
source_ref: "BAM_FPloader FPLoader.cpp:45, 166-182"
note: >-
Taken from the loader's directory, else from C:\Games\Future Pinball\BAM\.
Neither present ends the loader with a message box.
- name: renderingengine.dll
system: fpinball
required: true
bundled: true
size: 8791552
description: "Rendering engine and asset loader behind BAM"
source_ref: "BAM.dll 1.5-408 import directory, BAM_FPloader FPLoader.cpp:249-257"
note: >-
Bound statically by BAM.dll, so the injected LoadLibraryA fails without
it. The loader adds its own directory to %PATH% for this file alone.
- name: Future Pinball.exe
system: fpinball
required: true
size: 28547584
description: "The program BAM starts and modifies"
source_ref: "BAM_FPloader FPLoader.cpp:41, 46, 184-240"
note: >-
Probed with GetFileAttributesA at four locations, /FPEXE first. Absent,
the loader stops before creating any process. The size is that of
release 1.9.1.20101231.
# -- Tools shipped beside the loader --
- name: BAM-Tracker.exe
system: fpinball
required: false
bundled: true
size: 207104
description: "Head tracking calibration host"
source_ref: "BAM-Tracker.exe import directory, BAM.dll 1.5-408 .text:0x1008320e"
note: >-
Imports BAM.dll and runs it outside the game. BAM.dll lowercases the host
command line and looks for this name to know it is hosted by the tracker
rather than by Future Pinball.
- name: ModelImporter.exe
system: fpinball
required: false
bundled: true
size: 4553472
description: "Converts models to the .fpm form tables import"
source_ref: "ModelImporter.exe import directory, .rdata dialog filter"
note: >-
Bound to renderingengine.dll for the Assimp side. Its open dialog accepts
.fpm, .obj, .ms3d, .md5mesh and .fbx.
# -- Settings read from the BAM directory. BAM writes each of them, so a fresh
# install has only default.seq and the first save creates the rest.
- name: bam.cfg
system: fpinball
aliases:
- Keyboard.cfg
required: false
size: 316
description: "Key bindings and screenshot paths, the one text config"
source_ref: "BAM.dll 1.5-408 .text:0x100c3960-0x100c3a97"
note: >-
Keyboard.cfg is the older name and is renamed on sight. 9999 in a key
slot leaves the function unbound.
- name: default.cfg
system: fpinball
required: false
size: 3072
description: "Global camera, lighting, physics and rendering settings"
source_ref: "BAM.dll 1.5-408 .text:0x100326ba-0x100371bc"
note: >-
A binary block of the same shape as a per table cfg. Saving it reports
"default.cfg saved".
- name: default.seq
system: fpinball
required: false
bundled: true
size: 1284
category: game_data
description: "Camera animation sequences used when a table brings none"
source_ref: "BAM.dll 1.5-408 .text:0x10025e40-0x1002608f"
note: >-
Read as text. Every line is a comment to Future Pinball's own parser and
carries a position, a scale, two angles and a duration.
- name: default.xml
system: fpinball
required: false
description: "Physics values applied when a table specifies none"
source_ref: "BAM.dll 1.5-408 .text:0x100ae843-0x100ae8a7, 0x10037130-0x100371de"
note: >-
Same document shape as the presets under XML\. The save path produces one
by extracting resource 464 of type XML from Future Pinball, 6264 bytes, so
no copy ships.
- name: default.zip
system: fpinball
required: false
category: game_data
description: "Texture pack applied to every table"
source_ref: "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990"
note: >-
Holds BMP/<id>.bmp entries keyed by Future Pinball resource id, the form
the ball packs and the Zendonius packs use.
- name: XML_Presets.txt
system: fpinball
required: false
description: "List of physics documents offered in the presets menu"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbd8a"
note: >-
Read whole and split on "%d: %s" lines. The menu entry Add current XML
appends to it, which is how the files under XML\ become reachable.
- name: Reality.dat
system: fpinball
required: false
size: 920
description: "Physical measurements of the cabinet and the screen"
source_ref: "BAM.dll 1.5-408 .text:0x10031bbb, 0x10031ebe"
note: >-
Read at startup and rewritten from the Reality submenu. Head tracking and
stereo geometry are computed from it.
- name: WiiMoteCams.dat
system: fpinball
required: false
size: 16
description: "WiiMote identifiers kept for the WiiMote camera mode"
source_ref: "BAM.dll 1.5-408 .text:0x10031d22, 0x10032f9f"
- name: CalibrationBoardData.cfg
system: fpinball
required: false
size: 272
description: "Dimensions of the printed board used to calibrate cameras"
source_ref: "BAM.dll 1.5-408 .text:0x10031ad8, 0x10032d4b"
- name: stereoCalibrationData.cfg
system: fpinball
required: false
size: 1160
description: "Result of the two camera calibration pass"
source_ref: "BAM.dll 1.5-408 .text:0x10031c75, 0x10032de3"
# -- Ball and room packs, walked as balls\*.zip --
- name: axis.zip
system: fpinball
path: "Balls/axis.zip"
required: false
bundled: true
category: game_data
size: 480842
description: "Ball texture showing the rotation axes"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Baseball.zip
system: fpinball
path: "Balls/Baseball.zip"
required: false
bundled: true
category: game_data
size: 248548
description: "Baseball ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Basketball 1.zip
system: fpinball
path: "Balls/Basketball 1.zip"
required: false
bundled: true
category: game_data
size: 148883
description: "Basketball ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Basketball 2.zip
system: fpinball
path: "Balls/Basketball 2.zip"
required: false
bundled: true
category: game_data
size: 74296
description: "Second basketball ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Cue Black.zip
system: fpinball
path: "Balls/Cue Black.zip"
required: false
bundled: true
category: game_data
size: 548084
description: "Black cue ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Cue White.zip
system: fpinball
path: "Balls/Cue White.zip"
required: false
bundled: true
category: game_data
size: 554040
description: "White cue ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: earth.zip
system: fpinball
path: "Balls/earth.zip"
required: false
bundled: true
category: game_data
size: 728508
description: "Globe ball texture, three BMP resources"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: EYETOY.zip
system: fpinball
path: "Balls/EYETOY.zip"
required: false
bundled: true
category: game_data
size: 373860
description: "EyeToy ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Fireball.zip
system: fpinball
path: "Balls/Fireball.zip"
required: false
bundled: true
category: game_data
size: 240337
description: "Fireball ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Knight.zip
system: fpinball
path: "Balls/Knight.zip"
required: false
bundled: true
category: game_data
size: 421287
description: "Knight ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: latlong.zip
system: fpinball
path: "Balls/latlong.zip"
required: false
bundled: true
category: game_data
size: 1066167
description: "Latitude and longitude grid ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
- name: Soccer Ball 1.zip
system: fpinball
path: "Balls/Soccer Ball 1.zip"
required: false
bundled: true
category: game_data
size: 54397
description: "Soccer ball texture"
source_ref: "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d"
# -- Physics documents, reached through XML_Presets.txt --
- name: fp-p1.0.xml
system: fpinball
path: "XML/fp-p1.0.xml"
required: false
bundled: true
category: game_data
size: 6290
description: "Physics 1.0 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.0.xml
system: fpinball
path: "XML/fp-p2.0.xml"
required: false
bundled: true
category: game_data
size: 6267
description: "Physics 2.0 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.1.xml
system: fpinball
path: "XML/fp-p2.1.xml"
required: false
bundled: true
category: game_data
size: 6267
description: "Physics 2.1 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.2.xml
system: fpinball
path: "XML/fp-p2.2.xml"
required: false
bundled: true
category: game_data
size: 6267
description: "Physics 2.2 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.3 Version 1.xml
system: fpinball
path: "XML/fp-p2.3 Version 1.xml"
required: false
bundled: true
category: game_data
size: 6278
description: "Physics 2.3 preset, first variant"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.3 Version 2.xml
system: fpinball
path: "XML/fp-p2.3 Version 2.xml"
required: false
bundled: true
category: game_data
size: 6278
description: "Physics 2.3 preset, second variant"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.4.xml
system: fpinball
path: "XML/fp-p2.4.xml"
required: false
bundled: true
category: game_data
size: 6267
description: "Physics 2.4 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.5.xml
system: fpinball
path: "XML/fp-p2.5.xml"
required: false
bundled: true
category: game_data
size: 6315
description: "Physics 2.5 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.5 slamtilt rubbers.xml
system: fpinball
path: "XML/fp-p2.5 slamtilt rubbers.xml"
required: false
bundled: true
category: game_data
size: 6335
description: "Physics 2.5 preset with the slamtilt rubber values"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.6.xml
system: fpinball
path: "XML/fp-p2.6.xml"
required: false
bundled: true
category: game_data
size: 6315
description: "Physics 2.6 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: fp-p2.7.xml
system: fpinball
path: "XML/fp-p2.7.xml"
required: false
bundled: true
category: game_data
size: 6314
description: "Physics 2.7 preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: Zendonius_v1.0.xml
system: fpinball
path: "XML/Zendonius_v1.0.xml"
required: false
bundled: true
category: game_data
size: 6333
description: "Zendonius physics preset"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: Zendonius_v1.1.xml
system: fpinball
path: "XML/Zendonius_v1.1.xml"
required: false
bundled: true
category: game_data
size: 6333
description: "Zendonius physics preset, second revision"
source_ref: "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73"
- name: zedonius_v1_0.zip
system: fpinball
path: "XML/zedonius_v1_0.zip"
required: false
bundled: true
category: game_data
size: 862294
description: "Texture pack for the Zendonius preset, resources 315 to 464"
source_ref: "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990"
- name: zedonius_v1_1.zip
system: fpinball
path: "XML/zedonius_v1_1.zip"
required: false
bundled: true
category: game_data
size: 862287
description: "Texture pack for the second Zendonius revision"
source_ref: "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990"
# -- plugins\*.dll, every one walked and loaded at startup --
- name: DesktopCam.dll
system: fpinball
path: "plugins/DesktopCam.dll"
required: false
bundled: true
size: 3388680
description: "Head tracking from any webcam, desktop geometry"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: "Bound to AVICAP32 and MSVFW32 and reads the cascade files below."
- name: Simple Cam.dll
system: fpinball
path: "plugins/Simple Cam.dll"
required: false
bundled: true
size: 3262728
description: "Head tracking from any webcam, cabinet geometry"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
- name: PS3Eye.dll
system: fpinball
path: "plugins/PS3Eye.dll"
required: false
bundled: true
size: 1699080
description: "Head tracking from a PlayStation Eye"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: "Bound to CLEyeMulticam.dll, which comes from the CL-Eye SDK."
- name: DesktopPS3Eye.dll
system: fpinball
path: "plugins/DesktopPS3Eye.dll"
required: false
bundled: true
size: 1813768
description: "PlayStation Eye tracking with desktop geometry"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
- name: HT-PS3Eyes.dll
system: fpinball
path: "plugins/HT-PS3Eyes.dll"
required: false
bundled: true
size: 1432272
description: "Two PlayStation Eye cameras tracking an infrared marker"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: >-
Keeps its calibration in HT-PS3Eyes.dat and HT-PS3Eyes-FixCamExport.dat
beside itself, both produced by the calibration pass.
- name: Kinect.dll
system: fpinball
path: "plugins/Kinect.dll"
required: false
bundled: true
size: 2792144
description: "Head tracking from a Kinect for Xbox 360"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: "Bound to Kinect10.dll and FaceTrackLib.dll."
- name: DesktopKinect.dll
system: fpinball
path: "plugins/DesktopKinect.dll"
required: false
bundled: true
size: 31952
description: "Kinect tracking with desktop geometry"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
- name: Kinect2.dll
system: fpinball
path: "plugins/Kinect2.dll"
required: false
bundled: true
size: 2791632
description: "Head tracking from a Kinect for Windows v2"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: "Bound to Kinect20.dll."
- name: FaceTrackLib.dll
system: fpinball
path: "plugins/FaceTrackLib.dll"
required: false
bundled: true
size: 920272
description: "Microsoft face tracking library used by the Kinect plugins"
source_ref: "DesktopKinect.dll, Kinect.dll import directories"
- name: FaceTrackData.dll
system: fpinball
path: "plugins/FaceTrackData.dll"
required: false
bundled: true
size: 10650832
description: "Model data for the face tracking library"
source_ref: "FaceTrackLib.dll .rdata, wide literal FaceTrackData.dll"
- name: FreeTrack.dll
system: fpinball
path: "plugins/FreeTrack.dll"
required: false
bundled: true
size: 95440
description: "Head tracking from a FreeTrack server"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
- name: TrackIR.dll
system: fpinball
path: "plugins/TrackIR.dll"
required: false
bundled: true
size: 20176
description: "Head tracking from a NaturalPoint TrackIR"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, TrackIR.dll .text:0x100018c7"
note: >-
Matches the name NPClient with strstr and pairs LoadLibraryA with
GetProcAddress on it. The plugin imports no registry function, so the
client library is resolved as a plain module name.
- name: PostFX.dll
system: fpinball
path: "plugins/PostFX.dll"
required: false
bundled: true
size: 39632
description: "Bloom and the unfinished ambient occlusion pass"
source_ref: "BAM.dll 1.5-408 .text:0x100cf5ff, BAM_Plugins PostFX/PostFX.cpp:41-45"
note: >-
Named in BAM.dll and compared against the enumerated file names, so it is
the one plugin the mod knows by name. Its nine GLSL programs are TEXT
resources inside the plugin, read with FindResourceA. Two builds circulate
under this name, the 39632 bytes of bam-setup.exe and 191240 bytes in
BAM-OpenVR.zip.
- name: PinballHighScore.dll
system: fpinball
path: "plugins/PinballHighScore.dll"
required: false
bundled: true
size: 918224
description: "Records high scores across tables"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
- name: PinballHighScore.cfg
system: fpinball
path: "plugins/PinballHighScore.cfg"
required: false
bundled: true
size: 1016
description: "Settings block the high score plugin reads and writes"
source_ref: "BAM_Plugins Common/BAM.h:136-157"
- name: PinballHighScore.db
system: fpinball
path: "plugins/PinballHighScore.db"
required: false
size: 45056
description: "Score database the plugin opens by name"
source_ref: "PinballHighScore.dll .rdata"
note: "Only BAM-OpenVR.zip carries a copy; the plugin creates one otherwise."
- name: PuPPlugin.dll
system: fpinball
path: "plugins/PuPPlugin.dll"
required: false
bundled: true
size: 240216
description: "PuPCOM script object drawing PinUP Player video onto table textures"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, PuPPlugin.dll .rdata IPuPCOM, PuPPlugin.dll PuPVideo"
note: "Takes BAM_GetTextureId and BAM_ReplaceTexture from the plugin API."
- name: icom.dll
system: fpinball
path: "plugins/icom.dll"
required: false
bundled: true
size: 67280
description: "Gives a table script the COM objects the cabinet stack exposes"
source_ref: "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, icom.dll .rdata ProgID pattern"
note: >-
Matches created objects against
PinUpPlayer, Vpinmame, B2S, PUPDMDControl, UltraDMD, PinSSF and
DirectOutput.
- name: OpenVR.dll
system: fpinball
path: "plugins/OpenVR.dll"
required: false
bundled: true
size: 419328
description: "Renders the table to an OpenVR headset"
source_ref: "BAM_Plugins OpenVR/main.cpp, BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c"
note: "Ships only in BAM-OpenVR.zip, which ES-DE also looks for as BAM-OpenVR\\."
- name: openvr_api.dll
system: fpinball
path: "plugins/openvr_api.dll"
required: false
bundled: true
size: 620760
description: "Valve OpenVR runtime interface"
source_ref: "OpenVR.dll import directory"
- name: haarcascade_frontalface_alt.xml
system: fpinball
path: "plugins/haarcascades/haarcascade_frontalface_alt.xml"
required: false
bundled: true
category: game_data
size: 919871
description: "OpenCV Haar cascade for frontal faces"
source_ref: "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata"
- name: haarcascade_frontalface_default.xml
system: fpinball
path: "plugins/haarcascades/haarcascade_frontalface_default.xml"
required: false
bundled: true
category: game_data
size: 1254733
description: "Second OpenCV Haar cascade for frontal faces"
source_ref: "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata"
- name: lbpcascade_frontalface.xml
system: fpinball
path: "plugins/lbpcascades/lbpcascade_frontalface.xml"
required: false
bundled: true
category: game_data
size: 51856
description: "OpenCV local binary pattern cascade for frontal faces"
source_ref: "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata"
# -- Named by the code, absent from both distributions --
- name: opencv_ffmpeg2410.dll
system: fpinball
required: false
description: "OpenCV 2.4.10 FFmpeg bridge, video files as a camera source"
source_ref: "BAM.dll 1.5-408 .text:0x102a6013-0x102a605b"
note: >-
LoadLibraryA followed by GetProcAddress on cvCreateFileCapture_FFMPEG,
cvGrabFrame_FFMPEG and the rest. A null handle leaves the entry points
unbound and only the file source is lost.
- name: CLEyeMulticam.dll
system: fpinball
required: false
description: "CL-Eye Platform SDK driver interface for the PlayStation Eye"
source_ref: "PS3Eye.dll, DesktopPS3Eye.dll, HT-PS3Eyes.dll import directories"
- name: Kinect10.dll
system: fpinball
required: false
description: "Kinect for Windows SDK 1.x runtime"
source_ref: "Kinect.dll, DesktopKinect.dll, FaceTrackLib.dll import directories"
- name: Kinect20.dll
system: fpinball
required: false
description: "Kinect for Windows SDK 2.0 runtime"
source_ref: "Kinect2.dll import directory"
- name: NPClient.dll
system: fpinball
required: false
description: "NaturalPoint TrackIR client library"
source_ref: "TrackIR.dll .rdata"
note: >-
Comes from a TrackIR install rather than from any BAM distribution, which
is why no path is given here.
analysis:
written_not_read:
note: >-
Opened only for writing, so they are output rather than something to
obtain. All of them sit in the BAM directory.
entries:
- what: "cfg\\<table>.cfg and cfg\\<table>.seq, per table settings and camera sequences"
source_ref: "BAM.dll 1.5-408 .text:0x10025e59, 0x100319b9, 0x10032bdb"
note: >-
Built as cfg\\<table> then finished with the extension. Saved from the
menu and read back on the next launch of the same table.
- what: "Cache\\<table>-shadows.zip, precomputed shadow maps"
source_ref: "BAM.dll 1.5-408 .text:0x10105c18-0x1010697f"
note: >-
Checked with GetFileAttributesA and rebuilt when absent. Holds
shadowmaps.txt and one <name>-shadows.tga per light, written through
the rendering engine.
- what: "set3points.dat, the three point calibration of the screen corners"
source_ref: "BAM.dll 1.5-408 .text:0x10077b80-0x10077bd7"
note: "fopen_s with wb, fwrite, fclose. No read site exists."
- what: "BAM_debug.log, BAM_CRASH.log and OpenGLdbg.log"
source_ref: "BAM.dll 1.5-408 .text:0x1007a45b, 0x1007ae0a, 0x100d4318-0x100d4391"
note: >-
The crash log is written from the fault handler installed at load
time; the other two only when the matching switch is on the command
line.
shipped_but_not_loaded:
note: "Present in a distribution with no code path that opens it"
entries:
- what: "zlib.dll in BAM-OpenVR.zip"
source_ref: "BAM.dll, renderingengine.dll and every plugin import directory"
note: >-
No shipped binary imports it and neither BAM.dll nor
renderingengine.dll names it in any string; both carry their own zlib.
- what: "License.txt, 3741 bytes"
source_ref: "bam-setup.exe payload"
note: "The zlib licence the loader source carries, copied into the install."
named_but_not_obtainable:
note: "A literal the code opens that no distribution can provide"
entries:
- what: "c:\\games\\ppmm.bin"
source_ref: "BAM.dll 1.5-408 .text:0x100cff69-0x100cffa5"
note: >-
fopen_s with rb then fread, guarded by two globals and reached only
after glGetFloatv has read the modelview and projection matrices. The
path is absolute and points at a directory no install creates.
platform_components:
note: >-
Named in import directories but supplied by Windows or by a Microsoft
redistributable, so they are prerequisites rather than payload.
entries:
- what: "MSVCP140.dll, VCRUNTIME140.dll, CONCRT140.dll and the api-ms-win-crt set"
source_ref: "BAM.dll, renderingengine.dll import directories"
note: "Visual C++ 2015 or later runtime. Neither distribution carries it."
- what: "MSVCR100.dll, MSVCR120.dll and MSVCP120.dll"
source_ref: "PostFX.dll, TrackIR.dll, DesktopKinect.dll, PinballHighScore.dll import directories"
note: "Visual C++ 2010 and 2013 runtimes, for the older plugins."
- what: "opengl32, glu32, dinput8, hid, avicap32, avifil32, msvfw32, d3d11, dxgi"
source_ref: "BAM.dll, renderingengine.dll, plugin import directories"
note: "Windows components."