Overview
Legacy evidence identifies this candidate as Williams (1998). The information below is preserved for recreation work but is not automatically treated as validated physical-machine fact.
Playfield devices
Switch, lamp/GI, and controlled-device candidates are in the adjacent machine definition. Source-specific implementation notes are retained below.
Custom mechanisms
No custom mechanism conclusion has been validated. Manuals, schematics, PinMAME source, and gameplay evidence still need to be checked.
Ball-state transitions
Ball paths, trough ordering, locks, kickouts, and causal transitions have not yet been normalized. Relevant source notes follow under Evidence notes.
Controller interactions
Controller callbacks and bindings are candidate evidence only until reconciled against PinMAME and physical documentation.
Service and setup information
Unknown; locate operator/service documentation.
Timing and tuning observations
Source timing values may describe a particular VPX implementation rather than physical hardware and require review.
Recreation guidance
Do not treat this partial definition as a complete authoring specification. Resolve every coverage requirement and conflict before promotion.
Evidence notes
platforms/wpc.json#/coils/1: Unbound legacy outputs recordc_flipper_lower_rightwas retained as a migration note only.platforms/wpc.json#/coils/2: Unbound legacy outputs recordc_flipper_lower_leftwas retained as a migration note only.platforms/wpc.json#/coils/3: Unbound legacy outputs recordc_flipper_upper_rightwas retained as a migration note only.platforms/wpc.json#/coils/4: Unbound legacy outputs recordc_flipper_upper_leftwas retained as a migration note only.games/mb.json#/switches/0._note: Directly set via Controller.Switch(11) in KeyDown/KeyUp handlers, not a VPX object hit subgames/mb.json#/switches/1._inferred_type: standup_targetgames/mb.json#/switches/1._note: Uses STHit bouncer system (STArray)games/mb.json#/switches/3._note: vpmNudge.TiltSwitch = 14games/mb.json#/switches/4._inferred_type: standup_targetgames/mb.json#/switches/4._note: Uses STHit bouncer system (STArray)games/mb.json#/switches/9._note: Set to 1 in Table1_Initgames/mb.json#/switches/10._inferred_type: standup_targetgames/mb.json#/switches/10._note: Uses STHit bouncer system (STArray)games/mb.json#/switches/11._note: Set to 0 in Table1_Init (Controller.Switch(24) = 0), inverted logic — normally closed optogames/mb.json#/switches/12._inferred_type: standup_targetgames/mb.json#/switches/12._note: Fired via vpmTimer.PulseSw 25 in DracTargets_Hit sub — rotating Dracula mechanism targetgames/mb.json#/switches/15._inferred_type: kickergames/mb.json#/switches/16._note: Fired via vpmTimer.PulseSw 31 in SolBallReleasegames/mb.json#/switches/21._inferred_type: kickergames/mb.json#/switches/24._inferred_type: standup_targetgames/mb.json#/switches/24._note: Uses STHit2 bouncer systemgames/mb.json#/switches/25._inferred_type: standup_targetgames/mb.json#/switches/25._note: Uses STHit2 bouncer systemgames/mb.json#/switches/26._inferred_type: standup_targetgames/mb.json#/switches/26._note: Uses STHit2 bouncer systemgames/mb.json#/switches/29._inferred_type: slingshotgames/mb.json#/switches/29._note: Fired via vpmTimer.PulseSw 51 in LeftSlingShot_Slingshot subgames/mb.json#/switches/30._inferred_type: slingshotgames/mb.json#/switches/30._note: Fired via vpmTimer.PulseSw 52 in RightSlingShot_Slingshot subgames/mb.json#/switches/31._inferred_type: bumpergames/mb.json#/switches/31._note: Fired via vpmTimer.PulseSw 53 in Bumper1_Hitgames/mb.json#/switches/32._inferred_type: bumpergames/mb.json#/switches/32._note: Fired via vpmTimer.PulseSw 54 in Bumper2_Hitgames/mb.json#/switches/33._inferred_type: bumpergames/mb.json#/switches/33._note: Fired via vpmTimer.PulseSw 55 in Bumper3_Hitgames/mb.json#/switches/44._note: PulseSw — momentary pulse switchgames/mb.json#/switches/45._note: PulseSw — momentary pulse switchgames/mb.json#/switches/48._note: Opto — handled by controller.getmech(2), no VPX objectgames/mb.json#/switches/49._note: Opto — handled by controller.getmech(2), no VPX objectgames/mb.json#/switches/50._note: Opto — handled by controller.getmech(2), no VPX objectgames/mb.json#/switches/51._note: Opto — handled by controller.getmech(2), no VPX objectgames/mb.json#/switches/52._note: Opto — handled by controller.getmech(2), no VPX objectgames/mb.json#/switches/53._note: Set directly in TargetsInit and BankMove_timer. Tracks Frank target bank position.games/mb.json#/switches/54._note: Set directly in TargetsInit and BankMove_timer. Tracks Frank target bank position.games/mb.json#/switches/55._note: Set in FrankMove_timer. Tracks Frankenstein table mechanism.games/mb.json#/switches/56._note: Set in FrankInit and FrankMove_timer. Tracks Frankenstein table mechanism.games/mb.json#/switches/57._inferred_type: standup_targetgames/mb.json#/switches/57._note: Uses STHit bouncer system (STArray)games/mb.json#/switches/58._inferred_type: standup_targetgames/mb.json#/switches/58._note: Uses STHit bouncer system (STArray)games/mb.json#/switches/59._note: Set in FrankInit and FrankMove_timer. Indicates Frankenstein is in hittable position.games/mb.json#/switches/60._note: PulseSw 117 — WPC virtual switch outside 8x8 matrix, used internally by ROMgames/mb.json#/coils/0._vbscript_callback: AutoPlungergames/mb.json#/coils/0._inferred_type: ball_managementgames/mb.json#/coils/1._vbscript_callback: SolBridegames/mb.json#/coils/1._inferred_type: mechanismgames/mb.json#/coils/1._note: Raises/lowers bride post (BrideH object)games/mb.json#/coils/2._vbscript_callback: SolMummygames/mb.json#/coils/2._inferred_type: mechanismgames/mb.json#/coils/2._note: Opens/closes mummy coffin animationgames/mb.json#/coils/3._vbscript_callback: vpmSolGate LGate,false,games/mb.json#/coils/3._inferred_type: gategames/mb.json#/coils/4._vbscript_callback: vpmSolGate Rgate,false,games/mb.json#/coils/4._inferred_type: gategames/mb.json#/coils/5._vbscript_callback: solKnockergames/mb.json#/coils/5._inferred_type: knockergames/mb.json#/coils/6._vbscript_callback: SolLockPostgames/mb.json#/coils/6._inferred_type: mechanismgames/mb.json#/coils/6._note: Raises/lowers ramp lock post (lock object)games/mb.json#/coils/7._vbscript_callback: SolBallReleasegames/mb.json#/coils/7._inferred_type: ball_managementgames/mb.json#/coils/7._note: Kicks ball from sw32 (trough ball 1)games/mb.json#/coils/8._inferred_type: slingshotgames/mb.json#/coils/8._note: SolCallback commented out in script but ROM still fires itgames/mb.json#/coils/9._inferred_type: slingshotgames/mb.json#/coils/9._note: SolCallback commented out in script but ROM still fires itgames/mb.json#/coils/10._inferred_type: bumpergames/mb.json#/coils/10._note: SolCallback commented out in script but ROM still fires itgames/mb.json#/coils/11._inferred_type: bumpergames/mb.json#/coils/11._note: SolCallback commented out in script but ROM still fires itgames/mb.json#/coils/12._inferred_type: bumpergames/mb.json#/coils/12._note: SolCallback commented out in script but ROM still fires itgames/mb.json#/coils/13._vbscript_callback: SolSaucergames/mb.json#/coils/13._inferred_type: kickergames/mb.json#/coils/14._vbscript_callback: SolRightScoopgames/mb.json#/coils/14._inferred_type: kickergames/mb.json#/coils/15._vbscript_callback: SetModLamp 117,games/mb.json#/coils/15._inferred_type: flashergames/mb.json#/coils/16._vbscript_callback: SetModLamp 118,games/mb.json#/coils/16._inferred_type: flashergames/mb.json#/coils/17._vbscript_callback: Flashsol19games/mb.json#/coils/17._inferred_type: flashergames/mb.json#/coils/17._note: Uses custom flupper dome flasher systemgames/mb.json#/coils/18._vbscript_callback: SetModLamp 120,games/mb.json#/coils/18._inferred_type: flashergames/mb.json#/coils/19._vbscript_callback: SolCreaturegames/mb.json#/coils/19._inferred_type: flashergames/mb.json#/coils/19._note: Also controls Creature animation — SetModLamp 121 + creature shake mechanismgames/mb.json#/coils/20._vbscript_callback: SetModLamp 122,games/mb.json#/coils/20._inferred_type: flashergames/mb.json#/coils/21._vbscript_callback: FlashSol23games/mb.json#/coils/21._inferred_type: flashergames/mb.json#/coils/21._note: Uses custom flupper dome flasher systemgames/mb.json#/coils/22._vbscript_callback: SetModLamp 124,games/mb.json#/coils/22._inferred_type: flashergames/mb.json#/coils/23._vbscript_callback: SetModLamp 125,games/mb.json#/coils/23._inferred_type: flashergames/mb.json#/coils/24._vbscript_callback: SetLamp 126,games/mb.json#/coils/24._inferred_type: flashergames/mb.json#/coils/25._vbscript_callback: SolFrankgames/mb.json#/coils/25._inferred_type: mechanismgames/mb.json#/coils/25._note: Drives Frankenstein body up/down animationgames/mb.json#/coils/26._vbscript_callback: SolBankgames/mb.json#/coils/26._inferred_type: mechanismgames/mb.json#/coils/26._note: Drives Frank target bank up/down movementgames/mb.json#/coils/27._vbscript_callback: SolDracgames/mb.json#/coils/27._inferred_type: mechanismgames/mb.json#/coils/27._note: Drives Dracula rotating coffin mechanism. Uses controller.getmech(2) for position.games/mb.json#/lamps/0._note: Multiple VPX objects: l11, l11a, l11halogames/mb.json#/lamps/1._note: Multiple VPX objects: l12c, l12games/mb.json#/lamps/2._note: Multiple VPX objects: l13, l13halogames/mb.json#/lamps/3._note: Multiple VPX objects: l14, l14halogames/mb.json#/lamps/4._note: Multiple VPX objects: l15, l15halogames/mb.json#/lamps/5._note: Multiple VPX objects: l16, l16halogames/mb.json#/lamps/6._note: Multiple VPX objects: l17, l17halogames/mb.json#/lamps/7._note: Multiple VPX objects: l18, l18halogames/mb.json#/lamps/8._note: Multiple VPX objects: l21, l21halogames/mb.json#/lamps/9._note: Multiple VPX objects: l22, l22halogames/mb.json#/lamps/11._note: Multiple VPX objects: l24c, l24, l24halo, l24chalogames/mb.json#/lamps/12._note: Multiple VPX objects: l25, l25halogames/mb.json#/lamps/13._note: Multiple VPX objects: l26, l26halogames/mb.json#/lamps/14._note: Multiple VPX objects: l27, l27halogames/mb.json#/lamps/15._note: Multiple VPX objects: l28, l28halogames/mb.json#/lamps/16._note: Multiple VPX objects: l31c, l31games/mb.json#/lamps/17._note: Multiple VPX objects: l32, l32halogames/mb.json#/lamps/19._note: Multiple VPX objects: l34, l34halogames/mb.json#/lamps/23._note: Multiple VPX objects: l38, l38halogames/mb.json#/lamps/25._note: Multiple VPX objects: l42, l42halogames/mb.json#/lamps/26._note: Multiple VPX objects: l43c, l43games/mb.json#/lamps/27._note: Multiple VPX objects: l44, l44halogames/mb.json#/lamps/28._note: Multiple VPX objects: l45, l45halogames/mb.json#/lamps/29._note: Multiple VPX objects: l46, l46halogames/mb.json#/lamps/30._note: Multiple VPX objects: l47, l47halogames/mb.json#/lamps/31._note: Multiple VPX objects: l48, l48halogames/mb.json#/lamps/38._note: Multiple VPX objects: l57, l57a, l57halogames/mb.json#/lamps/39._note: Multiple VPX objects: l58, l58halogames/mb.json#/lamps/40._note: Multiple VPX objects: l61, l61agames/mb.json#/lamps/41._note: Multiple VPX objects: l62, l62agames/mb.json#/lamps/42._note: Multiple VPX objects: l63, l63agames/mb.json#/lamps/43._note: Multiple VPX objects: l64, l64agames/mb.json#/lamps/44._note: Multiple VPX objects: l65, l65agames/mb.json#/lamps/45._note: Multiple VPX objects: l66, l66agames/mb.json#/lamps/46._note: Multiple VPX objects: l67, l67halogames/mb.json#/lamps/47._note: Multiple VPX objects: l68, l68halogames/mb.json#/lamps/50._note: Multiple VPX objects: l73, l73halogames/mb.json#/lamps/54._note: Multiple VPX objects: l77, l77halogames/mb.json#/lamps/55._note: Monster feature lamp. Multiple VPX objects: l81pp, l81pp2, l81f, l81f2, l81refgames/mb.json#/lamps/56._note: Monster feature lamp. Multiple VPX objects: l82pp, l82pp2, l82f, l82f2, l82refgames/mb.json#/lamps/57._note: Monster feature lamp. Multiple VPX objects: l83pp, l83pp2, l83f, l83f2games/mb.json#/lamps/58._note: Monster feature lamp. Multiple VPX objects: l84pp, l84pp2, l84f, l84f2games/mb.json#/lamps/59._note: Multiple VPX objects: l85, l85a, l85halogames/mb.json#/lamps/60._note: Multiple VPX objects: l86, l86a, l86halogames/mb.json#/_source/confidence_notes: High confidence on switches/coils from VBScript hit/unhit subs and SolCallback assignments. Lamp IDs from UpdateLamps NFadeL/NFadeLm calls. Flasher coils (17-26) use SolModCallback with SetModLamp/flasher routines. Dracula position switches (74-78) are opto-based and handled by controller.getmech(2), not direct VPX objects. Spinner (sw117) fires PulseSw 117 but 117 is outside the 8x8 matrix — this is a WPC virtual switch used internally. Commented-out SolCallbacks for slingshots (10-11) and bumpers (12-14) included as coils since the ROM still fires them.
Unresolved questions
- Is the I/O enumeration complete for every supported physical/controller variant?
- Which inferred VPX behaviors reflect real hardware, and which are table-script conveniences?
- Are all mechanism home states, sensors, motion constraints, and ball interactions documented?
Sources
legacy.game.mb:games/mb.jsonat the pinned migration revision.