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, 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. 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\.cfg and cfg\
.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/.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 .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 .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 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 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 sha1: c4fc4467ccec0c9c2852a9342b5b500511b6c886 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 sha1: dd3874742bfe5f9c2828cb9c4e249c2f4722bd51 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 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/.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 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" - 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 .text:0x1002d513-0x1002d52d" # -- 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 .text:0x100cf400-0x100cf75c" 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 .text:0x100cf400-0x100cf75c" 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 .text:0x100cf400-0x100cf75c" 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 .text:0x100cf400-0x100cf75c" 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 .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 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 .text:0x100cf400-0x100cf75c" 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 .text:0x100cf400-0x100cf75c" - 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 .text:0x100cf400-0x100cf75c" 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: "DesktopKinect.dll, Kinect.dll import directories" - 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 .rdata, wide literal FaceTrackData.dll" - 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 .text:0x100cf400-0x100cf75c" - 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 .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 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 .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 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 .text:0x100cf400-0x100cf75c" - 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: "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 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 .text:0x100cf400-0x100cf75c, PuPPlugin.dll .rdata IPuPCOM, PuPPlugin.dll PuPVideo" note: "Takes BAM_GetTextureId and BAM_ReplaceTexture from the plugin API." - 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 .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 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, 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 import directory" - 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: "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata" - 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: "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata" - 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: "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\\
.cfg and cfg\\
.seq, per table settings and camera sequences" source_ref: "BAM.dll 1.5-408 .text:0x10025e59, 0x100319b9, 0x10032bdb" note: >- Built as cfg\\
then finished with the extension. Saved from the menu and read back on the next launch of the same table. - what: "Cache\\
-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 -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."