Files
libretro/emulators/future-pinball-fploader.yml
T
Abdessamad Derraz 3ff241a189 fix: prove the cascade loads in BAM camera plugins
The four camera plugins link OpenCV statically. Refs now cite the
CascadeClassifier::load call, its path built from the plugin directory
and the three-entry table, and the empty detector that follows a
failed load.
2026-11-10 14:25:21 +01:00

1011 lines
52 KiB
YAML

emulator: "BAM 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"
version_basis:
kind: package
url: "https://www.ravarcade.pl/files/BAM_v1.5-408.zip"
artifact: "BAM_v1.5-408.zip, BAM/BAM.dll fixed file version 1.5.408.0"
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, and 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. The copy in BAM_v1.5-408.zip, served by
ravarcade.pl, has sha256
f3163c34adc3423d0b4c1f64399a91d090b4f7d0c54dc35049833466645645f7. 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, while 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 FUN_1002d470 0x1002d4ff-0x1002d58b, FUN_1002d0d0 0x1002d2b8-0x1002d33c,
FUN_100ae3b0 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 and calling LoadLibraryA on each under
SetErrorMode(SEM_FAILCRITICALERRORS). A module without BAM_load is freed, so a
plugin whose own imports are missing is skipped and BAM carries on. The rest
get BAM_PluginStart, BAM_PluginStop, BAM_GetCOM and the other entry points
bound. BAM_Plugins, published by the same author, holds the source of the
OpenVR and PostFX plugins and the common header, read at commit aa27aa3a.
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 FUN_100cf360 0x100cf3d2-0x100cf48c (GetModuleFileNameA,
plugins\, *.dll, _getcwd, _chdir, FindFirstFileA), 0x100cf74f-0x100cf767
(SetErrorMode, LoadLibraryA), 0x100cf78e-0x100cf7aa (BAM_load, FreeLibrary),
0x100cf7cf-0x100cf8c7 (BAM_PluginStart, BAM_PluginStop, BAM_GetCOM),
BAM_Plugins Common/BAM.h:117-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 descriptor renderingengine.dll IAT 0x1055ea0c-0x1055eb1f (69 functions,
no delay-load directory), FUN_1007d650 0x1007dccd-0x1007dcd6 (SetModuleWithResources, RE::Init),
FUN_101053d0 0x10105c65-0x10105cca (Cache\%s-shadows, %s\%s.%s with zip),
0x10105df9 (LoadFileToMemory)
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
sha1: "ad5f6f31e506d4458720ad3c809d529d48103622"
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
sha1: "b471bb4affb974e0af9874ee6fe28c4417809926"
description: "Rendering engine and asset loader behind BAM"
source_ref: "BAM.dll 1.5-408 import descriptor renderingengine.dll IAT 0x1055ea0c-0x1055eb1f (69 functions, no delay-load directory, so loader-resolved), FUN_1007d650 0x1007dccd (SetModuleWithResources), 0x1007dcd6 (RE::Init), FUN_1002d0d0 0x1002d2b8 (GetZipHandler on a ball zip), BAM_FPloader FPLoader.cpp:249-257"
note: >-
Bound statically by BAM.dll, so the injected LoadLibraryA fails without
it and no BAM code runs. 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
sha1: c4fc4467ccec0c9c2852a9342b5b500511b6c886
system: fpinball
required: false
bundled: true
size: 207104
description: "Head tracking calibration host"
source_ref: "BAM-Tracker.exe 1.5-408 (sha256 b2841b993dafde56) import descriptor BAM.dll IAT 0x41702c-0x41703b (BT::GetTrackersList, SetTracker, GetData, Kill, loader-resolved), FUN_00407460 0x407480 (GetTrackersList), 0x40750e (SetTracker), BAM.dll 1.5-408 FUN_100829a0 0x100831f0-0x10083260 (GetCommandLineA, _strlwr, strstr for bam-tracker.exe, flag 0x108009ab)"
note: >-
A separate program the user starts. It imports BAM.dll and drives its
trackers 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. Nothing in the loader or in BAM.dll starts it.
- name: ModelImporter.exe
sha1: dd3874742bfe5f9c2828cb9c4e249c2f4722bd51
system: fpinball
required: false
bundled: true
size: 4553472
description: "Converts models to the .fpm form tables import"
source_ref: "ModelImporter.exe 1.5-408 (sha256 a693549f20697b02) import descriptor renderingengine.dll IAT 0x71e4bc-0x71e60b (84 functions, loader-resolved), 0x42db53 (lpstrFilter 3D Models *.fpm;*.obj;*.ms3d;*.md5mesh;*.fbx), FUN_0042da70 0x42dae9 (GetOpenFileNameA), FUN_00431d40 0x431dc3 (ImportedModel::Load on the chosen file)"
note: >-
A separate program the user starts. It needs renderingengine.dll beside it
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
sha1: bcc92f9af26afb64a885ef789cbb10d6f3c7f453
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
unsourceable: "written by BAM as presets are added, no canonical file"
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
sha1: b701f91eae625a5e8f7bf56f104be506c8d1c8d8
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Baseball.zip
sha1: badfe5b7ab16c88f3fe255143546932c09fc2097
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Basketball 1.zip
sha1: 5aff2d72c317d58a6f1951811a31ec1b99dfdfe4
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Basketball 2.zip
sha1: 1fa517b848c69c0b2c2f3a32e4097a157fff3aa2
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Cue Black.zip
sha1: 9238286e57f346fd9b9ed3d8ffa977083b9d3feb
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Cue White.zip
sha1: 948eec0af66150dc908622bd48e867e85fb0d6c5
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: earth.zip
sha1: 0b30d717df74d90c26769d58055b507b89fdc1fc
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: EYETOY.zip
sha1: 89d8f29048176e8faff89cd48d0eda7b4875bf49
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Fireball.zip
sha1: 28a08c3911ef46aca8880587bed56dfa4f99062a
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Knight.zip
sha1: 969d38e02a6759629cc827501a049c60582d9531
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: latlong.zip
sha1: d2f65f0f32e21dfc65d61a384df525dedbc57a8a
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
- name: Soccer Ball 1.zip
sha1: 0a1e886e991d88761502d8434248e986bf9c238f
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 FUN_1002d470 0x1002d513-0x1002d52b (balls\\*.zip beside BAM.dll, FindFirstFileA), 0x1002d58b (FUN_1002d0d0: GetZipHandler 0x1002d2b8, LoadTexture BMP/452.BMP 0x1002d2e0)"
# -- Physics documents, reached through XML_Presets.txt --
- name: fp-p1.0.xml
sha1: 534a239cb7ae954fb9ad43de7fd79c0e5ee6473a
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
sha1: db023400242b4e5c34a14876e64dc9bfc3b6e3e1
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
sha1: 22ffd7dc5541bbf0048b7ad4af5bbc76034cad8f
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
sha1: fd56e59a4d36c8f3dbccd0ee7c24abc9e66c0495
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
sha1: 33970a777762fc53908499b8a0bfe2b5cbc50b99
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
sha1: 2b0792a18766a7750b6b5da8dc9607ed63e8dc77
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
sha1: ce9ab342ac870f9c5bcd53671cca05263ef27f0d
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
sha1: 716e15712d968f9ce0b94126bb7e0ec8a7862c29
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
sha1: b1e1764011daa11017b571428b4cd82c12eabd2e
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
sha1: f6abf69d826b5daef686c7ed15dd4349b47621a2
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
sha1: 468826d947e599ec79d9bc44ddbff75fbf60ede2
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
sha1: 694f2c0efa61c934345161c61782202bac208f9b
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
sha1: 213244dc655fec822218a8780668bc74b80ac8ff
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
sha1: 2563528f492e39b947f8836d10eefa1fd278f033
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
sha1: f585911868919bbf4f6d185a468ab01982ad1878
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
size: 3388680
description: "Head tracking from any webcam, desktop geometry"
source_ref: "BAM.dll 1.5-408 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "Bound to AVICAP32 and MSVFW32 and reads the cascade files below. The 1.5-408 zip moves it to removed_plugins\\, while bam-setup.exe installs it here."
- name: Simple Cam.dll
system: fpinball
path: "plugins/Simple Cam.dll"
required: false
size: 3262728
description: "Head tracking from any webcam, cabinet geometry"
source_ref: "BAM.dll 1.5-408 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "The 1.5-408 zip moves it to removed_plugins\\, while bam-setup.exe installs it here."
- name: PS3Eye.dll
system: fpinball
path: "plugins/PS3Eye.dll"
required: false
size: 1699080
description: "Head tracking from a PlayStation Eye"
source_ref: "BAM.dll 1.5-408 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "Bound to CLEyeMulticam.dll, which comes from the CL-Eye SDK. The 1.5-408 zip moves it to removed_plugins\\, while bam-setup.exe installs it here."
- name: DesktopPS3Eye.dll
system: fpinball
path: "plugins/DesktopPS3Eye.dll"
required: false
size: 1813768
description: "PlayStation Eye tracking with desktop geometry"
source_ref: "BAM.dll 1.5-408 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "The 1.5-408 zip moves it to removed_plugins\\, while bam-setup.exe installs it here."
- name: HT-PS3Eyes.dll
sha1: 61b0ff6832769f300c4278e279ce5bd4ce878827
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: >-
Keeps its calibration in HT-PS3Eyes.dat and HT-PS3Eyes-FixCamExport.dat
beside itself, both produced by the calibration pass.
- name: Kinect.dll
sha1: f7a2c21d2acc82eb9ff700fa426cc0b37edd851a
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "Bound to Kinect10.dll and FaceTrackLib.dll."
- name: DesktopKinect.dll
sha1: 19a04dbf9f43c9fc4ddb1d1357bff64526c3fec9
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
- name: Kinect2.dll
sha1: 22e32cd595f825b004c10d46746cd28c973f649b
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
note: "Bound to Kinect20.dll."
- name: FaceTrackLib.dll
sha1: 3e96611e075c0ffb82232b36b44dc6650627d9b3
system: fpinball
path: "plugins/FaceTrackLib.dll"
required: false
bundled: true
size: 920272
description: "Microsoft face tracking library used by the Kinect plugins"
source_ref: "Kinect.dll (sha256 3e3225474bfca5ad) import descriptor FaceTrackLib.dll IAT 0x1021e000-0x1021e007 (FTCreateImage, FTCreateFaceTracker, loader-resolved), 0x10003ae2 (FTCreateFaceTracker), DesktopKinect.dll (sha256 4aa59e24530b739e) import descriptor FaceTrackLib.dll IAT 0x10005000-0x10005007, 0x10002954 (FTCreateFaceTracker)"
note: >-
A load time dependency of the two Kinect 1 plugins, resolved from the
plugins\ working directory. Without it their LoadLibraryA fails and BAM
skips them.
- name: FaceTrackData.dll
sha1: aeb806a4330ce8716feffdd844e71084a86b2f88
system: fpinball
path: "plugins/FaceTrackData.dll"
required: false
bundled: true
size: 10650832
description: "Model data for the face tracking library"
source_ref: "FaceTrackLib.dll (sha256 381e24c0dc0e8471) FUN_10051fe0 0x10052072-0x100520af (no model path from the caller: GetModuleFileNameW, cut at the last backslash, StringCchCopyW of FaceTrackData.dll), 0x10052408 (FUN_1004d830 on <model>\\AAMModel\\3DModel.txt), FUN_10009460 0x10009520 (the part of the path up to .dll passed to FUN_10009390), FUN_10009390 0x1000940c (LoadLibraryExW with flags 0x22, as a data file), FUN_10009460 0x1000956a (FUN_10008fc0, FindResourceW type RT_RCDATA at 0x10009032 for the rest)"
note: >-
The face tracker's models are RCDATA resources inside this file, named
AAMModel, MouthModel, EvalModel, NeuralNet and ViewModel paths under it.
FaceTrackLib looks for it beside itself, so in plugins\.
- name: FreeTrack.dll
sha1: 8bb00560edc99048cda818cb81afa823e8d1a682
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
- name: TrackIR.dll
sha1: 000deaf4533b239cd3c22f250dcbb0d55123dc16
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent), TrackIR.dll (sha256 101dc5958e8e3df0) 0x10001970-0x1000198a (detours LoadLibraryA and GetProcAddress, originals kept at 0x100043c4 and 0x100043c8), FUN_100018c0 0x100018c7-0x100018e1 (strstr for NPClient, module handle kept), FUN_10001900 0x10001917-0x10001962 (NP_GetData from that module answered by the plugin's wrapper)"
note: >-
Loads nothing itself. It detours LoadLibraryA and GetProcAddress in the
game, so when Future Pinball loads NPClient.dll from the TrackIR install
the plugin keeps the module handle and puts its own NP_GetData in front of
the real one.
- name: PostFX.dll
sha1: 52a49fdbb9328a54e9add344def6636be3d151e1
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent), 0x100cf5ff-0x100cf605 (_stricmp of the file name with PostFX.dll), 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: PostFX.cfg
sha1: a191e0c95a4ef116d073f18ae7ccb8c0af3f68bb
system: fpinball
path: "plugins/PostFX.cfg"
required: false
bundled: true
size: 104
description: "Settings block of the PostFX plugin"
source_ref: "PostFX.dll (sha256 30f9ce9cc725420f) FUN_10001280 0x100012ca-0x100012db (PostFX, .cfg after the working directory), FUN_10001320 0x10001668 (fopen_s rb), 0x10001683 (fread 0x68 bytes), BAM_Plugins PostFX/main.cpp:101, BAM_Plugins PostFX/main.cpp:130, BAM_Plugins Common/BAM.h:117-157"
note: "Read as a raw 104 byte structure and written back when a value changes. The OpenVR package carries its own copy for its PostFX build."
- name: PinballHighScore.dll
sha1: 7734aecaa3cd1d019db365aecfd9df2a5ef8efbe
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent)"
- name: PinballHighScore.cfg
sha1: 852b39ba5db64e8a84e4b0612521caa5bd44fe02
system: fpinball
path: "plugins/PinballHighScore.cfg"
required: false
bundled: true
size: 1016
description: "Settings block the high score plugin reads and writes"
source_ref: "PinballHighScore.dll (sha256 f6fd7ed1c79302a7) FUN_10086c90 0x10086caa-0x10086cf9 (GetCurrentDirectoryA, backslash, PinballHighScore, .cfg), FUN_10084240 0x100842c5 (fopen_s rb), 0x100842e2 (fread 0x3f8 bytes), FUN_10084310 0x10084367 (fopen_s wb when the block changed)"
note: >-
Read whole as a 1016 byte block from the working directory, which BAM has
set to plugins\. Missing, the defaults stay in memory and the next change
writes it.
- 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 (sha256 f6fd7ed1c79302a7) FUN_100847e0 0x100847f5-0x100847fa (SQLite open of PinballHighScore.db, FUN_1007f9b0), 0x1008480e, 0x10084825 (CREATE TABLE localPlayerData and config), FUN_10085320 0x10085345-0x1008534a (the same open)"
note: "Only BAM-OpenVR.zip carries a copy. The plugin creates one otherwise."
- name: PuPPlugin.dll
sha1: 972607482b16139d1d53d919d3499a61e5ece7f8
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent), 0x100cf8c7 (GetProcAddress BAM_GetCOM), PuPPlugin.dll (sha256 a9b3f1d04621cfc2) FUN_10001f50 0x10002167-0x1000217f (GetProcAddress BAM_GetTextureId, BAM_ReplaceTexture), BAM_GetCOM 0x10002687-0x100026ea (GetModuleFileNameW of itself, LoadTypeLib, GetTypeInfoOfGuid)"
note: >-
Takes BAM_GetTextureId and BAM_ReplaceTexture from the plugin API and
hands BAM the PuPCOM object described by its own embedded type library.
- name: icom.dll
sha1: 83a3b55b2cc1b29997d50cf38108f6725d9a0df2
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 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent), icom.dll (sha256 b569f792df2cc10e) FUN_10001670 0x100016d1-0x100016d9 (std::wregex over the ProgID), 0x10001720 (CLSIDFromProgID), 0x1000173b (CoCreateInstance)"
note: >-
Creates the object a script asks for when its ProgID matches
(PinUpPlayer|Vpinmame|B2S|PUPDMDControl|UltraDMD|PinSSF|DirectOutput)\.(.*).
- name: iCom.cfg
sha1: 0aaf76f425c6e0f43a36197de768e67d9e035abb
system: fpinball
path: "plugins/iCom.cfg"
required: false
bundled: true
size: 4
description: "Security level setting of the icom plugin"
source_ref: "icom.dll (sha256 b569f792df2cc10e) FUN_100015f0 0x1000160a-0x10001659 (GetCurrentDirectoryA, backslash, iCom, .cfg), FUN_100019f0 0x10001a74 (fopen_s rb), 0x10001a8e (fread 4 bytes)"
note: "The one value behind the menu entry Security Level."
- name: OpenVR.dll
system: fpinball
path: "plugins/OpenVR.dll"
required: false
size: 419328
description: "Renders the table to an OpenVR headset"
source_ref: "BAM.dll 1.5-408 FUN_100cf360 (plugins::Load) 0x100cf48c (FindFirstFileA on plugins\\*.dll), 0x100cf75a (LoadLibraryA), 0x100cf794 (GetProcAddress BAM_load, FreeLibrary when absent), OpenVR.dll (sha256 52d598d0c964cd67) exports BAM_load 0x10001b90 and BAM_PluginStart 0x10001bf0, BAM_Plugins Common/BAM_inc.h:67-81, BAM_Plugins OpenVR/main.cpp:106"
note: "Ships only in BAM-OpenVR.zip, a separate build with its own BAM.dll, which ES-DE also looks for as BAM-OpenVR\\."
- name: openvr_api.dll
system: fpinball
path: "plugins/openvr_api.dll"
required: false
size: 620760
description: "Valve OpenVR runtime interface"
source_ref: "OpenVR.dll (sha256 52d598d0c964cd67) import descriptor openvr_api.dll IAT 0x1003e1cc-0x1003e1e3 (6 functions, loader-resolved), FUN_100066f0 0x1000670e (VR_InitInternal2), BAM_Plugins OpenVR/OpenVR_client.cpp:785"
note: "A load time dependency of OpenVR.dll, resolved from the plugins\\ working directory."
- name: OpenVR.cfg
sha1: 21cedece67cf04ee71617462c27b9b4a455e4fd7
system: fpinball
path: "plugins/OpenVR.cfg"
required: false
bundled: true
size: 128
description: "Settings block of the OpenVR plugin"
source_ref: "OpenVR.dll (sha256 52d598d0c964cd67) FUN_10001b10 0x10001b23-0x10001b77 (GetCurrentDirectoryA, backslash, OpenVR, .cfg), FUN_10001ef0 0x10002238-0x10002265 (FUN_10001b10, fopen rb, fread 0x90 bytes), reached from BAM_load at 0x10001bdd, BAM_Plugins OpenVR/main.cpp:42, BAM_Plugins OpenVR/main.cpp:106, BAM_Plugins OpenVR/main.cpp:291"
note: "The plugin reads up to 144 bytes, the copy in BAM-OpenVR.zip holds 128, and the rest keeps its defaults. Written back whenever the settings change."
- name: haarcascade_frontalface_alt.xml
sha1: 035eef24478ebf4b16c788dbd02f8b3a3f9b8951
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: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 0 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 0 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 0 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 0 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6"
note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on."
- name: haarcascade_frontalface_default.xml
sha1: 85a317ce2fc0415741a41736e99bd281d2437568
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: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 1 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 1 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 1 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 1 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6"
note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on."
- name: lbpcascade_frontalface.xml
sha1: d668cbe8712f062bcc6af898ebb2937b73dcfd2d
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: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 2 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 2 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 2 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 2 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6"
note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on."
# -- 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: "HT-PS3Eyes.dll (sha256 eda430e18e445668) import descriptor CLEyeMulticam.dll IAT 0x10108000-0x10108023 (9 functions, loader-resolved), 0x10004962 (CLEyeGetCameraCount), 0x10004a2f (CLEyeCreateCamera), PS3Eye.dll 0x10002480, 0x10002501, DesktopPS3Eye.dll 0x10002200, 0x1000229a (the same two calls)"
note: "A load time dependency of the three PlayStation Eye plugins. Without it their LoadLibraryA fails and BAM skips them."
- name: Kinect10.dll
system: fpinball
required: false
description: "Kinect for Windows SDK 1.x runtime"
source_ref: "Kinect.dll (sha256 3e3225474bfca5ad) import descriptor Kinect10.dll IAT 0x1021e1d8-0x1021e1fb (9 functions by ordinal, loader-resolved), FUN_10006980 0x10006ade (NuiInitialize, ordinal 14), DesktopKinect.dll (sha256 4aa59e24530b739e) FUN_10002e10 0x10002fa1 (NuiInitialize)"
note: "A load time dependency of the two Kinect 1 plugins. FaceTrackLib.dll does not import it."
- name: Kinect20.dll
system: fpinball
required: false
description: "Kinect for Windows SDK 2.0 runtime"
source_ref: "Kinect2.dll (sha256 3038bd37cfb6abff) import descriptor Kinect20.dll IAT 0x1021c1c8 (GetDefaultKinectSensor, loader-resolved), FUN_100036b0 0x100036c5 (GetDefaultKinectSensor)"
note: "A load time dependency of the Kinect 2 plugin. Without it its LoadLibraryA fails and BAM skips it."
- name: NPClient.dll
system: fpinball
required: false
description: "NaturalPoint TrackIR client library"
source_ref: "Future Pinball.exe 1.9.1.20101231 FUN_0045eff0 0x45f01a-0x45f08e (RegOpenKeyExA HKCU Software\\NaturalPoint\\NATURALPOINT\\NPClient Location, RegQueryValueExA Path), FUN_0045f100 0x45f1d9 (LoadLibraryA), TrackIR.dll FUN_100018c0 0x100018c7-0x100018e1 (the detoured LoadLibraryA keeps the handle of a name holding NPClient)"
note: >-
Loaded by Future Pinball itself from the TrackIR install directory the
registry names, and intercepted by the TrackIR plugin. It 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."